From 3049dfad1edc2a28b4cbf883e6be5e9dbbd5bed4 Mon Sep 17 00:00:00 2001 From: Nick the Sick Date: Thu, 13 Aug 2026 16:26:32 +0200 Subject: [PATCH 1/5] chore: migrate to TypeScript 7 and consolidate the @shared alias Toolchain and workspace plumbing, split out of the math/diagram block work so the feature commits stay readable. - Migrate the workspace to TypeScript 7 and upgrade the oxlint toolchain. - Give twoslash a TypeScript 5 via an npm alias (`typescript-5`) injected into `transformerTwoslash`, since twoslash still needs the classic JS compiler API that TypeScript 7 dropped. Upgrade docs to Next 16.3 and enable `experimental.useTypeScriptCli` for the same reason. - Make `@vitest/ui` a regular dependency of vite-plus via `packageExtensions` so it drops out of the pnpm peer key and the whole workspace shares one vitest instance. - Consolidate `@blocknote/shared` behind the repo-wide `@shared` alias across packages, examples and the playground. - Unify shiki on v4, declare missing workspace deps, and fix the `BrowserCommands` augmentation in the browser test utils. - Give in-memory versioning snapshots strictly increasing timestamps so `sortSnapshotsNewestFirst` no longer depends on tie-breaking. --- .claude/skills/docs-skill/SKILL.md | 36 + .claude/skills/testing-skill/SKILL.md | 30 +- AGENTS.md | 7 + docs/next.config.ts | 6 + docs/package.json | 43 +- docs/source.config.ts | 39 + docs/vercel.json | 3 +- examples/01-basic/01-minimal/tsconfig.json | 5 +- examples/01-basic/01-minimal/vite.config.ts | 4 + .../01-basic/02-block-objects/tsconfig.json | 5 +- .../01-basic/02-block-objects/vite.config.ts | 4 + .../01-basic/03-multi-column/tsconfig.json | 5 +- .../01-basic/03-multi-column/vite.config.ts | 4 + .../01-basic/04-default-blocks/tsconfig.json | 5 +- .../01-basic/04-default-blocks/vite.config.ts | 4 + .../05-removing-default-blocks/tsconfig.json | 5 +- .../05-removing-default-blocks/vite.config.ts | 4 + .../06-block-manipulation/tsconfig.json | 5 +- .../06-block-manipulation/vite.config.ts | 4 + .../07-selection-blocks/tsconfig.json | 5 +- .../07-selection-blocks/vite.config.ts | 4 + examples/01-basic/08-ariakit/tsconfig.json | 5 +- examples/01-basic/08-ariakit/vite.config.ts | 4 + examples/01-basic/09-shadcn/tsconfig.json | 5 +- examples/01-basic/09-shadcn/vite.config.ts | 4 + .../01-basic/10-localization/tsconfig.json | 5 +- .../01-basic/10-localization/vite.config.ts | 4 + .../11-custom-placeholder/tsconfig.json | 5 +- .../11-custom-placeholder/vite.config.ts | 4 + .../01-basic/12-multi-editor/tsconfig.json | 5 +- .../01-basic/12-multi-editor/vite.config.ts | 4 + .../13-custom-paste-handler/tsconfig.json | 5 +- .../13-custom-paste-handler/vite.config.ts | 4 + .../14-editor-scrollable/tsconfig.json | 5 +- .../14-editor-scrollable/vite.config.ts | 4 + examples/01-basic/15-shadowdom/tsconfig.json | 5 +- examples/01-basic/15-shadowdom/vite.config.ts | 4 + .../16-read-only-editor/tsconfig.json | 5 +- .../16-read-only-editor/vite.config.ts | 4 + .../17-no-trailing-block/tsconfig.json | 5 +- .../17-no-trailing-block/vite.config.ts | 4 + examples/01-basic/testing/tsconfig.json | 5 +- examples/01-basic/testing/vite.config.ts | 4 + .../01-file-uploading/tsconfig.json | 5 +- .../01-file-uploading/vite.config.ts | 4 + .../02-saving-loading/tsconfig.json | 5 +- .../02-saving-loading/vite.config.ts | 4 + examples/02-backend/03-s3/tsconfig.json | 5 +- examples/02-backend/03-s3/vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../01-ui-elements-remove/tsconfig.json | 5 +- .../01-ui-elements-remove/vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../04-side-menu-buttons/tsconfig.json | 5 +- .../04-side-menu-buttons/vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../11-uppy-file-panel/tsconfig.json | 5 +- .../11-uppy-file-panel/vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../13-custom-ui/tsconfig.json | 5 +- .../13-custom-ui/vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../15-advanced-tables/tsconfig.json | 5 +- .../15-advanced-tables/vite.config.ts | 4 + .../16-link-toolbar-buttons/tsconfig.json | 5 +- .../16-link-toolbar-buttons/vite.config.ts | 4 + .../17-advanced-tables-2/tsconfig.json | 5 +- .../17-advanced-tables-2/vite.config.ts | 4 + .../18-drag-n-drop/tsconfig.json | 5 +- .../18-drag-n-drop/vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../20-portal-elements/tsconfig.json | 5 +- .../20-portal-elements/vite.config.ts | 4 + .../01-theming-dom-attributes/tsconfig.json | 5 +- .../01-theming-dom-attributes/vite.config.ts | 4 + .../04-theming/02-changing-font/tsconfig.json | 5 +- .../02-changing-font/vite.config.ts | 4 + .../04-theming/03-theming-css/tsconfig.json | 5 +- .../04-theming/03-theming-css/vite.config.ts | 4 + .../04-theming-css-variables/tsconfig.json | 5 +- .../04-theming-css-variables/vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../04-theming/06-code-block/tsconfig.json | 5 +- .../04-theming/06-code-block/vite.config.ts | 4 + .../07-custom-code-block/package.json | 10 +- .../07-custom-code-block/tsconfig.json | 5 +- .../07-custom-code-block/vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../03-converting-blocks-to-md/tsconfig.json | 5 +- .../03-converting-blocks-to-md/vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../05-converting-blocks-to-pdf/package.json | 8 +- .../05-converting-blocks-to-pdf/tsconfig.json | 5 +- .../vite.config.ts | 4 + .../06-converting-blocks-to-docx/package.json | 5 +- .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../07-converting-blocks-to-odt/package.json | 5 +- .../07-converting-blocks-to-odt/tsconfig.json | 5 +- .../vite.config.ts | 4 + .../package.json | 2 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../10-static-html-render/tsconfig.json | 5 +- .../10-static-html-render/vite.config.ts | 4 + .../01-alert-block/tsconfig.json | 5 +- .../01-alert-block/vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../03-font-style/tsconfig.json | 5 +- .../03-font-style/vite.config.ts | 4 + .../04-pdf-file-block/tsconfig.json | 5 +- .../04-pdf-file-block/vite.config.ts | 4 + .../05-alert-block-full-ux/tsconfig.json | 5 +- .../05-alert-block-full-ux/vite.config.ts | 4 + .../06-toggleable-blocks/tsconfig.json | 5 +- .../06-toggleable-blocks/vite.config.ts | 4 + .../07-configuring-blocks/tsconfig.json | 5 +- .../07-configuring-blocks/vite.config.ts | 4 + .../08-non-editable-block/tsconfig.json | 5 +- .../08-non-editable-block/vite.config.ts | 4 + .../11-source-with-preview/index.html | 14 + .../11-source-with-preview/package.json | 31 + .../11-source-with-preview/tsconfig.json | 32 + .../11-source-with-preview/vite-env.d.ts | 1 + .../11-source-with-preview/vite.config.ts | 35 + .../draggable-inline-content/tsconfig.json | 5 +- .../draggable-inline-content/vite.config.ts | 4 + .../react-custom-blocks/tsconfig.json | 5 +- .../react-custom-blocks/vite.config.ts | 4 + .../react-custom-inline-content/tsconfig.json | 5 +- .../vite.config.ts | 4 + .../react-custom-styles/tsconfig.json | 5 +- .../react-custom-styles/vite.config.ts | 4 + .../01-partykit/tsconfig.json | 5 +- .../01-partykit/vite.config.ts | 4 + .../02-liveblocks/tsconfig.json | 5 +- .../02-liveblocks/vite.config.ts | 4 + .../07-collaboration/03-y-sweet/tsconfig.json | 5 +- .../03-y-sweet/vite.config.ts | 4 + .../04-electric-sql/tsconfig.json | 5 +- .../04-electric-sql/vite.config.ts | 4 + .../05-comments/tsconfig.json | 5 +- .../05-comments/vite.config.ts | 4 + .../06-comments-with-sidebar/tsconfig.json | 5 +- .../06-comments-with-sidebar/vite.config.ts | 4 + .../07-ghost-writer/tsconfig.json | 5 +- .../07-ghost-writer/vite.config.ts | 4 + .../07-collaboration/08-forking/tsconfig.json | 5 +- .../08-forking/vite.config.ts | 4 + .../09-comments-testing/tsconfig.json | 5 +- .../09-comments-testing/vite.config.ts | 4 + .../10-suggestion-multi-editor/tsconfig.json | 5 +- .../10-suggestion-multi-editor/vite.config.ts | 4 + .../11-versioning-yjs13/tsconfig.json | 5 +- .../11-versioning-yjs13/vite.config.ts | 4 + .../12-multi-doc-versioning/tsconfig.json | 5 +- .../12-multi-doc-versioning/vite.config.ts | 4 + .../13-versioning-yjs14/tsconfig.json | 5 +- .../13-versioning-yjs14/vite.config.ts | 4 + .../14-suggestion-gallery/package.json | 1 - .../14-suggestion-gallery/tsconfig.json | 5 +- .../14-suggestion-gallery/vite.config.ts | 4 + .../01-tiptap-arrow-conversion/tsconfig.json | 5 +- .../01-tiptap-arrow-conversion/vite.config.ts | 4 + .../08-extensions/02-versioning/tsconfig.json | 5 +- .../02-versioning/vite.config.ts | 4 + examples/09-ai/01-minimal/tsconfig.json | 5 +- examples/09-ai/01-minimal/vite.config.ts | 4 + examples/09-ai/02-playground/tsconfig.json | 5 +- examples/09-ai/02-playground/vite.config.ts | 4 + .../03-custom-ai-menu-items/tsconfig.json | 5 +- .../03-custom-ai-menu-items/vite.config.ts | 4 + .../09-ai/04-with-collaboration/tsconfig.json | 5 +- .../04-with-collaboration/vite.config.ts | 4 + .../09-ai/05-manual-execution/tsconfig.json | 5 +- .../09-ai/05-manual-execution/vite.config.ts | 4 + .../06-client-side-transport/tsconfig.json | 5 +- .../06-client-side-transport/vite.config.ts | 4 + .../09-ai/07-server-persistence/tsconfig.json | 5 +- .../07-server-persistence/vite.config.ts | 4 + .../react-vanilla-custom-blocks/tsconfig.json | 5 +- .../vite.config.ts | 4 + .../tsconfig.json | 5 +- .../vite.config.ts | 4 + .../react-vanilla-custom-styles/tsconfig.json | 5 +- .../vite.config.ts | 4 + .../vanilla-custom-side-menu/tsconfig.json | 5 +- .../vanilla-custom-side-menu/vite.config.ts | 4 + package.json | 7 +- packages/ariakit/package.json | 2 +- packages/ariakit/vite.config.ts | 2 +- packages/code-block/package.json | 12 +- packages/code-block/vite.config.ts | 2 +- packages/core/package.json | 28 +- .../Versioning/inMemoryVersioning.ts | 16 +- .../y/extensions/AttributionExtension.test.ts | 10 + .../core/src/y/extensions/Versioning.test.ts | 27 +- .../src/yjs/extensions/Versioning.test.ts | 22 +- packages/core/vite.config.ts | 2 +- .../template-react/tsconfig.json.template.tsx | 7 +- .../vite.config.ts.template.tsx | 4 + packages/dev-scripts/package.json | 2 +- packages/dev-scripts/vite.config.ts | 2 +- packages/mantine/package.json | 2 +- packages/mantine/vite.config.ts | 2 +- packages/react/package.json | 2 +- packages/react/vite.config.ts | 2 +- packages/server-util/package.json | 4 +- packages/server-util/vite.config.ts | 2 +- packages/shadcn/package.json | 2 +- packages/shadcn/vite.config.ts | 2 +- packages/xl-ai-server/package.json | 2 +- packages/xl-ai-server/vite.config.ts | 2 +- packages/xl-ai/package.json | 3 +- packages/xl-ai/vite.config.ts | 2 +- packages/xl-docx-exporter/package.json | 6 +- packages/xl-docx-exporter/vite.config.ts | 2 +- packages/xl-email-exporter/package.json | 2 +- packages/xl-email-exporter/vite.config.ts | 2 +- packages/xl-multi-column/package.json | 4 +- packages/xl-multi-column/vite.config.ts | 2 +- packages/xl-odt-exporter/package.json | 6 +- packages/xl-odt-exporter/vite.config.ts | 13 +- packages/xl-pdf-exporter/package.json | 8 +- packages/xl-pdf-exporter/vite.config.ts | 4 +- patches/katex@0.16.47.patch | 44 + playground/package.json | 7 +- playground/src/examples.gen.tsx | 108 +- playground/tsconfig.json | 5 +- playground/vercel.json | 4 + playground/vite.config.ts | 53 +- pnpm-lock.yaml | 6300 +++++++++-------- pnpm-workspace.yaml | 49 +- scripts/release.mjs | 2 +- shared/README.md | 7 + shared/formatConversionTestUtil.ts | 56 +- shared/package.json | 18 +- shared/tsconfig.json | 3 +- shared/vite.config.ts | 6 +- tests/Dockerfile | 9 +- tests/docker-run.sh | 11 +- tests/package.json | 7 + tests/src/utils/context.ts | 50 +- tests/src/utils/editor.ts | 2 +- tests/src/utils/mouse.ts | 18 +- tests/src/utils/positionalMouse.ts | 19 +- tests/src/vitest-browser.d.ts | 9 - tests/vite.config.browser.ts | 25 +- tests/vite.config.ts | 10 +- tests/vitestSetup.browser.ts | 2 +- 276 files changed, 4847 insertions(+), 3388 deletions(-) create mode 100644 .claude/skills/docs-skill/SKILL.md create mode 100644 examples/06-custom-schema/11-source-with-preview/index.html create mode 100644 examples/06-custom-schema/11-source-with-preview/package.json create mode 100644 examples/06-custom-schema/11-source-with-preview/tsconfig.json create mode 100644 examples/06-custom-schema/11-source-with-preview/vite-env.d.ts create mode 100644 examples/06-custom-schema/11-source-with-preview/vite.config.ts create mode 100644 patches/katex@0.16.47.patch delete mode 100644 tests/src/vitest-browser.d.ts diff --git a/.claude/skills/docs-skill/SKILL.md b/.claude/skills/docs-skill/SKILL.md new file mode 100644 index 0000000000..ad44bea9c5 --- /dev/null +++ b/.claude/skills/docs-skill/SKILL.md @@ -0,0 +1,36 @@ +--- +name: docs-skill +description: Conventions and verification workflow for writing and restructuring the documentation site (docs/content). Should be used when adding, editing, or reviewing docs pages. +--- + +# Documentation + +The documentation site lives in `docs/content/docs` (fumadocs + Next.js). These are the conventions for writing and verifying it. + +## Structure principles + +- **Simple first, architecture later.** Lead every feature section with the shortest working setup (install, one snippet, "that's all"). Explain the underlying architecture and extension points afterwards, or in a separate "Custom …" section. Never make the reader wade through the extension contract to find the pre-configured default. +- **One page per feature the user searches for.** Users scan the sidebar for the thing they want — don't bury a feature inside a page about a different feature. Splitting a long page is preferable to a grab-bag: stale content hides in 400-line pages and gets found in 100-line ones. +- **Single-source each mechanism.** Document a mechanism in exactly one place — the page that owns the concept — and link to it from everywhere else it's relevant. Copies of the same explanation on multiple pages drift apart independently. +- **Complete implementations are live examples; page snippets are walkthroughs.** A page-length code block duplicating a full implementation is never compiled or run, so it silently rots — put the complete implementation in an embedded example (which is type-checked and rendered, so it can't) and keep page snippets small, each carrying one concept: a config shape, a component invocation, a signature. +- **Setup snippets are self-contained.** A snippet the reader is meant to copy includes the imports for each symbol it uses — without them it doesn't work when copied. Walkthrough fragments of an implementation the page's example completes may omit imports. +- **Order sections by audience breadth.** Content most readers need comes first; content specific to one feature or use case goes at the end of the page, even when it feels related to an earlier section. A reader following a cross-link to the specific section finds it regardless of position — the reader skimming the page shouldn't wade through it. +- **Live examples cap the setup they demonstrate.** Place an `` embed after the prose has introduced everything the example's code uses — an embed whose `App.tsx` shows APIs the page never mentions teaches by confusion. Introduced means named, given a purpose, and linked — the example itself (and the linked component pages) can carry the full wiring; expanding every integration inline pushes the example too far down the page. Not at the top (a demo without context motivates but doesn't teach) and not at the bottom (readers rarely reach it); at the end of the "getting it working" narrative, before advanced/optional topics. If an example uses more API than the page should cover, simplify the example rather than the rule. + +- **Signature snippets tell the truth for one API.** A snippet formatted as a type signature documents exactly that export — never fold variant differences ("only for the X subpath…") into a doc-comment inside it. Show the signature that is true everywhere, and describe variant-specific options as prose in the variant's own section. +- **Caveats must be actionable.** Only note a limitation if the reader can do something with it (install a package, avoid a pattern, pass an option). Speculative hedges ("rare X may behave differently") and defensive implementation details (what a function guards against internally) erode trust without helping anyone act — cut them. + +## Verifying content + +- **Verify snippets against the actual package exports, not memory or existing docs.** APIs drift; grep the package source for every symbol a snippet imports (`export function X` / `export const X`) and check option names and shapes. Content copied forward without this check stays wrong after refactors. +- `node docs/validate-links.mjs` validates internal routes **and** `#anchors` (works from any directory). Anchors follow github-slugger: lowercased, spaces to dashes, symbols dropped — "A & B" becomes `#a--b`. +- **Render before declaring done**: `pnpm --filter docs run dev` (port 3000), then check each touched route returns 200 (the dev server compiles MDX on demand, so a 200 also proves the MDX compiles) and grep the HTML for expected headings/anchor ids. For visual checks, `cd tests && pnpm exec playwright screenshot --full-page --wait-for-timeout 8000 ` and inspect the image — example embeds load lazily, so give them the wait. + +## Site mechanics + +- Navigation order comes from each directory's `meta.json` (`pages` array, `"..."` = the rest alphabetically). Directories without a `meta.json` sort alphabetically. +- `index.mdx` pages ending in `` list their section's pages automatically from frontmatter — new pages appear without extra wiring. +- `` embeds a live example; the name is the example's slug without number prefixes (`examples/06-custom-schema/09-math-block` → `custom-schema/math-block`). +- Frontmatter needs `title` and `description`; the description doubles as the CardTable card text. +- Strange dev-server behavior — `JSON.parse` errors on unrelated pages, new pages missing from the sidebar — usually means stale or corrupted generated state, not a content bug: restart the dev server (fumadocs' source map is built at startup) and, if errors persist, delete `docs/.next` (regenerable cache) before debugging further. +- Renaming or removing a heading breaks external links to its anchor silently — when restructuring, leave a pointer (e.g. a short "Related" section) where a well-known anchor used to be. diff --git a/.claude/skills/testing-skill/SKILL.md b/.claude/skills/testing-skill/SKILL.md index ab70133c11..982d9ea03b 100644 --- a/.claude/skills/testing-skill/SKILL.md +++ b/.claude/skills/testing-skill/SKILL.md @@ -17,9 +17,13 @@ In most cases, once a feature, bug fix, or other modification has been written, `/packages/xl-*`: Contain tests for functionality included in a given `xl-*` package. +### Colocated Browser Unit Tests + +`packages/*/src/**/*.browser.test.{ts,tsx}`: Unit tests for browser-only implementations (e.g. canvas or DOM-dependent code) live next to the code they test, with a `.browser.test` suffix. They run as part of the browser suite in Docker (the `tests` package's browser config includes them); the packages' own node-mode vitest configs exclude them. Use this when the unit under test genuinely needs a real browser — everything else should be a plain node unit test. + ### End-to-End Tests -`tests/src/end-to-end`: Any test which interacts with the editor UI or simulates user interaction goes here. New subdirectories can be added if the functionality being tested is not covered by any of the existing ones. Important note about existing E2E tests - many are written poorly and should only loosely be used as reference. We want to avoid abstraction layers and `waitForTimeout` as much as possible. +`tests/src/end-to-end`: Tests that need a real browser and span multiple packages go here — chiefly tests which interact with the editor UI or simulate user interaction, but also browser integration tests that exercise complete flows without interaction (e.g. exporting a full document, static rendering). New subdirectories can be added if the functionality being tested is not covered by any of the existing ones. Important note about existing E2E tests - many are written poorly and should only loosely be used as reference. We want to avoid abstraction layers and `waitForTimeout` as much as possible. ## When & How to Add Tests @@ -29,6 +33,8 @@ However, this may not be true when adding edge case handling or a new feature, w We want to avoid adding end-to-end tests where it's possible to use unit tests instead. +**Don't use jsdom** (`@vitest-environment jsdom`) in new tests. It's a murky middle ground — `document` exists but rendering doesn't — which makes browser-capability checks pass while the capability itself is broken. Use the default node environment with pluggable seams for logic, and the browser suite (`tests/src/end-to-end`, vitest browser mode in Docker) for anything that needs real rendering. + ## Running & Updating Tests ### Unit Tests @@ -39,24 +45,18 @@ Updating tests can be done by adding the `-u` argument, i.e. `vp run test -u`. A ### End-to-End Tests -End-to-end tests run inside a docker container. While its possible to run them outside of it, we do not have existing snapshots to compare results with, and the results sometimes differ to when they're run within Docker, so it's not worth doing. - -To run end-to-end tests, you must first build the project and run the preview. You can do this by running `vp start` from the root directory. +End-to-end tests run in vitest browser mode (chromium, firefox and webkit) inside a Docker container, so screenshot baselines are identical locally and on CI. Run them from the repository root: -You can then run the tests from the `/tests` directory using the following command: - -``` -docker run --rm -e RUN_IN_DOCKER=true --network host -v $(pwd)/..:/work/ -w /work/tests -it mcr.microsoft.com/playwright:v1.51.1-noble npx playwright test +```bash +bash tests/docker-run.sh -e CI=1 -- --run [filters] ``` -A specific test file may be targeted by appending its name, i.e. `... npx playwright test fileName`. Individual tests in a file may be disabled using `skip`, i.e. `test.skip("Test name", ...)` (remember to revert this once all tests pass). +A specific test file may be targeted by appending (part of) its name as a filter. A single browser may be targeted with `--project "e2e (chromium)"`. Individual tests in a file may be disabled using `skip`, i.e. `test.skip("Test name", ...)` (remember to revert this once all tests pass). -Updating tests can be done by adding the `-u` argument, i.e. `... npx playwright test -u`. All of the other things you can do to scope which tests to target still apply. +Screenshot baselines can be regenerated with the `-u` argument, which must come **after** the filters (`--run -u`): written as `--run -u `, the filter is parsed as the flag's value and the **whole** suite runs in update mode, silently rewriting unrelated baselines. Note that `-u` only rewrites baselines whose comparison **fails** — a small intended change (e.g. a short text edit) that fits inside the suite's 2% pixel tolerance leaves the baseline stale while the test passes. To force a fresh capture, delete the baseline file first. Baselines are per-browser (`--linux.png`); after regenerating, always inspect the images before committing them. -Note that running this command may result in errors or other issues, listed below along with what to do when encountered: - -- **Tests failing to navigating to preview**: project should be built and the preview started, after which the command should be run again. -- **Docker not running**: the user should be notified to launch Docker. -- **Incorrect Playwright image version**: update Playwright images and re-run the command. +If Docker isn't running, notify the user to launch it. When testing a visual change, prefer writing screenshots to verify that the change is working as expected. + +**Screenshots of tall content**: browser-suite tests run inside a tester iframe sized to the browser window (1280x720), and element screenshots only contain what the iframe actually paints — anything below its fold captures as blank white, silently. Growing the iframe with `page.viewport()` alone doesn't fix this at full resolution: the harness scales the iframe down to fit the window, shrinking the resulting baseline (`static.test.tsx` accepts that trade-off). For full-resolution captures use `screenshotFull` (`tests/src/utils/screenshotFull.ts`), which grows the iframe past the content and neutralizes the harness's scale transform during the capture — the same mechanism upstream Vitest adopted in vitest-dev/vitest#9745 (milestone 5.0.0; the util can be deleted once vite-plus ships it). Always eyeball newly generated baselines for truncation. diff --git a/AGENTS.md b/AGENTS.md index 8b992c6744..22b10b6527 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,6 +2,13 @@ BlockNote is a block-based rich text editor for the web. It's designed as a batteries-included product that offers a solid user experience with minimal setup. However, it also offers extensibility via plugins and custom block types. +# Code Conventions + +- **Leverage the type system so mistakes surface at compile time, not runtime.** Model states and outcomes explicitly: discriminated unions over boolean flags with optional fields, no `any` or casts that hide a case a caller should handle, exhaustive `switch`es over union members. If the compiler can enforce a contract, prefer that over documentation or runtime checks. +- **Expected failures are values, not exceptions.** When an operation can fail as part of normal use (canonical example: parsing user input, like LaTeX or Mermaid source), that failure is part of the function's contract — so it belongs in the return type. Catch it at the lowest level (the small adapter around the throwing third-party call) and convert it into a Result-style discriminated union (e.g. `{ error?: undefined; ...data } | { error: string }`). The failure then propagates through the type system, and the compiler forces every caller to decide how to handle it. Exceptions don't appear in TypeScript signatures, so a thrown expected error is invisible to callers — and a `try/catch` around a whole pipeline conflates expected failures with genuine bugs. +- **Exceptions are only for unexpected failures** — broken invariants, environment or infrastructure problems, programmer errors. Let them propagate and fail loudly; don't catch-and-continue. Corollary: never render a caught exception's message into user-facing output (documents, UI) — a catch-all can capture anything, and arbitrary messages can leak internals. Only messages carried by typed expected-error results are known-safe to display. +- **Prefer `function name() {}` declarations over `const name = () => {}`** for named functions (anonymous callbacks and returned closures can stay arrows). + # Common Commands All commands below are listed under `package.json` in the project root. See `vite.config.ts` for relevant configuration settings. diff --git a/docs/next.config.ts b/docs/next.config.ts index 0879257822..fafa53592a 100644 --- a/docs/next.config.ts +++ b/docs/next.config.ts @@ -10,6 +10,12 @@ const config = { reactStrictMode: true, serverExternalPackages: ["typescript", "twoslash"], reactCompiler: true, + // TypeScript 7 ships only the native `tsc` binary; it no longer exposes the + // JS compiler API that Next's in-process type check uses. Shell out to the + // CLI instead. + experimental: { + useTypeScriptCli: true, + }, redirects, images: { remotePatterns: [ diff --git a/docs/package.json b/docs/package.json index 18b6792b6f..a2771cd1cf 100644 --- a/docs/package.json +++ b/docs/package.json @@ -8,6 +8,7 @@ "dev:email": "next dev", "prebuild:site": "vp run --filter @blocknote/dev-scripts gen", "build:site": "fumadocs-mdx && NODE_OPTIONS='--max-old-space-size=6144' next build", + "build:vercel": "cd .. && pnpm exec vp run --filter 'docs...' build && pnpm --filter @blocknote/dev-scripts run gen && cd docs && fumadocs-mdx && NODE_OPTIONS='--max-old-space-size=6144' next build", "start": "next start", "types:check": "fumadocs-mdx && next typegen && tsc --noEmit", "postinstall": "[ -n \"$SKIP_DOCS_POSTINSTALL\" ] || fumadocs-mdx", @@ -22,7 +23,9 @@ "@blocknote/ariakit": "workspace:*", "@blocknote/code-block": "workspace:*", "@blocknote/core": "workspace:*", + "@blocknote/diagram-block": "workspace:*", "@blocknote/mantine": "workspace:*", + "@blocknote/math-block": "workspace:*", "@blocknote/react": "workspace:*", "@blocknote/server-util": "workspace:*", "@blocknote/shadcn": "workspace:*", @@ -32,6 +35,7 @@ "@blocknote/xl-multi-column": "workspace:*", "@blocknote/xl-odt-exporter": "workspace:*", "@blocknote/xl-pdf-exporter": "workspace:*", + "@floating-ui/react": "^0.27.18", "@fumadocs/base-ui": "16.5.0", "@liveblocks/client": "^3.19.5", "@liveblocks/react": "^3.19.5", @@ -48,13 +52,14 @@ "@polar-sh/sdk": "^0.42.2", "@react-email/components": "^1.0.4", "@react-email/render": "^2.0.4", - "@react-pdf/renderer": "^4.3.0", + "@react-pdf/math": "^2.0.1", + "@react-pdf/renderer": "^4.5.1", "@sentry/nextjs": "^10.34.0", - "@shikijs/core": "^4", - "@shikijs/engine-javascript": "^4", - "@shikijs/langs-precompiled": "^4", - "@shikijs/themes": "^4", - "@shikijs/types": "^4", + "@shikijs/core": "^4.4.3", + "@shikijs/engine-javascript": "^4.4.3", + "@shikijs/langs-precompiled": "^4.4.3", + "@shikijs/themes": "^4.4.3", + "@shikijs/types": "^4.4.3", "@tiptap/core": "^3.29.2", "@uppy/core": "^3.13.1", "@uppy/dashboard": "^3.9.1", @@ -69,19 +74,28 @@ "@uppy/xhr-upload": "^3.4.0", "@vercel/analytics": "^1.6.1", "@y-sweet/react": "^0.6.3", + "@y/prosemirror": "^2.0.0-6", + "@y/protocols": "^1.0.6-rc.1", + "@y/websocket": "^4.0.0-3", + "@y/y": "^14.0.0-rc.23", "ai": "^6.0.5", "better-auth": "~1.4.15", "better-sqlite3": "^12.6.2", "class-variance-authority": "^0.7.1", + "docx": "^9.6.1", "framer-motion": "^12.26.2", "fumadocs-core": "16.5.0", "fumadocs-mdx": "^14.2.6", "fumadocs-twoslash": "^3.1.12", "fumadocs-typescript": "^5.1.1", "fumadocs-ui": "npm:@fumadocs/base-ui@16.5.0", + "katex": "^0.16.11", + "lib0": "1.0.0-rc.22", "lucide-react": "^0.562.0", + "mathjax-full": "^3.2.2", + "mermaid": "^11.0.0", "motion": "^12.28.1", - "next": "^16.2.7", + "next": "^16.3.0", "next-themes": "^0.4.6", "nodemailer": "^7.0.12", "pg": "^8.17.1", @@ -92,18 +106,13 @@ "react-icons": "^5.5.0", "react-use-measure": "^2.1.7", "scroll-into-view-if-needed": "^3.1.0", - "shiki": "^4", + "shiki": "^4.4.3", "tailwind-merge": "^3.4.0", + "typescript-5": "npm:typescript@^5.9.3", "y-partykit": "^0.0.25", + "y-websocket": "^2.1.0", "yjs": "^13.6.27", - "zod": "^4.3.5", - "@y/protocols": "^1.0.6-rc.1", - "@y/websocket": "^4.0.0-3", - "@y/y": "^14.0.0-rc.23", - "@y/prosemirror": "^2.0.0-6", - "@floating-ui/react": "^0.27.18", - "lib0": "1.0.0-rc.22", - "y-websocket": "^2.1.0" + "zod": "^4.3.5" }, "devDependencies": { "@blocknote/code-block": "workspace:*", @@ -132,6 +141,6 @@ "serve": "^14.2.6", "tailwindcss": "^4.1.18", "tw-animate-css": "^1.4.0", - "typescript": "^5.9.3" + "typescript": "^7.0.2" } } diff --git a/docs/source.config.ts b/docs/source.config.ts index b67079e70b..051d006bde 100644 --- a/docs/source.config.ts +++ b/docs/source.config.ts @@ -1,3 +1,5 @@ +import { createRequire } from "node:module"; +import path from "node:path"; import { rehypeCodeDefaultOptions } from "fumadocs-core/mdx-plugins"; import { defineConfig, @@ -7,8 +9,44 @@ import { } from "fumadocs-mdx/config"; import { transformerTwoslash } from "fumadocs-twoslash"; import { createFileSystemTypesCache } from "fumadocs-twoslash/cache-fs"; +import ts from "typescript-5"; import { z } from "zod/v4"; +// `twoslash` (which type-checks the code samples in our MDX) needs the classic +// TypeScript JavaScript API - `ts.sys`, `createLanguageService`, and friends. +// TypeScript 7 does not ship one: its `typescript` package only exposes +// `{ version }` plus a native `tsc` binary, so the `import ts from "typescript"` +// inside twoslash yields `undefined` for `ts.sys` and the docs build fails while +// highlighting the first `twoslash` code fence. +// +// We can't just add `typescript@5` to this package: `vite-plus`/`vitest` take +// TypeScript as an (optional, transitive) peer, so a second TypeScript version +// in a workspace importer splits them into multiple physical instances, and a +// package that lands on the other instance gets a second `SnapshotClient` - +// every `toMatchFileSnapshot` then fails with "The snapshot state for '...' is +// not found". (`pnpm-workspace.yaml` pins `@types/node` and `jsdom` for the same +// reason.) An `npm:` alias is invisible to pnpm's peer resolution, so it gives +// us a TypeScript 5 that can never enter a `vitest` peer key. We hand it to +// twoslash explicitly below; `typescript` itself stays on 7 for `tsc --noEmit` +// and Next's `experimental.useTypeScriptCli`. +// +// Once twoslash supports the TypeScript 7 API (per the TypeScript 7 release +// notes, an API is expected in 7.1), drop the alias and this wiring. +const require = createRequire(import.meta.url); +// Resolves to `.../typescript/lib/typescript.js`; twoslash passes the directory +// to `@typescript/vfs` to find `lib.*.d.ts`. Without it the lib files are looked +// up next to the ambient (TypeScript 7) package, where they don't exist. +const tsLibDirectory = path.dirname(require.resolve("typescript-5")); +// twoslash types this option as `typeof import("typescript")`, which here is the +// TypeScript 7 stub - `{ version, versionMajorMinor, default }`. The aliased +// TypeScript 5 has everything twoslash actually calls, but no `default` export, +// so it fails a structural check against a shape that only looks like that +// because the ambient `typescript` is the package twoslash can't use anyway. +type TwoslashOptions = NonNullable< + NonNullable[0]>["twoslashOptions"] +>; +const tsModule = ts as unknown as TwoslashOptions["tsModule"]; + // You can customise Zod schemas for frontmatter and `meta.json` here // see https://fumadocs.dev/docs/mdx/collections export const docs = defineDocs({ @@ -72,6 +110,7 @@ export default defineConfig({ ...(rehypeCodeDefaultOptions.transformers ?? []), transformerTwoslash({ typesCache: createFileSystemTypesCache(), + twoslashOptions: { tsModule, tsLibDirectory }, }), ], // important: Shiki doesn't support lazy loading languages for codeblocks in Twoslash popups diff --git a/docs/vercel.json b/docs/vercel.json index e63fa7e15a..89b87238d0 100644 --- a/docs/vercel.json +++ b/docs/vercel.json @@ -1,5 +1,6 @@ { "cleanUrls": true, + "buildCommand": "corepack enable && pnpm run build:vercel", "installCommand": "cd .. && corepack enable && pnpm install", - "buildCommand": "cd .. && corepack enable && pnpm run build && pnpm --filter @blocknote/dev-scripts run gen && cd docs && pnpm exec fumadocs-mdx && NODE_OPTIONS='--max-old-space-size=6144' pnpm exec next build" + "ignoreCommand": "[ \"$VERCEL_GIT_COMMIT_REF\" = \"gh-pages\" ]" } diff --git a/examples/01-basic/01-minimal/tsconfig.json b/examples/01-basic/01-minimal/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/01-minimal/tsconfig.json +++ b/examples/01-basic/01-minimal/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/01-minimal/vite.config.ts b/examples/01-basic/01-minimal/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/01-basic/01-minimal/vite.config.ts +++ b/examples/01-basic/01-minimal/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/01-basic/02-block-objects/tsconfig.json b/examples/01-basic/02-block-objects/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/02-block-objects/tsconfig.json +++ b/examples/01-basic/02-block-objects/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/02-block-objects/vite.config.ts b/examples/01-basic/02-block-objects/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/01-basic/02-block-objects/vite.config.ts +++ b/examples/01-basic/02-block-objects/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/01-basic/03-multi-column/tsconfig.json b/examples/01-basic/03-multi-column/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/03-multi-column/tsconfig.json +++ b/examples/01-basic/03-multi-column/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/03-multi-column/vite.config.ts b/examples/01-basic/03-multi-column/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/01-basic/03-multi-column/vite.config.ts +++ b/examples/01-basic/03-multi-column/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/01-basic/04-default-blocks/tsconfig.json b/examples/01-basic/04-default-blocks/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/04-default-blocks/tsconfig.json +++ b/examples/01-basic/04-default-blocks/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/04-default-blocks/vite.config.ts b/examples/01-basic/04-default-blocks/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/01-basic/04-default-blocks/vite.config.ts +++ b/examples/01-basic/04-default-blocks/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/01-basic/05-removing-default-blocks/tsconfig.json b/examples/01-basic/05-removing-default-blocks/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/05-removing-default-blocks/tsconfig.json +++ b/examples/01-basic/05-removing-default-blocks/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/05-removing-default-blocks/vite.config.ts b/examples/01-basic/05-removing-default-blocks/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/01-basic/05-removing-default-blocks/vite.config.ts +++ b/examples/01-basic/05-removing-default-blocks/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/01-basic/06-block-manipulation/tsconfig.json b/examples/01-basic/06-block-manipulation/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/06-block-manipulation/tsconfig.json +++ b/examples/01-basic/06-block-manipulation/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/06-block-manipulation/vite.config.ts b/examples/01-basic/06-block-manipulation/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/01-basic/06-block-manipulation/vite.config.ts +++ b/examples/01-basic/06-block-manipulation/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/01-basic/07-selection-blocks/tsconfig.json b/examples/01-basic/07-selection-blocks/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/07-selection-blocks/tsconfig.json +++ b/examples/01-basic/07-selection-blocks/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/07-selection-blocks/vite.config.ts b/examples/01-basic/07-selection-blocks/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/01-basic/07-selection-blocks/vite.config.ts +++ b/examples/01-basic/07-selection-blocks/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/01-basic/08-ariakit/tsconfig.json b/examples/01-basic/08-ariakit/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/08-ariakit/tsconfig.json +++ b/examples/01-basic/08-ariakit/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/08-ariakit/vite.config.ts b/examples/01-basic/08-ariakit/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/01-basic/08-ariakit/vite.config.ts +++ b/examples/01-basic/08-ariakit/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/01-basic/09-shadcn/tsconfig.json b/examples/01-basic/09-shadcn/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/09-shadcn/tsconfig.json +++ b/examples/01-basic/09-shadcn/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/09-shadcn/vite.config.ts b/examples/01-basic/09-shadcn/vite.config.ts index 852c69b872..c990876056 100644 --- a/examples/01-basic/09-shadcn/vite.config.ts +++ b/examples/01-basic/09-shadcn/vite.config.ts @@ -17,6 +17,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/01-basic/10-localization/tsconfig.json b/examples/01-basic/10-localization/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/10-localization/tsconfig.json +++ b/examples/01-basic/10-localization/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/10-localization/vite.config.ts b/examples/01-basic/10-localization/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/01-basic/10-localization/vite.config.ts +++ b/examples/01-basic/10-localization/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/01-basic/11-custom-placeholder/tsconfig.json b/examples/01-basic/11-custom-placeholder/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/11-custom-placeholder/tsconfig.json +++ b/examples/01-basic/11-custom-placeholder/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/11-custom-placeholder/vite.config.ts b/examples/01-basic/11-custom-placeholder/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/01-basic/11-custom-placeholder/vite.config.ts +++ b/examples/01-basic/11-custom-placeholder/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/01-basic/12-multi-editor/tsconfig.json b/examples/01-basic/12-multi-editor/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/12-multi-editor/tsconfig.json +++ b/examples/01-basic/12-multi-editor/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/12-multi-editor/vite.config.ts b/examples/01-basic/12-multi-editor/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/01-basic/12-multi-editor/vite.config.ts +++ b/examples/01-basic/12-multi-editor/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/01-basic/13-custom-paste-handler/tsconfig.json b/examples/01-basic/13-custom-paste-handler/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/13-custom-paste-handler/tsconfig.json +++ b/examples/01-basic/13-custom-paste-handler/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/13-custom-paste-handler/vite.config.ts b/examples/01-basic/13-custom-paste-handler/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/01-basic/13-custom-paste-handler/vite.config.ts +++ b/examples/01-basic/13-custom-paste-handler/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/01-basic/14-editor-scrollable/tsconfig.json b/examples/01-basic/14-editor-scrollable/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/14-editor-scrollable/tsconfig.json +++ b/examples/01-basic/14-editor-scrollable/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/14-editor-scrollable/vite.config.ts b/examples/01-basic/14-editor-scrollable/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/01-basic/14-editor-scrollable/vite.config.ts +++ b/examples/01-basic/14-editor-scrollable/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/01-basic/15-shadowdom/tsconfig.json b/examples/01-basic/15-shadowdom/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/15-shadowdom/tsconfig.json +++ b/examples/01-basic/15-shadowdom/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/15-shadowdom/vite.config.ts b/examples/01-basic/15-shadowdom/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/01-basic/15-shadowdom/vite.config.ts +++ b/examples/01-basic/15-shadowdom/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/01-basic/16-read-only-editor/tsconfig.json b/examples/01-basic/16-read-only-editor/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/16-read-only-editor/tsconfig.json +++ b/examples/01-basic/16-read-only-editor/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/16-read-only-editor/vite.config.ts b/examples/01-basic/16-read-only-editor/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/01-basic/16-read-only-editor/vite.config.ts +++ b/examples/01-basic/16-read-only-editor/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/01-basic/17-no-trailing-block/tsconfig.json b/examples/01-basic/17-no-trailing-block/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/17-no-trailing-block/tsconfig.json +++ b/examples/01-basic/17-no-trailing-block/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/17-no-trailing-block/vite.config.ts b/examples/01-basic/17-no-trailing-block/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/01-basic/17-no-trailing-block/vite.config.ts +++ b/examples/01-basic/17-no-trailing-block/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/01-basic/testing/tsconfig.json b/examples/01-basic/testing/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/01-basic/testing/tsconfig.json +++ b/examples/01-basic/testing/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/01-basic/testing/vite.config.ts b/examples/01-basic/testing/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/01-basic/testing/vite.config.ts +++ b/examples/01-basic/testing/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/02-backend/01-file-uploading/tsconfig.json b/examples/02-backend/01-file-uploading/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/02-backend/01-file-uploading/tsconfig.json +++ b/examples/02-backend/01-file-uploading/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/02-backend/01-file-uploading/vite.config.ts b/examples/02-backend/01-file-uploading/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/02-backend/01-file-uploading/vite.config.ts +++ b/examples/02-backend/01-file-uploading/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/02-backend/02-saving-loading/tsconfig.json b/examples/02-backend/02-saving-loading/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/02-backend/02-saving-loading/tsconfig.json +++ b/examples/02-backend/02-saving-loading/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/02-backend/02-saving-loading/vite.config.ts b/examples/02-backend/02-saving-loading/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/02-backend/02-saving-loading/vite.config.ts +++ b/examples/02-backend/02-saving-loading/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/02-backend/03-s3/tsconfig.json b/examples/02-backend/03-s3/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/02-backend/03-s3/tsconfig.json +++ b/examples/02-backend/03-s3/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/02-backend/03-s3/vite.config.ts b/examples/02-backend/03-s3/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/02-backend/03-s3/vite.config.ts +++ b/examples/02-backend/03-s3/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/02-backend/04-rendering-static-documents/tsconfig.json b/examples/02-backend/04-rendering-static-documents/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/02-backend/04-rendering-static-documents/tsconfig.json +++ b/examples/02-backend/04-rendering-static-documents/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/02-backend/04-rendering-static-documents/vite.config.ts b/examples/02-backend/04-rendering-static-documents/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/02-backend/04-rendering-static-documents/vite.config.ts +++ b/examples/02-backend/04-rendering-static-documents/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/01-ui-elements-remove/tsconfig.json b/examples/03-ui-components/01-ui-elements-remove/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/01-ui-elements-remove/tsconfig.json +++ b/examples/03-ui-components/01-ui-elements-remove/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/01-ui-elements-remove/vite.config.ts b/examples/03-ui-components/01-ui-elements-remove/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/01-ui-elements-remove/vite.config.ts +++ b/examples/03-ui-components/01-ui-elements-remove/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/02-formatting-toolbar-buttons/tsconfig.json b/examples/03-ui-components/02-formatting-toolbar-buttons/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/02-formatting-toolbar-buttons/tsconfig.json +++ b/examples/03-ui-components/02-formatting-toolbar-buttons/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/02-formatting-toolbar-buttons/vite.config.ts b/examples/03-ui-components/02-formatting-toolbar-buttons/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/02-formatting-toolbar-buttons/vite.config.ts +++ b/examples/03-ui-components/02-formatting-toolbar-buttons/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/03-formatting-toolbar-block-type-items/tsconfig.json b/examples/03-ui-components/03-formatting-toolbar-block-type-items/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/03-formatting-toolbar-block-type-items/tsconfig.json +++ b/examples/03-ui-components/03-formatting-toolbar-block-type-items/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/03-formatting-toolbar-block-type-items/vite.config.ts b/examples/03-ui-components/03-formatting-toolbar-block-type-items/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/03-formatting-toolbar-block-type-items/vite.config.ts +++ b/examples/03-ui-components/03-formatting-toolbar-block-type-items/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/04-side-menu-buttons/tsconfig.json b/examples/03-ui-components/04-side-menu-buttons/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/04-side-menu-buttons/tsconfig.json +++ b/examples/03-ui-components/04-side-menu-buttons/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/04-side-menu-buttons/vite.config.ts b/examples/03-ui-components/04-side-menu-buttons/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/04-side-menu-buttons/vite.config.ts +++ b/examples/03-ui-components/04-side-menu-buttons/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/05-side-menu-drag-handle-items/tsconfig.json b/examples/03-ui-components/05-side-menu-drag-handle-items/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/05-side-menu-drag-handle-items/tsconfig.json +++ b/examples/03-ui-components/05-side-menu-drag-handle-items/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/05-side-menu-drag-handle-items/vite.config.ts b/examples/03-ui-components/05-side-menu-drag-handle-items/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/05-side-menu-drag-handle-items/vite.config.ts +++ b/examples/03-ui-components/05-side-menu-drag-handle-items/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/06-suggestion-menus-slash-menu-items/tsconfig.json b/examples/03-ui-components/06-suggestion-menus-slash-menu-items/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/06-suggestion-menus-slash-menu-items/tsconfig.json +++ b/examples/03-ui-components/06-suggestion-menus-slash-menu-items/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/06-suggestion-menus-slash-menu-items/vite.config.ts b/examples/03-ui-components/06-suggestion-menus-slash-menu-items/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/06-suggestion-menus-slash-menu-items/vite.config.ts +++ b/examples/03-ui-components/06-suggestion-menus-slash-menu-items/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/07-suggestion-menus-slash-menu-component/tsconfig.json b/examples/03-ui-components/07-suggestion-menus-slash-menu-component/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/07-suggestion-menus-slash-menu-component/tsconfig.json +++ b/examples/03-ui-components/07-suggestion-menus-slash-menu-component/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/07-suggestion-menus-slash-menu-component/vite.config.ts b/examples/03-ui-components/07-suggestion-menus-slash-menu-component/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/07-suggestion-menus-slash-menu-component/vite.config.ts +++ b/examples/03-ui-components/07-suggestion-menus-slash-menu-component/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/08-suggestion-menus-emoji-picker-columns/tsconfig.json b/examples/03-ui-components/08-suggestion-menus-emoji-picker-columns/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/08-suggestion-menus-emoji-picker-columns/tsconfig.json +++ b/examples/03-ui-components/08-suggestion-menus-emoji-picker-columns/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/08-suggestion-menus-emoji-picker-columns/vite.config.ts b/examples/03-ui-components/08-suggestion-menus-emoji-picker-columns/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/08-suggestion-menus-emoji-picker-columns/vite.config.ts +++ b/examples/03-ui-components/08-suggestion-menus-emoji-picker-columns/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/09-suggestion-menus-emoji-picker-component/tsconfig.json b/examples/03-ui-components/09-suggestion-menus-emoji-picker-component/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/09-suggestion-menus-emoji-picker-component/tsconfig.json +++ b/examples/03-ui-components/09-suggestion-menus-emoji-picker-component/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/09-suggestion-menus-emoji-picker-component/vite.config.ts b/examples/03-ui-components/09-suggestion-menus-emoji-picker-component/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/09-suggestion-menus-emoji-picker-component/vite.config.ts +++ b/examples/03-ui-components/09-suggestion-menus-emoji-picker-component/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/10-suggestion-menus-grid-mentions/tsconfig.json b/examples/03-ui-components/10-suggestion-menus-grid-mentions/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/10-suggestion-menus-grid-mentions/tsconfig.json +++ b/examples/03-ui-components/10-suggestion-menus-grid-mentions/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/10-suggestion-menus-grid-mentions/vite.config.ts b/examples/03-ui-components/10-suggestion-menus-grid-mentions/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/10-suggestion-menus-grid-mentions/vite.config.ts +++ b/examples/03-ui-components/10-suggestion-menus-grid-mentions/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/11-uppy-file-panel/tsconfig.json b/examples/03-ui-components/11-uppy-file-panel/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/11-uppy-file-panel/tsconfig.json +++ b/examples/03-ui-components/11-uppy-file-panel/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/11-uppy-file-panel/vite.config.ts b/examples/03-ui-components/11-uppy-file-panel/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/11-uppy-file-panel/vite.config.ts +++ b/examples/03-ui-components/11-uppy-file-panel/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/12-static-formatting-toolbar/tsconfig.json b/examples/03-ui-components/12-static-formatting-toolbar/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/12-static-formatting-toolbar/tsconfig.json +++ b/examples/03-ui-components/12-static-formatting-toolbar/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/12-static-formatting-toolbar/vite.config.ts b/examples/03-ui-components/12-static-formatting-toolbar/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/12-static-formatting-toolbar/vite.config.ts +++ b/examples/03-ui-components/12-static-formatting-toolbar/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/13-custom-ui/tsconfig.json b/examples/03-ui-components/13-custom-ui/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/13-custom-ui/tsconfig.json +++ b/examples/03-ui-components/13-custom-ui/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/13-custom-ui/vite.config.ts b/examples/03-ui-components/13-custom-ui/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/13-custom-ui/vite.config.ts +++ b/examples/03-ui-components/13-custom-ui/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/14-experimental-mobile-formatting-toolbar/tsconfig.json b/examples/03-ui-components/14-experimental-mobile-formatting-toolbar/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/14-experimental-mobile-formatting-toolbar/tsconfig.json +++ b/examples/03-ui-components/14-experimental-mobile-formatting-toolbar/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/14-experimental-mobile-formatting-toolbar/vite.config.ts b/examples/03-ui-components/14-experimental-mobile-formatting-toolbar/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/14-experimental-mobile-formatting-toolbar/vite.config.ts +++ b/examples/03-ui-components/14-experimental-mobile-formatting-toolbar/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/15-advanced-tables/tsconfig.json b/examples/03-ui-components/15-advanced-tables/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/15-advanced-tables/tsconfig.json +++ b/examples/03-ui-components/15-advanced-tables/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/15-advanced-tables/vite.config.ts b/examples/03-ui-components/15-advanced-tables/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/15-advanced-tables/vite.config.ts +++ b/examples/03-ui-components/15-advanced-tables/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/16-link-toolbar-buttons/tsconfig.json b/examples/03-ui-components/16-link-toolbar-buttons/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/16-link-toolbar-buttons/tsconfig.json +++ b/examples/03-ui-components/16-link-toolbar-buttons/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/16-link-toolbar-buttons/vite.config.ts b/examples/03-ui-components/16-link-toolbar-buttons/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/16-link-toolbar-buttons/vite.config.ts +++ b/examples/03-ui-components/16-link-toolbar-buttons/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/17-advanced-tables-2/tsconfig.json b/examples/03-ui-components/17-advanced-tables-2/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/17-advanced-tables-2/tsconfig.json +++ b/examples/03-ui-components/17-advanced-tables-2/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/17-advanced-tables-2/vite.config.ts b/examples/03-ui-components/17-advanced-tables-2/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/17-advanced-tables-2/vite.config.ts +++ b/examples/03-ui-components/17-advanced-tables-2/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/18-drag-n-drop/tsconfig.json b/examples/03-ui-components/18-drag-n-drop/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/18-drag-n-drop/tsconfig.json +++ b/examples/03-ui-components/18-drag-n-drop/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/18-drag-n-drop/vite.config.ts b/examples/03-ui-components/18-drag-n-drop/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/18-drag-n-drop/vite.config.ts +++ b/examples/03-ui-components/18-drag-n-drop/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/19-suggestion-menus-grouping-ordering/tsconfig.json b/examples/03-ui-components/19-suggestion-menus-grouping-ordering/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/19-suggestion-menus-grouping-ordering/tsconfig.json +++ b/examples/03-ui-components/19-suggestion-menus-grouping-ordering/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/19-suggestion-menus-grouping-ordering/vite.config.ts b/examples/03-ui-components/19-suggestion-menus-grouping-ordering/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/19-suggestion-menus-grouping-ordering/vite.config.ts +++ b/examples/03-ui-components/19-suggestion-menus-grouping-ordering/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/03-ui-components/20-portal-elements/tsconfig.json b/examples/03-ui-components/20-portal-elements/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/03-ui-components/20-portal-elements/tsconfig.json +++ b/examples/03-ui-components/20-portal-elements/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/03-ui-components/20-portal-elements/vite.config.ts b/examples/03-ui-components/20-portal-elements/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/03-ui-components/20-portal-elements/vite.config.ts +++ b/examples/03-ui-components/20-portal-elements/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/04-theming/01-theming-dom-attributes/tsconfig.json b/examples/04-theming/01-theming-dom-attributes/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/04-theming/01-theming-dom-attributes/tsconfig.json +++ b/examples/04-theming/01-theming-dom-attributes/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/04-theming/01-theming-dom-attributes/vite.config.ts b/examples/04-theming/01-theming-dom-attributes/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/04-theming/01-theming-dom-attributes/vite.config.ts +++ b/examples/04-theming/01-theming-dom-attributes/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/04-theming/02-changing-font/tsconfig.json b/examples/04-theming/02-changing-font/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/04-theming/02-changing-font/tsconfig.json +++ b/examples/04-theming/02-changing-font/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/04-theming/02-changing-font/vite.config.ts b/examples/04-theming/02-changing-font/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/04-theming/02-changing-font/vite.config.ts +++ b/examples/04-theming/02-changing-font/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/04-theming/03-theming-css/tsconfig.json b/examples/04-theming/03-theming-css/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/04-theming/03-theming-css/tsconfig.json +++ b/examples/04-theming/03-theming-css/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/04-theming/03-theming-css/vite.config.ts b/examples/04-theming/03-theming-css/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/04-theming/03-theming-css/vite.config.ts +++ b/examples/04-theming/03-theming-css/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/04-theming/04-theming-css-variables/tsconfig.json b/examples/04-theming/04-theming-css-variables/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/04-theming/04-theming-css-variables/tsconfig.json +++ b/examples/04-theming/04-theming-css-variables/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/04-theming/04-theming-css-variables/vite.config.ts b/examples/04-theming/04-theming-css-variables/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/04-theming/04-theming-css-variables/vite.config.ts +++ b/examples/04-theming/04-theming-css-variables/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/04-theming/05-theming-css-variables-code/tsconfig.json b/examples/04-theming/05-theming-css-variables-code/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/04-theming/05-theming-css-variables-code/tsconfig.json +++ b/examples/04-theming/05-theming-css-variables-code/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/04-theming/05-theming-css-variables-code/vite.config.ts b/examples/04-theming/05-theming-css-variables-code/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/04-theming/05-theming-css-variables-code/vite.config.ts +++ b/examples/04-theming/05-theming-css-variables-code/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/04-theming/06-code-block/tsconfig.json b/examples/04-theming/06-code-block/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/04-theming/06-code-block/tsconfig.json +++ b/examples/04-theming/06-code-block/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/04-theming/06-code-block/vite.config.ts b/examples/04-theming/06-code-block/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/04-theming/06-code-block/vite.config.ts +++ b/examples/04-theming/06-code-block/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/04-theming/07-custom-code-block/package.json b/examples/04-theming/07-custom-code-block/package.json index 6c70f6b12b..07a7589951 100644 --- a/examples/04-theming/07-custom-code-block/package.json +++ b/examples/04-theming/07-custom-code-block/package.json @@ -21,11 +21,11 @@ "react": "^19.2.3", "react-dom": "^19.2.3", "@blocknote/code-block": "latest", - "@shikijs/core": "^4", - "@shikijs/engine-javascript": "^4", - "@shikijs/langs-precompiled": "^4", - "@shikijs/themes": "^4", - "@shikijs/types": "^4" + "@shikijs/core": "^4.4.3", + "@shikijs/engine-javascript": "^4.4.3", + "@shikijs/langs-precompiled": "^4.4.3", + "@shikijs/themes": "^4.4.3", + "@shikijs/types": "^4.4.3" }, "devDependencies": { "@types/react": "^19.2.3", diff --git a/examples/04-theming/07-custom-code-block/tsconfig.json b/examples/04-theming/07-custom-code-block/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/04-theming/07-custom-code-block/tsconfig.json +++ b/examples/04-theming/07-custom-code-block/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/04-theming/07-custom-code-block/vite.config.ts b/examples/04-theming/07-custom-code-block/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/04-theming/07-custom-code-block/vite.config.ts +++ b/examples/04-theming/07-custom-code-block/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/05-interoperability/01-converting-blocks-to-html/tsconfig.json b/examples/05-interoperability/01-converting-blocks-to-html/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/05-interoperability/01-converting-blocks-to-html/tsconfig.json +++ b/examples/05-interoperability/01-converting-blocks-to-html/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/05-interoperability/01-converting-blocks-to-html/vite.config.ts b/examples/05-interoperability/01-converting-blocks-to-html/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/05-interoperability/01-converting-blocks-to-html/vite.config.ts +++ b/examples/05-interoperability/01-converting-blocks-to-html/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/05-interoperability/02-converting-blocks-from-html/tsconfig.json b/examples/05-interoperability/02-converting-blocks-from-html/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/05-interoperability/02-converting-blocks-from-html/tsconfig.json +++ b/examples/05-interoperability/02-converting-blocks-from-html/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/05-interoperability/02-converting-blocks-from-html/vite.config.ts b/examples/05-interoperability/02-converting-blocks-from-html/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/05-interoperability/02-converting-blocks-from-html/vite.config.ts +++ b/examples/05-interoperability/02-converting-blocks-from-html/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/05-interoperability/03-converting-blocks-to-md/tsconfig.json b/examples/05-interoperability/03-converting-blocks-to-md/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/05-interoperability/03-converting-blocks-to-md/tsconfig.json +++ b/examples/05-interoperability/03-converting-blocks-to-md/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/05-interoperability/03-converting-blocks-to-md/vite.config.ts b/examples/05-interoperability/03-converting-blocks-to-md/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/05-interoperability/03-converting-blocks-to-md/vite.config.ts +++ b/examples/05-interoperability/03-converting-blocks-to-md/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/05-interoperability/04-converting-blocks-from-md/tsconfig.json b/examples/05-interoperability/04-converting-blocks-from-md/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/05-interoperability/04-converting-blocks-from-md/tsconfig.json +++ b/examples/05-interoperability/04-converting-blocks-from-md/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/05-interoperability/04-converting-blocks-from-md/vite.config.ts b/examples/05-interoperability/04-converting-blocks-from-md/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/05-interoperability/04-converting-blocks-from-md/vite.config.ts +++ b/examples/05-interoperability/04-converting-blocks-from-md/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/05-interoperability/05-converting-blocks-to-pdf/package.json b/examples/05-interoperability/05-converting-blocks-to-pdf/package.json index 0f196ae378..30c28d0430 100644 --- a/examples/05-interoperability/05-converting-blocks-to-pdf/package.json +++ b/examples/05-interoperability/05-converting-blocks-to-pdf/package.json @@ -20,9 +20,13 @@ "@mantine/hooks": "^9.0.2", "react": "^19.2.3", "react-dom": "^19.2.3", - "@blocknote/xl-pdf-exporter": "latest", + "@blocknote/diagram-block": "latest", + "@blocknote/math-block": "latest", "@blocknote/xl-multi-column": "latest", - "@react-pdf/renderer": "^4.3.0" + "@blocknote/xl-pdf-exporter": "latest", + "@react-pdf/math": "^2.0.1", + "@react-pdf/renderer": "^4.5.1", + "mathjax-full": "^3.2.2" }, "devDependencies": { "@types/react": "^19.2.3", diff --git a/examples/05-interoperability/05-converting-blocks-to-pdf/tsconfig.json b/examples/05-interoperability/05-converting-blocks-to-pdf/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/05-interoperability/05-converting-blocks-to-pdf/tsconfig.json +++ b/examples/05-interoperability/05-converting-blocks-to-pdf/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/05-interoperability/05-converting-blocks-to-pdf/vite.config.ts b/examples/05-interoperability/05-converting-blocks-to-pdf/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/05-interoperability/05-converting-blocks-to-pdf/vite.config.ts +++ b/examples/05-interoperability/05-converting-blocks-to-pdf/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/05-interoperability/06-converting-blocks-to-docx/package.json b/examples/05-interoperability/06-converting-blocks-to-docx/package.json index 28ab63e55d..2a70496c6e 100644 --- a/examples/05-interoperability/06-converting-blocks-to-docx/package.json +++ b/examples/05-interoperability/06-converting-blocks-to-docx/package.json @@ -20,8 +20,11 @@ "@mantine/hooks": "^9.0.2", "react": "^19.2.3", "react-dom": "^19.2.3", + "@blocknote/diagram-block": "latest", + "@blocknote/math-block": "latest", "@blocknote/xl-docx-exporter": "latest", - "@blocknote/xl-multi-column": "latest" + "@blocknote/xl-multi-column": "latest", + "katex": "^0.16.11" }, "devDependencies": { "@types/react": "^19.2.3", diff --git a/examples/05-interoperability/06-converting-blocks-to-docx/tsconfig.json b/examples/05-interoperability/06-converting-blocks-to-docx/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/05-interoperability/06-converting-blocks-to-docx/tsconfig.json +++ b/examples/05-interoperability/06-converting-blocks-to-docx/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/05-interoperability/06-converting-blocks-to-docx/vite.config.ts b/examples/05-interoperability/06-converting-blocks-to-docx/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/05-interoperability/06-converting-blocks-to-docx/vite.config.ts +++ b/examples/05-interoperability/06-converting-blocks-to-docx/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/05-interoperability/07-converting-blocks-to-odt/package.json b/examples/05-interoperability/07-converting-blocks-to-odt/package.json index e615bcb5e9..2e814b5849 100644 --- a/examples/05-interoperability/07-converting-blocks-to-odt/package.json +++ b/examples/05-interoperability/07-converting-blocks-to-odt/package.json @@ -20,8 +20,11 @@ "@mantine/hooks": "^9.0.2", "react": "^19.2.3", "react-dom": "^19.2.3", + "@blocknote/diagram-block": "latest", + "@blocknote/math-block": "latest", + "@blocknote/xl-multi-column": "latest", "@blocknote/xl-odt-exporter": "latest", - "@blocknote/xl-multi-column": "latest" + "katex": "^0.16.11" }, "devDependencies": { "@types/react": "^19.2.3", diff --git a/examples/05-interoperability/07-converting-blocks-to-odt/tsconfig.json b/examples/05-interoperability/07-converting-blocks-to-odt/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/05-interoperability/07-converting-blocks-to-odt/tsconfig.json +++ b/examples/05-interoperability/07-converting-blocks-to-odt/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/05-interoperability/07-converting-blocks-to-odt/vite.config.ts b/examples/05-interoperability/07-converting-blocks-to-odt/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/05-interoperability/07-converting-blocks-to-odt/vite.config.ts +++ b/examples/05-interoperability/07-converting-blocks-to-odt/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/05-interoperability/08-converting-blocks-to-react-email/package.json b/examples/05-interoperability/08-converting-blocks-to-react-email/package.json index 409f449bbd..c69fbbbcc0 100644 --- a/examples/05-interoperability/08-converting-blocks-to-react-email/package.json +++ b/examples/05-interoperability/08-converting-blocks-to-react-email/package.json @@ -20,6 +20,8 @@ "@mantine/hooks": "^9.0.2", "react": "^19.2.3", "react-dom": "^19.2.3", + "@blocknote/diagram-block": "latest", + "@blocknote/math-block": "latest", "@blocknote/xl-email-exporter": "latest", "@react-email/render": "^2.0.4" }, diff --git a/examples/05-interoperability/08-converting-blocks-to-react-email/tsconfig.json b/examples/05-interoperability/08-converting-blocks-to-react-email/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/05-interoperability/08-converting-blocks-to-react-email/tsconfig.json +++ b/examples/05-interoperability/08-converting-blocks-to-react-email/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/05-interoperability/08-converting-blocks-to-react-email/vite.config.ts b/examples/05-interoperability/08-converting-blocks-to-react-email/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/05-interoperability/08-converting-blocks-to-react-email/vite.config.ts +++ b/examples/05-interoperability/08-converting-blocks-to-react-email/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/05-interoperability/09-blocks-to-html-static-render/tsconfig.json b/examples/05-interoperability/09-blocks-to-html-static-render/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/05-interoperability/09-blocks-to-html-static-render/tsconfig.json +++ b/examples/05-interoperability/09-blocks-to-html-static-render/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/05-interoperability/09-blocks-to-html-static-render/vite.config.ts b/examples/05-interoperability/09-blocks-to-html-static-render/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/05-interoperability/09-blocks-to-html-static-render/vite.config.ts +++ b/examples/05-interoperability/09-blocks-to-html-static-render/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/05-interoperability/10-static-html-render/tsconfig.json b/examples/05-interoperability/10-static-html-render/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/05-interoperability/10-static-html-render/tsconfig.json +++ b/examples/05-interoperability/10-static-html-render/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/05-interoperability/10-static-html-render/vite.config.ts b/examples/05-interoperability/10-static-html-render/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/05-interoperability/10-static-html-render/vite.config.ts +++ b/examples/05-interoperability/10-static-html-render/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/06-custom-schema/01-alert-block/tsconfig.json b/examples/06-custom-schema/01-alert-block/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/06-custom-schema/01-alert-block/tsconfig.json +++ b/examples/06-custom-schema/01-alert-block/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/06-custom-schema/01-alert-block/vite.config.ts b/examples/06-custom-schema/01-alert-block/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/06-custom-schema/01-alert-block/vite.config.ts +++ b/examples/06-custom-schema/01-alert-block/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/06-custom-schema/02-suggestion-menus-mentions/tsconfig.json b/examples/06-custom-schema/02-suggestion-menus-mentions/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/06-custom-schema/02-suggestion-menus-mentions/tsconfig.json +++ b/examples/06-custom-schema/02-suggestion-menus-mentions/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/06-custom-schema/02-suggestion-menus-mentions/vite.config.ts b/examples/06-custom-schema/02-suggestion-menus-mentions/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/06-custom-schema/02-suggestion-menus-mentions/vite.config.ts +++ b/examples/06-custom-schema/02-suggestion-menus-mentions/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/06-custom-schema/03-font-style/tsconfig.json b/examples/06-custom-schema/03-font-style/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/06-custom-schema/03-font-style/tsconfig.json +++ b/examples/06-custom-schema/03-font-style/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/06-custom-schema/03-font-style/vite.config.ts b/examples/06-custom-schema/03-font-style/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/06-custom-schema/03-font-style/vite.config.ts +++ b/examples/06-custom-schema/03-font-style/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/06-custom-schema/04-pdf-file-block/tsconfig.json b/examples/06-custom-schema/04-pdf-file-block/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/06-custom-schema/04-pdf-file-block/tsconfig.json +++ b/examples/06-custom-schema/04-pdf-file-block/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/06-custom-schema/04-pdf-file-block/vite.config.ts b/examples/06-custom-schema/04-pdf-file-block/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/06-custom-schema/04-pdf-file-block/vite.config.ts +++ b/examples/06-custom-schema/04-pdf-file-block/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/06-custom-schema/05-alert-block-full-ux/tsconfig.json b/examples/06-custom-schema/05-alert-block-full-ux/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/06-custom-schema/05-alert-block-full-ux/tsconfig.json +++ b/examples/06-custom-schema/05-alert-block-full-ux/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/06-custom-schema/05-alert-block-full-ux/vite.config.ts b/examples/06-custom-schema/05-alert-block-full-ux/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/06-custom-schema/05-alert-block-full-ux/vite.config.ts +++ b/examples/06-custom-schema/05-alert-block-full-ux/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/06-custom-schema/06-toggleable-blocks/tsconfig.json b/examples/06-custom-schema/06-toggleable-blocks/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/06-custom-schema/06-toggleable-blocks/tsconfig.json +++ b/examples/06-custom-schema/06-toggleable-blocks/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/06-custom-schema/06-toggleable-blocks/vite.config.ts b/examples/06-custom-schema/06-toggleable-blocks/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/06-custom-schema/06-toggleable-blocks/vite.config.ts +++ b/examples/06-custom-schema/06-toggleable-blocks/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/06-custom-schema/07-configuring-blocks/tsconfig.json b/examples/06-custom-schema/07-configuring-blocks/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/06-custom-schema/07-configuring-blocks/tsconfig.json +++ b/examples/06-custom-schema/07-configuring-blocks/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/06-custom-schema/07-configuring-blocks/vite.config.ts b/examples/06-custom-schema/07-configuring-blocks/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/06-custom-schema/07-configuring-blocks/vite.config.ts +++ b/examples/06-custom-schema/07-configuring-blocks/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/06-custom-schema/08-non-editable-block/tsconfig.json b/examples/06-custom-schema/08-non-editable-block/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/06-custom-schema/08-non-editable-block/tsconfig.json +++ b/examples/06-custom-schema/08-non-editable-block/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/06-custom-schema/08-non-editable-block/vite.config.ts b/examples/06-custom-schema/08-non-editable-block/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/06-custom-schema/08-non-editable-block/vite.config.ts +++ b/examples/06-custom-schema/08-non-editable-block/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/06-custom-schema/11-source-with-preview/index.html b/examples/06-custom-schema/11-source-with-preview/index.html new file mode 100644 index 0000000000..b577a83785 --- /dev/null +++ b/examples/06-custom-schema/11-source-with-preview/index.html @@ -0,0 +1,14 @@ + + + + + Source with Preview Blocks + + + +
+ + + diff --git a/examples/06-custom-schema/11-source-with-preview/package.json b/examples/06-custom-schema/11-source-with-preview/package.json new file mode 100644 index 0000000000..9d5da6eaf0 --- /dev/null +++ b/examples/06-custom-schema/11-source-with-preview/package.json @@ -0,0 +1,31 @@ +{ + "name": "@blocknote/example-custom-schema-source-with-preview", + "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", + "type": "module", + "private": true, + "version": "0.12.4", + "scripts": { + "start": "vite", + "dev": "vite", + "build:prod": "tsc && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@blocknote/ariakit": "latest", + "@blocknote/core": "latest", + "@blocknote/mantine": "latest", + "@blocknote/react": "latest", + "@blocknote/shadcn": "latest", + "@mantine/core": "^9.0.2", + "@mantine/hooks": "^9.0.2", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "react-icons": "^5.5.0" + }, + "devDependencies": { + "@types/react": "^19.2.3", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "vite": "^8.0.0" + } +} diff --git a/examples/06-custom-schema/11-source-with-preview/tsconfig.json b/examples/06-custom-schema/11-source-with-preview/tsconfig.json new file mode 100644 index 0000000000..2aa62c56e6 --- /dev/null +++ b/examples/06-custom-schema/11-source-with-preview/tsconfig.json @@ -0,0 +1,32 @@ +{ + "__comment": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": false, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } + }, + "include": ["."], + "__ADD_FOR_LOCAL_DEV_references": [ + { + "path": "../../../packages/core/" + }, + { + "path": "../../../packages/react/" + } + ] +} diff --git a/examples/06-custom-schema/11-source-with-preview/vite-env.d.ts b/examples/06-custom-schema/11-source-with-preview/vite-env.d.ts new file mode 100644 index 0000000000..11f02fe2a0 --- /dev/null +++ b/examples/06-custom-schema/11-source-with-preview/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/examples/06-custom-schema/11-source-with-preview/vite.config.ts b/examples/06-custom-schema/11-source-with-preview/vite.config.ts new file mode 100644 index 0000000000..a96f1f04ff --- /dev/null +++ b/examples/06-custom-schema/11-source-with-preview/vite.config.ts @@ -0,0 +1,35 @@ +// AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY +import react from "@vitejs/plugin-react"; +import * as fs from "fs"; +import * as path from "path"; +import { defineConfig } from "vite"; +// https://vitejs.dev/config/ +export default defineConfig(((conf: { command: string }) => ({ + plugins: [react()], + optimizeDeps: {}, + build: { + sourcemap: true, + }, + resolve: { + alias: + conf.command === "build" || + !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) + ? {} + : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), + // Comment out the lines below to load a built version of blocknote + // or, keep as is to load live from sources with live reload working + "@blocknote/core": path.resolve( + __dirname, + "../../packages/core/src/", + ), + "@blocknote/react": path.resolve( + __dirname, + "../../packages/react/src/", + ), + } as any), + }, +})) as Parameters[0]); diff --git a/examples/06-custom-schema/draggable-inline-content/tsconfig.json b/examples/06-custom-schema/draggable-inline-content/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/06-custom-schema/draggable-inline-content/tsconfig.json +++ b/examples/06-custom-schema/draggable-inline-content/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/06-custom-schema/draggable-inline-content/vite.config.ts b/examples/06-custom-schema/draggable-inline-content/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/06-custom-schema/draggable-inline-content/vite.config.ts +++ b/examples/06-custom-schema/draggable-inline-content/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/06-custom-schema/react-custom-blocks/tsconfig.json b/examples/06-custom-schema/react-custom-blocks/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/06-custom-schema/react-custom-blocks/tsconfig.json +++ b/examples/06-custom-schema/react-custom-blocks/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/06-custom-schema/react-custom-blocks/vite.config.ts b/examples/06-custom-schema/react-custom-blocks/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/06-custom-schema/react-custom-blocks/vite.config.ts +++ b/examples/06-custom-schema/react-custom-blocks/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/06-custom-schema/react-custom-inline-content/tsconfig.json b/examples/06-custom-schema/react-custom-inline-content/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/06-custom-schema/react-custom-inline-content/tsconfig.json +++ b/examples/06-custom-schema/react-custom-inline-content/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/06-custom-schema/react-custom-inline-content/vite.config.ts b/examples/06-custom-schema/react-custom-inline-content/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/06-custom-schema/react-custom-inline-content/vite.config.ts +++ b/examples/06-custom-schema/react-custom-inline-content/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/06-custom-schema/react-custom-styles/tsconfig.json b/examples/06-custom-schema/react-custom-styles/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/06-custom-schema/react-custom-styles/tsconfig.json +++ b/examples/06-custom-schema/react-custom-styles/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/06-custom-schema/react-custom-styles/vite.config.ts b/examples/06-custom-schema/react-custom-styles/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/06-custom-schema/react-custom-styles/vite.config.ts +++ b/examples/06-custom-schema/react-custom-styles/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/07-collaboration/01-partykit/tsconfig.json b/examples/07-collaboration/01-partykit/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/07-collaboration/01-partykit/tsconfig.json +++ b/examples/07-collaboration/01-partykit/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/07-collaboration/01-partykit/vite.config.ts b/examples/07-collaboration/01-partykit/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/07-collaboration/01-partykit/vite.config.ts +++ b/examples/07-collaboration/01-partykit/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/07-collaboration/02-liveblocks/tsconfig.json b/examples/07-collaboration/02-liveblocks/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/07-collaboration/02-liveblocks/tsconfig.json +++ b/examples/07-collaboration/02-liveblocks/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/07-collaboration/02-liveblocks/vite.config.ts b/examples/07-collaboration/02-liveblocks/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/07-collaboration/02-liveblocks/vite.config.ts +++ b/examples/07-collaboration/02-liveblocks/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/07-collaboration/03-y-sweet/tsconfig.json b/examples/07-collaboration/03-y-sweet/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/07-collaboration/03-y-sweet/tsconfig.json +++ b/examples/07-collaboration/03-y-sweet/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/07-collaboration/03-y-sweet/vite.config.ts b/examples/07-collaboration/03-y-sweet/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/07-collaboration/03-y-sweet/vite.config.ts +++ b/examples/07-collaboration/03-y-sweet/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/07-collaboration/04-electric-sql/tsconfig.json b/examples/07-collaboration/04-electric-sql/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/07-collaboration/04-electric-sql/tsconfig.json +++ b/examples/07-collaboration/04-electric-sql/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/07-collaboration/04-electric-sql/vite.config.ts b/examples/07-collaboration/04-electric-sql/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/07-collaboration/04-electric-sql/vite.config.ts +++ b/examples/07-collaboration/04-electric-sql/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/07-collaboration/05-comments/tsconfig.json b/examples/07-collaboration/05-comments/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/07-collaboration/05-comments/tsconfig.json +++ b/examples/07-collaboration/05-comments/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/07-collaboration/05-comments/vite.config.ts b/examples/07-collaboration/05-comments/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/07-collaboration/05-comments/vite.config.ts +++ b/examples/07-collaboration/05-comments/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/07-collaboration/06-comments-with-sidebar/tsconfig.json b/examples/07-collaboration/06-comments-with-sidebar/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/07-collaboration/06-comments-with-sidebar/tsconfig.json +++ b/examples/07-collaboration/06-comments-with-sidebar/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/07-collaboration/06-comments-with-sidebar/vite.config.ts b/examples/07-collaboration/06-comments-with-sidebar/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/07-collaboration/06-comments-with-sidebar/vite.config.ts +++ b/examples/07-collaboration/06-comments-with-sidebar/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/07-collaboration/07-ghost-writer/tsconfig.json b/examples/07-collaboration/07-ghost-writer/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/07-collaboration/07-ghost-writer/tsconfig.json +++ b/examples/07-collaboration/07-ghost-writer/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/07-collaboration/07-ghost-writer/vite.config.ts b/examples/07-collaboration/07-ghost-writer/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/07-collaboration/07-ghost-writer/vite.config.ts +++ b/examples/07-collaboration/07-ghost-writer/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/07-collaboration/08-forking/tsconfig.json b/examples/07-collaboration/08-forking/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/07-collaboration/08-forking/tsconfig.json +++ b/examples/07-collaboration/08-forking/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/07-collaboration/08-forking/vite.config.ts b/examples/07-collaboration/08-forking/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/07-collaboration/08-forking/vite.config.ts +++ b/examples/07-collaboration/08-forking/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/07-collaboration/09-comments-testing/tsconfig.json b/examples/07-collaboration/09-comments-testing/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/07-collaboration/09-comments-testing/tsconfig.json +++ b/examples/07-collaboration/09-comments-testing/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/07-collaboration/09-comments-testing/vite.config.ts b/examples/07-collaboration/09-comments-testing/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/07-collaboration/09-comments-testing/vite.config.ts +++ b/examples/07-collaboration/09-comments-testing/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/07-collaboration/10-suggestion-multi-editor/tsconfig.json b/examples/07-collaboration/10-suggestion-multi-editor/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/07-collaboration/10-suggestion-multi-editor/tsconfig.json +++ b/examples/07-collaboration/10-suggestion-multi-editor/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/07-collaboration/10-suggestion-multi-editor/vite.config.ts b/examples/07-collaboration/10-suggestion-multi-editor/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/07-collaboration/10-suggestion-multi-editor/vite.config.ts +++ b/examples/07-collaboration/10-suggestion-multi-editor/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/07-collaboration/11-versioning-yjs13/tsconfig.json b/examples/07-collaboration/11-versioning-yjs13/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/07-collaboration/11-versioning-yjs13/tsconfig.json +++ b/examples/07-collaboration/11-versioning-yjs13/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/07-collaboration/11-versioning-yjs13/vite.config.ts b/examples/07-collaboration/11-versioning-yjs13/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/07-collaboration/11-versioning-yjs13/vite.config.ts +++ b/examples/07-collaboration/11-versioning-yjs13/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/07-collaboration/12-multi-doc-versioning/tsconfig.json b/examples/07-collaboration/12-multi-doc-versioning/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/07-collaboration/12-multi-doc-versioning/tsconfig.json +++ b/examples/07-collaboration/12-multi-doc-versioning/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/07-collaboration/12-multi-doc-versioning/vite.config.ts b/examples/07-collaboration/12-multi-doc-versioning/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/07-collaboration/12-multi-doc-versioning/vite.config.ts +++ b/examples/07-collaboration/12-multi-doc-versioning/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/07-collaboration/13-versioning-yjs14/tsconfig.json b/examples/07-collaboration/13-versioning-yjs14/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/07-collaboration/13-versioning-yjs14/tsconfig.json +++ b/examples/07-collaboration/13-versioning-yjs14/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/07-collaboration/13-versioning-yjs14/vite.config.ts b/examples/07-collaboration/13-versioning-yjs14/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/07-collaboration/13-versioning-yjs14/vite.config.ts +++ b/examples/07-collaboration/13-versioning-yjs14/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/07-collaboration/14-suggestion-gallery/package.json b/examples/07-collaboration/14-suggestion-gallery/package.json index 28add5141b..34aeb8f0b1 100644 --- a/examples/07-collaboration/14-suggestion-gallery/package.json +++ b/examples/07-collaboration/14-suggestion-gallery/package.json @@ -20,7 +20,6 @@ "@mantine/hooks": "^9.0.2", "react": "^19.2.3", "react-dom": "^19.2.3", - "@blocknote/shared": "latest", "@blocknote/xl-multi-column": "latest", "@y/protocols": "^1.0.6-rc.1", "@y/y": "^14.0.0-rc.23" diff --git a/examples/07-collaboration/14-suggestion-gallery/tsconfig.json b/examples/07-collaboration/14-suggestion-gallery/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/07-collaboration/14-suggestion-gallery/tsconfig.json +++ b/examples/07-collaboration/14-suggestion-gallery/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/07-collaboration/14-suggestion-gallery/vite.config.ts b/examples/07-collaboration/14-suggestion-gallery/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/07-collaboration/14-suggestion-gallery/vite.config.ts +++ b/examples/07-collaboration/14-suggestion-gallery/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/08-extensions/01-tiptap-arrow-conversion/tsconfig.json b/examples/08-extensions/01-tiptap-arrow-conversion/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/08-extensions/01-tiptap-arrow-conversion/tsconfig.json +++ b/examples/08-extensions/01-tiptap-arrow-conversion/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/08-extensions/01-tiptap-arrow-conversion/vite.config.ts b/examples/08-extensions/01-tiptap-arrow-conversion/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/08-extensions/01-tiptap-arrow-conversion/vite.config.ts +++ b/examples/08-extensions/01-tiptap-arrow-conversion/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/08-extensions/02-versioning/tsconfig.json b/examples/08-extensions/02-versioning/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/08-extensions/02-versioning/tsconfig.json +++ b/examples/08-extensions/02-versioning/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/08-extensions/02-versioning/vite.config.ts b/examples/08-extensions/02-versioning/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/08-extensions/02-versioning/vite.config.ts +++ b/examples/08-extensions/02-versioning/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/09-ai/01-minimal/tsconfig.json b/examples/09-ai/01-minimal/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/09-ai/01-minimal/tsconfig.json +++ b/examples/09-ai/01-minimal/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/09-ai/01-minimal/vite.config.ts b/examples/09-ai/01-minimal/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/09-ai/01-minimal/vite.config.ts +++ b/examples/09-ai/01-minimal/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/09-ai/02-playground/tsconfig.json b/examples/09-ai/02-playground/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/09-ai/02-playground/tsconfig.json +++ b/examples/09-ai/02-playground/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/09-ai/02-playground/vite.config.ts b/examples/09-ai/02-playground/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/09-ai/02-playground/vite.config.ts +++ b/examples/09-ai/02-playground/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/09-ai/03-custom-ai-menu-items/tsconfig.json b/examples/09-ai/03-custom-ai-menu-items/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/09-ai/03-custom-ai-menu-items/tsconfig.json +++ b/examples/09-ai/03-custom-ai-menu-items/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/09-ai/03-custom-ai-menu-items/vite.config.ts b/examples/09-ai/03-custom-ai-menu-items/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/09-ai/03-custom-ai-menu-items/vite.config.ts +++ b/examples/09-ai/03-custom-ai-menu-items/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/09-ai/04-with-collaboration/tsconfig.json b/examples/09-ai/04-with-collaboration/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/09-ai/04-with-collaboration/tsconfig.json +++ b/examples/09-ai/04-with-collaboration/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/09-ai/04-with-collaboration/vite.config.ts b/examples/09-ai/04-with-collaboration/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/09-ai/04-with-collaboration/vite.config.ts +++ b/examples/09-ai/04-with-collaboration/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/09-ai/05-manual-execution/tsconfig.json b/examples/09-ai/05-manual-execution/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/09-ai/05-manual-execution/tsconfig.json +++ b/examples/09-ai/05-manual-execution/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/09-ai/05-manual-execution/vite.config.ts b/examples/09-ai/05-manual-execution/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/09-ai/05-manual-execution/vite.config.ts +++ b/examples/09-ai/05-manual-execution/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/09-ai/06-client-side-transport/tsconfig.json b/examples/09-ai/06-client-side-transport/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/09-ai/06-client-side-transport/tsconfig.json +++ b/examples/09-ai/06-client-side-transport/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/09-ai/06-client-side-transport/vite.config.ts b/examples/09-ai/06-client-side-transport/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/09-ai/06-client-side-transport/vite.config.ts +++ b/examples/09-ai/06-client-side-transport/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/09-ai/07-server-persistence/tsconfig.json b/examples/09-ai/07-server-persistence/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/09-ai/07-server-persistence/tsconfig.json +++ b/examples/09-ai/07-server-persistence/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/09-ai/07-server-persistence/vite.config.ts b/examples/09-ai/07-server-persistence/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/09-ai/07-server-persistence/vite.config.ts +++ b/examples/09-ai/07-server-persistence/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/vanilla-js/react-vanilla-custom-blocks/tsconfig.json b/examples/vanilla-js/react-vanilla-custom-blocks/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/vanilla-js/react-vanilla-custom-blocks/tsconfig.json +++ b/examples/vanilla-js/react-vanilla-custom-blocks/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/vanilla-js/react-vanilla-custom-blocks/vite.config.ts b/examples/vanilla-js/react-vanilla-custom-blocks/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/vanilla-js/react-vanilla-custom-blocks/vite.config.ts +++ b/examples/vanilla-js/react-vanilla-custom-blocks/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/vanilla-js/react-vanilla-custom-inline-content/tsconfig.json b/examples/vanilla-js/react-vanilla-custom-inline-content/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/vanilla-js/react-vanilla-custom-inline-content/tsconfig.json +++ b/examples/vanilla-js/react-vanilla-custom-inline-content/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/vanilla-js/react-vanilla-custom-inline-content/vite.config.ts b/examples/vanilla-js/react-vanilla-custom-inline-content/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/vanilla-js/react-vanilla-custom-inline-content/vite.config.ts +++ b/examples/vanilla-js/react-vanilla-custom-inline-content/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/vanilla-js/react-vanilla-custom-styles/tsconfig.json b/examples/vanilla-js/react-vanilla-custom-styles/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/vanilla-js/react-vanilla-custom-styles/tsconfig.json +++ b/examples/vanilla-js/react-vanilla-custom-styles/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/vanilla-js/react-vanilla-custom-styles/vite.config.ts b/examples/vanilla-js/react-vanilla-custom-styles/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/vanilla-js/react-vanilla-custom-styles/vite.config.ts +++ b/examples/vanilla-js/react-vanilla-custom-styles/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/examples/vanilla-js/vanilla-custom-side-menu/tsconfig.json b/examples/vanilla-js/vanilla-custom-side-menu/tsconfig.json index 93fa81bee8..2aa62c56e6 100644 --- a/examples/vanilla-js/vanilla-custom-side-menu/tsconfig.json +++ b/examples/vanilla-js/vanilla-custom-side-menu/tsconfig.json @@ -15,7 +15,10 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "composite": true + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } }, "include": ["."], "__ADD_FOR_LOCAL_DEV_references": [ diff --git a/examples/vanilla-js/vanilla-custom-side-menu/vite.config.ts b/examples/vanilla-js/vanilla-custom-side-menu/vite.config.ts index 95ed8cc314..a96f1f04ff 100644 --- a/examples/vanilla-js/vanilla-custom-side-menu/vite.config.ts +++ b/examples/vanilla-js/vanilla-custom-side-menu/vite.config.ts @@ -16,6 +16,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/package.json b/package.json index c6a2b830cd..0323f0ce02 100644 --- a/package.json +++ b/package.json @@ -2,15 +2,14 @@ "name": "root", "type": "module", "devDependencies": { - "@typescript/native-preview": "7.0.0-dev.20260615.1", "bumpp": "^11.1.0", "changelogen": "^0.6.1", "concurrently": "9.1.2", "eslint-plugin-import": "^2.32.0", "glob": "^10.5.0", - "oxlint-tsgolint": "^0.23.0", + "oxlint-tsgolint": "^7.0.2001", "serve": "14.2.6", - "typescript": "^5.9.3", + "typescript": "^7.0.2", "vite-plus": "catalog:", "wait-on": "9.0.5" }, @@ -31,7 +30,7 @@ "e2e:updateSnaps": "bash tests/docker-run.sh -e CI=1 -- --run -u", "e2e:report": "serve -l 4173 tests/playwright-report", "lint": "vp lint --type-aware", - "typecheck": "tsgo --noEmit -p tsconfig.json", + "typecheck": "tsc --noEmit -p tsconfig.json", "postpublish": "rm -rf packages/core/README.md && rm -rf packages/react/README.md", "prebuild": "cp README.md packages/core/README.md && cp README.md packages/react/README.md", "prestart": "vp run build", diff --git a/packages/ariakit/package.json b/packages/ariakit/package.json index 70eabe70b5..7fb39e2050 100644 --- a/packages/ariakit/package.json +++ b/packages/ariakit/package.json @@ -67,7 +67,7 @@ "react-dom": "^19.2.5", "rimraf": "^5.0.10", "rollup-plugin-webpack-stats": "^0.2.6", - "typescript": "^5.9.3", + "typescript": "^7.0.2", "vite-plugin-externalize-deps": "^0.10.0", "vite-plus": "catalog:" }, diff --git a/packages/ariakit/vite.config.ts b/packages/ariakit/vite.config.ts index a53b363ac0..779d940bb7 100644 --- a/packages/ariakit/vite.config.ts +++ b/packages/ariakit/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig( run: { tasks: { build: { - command: "tsgo && vp build", + command: "tsc && vp build", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, diff --git a/packages/code-block/package.json b/packages/code-block/package.json index 6c6c60a25e..936a103efa 100644 --- a/packages/code-block/package.json +++ b/packages/code-block/package.json @@ -49,18 +49,18 @@ "clean": "rimraf dist && rimraf types" }, "dependencies": { - "@shikijs/core": "^4", - "@shikijs/engine-javascript": "^4", - "@shikijs/langs-precompiled": "^4", - "@shikijs/themes": "^4" + "@shikijs/core": "^4.4.3", + "@shikijs/engine-javascript": "^4.4.3", + "@shikijs/langs-precompiled": "^4.4.3", + "@shikijs/themes": "^4.4.3" }, "optionalDependencies": { - "@shikijs/types": "^4" + "@shikijs/types": "^4.4.3" }, "devDependencies": { "rimraf": "^5.0.10", "rollup-plugin-webpack-stats": "^0.2.6", - "typescript": "^5.9.3", + "typescript": "^7.0.2", "vite-plus": "catalog:" }, "peerDependencies": { diff --git a/packages/code-block/vite.config.ts b/packages/code-block/vite.config.ts index 5f38b6f16a..e3a4990d36 100644 --- a/packages/code-block/vite.config.ts +++ b/packages/code-block/vite.config.ts @@ -11,7 +11,7 @@ export default defineConfig( run: { tasks: { build: { - command: "tsgo && vp build", + command: "tsc && vp build", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, diff --git a/packages/core/package.json b/packages/core/package.json index b928509796..145e7f44e0 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -85,7 +85,7 @@ }, "scripts": { "dev": "vp dev", - "build-bundled": "tsgo && vp build --config vite.config.bundled.ts && git checkout tmp-releases && rm -rf ../../release && mv ../../release-tmp ../../release", + "build-bundled": "tsc && vp build --config vite.config.bundled.ts && git checkout tmp-releases && rm -rf ../../release && mv ../../release-tmp ../../release", "preview": "vp preview", "lint": "vp lint src", "test": "vp test --run", @@ -96,7 +96,7 @@ "dependencies": { "@emoji-mart/data": "^1.2.1", "@handlewithcare/prosemirror-inputrules": "^0.1.4", - "@shikijs/types": "^4", + "@shikijs/types": "^4.4.3", "@tiptap/core": "^3.29.2", "@tiptap/extension-bold": "^3.29.2", "@tiptap/extension-code": "^3.29.2", @@ -109,7 +109,7 @@ "emoji-mart": "^5.6.0", "fast-deep-equal": "^3.1.3", "lib0": "1.0.0-rc.22", - "prosemirror-highlight": "^0.15.1", + "prosemirror-highlight": "^0.15.3", "prosemirror-model": "^1.25.11", "prosemirror-state": "^1.4.4", "prosemirror-tables": "^1.8.5", @@ -120,37 +120,37 @@ "jsdom": "^29.0.2", "rimraf": "^5.0.10", "rollup-plugin-webpack-stats": "^0.2.6", - "typescript": "^5.9.3", + "typescript": "^7.0.2", "vite-plus": "catalog:", "y-prosemirror": "^1.3.7", "y-protocols": "^1.0.6", "yjs": "^13.6.27" }, "peerDependencies": { + "@y/prosemirror": "^2.0.0-6", + "@y/protocols": "^1.0.6-rc.1", + "@y/y": "^14.0.0-rc.23", "y-prosemirror": "^1.3.7", "y-protocols": "^1.0.6", - "yjs": "^13.6.27", - "@y/y": "^14.0.0-rc.23", - "@y/prosemirror": "^2.0.0-6", - "@y/protocols": "^1.0.6-rc.1" + "yjs": "^13.6.27" }, "peerDependenciesMeta": { - "y-prosemirror": { + "@y/y": { "optional": true }, - "y-protocols": { + "@y/prosemirror": { "optional": true }, - "yjs": { + "@y/protocols": { "optional": true }, - "@y/y": { + "y-prosemirror": { "optional": true }, - "@y/prosemirror": { + "y-protocols": { "optional": true }, - "@y/protocols": { + "yjs": { "optional": true } }, diff --git a/packages/core/src/extensions/Versioning/inMemoryVersioning.ts b/packages/core/src/extensions/Versioning/inMemoryVersioning.ts index 5c0491800f..75aae103d0 100644 --- a/packages/core/src/extensions/Versioning/inMemoryVersioning.ts +++ b/packages/core/src/extensions/Versioning/inMemoryVersioning.ts @@ -136,13 +136,23 @@ export function createInMemoryVersioningEndpoints(): VersioningEndpoints< const contents = new Map[]>(); let nextId = 1; + // `Date.now()` only has millisecond resolution, so two snapshots created in + // the same tick would share a timestamp and `sortSnapshotsNewestFirst` (which + // has nothing else to order on) could list them oldest-first. Hand out + // strictly increasing timestamps so creation order is always preserved. + let lastTimestamp = 0; + function nextTimestamp() { + lastTimestamp = Math.max(Date.now(), lastTimestamp + 1); + return lastTimestamp; + } + return { async list() { return sortSnapshotsNewestFirst([...snapshots]); }, async create(currentDoc, options) { - const now = Date.now(); + const now = nextTimestamp(); const id = String(nextId++); const snapshot: VersionSnapshot = { id, @@ -166,7 +176,7 @@ export function createInMemoryVersioningEndpoints(): VersioningEndpoints< // Create a "Restored from …" snapshot of the current state before // restoring, so the user can undo the restore. - const now = Date.now(); + const now = nextTimestamp(); const backupId = String(nextId++); const backup: VersionSnapshot = { id: backupId, @@ -196,7 +206,7 @@ export function createInMemoryVersioningEndpoints(): VersioningEndpoints< throw new Error(`Snapshot ${String(snapshot.id)} not found`); } stored.name = name; - stored.updatedAt = Date.now(); + stored.updatedAt = nextTimestamp(); }, async remove(snapshot) { diff --git a/packages/core/src/y/extensions/AttributionExtension.test.ts b/packages/core/src/y/extensions/AttributionExtension.test.ts index 3c28d50771..df0267f093 100644 --- a/packages/core/src/y/extensions/AttributionExtension.test.ts +++ b/packages/core/src/y/extensions/AttributionExtension.test.ts @@ -7,6 +7,12 @@ import { BlockNoteEditor } from "../../editor/BlockNoteEditor.js"; import type { User } from "../../user/index.js"; import { AttributionExtension } from "./AttributionExtension.js"; +// Editors created during a test, destroyed in afterEach: an undestroyed +// EditorView leaves ProseMirror DOMObserver timers behind, which fire after +// the jsdom environment is torn down ("document is not defined" as an +// unhandled error - flaky, timing-dependent, mostly on slow CI). +const editors: BlockNoteEditor[] = []; + // A `resolveUsers` spy plus an editor with the AttributionExtension registered. // No Yjs/collaboration needed — the extension's load plugin only cares that a // transaction adds a `y-attributed-*` mark, which we do directly below. @@ -26,6 +32,7 @@ function createEditor() { extensions: [AttributionExtension({ resolveUsers })], }); editor.mount(document.createElement("div")); + editors.push(editor); return { editor, resolveUsers }; } @@ -47,6 +54,9 @@ function addInsertMark(editor: BlockNoteEditor, userIds: string[]) { describe("AttributionExtension user loading", () => { afterEach(() => { + for (const editor of editors.splice(0)) { + editor._tiptapEditor.destroy(); + } vi.restoreAllMocks(); }); diff --git a/packages/core/src/y/extensions/Versioning.test.ts b/packages/core/src/y/extensions/Versioning.test.ts index 544bfbec67..88f3ad70c5 100644 --- a/packages/core/src/y/extensions/Versioning.test.ts +++ b/packages/core/src/y/extensions/Versioning.test.ts @@ -31,15 +31,26 @@ function createInMemoryYjsEndpoints(): VersioningEndpoints { >(); const contents = new Map(); + // `Date.now()` only has millisecond resolution, so snapshots created in quick + // succession (as they are in these tests) can share a timestamp, which leaves + // the newest-first ordering of `list()` ambiguous. Hand out strictly + // increasing timestamps so creation order is always recoverable. + let lastTimestamp = 0; + function nextTimestamp() { + lastTimestamp = Math.max(Date.now(), lastTimestamp + 1); + return lastTimestamp; + } + return { list: async () => [...snapshots.values()].sort((a, b) => b.createdAt - a.createdAt), create: async (fragment, options) => { + const now = nextTimestamp(); const snapshot = { id: crypto.randomUUID(), name: options?.name, - createdAt: Date.now(), - updatedAt: Date.now(), + createdAt: now, + updatedAt: now, restoredFromSnapshotId: options?.restoredFromSnapshot?.id ? String(options.restoredFromSnapshot.id) : undefined, @@ -57,11 +68,12 @@ function createInMemoryYjsEndpoints(): VersioningEndpoints { }, restore: async (fragment, snapshot) => { // Create backup + const backupTimestamp = nextTimestamp(); const backup = { id: crypto.randomUUID(), name: "Backup", - createdAt: Date.now(), - updatedAt: Date.now(), + createdAt: backupTimestamp, + updatedAt: backupTimestamp, }; contents.set(backup.id, Y.encodeStateAsUpdateV2(fragment.doc!)); snapshots.set(backup.id, backup); @@ -70,11 +82,12 @@ function createInMemoryYjsEndpoints(): VersioningEndpoints { const tempDoc = new Y.Doc(); Y.applyUpdateV2(tempDoc, snapshotContent); + const restoredTimestamp = nextTimestamp(); const restored = { id: crypto.randomUUID(), name: "Restored Snapshot", - createdAt: Date.now(), - updatedAt: Date.now(), + createdAt: restoredTimestamp, + updatedAt: restoredTimestamp, restoredFromSnapshotId: String(snapshot.id), }; contents.set(restored.id, Y.encodeStateAsUpdateV2(tempDoc)); @@ -89,7 +102,7 @@ function createInMemoryYjsEndpoints(): VersioningEndpoints { throw new Error(`Snapshot ${String(snapshot.id)} not found`); } s.name = name; - s.updatedAt = Date.now(); + s.updatedAt = nextTimestamp(); }, }; } diff --git a/packages/core/src/yjs/extensions/Versioning.test.ts b/packages/core/src/yjs/extensions/Versioning.test.ts index e8804e9745..b3fdac78a2 100644 --- a/packages/core/src/yjs/extensions/Versioning.test.ts +++ b/packages/core/src/yjs/extensions/Versioning.test.ts @@ -304,15 +304,26 @@ function createInMemoryYjsEndpoints(): VersioningEndpoints< >(); const contents = new Map(); + // `Date.now()` only has millisecond resolution, so snapshots created in quick + // succession (as they are in these tests) can share a timestamp, which leaves + // the newest-first ordering of `list()` ambiguous. Hand out strictly + // increasing timestamps so creation order is always recoverable. + let lastTimestamp = 0; + function nextTimestamp() { + lastTimestamp = Math.max(Date.now(), lastTimestamp + 1); + return lastTimestamp; + } + return { list: async () => [...snapshots.values()].sort((a, b) => b.createdAt - a.createdAt), create: async (fragment, options) => { + const now = nextTimestamp(); const snapshot = { id: crypto.randomUUID(), name: options?.name, - createdAt: Date.now(), - updatedAt: Date.now(), + createdAt: now, + updatedAt: now, restoredFromSnapshotId: options?.restoredFromSnapshot?.id ? String(options.restoredFromSnapshot.id) : undefined, @@ -329,11 +340,12 @@ function createInMemoryYjsEndpoints(): VersioningEndpoints< return data; }, restore: async (fragment, snapshot) => { + const backupTimestamp = nextTimestamp(); const backup = { id: crypto.randomUUID(), name: "Backup", - createdAt: Date.now(), - updatedAt: Date.now(), + createdAt: backupTimestamp, + updatedAt: backupTimestamp, }; contents.set(backup.id, Y.encodeStateAsUpdate(fragment.doc!)); snapshots.set(backup.id, backup); @@ -347,7 +359,7 @@ function createInMemoryYjsEndpoints(): VersioningEndpoints< throw new Error(`Snapshot ${String(snapshot.id)} not found`); } s.name = name; - s.updatedAt = Date.now(); + s.updatedAt = nextTimestamp(); }, }; } diff --git a/packages/core/vite.config.ts b/packages/core/vite.config.ts index 603a974375..eca8efa6a5 100644 --- a/packages/core/vite.config.ts +++ b/packages/core/vite.config.ts @@ -9,7 +9,7 @@ export default defineConfig({ run: { tasks: { build: { - command: "tsgo && vp build", + command: "tsc && vp build", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, diff --git a/packages/dev-scripts/examples/template-react/tsconfig.json.template.tsx b/packages/dev-scripts/examples/template-react/tsconfig.json.template.tsx index e71e32e5a2..92beea56ae 100644 --- a/packages/dev-scripts/examples/template-react/tsconfig.json.template.tsx +++ b/packages/dev-scripts/examples/template-react/tsconfig.json.template.tsx @@ -1,4 +1,6 @@ -const template = () => ({ +import type { Project } from "../util"; + +const template = (_project: Project) => ({ __comment: "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", compilerOptions: { target: "ESNext", @@ -16,6 +18,9 @@ const template = () => ({ noEmit: true, jsx: "react-jsx", composite: true, + // The repo-wide alias for the shared test-utils directory (private, so it + // only resolves inside the monorepo). Harmless for examples that don't use it. + paths: { "@shared/*": ["../../../shared/*"] }, }, include: ["."], __ADD_FOR_LOCAL_DEV_references: [ diff --git a/packages/dev-scripts/examples/template-react/vite.config.ts.template.tsx b/packages/dev-scripts/examples/template-react/vite.config.ts.template.tsx index b758ff12f6..7b6f0af639 100644 --- a/packages/dev-scripts/examples/template-react/vite.config.ts.template.tsx +++ b/packages/dev-scripts/examples/template-react/vite.config.ts.template.tsx @@ -26,6 +26,10 @@ export default defineConfig(((conf: { command: string }) => ({ !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) ? {} : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), // Comment out the lines below to load a built version of blocknote // or, keep as is to load live from sources with live reload working "@blocknote/core": path.resolve( diff --git a/packages/dev-scripts/package.json b/packages/dev-scripts/package.json index 1d4bf58d36..5ae9805c17 100644 --- a/packages/dev-scripts/package.json +++ b/packages/dev-scripts/package.json @@ -25,7 +25,7 @@ "rimraf": "^5.0.10", "tinyglobby": "0.2.12", "tsx": "^4.20.6", - "typescript": "^5.9.3", + "typescript": "^7.0.2", "vite-plus": "catalog:" }, "dependencies": {} diff --git a/packages/dev-scripts/vite.config.ts b/packages/dev-scripts/vite.config.ts index c87eb285a6..2f5fadff19 100644 --- a/packages/dev-scripts/vite.config.ts +++ b/packages/dev-scripts/vite.config.ts @@ -4,7 +4,7 @@ export default defineConfig({ run: { tasks: { build: { - command: "tsgo", + command: "tsc", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, diff --git a/packages/mantine/package.json b/packages/mantine/package.json index 6fb73d041b..4d7744994f 100644 --- a/packages/mantine/package.json +++ b/packages/mantine/package.json @@ -72,7 +72,7 @@ "react-dom": "^19.2.5", "rimraf": "^5.0.10", "rollup-plugin-webpack-stats": "^0.2.6", - "typescript": "^5.9.3", + "typescript": "^7.0.2", "vite-plugin-externalize-deps": "^0.10.0", "vite-plus": "catalog:" }, diff --git a/packages/mantine/vite.config.ts b/packages/mantine/vite.config.ts index 8d36116b79..88cf0b5dd4 100644 --- a/packages/mantine/vite.config.ts +++ b/packages/mantine/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig( run: { tasks: { build: { - command: "tsgo && vp build", + command: "tsc && vp build", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, diff --git a/packages/react/package.json b/packages/react/package.json index 7e29004226..5d81c5bf05 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -78,7 +78,7 @@ "react-dom": "^19.2.5", "rimraf": "^5.0.10", "rollup-plugin-webpack-stats": "^0.2.6", - "typescript": "^5.9.3", + "typescript": "^7.0.2", "vite-plugin-externalize-deps": "^0.10.0", "vite-plus": "catalog:" }, diff --git a/packages/react/vite.config.ts b/packages/react/vite.config.ts index aae55fb97c..2a835469db 100644 --- a/packages/react/vite.config.ts +++ b/packages/react/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig( run: { tasks: { build: { - command: "tsgo && vp build", + command: "tsc && vp build", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, diff --git a/packages/server-util/package.json b/packages/server-util/package.json index 9fd95bad40..ec1c719725 100644 --- a/packages/server-util/package.json +++ b/packages/server-util/package.json @@ -59,7 +59,7 @@ "@blocknote/core": "workspace:^", "@blocknote/react": "workspace:^", "@tiptap/pm": "^3.29.2", - "jsdom": "^25.0.1", + "jsdom": "^29.0.2", "yjs": "^13.6.27" }, "devDependencies": { @@ -72,7 +72,7 @@ "react-dom": "^19.2.5", "rimraf": "^5.0.10", "rollup-plugin-webpack-stats": "^0.2.6", - "typescript": "^5.9.3", + "typescript": "^7.0.2", "vite-plus": "catalog:" }, "peerDependencies": { diff --git a/packages/server-util/vite.config.ts b/packages/server-util/vite.config.ts index e92f52f422..da43b397e1 100644 --- a/packages/server-util/vite.config.ts +++ b/packages/server-util/vite.config.ts @@ -11,7 +11,7 @@ export default defineConfig( run: { tasks: { build: { - command: "tsgo && vp build", + command: "tsc && vp build", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, diff --git a/packages/shadcn/package.json b/packages/shadcn/package.json index 5763809a8b..4e464286e6 100644 --- a/packages/shadcn/package.json +++ b/packages/shadcn/package.json @@ -72,7 +72,7 @@ "react-dom": "^19.2.5", "rimraf": "^5.0.10", "rollup-plugin-webpack-stats": "^0.2.6", - "typescript": "^5.9.3", + "typescript": "^7.0.2", "vite-plugin-externalize-deps": "^0.10.0", "vite-plus": "catalog:" }, diff --git a/packages/shadcn/vite.config.ts b/packages/shadcn/vite.config.ts index 303db0121b..75055584af 100644 --- a/packages/shadcn/vite.config.ts +++ b/packages/shadcn/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig( run: { tasks: { build: { - command: "tsgo && vp build", + command: "tsc && vp build", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, diff --git a/packages/xl-ai-server/package.json b/packages/xl-ai-server/package.json index 91047a91f5..ac6e1fe1df 100644 --- a/packages/xl-ai-server/package.json +++ b/packages/xl-ai-server/package.json @@ -57,7 +57,7 @@ "@types/node": "22.13.13", "rimraf": "^5.0.10", "rollup-plugin-webpack-stats": "^0.2.6", - "typescript": "^5.9.3", + "typescript": "^7.0.2", "undici": "^6.22.0", "vite-node": "^6.0.0", "vite-plugin-externalize-deps": "^0.10.0", diff --git a/packages/xl-ai-server/vite.config.ts b/packages/xl-ai-server/vite.config.ts index 15f535971e..1bb90638b0 100644 --- a/packages/xl-ai-server/vite.config.ts +++ b/packages/xl-ai-server/vite.config.ts @@ -11,7 +11,7 @@ export default defineConfig( run: { tasks: { build: { - command: "tsgo && vp build", + command: "tsc && vp build", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, diff --git a/packages/xl-ai/package.json b/packages/xl-ai/package.json index 1c965b2001..46432ad073 100644 --- a/packages/xl-ai/package.json +++ b/packages/xl-ai/package.json @@ -86,7 +86,6 @@ "prosemirror-view": "^1.42.2" }, "devDependencies": { - "@blocknote/shared": "workspace:^", "react-icons": "^5.5.0", "@ai-sdk/anthropic": "^3.0.2", "@ai-sdk/google": "^3.0.2", @@ -111,7 +110,7 @@ "msw-snapshot": "^5.3.0", "rimraf": "^5.0.10", "rollup-plugin-webpack-stats": "^0.2.6", - "typescript": "^5.9.3", + "typescript": "^7.0.2", "undici": "^6.22.0", "vite-plugin-externalize-deps": "^0.10.0", "vite-plus": "catalog:", diff --git a/packages/xl-ai/vite.config.ts b/packages/xl-ai/vite.config.ts index e488b7d471..8d47bb1287 100644 --- a/packages/xl-ai/vite.config.ts +++ b/packages/xl-ai/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig( run: { tasks: { build: { - command: "tsgo && vp build", + command: "tsc && vp build", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, diff --git a/packages/xl-docx-exporter/package.json b/packages/xl-docx-exporter/package.json index 632f9c68a9..97ba936604 100644 --- a/packages/xl-docx-exporter/package.json +++ b/packages/xl-docx-exporter/package.json @@ -72,9 +72,9 @@ "react-dom": "^19.2.5", "rimraf": "^5.0.10", "rollup-plugin-webpack-stats": "^0.2.6", - "typescript": "^5.9.3", - "xml-formatter": "^3.6.7", - "vite-plus": "catalog:" + "typescript": "^7.0.2", + "vite-plus": "catalog:", + "xml-formatter": "^3.6.7" }, "peerDependencies": { "react": "^18.0 || ^19.0 || >= 19.0.0-rc", diff --git a/packages/xl-docx-exporter/vite.config.ts b/packages/xl-docx-exporter/vite.config.ts index 8a88c957f6..65c7f81406 100644 --- a/packages/xl-docx-exporter/vite.config.ts +++ b/packages/xl-docx-exporter/vite.config.ts @@ -11,7 +11,7 @@ export default defineConfig( run: { tasks: { build: { - command: "tsgo && vp build", + command: "tsc && vp build", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, diff --git a/packages/xl-email-exporter/package.json b/packages/xl-email-exporter/package.json index 05590fda47..96fd1e5e20 100644 --- a/packages/xl-email-exporter/package.json +++ b/packages/xl-email-exporter/package.json @@ -69,7 +69,7 @@ "react-email": "^5.2.5", "rimraf": "^5.0.10", "rollup-plugin-webpack-stats": "^0.2.6", - "typescript": "^5.9.3", + "typescript": "^7.0.2", "vite-plus": "catalog:" }, "peerDependencies": { diff --git a/packages/xl-email-exporter/vite.config.ts b/packages/xl-email-exporter/vite.config.ts index adfc639875..7f66ce760b 100644 --- a/packages/xl-email-exporter/vite.config.ts +++ b/packages/xl-email-exporter/vite.config.ts @@ -11,7 +11,7 @@ export default defineConfig( run: { tasks: { build: { - command: "tsgo && vp build", + command: "tsc && vp build", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, diff --git a/packages/xl-multi-column/package.json b/packages/xl-multi-column/package.json index 24f42a0fd5..9369454870 100644 --- a/packages/xl-multi-column/package.json +++ b/packages/xl-multi-column/package.json @@ -62,12 +62,12 @@ "react-icons": "^5.5.0", "@types/react": "^19.2.3", "@types/react-dom": "^19.2.3", - "jsdom": "^25.0.1", + "jsdom": "^29.0.2", "react": "^19.2.5", "react-dom": "^19.2.5", "rimraf": "^5.0.10", "rollup-plugin-webpack-stats": "^0.2.6", - "typescript": "^5.9.3", + "typescript": "^7.0.2", "vite-plus": "catalog:" }, "peerDependencies": { diff --git a/packages/xl-multi-column/vite.config.ts b/packages/xl-multi-column/vite.config.ts index 5b0d09586a..ef2d51f5e1 100644 --- a/packages/xl-multi-column/vite.config.ts +++ b/packages/xl-multi-column/vite.config.ts @@ -11,7 +11,7 @@ export default defineConfig( run: { tasks: { build: { - command: "tsgo && vp build", + command: "tsc && vp build", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, diff --git a/packages/xl-odt-exporter/package.json b/packages/xl-odt-exporter/package.json index 6bc2afb081..8c19e3c449 100644 --- a/packages/xl-odt-exporter/package.json +++ b/packages/xl-odt-exporter/package.json @@ -71,9 +71,9 @@ "react-dom": "^19.2.5", "rimraf": "^5.0.10", "rollup-plugin-webpack-stats": "^0.2.6", - "typescript": "^5.9.3", - "xml-formatter": "^3.6.7", - "vite-plus": "catalog:" + "typescript": "^7.0.2", + "vite-plus": "catalog:", + "xml-formatter": "^3.6.7" }, "peerDependencies": { "react": "^18.0 || ^19.0 || >= 19.0.0-rc", diff --git a/packages/xl-odt-exporter/vite.config.ts b/packages/xl-odt-exporter/vite.config.ts index e495c78429..78c7ecce14 100644 --- a/packages/xl-odt-exporter/vite.config.ts +++ b/packages/xl-odt-exporter/vite.config.ts @@ -11,7 +11,7 @@ export default defineConfig( run: { tasks: { build: { - command: "tsgo && vp build", + command: "tsc && vp build", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, @@ -50,9 +50,16 @@ export default defineConfig( build: { sourcemap: true, lib: { - entry: path.resolve(__dirname, "src/index.ts"), + entry: { + "blocknote-xl-odt-exporter": path.resolve( + __dirname, + "src/index.ts", + ), + }, name: "blocknote-xl-odt-exporter", - fileName: "blocknote-xl-odt-exporter", + formats: ["es", "cjs"], + fileName: (format, entryName) => + format === "es" ? `${entryName}.js` : `${entryName}.cjs`, }, rollupOptions: { // make sure to externalize deps that shouldn't be bundled diff --git a/packages/xl-pdf-exporter/package.json b/packages/xl-pdf-exporter/package.json index 35a1e9e229..5468fa27af 100644 --- a/packages/xl-pdf-exporter/package.json +++ b/packages/xl-pdf-exporter/package.json @@ -58,23 +58,19 @@ "dependencies": { "@blocknote/core": "workspace:^", "@blocknote/xl-multi-column": "workspace:^", - "@react-pdf/renderer": "^4.3.0" + "@react-pdf/renderer": "^4.5.1" }, "devDependencies": { "@blocknote/shared": "workspace:^", "@testing-library/react": "^16.3.0", - "@types/jest-image-snapshot": "^6.4.0", - "@types/jsdom": "^21.1.7", "@types/react": "^19.2.3", "@types/react-dom": "^19.2.3", - "jest-image-snapshot": "^6.5.1", - "pdf-to-img": "^4.5.0", "react": "^19.2.5", "react-dom": "^19.2.5", "react-element-to-jsx-string": "^17.0.1", "rimraf": "^5.0.10", "rollup-plugin-webpack-stats": "^0.2.6", - "typescript": "^5.9.3", + "typescript": "^7.0.2", "vite-plus": "catalog:" }, "peerDependencies": { diff --git a/packages/xl-pdf-exporter/vite.config.ts b/packages/xl-pdf-exporter/vite.config.ts index 66fcb084de..50022dfd8a 100644 --- a/packages/xl-pdf-exporter/vite.config.ts +++ b/packages/xl-pdf-exporter/vite.config.ts @@ -11,7 +11,7 @@ export default defineConfig( run: { tasks: { build: { - command: "tsgo && vp build", + command: "tsc && vp build", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, @@ -21,7 +21,7 @@ export default defineConfig( }, }, test: { - environment: "jsdom", + environment: "node", setupFiles: ["./vitestSetup.ts"], testTimeout: 15000, // assetsInclude: [ diff --git a/patches/katex@0.16.47.patch b/patches/katex@0.16.47.patch new file mode 100644 index 0000000000..3aa9ca48f8 --- /dev/null +++ b/patches/katex@0.16.47.patch @@ -0,0 +1,44 @@ +diff --git a/dist/katex.js b/dist/katex.js +index 2de2003251a8e5dda149c3b707eaf28f42b459f2..e7e92bdbf7c67492119cb76f1eb2d608e3d568ec 100644 +--- a/dist/katex.js ++++ b/dist/katex.js +@@ -14624,7 +14624,7 @@ const functions = _functions; + */ + const spaceRegexString = "[ \r\n\t]"; + const controlWordRegexString = "\\\\[a-zA-Z@]+"; +-const controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]"; ++const controlSymbolRegexString = "\\\\[^\\uD800-\\uDFFF]"; + const controlWordWhitespaceRegexString = "(" + controlWordRegexString + ")" + spaceRegexString + "*"; + const controlSpaceRegexString = "\\\\(\n|[ \r\t]+\n?)[ \r\t]*"; + const combiningDiacriticalMarkString = "[\u0300-\u036f]"; +@@ -14635,7 +14635,7 @@ controlSpaceRegexString + "|") + + "([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + (// single codepoint + combiningDiacriticalMarkString + "*") + + // ...plus accents +-"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + (// surrogate pair ++"|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]" + (// surrogate pair + combiningDiacriticalMarkString + "*") + + // ...plus accents + "|\\\\verb\\*([^]).*?\\4" + +diff --git a/dist/katex.mjs b/dist/katex.mjs +index b4a83b4b7b9b31064413fa7eb5447823110d7305..dc61e4c7d080560cd1b198fba3cbee86f27fb14d 100644 +--- a/dist/katex.mjs ++++ b/dist/katex.mjs +@@ -13512,7 +13512,7 @@ var functions = _functions; + */ + var spaceRegexString = "[ \r\n\t]"; + var controlWordRegexString = "\\\\[a-zA-Z@]+"; +-var controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]"; ++var controlSymbolRegexString = "\\\\[^\\uD800-\\uDFFF]"; + var controlWordWhitespaceRegexString = "(" + controlWordRegexString + ")" + spaceRegexString + "*"; + var controlSpaceRegexString = "\\\\(\n|[ \r\t]+\n?)[ \r\t]*"; + var combiningDiacriticalMarkString = "[\u0300-\u036f]"; +@@ -13523,7 +13523,7 @@ controlSpaceRegexString + "|") + + "([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + (// single codepoint + combiningDiacriticalMarkString + "*") + + // ...plus accents +-"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + (// surrogate pair ++"|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]" + (// surrogate pair + combiningDiacriticalMarkString + "*") + + // ...plus accents + "|\\\\verb\\*([^]).*?\\4" + diff --git a/playground/package.json b/playground/package.json index 481a8dc8ca..dcf6ca2868 100644 --- a/playground/package.json +++ b/playground/package.json @@ -7,7 +7,8 @@ "dev": "vp dev --host", "preview": "vp preview", "lint": "vp lint src", - "clean": "rimraf dist" + "clean": "rimraf dist", + "build:vercel": "cd .. && vp_build() { pnpm exec vp run --verbose --concurrency-limit 1 --filter '@blocknote/example-editor...' build; }; diag() { echo \"[diag] $1 pids.current=$(cat /sys/fs/cgroup/pids.current 2>/dev/null) pids.max=$(cat /sys/fs/cgroup/pids.max 2>/dev/null) mem=$(cat /sys/fs/cgroup/memory.current 2>/dev/null)/$(cat /sys/fs/cgroup/memory.max 2>/dev/null) procs=$(ps -e 2>/dev/null | wc -l)\"; }; vp_build || { diag fail-1; echo '[diag] Vercel builders intermittently fail spawns (host-side EAGAIN); retrying on warm cache...'; sleep 15; vp_build; } || { diag fail-2; sleep 60; vp_build; } || { diag fail-3; sleep 180; vp_build; }" }, "dependencies": { "@ai-sdk/groq": "^3.0.2", @@ -17,6 +18,8 @@ "@blocknote/code-block": "workspace:^", "@blocknote/core": "workspace:^", "@blocknote/mantine": "workspace:^", + "@blocknote/math-block": "workspace:^", + "@blocknote/diagram-block": "workspace:^", "@blocknote/react": "workspace:^", "@blocknote/server-util": "workspace:^", "@blocknote/shadcn": "workspace:^", @@ -26,6 +29,8 @@ "@blocknote/xl-multi-column": "workspace:^", "@blocknote/xl-odt-exporter": "workspace:^", "@blocknote/xl-pdf-exporter": "workspace:^", + "@react-pdf/math": "^2.0.1", + "katex": "^0.16.11", "@emotion/react": "11.14.0", "@emotion/styled": "11.14.1", "@liveblocks/client": "^3.17.0", diff --git a/playground/src/examples.gen.tsx b/playground/src/examples.gen.tsx index c0eb48c336..155a460786 100644 --- a/playground/src/examples.gen.tsx +++ b/playground/src/examples.gen.tsx @@ -1020,11 +1020,11 @@ export const examples = { tags: ["Basic"], dependencies: { "@blocknote/code-block": "latest", - "@shikijs/core": "^4", - "@shikijs/engine-javascript": "^4", - "@shikijs/langs-precompiled": "^4", - "@shikijs/themes": "^4", - "@shikijs/types": "^4", + "@shikijs/core": "^4.4.3", + "@shikijs/engine-javascript": "^4.4.3", + "@shikijs/langs-precompiled": "^4.4.3", + "@shikijs/themes": "^4.4.3", + "@shikijs/types": "^4.4.3", } as any, }, title: "Custom Code Block Theme & Language", @@ -1127,9 +1127,13 @@ export const examples = { author: "yousefed", tags: ["Interoperability"], dependencies: { - "@blocknote/xl-pdf-exporter": "latest", + "@blocknote/diagram-block": "latest", + "@blocknote/math-block": "latest", "@blocknote/xl-multi-column": "latest", - "@react-pdf/renderer": "^4.3.0", + "@blocknote/xl-pdf-exporter": "latest", + "@react-pdf/math": "^2.0.1", + "@react-pdf/renderer": "^4.5.1", + "mathjax-full": "^3.2.2", } as any, pro: true, }, @@ -1152,8 +1156,11 @@ export const examples = { author: "yousefed", tags: [""], dependencies: { + "@blocknote/diagram-block": "latest", + "@blocknote/math-block": "latest", "@blocknote/xl-docx-exporter": "latest", "@blocknote/xl-multi-column": "latest", + katex: "^0.16.11", } as any, pro: true, }, @@ -1176,8 +1183,11 @@ export const examples = { author: "areknawo", tags: [""], dependencies: { - "@blocknote/xl-odt-exporter": "latest", + "@blocknote/diagram-block": "latest", + "@blocknote/math-block": "latest", "@blocknote/xl-multi-column": "latest", + "@blocknote/xl-odt-exporter": "latest", + katex: "^0.16.11", } as any, pro: true, }, @@ -1200,6 +1210,8 @@ export const examples = { author: "jmarbutt", tags: [""], dependencies: { + "@blocknote/diagram-block": "latest", + "@blocknote/math-block": "latest", "@blocknote/xl-email-exporter": "latest", "@react-email/render": "^2.0.4", } as any, @@ -1445,6 +1457,85 @@ export const examples = { readme: "In this example, we create a custom block which renders a simple HTML paragraph with placeholder text. The block has no editable content.\n\n**Relevant Docs:**\n\n- [Custom Blocks](/docs/features/custom-schemas/custom-blocks)\n- [Editor Setup](/docs/getting-started/editor-setup)", }, + { + projectSlug: "math-block", + fullSlug: "custom-schema/math-block", + pathFromRoot: "examples/06-custom-schema/09-math-block", + config: { + playground: true, + docs: true, + author: "matthewlipski", + tags: [ + "Intermediate", + "Blocks", + "Custom Schemas", + "Suggestion Menus", + "Slash Menu", + ], + dependencies: { + "@blocknote/code-block": "latest", + "@blocknote/math-block": "latest", + "react-icons": "^5.5.0", + } as any, + }, + title: "Math Block", + group: { + pathFromRoot: "examples/06-custom-schema", + slug: "custom-schema", + }, + readme: + "In this example, we register the `@blocknote/math-block` block in a custom schema. The math block renders LaTeX as MathML (using Temml) for the browser to display natively, and reveals an editable LaTeX source popup when selected. Exporting to HTML produces a MathML `` element, and pasting MathML back in is converted to LaTeX.\n\n**Try it out:** Click a formula to edit its LaTeX!\n\n**Relevant Docs:**\n\n- [Custom Blocks](/docs/features/custom-schemas/custom-blocks)\n- [Editor Setup](/docs/getting-started/editor-setup)", + }, + { + projectSlug: "diagram-block", + fullSlug: "custom-schema/diagram-block", + pathFromRoot: "examples/06-custom-schema/10-diagram-block", + config: { + playground: true, + docs: true, + author: "yousefed", + tags: [ + "Intermediate", + "Blocks", + "Custom Schemas", + "Suggestion Menus", + "Slash Menu", + ], + dependencies: { + "@blocknote/code-block": "latest", + "@blocknote/diagram-block": "latest", + "react-icons": "^5.5.0", + } as any, + }, + title: "Diagram Block", + group: { + pathFromRoot: "examples/06-custom-schema", + slug: "custom-schema", + }, + readme: + "In this example, we register the `@blocknote/diagram-block` block in a custom schema. The block renders diagrams from [Mermaid](https://mermaid.js.org/) source code, showing the rendered diagram in place of the source and revealing an editable source popup when selected - built from the same `SourceBlockWithPreview` component the math block uses, so the block itself is only a few dozen lines.\n\n**Try it out:** Click a diagram to edit its Mermaid source!\n\n**Relevant Docs:**\n\n- [Custom Blocks](/docs/features/custom-schemas/custom-blocks)\n- [Editor Setup](/docs/getting-started/editor-setup)", + }, + { + projectSlug: "source-with-preview", + fullSlug: "custom-schema/source-with-preview", + pathFromRoot: "examples/06-custom-schema/11-source-with-preview", + config: { + playground: true, + docs: true, + author: "yousefed", + tags: ["Advanced", "Blocks", "Custom Schemas"], + dependencies: { + "react-icons": "^5.5.0", + } as any, + }, + title: "Source with Preview Blocks", + group: { + pathFromRoot: "examples/06-custom-schema", + slug: "custom-schema", + }, + readme: + 'In this example, we build custom blocks on the source-with-preview pattern — the same building blocks behind BlockNote\'s math and diagram blocks. A custom "CSV table" block renders its comma-separated source as a table, and a custom "color" inline content renders a CSS color as a swatch. Both show the rendered preview in place, while the source is edited in a popup.\n\n**Try it out:** Click the table or a color chip to edit its source!\n\n**Relevant Docs:**\n\n- [Source with Preview Blocks](/docs/features/custom-schemas/source-with-preview)\n- [Custom Blocks](/docs/features/custom-schemas/custom-blocks)\n- [Custom Inline Content](/docs/features/custom-schemas/custom-inline-content)', + }, { projectSlug: "draggable-inline-content", fullSlug: "custom-schema/draggable-inline-content", @@ -1822,7 +1913,6 @@ export const examples = { author: "yousefed", tags: ["Advanced", "Development", "Collaboration"], dependencies: { - "@blocknote/shared": "latest", "@blocknote/xl-multi-column": "latest", "@y/protocols": "^1.0.6-rc.1", "@y/y": "^14.0.0-rc.23", diff --git a/playground/tsconfig.json b/playground/tsconfig.json index b7da9d8c3d..565f300e5f 100644 --- a/playground/tsconfig.json +++ b/playground/tsconfig.json @@ -16,7 +16,10 @@ "jsx": "react-jsx", "composite": true, "types": ["node"], - "rootDir": ".." + "rootDir": "..", + "paths": { + "@shared/*": ["../shared/*"] + } }, "include": ["src", "../examples", "./vite.config.ts"], "references": [ diff --git a/playground/vercel.json b/playground/vercel.json index 3a48e56ba5..3964de463f 100644 --- a/playground/vercel.json +++ b/playground/vercel.json @@ -1,3 +1,7 @@ { + "installCommand": "cd .. && corepack enable && pnpm install", + "buildCommand": "corepack enable && pnpm run build:vercel", + "outputDirectory": "dist", + "ignoreCommand": "[ \"$VERCEL_GIT_COMMIT_REF\" = \"gh-pages\" ]", "rewrites": [{ "source": "/(.*)", "destination": "/" }] } diff --git a/playground/vite.config.ts b/playground/vite.config.ts index dec5f2ee7a..1cd87b5167 100644 --- a/playground/vite.config.ts +++ b/playground/vite.config.ts @@ -35,6 +35,12 @@ const devAliases: Record = { __dirname, "../packages/xl-email-exporter/src", ), + "@blocknote/code-block": resolve(__dirname, "../packages/code-block/src"), + "@blocknote/math-block": resolve(__dirname, "../packages/math-block/src"), + "@blocknote/diagram-block": resolve( + __dirname, + "../packages/diagram-block/src", + ), // "@liveblocks/react-blocknote": resolve( // __dirname, // "../../liveblocks/packages/liveblocks-react-blocknote/src/", @@ -61,7 +67,7 @@ export default defineConfig(((conf: { command: string }) => ({ run: { tasks: { build: { - command: "tsgo && vp build", + command: "tsc && vp build", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, @@ -70,12 +76,24 @@ export default defineConfig(((conf: { command: string }) => ({ }, }, }, - plugins: [react(), webpackStats(), Inspect(), tailwindcss()], + plugins: [ + react(), + // The stats are only consumed by RelativeCI, which uploads them from the + // GitHub Actions build. Serializing the (huge) module graph at the end of + // the build costs a lot of memory, which the Vercel build container can't + // spare - it fails spawning processes (EAGAIN) right at that point. + ...(process.env.VERCEL ? [] : [webpackStats()]), + Inspect(), + tailwindcss(), + ], optimizeDeps: { // link: ['vite-react-ts-components'], }, build: { - sourcemap: true, + // Skipped on Vercel for the same reason as `webpackStats` above: emitting + // a map for each of the ~340 chunks doubles the file writes and memory of + // the largest build in the workspace, which is where the container dies. + sourcemap: !process.env.VERCEL, }, preview: { port: 3000, @@ -87,6 +105,33 @@ export default defineConfig(((conf: { command: string }) => ({ allowedHosts: ["host.docker.internal"], }, resolve: { - alias: conf.command === "build" ? undefined : devAliases, + alias: + conf.command === "build" + ? { + // The exporters' optional peer dependencies, used by their + // subpath entries (`…/diagram-block`, `…/math-block`). They + // can't be resolved from the workspace-linked exporter packages + // when those packages' devDependencies aren't installed (e.g. + // Vercel's filtered install), making Vite substitute an empty + // `__vite-optional-peer-dep` stub that fails the build - so + // resolve them from the playground's own dependencies instead. + // Points at `src/` (like the dev aliases): the prefix replace + // bypasses the package's exports map, and only under `src/` do + // subpath imports (`…/diagram-block/docx-exporter`) land on + // real directories with index files. + "@blocknote/diagram-block": resolve( + __dirname, + "../packages/diagram-block/src", + ), + // The shared test-utils package the suggestion-gallery example + // imports; dev mode resolves it via devAliases above. + "@shared": resolve(__dirname, "../shared"), + "@react-pdf/math": resolve( + __dirname, + "node_modules/@react-pdf/math", + ), + katex: resolve(__dirname, "node_modules/katex"), + } + : devAliases, }, })) as Parameters[0]); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1f902ae81a..6decb347ed 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,29 +7,35 @@ settings: catalogs: default: vite-plus: - specifier: ^0.1.24 - version: 0.1.24 + specifier: ^0.2.9 + version: 0.2.9 overrides: '@headlessui/react': ^2.2.4 + shiki: ^4.4.3 + '@shikijs/rehype': ^4.4.3 + '@shikijs/types': ^4.4.3 '@tiptap/core': ^3.29.2 '@tiptap/pm': ^3.29.2 - vitest: 4.1.7 - '@vitest/runner': 4.1.7 + '@types/node': ^25.6.0 + jsdom: ^29.0.2 + vitest: 4.1.10 + '@vitest/runner': 4.1.10 + '@vitest/mocker': 4.1.10 '@y/y': 14.0.0-rc.23 '@y/prosemirror': 2.0.0-6 lib0: 1.0.0-rc.22 +packageExtensionsChecksum: sha256-RBsr8H6XmGjVk3a5IXktWPY+vN2mX4m0Q/uTlfMsVxo= + patchedDependencies: '@y/prosemirror@2.0.0-6': e49b17b47e301dd138d7e383a779a0e2125bf7f038e10e3c740e26b43d988776 + katex@0.16.47: cbfb6fe178282ddb73b753dcb27f891295e4f9ed85f63bc1466b4e4b1e4ef6e7 importers: .: devDependencies: - '@typescript/native-preview': - specifier: 7.0.0-dev.20260615.1 - version: 7.0.0-dev.20260615.1 bumpp: specifier: ^11.1.0 version: 11.1.0 @@ -46,17 +52,17 @@ importers: specifier: ^10.5.0 version: 10.5.0 oxlint-tsgolint: - specifier: ^0.23.0 - version: 0.23.0 + specifier: ^7.0.2001 + version: 7.0.2001 serve: specifier: 14.2.6 version: 14.2.6 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) wait-on: specifier: 9.0.5 version: 9.0.5 @@ -74,7 +80,7 @@ importers: version: 3.1022.0 '@base-ui/react': specifier: ^1.1.0 - version: 1.3.0(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 1.6.0(@date-fns/tz@1.4.1)(@types/react@19.2.14)(date-fns@4.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@blocknote/ariakit': specifier: workspace:* version: link:../packages/ariakit @@ -84,9 +90,15 @@ importers: '@blocknote/core': specifier: workspace:* version: link:../packages/core + '@blocknote/diagram-block': + specifier: workspace:* + version: link:../packages/diagram-block '@blocknote/mantine': specifier: workspace:* version: link:../packages/mantine + '@blocknote/math-block': + specifier: workspace:* + version: link:../packages/math-block '@blocknote/react': specifier: workspace:* version: link:../packages/react @@ -119,7 +131,7 @@ importers: version: 0.27.19(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@fumadocs/base-ui': specifier: 16.5.0 - version: 16.5.0(@types/react@19.2.14)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2) + version: 16.5.0(@date-fns/tz@1.4.1)(@types/react@19.2.14)(date-fns@4.1.0)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2) '@liveblocks/client': specifier: ^3.19.5 version: 3.19.5(@types/json-schema@7.0.15) @@ -155,7 +167,7 @@ importers: version: 3.1.18 '@polar-sh/better-auth': specifier: ^1.6.4 - version: 1.8.3(@polar-sh/sdk@0.42.5)(@stripe/react-stripe-js@4.0.2(@stripe/stripe-js@7.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@stripe/stripe-js@7.9.0)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(better-auth@1.4.22(better-sqlite3@12.8.0)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@5.9.3))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))))(react-dom@19.2.5(react@19.2.5))(react-is@19.2.4)(react@19.2.5)(redux@5.0.1)(zod@4.3.6) + version: 1.8.3(@polar-sh/sdk@0.42.5)(@stripe/react-stripe-js@4.0.2(@stripe/stripe-js@7.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@stripe/stripe-js@7.9.0)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(better-auth@1.4.22(better-sqlite3@12.8.0)(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.10))(react-dom@19.2.5(react@19.2.5))(react-is@19.2.4)(react@19.2.5)(redux@5.0.1)(zod@4.3.6) '@polar-sh/sdk': specifier: ^0.42.2 version: 0.42.5 @@ -165,27 +177,30 @@ importers: '@react-email/render': specifier: ^2.0.4 version: 2.1.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@react-pdf/math': + specifier: ^2.0.1 + version: 2.0.1(@react-pdf/renderer@4.5.1(react@19.2.5))(react@19.2.5) '@react-pdf/renderer': - specifier: ^4.3.0 - version: 4.3.2(react@19.2.5) + specifier: ^4.5.1 + version: 4.5.1(react@19.2.5) '@sentry/nextjs': specifier: ^10.34.0 - version: 10.47.0(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.1))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)(webpack@5.105.4(esbuild@0.27.5)) + version: 10.47.0(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.1))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)(webpack@5.105.4(esbuild@0.27.5)) '@shikijs/core': - specifier: ^4 - version: 4.0.2 + specifier: ^4.4.3 + version: 4.4.3 '@shikijs/engine-javascript': - specifier: ^4 - version: 4.0.2 + specifier: ^4.4.3 + version: 4.4.3 '@shikijs/langs-precompiled': - specifier: ^4 - version: 4.0.2 + specifier: ^4.4.3 + version: 4.4.3 '@shikijs/themes': - specifier: ^4 - version: 4.0.2 + specifier: ^4.4.3 + version: 4.4.3 '@shikijs/types': - specifier: ^4 - version: 4.0.2 + specifier: ^4.4.3 + version: 4.4.3 '@tiptap/core': specifier: ^3.29.2 version: 3.29.2(@tiptap/pm@3.29.2) @@ -224,7 +239,7 @@ importers: version: 3.6.8(@uppy/core@3.13.1) '@vercel/analytics': specifier: ^1.6.1 - version: 1.6.1(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) + version: 1.6.1(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) '@y-sweet/react': specifier: ^0.6.3 version: 0.6.4(react@19.2.5)(yjs@13.6.30) @@ -245,43 +260,55 @@ importers: version: 6.0.5(zod@4.3.6) better-auth: specifier: ~1.4.15 - version: 1.4.22(better-sqlite3@12.8.0)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@5.9.3))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))) + version: 1.4.22(better-sqlite3@12.8.0)(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.10) better-sqlite3: specifier: ^12.6.2 version: 12.8.0 class-variance-authority: specifier: ^0.7.1 version: 0.7.1 + docx: + specifier: ^9.6.1 + version: 9.6.1 framer-motion: specifier: ^12.26.2 version: 12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) fumadocs-core: specifier: 16.5.0 - version: 16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6) + version: 16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6) fumadocs-mdx: specifier: ^14.2.6 - version: 14.2.11(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + version: 14.2.11(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) fumadocs-twoslash: specifier: ^3.1.12 - version: 3.1.15(@fumadocs/base-ui@16.5.0(@types/react@19.2.14)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) + version: 3.1.15(@fumadocs/base-ui@16.5.0(@date-fns/tz@1.4.1)(@types/react@19.2.14)(date-fns@4.1.0)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@7.0.2) fumadocs-typescript: specifier: ^5.1.1 - version: 5.2.1(7b71d35b2307cf0dedaa2cbc5003f54e) + version: 5.2.1(c2cf99cf8c13a0f5fb978e1c3d570ec2) fumadocs-ui: specifier: npm:@fumadocs/base-ui@16.5.0 - version: '@fumadocs/base-ui@16.5.0(@types/react@19.2.14)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2)' + version: '@fumadocs/base-ui@16.5.0(@date-fns/tz@1.4.1)(@types/react@19.2.14)(date-fns@4.1.0)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2)' + katex: + specifier: ^0.16.11 + version: 0.16.47(patch_hash=cbfb6fe178282ddb73b753dcb27f891295e4f9ed85f63bc1466b4e4b1e4ef6e7) lib0: specifier: 1.0.0-rc.22 version: 1.0.0-rc.22 lucide-react: specifier: ^0.562.0 version: 0.562.0(react@19.2.5) + mathjax-full: + specifier: ^3.2.2 + version: 3.2.2 + mermaid: + specifier: ^11.0.0 + version: 11.16.0 motion: specifier: ^12.28.1 version: 12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) next: - specifier: ^16.2.7 - version: 16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + specifier: ^16.3.0 + version: 16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -313,11 +340,14 @@ importers: specifier: ^3.1.0 version: 3.1.0 shiki: - specifier: ^4 - version: 4.0.2 + specifier: ^4.4.3 + version: 4.4.3 tailwind-merge: specifier: ^3.4.0 version: 3.5.0 + typescript-5: + specifier: npm:typescript@^5.9.3 + version: typescript@5.9.3 y-partykit: specifier: ^0.0.25 version: 0.0.25 @@ -341,7 +371,7 @@ importers: specifier: ^2.0.13 version: 2.0.13 '@types/node': - specifier: ^25.0.5 + specifier: ^25.6.0 version: 25.6.0 '@types/nodemailer': specifier: ^7.0.5 @@ -374,8 +404,8 @@ importers: specifier: ^1.4.0 version: 1.4.0 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 examples/01-basic/01-minimal: dependencies: @@ -2546,20 +2576,20 @@ importers: specifier: ^9.0.2 version: 9.1.1(react@19.2.5) '@shikijs/core': - specifier: ^4 - version: 4.0.2 + specifier: ^4.4.3 + version: 4.4.3 '@shikijs/engine-javascript': - specifier: ^4 - version: 4.0.2 + specifier: ^4.4.3 + version: 4.4.3 '@shikijs/langs-precompiled': - specifier: ^4 - version: 4.0.2 + specifier: ^4.4.3 + version: 4.4.3 '@shikijs/themes': - specifier: ^4 - version: 4.0.2 + specifier: ^4.4.3 + version: 4.4.3 '@shikijs/types': - specifier: ^4 - version: 4.0.2 + specifier: ^4.4.3 + version: 4.4.3 react: specifier: ^19.2.3 version: 19.2.5 @@ -2760,9 +2790,15 @@ importers: '@blocknote/core': specifier: latest version: link:../../../packages/core + '@blocknote/diagram-block': + specifier: latest + version: link:../../../packages/diagram-block '@blocknote/mantine': specifier: latest version: link:../../../packages/mantine + '@blocknote/math-block': + specifier: latest + version: link:../../../packages/math-block '@blocknote/react': specifier: latest version: link:../../../packages/react @@ -2781,9 +2817,15 @@ importers: '@mantine/hooks': specifier: ^9.0.2 version: 9.1.1(react@19.2.5) + '@react-pdf/math': + specifier: ^2.0.1 + version: 2.0.1(@react-pdf/renderer@4.5.1(react@19.2.5))(react@19.2.5) '@react-pdf/renderer': - specifier: ^4.3.0 - version: 4.3.2(react@19.2.5) + specifier: ^4.5.1 + version: 4.5.1(react@19.2.5) + mathjax-full: + specifier: ^3.2.2 + version: 3.2.2 react: specifier: ^19.2.3 version: 19.2.5 @@ -2812,9 +2854,15 @@ importers: '@blocknote/core': specifier: latest version: link:../../../packages/core + '@blocknote/diagram-block': + specifier: latest + version: link:../../../packages/diagram-block '@blocknote/mantine': specifier: latest version: link:../../../packages/mantine + '@blocknote/math-block': + specifier: latest + version: link:../../../packages/math-block '@blocknote/react': specifier: latest version: link:../../../packages/react @@ -2833,6 +2881,9 @@ importers: '@mantine/hooks': specifier: ^9.0.2 version: 9.1.1(react@19.2.5) + katex: + specifier: ^0.16.11 + version: 0.16.47(patch_hash=cbfb6fe178282ddb73b753dcb27f891295e4f9ed85f63bc1466b4e4b1e4ef6e7) react: specifier: ^19.2.3 version: 19.2.5 @@ -2861,9 +2912,15 @@ importers: '@blocknote/core': specifier: latest version: link:../../../packages/core + '@blocknote/diagram-block': + specifier: latest + version: link:../../../packages/diagram-block '@blocknote/mantine': specifier: latest version: link:../../../packages/mantine + '@blocknote/math-block': + specifier: latest + version: link:../../../packages/math-block '@blocknote/react': specifier: latest version: link:../../../packages/react @@ -2882,6 +2939,9 @@ importers: '@mantine/hooks': specifier: ^9.0.2 version: 9.1.1(react@19.2.5) + katex: + specifier: ^0.16.11 + version: 0.16.47(patch_hash=cbfb6fe178282ddb73b753dcb27f891295e4f9ed85f63bc1466b4e4b1e4ef6e7) react: specifier: ^19.2.3 version: 19.2.5 @@ -2910,9 +2970,15 @@ importers: '@blocknote/core': specifier: latest version: link:../../../packages/core + '@blocknote/diagram-block': + specifier: latest + version: link:../../../packages/diagram-block '@blocknote/mantine': specifier: latest version: link:../../../packages/mantine + '@blocknote/math-block': + specifier: latest + version: link:../../../packages/math-block '@blocknote/react': specifier: latest version: link:../../../packages/react @@ -3393,6 +3459,156 @@ importers: specifier: ^8.0.0 version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + examples/06-custom-schema/09-math-block: + dependencies: + '@blocknote/ariakit': + specifier: latest + version: link:../../../packages/ariakit + '@blocknote/code-block': + specifier: latest + version: link:../../../packages/code-block + '@blocknote/core': + specifier: latest + version: link:../../../packages/core + '@blocknote/mantine': + specifier: latest + version: link:../../../packages/mantine + '@blocknote/math-block': + specifier: latest + version: link:../../../packages/math-block + '@blocknote/react': + specifier: latest + version: link:../../../packages/react + '@blocknote/shadcn': + specifier: latest + version: link:../../../packages/shadcn + '@mantine/core': + specifier: ^9.0.2 + version: 9.1.1(@mantine/hooks@9.1.1(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@mantine/hooks': + specifier: ^9.0.2 + version: 9.1.1(react@19.2.5) + react: + specifier: ^19.2.3 + version: 19.2.5 + react-dom: + specifier: ^19.2.3 + version: 19.2.5(react@19.2.5) + react-icons: + specifier: ^5.5.0 + version: 5.6.0(react@19.2.5) + devDependencies: + '@types/react': + specifier: ^19.2.3 + version: 19.2.14 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.14) + '@vitejs/plugin-react': + specifier: ^6.0.1 + version: 6.0.1(babel-plugin-react-compiler@1.0.0)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + vite: + specifier: ^8.0.0 + version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + + examples/06-custom-schema/10-diagram-block: + dependencies: + '@blocknote/ariakit': + specifier: latest + version: link:../../../packages/ariakit + '@blocknote/code-block': + specifier: latest + version: link:../../../packages/code-block + '@blocknote/core': + specifier: latest + version: link:../../../packages/core + '@blocknote/diagram-block': + specifier: latest + version: link:../../../packages/diagram-block + '@blocknote/mantine': + specifier: latest + version: link:../../../packages/mantine + '@blocknote/react': + specifier: latest + version: link:../../../packages/react + '@blocknote/shadcn': + specifier: latest + version: link:../../../packages/shadcn + '@mantine/core': + specifier: ^9.0.2 + version: 9.1.1(@mantine/hooks@9.1.1(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@mantine/hooks': + specifier: ^9.0.2 + version: 9.1.1(react@19.2.5) + react: + specifier: ^19.2.3 + version: 19.2.5 + react-dom: + specifier: ^19.2.3 + version: 19.2.5(react@19.2.5) + react-icons: + specifier: ^5.5.0 + version: 5.6.0(react@19.2.5) + devDependencies: + '@types/react': + specifier: ^19.2.3 + version: 19.2.14 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.14) + '@vitejs/plugin-react': + specifier: ^6.0.1 + version: 6.0.1(babel-plugin-react-compiler@1.0.0)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + vite: + specifier: ^8.0.0 + version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + + examples/06-custom-schema/11-source-with-preview: + dependencies: + '@blocknote/ariakit': + specifier: latest + version: link:../../../packages/ariakit + '@blocknote/core': + specifier: latest + version: link:../../../packages/core + '@blocknote/mantine': + specifier: latest + version: link:../../../packages/mantine + '@blocknote/react': + specifier: latest + version: link:../../../packages/react + '@blocknote/shadcn': + specifier: latest + version: link:../../../packages/shadcn + '@mantine/core': + specifier: ^9.0.2 + version: 9.1.1(@mantine/hooks@9.1.1(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@mantine/hooks': + specifier: ^9.0.2 + version: 9.1.1(react@19.2.5) + react: + specifier: ^19.2.3 + version: 19.2.5 + react-dom: + specifier: ^19.2.3 + version: 19.2.5(react@19.2.5) + react-icons: + specifier: ^5.5.0 + version: 5.6.0(react@19.2.5) + devDependencies: + '@types/react': + specifier: ^19.2.3 + version: 19.2.14 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.14) + '@vitejs/plugin-react': + specifier: ^6.0.1 + version: 6.0.1(babel-plugin-react-compiler@1.0.0)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + vite: + specifier: ^8.0.0 + version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + examples/06-custom-schema/draggable-inline-content: dependencies: '@blocknote/ariakit': @@ -4240,9 +4456,6 @@ importers: '@blocknote/shadcn': specifier: latest version: link:../../../packages/shadcn - '@blocknote/shared': - specifier: latest - version: link:../../../shared '@blocknote/xl-multi-column': specifier: latest version: link:../../../packages/xl-multi-column @@ -4940,14 +5153,14 @@ importers: specifier: ^0.2.6 version: 0.2.6(rollup@4.60.1) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vite-plugin-externalize-deps: specifier: ^0.10.0 version: 0.10.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) packages/code-block: dependencies: @@ -4955,17 +5168,17 @@ importers: specifier: workspace:^ version: link:../core '@shikijs/core': - specifier: ^4 - version: 4.0.2 + specifier: ^4.4.3 + version: 4.4.3 '@shikijs/engine-javascript': - specifier: ^4 - version: 4.0.2 + specifier: ^4.4.3 + version: 4.4.3 '@shikijs/langs-precompiled': - specifier: ^4 - version: 4.0.2 + specifier: ^4.4.3 + version: 4.4.3 '@shikijs/themes': - specifier: ^4 - version: 4.0.2 + specifier: ^4.4.3 + version: 4.4.3 devDependencies: rimraf: specifier: ^5.0.10 @@ -4974,15 +5187,15 @@ importers: specifier: ^0.2.6 version: 0.2.6(rollup@4.60.1) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) optionalDependencies: '@shikijs/types': - specifier: ^4 - version: 4.0.2 + specifier: ^4.4.3 + version: 4.4.3 packages/core: dependencies: @@ -4993,8 +5206,8 @@ importers: specifier: ^0.1.4 version: 0.1.4(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2) '@shikijs/types': - specifier: ^4 - version: 4.0.2 + specifier: ^4.4.3 + version: 4.4.3 '@tiptap/core': specifier: ^3.29.2 version: 3.29.2(@tiptap/pm@3.29.2) @@ -5041,8 +5254,8 @@ importers: specifier: 1.0.0-rc.22 version: 1.0.0-rc.22 prosemirror-highlight: - specifier: ^0.15.1 - version: 0.15.1(@shikijs/types@4.0.2)(@types/hast@3.0.4)(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-transform@1.12.0)(prosemirror-view@1.42.2) + specifier: ^0.15.3 + version: 0.15.3(@shikijs/types@4.4.3)(@types/hast@3.0.5)(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-transform@1.12.0)(prosemirror-view@1.42.2) prosemirror-model: specifier: ^1.25.11 version: 1.25.11 @@ -5069,11 +5282,11 @@ importers: specifier: ^0.2.6 version: 0.2.6(rollup@4.60.1) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) y-prosemirror: specifier: ^1.3.7 version: 1.3.7(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30) @@ -5087,8 +5300,8 @@ importers: packages/dev-scripts: devDependencies: '@types/node': - specifier: ^22.0.0 - version: 22.13.13 + specifier: ^25.6.0 + version: 25.6.0 '@types/react': specifier: ^19.2.3 version: 19.2.14 @@ -5111,13 +5324,13 @@ importers: specifier: ^4.20.6 version: 4.21.0 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - packages/mantine: + packages/diagram-block: dependencies: '@blocknote/core': specifier: workspace:^ @@ -5125,28 +5338,52 @@ importers: '@blocknote/react': specifier: workspace:^ version: link:../react - '@mantine/core': - specifier: ^8.3.11 || ^9.0.2 - version: 9.1.1(@mantine/hooks@9.1.1(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@mantine/hooks': - specifier: ^8.3.11 || ^9.0.2 - version: 9.1.1(react@19.2.5) + mermaid: + specifier: ^11.0.0 + version: 11.16.0 devDependencies: + '@blocknote/shared': + specifier: workspace:^ + version: link:../../shared + '@blocknote/xl-docx-exporter': + specifier: workspace:^ + version: link:../xl-docx-exporter + '@blocknote/xl-email-exporter': + specifier: workspace:^ + version: link:../xl-email-exporter + '@blocknote/xl-odt-exporter': + specifier: workspace:^ + version: link:../xl-odt-exporter + '@blocknote/xl-pdf-exporter': + specifier: workspace:^ + version: link:../xl-pdf-exporter + '@react-email/components': + specifier: ^1.0.12 + version: 1.0.12(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@react-pdf/renderer': + specifier: ^4.5.1 + version: 4.5.1(react@19.2.5) '@types/react': specifier: ^19.2.3 version: 19.2.14 '@types/react-dom': specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.14) - '@vitejs/plugin-react': - specifier: ^6.0.1 - version: 6.0.1(babel-plugin-react-compiler@1.0.0)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + '@zip.js/zip.js': + specifier: ^2.8.8 + version: 2.8.26 + docx: + specifier: ^9.6.1 + version: 9.6.1 react: specifier: ^19.2.5 version: 19.2.5 react-dom: specifier: ^19.2.5 version: 19.2.5(react@19.2.5) + react-element-to-jsx-string: + specifier: ^17.0.1 + version: 17.0.1(react-dom@19.2.5(react@19.2.5))(react-is@19.2.4)(react@19.2.5) react-icons: specifier: ^5.5.0 version: 5.6.0(react@19.2.5) @@ -5157,51 +5394,27 @@ importers: specifier: ^0.2.6 version: 0.2.6(rollup@4.60.1) typescript: - specifier: ^5.9.3 - version: 5.9.3 - vite-plugin-externalize-deps: - specifier: ^0.10.0 - version: 0.10.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + specifier: ^7.0.2 + version: 7.0.2 vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - packages/react: + packages/mantine: dependencies: '@blocknote/core': specifier: workspace:^ version: link:../core - '@emoji-mart/data': - specifier: ^1.2.1 - version: 1.2.1 - '@floating-ui/react': - specifier: ^0.27.18 - version: 0.27.19(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@tiptap/core': - specifier: ^3.29.2 - version: 3.29.2(@tiptap/pm@3.29.2) - '@tiptap/pm': - specifier: ^3.29.2 - version: 3.29.2 - '@tiptap/react': - specifier: ^3.29.2 - version: 3.29.2(@floating-ui/dom@1.7.6)(@tiptap/core@3.29.2(@tiptap/pm@3.29.2))(@tiptap/pm@3.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - emoji-mart: - specifier: ^5.6.0 - version: 5.6.0 - fast-deep-equal: - specifier: ^3.1.3 - version: 3.1.3 - use-sync-external-store: - specifier: 1.6.0 - version: 1.6.0(react@19.2.5) + '@blocknote/react': + specifier: workspace:^ + version: link:../react + '@mantine/core': + specifier: ^8.3.11 || ^9.0.2 + version: 9.1.1(@mantine/hooks@9.1.1(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@mantine/hooks': + specifier: ^8.3.11 || ^9.0.2 + version: 9.1.1(react@19.2.5) devDependencies: - '@types/lodash.foreach': - specifier: ^4.5.9 - version: 4.5.9 - '@types/lodash.groupby': - specifier: ^4.6.9 - version: 4.6.9 '@types/react': specifier: ^19.2.3 version: 19.2.14 @@ -5227,20 +5440,16 @@ importers: specifier: ^0.2.6 version: 0.2.6(rollup@4.60.1) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vite-plugin-externalize-deps: specifier: ^0.10.0 version: 0.10.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - optionalDependencies: - '@types/use-sync-external-store': - specifier: 1.5.0 - version: 1.5.0 + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - packages/server-util: + packages/math-block: dependencies: '@blocknote/core': specifier: workspace:^ @@ -5248,19 +5457,187 @@ importers: '@blocknote/react': specifier: workspace:^ version: link:../react - '@tiptap/pm': - specifier: ^3.29.2 - version: 3.29.2 - jsdom: - specifier: ^25.0.1 - version: 25.0.1(canvas@2.11.2) - yjs: - specifier: ^13.6.27 - version: 13.6.30 - devDependencies: - '@types/jsdom': - specifier: ^21.1.7 - version: 21.1.7 + '@handlewithcare/prosemirror-inputrules': + specifier: ^0.1.4 + version: 0.1.4(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2) + katex: + specifier: ^0.16.11 + version: 0.16.47(patch_hash=cbfb6fe178282ddb73b753dcb27f891295e4f9ed85f63bc1466b4e4b1e4ef6e7) + prosemirror-model: + specifier: ^1.25.4 + version: 1.25.11 + prosemirror-state: + specifier: ^1.4.4 + version: 1.4.4 + devDependencies: + '@blocknote/shared': + specifier: workspace:^ + version: link:../../shared + '@blocknote/xl-docx-exporter': + specifier: workspace:^ + version: link:../xl-docx-exporter + '@blocknote/xl-email-exporter': + specifier: workspace:^ + version: link:../xl-email-exporter + '@blocknote/xl-odt-exporter': + specifier: workspace:^ + version: link:../xl-odt-exporter + '@blocknote/xl-pdf-exporter': + specifier: workspace:^ + version: link:../xl-pdf-exporter + '@react-email/components': + specifier: ^1.0.12 + version: 1.0.12(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@react-pdf/math': + specifier: ^2.0.1 + version: 2.0.1(@react-pdf/renderer@4.5.1(react@19.2.5))(react@19.2.5) + '@react-pdf/renderer': + specifier: ^4.5.1 + version: 4.5.1(react@19.2.5) + '@types/katex': + specifier: ^0.16.7 + version: 0.16.8 + '@types/react': + specifier: ^19.2.3 + version: 19.2.14 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.14) + '@zip.js/zip.js': + specifier: ^2.8.8 + version: 2.8.26 + docx: + specifier: ^9.6.1 + version: 9.6.1 + mathjax-full: + specifier: ^3.2.2 + version: 3.2.2 + mathml2omml: + specifier: ^0.5.0 + version: 0.5.0 + react: + specifier: ^19.2.5 + version: 19.2.5 + react-dom: + specifier: ^19.2.5 + version: 19.2.5(react@19.2.5) + react-element-to-jsx-string: + specifier: ^17.0.1 + version: 17.0.1(react-dom@19.2.5(react@19.2.5))(react-is@19.2.4)(react@19.2.5) + react-icons: + specifier: ^5.5.0 + version: 5.6.0(react@19.2.5) + rimraf: + specifier: ^5.0.10 + version: 5.0.10 + rollup-plugin-webpack-stats: + specifier: ^0.2.6 + version: 0.2.6(rollup@4.60.1) + typescript: + specifier: ^7.0.2 + version: 7.0.2 + vite-plus: + specifier: 'catalog:' + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + xml-formatter: + specifier: ^3.6.7 + version: 3.7.0 + + packages/react: + dependencies: + '@blocknote/core': + specifier: workspace:^ + version: link:../core + '@emoji-mart/data': + specifier: ^1.2.1 + version: 1.2.1 + '@floating-ui/react': + specifier: ^0.27.18 + version: 0.27.19(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@tiptap/core': + specifier: ^3.29.2 + version: 3.29.2(@tiptap/pm@3.29.2) + '@tiptap/pm': + specifier: ^3.29.2 + version: 3.29.2 + '@tiptap/react': + specifier: ^3.29.2 + version: 3.29.2(@floating-ui/dom@1.7.6)(@tiptap/core@3.29.2(@tiptap/pm@3.29.2))(@tiptap/pm@3.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + emoji-mart: + specifier: ^5.6.0 + version: 5.6.0 + fast-deep-equal: + specifier: ^3.1.3 + version: 3.1.3 + use-sync-external-store: + specifier: 1.6.0 + version: 1.6.0(react@19.2.5) + devDependencies: + '@types/lodash.foreach': + specifier: ^4.5.9 + version: 4.5.9 + '@types/lodash.groupby': + specifier: ^4.6.9 + version: 4.6.9 + '@types/react': + specifier: ^19.2.3 + version: 19.2.14 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.14) + '@vitejs/plugin-react': + specifier: ^6.0.1 + version: 6.0.1(babel-plugin-react-compiler@1.0.0)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + react: + specifier: ^19.2.5 + version: 19.2.5 + react-dom: + specifier: ^19.2.5 + version: 19.2.5(react@19.2.5) + react-icons: + specifier: ^5.5.0 + version: 5.6.0(react@19.2.5) + rimraf: + specifier: ^5.0.10 + version: 5.0.10 + rollup-plugin-webpack-stats: + specifier: ^0.2.6 + version: 0.2.6(rollup@4.60.1) + typescript: + specifier: ^7.0.2 + version: 7.0.2 + vite-plugin-externalize-deps: + specifier: ^0.10.0 + version: 0.10.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + vite-plus: + specifier: 'catalog:' + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + optionalDependencies: + '@types/use-sync-external-store': + specifier: 1.5.0 + version: 1.5.0 + + packages/server-util: + dependencies: + '@blocknote/core': + specifier: workspace:^ + version: link:../core + '@blocknote/react': + specifier: workspace:^ + version: link:../react + '@tiptap/pm': + specifier: ^3.29.2 + version: 3.29.2 + jsdom: + specifier: ^29.0.2 + version: 29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0) + yjs: + specifier: ^13.6.27 + version: 13.6.30 + devDependencies: + '@types/jsdom': + specifier: ^21.1.7 + version: 21.1.7 '@types/react': specifier: ^19.2.3 version: 19.2.14 @@ -5280,11 +5657,11 @@ importers: specifier: ^0.2.6 version: 0.2.6(rollup@4.60.1) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@25.0.1(canvas@2.11.2))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) y-prosemirror: specifier: ^1.3.7 version: 1.3.7(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30) @@ -5320,8 +5697,8 @@ importers: version: 4.2.2 devDependencies: '@types/node': - specifier: ^20.19.22 - version: 20.19.39 + specifier: ^25.6.0 + version: 25.6.0 '@types/react': specifier: ^19.2.3 version: 19.2.14 @@ -5344,14 +5721,14 @@ importers: specifier: ^0.2.6 version: 0.2.6(rollup@4.60.1) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vite-plugin-externalize-deps: specifier: ^0.10.0 version: 0.10.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) packages/xl-ai: dependencies: @@ -5428,9 +5805,6 @@ importers: '@ai-sdk/openai-compatible': specifier: ^2.0.2 version: 2.0.2(zod@4.3.6) - '@blocknote/shared': - specifier: workspace:^ - version: link:../../shared '@blocknote/xl-multi-column': specifier: workspace:^ version: link:../xl-multi-column @@ -5453,8 +5827,8 @@ importers: specifier: ^4.6.9 version: 4.6.9 '@types/node': - specifier: 22.13.13 - version: 22.13.13 + specifier: ^25.6.0 + version: 25.6.0 '@types/react': specifier: ^19.2.3 version: 19.2.14 @@ -5472,10 +5846,10 @@ importers: version: 4.0.3 msw: specifier: ^2.11.5 - version: 2.11.5(@types/node@22.13.13)(typescript@5.9.3) + version: 2.11.5(@types/node@25.6.0)(typescript@7.0.2) msw-snapshot: specifier: ^5.3.0 - version: 5.3.0(msw@2.11.5(@types/node@22.13.13)(typescript@5.9.3)) + version: 5.3.0(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2)) react-icons: specifier: ^5.5.0 version: 5.6.0(react@19.2.5) @@ -5486,8 +5860,8 @@ importers: specifier: ^0.2.6 version: 0.2.6(rollup@4.60.1) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 undici: specifier: ^6.22.0 version: 6.25.0 @@ -5496,7 +5870,7 @@ importers: version: 0.10.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) yjs: specifier: ^13.6.27 version: 13.6.30 @@ -5535,8 +5909,8 @@ importers: version: 4.12.14 devDependencies: '@types/node': - specifier: 22.13.13 - version: 22.13.13 + specifier: ^25.6.0 + version: 25.6.0 rimraf: specifier: ^5.0.10 version: 5.0.10 @@ -5544,20 +5918,20 @@ importers: specifier: ^0.2.6 version: 0.2.6(rollup@4.60.1) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 undici: specifier: ^6.22.0 version: 6.25.0 vite-node: specifier: ^6.0.0 - version: 6.0.0(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + version: 6.0.0(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) vite-plugin-externalize-deps: specifier: ^0.10.0 - version: 0.10.0(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + version: 0.10.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) packages/xl-docx-exporter: dependencies: @@ -5602,11 +5976,11 @@ importers: specifier: ^0.2.6 version: 0.2.6(rollup@4.60.1) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) xml-formatter: specifier: ^3.6.7 version: 3.7.0 @@ -5654,11 +6028,11 @@ importers: specifier: ^0.2.6 version: 0.2.6(rollup@4.60.1) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) packages/xl-multi-column: dependencies: @@ -5691,8 +6065,8 @@ importers: specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.14) jsdom: - specifier: ^25.0.1 - version: 25.0.1(canvas@2.11.2) + specifier: ^29.0.2 + version: 29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0) react: specifier: ^19.2.5 version: 19.2.5 @@ -5709,11 +6083,11 @@ importers: specifier: ^0.2.6 version: 0.2.6(rollup@4.60.1) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@25.0.1(canvas@2.11.2))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) packages/xl-odt-exporter: dependencies: @@ -5737,8 +6111,8 @@ importers: specifier: ^16.3.0 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.5(react@19.2.5))(react@19.2.5) '@types/node': - specifier: 22.13.13 - version: 22.13.13 + specifier: ^25.6.0 + version: 25.6.0 '@types/react': specifier: ^19.2.3 version: 19.2.14 @@ -5758,11 +6132,11 @@ importers: specifier: ^0.2.6 version: 0.2.6(rollup@4.60.1) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) xml-formatter: specifier: ^3.6.7 version: 3.7.0 @@ -5776,8 +6150,8 @@ importers: specifier: workspace:^ version: link:../xl-multi-column '@react-pdf/renderer': - specifier: ^4.3.0 - version: 4.3.2(react@19.2.5) + specifier: ^4.5.1 + version: 4.5.1(react@19.2.5) devDependencies: '@blocknote/shared': specifier: workspace:^ @@ -5785,24 +6159,12 @@ importers: '@testing-library/react': specifier: ^16.3.0 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.5(react@19.2.5))(react@19.2.5) - '@types/jest-image-snapshot': - specifier: ^6.4.0 - version: 6.4.1 - '@types/jsdom': - specifier: ^21.1.7 - version: 21.1.7 '@types/react': specifier: ^19.2.3 version: 19.2.14 '@types/react-dom': specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.14) - jest-image-snapshot: - specifier: ^6.5.1 - version: 6.5.2 - pdf-to-img: - specifier: ^4.5.0 - version: 4.5.0 react: specifier: ^19.2.5 version: 19.2.5 @@ -5819,11 +6181,11 @@ importers: specifier: ^0.2.6 version: 0.2.6(rollup@4.60.1) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) playground: dependencies: @@ -5845,9 +6207,15 @@ importers: '@blocknote/core': specifier: workspace:^ version: link:../packages/core + '@blocknote/diagram-block': + specifier: workspace:^ + version: link:../packages/diagram-block '@blocknote/mantine': specifier: workspace:^ version: link:../packages/mantine + '@blocknote/math-block': + specifier: workspace:^ + version: link:../packages/math-block '@blocknote/react': specifier: workspace:^ version: link:../packages/react @@ -5908,6 +6276,9 @@ importers: '@mui/material': specifier: ^5.18.0 version: 5.18.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.5))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.5))(@types/react@19.2.14)(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@react-pdf/math': + specifier: ^2.0.1 + version: 2.0.1(@react-pdf/renderer@4.5.1(react@19.2.5))(react@19.2.5) '@uppy/core': specifier: ^3.13.1 version: 3.13.1 @@ -5953,6 +6324,9 @@ importers: docx: specifier: ^9.5.1 version: 9.6.1 + katex: + specifier: ^0.16.11 + version: 0.16.47(patch_hash=cbfb6fe178282ddb73b753dcb27f891295e4f9ed85f63bc1466b4e4b1e4ef6e7) react: specifier: ^19.2.5 version: 19.2.5 @@ -5971,10 +6345,10 @@ importers: devDependencies: '@tailwindcss/vite': specifier: ^4.1.14 - version: 4.2.2(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + version: 4.2.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) '@types/node': - specifier: 22.13.13 - version: 22.13.13 + specifier: ^25.6.0 + version: 25.6.0 '@types/react': specifier: ^19.2.3 version: 19.2.14 @@ -5983,7 +6357,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(babel-plugin-react-compiler@1.0.0)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + version: 6.0.1(babel-plugin-react-compiler@1.0.0)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) rimraf: specifier: ^5.0.10 version: 5.0.10 @@ -5998,10 +6372,10 @@ importers: version: 1.4.0 vite-plugin-inspect: specifier: 12.0.0-beta.1 - version: 12.0.0-beta.1(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(ws@8.20.0) + version: 12.0.0-beta.1(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(ws@8.20.0) vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) shared: dependencies: @@ -6013,14 +6387,20 @@ importers: version: 0.2.2 devDependencies: '@types/node': - specifier: 22.13.13 - version: 22.13.13 + specifier: ^25.6.0 + version: 25.6.0 + '@zip.js/zip.js': + specifier: ^2.8.8 + version: 2.8.26 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + xml-formatter: + specifier: ^3.6.7 + version: 3.7.0 tests: dependencies: @@ -6034,39 +6414,57 @@ importers: '@blocknote/core': specifier: workspace:^ version: link:../packages/core + '@blocknote/diagram-block': + specifier: workspace:^ + version: link:../packages/diagram-block '@blocknote/mantine': specifier: workspace:^ version: link:../packages/mantine + '@blocknote/math-block': + specifier: workspace:^ + version: link:../packages/math-block '@blocknote/react': specifier: workspace:^ version: link:../packages/react '@blocknote/shadcn': specifier: workspace:^ version: link:../packages/shadcn + '@blocknote/xl-email-exporter': + specifier: workspace:^ + version: link:../packages/xl-email-exporter '@blocknote/xl-multi-column': specifier: workspace:^ version: link:../packages/xl-multi-column + '@blocknote/xl-pdf-exporter': + specifier: workspace:^ + version: link:../packages/xl-pdf-exporter '@playwright/test': specifier: 1.60.0 version: 1.60.0 + '@react-pdf/renderer': + specifier: ^4.5.1 + version: 4.5.1(react@19.2.5) '@tailwindcss/vite': specifier: ^4.1.14 - version: 4.2.2(vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + version: 4.2.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) '@tiptap/pm': specifier: ^3.29.2 version: 3.29.2 '@types/node': - specifier: ^20.19.22 - version: 20.19.39 + specifier: ^25.6.0 + version: 25.6.0 '@types/react': specifier: ^19.2.3 version: 19.2.14 '@types/react-dom': specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.14) + '@vitest/browser-playwright': + specifier: 4.1.10 + version: 4.1.10(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(playwright@1.60.0)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(vitest@4.1.10) '@vitest/ui': specifier: 4.1.5 - version: 4.1.5(vitest@4.1.7) + version: 4.1.5(vitest@4.1.10) '@y/protocols': specifier: ^1.0.6-rc.1 version: 1.0.6-rc.1(@y/y@14.0.0-rc.23) @@ -6076,6 +6474,9 @@ importers: htmlfy: specifier: ^0.6.7 version: 0.6.7 + pdfjs-dist: + specifier: ^4.10.38 + version: 4.10.38 react: specifier: ^19.2.5 version: 19.2.5 @@ -6090,10 +6491,10 @@ importers: version: 5.0.10 vite-plus: specifier: 'catalog:' - version: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(@vitest/ui@4.1.5)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) vitest-browser-react: specifier: ^2.2.0 - version: 2.2.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.7) + version: 2.2.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.10) packages: @@ -6159,6 +6560,9 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + '@ariakit/core@0.4.18': resolution: {integrity: sha512-9urEa+GbZTSyredq3B/3thQjTcSZSUC68XctwCkJNH/xNfKN5O+VThiem2rcJxpsGw8sRUQenhagZi0yB4foyg==} @@ -6174,9 +6578,6 @@ packages: react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 - '@asamuzakjp/css-color@3.2.0': - resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} - '@asamuzakjp/css-color@5.1.11': resolution: {integrity: sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -6439,17 +6840,6 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} - '@base-ui/react@1.3.0': - resolution: {integrity: sha512-FwpKqZbPz14AITp1CVgf4AjhKPe1OeeVKSBMdgD10zbFlj3QSWelmtCMLi2+/PFZZcIm3l87G7rwtCZJwHyXWA==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@types/react': ^17 || ^18 || ^19 - react: ^17 || ^18 || ^19 - react-dom: ^17 || ^18 || ^19 - peerDependenciesMeta: - '@types/react': - optional: true - '@base-ui/react@1.6.0': resolution: {integrity: sha512-/jzjTWJYXhRFO45Bev9lc3cHbmjzCMpUqbMZ2AgKy/z25mY9B6shGSNcXcjQar9n5doM0KYW1W8fcFv2jZBuMw==} engines: {node: '>=14.0.0'} @@ -6467,16 +6857,6 @@ packages: date-fns: optional: true - '@base-ui/utils@0.2.6': - resolution: {integrity: sha512-yQ+qeuqohwhsNpoYDqqXaLllYAkPCP4vYdDrVo8FQXaAPfHWm1pG/Vm+jmGTA5JFS0BAIjookyapuJFY8F9PIw==} - peerDependencies: - '@types/react': ^17 || ^18 || ^19 - react: ^17 || ^18 || ^19 - react-dom: ^17 || ^18 || ^19 - peerDependenciesMeta: - '@types/react': - optional: true - '@base-ui/utils@0.3.1': resolution: {integrity: sha512-gFFiltORVmW/N6IILTGxizP3PBpVpysqML1ALY5Vk0mH+7faVkCknOU31goYHN5Aoek2dkjxva1XOD2Ce9WuIg==} peerDependencies: @@ -6514,25 +6894,23 @@ packages: '@better-fetch/fetch@1.1.21': resolution: {integrity: sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A==} + '@blazediff/core@1.9.1': + resolution: {integrity: sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==} + + '@braintree/sanitize-url@7.1.2': + resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==} + '@bramus/specificity@2.4.2': resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} hasBin: true - '@csstools/color-helpers@5.1.0': - resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} - engines: {node: '>=18'} + '@chevrotain/types@11.1.2': + resolution: {integrity: sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==} '@csstools/color-helpers@6.0.2': resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} 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': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 - '@csstools/css-calc@3.2.0': resolution: {integrity: sha512-bR9e6o2BDB12jzN/gIbjHa5wLJ4UjD1CB9pM7ehlc0ddk6EBz+yYS1EV2MF55/HUxrHcB/hehAyt5vhsA3hx7w==} engines: {node: '>=20.19.0'} @@ -6540,13 +6918,6 @@ packages: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-color-parser@3.1.0': - resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 - '@csstools/css-color-parser@4.1.0': resolution: {integrity: sha512-U0KhLYmy2GVj6q4T3WaAe6NPuFYCPQoE3b0dRGxejWDgcPp8TP7S5rVdM5ZrFaqu4N67X8YaPBw14dQSYx3IyQ==} engines: {node: '>=20.19.0'} @@ -6554,12 +6925,6 @@ packages: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-parser-algorithms@3.0.5': - resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} - engines: {node: '>=18'} - peerDependencies: - '@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'} @@ -6574,10 +6939,6 @@ packages: css-tree: optional: true - '@csstools/css-tokenizer@3.0.4': - resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} - engines: {node: '>=18'} - '@csstools/css-tokenizer@4.0.0': resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} engines: {node: '>=20.19.0'} @@ -6588,8 +6949,8 @@ packages: '@emnapi/core@1.9.2': resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} - '@emnapi/runtime@1.10.0': - resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + '@emnapi/runtime@1.11.3': + resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} '@emnapi/runtime@1.9.2': resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} @@ -7140,156 +7501,171 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@3.1.4': + resolution: {integrity: sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw==} + '@img/colour@1.1.0': resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} - '@img/sharp-darwin-arm64@0.34.5': - resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-darwin-arm64@0.35.3': + resolution: {integrity: sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==} + engines: {node: '>=20.9.0'} cpu: [arm64] 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} + '@img/sharp-darwin-x64@0.35.3': + resolution: {integrity: sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.2.4': - resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + '@img/sharp-freebsd-wasm32@0.35.3': + resolution: {integrity: sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==} + engines: {node: '>=20.9.0'} + os: [freebsd] + + '@img/sharp-libvips-darwin-arm64@1.3.2': + resolution: {integrity: sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.2.4': - resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + '@img/sharp-libvips-darwin-x64@1.3.2': + resolution: {integrity: sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.2.4': - resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + '@img/sharp-libvips-linux-arm64@1.3.2': + resolution: {integrity: sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==} cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-arm@1.2.4': - resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + '@img/sharp-libvips-linux-arm@1.3.2': + resolution: {integrity: sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==} cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-ppc64@1.2.4': - resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + '@img/sharp-libvips-linux-ppc64@1.3.2': + resolution: {integrity: sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==} cpu: [ppc64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-riscv64@1.2.4': - resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + '@img/sharp-libvips-linux-riscv64@1.3.2': + resolution: {integrity: sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==} cpu: [riscv64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-s390x@1.2.4': - resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + '@img/sharp-libvips-linux-s390x@1.3.2': + resolution: {integrity: sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-x64@1.2.4': - resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + '@img/sharp-libvips-linux-x64@1.3.2': + resolution: {integrity: sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==} cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + '@img/sharp-libvips-linuxmusl-arm64@1.3.2': + resolution: {integrity: sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==} cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + '@img/sharp-libvips-linuxmusl-x64@1.3.2': + resolution: {integrity: sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==} cpu: [x64] os: [linux] libc: [musl] - '@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} + '@img/sharp-linux-arm64@0.35.3': + resolution: {integrity: sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] libc: [glibc] - '@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} + '@img/sharp-linux-arm@0.35.3': + resolution: {integrity: sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==} + engines: {node: '>=20.9.0'} cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-linux-ppc64@0.34.5': - resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-ppc64@0.35.3': + resolution: {integrity: sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==} + engines: {node: '>=20.9.0'} cpu: [ppc64] os: [linux] libc: [glibc] - '@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} + '@img/sharp-linux-riscv64@0.35.3': + resolution: {integrity: sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==} + engines: {node: '>=20.9.0'} cpu: [riscv64] os: [linux] libc: [glibc] - '@img/sharp-linux-s390x@0.34.5': - resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-s390x@0.35.3': + resolution: {integrity: sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==} + engines: {node: '>=20.9.0'} cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-linux-x64@0.34.5': - resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-x64@0.35.3': + resolution: {integrity: sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-linuxmusl-arm64@0.34.5': - resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linuxmusl-arm64@0.35.3': + resolution: {integrity: sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-linuxmusl-x64@0.34.5': - resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linuxmusl-x64@0.35.3': + resolution: {integrity: sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-wasm32@0.34.5': - resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-wasm32@0.35.3': + resolution: {integrity: sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==} + engines: {node: '>=20.9.0'} + + '@img/sharp-webcontainers-wasm32@0.35.3': + resolution: {integrity: sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==} + engines: {node: '>=20.9.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} + '@img/sharp-win32-arm64@0.35.3': + resolution: {integrity: sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==} + engines: {node: '>=20.9.0'} cpu: [arm64] 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} + '@img/sharp-win32-ia32@0.35.3': + resolution: {integrity: sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==} + engines: {node: ^20.9.0} cpu: [ia32] 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} + '@img/sharp-win32-x64@0.35.3': + resolution: {integrity: sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [win32] @@ -7301,7 +7677,7 @@ packages: resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} engines: {node: '>=18'} peerDependencies: - '@types/node': '>=18' + '@types/node': ^25.6.0 peerDependenciesMeta: '@types/node': optional: true @@ -7310,7 +7686,7 @@ packages: resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} engines: {node: '>=18'} peerDependencies: - '@types/node': '>=18' + '@types/node': ^25.6.0 peerDependenciesMeta: '@types/node': optional: true @@ -7323,7 +7699,7 @@ packages: resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} engines: {node: '>=18'} peerDependencies: - '@types/node': '>=18' + '@types/node': ^25.6.0 peerDependenciesMeta: '@types/node': optional: true @@ -7332,30 +7708,6 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@jest/diff-sequences@30.3.0': - resolution: {integrity: sha512-cG51MVnLq1ecVUaQ3fr6YuuAOitHK1S4WUJHnsPFE/quQr33ADUx1FfrTCpMCRxvy0Yr9BThKpDjSlcTi91tMA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/expect-utils@30.3.0': - resolution: {integrity: sha512-j0+W5iQQ8hBh7tHZkTQv3q2Fh/M7Je72cIsYqC4OaktgtO7v1So9UTjp6uPBHIaB6beoF/RRsCgMJKvti0wADA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/get-type@30.1.0': - resolution: {integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/pattern@30.0.1': - resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/schemas@30.0.5': - resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/types@30.3.0': - resolution: {integrity: sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -7462,10 +7814,6 @@ packages: peerDependencies: react: ^19.2.0 - '@mapbox/node-pre-gyp@1.0.11': - resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} - hasBin: true - '@marsidev/react-turnstile@1.5.0': resolution: {integrity: sha512-Ph6mcj8u9WBDsBO7s9jKPsyRDz1sBPBJwrk+Ngx09vFInvKsQ6U6kW5amEcGq4dHOreB6DgFrOJk7/fy318YlQ==} peerDependencies: @@ -7475,6 +7823,9 @@ packages: '@mdx-js/mdx@3.1.1': resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + '@mermaid-js/parser@1.2.0': + resolution: {integrity: sha512-oYPyv8A4As1yH5Bx+04iQEQxXuIQDe0GKCNSRgao6z8AM9jixXIfP0vsppRLvGf+nKIOb9/LdpWA4YuJiVvESA==} + '@mswjs/interceptors@0.37.6': resolution: {integrity: sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w==} engines: {node: '>=18'} @@ -7577,61 +7928,65 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 - '@next/env@16.2.7': - resolution: {integrity: sha512-tMJizPlj6ZYpBMMdK8S0LJufrP4QTdR6pcv9KQ/bVETPAmg0j1mlHE9G2c38UyGHxoBapgwuj7XjbGJ2RcDFOg==} + '@next/env@16.3.0': + resolution: {integrity: sha512-o9r1S0BNiNreHP9Vs+Qnqd9kviDkJh8xIACY7UFZSmiGbbQRzPBBosvHzAU4TULHOIuOj/18RSsyz2qrREmIFw==} - '@next/swc-darwin-arm64@16.2.7': - resolution: {integrity: sha512-vm1EDI/pVaBNNiychmxk3fft+OhQPVD9cIM/tReLZIQ3TfQ4kqI9DwKk00dzuS1ulC7icbrzCFrmRRlk9PfNdw==} + '@next/swc-darwin-arm64@16.3.0': + resolution: {integrity: sha512-55hpqq18bEVAlxedlTt3tFqZmKg2nUXT1kn1G/BGEy0R13h3LwtwHPVzzjG6P4LLeOHE32PFDQUVaJEWvBEZBw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.2.7': - resolution: {integrity: sha512-O3IRSv1ZBL1zs0WrIgefTEcTKFVn+ryxBNe54erJ6KsD+2f/Mmt7g2jOYh8PSBdUwPtKQJuCsTMlZ7tIu2AcsQ==} + '@next/swc-darwin-x64@16.3.0': + resolution: {integrity: sha512-SOi96kSaF5T+0wW4koiM1bWzSPwjzTesC1p3df+FjdOi5LIQkBK/blxh7HdoKnNuI4PURF1OO7TZqtfnbWDSgw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.2.7': - resolution: {integrity: sha512-Re6PZtjBDd0aMU+VcZcC/PrIvj4WhrjDYtMhhCVQamWN4L90EVP0pcEOBQD25prSlw7OzNw5QpHLWMilRLsRNw==} + '@next/swc-linux-arm64-gnu@16.3.0': + resolution: {integrity: sha512-P0gZAoPMF4dyTRzhmkV4PrqVzSOB6t4mC1oI3c4dqijJ+OVEVx5clIXAKR4/uQpsqw2KKM/0D5tVumcR2r5blg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@next/swc-linux-arm64-musl@16.2.7': - resolution: {integrity: sha512-qyogG9QtBzWxgJfeGBvOEHI3851gTfCF3wLZ5RDLTBJGAmE9p1qDwKCOdrBrvBzRvYDT+gUDp72pzlSEfAXgNA==} + '@next/swc-linux-arm64-musl@16.3.0': + resolution: {integrity: sha512-tXXGKJw0m37O0eKJARVTX/TheKPhz0QFVtVVZXmOig+9YKLQOSP6hvf2pxv5DO7CLEJyTHx3Pg043CDQkv1G4Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@next/swc-linux-x64-gnu@16.2.7': - resolution: {integrity: sha512-Vhe4ZDuBpmMogrGi5D4R2Kq4JAQlj6+wvgaFYy31zfES0zPmt6TLA+cuYpM/OLrPZjo2MYQTHVqNUSCR6+fDZQ==} + '@next/swc-linux-x64-gnu@16.3.0': + resolution: {integrity: sha512-pjGxK5EY7yWml78ALejFkWmgHsU7wbFQrISiugpH6FbUJhgEvw3xFZ/EBAtLl7QtL0WdQKiG9eWJ3mOKGTukHw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@next/swc-linux-x64-musl@16.2.7': - resolution: {integrity: sha512-srvian89JahFLw1YLBEuhvPJ0DO5lpUeJQMXy4xYo7g628ZlNgXdNkqoxSAv9OYrBfByh6vxISMwW/mRbzCY+g==} + '@next/swc-linux-x64-musl@16.3.0': + resolution: {integrity: sha512-sjo++Xx+lomlPs3HRsHWhVDyGG6ms1kGW5EtHLERdII8AyG1i+f6aq68xHREO6AEMlhjTNEWBSmfJfqm9orf7g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@next/swc-win32-arm64-msvc@16.2.7': - resolution: {integrity: sha512-GX3wvLpULFuRFJzwHaKfm7QZJ18F4ZSuxlPJ96BoBglCzBmdSjyeBKF+ZhWhvL/ckxNfLnNa7bsObO2ipYpszw==} + '@next/swc-win32-arm64-msvc@16.3.0': + resolution: {integrity: sha512-C5JSgiO54wURdaxdEUIXqkz04uMqC9UmPX1gtDrV/5Tf1UowdWYI8uA5hfFbPolTlp0q4KZ60xlHePNibf0VIw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.2.7': - resolution: {integrity: sha512-J4WlM72NMk076Qsg0jTdK3SNXatlSdnjW7L7oNGLst1tAGjHrJh/FYi+pw9wyIjEtGRKDNzD0zuiY16oWYWVaw==} + '@next/swc-win32-x64-msvc@16.3.0': + resolution: {integrity: sha512-fDOggsweNb5SSw0ZKVk6U+gxSyGFFlIBY/LBc1r8GUj4u/6t6oArL+Pmkg0MBnsgR+KkdsURilVH4F3GXUGepA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] + '@noble/ciphers@1.3.0': + resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} + engines: {node: ^14.21.3 || >=16} + '@noble/ciphers@2.1.1': resolution: {integrity: sha512-bysYuiVfhxNJuldNXlFEitTVdNnYUc+XNJZd7Qm2a5j1vZHgY+fazadNFWFaMK/2vye0JVlxV3gHmC0WDfAOQw==} engines: {node: '>= 20.19.0'} @@ -7865,292 +8220,292 @@ packages: resolution: {integrity: sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA==} engines: {node: '>= 20.0.0'} - '@oxc-project/runtime@0.133.0': - resolution: {integrity: sha512-PkvjA1Lq5++V5S1E6Patr92ZVcieE6EalDr1VJTqv4BnjZdOUC4W3p8k1wMXSd5/2aFP4b/A6N5sg2Bkzcr9vQ==} + '@oxc-project/runtime@0.143.0': + resolution: {integrity: sha512-zIuXUf+YGIgsPk0xlQmzTY8NCSc8jE/pSfDodlQ9H3EGZABmr+AtIjXRrnpQAXuXzhDSNqZz9cuhud8hDDLvpg==} engines: {node: ^20.19.0 || >=22.12.0} '@oxc-project/types@0.124.0': resolution: {integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==} - '@oxc-project/types@0.133.0': - resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} + '@oxc-project/types@0.143.0': + resolution: {integrity: sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA==} - '@oxfmt/binding-android-arm-eabi@0.52.0': - resolution: {integrity: sha512-17EMSJnQ9g+upVHrAUYDMfH5lvRKQ9Nvg8WtEoH72oDr1VpWz+7/o3tD97U1EToen2YAQ/68JmtDYkQUi20dfQ==} + '@oxfmt/binding-android-arm-eabi@0.62.0': + resolution: {integrity: sha512-pdsv0C4gPjJ8H1+sd8u0BDx+yLACTL+rgeMIOL1ln4ihSnhw8CWXtYWgvcSkyTfgGBIzFKab+d8rx9Xl4en/Kw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.52.0': - resolution: {integrity: sha512-A2G1IdwGEW2lLJkIxcvuirRH1CzSl/e0NX11zTlW1gvxJThfwbI/BEoaKrTNpm7M2FchvIf6guvIQU7d5iz+OQ==} + '@oxfmt/binding-android-arm64@0.62.0': + resolution: {integrity: sha512-WC3YQ7uS/KtDrjmqwBviwFKe9qeoi+eXx8aX1z/ffG23Md75myjrJaQqTuJvdOLPoa4EYTjDWH0dHXfwulCVog==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.52.0': - resolution: {integrity: sha512-f9+bLvOYxy7NttCLFTvQ7afmqDOWY4wIP9xdvfj5trQ1qj6f2UFAGwZESlfsMjvJNTyRpXfIlOanCI9FOvoeQA==} + '@oxfmt/binding-darwin-arm64@0.62.0': + resolution: {integrity: sha512-GM8Yf3LjjaR1I8PD0SfeoIlwhsh9GvSF+cQ8sf624Yxnjsyumn95aFzYfKJVefblfDIiOAnZ7QVm2sa21Er/0Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.52.0': - resolution: {integrity: sha512-YSTB9sJ5nnQd/Q0ddHkgof0ZCHPAnWZT1IW2SJ8omz7CP7KluJhO1fNHrpqdxCtpztJwSs4hY1uAee35wKxxaw==} + '@oxfmt/binding-darwin-x64@0.62.0': + resolution: {integrity: sha512-d5THp7F8bCxLqNogEXDORRsQD6dosf3EyFtnXfBer6v+8tGdcWIjoDX9WaXrrF/26zOmL8qHpPTKCEvpBDmZkQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.52.0': - resolution: {integrity: sha512-NIrRNTTPCs4UbmVs0bxLSCDlLCtIRMJIXklNKaXa5Oj2/K1UIMBvgE8+uPVo01Io3N9HF0+GAX+aAHjUgZS7vA==} + '@oxfmt/binding-freebsd-x64@0.62.0': + resolution: {integrity: sha512-1DnrtXGZooOZ0fHgAXZUaDQzBVh1CM2MNW4oBXyQ2aWKvCHjyljvT9fgBkOM0fEOb96X5eqtcfJ0YUVt9jj66g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.52.0': - resolution: {integrity: sha512-JXUCde8mn3GpgQouz2PXUokgy/uT1QrRJBL2s983VWcSQp62wTFYiNXgTKdeo1Jgbr0IgUnKKvzIk/YBlj/nVQ==} + '@oxfmt/binding-linux-arm-gnueabihf@0.62.0': + resolution: {integrity: sha512-4pQDHOYRH+Huqe0StIaWyvk2CVl/aTaqSrbZpA3/pLS2xH24ME7lBgYprhQF2fRkHBzhGGGKliwxFsDdHwx59g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.52.0': - resolution: {integrity: sha512-psbUXaRZ+V8DaXz10Qf7LSHtdtdKAmC8fxXgeU608jjzrmWK4quamZMOpl6sf+dikoFHA85uE93Q0BqxrCdQrQ==} + '@oxfmt/binding-linux-arm-musleabihf@0.62.0': + resolution: {integrity: sha512-X0jAaZJFMCVKhB6YyWVTQ/wN2DLsBcZKSMqTS76bF6riT+XZdtg2FPEdjDvdVbunO9cG+tWiVaEs4Zs38lxYog==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.52.0': - resolution: {integrity: sha512-Jw7MgWUU9lcLCcy82updISP3EthTlfvAwR6gWNxPzqly7+fLvOi2gHQE9xXQjpqaVLm/8P+gOzlv9ODuoVlaaw==} + '@oxfmt/binding-linux-arm64-gnu@0.62.0': + resolution: {integrity: sha512-682Z8T5s8T5ATArYtsejKvbIfd8LEAXyyDkKkoZVq8HND7Vx8TYLlrDjDSeYfodMeVwHOgkj13lJYR8cj6vUSg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-musl@0.52.0': - resolution: {integrity: sha512-wZg6bLjDvh2KibyI3QFUYo8GTXneIFsd0JvehtvJiUmQ8WRPERgxd/VM4ctWb86U5FT1FkqgS8/wZKVB+AZScg==} + '@oxfmt/binding-linux-arm64-musl@0.62.0': + resolution: {integrity: sha512-lk25fAl7KWaLWVJcW0CHEXB7QlQZtx5eDkjpaGMK0hzXTjUe0Wmlu8IKuFHoviSOcEJedRTs4VE/506VqGxGew==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-ppc64-gnu@0.52.0': - resolution: {integrity: sha512-IngE8uxhNvxcMrLjZNDo9xNLY7rEK33AKnaMd2B46he1e/mz2CfcW6If/U1wUjdRZddm1QzQaciqZkuMkdh1FA==} + '@oxfmt/binding-linux-ppc64-gnu@0.62.0': + resolution: {integrity: sha512-SFyNqHQLwySceWNLhiSldx7wPXRAzP0L0WcW9GegP3uWrpZGJiZlQO85NbHAFPEfxR9PhZ9qSnZryEh7+v+4Gw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.52.0': - resolution: {integrity: sha512-H3+DdFMv/efN3Efmhsv18jDrpiWWqKG7wsfAlQBqAt6z/E2Bx+TwEj2Nowe51CPOWB8/mFBC2dAMSgVFLvvowA==} + '@oxfmt/binding-linux-riscv64-gnu@0.62.0': + resolution: {integrity: sha512-KYj55C1ywJfHo6+aKDuEmUtVEdJALsC5GwayDGsI6FGz2GxFqNr/mA8nxVsNbJzm7sE5MRqTQ9ziImSzhYXysA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-musl@0.52.0': - resolution: {integrity: sha512-zji+1kb7lJKohSDjzC1IsS+K/cKRs1hdVf0ZH0VbdbiakmtLvN9twBoXo/k8VdjFax7kfo+DyPxS7vv52br1aw==} + '@oxfmt/binding-linux-riscv64-musl@0.62.0': + resolution: {integrity: sha512-BhZDNo5GOU5nC378RhD0/XpvaEBHsH3HLgJp8YZX3A0InC7oivzA63HsRmiXFLtLSHAstEVrDf6fbC7Rs8Jh/A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-s390x-gnu@0.52.0': - resolution: {integrity: sha512-hcLBYedpCy7ToUvvBidWk7+11Yhg1oAZ4+6hKPic/mQI6NaqXJSXMps5nFlwUuX2ewhtLZZDPg63TI042qGKBg==} + '@oxfmt/binding-linux-s390x-gnu@0.62.0': + resolution: {integrity: sha512-UyAFmyHkgSgUJ/wOM4p3U8AC2yAFvRH5PNBs7TnK0fObTT/XSWcdr/lAzPSWaekHaZFaMeFZyk9n93Joq3J93A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.52.0': - resolution: {integrity: sha512-IDO2loXK2OtTOhSPchU9MW25mWL2QCDGdJbjN8MXKZVS80qXe5gMTwQWu/gMJ3juoBHbkuUZNB2N1LHzNT7DoA==} + '@oxfmt/binding-linux-x64-gnu@0.62.0': + resolution: {integrity: sha512-1iYMP0leytWazFubD/WnINJuIrzRPuoL1aWEJdlGezEzDbTxcd29R4r8IUzP2oWeKst5V02uMJgR2NILlPlG6w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-musl@0.52.0': - resolution: {integrity: sha512-mAV2Hjn0SatJ+KoAzKUC3eJhdJ8wv+3m1KyuS0dTsbF0c5weq+QrCt/DRZZM+uj/XiKzCDEUKYsBF30e2qkcyw==} + '@oxfmt/binding-linux-x64-musl@0.62.0': + resolution: {integrity: sha512-4rA/URtJSTVNVAQz6Q8wf7SaRvOXVy+TizriT9hs/Y1XhLR/R+92uWKRQG8yFWRAIEBbFHJ6WevQcl/G9SXEfw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxfmt/binding-openharmony-arm64@0.52.0': - resolution: {integrity: sha512-vd4npaUIwChxp7XzkqmepBWTT9YMcSe/NBApVGPC30/lLyOVaV3dvma1SKo03t8O73BPRAG7EyJzGlN5cJM5hQ==} + '@oxfmt/binding-openharmony-arm64@0.62.0': + resolution: {integrity: sha512-mSZuFHU2ar1KLUjXpI2QBQcJ1VsOB3mOCgQXuXCpKs19dgh4u+OaovNfrWDfiJb+ihJ2+f7YFcaO9bS2dlTCXA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.52.0': - resolution: {integrity: sha512-k2sz6gWQdMfh5HPpIS+Bw/0UEV/kaK2xuqJRrWL233sEHx9WLlsmvlPFM4HUNThkYbSN0U0vPW7LVKZWDS8hPQ==} + '@oxfmt/binding-win32-arm64-msvc@0.62.0': + resolution: {integrity: sha512-OfwuhkcjDlqC4EgDojtiV9mzpLqeB9KqTOWPOjLEYBVdDCVSxqW3qzp/xcIxsbtI0UgGCnKvAqYKyY25kf5JZw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.52.0': - resolution: {integrity: sha512-rhke69GTcArodLHpjMTfNnvjTEBryDeZcUCKK/VjXDMtfTULl6QRh0ymX5/hbCUv2WjYm9h/QbW++q2vE15gWQ==} + '@oxfmt/binding-win32-ia32-msvc@0.62.0': + resolution: {integrity: sha512-P9uDDNFRzghO3X8QAzhkjKhK7JvtABsVn8UYtFX7uor12IAnwNt8nNIctvfWj1JkQU/kE+fmLRPiw7XlrIHsZw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.52.0': - resolution: {integrity: sha512-q5xL7oeXkZdEtNZWBdvehJcmt+GRu9l2bK40yJs1jJXlqq+r0Hygb1rTjq+FM2o/2xyt4cufH6KRplHp3Jjsvw==} + '@oxfmt/binding-win32-x64-msvc@0.62.0': + resolution: {integrity: sha512-dlI5SY7XYQCiCBafntWagCR6HcAJB/NpsLtdlPx8x08+Osz8Ok1HHz1GZuusegCe/VoJ6pAnF5a4pd5OZAq7qQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxlint-tsgolint/darwin-arm64@0.23.0': - resolution: {integrity: sha512-gOs9PVr2wEg4ox9z0aJo+RKhhImW86YL5N6yav8BK/rgPsIrwN/igSZ+pbRr723NFvUNKde9fgMhRA6JrXAOZw==} + '@oxlint-tsgolint/darwin-arm64@7.0.2001': + resolution: {integrity: sha512-CUJEdbSZ54+Xy9OXqOhWLTKZKV0BBiV7C2i/ygyVmXtkUNXx5YCzN8DpSSshTAKktoL7S+tnQ/ftFG/i7X896w==} cpu: [arm64] os: [darwin] - '@oxlint-tsgolint/darwin-x64@0.23.0': - resolution: {integrity: sha512-kjJ8B+7n4tB9VJdxS5A9GdJt6/bYpzbu4lXp2uO1S3sRmCB5gDEABlGoiePNApRWaW+xqL4b4xgiE727jSLhuA==} + '@oxlint-tsgolint/darwin-x64@7.0.2001': + resolution: {integrity: sha512-pXfBb5BqONCcgrXQNUZWXgiYmRSWJzd97S8i41VVOh6ut0tyo+cJ5FKFpczDHxiVNfj/3e7c9B4MtztNdpIVCw==} cpu: [x64] os: [darwin] - '@oxlint-tsgolint/linux-arm64@0.23.0': - resolution: {integrity: sha512-6dCZuKNu135seMXilkRk9SpCx6i1XgmiipYGalLij5WVRX6ZYS8c4xI7preN/zv9fCXhsQclTIMDu2Y/cytTjw==} + '@oxlint-tsgolint/linux-arm64@7.0.2001': + resolution: {integrity: sha512-roP7zujb/QDPzDwEKsFFpzNHHy91/Y7oX9vQXk78ekyZtcQj1QXDIMH33gjDdHBfRl4K9pZ36xhRgrP4Zr+R8A==} cpu: [arm64] os: [linux] - '@oxlint-tsgolint/linux-x64@0.23.0': - resolution: {integrity: sha512-3bdilnyA7kmSTjK27rvjIjSxL5SIg3wt7vwNiRkouWB83ytssyKnuGvxSYJxgMEmFpSutzaBzcCUM2jDtPGcgA==} + '@oxlint-tsgolint/linux-x64@7.0.2001': + resolution: {integrity: sha512-UDezNqdECVmngu2TPnjaS1YoAmcTaBoI5lV9vk3VahBxoi+I5r9k3iJTT7qZoYWOXTD/7T7bNcwRgrocR6BscQ==} cpu: [x64] os: [linux] - '@oxlint-tsgolint/win32-arm64@0.23.0': - resolution: {integrity: sha512-j+OEp44SVYiQ+ZD+uttsX7u6L9SvmbbQ77SO1pSFCcJlsVMeCk8qZsjhKfGKuT/jIA+ipOJMVs/+pqUfObBWNw==} + '@oxlint-tsgolint/win32-arm64@7.0.2001': + resolution: {integrity: sha512-uJZhqB6pdXLuN+AD1F5082byyQti/NPmJA77GtcFlmT2HzRelqbNls3SaIqxpjdFgvSBF9g0yOKGBkGFg7kX8Q==} cpu: [arm64] os: [win32] - '@oxlint-tsgolint/win32-x64@0.23.0': - resolution: {integrity: sha512-5MyjFuqf+g8OUPJBSGWHJtmoWnzFJYyOg4To9WMQshZYEWig/vtu7JtJ03VWnzHv9LJkAUeApY0gVCOywFR/iQ==} + '@oxlint-tsgolint/win32-x64@7.0.2001': + resolution: {integrity: sha512-FkDRm8hx9OwzGQqyWG1tO5QrTLRApff9DzSgpz9QZau37BR8d1VYKOxMLGf6shPZntJFoTwIIJYT68VndYDCog==} cpu: [x64] os: [win32] - '@oxlint/binding-android-arm-eabi@1.67.0': - resolution: {integrity: sha512-VrSi571rDv1N8HaEDM+DEX8nmT0y9jJo8tzzW13vsOWTx59xQczCIJx68n2zWOXRT5YKZsOZXp4qkHN/10x4mw==} + '@oxlint/binding-android-arm-eabi@1.77.0': + resolution: {integrity: sha512-E06sKWS6PiI6HRxS1wyQg22HvApt01hI7fV+T3wUk3OSbaaP4a3hYGY/MIQDmASqCiRjBdpRQYkgMkqH82cWmQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxlint/binding-android-arm64@1.67.0': - resolution: {integrity: sha512-l6+NdYxMoRohix5r5bbigW16LPicceCwGcQ6LKKuE1kUdjgFfQolJjrJsQYPFetIs78Gxj/G/f5TEGoTCwj9nQ==} + '@oxlint/binding-android-arm64@1.77.0': + resolution: {integrity: sha512-NvsKz0KZxTp9cYWPLf+FXaSZwB3oO3peAjtukpOMBgse2vhQSoIIVqeO1yR0lEo/UcdZIDL18uq+kL0LzQ0ytA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxlint/binding-darwin-arm64@1.67.0': - resolution: {integrity: sha512-jOzXxS1AxFxhImLIRbtGIMrEwaXcgMw3gR57WB1cRk8ai+vpr6726kxXqVvlNsrXtJ/FrmOm8RxlC0m8SW24Qg==} + '@oxlint/binding-darwin-arm64@1.77.0': + resolution: {integrity: sha512-bgjTn6nW4bQCFBvSvuHCpDD+sONvmpo4lGI4PxzMt1quBA+xYxhczk6RiCn3GZ9gY8uhaBbwhj9MdKGfu6T9DA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxlint/binding-darwin-x64@1.67.0': - resolution: {integrity: sha512-3DFAVY94OqjIZHXIPz37yGRSWwOFTAqChQ64/M69GYLawzP0KiwdhDNfqdKKYT0bTR/DNxmMnQsj3ns+8+X/Lg==} + '@oxlint/binding-darwin-x64@1.77.0': + resolution: {integrity: sha512-aotaIttH1R6j1Rwhx0M0htgeZyGtVQqYNTVEYMN/UcgHPquGA6kmk9OyuDc3a2GKUQBC+3C3GVQCcrRPMYqAFA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxlint/binding-freebsd-x64@1.67.0': - resolution: {integrity: sha512-e4dDKZuLu8TR9DEBssWSDahlPgZBwojTTHZUvnjBRJfJJbpxYCjfjKfi0Z1+CSLMiJBwI2yCDtRM1XJQaARjmg==} + '@oxlint/binding-freebsd-x64@1.77.0': + resolution: {integrity: sha512-nNx/wta7ksRAdYvq+l4AWjXkLxEXHALhENxjj2cYbQAIR4ybaA5L+hCbE63HOmft5czQ6ks+hb8vmEAnn7YGPg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxlint/binding-linux-arm-gnueabihf@1.67.0': - resolution: {integrity: sha512-BKytFdcQzbITV3xlnzDUDTEDtbUMCCiC4EaNTDZ4FyT8gdNvBC4gfiLucXp/sQl0XU3p7syTlorUWVVVBZab2g==} + '@oxlint/binding-linux-arm-gnueabihf@1.77.0': + resolution: {integrity: sha512-tMLLjM7xXtzXisVCzkOTXNCy9bZVId2wteNwjohlFDR/jY6WagpEDA1c1wu4xRc20Hojaxj+V6DSR7gbKxijWA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm-musleabihf@1.67.0': - resolution: {integrity: sha512-XYAv0esBDX7BpTzRDjVX2Vdj+zndd8ll2dFQiaeQ6zTZr7A8GRDTN7fH3FP3jU+O0vCDx85oH/EtG7BzPgAXuw==} + '@oxlint/binding-linux-arm-musleabihf@1.77.0': + resolution: {integrity: sha512-MiAFDFaqR0tmHTAyo0YDcZ5hyLREdYw/RQhc2R3cbT+8O3tB+zqPM2th9TTQ+Uo3jn/embS+DO+HyX9ztCPkOQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm64-gnu@1.67.0': - resolution: {integrity: sha512-zizRMjA0i6u/2B0evgda04iycu+MoNuf1pBy6Eh+1CjC5wMEG7qN5zdDKTCvFc0KSYSDM9QTG3gjZHirgtQuKg==} + '@oxlint/binding-linux-arm64-gnu@1.77.0': + resolution: {integrity: sha512-/xqQ3B16i1T4cyt/9Mn+4CpzhUXoBXp7kVpIwzOXNFLj5JmK1bIjsbSnX296Gg8A/o7oDtKWikFgBx0SLwztkw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-arm64-musl@1.67.0': - resolution: {integrity: sha512-zB/Tf6sUjmmvvbva9Gj3JTJ8rJ9t4I8/U0o6vSRtd0DRIsIuyegBwJAzhSUFQHdMijIRJkW0exs/yBhpw2S20w==} + '@oxlint/binding-linux-arm64-musl@1.77.0': + resolution: {integrity: sha512-LSbwuRKiNCenPDcbARqAZ5RfBy7gmj7vOvfJRLeCDU3gFtSxWbhv/+VTlaUqzUhNj1gFLHB8h7ALnxa/Az6z6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxlint/binding-linux-ppc64-gnu@1.67.0': - resolution: {integrity: sha512-kgU40Gt74CK0TCsF51KZymkIwN9U0BajKsMijB52zPqOeZU9NAHkA/NSQkZDHEaCakx42DxhXkODiAqf2b4Gug==} + '@oxlint/binding-linux-ppc64-gnu@1.77.0': + resolution: {integrity: sha512-QWdcH31mXEUe5Nq1s0CfCpceaKjIo9uZtwDjAuL681g1axf+5x8xrg/eXWaw//4NCxYZ4V4e5Hu5tvdR+pTBlg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-riscv64-gnu@1.67.0': - resolution: {integrity: sha512-tOYhkk/iaG9aD3FvGpBFd1Lrw0x0RaVoJBxjUkfNzS50rC5NS5BteNCwgr8A2zCdADrIIoze6D7u6U5Ic++/iQ==} + '@oxlint/binding-linux-riscv64-gnu@1.77.0': + resolution: {integrity: sha512-GnOfYgJxbcElOiPZaDFDl406ONddwvOWk2jvAAAEjwAl4GofNoHF+/HHUIBYa6bFCArlcGPi0XjC4cU1pkgF/Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-riscv64-musl@1.67.0': - resolution: {integrity: sha512-sEtywrPb+0b+tHYl1SDCrw903fiC4eyKoNqzP3v+f2JT3Xcv4NEYG+P8rj+eEnX7IWhqV/xj8/JmcmVj21CXaA==} + '@oxlint/binding-linux-riscv64-musl@1.77.0': + resolution: {integrity: sha512-AyEMTUCf0xY+hHF+IxqXFQIX0yQOIR8ykpY0lJNOw9xYqOzUX8dyZfRvlG0RfXwuQn2eonf/8NrMmDSZJjdqsA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxlint/binding-linux-s390x-gnu@1.67.0': - resolution: {integrity: sha512-BvR8Moa0zCLxroOx4vZaZN9nUfwAUpSTwjZdxZyKy4bv3PrzrXrxKR/ZQ0L9wNSvlPhnMJeZfa3q5w6ZCTuN6Q==} + '@oxlint/binding-linux-s390x-gnu@1.77.0': + resolution: {integrity: sha512-sPLzEcNvxd/oyVQ5oZo92CiHkFkpBeRop13E/P3TPY+hZfXHKCOWKI70TE2RYwMKFJDc20EMjH16L7NZICtKTw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxlint/binding-linux-x64-gnu@1.67.0': - resolution: {integrity: sha512-mm2cxM6fksOpq6l0uFws8BUGKAR4dNa/cZCn37Npq7PFbhD5HDJqWfnoIvTaeRKMy5XdS2tO0MA0qbHDrnXAAA==} + '@oxlint/binding-linux-x64-gnu@1.77.0': + resolution: {integrity: sha512-1Oh2ssH2L7lwyvkdSqaMUfsGfwU2Wfvew+obBUYjRVqhpBcUpwnsPSEr1IzVi9XqkuY10geiLsNKecqaZC34Dw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-x64-musl@1.67.0': - resolution: {integrity: sha512-WmbMuLapKyDlobMkXAaAL0Y+Uczh4LETfIfQsUpbId4Ip8Ai82/jqeYTOoUCkuuhBFapgqP253+d83tLKOksJg==} + '@oxlint/binding-linux-x64-musl@1.77.0': + resolution: {integrity: sha512-0j/2wRgNGO+Qj/M1uu/p57h/hFTTWWcfie0ufkbabeus2s5+/QqkCflnMOwLLN5m2GsNeWp4xdl4cPa4n7QCOQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxlint/binding-openharmony-arm64@1.67.0': - resolution: {integrity: sha512-9g/PqxYJelzzTAOR5Y+RiRqdeydhEuXv2KxNeFcAKQ7UsvnWSY1OP4MsuPMbTO2Pf70tz7mFhl1j13H3fyh+8g==} + '@oxlint/binding-openharmony-arm64@1.77.0': + resolution: {integrity: sha512-BJ/j54qS0usEnyDkLYURMj2iiD9h5Cyy+ppzeMSXBGRXaGRNWnj1Mw14NqWMR5E/PzdgB30OOCCzLzbRoduafw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxlint/binding-win32-arm64-msvc@1.67.0': - resolution: {integrity: sha512-2VhwE6Gatb0vJGnN0TBuQMbKCOiZlSQ/zJvVWYLK4a9d4iDiJOen/yVQkGpmsJ90MuH66fzi0kEKI0jRQMDxGA==} + '@oxlint/binding-win32-arm64-msvc@1.77.0': + resolution: {integrity: sha512-Yh8w+g2Lpx7StrvtYkoz9JJvXjB9wxgFChFNb85nrXm/wj/XTwGWS1hve9+900HL7llrntYB3YP+y32E3tRqzA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxlint/binding-win32-ia32-msvc@1.67.0': - resolution: {integrity: sha512-EQ3VExXfeM1InbE5+JjufhZZTWy+kHUwgt3yZR7gQ47Je/mE0WspQPan0OJznh493L5anM210YNJtH1PXjTSFg==} + '@oxlint/binding-win32-ia32-msvc@1.77.0': + resolution: {integrity: sha512-zja5b7+6a7UsRFgAQSrnax5vrzliEyNPLCjfXONu/vTWswaIVZGFajJZptaeRvPE4LghtFdAzVFlexTm7MVTGA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxlint/binding-win32-x64-msvc@1.67.0': - resolution: {integrity: sha512-bw24y+/1MHS4QDkons3YyHkPT9uCMoLHHgQhb+mb8NOjTYwub1CZ+K9Ngr8aO5DMrDrkqHwTzlTwFP2vS8Y/ZQ==} + '@oxlint/binding-win32-x64-msvc@1.77.0': + resolution: {integrity: sha512-+teyvPDZ2RjUvo+SuCqS/UhaJl1QtdW5fWT5NJTV61V5MIuIS90Db9LixmtEGvXixyttiK62P96MSu3UlpviBw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxlint/plugins@1.61.0': - resolution: {integrity: sha512-nkOyZEF1vH527CkdQtOp1HMrVFEM4ResURvI2JFeGoup+h+43J/k/FgdOR9b9Isxg+Yae7qVDa7y3nssE8b3TQ==} + '@oxlint/plugins@1.73.0': + resolution: {integrity: sha512-OhgMQeMmZA0dcFcX4/priaJZWdFECxiClgq6mRX6aatZEcV9PbKC3P3/v8U1hVjviT1i5U+vR8lAtBV6m4FXAA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@pkgjs/parseargs@0.11.0': @@ -8206,6 +8561,9 @@ packages: '@radix-ui/primitive@1.1.3': resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + '@radix-ui/primitive@1.1.7': + resolution: {integrity: sha512-rqWnm76nYT8HoNNqEjpgJ7Pw/DrBj5iBTrmEPo6HTX5+VJyBNOqTdv4g89G63HuR5g0AaENoAcH7Is5fF2kZ8Q==} + '@radix-ui/react-accessible-icon@1.1.7': resolution: {integrity: sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==} peerDependencies: @@ -8245,6 +8603,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-arrow@1.1.15': + resolution: {integrity: sha512-v4zggRcjadnI+ClKDuijlQEW4tw3NoaeHc/PwpKnLoLLKNUG4InLegkstooLcRIUWCs+8L22dGURCVuFfOKfnA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-arrow@1.1.7': resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} peerDependencies: @@ -8332,6 +8703,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-compose-refs@1.1.5': + resolution: {integrity: sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-context-menu@2.2.16': resolution: {integrity: sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==} peerDependencies: @@ -8354,6 +8734,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-context@1.2.2': + resolution: {integrity: sha512-RHCUGwKHDr0hDGg4X7ma4JG4/+12qxw8rkh5QKdDldlCvtja6nUx1Ef/8HVrJze81lEsgLQlqjzjGNHantgnQA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-dialog@1.1.15': resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} peerDependencies: @@ -8389,6 +8778,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-dismissable-layer@1.1.19': + resolution: {integrity: sha512-8g4pfOL9HoKKLWGiypT+dphVqjFfmcXO5GBnhsG6zI+lxAx/8feQpr+1LSN8Re3hiZ+XkLNS4O9ztK11/LzQ6w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-dropdown-menu@2.1.16': resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} peerDependencies: @@ -8411,6 +8813,28 @@ packages: '@types/react': optional: true + '@radix-ui/react-focus-guards@1.1.6': + resolution: {integrity: sha512-RNOJjfZMTyBM6xYmV3IVGXkPjIhcBAuv48POevAXwrGJhkWZ9p1rFoIS1JFooPuT193AZmRsCPhpoVJxx6OPoQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.1.16': + resolution: {integrity: sha512-wmRZ2WWLvmt6KHy2rNPOdPUjwq5xOHY02+m+udwJTn0aNIox/rkskAvJTyTLGhPK6KgrUjlJUJpgmx/+wFiFIQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-focus-scope@1.1.7': resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} peerDependencies: @@ -8459,6 +8883,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-id@1.1.4': + resolution: {integrity: sha512-TMQp2llA+RYn7JcjnrMnz7wN4pcVttPZnRZo52PLQsoLVKzNlVwUeHmfePgTgRluXFvlD3GD5g5MOVVTJCO0qA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-label@2.1.7': resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==} peerDependencies: @@ -8563,6 +8996,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-popover@1.1.23': + resolution: {integrity: sha512-mw58MrBlyHWFisTOYignD0vf/3gdcgAR+9of1s9G/38CbFiUwH1nCDkc0AUM9IrXFgN5Ue8n45j9WCgyM1sbiQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-popper@1.2.8': resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} peerDependencies: @@ -8576,6 +9022,32 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-popper@1.3.7': + resolution: {integrity: sha512-UsJrrd7w4wuKKTdvd/DNERVlwSlUcyXzjhyDwBk+3aPOsCjOY6ZSbxuw8E6lZTjjfP8Cpd0J8VVkrYUWyGYXyg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.17': + resolution: {integrity: sha512-vKQLcWypUnwZVvfV7UkGahH2g6ySe8M8R+zYBwPrv5byZ9QAW6cQVvNKo7GgmD+p8aYb6D9JBuvy8/WhOno2wQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-portal@1.1.9': resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} peerDependencies: @@ -8589,6 +9061,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-presence@1.1.10': + resolution: {integrity: sha512-3wyzCQ6+ubRA+D4uv9m95JYLXxmOHp05qjrkjeA7uKHHtjpPggQzc6DAb0URl7j67oR0K2foO4ip27TiX037Bw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-presence@1.1.5': resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} peerDependencies: @@ -8602,6 +9087,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-primitive@2.1.10': + resolution: {integrity: sha512-MucOnzh6hR5mid6VpkbglRAMYMjKLqRnGBbjXkzjK52fuQDd1qbkx78a5P40mkcnVXJdEVxm26E9OPAiUq7nBg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-primitive@2.1.3': resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} peerDependencies: @@ -8750,6 +9248,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-slot@1.3.3': + resolution: {integrity: sha512-qx7oqnYbxnK9kYI9m317qmFmEgo6ywqWvbTogdj7cL9p3/yx4M48p7Rnw5z3H890cL/ow/EeWJsuTykeZVXP5Q==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-switch@1.2.6': resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} peerDependencies: @@ -8850,6 +9357,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-callback-ref@1.1.4': + resolution: {integrity: sha512-R6OUY2e2fA6Yn6s+VSx5KBV6Nx8LQEhu+cz7LCej18rQ1HLyg9PSC9jP/ZNx0o6FAIK9c0F1kHylzSxKsdlkrQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-controllable-state@1.2.2': resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} peerDependencies: @@ -8859,6 +9375,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-controllable-state@1.2.6': + resolution: {integrity: sha512-uEQJGT97ZA/TgP/Hydw47lHu+/vQj6z/0jA+WeTbK1o9Rx45GImjpD0tc3W5ad3D6XTSR6e1yEO0FvGq6WQfVQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-effect-event@0.0.2': resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} peerDependencies: @@ -8868,6 +9393,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-effect-event@0.0.5': + resolution: {integrity: sha512-7cshFL8HGS/7HEiHH+9kL9HBwp2sa9yX18Knwek6KYWmXwM7pegMgta2AXMQKI+rq3JnfSj9x8wYqFMTdG1Jgg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-escape-keydown@1.1.1': resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} peerDependencies: @@ -8895,6 +9429,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-layout-effect@1.1.4': + resolution: {integrity: sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-previous@1.1.1': resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} peerDependencies: @@ -8913,6 +9456,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-rect@1.1.4': + resolution: {integrity: sha512-cSOCh6JlkmfjLyNcLiu2nB4v+nm+dkZ+Q5KHWk/soo4U7ZLiEQFKHK9/YmtBHjfCEaU43IBKQOc4/uJmCaiCTQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-size@1.1.1': resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} peerDependencies: @@ -8922,6 +9474,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-size@1.1.4': + resolution: {integrity: sha512-D3anSY15EJoxrihpsXI6SMrmmonnQtR2ni7arO+Lfdg3O95b9hNXxONk8jA5C8ANdF/h5HMAxejgs8PWJ6rlhw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-visually-hidden@1.2.3': resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} peerDependencies: @@ -8938,6 +9499,9 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + '@radix-ui/rect@1.1.3': + resolution: {integrity: sha512-JtyZR+mqgBibTo8xea3B6ZRmzZiM/YeVBtUkas6zMuXjAlfIFIW2FgqeM9eLyvEaYX66vr6DJMK+4U6LV0KhNw==} + '@react-email/body@0.3.0': resolution: {integrity: sha512-uGo0BOOzjbMUo3lu+BIDWayvn5o6Xyfmnlla5VGf05n8gHMvO1ll7U4FtzWe3hxMLwt53pmc4iE0M+B5slG+Ug==} engines: {node: '>=20.0.0'} @@ -9124,48 +9688,54 @@ packages: peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-pdf/fns@3.1.2': - resolution: {integrity: sha512-qTKGUf0iAMGg2+OsUcp9ffKnKi41RukM/zYIWMDJ4hRVYSr89Q7e3wSDW/Koqx3ea3Uy/z3h2y3wPX6Bdfxk6g==} + '@react-pdf/fns@3.1.3': + resolution: {integrity: sha512-0I7pApDr1/RLAKbizuLy/IHTEa93LSPy/bEwYniboC3Xqnp6Od8xFJKbKEzGw2wh/5zKFFwl00g4t9RwgIMc3w==} - '@react-pdf/font@4.0.4': - resolution: {integrity: sha512-8YtgGtL511txIEc9AjiilpZ7yjid8uCd8OGUl6jaL3LIHnrToUupSN4IzsMQpVTCMYiDLFnDNQzpZsOYtRS/Pg==} + '@react-pdf/font@4.0.8': + resolution: {integrity: sha512-deNd+emtZAJho1IlzKL9bRoLAGv/6oXOIKO2oZfs4RuXUrK1onLHbJO7e2YoVLPFP/sQxisRTnzdJFtd35iKwA==} - '@react-pdf/image@3.0.4': - resolution: {integrity: sha512-z0ogVQE0bKqgXQ5smgzIU857rLV7bMgVdrYsu3UfXDDLSzI7QPvzf6MFTFllX6Dx2rcsF13E01dqKPtJEM799g==} + '@react-pdf/image@3.1.0': + resolution: {integrity: sha512-ks7Ry8v711r8NvKWSELehj0BXBNPRihSnWsM09nDD8Ur175zbWBCK217LLwQMKDNYDVpkZaipdoJPom1LGaE9g==} - '@react-pdf/layout@4.4.2': - resolution: {integrity: sha512-gNu2oh8MiGR+NJZYTJ4c4q0nWCESBI6rKFiodVhE7OeVAjtzZzd6l65wsN7HXdWJqOZD3ttD97iE+tf5SOd/Yg==} + '@react-pdf/layout@4.6.1': + resolution: {integrity: sha512-gN6PmWoEffvlIkifLfEhMsVucRywVMyH3rnxdyOVOhGy0nWJKKGpHyPc4plbDdpP6EfZ0r8prHXujDSkIG2nSA==} - '@react-pdf/pdfkit@4.1.0': - resolution: {integrity: sha512-Wm/IOAv0h/U5Ra94c/PltFJGcpTUd/fwVMVeFD6X9tTTPCttIwg0teRG1Lqq617J8K4W7jpL/B0HTH0mjp3QpQ==} + '@react-pdf/math@2.0.1': + resolution: {integrity: sha512-o+QQA03iT76RiKe8uhOgof+5X7GzA4SUjjPbffi6IGwcOotuxTKm3uhZAnx18ioylSpJf4BcVgUazzb5Ycv8qw==} + peerDependencies: + '@react-pdf/renderer': '>=4.5.1' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@react-pdf/png-js@3.0.0': - resolution: {integrity: sha512-eSJnEItZ37WPt6Qv5pncQDxLJRK15eaRwPT+gZoujP548CodenOVp49GST8XJvKMFt9YqIBzGBV/j9AgrOQzVA==} + '@react-pdf/pdfkit@5.1.1': + resolution: {integrity: sha512-wNcdSsNlNYyGHGAgIdt453egBF7fiF9UxpRlklUfVvu8OWCrUppG9xiUrPLVoKiqWet5tMi0w6LmuFUJuYqjEg==} - '@react-pdf/primitives@4.1.1': - resolution: {integrity: sha512-IuhxYls1luJb7NUWy6q5avb1XrNaVj9bTNI40U9qGRuS6n7Hje/8H8Qi99Z9UKFV74bBP3DOf3L1wV2qZVgVrQ==} + '@react-pdf/primitives@4.3.0': + resolution: {integrity: sha512-nYXoZ36pvwNzbc54+DbL8RCn15jU7woJ9D/svnh5tpUXekJ+CbI4mZLo6boSv24CvJgychOu6h7gxX03B4ps0A==} '@react-pdf/reconciler@2.0.0': resolution: {integrity: sha512-7zaPRujpbHSmCpIrZ+b9HSTJHthcVZzX0Wx7RzvQGsGBUbHP4p6s5itXrAIOuQuPvDepoHGNOvf6xUuMVvdoyw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@react-pdf/render@4.3.2': - resolution: {integrity: sha512-el5KYM1sH/PKcO4tRCIm8/AIEmhtraaONbwCrBhFdehoGv6JtgnXiMxHGAvZbI5kEg051GbyP+XIU6f6YbOu6Q==} + '@react-pdf/render@4.5.1': + resolution: {integrity: sha512-IW/N4HWJWtioBXCf7n02IR24VJJ8gbdS3jGypf+vW/rSErEx3/URRzh9UK6Ma8Fpog9+T/W6GE2NHJ5AAKHhVA==} - '@react-pdf/renderer@4.3.2': - resolution: {integrity: sha512-EhPkj35gO9rXIyyx29W3j3axemvVY5RigMmlK4/6Ku0pXB8z9PEE/sz4ZBOShu2uot6V4xiCR3aG+t9IjJJlBQ==} + '@react-pdf/renderer@4.5.1': + resolution: {integrity: sha512-5r1VQrE6FRLXX5wWUxwZzM24E2BJMo6g8AQWuS8WyPs9ugu5yMnb2g8/RpPYka/Z6J+RUEWc32wty2NoUJF42Q==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@react-pdf/stylesheet@6.1.2': - resolution: {integrity: sha512-E3ftGRYUQGKiN3JOgtGsLDo0hGekA6dmkmi/MYACytmPTKxQRBSO3126MebmCq+t1rgU9uRlREIEawJ+8nzSbw==} + '@react-pdf/stylesheet@6.2.1': + resolution: {integrity: sha512-2+UEk+7e+z8baaWi2l5kPLWmwtJeOI+T5wW9GGeN3iDH7vd3kbTqOpN1yt9mmfNVZFxQsnDHpznFb5v5UF983A==} + + '@react-pdf/svg@1.1.0': + resolution: {integrity: sha512-cTIHXiz9x1HrbfqzfxfZP3FRdDwUXG77QWF6Fb5MP/lV3ONxR+g0Z3hwtBatCS9HeGBQCpxX/Lzb8wHE+co1PA==} - '@react-pdf/textkit@6.1.0': - resolution: {integrity: sha512-sFlzDC9CDFrJsnL3B/+NHrk9+Advqk7iJZIStiYQDdskbow8GF/AGYrpIk+vWSnh35YxaGbHkqXq53XOxnyrjQ==} + '@react-pdf/textkit@6.3.0': + resolution: {integrity: sha512-v6+V8nAcVwm7s2s1jIG2MD3Iw//x/k+XrH1foWOELBE4b32pyDgKyPXN/6KJE0dnX7+fVy27uctLNCLNMvzKzQ==} - '@react-pdf/types@2.9.2': - resolution: {integrity: sha512-dufvpKId9OajLLbgn9q7VLUmyo1Jf+iyGk2ZHmCL8nIDtL8N1Ejh9TH7+pXXrR0tdie1nmnEb5Bz9U7g4hI4/g==} + '@react-pdf/types@2.11.1': + resolution: {integrity: sha512-i9xQgfaDU9QoeNnbp6rltXCWg1huEh195rpOuN8cE4BZ2FuLdQrsIcb2dhFF9aOxXf+XBA6LOSpIW051MDD/bw==} '@reduxjs/toolkit@2.11.2': resolution: {integrity: sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==} @@ -9602,43 +10172,40 @@ packages: resolution: {integrity: sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==} engines: {node: '>=20'} - '@shikijs/engine-javascript@3.23.0': - resolution: {integrity: sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==} - - '@shikijs/engine-javascript@4.0.2': - resolution: {integrity: sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag==} + '@shikijs/core@4.4.3': + resolution: {integrity: sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg==} engines: {node: '>=20'} - '@shikijs/engine-oniguruma@3.23.0': - resolution: {integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==} - - '@shikijs/engine-oniguruma@4.0.2': - resolution: {integrity: sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==} + '@shikijs/engine-javascript@4.4.3': + resolution: {integrity: sha512-FbOjFJp9VLdo1Wevs10BBtVxiTWwNLqZh5Gkhjgda/ioL15YOgeSl9n+6XMa3qRlPQzfhFNe641SrynFHYG0nQ==} engines: {node: '>=20'} - '@shikijs/langs-precompiled@4.0.2': - resolution: {integrity: sha512-I7uqbU58tSTgChNtu7dTnJWOo0lAsZMyv1RT9DCb+qlcQu5fkp2lAeISo+2qxunYSX+l81nI83lYp75OoqYzqg==} + '@shikijs/engine-oniguruma@4.4.3': + resolution: {integrity: sha512-EcOQkxdxGQrc1Row/cC2c96/v1dbZqGnEVu1qTuT/MJmp6+cXCvQussowVmCv5Tqr3KuY3c7IbM6HTW3LJ1k9w==} engines: {node: '>=20'} - '@shikijs/langs@3.23.0': - resolution: {integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==} + '@shikijs/langs-precompiled@4.4.3': + resolution: {integrity: sha512-i3+91QcqVBji2mlCinQpHQyoZfciaWsHCuv5XZwMXGEmSAMCW0oCdrWp+zMKLf0CwHd9XT+E5RBDJ0RY1USWCw==} + engines: {node: '>=20'} - '@shikijs/langs@4.0.2': - resolution: {integrity: sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==} + '@shikijs/langs@4.4.3': + resolution: {integrity: sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A==} engines: {node: '>=20'} '@shikijs/primitive@4.0.2': resolution: {integrity: sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw==} engines: {node: '>=20'} - '@shikijs/rehype@3.23.0': - resolution: {integrity: sha512-GepKJxXHbXFfAkiZZZ+4V7x71Lw3s0ALYmydUxJRdvpKjSx9FOMSaunv6WRLFBXR6qjYerUq1YZQno+2gLEPwA==} + '@shikijs/primitive@4.4.3': + resolution: {integrity: sha512-m0wBeLDQDeIxRdUmrCPdQqfuUamDwRL5isCfYbguKD6NiaKpVbsv+3J81DyIKgNW5h4WAIIr8T4EkgQrBBxvaQ==} + engines: {node: '>=20'} - '@shikijs/themes@3.23.0': - resolution: {integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==} + '@shikijs/rehype@4.4.3': + resolution: {integrity: sha512-vkG9jG1aRnrx05R31uAOKQHE8qpY7r1cBXE2sAZgFK2IaPnQHwaP4L1C6amQixmZ8thBsKwfbSsYxMDoo46UWQ==} + engines: {node: '>=20'} - '@shikijs/themes@4.0.2': - resolution: {integrity: sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==} + '@shikijs/themes@4.4.3': + resolution: {integrity: sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw==} engines: {node: '>=20'} '@shikijs/transformers@3.23.0': @@ -9650,19 +10217,13 @@ packages: peerDependencies: typescript: '>=5.5.0' - '@shikijs/types@3.23.0': - resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==} - - '@shikijs/types@4.0.2': - resolution: {integrity: sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==} + '@shikijs/types@4.4.3': + resolution: {integrity: sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g==} engines: {node: '>=20'} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - '@sinclair/typebox@0.34.49': - resolution: {integrity: sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==} - '@smithy/chunked-blob-reader-native@4.2.3': resolution: {integrity: sha512-jA5k5Udn7Y5717L86h4EIv06wIr3xn8GM1qHRi/Nf31annXcXHJjBKvgztnbn2TxH3xWrPBfgwHsOwZf0UmQWw==} engines: {node: '>=18.0.0'} @@ -10035,6 +10596,12 @@ packages: '@types/react-dom': optional: true + '@testing-library/user-event@14.6.3': + resolution: {integrity: sha512-6dBq67jT8lE+JTE8Exm02Kt6ze43hz1jdiSpSJwtTZiT1xQQ6b7nZYTTQ9njdArdU8XklOwaDp/AbT/eYSKF4g==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + '@tiptap/core@3.29.2': resolution: {integrity: sha512-oKUkiPUB7noilVYxI9lNzUD4rX17sHub+PYjMfHMWHG9A3nvIy+FdePIVIIhThKWF7ijhr3eIqHY51Bn+GAFtw==} peerDependencies: @@ -10135,30 +10702,96 @@ packages: '@types/d3-array@3.2.2': resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} + '@types/d3-axis@3.0.6': + resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} + + '@types/d3-brush@3.0.6': + resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} + + '@types/d3-chord@3.0.6': + resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} + '@types/d3-color@3.1.3': resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + '@types/d3-contour@3.0.6': + resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} + + '@types/d3-delaunay@6.0.4': + resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} + + '@types/d3-dispatch@3.0.7': + resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==} + + '@types/d3-drag@3.0.7': + resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} + + '@types/d3-dsv@3.0.7': + resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} + '@types/d3-ease@3.0.2': resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + '@types/d3-fetch@3.0.7': + resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} + + '@types/d3-force@3.0.10': + resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} + + '@types/d3-format@3.0.4': + resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} + + '@types/d3-geo@3.1.0': + resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==} + + '@types/d3-hierarchy@3.1.7': + resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} + '@types/d3-interpolate@3.0.4': resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} '@types/d3-path@3.1.1': resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} + '@types/d3-polygon@3.0.2': + resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} + + '@types/d3-quadtree@3.0.6': + resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} + + '@types/d3-random@3.0.4': + resolution: {integrity: sha512-UHYId5WTCx4L4YNel7NU00XUXXgvgpgZOvp10PuvsQENjMDXhh2RyFc0KBjO7B45ne4Ha1yVH7ii0vnzKkuzWA==} + + '@types/d3-scale-chromatic@3.1.0': + resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} + '@types/d3-scale@4.0.9': resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} + '@types/d3-selection@3.0.11': + resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} + '@types/d3-shape@3.1.8': resolution: {integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==} + '@types/d3-time-format@4.0.3': + resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} + '@types/d3-time@3.0.4': resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} '@types/d3-timer@3.0.2': resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + '@types/d3-transition@3.0.9': + resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} + + '@types/d3-zoom@3.0.8': + resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} + + '@types/d3@7.4.3': + resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} + '@types/debug@4.1.13': resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} @@ -10180,23 +10813,11 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} - '@types/jest-image-snapshot@6.4.1': - resolution: {integrity: sha512-pj3Sdc7Cx5mMLUttPprazSDQCur2cr512Dm38e9aAHI55LDxEhqdyqzK9myC4EmEy7sPAF2nGJ8zifX4qso7sQ==} - - '@types/jest@30.0.0': - resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==} + '@types/hast@3.0.5': + resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} '@types/jsdom@21.1.7': resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==} @@ -10210,6 +10831,9 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/katex@0.16.8': + resolution: {integrity: sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==} + '@types/lodash.foreach@4.5.9': resolution: {integrity: sha512-vmq0p/FK66PsALXRmK/qsnlLlCpnudvozWYrxJImHujHhXMADdeoPEY10zwmu26437w85wCvdxUqpFi+ALtkiQ==} @@ -10237,12 +10861,6 @@ packages: '@types/mysql@2.15.27': resolution: {integrity: sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==} - '@types/node@20.19.39': - resolution: {integrity: sha512-orrrD74MBUyK8jOAD/r0+lfa1I2MO6I+vAkmAWzMYbCcgrN4lCrmK52gRFQq/JRxfYPfonkr4b0jcY7Olqdqbw==} - - '@types/node@22.13.13': - resolution: {integrity: sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==} - '@types/node@25.6.0': resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} @@ -10261,9 +10879,6 @@ packages: '@types/pg@8.20.0': resolution: {integrity: sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==} - '@types/pixelmatch@5.2.6': - resolution: {integrity: sha512-wC83uexE5KGuUODn6zkm9gMzTwdY5L0chiK+VrKcDfEjzxh1uadlWTvOmAbCpnM9zx/Ww3f8uKlYQVnO/TrqVg==} - '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} @@ -10283,9 +10898,6 @@ packages: '@types/retry@0.12.2': resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/statuses@2.0.6': resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} @@ -10295,6 +10907,9 @@ packages: '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -10310,72 +10925,139 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@17.0.35': - resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} + '@typescript/typescript-aix-ppc64@7.0.2': + resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [aix] - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260615.1': - resolution: {integrity: sha512-EHrtoVGEEhIhsnGe+b8w0FoM9JfIw5SkoPwO8ifaU0PrYm2UbyPbj2I2hOTxtk458t0irvGz2+8cshylBRbKng==} + '@typescript/typescript-darwin-arm64@7.0.2': + resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==} engines: {node: '>=16.20.0'} cpu: [arm64] os: [darwin] - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260615.1': - resolution: {integrity: sha512-BcDA56hkk6mrUpysaOVvrdACoX5d2SF1JTwHMoNjT1KysBicExS2wlH0eN0L01iDeqtB73XHl7A4zrKFmKzrBg==} + '@typescript/typescript-darwin-x64@7.0.2': + resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==} engines: {node: '>=16.20.0'} cpu: [x64] os: [darwin] - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260615.1': - resolution: {integrity: sha512-TDAlBpyYCF7Z+ELTH+1tabDE6W3shl+H+Z+nmzaQio1I8pFvbwt2iLlE0Rc9CpRdIeaqr0ppMEgXHoeV3fZFWA==} + '@typescript/typescript-freebsd-arm64@7.0.2': + resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [freebsd] + + '@typescript/typescript-freebsd-x64@7.0.2': + resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [freebsd] + + '@typescript/typescript-linux-arm64@7.0.2': + resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==} engines: {node: '>=16.20.0'} cpu: [arm64] os: [linux] - '@typescript/native-preview-linux-arm@7.0.0-dev.20260615.1': - resolution: {integrity: sha512-YRXRS/7ZqrDKXBJhFQcZiOdnHRuRbWoL/QkggpoGfhIuSAh4HvTU0WEUnPM+jRnH2kUMfsSgd8EAnPvmuP7/VA==} + '@typescript/typescript-linux-arm@7.0.2': + resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==} engines: {node: '>=16.20.0'} cpu: [arm] os: [linux] - '@typescript/native-preview-linux-x64@7.0.0-dev.20260615.1': - resolution: {integrity: sha512-/QDmRWt6abB7fw3yMchjlyDXej/7Dr8mYG4wvGGf6c1hc5Il5UpDQWNHejatdeKvAu+sszz8JhTuL8et47fTTg==} + '@typescript/typescript-linux-loong64@7.0.2': + resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==} engines: {node: '>=16.20.0'} - cpu: [x64] + cpu: [loong64] os: [linux] - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260615.1': - resolution: {integrity: sha512-WTJOLoe2rxT0W1i8ndWk2MKrakxRFNki537JZxvKAmSTbyOZznHlW3O3dbryUtTBYA716DDqS3ci24kuIfvBdg==} + '@typescript/typescript-linux-mips64el@7.0.2': + resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==} engines: {node: '>=16.20.0'} - cpu: [arm64] - os: [win32] + cpu: [mips64el] + os: [linux] - '@typescript/native-preview-win32-x64@7.0.0-dev.20260615.1': - resolution: {integrity: sha512-4cSCpXG7um18nwmLdU/SjoTv3OcO38/ufTiy1oWVccgGHLJqppiOP9/o+ElKIWhvrp78IaGy8+h3YqEjQ4/pcQ==} + '@typescript/typescript-linux-ppc64@7.0.2': + resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==} engines: {node: '>=16.20.0'} - cpu: [x64] - os: [win32] + cpu: [ppc64] + os: [linux] - '@typescript/native-preview@7.0.0-dev.20260615.1': - resolution: {integrity: sha512-JJ8X1l7H1GrnseK1k30qfQqB8Pz6jw3IALZVIj5oXQeRbUCe0Wx3ljkJEmOpunogdhEfA8IlOggskbUjVsXKBQ==} + '@typescript/typescript-linux-riscv64@7.0.2': + resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==} engines: {node: '>=16.20.0'} - hasBin: true + cpu: [riscv64] + os: [linux] - '@typescript/vfs@1.6.4': - resolution: {integrity: sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ==} - peerDependencies: - typescript: '*' + '@typescript/typescript-linux-s390x@7.0.2': + resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==} + engines: {node: '>=16.20.0'} + cpu: [s390x] + os: [linux] - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - deprecated: Potential CWE-502 - Update to 1.3.1 or higher + '@typescript/typescript-linux-x64@7.0.2': + resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [linux] - '@uppy/companion-client@3.8.2': - resolution: {integrity: sha512-WLjZ0Y6Fe7lzwU1YPvvQ/YqooejcgIZkT2TC39xr+QQ7Y1FwJECsyUdlKwgi1ee8TNpjoCrj3Q1Hjel/+p0VhA==} - peerDependencies: - '@uppy/core': ^3.13.1 + '@typescript/typescript-netbsd-arm64@7.0.2': + resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [netbsd] + + '@typescript/typescript-netbsd-x64@7.0.2': + resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [netbsd] + + '@typescript/typescript-openbsd-arm64@7.0.2': + resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [openbsd] + + '@typescript/typescript-openbsd-x64@7.0.2': + resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [openbsd] + + '@typescript/typescript-sunos-x64@7.0.2': + resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [sunos] + + '@typescript/typescript-win32-arm64@7.0.2': + resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [win32] + + '@typescript/typescript-win32-x64@7.0.2': + resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [win32] + + '@typescript/vfs@1.6.4': + resolution: {integrity: sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ==} + peerDependencies: + typescript: '*' + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + deprecated: Potential CWE-502 - Update to 1.3.1 or higher + + '@uppy/companion-client@3.8.2': + resolution: {integrity: sha512-WLjZ0Y6Fe7lzwU1YPvvQ/YqooejcgIZkT2TC39xr+QQ7Y1FwJECsyUdlKwgi1ee8TNpjoCrj3Q1Hjel/+p0VhA==} + peerDependencies: + '@uppy/core': ^3.13.1 '@uppy/core@3.13.1': resolution: {integrity: sha512-iQGAUO4ziQRpfv7kix6tO6JOWqjI0K4vt8AynvHWzDPZxYSba3zd6RojGNPsYWSR7Xv+dRXYx+GU8oTiK1FRUA==} @@ -10468,6 +11150,9 @@ packages: peerDependencies: '@uppy/core': ^3.13.0 + '@upsetjs/venn.js@2.0.0': + resolution: {integrity: sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==} + '@vercel/analytics@1.6.1': resolution: {integrity: sha512-oH9He/bEM+6oKlv3chWuOOcp8Y6fo6/PSro8hEkgCW3pu9/OiCXiUpRUogDh3Fs3LH2sosDrx8CxeOLBEE+afg==} peerDependencies: @@ -10524,11 +11209,27 @@ packages: babel-plugin-react-compiler: optional: true - '@vitest/expect@4.1.7': - resolution: {integrity: sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==} + '@vitest/browser-playwright@4.1.10': + resolution: {integrity: sha512-nMoXGEiRpT7m3W7NsbvrM2aKNwiNHZf+zEpUCvMteGjZFvfT96Q9fh7QyB98dvDWXiKvrLxA7bJ1mCOOv+JQPw==} + peerDependencies: + playwright: '*' + vitest: 4.1.10 + + '@vitest/browser-preview@4.1.10': + resolution: {integrity: sha512-14MJrL59ZFkqXLjwfSk6RzTDy5Czf9UG4+8q8L6Gxjs2aPjEce/cVNYV14bXAc2BvMjUNu904+ZEZA1Xc1wtvQ==} + peerDependencies: + vitest: 4.1.10 + + '@vitest/browser@4.1.10': + resolution: {integrity: sha512-UDwuWGwXj646CBx/bQHOaJSX7np0I8JL/UKQYa1e4QrVHH8VdWtx8eaOuf8sy0ShwDgR6NjJAsp5eF6vjF6qng==} + peerDependencies: + vitest: 4.1.10 + + '@vitest/expect@4.1.10': + resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==} - '@vitest/mocker@4.1.7': - resolution: {integrity: sha512-vY7nuamKgfvpA1Koa3oYIw/k7D6kZnpGyNMZW8loow2bsBYla1TFdqTaXncWdRn4pgwNs+90RhnXhJScDwQeJA==} + '@vitest/mocker@4.1.10': + resolution: {integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -10538,41 +11239,39 @@ packages: vite: optional: true + '@vitest/pretty-format@4.1.10': + resolution: {integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==} + '@vitest/pretty-format@4.1.5': resolution: {integrity: sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==} - '@vitest/pretty-format@4.1.7': - resolution: {integrity: sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw==} + '@vitest/runner@4.1.10': + resolution: {integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==} - '@vitest/runner@4.1.7': - resolution: {integrity: sha512-BapjmAQ2aI78WdMEfeUWivnfVzB+VPGwWRQcJE0OUq7qEeEcBsCSf+0T5iREBNE5nBb4wA5Ya0W6IA+sghdEFw==} + '@vitest/snapshot@4.1.10': + resolution: {integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==} - '@vitest/snapshot@4.1.7': - resolution: {integrity: sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw==} - - '@vitest/spy@4.1.7': - resolution: {integrity: sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q==} + '@vitest/spy@4.1.10': + resolution: {integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==} '@vitest/ui@4.1.5': resolution: {integrity: sha512-3Z9HNFiV0IF1fk0JPiK+7kE1GcaIPefQQIBYur6PM5yFIq6agys3uqP/0t966e1wXfmjbRCHDe7qW236Xjwnag==} peerDependencies: - vitest: 4.1.7 + vitest: 4.1.10 + + '@vitest/utils@4.1.10': + resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} '@vitest/utils@4.1.5': resolution: {integrity: sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==} - '@vitest/utils@4.1.7': - resolution: {integrity: sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw==} - - '@voidzero-dev/vite-plus-core@0.1.24': - resolution: {integrity: sha512-iXPGBABnQnrDMx89H6MOCGcTZp+QW+3rY4YMVKdE6ydchSvPk2O3MI2vgaRVfOtWJ2IjnxSnf1n2yjP67ZBRFQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@voidzero-dev/vite-plus-core@0.2.9': + resolution: {integrity: sha512-dWqScAAwa8h/i9jCiGAMs7YarzQWInHZ5gCJNbQkHXA6Zp6A2T2anN9YMFVPpb7CwVFwkI2iPF5yl/DXtq+zUA==} + engines: {node: ^20.19.0 || ^22.18.0 || >=24.11.0} peerDependencies: '@arethetypeswrong/core': ^0.18.1 - '@tsdown/css': 0.22.1 - '@tsdown/exe': 0.22.1 - '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.1.18 + '@types/node': ^25.6.0 + '@vitejs/devtools': ^0.4.0 esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 @@ -10583,17 +11282,13 @@ packages: sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 - typescript: ^5.0.0 || ^6.0.0 + typescript: ^5.0.0 || ^6.0.0 || ^7.0.0 unplugin-unused: ^0.5.0 unrun: '*' yaml: ^2.4.2 peerDependenciesMeta: '@arethetypeswrong/core': optional: true - '@tsdown/css': - optional: true - '@tsdown/exe': - optional: true '@types/node': optional: true '@vitejs/devtools': @@ -10627,86 +11322,55 @@ packages: yaml: optional: true - '@voidzero-dev/vite-plus-darwin-arm64@0.1.24': - resolution: {integrity: sha512-Hpo9W9piSFlEsJzGkwzfDXhJGrnYByxHXF7NVQZ7g+SLOprddtlfTeM8t+gq9dxcuq0RzM8ddMAhDQP/K3fZQA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@voidzero-dev/vite-plus-darwin-arm64@0.2.9': + resolution: {integrity: sha512-/qJHqMfyy/LiCJk4UYZfFW6Comsfm8zDuy4P8UFWnFqRjmefYvZbMK4ThYNM87tKNWYWjsnClzssjJOmDTAc8w==} + engines: {node: '>=20.0.0'} cpu: [arm64] os: [darwin] - '@voidzero-dev/vite-plus-darwin-x64@0.1.24': - resolution: {integrity: sha512-SwnnnZrEFBiU5iKlh/CZAVwn0RFt/Udrvt3kFLtdRxMtN5bKaqTFVA2H8Y/FPCWp1QX9bs4V9ZIAeXAk06zLkw==} - engines: {node: ^20.19.0 || >=22.12.0} + '@voidzero-dev/vite-plus-darwin-x64@0.2.9': + resolution: {integrity: sha512-3MGnNeazgYAqQTaC7JIbZyrTHmxSXTWFr9G1yAdeItKasB1R8HKIkCS1Qnr49Ge4S/cyOODivdbcpqFkrT93ng==} + engines: {node: '>=20.0.0'} cpu: [x64] os: [darwin] - '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.24': - resolution: {integrity: sha512-ImM3eqDki4DpRuHjW6dEh4St8zvbcfOMR7KQZJX42ArriCLQ/QdaYhDRRbcDi27XsOBqRxm2eqUUEymPrYIHpA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@voidzero-dev/vite-plus-linux-arm64-gnu@0.2.9': + resolution: {integrity: sha512-6LmukER8qD4UBIRqMNv4Ilq7CxfRhngLUXlMv8vbTupeLRWPJSKvKEHyRxCwr6JP57Gxfr8KrX1ye42WzcZF0g==} + engines: {node: '>=20.0.0'} cpu: [arm64] os: [linux] libc: [glibc] - '@voidzero-dev/vite-plus-linux-arm64-musl@0.1.24': - resolution: {integrity: sha512-gj4mzbob/ls8Zs7iTuF9Gr0EFFF7tdpDiPxDPBkH8tJP5OkHABlzWUwJhU+9xxcUbTaXqpHDw68Mil7jm5dpMg==} - engines: {node: ^20.19.0 || >=22.12.0} + '@voidzero-dev/vite-plus-linux-arm64-musl@0.2.9': + resolution: {integrity: sha512-cBs626GWkyJlwKP0nsdHlMWpuTl9xOWRxAUoqtxXPtw80bVy4WM5eNS4SXPC5pX10jR7DRIkRpzNAsy7fv8Faw==} + engines: {node: '>=20.0.0'} cpu: [arm64] os: [linux] libc: [musl] - '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.24': - resolution: {integrity: sha512-x7IYK7lI+WuF1n3jSzEYU6FgJxPX/R0rDmTTsOutooGGCU7uShZvfZqIoiTXK0eFnJU5ij5BfBgenenUfsaT/A==} - engines: {node: ^20.19.0 || >=22.12.0} + '@voidzero-dev/vite-plus-linux-x64-gnu@0.2.9': + resolution: {integrity: sha512-2Iy8x4PCPMNzXeu3pREevlggoeK8PwtdUiCpoSybAZBtR/aqMxsJREyt/eKv45F8lsiNlA8PbIWEvPxLSgzFLQ==} + engines: {node: '>=20.0.0'} cpu: [x64] os: [linux] libc: [glibc] - '@voidzero-dev/vite-plus-linux-x64-musl@0.1.24': - resolution: {integrity: sha512-JCy2w0eSVUlWQlggK5T47MnL+j0o4EY7hLskINVI8gi+aixQF4xnYBDobz0lbxkqz3/IfiLyXUx6TcU3thcsGQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@voidzero-dev/vite-plus-linux-x64-musl@0.2.9': + resolution: {integrity: sha512-zuGx+eRotWPd9cmh1X9AfsC2tN/Ad9Hk6LAzlxoKJUjEkTsY3WjVJ6Da0z48SAUFuenI0JkdqXnMCrePtGvWHg==} + engines: {node: '>=20.0.0'} cpu: [x64] os: [linux] libc: [musl] - '@voidzero-dev/vite-plus-test@0.1.24': - resolution: {integrity: sha512-9NiG6UadG0iOaPL1AMsO5sDKkx6MADHw4/mMOmHWZUhhUwqzfVtnnptMK37vD71e6KyR7yAscx19FrtOWWtjvA==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/coverage-istanbul': 4.1.8 - '@vitest/coverage-v8': 4.1.8 - '@vitest/ui': 4.1.8 - happy-dom: '*' - jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/coverage-istanbul': - optional: true - '@vitest/coverage-v8': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - - '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.24': - resolution: {integrity: sha512-G+/lhLKVjyn3FmgXX8jeWgq7RcE5O1kdR7QyFayQOdlMX/ZRkvUwQD7bFaqhKzgJM6Oj3a1FH3HQPYk5QOYuCQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@voidzero-dev/vite-plus-win32-arm64-msvc@0.2.9': + resolution: {integrity: sha512-kaKb5Q8ReYTBfvLgUhdpLJG3aoNF8HOVJpf8qBm+THsd4WRrkRwsBHp2ITsU8oXl2gnDjFGhPDaURegd/z6Wxw==} + engines: {node: '>=20.0.0'} cpu: [arm64] os: [win32] - '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.24': - resolution: {integrity: sha512-b0e5XohEV1w/RdzAtv8/Hm6tvHPXouPtBNsljjW/lDJZq3NCLND5s6lqe8H4IenrgmKSoqakHWtlqJqM36cFbw==} - engines: {node: ^20.19.0 || >=22.12.0} + '@voidzero-dev/vite-plus-win32-x64-msvc@0.2.9': + resolution: {integrity: sha512-/fEk3gbQTJknCiYM/GTL/L++Azsav8rCAjmtKrjmCbqEif5IMzqTfvM68n+PiLB3JVoQJGF/mg2niODr0IE/2w==} + engines: {node: '>=20.0.0'} cpu: [x64] os: [win32] @@ -10755,6 +11419,11 @@ packages: '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + '@xmldom/xmldom@0.9.10': + resolution: {integrity: sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw==} + engines: {node: '>=14.6'} + deprecated: this version has critical issues, please update to the latest version + '@xtuc/ieee754@1.2.0': resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -10800,6 +11469,131 @@ packages: resolution: {integrity: sha512-5IBr9puk4BL0ke09Yqa0uFNIpCreUocCPxHMQkF1uJvQfwDx60kRm0sYptHLTUcnNtxiCG3wqkogzQbQFszXgQ==} engines: {node: '>=22.0.0', npm: '>=8.0.0'} + '@yuku-codegen/binding-darwin-arm64@0.5.48': + resolution: {integrity: sha512-yo96Oef12WzqnphInfz/eexVse3+kWgfGS5g2S3rFS3dcGn1ENW9xLFDZUP9rh+yP76DOq38wBoFi1+I9+6qBg==} + cpu: [arm64] + os: [darwin] + + '@yuku-codegen/binding-darwin-x64@0.5.48': + resolution: {integrity: sha512-aRCTw0EZC4bVosmw//0OMYP5tGWFE0Cu5yUBFkUbhXx/iBzvORcJ2xPNlOp/vtCCo9Ys4vp8b0DigJV6uOVb2g==} + cpu: [x64] + os: [darwin] + + '@yuku-codegen/binding-freebsd-x64@0.5.48': + resolution: {integrity: sha512-CA0AQAEApDkbw51PdLWMtKPJ41/7rvXsS3SJs+phG7fHJI+MuFzWuLbkucZfZoEOiDscmcsfYIdgL8BsfuyKKQ==} + cpu: [x64] + os: [freebsd] + + '@yuku-codegen/binding-linux-arm-gnu@0.5.48': + resolution: {integrity: sha512-DuSQlk8bH4gpmW3/00P0NLagAcMv8jOxjT40cQmxKRkktr+SUOALCfkT89tdDq3qtY95NR2GXOZ7AjNh7KKqCw==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@yuku-codegen/binding-linux-arm-musl@0.5.48': + resolution: {integrity: sha512-bxj4Ee+wlaJcWJwft2ReJXWw5sfl1qavDz6+dlRdU1xfTEtjPSNiAWhiCHnJR0R4Ygd57DnzSQmAVGvFv6RcGw==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@yuku-codegen/binding-linux-arm64-gnu@0.5.48': + resolution: {integrity: sha512-mk5JVWh+0JOe5ue8k17kbYX8uGBoKt3ZqoCyxNh4nYAAcX7+X1tFUiU7jbjctu4vHeejCBFSTdQ021+V31cUCQ==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@yuku-codegen/binding-linux-arm64-musl@0.5.48': + resolution: {integrity: sha512-4q3vkrNghbllyxOm2KesFLxCPKHF7r3JyQ7BWZccY1j2Y05yKoIFhoWCqIuQ2W/dpte9RI0+OVfwyxnrKg6fkA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@yuku-codegen/binding-linux-x64-gnu@0.5.48': + resolution: {integrity: sha512-csd4M1EVrGaohM8acM6gq1zpUA/Rwe2ulUMBKUcwQXm/k6n7cq1A++qdew78SOVb4do3JH1WE+WFwoGQAcWc1w==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@yuku-codegen/binding-linux-x64-musl@0.5.48': + resolution: {integrity: sha512-KcDuEOT+GFoVKdvAWOv1v9iYjwnmvMZlO+j1Rw+5PYdeFLGWGzv/DD11y4SAAdwXIFcil4T0hibeIaF82WStMg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@yuku-codegen/binding-win32-arm64@0.5.48': + resolution: {integrity: sha512-HI8qNrI8dWM5BuqIMKsqornRvTNFrE6sm5zToIJ9YIa9zt5+29P7fJ7Nr39EVf6dAWSb6q7JSpScJnRsQ+FgZA==} + cpu: [arm64] + os: [win32] + + '@yuku-codegen/binding-win32-x64@0.5.48': + resolution: {integrity: sha512-X5YWJLO6EfBZpeBqO0AYESnUizbpFDWArcvVD61w0PEWQ3CaFRLnbQXs+kpM4ZZfGMfIE22zfA08QSY67q7TNQ==} + cpu: [x64] + os: [win32] + + '@yuku-parser/binding-darwin-arm64@0.5.48': + resolution: {integrity: sha512-If8mb7HH3vqghJ2NNZ8SuHfhsnjVzOxJpB8xcNOXS5WjYrs2mUhHIh5KOIvK13hDOzh0htGeGK3A6MsiEqE7HQ==} + cpu: [arm64] + os: [darwin] + + '@yuku-parser/binding-darwin-x64@0.5.48': + resolution: {integrity: sha512-EimvPXfspzxf1K11eB6tCW5oiQEXB8g84T2wP1TwzQagdDKo33bkmmVF0B32vTIpXnk/Ifu5IB61izZ1MylljA==} + cpu: [x64] + os: [darwin] + + '@yuku-parser/binding-freebsd-x64@0.5.48': + resolution: {integrity: sha512-0GcUMrumLHheThY9r5Tp46gaZYzn0irWPS1Zba6WY+vVQfhUtzGiWgXxI6tuXX0N32kEaaEVRpkKctvo6Kx3aQ==} + cpu: [x64] + os: [freebsd] + + '@yuku-parser/binding-linux-arm-gnu@0.5.48': + resolution: {integrity: sha512-8S5T5wjCC73dmmpQeZ49aYsSunIUM3D4Fc6rdK96c+Ayg/p3FmeSPF3xuLZHejcTmqJIIvnbfPlUF+rB6DITjQ==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@yuku-parser/binding-linux-arm-musl@0.5.48': + resolution: {integrity: sha512-tTmbxvnUHcK2/crS9547vk2SMmsajH1yqJ8ltXhIuHJgqR1v+d9n9KT+kSayo/5CS76LegeYxhMFjEivBH2hFA==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@yuku-parser/binding-linux-arm64-gnu@0.5.48': + resolution: {integrity: sha512-KGYCBMqI2zfwyhgq5tpPVNe7jpUeYTBm8DhjdS+zqWNumde/PEC170QE5RHxcOAlsirIDeIUk0jqx+r/axoFSw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@yuku-parser/binding-linux-arm64-musl@0.5.48': + resolution: {integrity: sha512-2wTSMsCSXLTc2lZUjMAuU5X4cje55u205WJqfV5NWNF6j9pW/tXyxr15dJeekj8ziLqBXzIsj4DbRh4sY/WcjA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@yuku-parser/binding-linux-x64-gnu@0.5.48': + resolution: {integrity: sha512-d/6v9UnGglVu1WC2JQyv/5aWSi5fXZeGSlidCfmHp4+N65N1GDKUnFtys5MK5eAPeAjTgSHGGtOc/yCcKTlv3A==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@yuku-parser/binding-linux-x64-musl@0.5.48': + resolution: {integrity: sha512-gX19gw6u4ApPy7SYMPKfFlEkrtj6WlORvrTKK3sBQqjyV+8+mUAkQgxXNjHw4RnOiAmVYg7TOlZcg8d+Qqod9A==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@yuku-parser/binding-win32-arm64@0.5.48': + resolution: {integrity: sha512-w6cQQLbqj3Jcom5Q7ifm103NUOQ9d+Cb4VU5lkrZDjMnwVJ9Hzzg1vCQR7miJuF44vhCXldbme5UryE3giEKlA==} + cpu: [arm64] + os: [win32] + + '@yuku-parser/binding-win32-x64@0.5.48': + resolution: {integrity: sha512-4gO0HmG7fzFxrw1rs0dUdnnaY9YgennjETqDWrTSp7x9fmTUOAoN4VsMfP7YyliQeG1WJJHc55O+rOhmsLppow==} + cpu: [x64] + os: [win32] + + '@yuku-toolchain/types@0.5.43': + resolution: {integrity: sha512-kSpvPntnXw5+lYjO71ffBEnQ5ycQ74KGIYknh0TS4xeyCuBkOqxyJumxZkMhLBBUCLjDAbx2+Icnr3Zh4ftjpQ==} + '@zeit/schemas@2.36.0': resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==} @@ -10807,9 +11601,6 @@ packages: resolution: {integrity: sha512-RQ4h9F6DOiHxpdocUDrOl6xBM+yOtz+LkUol47AVWcfebGBDpZ7w7Xvz9PS24JgXvLGiXXzSAfdCdVy1tPlaFA==} engines: {bun: '>=0.7.0', deno: '>=1.0.0', node: '>=18.0.0'} - abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - abs-svg-path@0.1.1: resolution: {integrity: sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==} @@ -10852,10 +11643,6 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - ai@6.0.5: resolution: {integrity: sha512-CKL3dDHedWskC6EY67LrULonZBU9vL+Bwa+xQEcprBhJfxpogntG3utjiAkYuy5ZQatyWk+SmWG8HLvcnhvbRg==} engines: {node: '>=18'} @@ -10919,17 +11706,9 @@ packages: resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} engines: {node: '>=14'} - aproba@2.1.0: - resolution: {integrity: sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==} - arch@2.2.0: resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - are-we-there-yet@2.0.0: - resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} - engines: {node: '>=10'} - deprecated: This package is no longer supported. - arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -11061,7 +11840,7 @@ packages: react-dom: ^18.0.0 || ^19.0.0 solid-js: ^1.0.0 svelte: ^4.0.0 || ^5.0.0 - vitest: 4.1.7 + vitest: 4.1.10 vue: ^3.0.0 peerDependenciesMeta: '@lynx-js/react': @@ -11216,10 +11995,6 @@ packages: caniuse-lite@1.0.30001787: resolution: {integrity: sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg==} - canvas@2.11.2: - resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} - engines: {node: '>=6'} - canvas@3.1.0: resolution: {integrity: sha512-tTj3CqqukVJ9NgSahykNwtGda7V33VLObwrHfzT0vqJXu7J4d4C/7kQQW3fOEGDfZZoILPut5H00gOjyttPGyg==} engines: {node: ^18.12.0 || >= 20.9.0} @@ -11274,18 +12049,10 @@ packages: chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} - ci-info@4.4.0: - resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} - engines: {node: '>=8'} - citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} @@ -11352,12 +12119,13 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + color-name@2.1.0: + resolution: {integrity: sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==} + engines: {node: '>=12.20'} - color-support@1.1.3: - resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true + color-string@2.1.4: + resolution: {integrity: sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==} + engines: {node: '>=18'} combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} @@ -11373,6 +12141,14 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} @@ -11406,9 +12182,6 @@ packages: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} - console-control-strings@1.1.0: - resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - content-disposition@0.5.2: resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} engines: {node: '>= 0.6'} @@ -11437,6 +12210,12 @@ packages: resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} engines: {node: '>= 0.10'} + cose-base@1.0.3: + resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} + + cose-base@2.2.0: + resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} @@ -11451,10 +12230,6 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - crypto-js@4.2.0: - resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} - deprecated: Active development of CryptoJS has been discontinued. This library is no longer maintained. - css-tree@3.2.1: resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} @@ -11464,41 +12239,132 @@ packages: engines: {node: '>=4'} hasBin: true - cssstyle@4.6.0: - resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==} - engines: {node: '>=18'} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + cytoscape-cose-bilkent@4.1.0: + resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape-fcose@2.2.0: + resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape@3.34.0: + resolution: {integrity: sha512-62rNSrioXw93uliKFBwjukeQyeWwH2PqDrTac31r2P6464u3AUvTk0xS4LVvT251g7IgkFunrI48ZEZGjywSOg==} + engines: {node: '>=0.10'} + + d3-array@2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + d3-array@3.2.4: resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} engines: {node: '>=12'} + d3-axis@3.0.0: + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} + engines: {node: '>=12'} + + d3-brush@3.0.0: + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} + engines: {node: '>=12'} + + d3-chord@3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} + engines: {node: '>=12'} + d3-color@3.1.0: resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} engines: {node: '>=12'} + d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} + engines: {node: '>=12'} + + d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} + engines: {node: '>=12'} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + + d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true + d3-ease@3.0.1: resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} engines: {node: '>=12'} + d3-fetch@3.0.1: + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} + engines: {node: '>=12'} + + d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + d3-format@3.1.2: resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} engines: {node: '>=12'} + d3-geo@3.1.1: + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + engines: {node: '>=12'} + + d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + d3-interpolate@3.0.1: resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} engines: {node: '>=12'} + d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + d3-path@3.1.0: resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} engines: {node: '>=12'} + d3-polygon@3.0.1: + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} + engines: {node: '>=12'} + + d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + + d3-random@3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} + engines: {node: '>=12'} + + d3-sankey@0.12.3: + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + + d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + engines: {node: '>=12'} + d3-scale@4.0.2: resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} engines: {node: '>=12'} + d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + + d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + d3-shape@3.2.0: resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} engines: {node: '>=12'} @@ -11515,9 +12381,22 @@ packages: resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} engines: {node: '>=12'} - data-urls@5.0.0: - resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} - engines: {node: '>=18'} + d3-transition@3.0.1: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + + d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + + d3@7.9.0: + resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} + engines: {node: '>=12'} + + dagre-d3-es@7.0.14: + resolution: {integrity: sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==} data-urls@7.0.0: resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} @@ -11541,6 +12420,9 @@ packages: date-fns@4.1.0: resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + dayjs@1.11.21: + resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==} + debounce-fn@6.0.0: resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==} engines: {node: '>=18'} @@ -11583,10 +12465,6 @@ packages: decode-named-character-reference@1.3.0: resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} - decompress-response@4.2.1: - resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==} - engines: {node: '>=8'} - decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -11630,13 +12508,13 @@ packages: defu@6.1.6: resolution: {integrity: sha512-f8mefEW4WIVg4LckePx3mALjQSPQgFlg9U8yaPdlsbdYcHQyj9n2zL2LJEA52smeYxOvmd/nB7TpMtHGMTHcug==} + delaunator@5.1.0: + resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -11685,6 +12563,9 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} + dompurify@3.4.12: + resolution: {integrity: sha512-zQvGet8Z2sWbQhCmfFz/T5QWH2oBmjnqK3qvOjaqaNLrLEF912WamU+ohnTp0TCep/MFVHpdJuCZEdFOdTnEFg==} + domutils@3.2.2: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} @@ -11779,9 +12660,6 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - es-module-lexer@2.1.0: resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} @@ -11824,10 +12702,6 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -11896,6 +12770,10 @@ packages: jiti: optional: true + esm@3.2.25: + resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} + engines: {node: '>=6'} + espree@10.4.0: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -11981,10 +12859,6 @@ packages: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} - expect@30.3.0: - resolution: {integrity: sha512-1zQrciTiQfRdo7qJM1uG4navm8DayFa2TgCSRlzUyNkhcJ6XUZF3hjnpkyr3VhAqPH7i/9GkG7Tv5abz6fqz0Q==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} @@ -12106,13 +12980,6 @@ packages: fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -12218,7 +13085,7 @@ packages: fumadocs-core: ^16.7.0 fumadocs-ui: ^16.7.0 react: '*' - shiki: '*' + shiki: ^4.4.3 typescript: '*' peerDependenciesMeta: '@types/estree': @@ -12244,11 +13111,6 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - gauge@3.0.2: - resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} - engines: {node: '>=10'} - deprecated: This package is no longer supported. - generator-function@2.0.1: resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} engines: {node: '>= 0.4'} @@ -12280,10 +13142,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-stdin@5.0.1: - resolution: {integrity: sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==} - engines: {node: '>=0.12.0'} - get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -12324,10 +13182,6 @@ packages: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Old versions of glob 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 - globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -12340,9 +13194,6 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - glur@1.1.2: - resolution: {integrity: sha512-l+8esYHTKOx2G/Aao4lEQ0bnHWg4fWtJbVoZZT9Knxi01pB8C80BR85nONLFwkkQoFRCmXY+BUcGZN3yZ2QsRA==} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -12358,6 +13209,9 @@ packages: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} + hachure-fill@0.5.2: + resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} + has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} @@ -12381,9 +13235,6 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - has-unicode@2.0.1: - resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} @@ -12422,10 +13273,6 @@ packages: hsl-to-rgb-for-reals@1.1.1: resolution: {integrity: sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==} - html-encoding-sniffer@4.0.0: - resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} - engines: {node: '>=18'} - html-encoding-sniffer@6.0.0: resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -12446,18 +13293,10 @@ packages: htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -12507,14 +13346,13 @@ packages: resolution: {integrity: sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg==} engines: {node: '>=18'} + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -12534,6 +13372,9 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} + internmap@1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + internmap@2.0.3: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} @@ -12551,9 +13392,6 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-arrayish@0.3.4: - resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} - is-async-function@2.1.1: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} @@ -12755,39 +13593,6 @@ packages: jay-peg@1.1.1: resolution: {integrity: sha512-D62KEuBxz/ip2gQKOEhk/mx14o7eiFRaU+VNNSP4MOiIkwb/D6B3G1Mfas7C/Fit8EsSV2/IWjZElx/Gs6A4ww==} - jest-diff@30.3.0: - resolution: {integrity: sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-image-snapshot@6.5.2: - resolution: {integrity: sha512-frenWThr5ddnnokcX5N4gwi41hA5TiUOdhv/JoGcJrOaktHjrk4/7XbiHKW52lgKX+vei6QkRlgM7fkYQ15nPg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - jest: '>=20 <31' - peerDependenciesMeta: - jest: - optional: true - - jest-matcher-utils@30.3.0: - resolution: {integrity: sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-message-util@30.3.0: - resolution: {integrity: sha512-Z/j4Bo+4ySJ+JPJN3b2Qbl9hDq3VrXmnjjGEWD/x0BCXeOXPTV1iZYYzl2X8c1MaCOL+ewMyNBcm88sboE6YWw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-mock@30.3.0: - resolution: {integrity: sha512-OTzICK8CpE+t4ndhKrwlIdbM6Pn8j00lvmSmq5ejiO+KxukbLjgOflKWMn3KE34EZdQm5RqTuKj+5RIEniYhog==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-regex-util@30.0.1: - resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-util@30.3.0: - resolution: {integrity: sha512-/jZDa00a3Sz7rdyu55NLrQCIrbyIkbBxareejQI315f/i8HjYN+ZWsDLLpoQSiUIEIyZF/R8fDg3BmB8AtHttg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} @@ -12810,6 +13615,9 @@ packages: js-base64@3.7.8: resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} + js-md5@0.8.3: + resolution: {integrity: sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -12821,15 +13629,6 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - jsdom@25.0.1: - resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==} - engines: {node: '>=18'} - peerDependencies: - canvas: ^2.11.2 - peerDependenciesMeta: - canvas: - optional: true - jsdom@29.0.2: resolution: {integrity: sha512-9VnGEBosc/ZpwyOsJBCQ/3I5p7Q5ngOY14a9bf5btenAORmZfDse1ZEheMiWcJ3h81+Fv7HmJFdS0szo/waF2w==} engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0} @@ -12880,9 +13679,16 @@ packages: jszip@3.10.1: resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + katex@0.16.47: + resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==} + hasBin: true + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + khroma@2.1.0: + resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -12895,6 +13701,12 @@ packages: resolution: {integrity: sha512-r2clcf7HLWvDXaVUEvQymXJY4i3bSOIV3xsL/Upy3ZfSv5HeKsk9tsqbBptLvth5qHEIhxeHTA2jNLyQABkLBA==} engines: {node: '>=20.0.0'} + layout-base@1.0.2: + resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} + + layout-base@2.0.1: + resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + leac@0.6.0: resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} @@ -12962,30 +13774,60 @@ packages: cpu: [arm64] os: [android] + lightningcss-android-arm64@1.33.0: + resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + lightningcss-darwin-arm64@1.32.0: resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] + lightningcss-darwin-arm64@1.33.0: + resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + lightningcss-darwin-x64@1.32.0: resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] + lightningcss-darwin-x64@1.33.0: + resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + lightningcss-freebsd-x64@1.32.0: resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] + lightningcss-freebsd-x64@1.33.0: + resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + lightningcss-linux-arm-gnueabihf@1.32.0: resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + lightningcss-linux-arm64-gnu@1.32.0: resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} engines: {node: '>= 12.0.0'} @@ -12993,6 +13835,13 @@ packages: os: [linux] libc: [glibc] + lightningcss-linux-arm64-gnu@1.33.0: + resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + lightningcss-linux-arm64-musl@1.32.0: resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} @@ -13000,6 +13849,13 @@ packages: os: [linux] libc: [musl] + lightningcss-linux-arm64-musl@1.33.0: + resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + lightningcss-linux-x64-gnu@1.32.0: resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} @@ -13007,6 +13863,13 @@ packages: os: [linux] libc: [glibc] + lightningcss-linux-x64-gnu@1.33.0: + resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + lightningcss-linux-x64-musl@1.32.0: resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} @@ -13014,22 +13877,45 @@ packages: os: [linux] libc: [musl] + lightningcss-linux-x64-musl@1.33.0: + resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + lightningcss-win32-arm64-msvc@1.32.0: resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] + lightningcss-win32-arm64-msvc@1.33.0: + resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + lightningcss-win32-x64-msvc@1.32.0: resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] + lightningcss-win32-x64-msvc@1.33.0: + resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + lightningcss@1.32.0: resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} + lightningcss@1.33.0: + resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} + engines: {node: '>= 12.0.0'} + linebreak@1.1.0: resolution: {integrity: sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==} @@ -13044,6 +13930,9 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} + lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -13112,10 +14001,6 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} @@ -13137,10 +14022,22 @@ packages: engines: {node: '>= 18'} hasBin: true + marked@16.4.2: + resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==} + engines: {node: '>= 20'} + hasBin: true + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + mathjax-full@3.2.2: + resolution: {integrity: sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==} + deprecated: Version 4 replaces this package with the scoped package @mathjax/src + + mathml2omml@0.5.0: + resolution: {integrity: sha512-4eLs37a+TH+CL/M5XZZrlc75SNRJNPiZzIaeSSvH0UFCRaCdSYRHWvrlA7MUbeQks/z4sVhfg+GlcZhVVUHzqg==} + mdast-util-find-and-replace@3.0.2: resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} @@ -13201,6 +14098,12 @@ packages: merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + mermaid@11.16.0: + resolution: {integrity: sha512-Zvm3kbstgdpvIJPPItlL7fppIZ3kibvc1oZIGxdvk9t6UFz6flv+Jw7FtRGKwfcI8OckmH04LqG6LlS6X4B1pA==} + + mhchemparser@4.2.1: + resolution: {integrity: sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==} + micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -13341,10 +14244,6 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - mimic-response@2.1.0: - resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} - engines: {node: '>=8'} - mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} @@ -13366,30 +14265,16 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - minipass@7.1.3: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} + mj-context-menu@0.6.1: + resolution: {integrity: sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==} mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} @@ -13449,14 +14334,16 @@ packages: namespace-emitter@2.0.1: resolution: {integrity: sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==} - nan@2.26.2: - resolution: {integrity: sha512-0tTvBTYkt3tdGw22nrAy50x7gpbGCCFH3AFcyS5WiUu7Eu4vWlri1woE6qHBSfy11vksDqkiwjOnlR7WV8G1Hw==} - nanoid@3.3.12: resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.18: + resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@4.0.2: resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==} engines: {node: ^14 || ^16 || >=18} @@ -13504,8 +14391,8 @@ packages: next-validate-link@1.6.4: resolution: {integrity: sha512-wR/VKyJlaTbUT5k1uujEnk6O616YtWGt52s9FJa3tRCQ2qL2TGFTAklXJ0QdX1NTAEeP6rGFOTtHEDwveFrc2g==} - next@16.2.7: - resolution: {integrity: sha512-eMJxgjRzBaj3olkP4cBamHDXL79A8FC6u1GcsO1D1Tsx8bw/LLXUJCaoajVxtnhD3A1IJqIT8IcRJjgBIPJq4w==} + next@16.3.0: + resolution: {integrity: sha512-NEdGOzH+08eTXMUp9UYkA99Nhi5N6Thrhc1jgFOQgfgnGK/dA2hRwBpXep+exdFQrnwlRf/3Wixyp8lLBUpE2A==} engines: {node: '>=20.9.0'} hasBin: true peerDependencies: @@ -13559,11 +14446,6 @@ packages: resolution: {integrity: sha512-PNDFSJdP+KFgdsG3ZzMXCgquO7I6McjY2vlqILjtJd0hy8wEvtugS9xKRF2NWlPNGxvLCXlTNIae4serI7dinw==} engines: {node: '>=6.0.0'} - nopt@5.0.0: - resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} - engines: {node: '>=6'} - hasBin: true - normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -13583,13 +14465,6 @@ packages: resolution: {integrity: sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - npmlog@5.0.1: - resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} - deprecated: This package is no longer supported. - - nwsapi@2.2.23: - resolution: {integrity: sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==} - nypm@0.6.2: resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} engines: {node: ^14.16.0 || >=16.10.0} @@ -13651,11 +14526,11 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - oniguruma-parser@0.12.1: - resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} + oniguruma-parser@0.12.2: + resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} - oniguruma-to-es@4.3.5: - resolution: {integrity: sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==} + oniguruma-to-es@4.3.6: + resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} open@10.2.0: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} @@ -13683,8 +14558,8 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} - oxfmt@0.52.0: - resolution: {integrity: sha512-nJlYM35F64zTDMecCNhoHNkf+D/eHv7xcjj9XDSj+bFAVtN93m7v8DQMdHd6nDG6Akf/kEYYHmDUBs2Dz27Sug==} + oxfmt@0.62.0: + resolution: {integrity: sha512-vxgGHTmnDU9j4CX7dDBLzxgmHxfda/yPcgJkGCMUSCwRmz+euo/V08xXLNgXTeqAB9Fhf3Pe2nO1RNKLCVgphQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -13696,16 +14571,16 @@ packages: vite-plus: optional: true - oxlint-tsgolint@0.23.0: - resolution: {integrity: sha512-3mBv3CoPbh8dFbzfDGIWa2ytZjn2v+3EX4aKRXjIhsoGFzG8GCjfRirz3rwZf1wYbZzsNLTSgpw8VjQuWdp/jA==} + oxlint-tsgolint@7.0.2001: + resolution: {integrity: sha512-KjK/XLcXr1DSyonKhsuFqJRiuKqcyG9j3LJ8nkOsrLzGvodBPqzHOKauy10asLMDI0sUpvb+1sxlzff3udZvfg==} hasBin: true - oxlint@1.67.0: - resolution: {integrity: sha512-blwwaHPdoH8piQ5/z0KHeoHFR7FZgl12WluKJfu4qFLPkZl6mK04PkLE45Fw1NxfBRSlh40Gu7MkxHUw++ociQ==} + oxlint@1.77.0: + resolution: {integrity: sha512-qnGh8XJHaQ0dprrDXNQZgS0FgjI6v+V3+X8DwmaV++5Aamy6jGKfDdQ1TUvhUxtmKFAbEf4/WeO5QZX+5WSngg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - oxlint-tsgolint: '>=0.22.1' + oxlint-tsgolint: '>=7.0.2001' vite-plus: '*' peerDependenciesMeta: oxlint-tsgolint: @@ -13775,6 +14650,9 @@ packages: path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + path-data-parser@0.1.0: + resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -13783,10 +14661,6 @@ packages: resolution: {integrity: sha512-DwmPWeFn+tq7TiyJ2CxezCAirXjFxvaiD03npak3cRjlP9+OjTmSy1EpIrEbh+l6JgUundniloMLDQ/6VTdhLQ==} engines: {node: '>=14.0.0'} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-is-inside@1.0.2: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} @@ -13818,21 +14692,12 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - path2d@0.2.2: - resolution: {integrity: sha512-+vnG6S4dYcYxZd+CZxzXCNKdELYZSKfohrk98yajCo1PtRoDgCTrrwOvK1GT0UoAdVszagDVllQc0U1vaX4NUQ==} - engines: {node: '>=6'} - pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pdf-to-img@4.5.0: - resolution: {integrity: sha512-GCM2n+aYiupQmyoOmuj/0Q3Tr0hJg9iFVGiOq79y1ePF2cTGzdbPFd3lNlH1IxvqcGgQzwyo7KfNvtmefBxIiQ==} - engines: {node: '>=18'} - hasBin: true - - pdfjs-dist@4.2.67: - resolution: {integrity: sha512-rJmuBDFpD7cqC8WIkQUEClyB4UAH05K4AsyewToMTp2gSy3Rrx8c1ydAVqlJlGv3yZSOrhEERQU/4ScQQFlLHA==} - engines: {node: '>=18'} + pdfjs-dist@4.10.38: + resolution: {integrity: sha512-/Y3fcFrXEAsMjJXeL9J8+ZG9U01LbuWaYypvDW2ycW1jL269L3js3DVBjDJ0Up9Np1uqDXsDrRihHANhZOlwdQ==} + engines: {node: '>=20'} peberminta@0.9.0: resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} @@ -13881,14 +14746,6 @@ packages: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} - pixelmatch@5.3.0: - resolution: {integrity: sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==} - hasBin: true - - pixelmatch@7.2.0: - resolution: {integrity: sha512-xhcb4yHu9sM/G7foGzoLtXYcC0zHEaOXXjRKhGup0fw78Nf2Tkiapv4EQyMzrbcmQPsllAI7DbFY2UT7PlI9Pg==} - hasBin: true - pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} @@ -13902,18 +14759,19 @@ packages: engines: {node: '>=18'} hasBin: true - pngjs@3.4.0: - resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} - engines: {node: '>=4.0.0'} - - pngjs@6.0.0: - resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} - engines: {node: '>=12.13.0'} + png-js@2.0.0: + resolution: {integrity: sha512-GdzJuUMc6ZSpxFJWVxtOH1bzYHym+TOnveqUjb+VJIbZWbZzyiRGFiKhbiielfpYbgMlhHVhsJ0FTazfuRFkMA==} pngjs@7.0.0: resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} engines: {node: '>=14.19.0'} + points-on-curve@0.2.0: + resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} + + points-on-path@0.2.1: + resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -13925,14 +14783,14 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.14: resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.23: + resolution: {integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==} + engines: {node: ^10 || ^12 || >=14} + postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} @@ -13975,10 +14833,6 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - pretty-format@30.3.0: - resolution: {integrity: sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - prismjs@1.30.0: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} engines: {node: '>=6'} @@ -14012,12 +14866,12 @@ packages: prosemirror-gapcursor@1.4.1: resolution: {integrity: sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==} - prosemirror-highlight@0.15.1: - resolution: {integrity: sha512-KcJUGNgqLED+eK/cisNtY3M+eDNLkZyWCdyi7B3RoW3rKHnhkKawnJAcr9p1F/e3q+oDB5Y5OiIrC11bxP7tFA==} + prosemirror-highlight@0.15.3: + resolution: {integrity: sha512-WVV2st0fX1w2TkAgmTmdbj77BlWYuLfW4BGXPo8JfIWsSly5xYcfID8QJQL+GT8kisMRuu4jgT6JAqj1DOwvvg==} peerDependencies: '@lezer/common': ^1.0.0 '@lezer/highlight': ^1.0.0 - '@shikijs/types': ^1.29.2 || ^2.0.0 || ^3.0.0 || ^4.0.0 + '@shikijs/types': ^4.4.3 '@types/hast': ^3.0.0 highlight.js: ^11.9.0 lowlight: ^3.1.0 @@ -14172,9 +15026,6 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-is@19.2.4: resolution: {integrity: sha512-W+EWGn2v0ApPKgKKCy/7s7WHXkboGcsrXE+2joLyVxkbyVQfO3MUEaUQDHoSmb8TFFrSKYa9mw64WZHNHSDzYA==} @@ -14412,15 +15263,13 @@ packages: rettime@0.7.0: resolution: {integrity: sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rimraf@5.0.10: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true + robust-predicates@3.0.3: + resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} + rolldown@1.0.0-rc.15: resolution: {integrity: sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==} engines: {node: ^20.19.0 || >=22.12.0} @@ -14443,16 +15292,16 @@ packages: rou3@0.7.12: resolution: {integrity: sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg==} - rrweb-cssom@0.7.1: - resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} - - rrweb-cssom@0.8.0: - resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + roughjs@4.6.6: + resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} run-applescript@7.1.0: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} + rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} @@ -14517,6 +15366,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + serve-handler@6.1.7: resolution: {integrity: sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==} @@ -14525,9 +15379,6 @@ packages: engines: {node: '>= 14'} hasBin: true - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - set-cookie-parser@2.7.2: resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} @@ -14546,9 +15397,14 @@ packages: setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - sharp@0.34.5: - resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + sharp@0.35.3: + resolution: {integrity: sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==} + engines: {node: '>=20.9.0'} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -14562,11 +15418,8 @@ packages: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} - shiki@3.23.0: - resolution: {integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==} - - shiki@4.0.2: - resolution: {integrity: sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==} + shiki@4.4.3: + resolution: {integrity: sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g==} engines: {node: '>=20'} side-channel-list@1.0.1: @@ -14598,15 +15451,9 @@ packages: simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - simple-get@3.1.1: - resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==} - simple-get@4.0.1: resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - simple-swizzle@0.2.4: - resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} - sirv@3.0.2: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} @@ -14614,10 +15461,6 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - slate-history@0.110.3: resolution: {integrity: sha512-sgdff4Usdflmw5ZUbhDkxFwCBQ2qlDKMMkF93w66KdV48vHOgN2BmLrf+2H8SdX8PYIpP/cTB0w8qWC2GwhDVA==} peerDependencies: @@ -14671,6 +15514,10 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + speech-rule-engine@4.1.4: + resolution: {integrity: sha512-i/VCLG1fvRc95pMHRqG4aQNscv+9aIsqA2oI7ZQS51sTdUcDHYX6cpT8/tqZ+enjs1tKVwbRBWgxut9SWn+f9g==} + hasBin: true + split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -14678,13 +15525,6 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - ssim.js@3.5.0: - resolution: {integrity: sha512-Aj6Jl2z6oDmgYFFbQqK7fght19bXdOxY7Tj03nF+03M9gCBAjeIiO8/PlEGMfKDwYpw4q6iBqVq2YuREorGg/g==} - - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -14811,6 +15651,9 @@ packages: stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + stylis@4.4.0: + resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -14861,11 +15704,6 @@ packages: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} - tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - 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 - terser-webpack-plugin@5.5.0: resolution: {integrity: sha512-UYhptBwhWvfIjKd/UuFo6D8uq9xpGLDK+z8EDsj/zWhrTaH34cKEbrkMKfV5YWqGBvAYA3tlzZbs2R+qYrbQJA==} engines: {node: '>= 10.13.0'} @@ -14918,6 +15756,10 @@ packages: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + tinypool@2.1.0: resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} engines: {node: ^20.0.0 || >=22.0.0} @@ -14926,16 +15768,9 @@ packages: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} - tldts-core@6.1.86: - resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} - tldts-core@7.0.27: resolution: {integrity: sha512-YQ7uPjgWUibIK6DW5lrKujGwUKhLevU4hcGbP5O6TcIUb+oTjJYJVWPS4nZsIHrEEEG6myk/oqAJUEQmpZrHsg==} - tldts@6.1.86: - resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} - hasBin: true - tldts@7.0.27: resolution: {integrity: sha512-I4FZcVFcqCRuT0ph6dCDpPuO4Xgzvh+spkcTr1gK7peIvxWauoloVO0vuy1FQnijT63ss6AsHB6+OIM4aXHbPg==} hasBin: true @@ -14944,10 +15779,6 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} - tough-cookie@5.1.2: - resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} - engines: {node: '>=16'} - tough-cookie@6.0.1: resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==} engines: {node: '>=16'} @@ -14955,10 +15786,6 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tr46@5.1.1: - resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} - engines: {node: '>=18'} - tr46@6.0.0: resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} engines: {node: '>=20'} @@ -14973,6 +15800,10 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + ts-dedent@2.3.0: + resolution: {integrity: sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==} + engines: {node: '>=6.10'} + ts-morph@27.0.2: resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==} @@ -15046,6 +15877,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@7.0.2: + resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} + engines: {node: '>=16.20.0'} + hasBin: true + ufo@1.6.3: resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} @@ -15063,12 +15899,6 @@ packages: unconfig@7.5.0: resolution: {integrity: sha512-oi8Qy2JV4D3UQ0PsopR28CzdQ3S/5A1zwsUwp/rosSbfhJ5z7b90bIyTwi/F7hCLD4SGcZVjDzd4XoUQcEanvA==} - undici-types@6.20.0: - resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.19.2: resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} @@ -15157,6 +15987,10 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + uuid@14.0.1: + resolution: {integrity: sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==} + hasBin: true + uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). @@ -15207,17 +16041,25 @@ packages: '@nuxt/kit': optional: true - vite-plus@0.1.24: - resolution: {integrity: sha512-b3fr6WtCiEhetjuzW/4KcEMOAMuZxoxZATWaXKmPzOLf1upG+pzKJOFZTb94D6wiPBlwcjxoaUtF7C3uAN+VjQ==} - engines: {node: ^20.19.0 || >=22.12.0} + vite-plus@0.2.9: + resolution: {integrity: sha512-8uRNqAxh9no3AU4Lep8BEYhkim07+3NO+mhuxTWiN0k30syGT/2+ue/DtWYhtzQ7yi2f2WKpjOhoI4/QkWWbUg==} + engines: {node: ^20.19.0 || ^22.18.0 || >=24.11.0} hasBin: true + peerDependencies: + '@vitest/browser-playwright': 4.1.10 + '@vitest/browser-webdriverio': 4.1.10 + peerDependenciesMeta: + '@vitest/browser-playwright': + optional: true + '@vitest/browser-webdriverio': + optional: true vite@8.0.8: resolution: {integrity: sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 + '@types/node': ^25.6.0 '@vitejs/devtools': ^0.1.0 esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' @@ -15262,29 +16104,29 @@ packages: '@types/react-dom': ^18.0.0 || ^19.0.0 react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - vitest: 4.1.7 + vitest: 4.1.10 peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - vitest@4.1.7: - resolution: {integrity: sha512-flYyaFd2CgoCoU+0UKt3pxksgC+S02iTDN0n3LtqaMeXsI9SBcdNujc2k0DeFLzUn/0k538yNjOSdwgCqcrwJA==} + vitest@4.1.10: + resolution: {integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.7 - '@vitest/browser-preview': 4.1.7 - '@vitest/browser-webdriverio': 4.1.7 - '@vitest/coverage-istanbul': 4.1.7 - '@vitest/coverage-v8': 4.1.7 - '@vitest/ui': 4.1.7 + '@types/node': ^25.6.0 + '@vitest/browser-playwright': 4.1.10 + '@vitest/browser-preview': 4.1.10 + '@vitest/browser-webdriverio': 4.1.10 + '@vitest/coverage-istanbul': 4.1.10 + '@vitest/coverage-v8': 4.1.10 + '@vitest/ui': 4.1.10 happy-dom: '*' - jsdom: '*' + jsdom: ^29.0.2 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': @@ -15333,10 +16175,6 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - webidl-conversions@8.0.1: resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} engines: {node: '>=20'} @@ -15355,23 +16193,10 @@ packages: webpack-cli: optional: true - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation - - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - whatwg-mimetype@5.0.0: resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} engines: {node: '>=20'} - whatwg-url@14.2.0: - resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} - engines: {node: '>=18'} - whatwg-url@16.0.1: resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -15408,8 +16233,8 @@ packages: engines: {node: '>=8'} hasBin: true - wide-align@1.1.5: - resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + wicked-good-xpath@1.3.0: + resolution: {integrity: sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==} widest-line@4.0.1: resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} @@ -15550,9 +16375,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@1.10.3: resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} engines: {node: '>= 6'} @@ -15593,12 +16415,21 @@ packages: yoga-layout@3.2.1: resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} + yuku-codegen@0.5.48: + resolution: {integrity: sha512-p7HxD5Xl4jzDzqMrGePAOeSHmRY4g58h4HuGq15weQFPxuPWd/W6e7nqp/+Lea6JfpOdBwJOAyXFqIZ/J9Zfnw==} + + yuku-parser@0.5.48: + resolution: {integrity: sha512-OWBfhrpgK9+/4+IXG9oT8Bao4AhViQA7vdyNNH7EUg8dQYgwa70XtIBWTpCEme1P1ECyoDNYkn0wT63f8XRcVA==} + zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} +ignoredOptionalDependencies: + - '@napi-rs/canvas' + snapshots: '@ai-sdk/anthropic@3.0.2(zod@4.3.6)': @@ -15667,6 +16498,11 @@ snapshots: '@alloc/quick-lru@5.2.0': {} + '@antfu/install-pkg@1.1.0': + dependencies: + package-manager-detector: 1.7.0 + tinyexec: 1.2.4 + '@ariakit/core@0.4.18': {} '@ariakit/react-core@0.4.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': @@ -15683,14 +16519,6 @@ snapshots: react: 19.2.5 react-dom: 19.2.5(react@19.2.5) - '@asamuzakjp/css-color@3.2.0': - dependencies: - '@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: 10.4.3 - '@asamuzakjp/css-color@5.1.11': dependencies: '@asamuzakjp/generational-cache': 1.0.1 @@ -16291,19 +17119,6 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@base-ui/react@1.3.0(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': - dependencies: - '@babel/runtime': 7.29.2 - '@base-ui/utils': 0.2.6(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@floating-ui/react-dom': 2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@floating-ui/utils': 0.2.11 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - tabbable: 6.4.0 - use-sync-external-store: 1.6.0(react@19.2.5) - optionalDependencies: - '@types/react': 19.2.14 - '@base-ui/react@1.6.0(@date-fns/tz@1.4.1)(@types/react@19.2.14)(date-fns@4.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@babel/runtime': 7.29.2 @@ -16318,17 +17133,6 @@ snapshots: '@types/react': 19.2.14 date-fns: 4.1.0 - '@base-ui/utils@0.2.6(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': - dependencies: - '@babel/runtime': 7.29.2 - '@floating-ui/utils': 0.2.11 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - reselect: 5.1.1 - use-sync-external-store: 1.6.0(react@19.2.5) - optionalDependencies: - '@types/react': 19.2.14 - '@base-ui/utils@0.3.1(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@babel/runtime': 7.29.2 @@ -16365,31 +17169,23 @@ snapshots: '@better-fetch/fetch@1.1.21': {} + '@blazediff/core@1.9.1': {} + + '@braintree/sanitize-url@7.1.2': {} + '@bramus/specificity@2.4.2': dependencies: css-tree: 3.2.1 - '@csstools/color-helpers@5.1.0': {} + '@chevrotain/types@11.1.2': {} '@csstools/color-helpers@6.0.2': {} - '@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': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - '@csstools/css-calc@3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@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': 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-color-parser@4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/color-helpers': 6.0.2 @@ -16397,10 +17193,6 @@ snapshots: '@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)': - dependencies: - '@csstools/css-tokenizer': 3.0.4 - '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/css-tokenizer': 4.0.0 @@ -16409,8 +17201,6 @@ snapshots: optionalDependencies: css-tree: 3.2.1 - '@csstools/css-tokenizer@3.0.4': {} - '@csstools/css-tokenizer@4.0.0': {} '@date-fns/tz@1.4.1': {} @@ -16421,7 +17211,7 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.10.0': + '@emnapi/runtime@1.11.3': dependencies: tslib: 2.8.1 optional: true @@ -16768,12 +17558,12 @@ snapshots: dependencies: '@formatjs/fast-memoize': 3.1.1 - '@fumadocs/base-ui@16.5.0(@types/react@19.2.14)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2)': + '@fumadocs/base-ui@16.5.0(@date-fns/tz@1.4.1)(@types/react@19.2.14)(date-fns@4.1.0)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2)': dependencies: - '@base-ui/react': 1.3.0(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@fumadocs/ui': 16.5.0(@types/react@19.2.14)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2) + '@base-ui/react': 1.6.0(@date-fns/tz@1.4.1)(@types/react@19.2.14)(date-fns@4.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@fumadocs/ui': 16.5.0(@types/react@19.2.14)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2) class-variance-authority: 0.7.1 - fumadocs-core: 16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6) + fumadocs-core: 16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6) lucide-react: 0.563.0(react@19.2.5) next-themes: 0.4.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5) react: 19.2.5 @@ -16782,12 +17572,15 @@ snapshots: scroll-into-view-if-needed: 3.1.0 optionalDependencies: '@types/react': 19.2.14 - next: 16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + next: 16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) tailwindcss: 4.2.2 + transitivePeerDependencies: + - '@date-fns/tz' + - date-fns - '@fumadocs/ui@16.5.0(@types/react@19.2.14)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2)': + '@fumadocs/ui@16.5.0(@types/react@19.2.14)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2)': dependencies: - fumadocs-core: 16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6) + fumadocs-core: 16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6) next-themes: 0.4.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5) postcss-selector-parser: 7.1.1 react: 19.2.5 @@ -16795,7 +17588,7 @@ snapshots: tailwind-merge: 3.5.0 optionalDependencies: '@types/react': 19.2.14 - next: 16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + next: 16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) tailwindcss: 4.2.2 '@handlewithcare/prosemirror-inputrules@0.1.4(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)': @@ -16849,119 +17642,122 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@iconify/types@2.0.0': {} + + '@iconify/utils@3.1.4': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@iconify/types': 2.0.0 + import-meta-resolve: 4.2.0 + '@img/colour@1.1.0': optional: true - '@img/sharp-darwin-arm64@0.34.5': + '@img/sharp-darwin-arm64@0.35.3': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-arm64': 1.3.2 optional: true - '@img/sharp-darwin-x64@0.34.5': + '@img/sharp-darwin-x64@0.35.3': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.3.2 optional: true - '@img/sharp-libvips-darwin-arm64@1.2.4': + '@img/sharp-freebsd-wasm32@0.35.3': + dependencies: + '@img/sharp-wasm32': 0.35.3 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.3.2': optional: true - '@img/sharp-libvips-darwin-x64@1.2.4': + '@img/sharp-libvips-darwin-x64@1.3.2': optional: true - '@img/sharp-libvips-linux-arm64@1.2.4': + '@img/sharp-libvips-linux-arm64@1.3.2': optional: true - '@img/sharp-libvips-linux-arm@1.2.4': + '@img/sharp-libvips-linux-arm@1.3.2': optional: true - '@img/sharp-libvips-linux-ppc64@1.2.4': + '@img/sharp-libvips-linux-ppc64@1.3.2': optional: true - '@img/sharp-libvips-linux-riscv64@1.2.4': + '@img/sharp-libvips-linux-riscv64@1.3.2': optional: true - '@img/sharp-libvips-linux-s390x@1.2.4': + '@img/sharp-libvips-linux-s390x@1.3.2': optional: true - '@img/sharp-libvips-linux-x64@1.2.4': + '@img/sharp-libvips-linux-x64@1.3.2': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + '@img/sharp-libvips-linuxmusl-arm64@1.3.2': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.2.4': + '@img/sharp-libvips-linuxmusl-x64@1.3.2': optional: true - '@img/sharp-linux-arm64@0.34.5': + '@img/sharp-linux-arm64@0.35.3': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.3.2 optional: true - '@img/sharp-linux-arm@0.34.5': + '@img/sharp-linux-arm@0.35.3': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.3.2 optional: true - '@img/sharp-linux-ppc64@0.34.5': + '@img/sharp-linux-ppc64@0.35.3': optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.3.2 optional: true - '@img/sharp-linux-riscv64@0.34.5': + '@img/sharp-linux-riscv64@0.35.3': optionalDependencies: - '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.3.2 optional: true - '@img/sharp-linux-s390x@0.34.5': + '@img/sharp-linux-s390x@0.35.3': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.3.2 optional: true - '@img/sharp-linux-x64@0.34.5': + '@img/sharp-linux-x64@0.35.3': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.3.2 optional: true - '@img/sharp-linuxmusl-arm64@0.34.5': + '@img/sharp-linuxmusl-arm64@0.35.3': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.2 optional: true - '@img/sharp-linuxmusl-x64@0.34.5': + '@img/sharp-linuxmusl-x64@0.35.3': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.3.2 optional: true - '@img/sharp-wasm32@0.34.5': + '@img/sharp-wasm32@0.35.3': dependencies: - '@emnapi/runtime': 1.10.0 + '@emnapi/runtime': 1.11.3 optional: true - '@img/sharp-win32-arm64@0.34.5': + '@img/sharp-webcontainers-wasm32@0.35.3': + dependencies: + '@img/sharp-wasm32': 0.35.3 optional: true - '@img/sharp-win32-ia32@0.34.5': + '@img/sharp-win32-arm64@0.35.3': optional: true - '@img/sharp-win32-x64@0.34.5': + '@img/sharp-win32-ia32@0.35.3': optional: true - '@inquirer/ansi@1.0.2': {} - - '@inquirer/confirm@5.1.21(@types/node@20.19.39)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@20.19.39) - '@inquirer/type': 3.0.10(@types/node@20.19.39) - optionalDependencies: - '@types/node': 20.19.39 + '@img/sharp-win32-x64@0.35.3': optional: true - '@inquirer/confirm@5.1.21(@types/node@22.13.13)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@22.13.13) - '@inquirer/type': 3.0.10(@types/node@22.13.13) - optionalDependencies: - '@types/node': 22.13.13 + '@inquirer/ansi@1.0.2': {} '@inquirer/confirm@5.1.21(@types/node@25.6.0)': dependencies: @@ -16969,34 +17765,6 @@ snapshots: '@inquirer/type': 3.0.10(@types/node@25.6.0) optionalDependencies: '@types/node': 25.6.0 - optional: true - - '@inquirer/core@10.3.2(@types/node@20.19.39)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@20.19.39) - 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': 20.19.39 - optional: true - - '@inquirer/core@10.3.2(@types/node@22.13.13)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.13.13) - 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.13.13 '@inquirer/core@10.3.2(@types/node@25.6.0)': dependencies: @@ -17010,23 +17778,12 @@ snapshots: yoctocolors-cjs: 2.1.3 optionalDependencies: '@types/node': 25.6.0 - optional: true '@inquirer/figures@1.0.15': {} - '@inquirer/type@3.0.10(@types/node@20.19.39)': - optionalDependencies: - '@types/node': 20.19.39 - optional: true - - '@inquirer/type@3.0.10(@types/node@22.13.13)': - optionalDependencies: - '@types/node': 22.13.13 - '@inquirer/type@3.0.10(@types/node@25.6.0)': optionalDependencies: '@types/node': 25.6.0 - optional: true '@isaacs/cliui@8.0.2': dependencies: @@ -17037,33 +17794,6 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@jest/diff-sequences@30.3.0': {} - - '@jest/expect-utils@30.3.0': - dependencies: - '@jest/get-type': 30.1.0 - - '@jest/get-type@30.1.0': {} - - '@jest/pattern@30.0.1': - dependencies: - '@types/node': 22.13.13 - jest-regex-util: 30.0.1 - - '@jest/schemas@30.0.5': - dependencies: - '@sinclair/typebox': 0.34.49 - - '@jest/types@30.3.0': - dependencies: - '@jest/pattern': 30.0.1 - '@jest/schemas': 30.0.5 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 22.13.13 - '@types/yargs': 17.0.35 - chalk: 4.1.2 - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -17216,22 +17946,6 @@ snapshots: dependencies: react: 19.2.5 - '@mapbox/node-pre-gyp@1.0.11': - dependencies: - detect-libc: 2.1.2 - https-proxy-agent: 5.0.1 - make-dir: 3.1.0 - node-fetch: 2.7.0 - nopt: 5.0.0 - npmlog: 5.0.1 - rimraf: 3.0.2 - semver: 7.7.4 - tar: 6.2.1 - transitivePeerDependencies: - - encoding - - supports-color - optional: true - '@marsidev/react-turnstile@1.5.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: react: 19.2.5 @@ -17241,7 +17955,7 @@ snapshots: dependencies: '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdx': 2.0.13 acorn: 8.16.0 collapse-white-space: 2.1.0 @@ -17267,6 +17981,10 @@ snapshots: transitivePeerDependencies: - supports-color + '@mermaid-js/parser@1.2.0': + dependencies: + '@chevrotain/types': 11.1.2 + '@mswjs/interceptors@0.37.6': dependencies: '@open-draft/deferred-promise': 2.2.0 @@ -17376,32 +18094,34 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@next/env@16.2.7': {} + '@next/env@16.3.0': {} - '@next/swc-darwin-arm64@16.2.7': + '@next/swc-darwin-arm64@16.3.0': optional: true - '@next/swc-darwin-x64@16.2.7': + '@next/swc-darwin-x64@16.3.0': optional: true - '@next/swc-linux-arm64-gnu@16.2.7': + '@next/swc-linux-arm64-gnu@16.3.0': optional: true - '@next/swc-linux-arm64-musl@16.2.7': + '@next/swc-linux-arm64-musl@16.3.0': optional: true - '@next/swc-linux-x64-gnu@16.2.7': + '@next/swc-linux-x64-gnu@16.3.0': optional: true - '@next/swc-linux-x64-musl@16.2.7': + '@next/swc-linux-x64-musl@16.3.0': optional: true - '@next/swc-win32-arm64-msvc@16.2.7': + '@next/swc-win32-arm64-msvc@16.3.0': optional: true - '@next/swc-win32-x64-msvc@16.2.7': + '@next/swc-win32-x64-msvc@16.3.0': optional: true + '@noble/ciphers@1.3.0': {} + '@noble/ciphers@2.1.1': {} '@noble/hashes@1.8.0': {} @@ -17684,145 +18404,145 @@ snapshots: '@orama/orama@3.1.18': {} - '@oxc-project/runtime@0.133.0': {} + '@oxc-project/runtime@0.143.0': {} '@oxc-project/types@0.124.0': {} - '@oxc-project/types@0.133.0': {} + '@oxc-project/types@0.143.0': {} - '@oxfmt/binding-android-arm-eabi@0.52.0': + '@oxfmt/binding-android-arm-eabi@0.62.0': optional: true - '@oxfmt/binding-android-arm64@0.52.0': + '@oxfmt/binding-android-arm64@0.62.0': optional: true - '@oxfmt/binding-darwin-arm64@0.52.0': + '@oxfmt/binding-darwin-arm64@0.62.0': optional: true - '@oxfmt/binding-darwin-x64@0.52.0': + '@oxfmt/binding-darwin-x64@0.62.0': optional: true - '@oxfmt/binding-freebsd-x64@0.52.0': + '@oxfmt/binding-freebsd-x64@0.62.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.52.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.62.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.52.0': + '@oxfmt/binding-linux-arm-musleabihf@0.62.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.52.0': + '@oxfmt/binding-linux-arm64-gnu@0.62.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.52.0': + '@oxfmt/binding-linux-arm64-musl@0.62.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.52.0': + '@oxfmt/binding-linux-ppc64-gnu@0.62.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.52.0': + '@oxfmt/binding-linux-riscv64-gnu@0.62.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.52.0': + '@oxfmt/binding-linux-riscv64-musl@0.62.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.52.0': + '@oxfmt/binding-linux-s390x-gnu@0.62.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.52.0': + '@oxfmt/binding-linux-x64-gnu@0.62.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.52.0': + '@oxfmt/binding-linux-x64-musl@0.62.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.52.0': + '@oxfmt/binding-openharmony-arm64@0.62.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.52.0': + '@oxfmt/binding-win32-arm64-msvc@0.62.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.52.0': + '@oxfmt/binding-win32-ia32-msvc@0.62.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.52.0': + '@oxfmt/binding-win32-x64-msvc@0.62.0': optional: true - '@oxlint-tsgolint/darwin-arm64@0.23.0': + '@oxlint-tsgolint/darwin-arm64@7.0.2001': optional: true - '@oxlint-tsgolint/darwin-x64@0.23.0': + '@oxlint-tsgolint/darwin-x64@7.0.2001': optional: true - '@oxlint-tsgolint/linux-arm64@0.23.0': + '@oxlint-tsgolint/linux-arm64@7.0.2001': optional: true - '@oxlint-tsgolint/linux-x64@0.23.0': + '@oxlint-tsgolint/linux-x64@7.0.2001': optional: true - '@oxlint-tsgolint/win32-arm64@0.23.0': + '@oxlint-tsgolint/win32-arm64@7.0.2001': optional: true - '@oxlint-tsgolint/win32-x64@0.23.0': + '@oxlint-tsgolint/win32-x64@7.0.2001': optional: true - '@oxlint/binding-android-arm-eabi@1.67.0': + '@oxlint/binding-android-arm-eabi@1.77.0': optional: true - '@oxlint/binding-android-arm64@1.67.0': + '@oxlint/binding-android-arm64@1.77.0': optional: true - '@oxlint/binding-darwin-arm64@1.67.0': + '@oxlint/binding-darwin-arm64@1.77.0': optional: true - '@oxlint/binding-darwin-x64@1.67.0': + '@oxlint/binding-darwin-x64@1.77.0': optional: true - '@oxlint/binding-freebsd-x64@1.67.0': + '@oxlint/binding-freebsd-x64@1.77.0': optional: true - '@oxlint/binding-linux-arm-gnueabihf@1.67.0': + '@oxlint/binding-linux-arm-gnueabihf@1.77.0': optional: true - '@oxlint/binding-linux-arm-musleabihf@1.67.0': + '@oxlint/binding-linux-arm-musleabihf@1.77.0': optional: true - '@oxlint/binding-linux-arm64-gnu@1.67.0': + '@oxlint/binding-linux-arm64-gnu@1.77.0': optional: true - '@oxlint/binding-linux-arm64-musl@1.67.0': + '@oxlint/binding-linux-arm64-musl@1.77.0': optional: true - '@oxlint/binding-linux-ppc64-gnu@1.67.0': + '@oxlint/binding-linux-ppc64-gnu@1.77.0': optional: true - '@oxlint/binding-linux-riscv64-gnu@1.67.0': + '@oxlint/binding-linux-riscv64-gnu@1.77.0': optional: true - '@oxlint/binding-linux-riscv64-musl@1.67.0': + '@oxlint/binding-linux-riscv64-musl@1.77.0': optional: true - '@oxlint/binding-linux-s390x-gnu@1.67.0': + '@oxlint/binding-linux-s390x-gnu@1.77.0': optional: true - '@oxlint/binding-linux-x64-gnu@1.67.0': + '@oxlint/binding-linux-x64-gnu@1.77.0': optional: true - '@oxlint/binding-linux-x64-musl@1.67.0': + '@oxlint/binding-linux-x64-musl@1.77.0': optional: true - '@oxlint/binding-openharmony-arm64@1.67.0': + '@oxlint/binding-openharmony-arm64@1.77.0': optional: true - '@oxlint/binding-win32-arm64-msvc@1.67.0': + '@oxlint/binding-win32-arm64-msvc@1.77.0': optional: true - '@oxlint/binding-win32-ia32-msvc@1.67.0': + '@oxlint/binding-win32-ia32-msvc@1.77.0': optional: true - '@oxlint/binding-win32-x64-msvc@1.67.0': + '@oxlint/binding-win32-x64-msvc@1.77.0': optional: true - '@oxlint/plugins@1.61.0': {} + '@oxlint/plugins@1.73.0': {} '@pkgjs/parseargs@0.11.0': optional: true @@ -17831,11 +18551,11 @@ snapshots: dependencies: playwright: 1.60.0 - '@polar-sh/better-auth@1.8.3(@polar-sh/sdk@0.42.5)(@stripe/react-stripe-js@4.0.2(@stripe/stripe-js@7.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@stripe/stripe-js@7.9.0)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(better-auth@1.4.22(better-sqlite3@12.8.0)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@5.9.3))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))))(react-dom@19.2.5(react@19.2.5))(react-is@19.2.4)(react@19.2.5)(redux@5.0.1)(zod@4.3.6)': + '@polar-sh/better-auth@1.8.3(@polar-sh/sdk@0.42.5)(@stripe/react-stripe-js@4.0.2(@stripe/stripe-js@7.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@stripe/stripe-js@7.9.0)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(better-auth@1.4.22(better-sqlite3@12.8.0)(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.10))(react-dom@19.2.5(react@19.2.5))(react-is@19.2.4)(react@19.2.5)(redux@5.0.1)(zod@4.3.6)': dependencies: '@polar-sh/checkout': 0.2.0(@stripe/react-stripe-js@4.0.2(@stripe/stripe-js@7.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@stripe/stripe-js@7.9.0)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react-is@19.2.4)(react@19.2.5)(redux@5.0.1) '@polar-sh/sdk': 0.42.5 - better-auth: 1.4.22(better-sqlite3@12.8.0)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@5.9.3))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))) + better-auth: 1.4.22(better-sqlite3@12.8.0)(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.10) zod: 4.3.6 transitivePeerDependencies: - '@stripe/react-stripe-js' @@ -17878,7 +18598,7 @@ snapshots: '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-label': 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@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.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-popover': 1.1.23(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-select': 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@radix-ui/react-separator': 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -17929,6 +18649,8 @@ snapshots: '@radix-ui/primitive@1.1.3': {} + '@radix-ui/primitive@1.1.7': {} + '@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -17969,6 +18691,15 @@ snapshots: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@radix-ui/react-arrow@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@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.5(react@19.2.5))(react@19.2.5)': 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.5(react@19.2.5))(react@19.2.5) @@ -18050,6 +18781,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 + '@radix-ui/react-compose-refs@1.1.5(@types/react@19.2.14)(react@19.2.5)': + dependencies: + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 @@ -18070,6 +18807,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 + '@radix-ui/react-context@1.2.2(@types/react@19.2.14)(react@19.2.5)': + dependencies: + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 @@ -18111,6 +18854,19 @@ snapshots: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@radix-ui/react-dismissable-layer@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-effect-event': 0.0.5(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 @@ -18132,6 +18888,23 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 + '@radix-ui/react-focus-guards@1.1.6(@types/react@19.2.14)(react@19.2.5)': + dependencies: + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-focus-scope@1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@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.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) @@ -18181,6 +18954,13 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 + '@radix-ui/react-id@1.1.4(@types/react@19.2.14)(react@19.2.5)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + '@radix-ui/react-label@2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': 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.5(react@19.2.5))(react@19.2.5) @@ -18324,6 +19104,29 @@ snapshots: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@radix-ui/react-popover@1.1.23(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-dismissable-layer': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-focus-guards': 1.1.6(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-focus-scope': 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-id': 1.1.4(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-popper': 1.3.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-portal': 1.1.17(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-presence': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-slot': 1.3.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.2.14)(react@19.2.5) + aria-hidden: 1.2.6 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@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.5(react@19.2.5))(react@19.2.5)': dependencies: '@floating-ui/react-dom': 2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -18342,6 +19145,34 @@ snapshots: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@radix-ui/react-popper@1.3.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-arrow': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-rect': 1.1.4(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-size': 1.1.4(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/rect': 1.1.3 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-portal@1.1.17(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@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.5(react@19.2.5))(react@19.2.5)': 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.5(react@19.2.5))(react@19.2.5) @@ -18352,6 +19183,15 @@ snapshots: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@radix-ui/react-presence@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@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.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) @@ -18362,6 +19202,15 @@ snapshots: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@radix-ui/react-primitive@2.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/react-slot': 1.3.3(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@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.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) @@ -18522,6 +19371,13 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 + '@radix-ui/react-slot@1.3.3(@types/react@19.2.14)(react@19.2.5)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@radix-ui/primitive': 1.1.3 @@ -18640,6 +19496,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 + '@radix-ui/react-use-callback-ref@1.1.4(@types/react@19.2.14)(react@19.2.5)': + dependencies: + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.5)': dependencies: '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.5) @@ -18648,6 +19510,15 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 + '@radix-ui/react-use-controllable-state@1.2.6(@types/react@19.2.14)(react@19.2.5)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-use-effect-event': 0.0.5(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.5)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) @@ -18655,6 +19526,13 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 + '@radix-ui/react-use-effect-event@0.0.5(@types/react@19.2.14)(react@19.2.5)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.5)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) @@ -18675,6 +19553,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 + '@radix-ui/react-use-layout-effect@1.1.4(@types/react@19.2.14)(react@19.2.5)': + dependencies: + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.5)': dependencies: react: 19.2.5 @@ -18688,6 +19572,13 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 + '@radix-ui/react-use-rect@1.1.4(@types/react@19.2.14)(react@19.2.5)': + dependencies: + '@radix-ui/rect': 1.1.3 + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.5)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) @@ -18695,6 +19586,13 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 + '@radix-ui/react-use-size@1.1.4(@types/react@19.2.14)(react@19.2.5)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': 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.5(react@19.2.5))(react@19.2.5) @@ -18706,6 +19604,8 @@ snapshots: '@radix-ui/rect@1.1.1': {} + '@radix-ui/rect@1.1.3': {} + '@react-email/body@0.3.0(react@19.2.5)': dependencies: react: 19.2.5 @@ -18839,48 +19739,54 @@ snapshots: dependencies: react: 19.2.5 - '@react-pdf/fns@3.1.2': {} + '@react-pdf/fns@3.1.3': {} - '@react-pdf/font@4.0.4': + '@react-pdf/font@4.0.8': dependencies: - '@react-pdf/pdfkit': 4.1.0 - '@react-pdf/types': 2.9.2 + '@react-pdf/pdfkit': 5.1.1 + '@react-pdf/types': 2.11.1 fontkit: 2.0.4 is-url: 1.2.4 - '@react-pdf/image@3.0.4': + '@react-pdf/image@3.1.0': dependencies: - '@react-pdf/png-js': 3.0.0 + '@react-pdf/svg': 1.1.0 jay-peg: 1.1.1 + png-js: 2.0.0 - '@react-pdf/layout@4.4.2': + '@react-pdf/layout@4.6.1': dependencies: - '@react-pdf/fns': 3.1.2 - '@react-pdf/image': 3.0.4 - '@react-pdf/primitives': 4.1.1 - '@react-pdf/stylesheet': 6.1.2 - '@react-pdf/textkit': 6.1.0 - '@react-pdf/types': 2.9.2 + '@react-pdf/fns': 3.1.3 + '@react-pdf/image': 3.1.0 + '@react-pdf/primitives': 4.3.0 + '@react-pdf/stylesheet': 6.2.1 + '@react-pdf/textkit': 6.3.0 + '@react-pdf/types': 2.11.1 emoji-regex-xs: 1.0.0 queue: 6.0.2 yoga-layout: 3.2.1 - '@react-pdf/pdfkit@4.1.0': + '@react-pdf/math@2.0.1(@react-pdf/renderer@4.5.1(react@19.2.5))(react@19.2.5)': + dependencies: + '@react-pdf/renderer': 4.5.1(react@19.2.5) + '@react-pdf/svg': 1.1.0 + mathjax-full: 3.2.2 + react: 19.2.5 + + '@react-pdf/pdfkit@5.1.1': dependencies: '@babel/runtime': 7.29.2 - '@react-pdf/png-js': 3.0.0 + '@noble/ciphers': 1.3.0 + '@noble/hashes': 1.8.0 browserify-zlib: 0.2.0 - crypto-js: 4.2.0 fontkit: 2.0.4 jay-peg: 1.1.1 + js-md5: 0.8.3 linebreak: 1.1.0 + png-js: 2.0.0 vite-compatible-readable-stream: 3.6.1 - '@react-pdf/png-js@3.0.0': - dependencies: - browserify-zlib: 0.2.0 - - '@react-pdf/primitives@4.1.1': {} + '@react-pdf/primitives@4.3.0': {} '@react-pdf/reconciler@2.0.0(react@19.2.5)': dependencies: @@ -18888,57 +19794,61 @@ snapshots: react: 19.2.5 scheduler: 0.25.0-rc-603e6108-20241029 - '@react-pdf/render@4.3.2': + '@react-pdf/render@4.5.1': dependencies: '@babel/runtime': 7.29.2 - '@react-pdf/fns': 3.1.2 - '@react-pdf/primitives': 4.1.1 - '@react-pdf/textkit': 6.1.0 - '@react-pdf/types': 2.9.2 + '@react-pdf/fns': 3.1.3 + '@react-pdf/primitives': 4.3.0 + '@react-pdf/textkit': 6.3.0 + '@react-pdf/types': 2.11.1 abs-svg-path: 0.1.1 - color-string: 1.9.1 + color-string: 2.1.4 normalize-svg-path: 1.1.0 parse-svg-path: 0.1.2 svg-arc-to-cubic-bezier: 3.2.0 - '@react-pdf/renderer@4.3.2(react@19.2.5)': + '@react-pdf/renderer@4.5.1(react@19.2.5)': dependencies: '@babel/runtime': 7.29.2 - '@react-pdf/fns': 3.1.2 - '@react-pdf/font': 4.0.4 - '@react-pdf/layout': 4.4.2 - '@react-pdf/pdfkit': 4.1.0 - '@react-pdf/primitives': 4.1.1 + '@react-pdf/fns': 3.1.3 + '@react-pdf/font': 4.0.8 + '@react-pdf/layout': 4.6.1 + '@react-pdf/pdfkit': 5.1.1 + '@react-pdf/primitives': 4.3.0 '@react-pdf/reconciler': 2.0.0(react@19.2.5) - '@react-pdf/render': 4.3.2 - '@react-pdf/types': 2.9.2 + '@react-pdf/render': 4.5.1 + '@react-pdf/types': 2.11.1 events: 3.3.0 object-assign: 4.1.1 prop-types: 15.8.1 queue: 6.0.2 react: 19.2.5 - '@react-pdf/stylesheet@6.1.2': + '@react-pdf/stylesheet@6.2.1': dependencies: - '@react-pdf/fns': 3.1.2 - '@react-pdf/types': 2.9.2 - color-string: 1.9.1 + '@react-pdf/fns': 3.1.3 + '@react-pdf/types': 2.11.1 + color-string: 2.1.4 hsl-to-hex: 1.0.0 media-engine: 1.0.3 postcss-value-parser: 4.2.0 - '@react-pdf/textkit@6.1.0': + '@react-pdf/svg@1.1.0': + dependencies: + '@react-pdf/primitives': 4.3.0 + + '@react-pdf/textkit@6.3.0': dependencies: - '@react-pdf/fns': 3.1.2 + '@react-pdf/fns': 3.1.3 bidi-js: 1.0.3 hyphen: 1.14.1 unicode-properties: 1.4.1 - '@react-pdf/types@2.9.2': + '@react-pdf/types@2.11.1': dependencies: - '@react-pdf/font': 4.0.4 - '@react-pdf/primitives': 4.1.1 - '@react-pdf/stylesheet': 6.1.2 + '@react-pdf/font': 4.0.8 + '@react-pdf/primitives': 4.3.0 + '@react-pdf/stylesheet': 6.2.1 '@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.5)(redux@5.0.1))(react@19.2.5)': dependencies: @@ -18947,7 +19857,7 @@ snapshots: immer: 11.1.4 redux: 5.0.1 redux-thunk: 3.1.0(redux@5.0.1) - reselect: 5.1.1 + reselect: 5.2.0 optionalDependencies: react: 19.2.5 react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.5)(redux@5.0.1) @@ -19196,7 +20106,7 @@ snapshots: '@sentry/core@10.47.0': {} - '@sentry/nextjs@10.47.0(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.1))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)(webpack@5.105.4(esbuild@0.27.5))': + '@sentry/nextjs@10.47.0(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.1))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)(webpack@5.105.4(esbuild@0.27.5))': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/semantic-conventions': 1.40.0 @@ -19209,7 +20119,7 @@ snapshots: '@sentry/react': 10.47.0(react@19.2.5) '@sentry/vercel-edge': 10.47.0 '@sentry/webpack-plugin': 5.1.1(webpack@5.105.4(esbuild@0.27.5)) - next: 16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + next: 16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) rollup: 4.60.1 stacktrace-parser: 0.1.11 transitivePeerDependencies: @@ -19309,105 +20219,93 @@ snapshots: '@shikijs/core@3.23.0': dependencies: - '@shikijs/types': 3.23.0 + '@shikijs/types': 4.4.3 '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-to-html: 9.0.5 '@shikijs/core@4.0.2': dependencies: '@shikijs/primitive': 4.0.2 - '@shikijs/types': 4.0.2 + '@shikijs/types': 4.4.3 '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-to-html: 9.0.5 - '@shikijs/engine-javascript@3.23.0': - dependencies: - '@shikijs/types': 3.23.0 - '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 4.3.5 - - '@shikijs/engine-javascript@4.0.2': + '@shikijs/core@4.4.3': dependencies: - '@shikijs/types': 4.0.2 + '@shikijs/primitive': 4.4.3 + '@shikijs/types': 4.4.3 '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 4.3.5 + '@types/hast': 3.0.5 + hast-util-to-html: 9.0.5 - '@shikijs/engine-oniguruma@3.23.0': + '@shikijs/engine-javascript@4.4.3': dependencies: - '@shikijs/types': 3.23.0 + '@shikijs/types': 4.4.3 '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.6 - '@shikijs/engine-oniguruma@4.0.2': + '@shikijs/engine-oniguruma@4.4.3': dependencies: - '@shikijs/types': 4.0.2 + '@shikijs/types': 4.4.3 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs-precompiled@4.0.2': + '@shikijs/langs-precompiled@4.4.3': dependencies: - '@shikijs/types': 4.0.2 - oniguruma-to-es: 4.3.5 + '@shikijs/types': 4.4.3 + oniguruma-to-es: 4.3.6 - '@shikijs/langs@3.23.0': + '@shikijs/langs@4.4.3': dependencies: - '@shikijs/types': 3.23.0 + '@shikijs/types': 4.4.3 - '@shikijs/langs@4.0.2': + '@shikijs/primitive@4.0.2': dependencies: - '@shikijs/types': 4.0.2 + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 - '@shikijs/primitive@4.0.2': + '@shikijs/primitive@4.4.3': dependencies: - '@shikijs/types': 4.0.2 + '@shikijs/types': 4.4.3 '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 - '@shikijs/rehype@3.23.0': + '@shikijs/rehype@4.4.3': dependencies: - '@shikijs/types': 3.23.0 - '@types/hast': 3.0.4 + '@shikijs/types': 4.4.3 + '@types/hast': 3.0.5 hast-util-to-string: 3.0.1 - shiki: 3.23.0 + shiki: 4.4.3 unified: 11.0.5 unist-util-visit: 5.1.0 - '@shikijs/themes@3.23.0': - dependencies: - '@shikijs/types': 3.23.0 - - '@shikijs/themes@4.0.2': + '@shikijs/themes@4.4.3': dependencies: - '@shikijs/types': 4.0.2 + '@shikijs/types': 4.4.3 '@shikijs/transformers@3.23.0': dependencies: '@shikijs/core': 3.23.0 - '@shikijs/types': 3.23.0 + '@shikijs/types': 4.4.3 - '@shikijs/twoslash@4.0.2(typescript@5.9.3)': + '@shikijs/twoslash@4.0.2(typescript@7.0.2)': dependencies: '@shikijs/core': 4.0.2 - '@shikijs/types': 4.0.2 - twoslash: 0.3.6(typescript@5.9.3) - typescript: 5.9.3 + '@shikijs/types': 4.4.3 + twoslash: 0.3.6(typescript@7.0.2) + typescript: 7.0.2 transitivePeerDependencies: - supports-color - '@shikijs/types@3.23.0': + '@shikijs/types@4.4.3': dependencies: '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - '@shikijs/types@4.0.2': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@shikijs/vscode-textmate@10.0.2': {} - '@sinclair/typebox@0.34.49': {} - '@smithy/chunked-blob-reader-native@4.2.3': dependencies: '@smithy/util-base64': 4.3.2 @@ -19836,20 +20734,6 @@ snapshots: postcss: 8.5.14 tailwindcss: 4.2.2 - '@tailwindcss/vite@4.2.2(vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))': - dependencies: - '@tailwindcss/node': 4.2.2 - '@tailwindcss/oxide': 4.2.2 - tailwindcss: 4.2.2 - vite: 8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) - - '@tailwindcss/vite@4.2.2(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))': - dependencies: - '@tailwindcss/node': 4.2.2 - '@tailwindcss/oxide': 4.2.2 - tailwindcss: 4.2.2 - vite: 8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) - '@tailwindcss/vite@4.2.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@tailwindcss/node': 4.2.2 @@ -19886,6 +20770,10 @@ snapshots: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@testing-library/user-event@14.6.3(@testing-library/dom@10.4.1)': + dependencies: + '@testing-library/dom': 10.4.1 + '@tiptap/core@3.29.2(@tiptap/pm@3.29.2)': dependencies: '@tiptap/pm': 3.29.2 @@ -19977,7 +20865,7 @@ snapshots: dependencies: minimatch: 10.2.5 path-browserify: 1.0.1 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 '@tybys/wasm-util@0.10.1': dependencies: @@ -19988,7 +20876,7 @@ snapshots: '@types/better-sqlite3@7.6.13': dependencies: - '@types/node': 22.13.13 + '@types/node': 25.6.0 '@types/chai@5.2.3': dependencies: @@ -19997,47 +20885,140 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 22.13.13 + '@types/node': 25.6.0 '@types/cors@2.8.19': dependencies: - '@types/node': 22.13.13 + '@types/node': 25.6.0 '@types/d3-array@3.2.2': {} + '@types/d3-axis@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-brush@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-chord@3.0.6': {} + '@types/d3-color@3.1.3': {} + '@types/d3-contour@3.0.6': + dependencies: + '@types/d3-array': 3.2.2 + '@types/geojson': 7946.0.16 + + '@types/d3-delaunay@6.0.4': {} + + '@types/d3-dispatch@3.0.7': {} + + '@types/d3-drag@3.0.7': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-dsv@3.0.7': {} + '@types/d3-ease@3.0.2': {} + '@types/d3-fetch@3.0.7': + dependencies: + '@types/d3-dsv': 3.0.7 + + '@types/d3-force@3.0.10': {} + + '@types/d3-format@3.0.4': {} + + '@types/d3-geo@3.1.0': + dependencies: + '@types/geojson': 7946.0.16 + + '@types/d3-hierarchy@3.1.7': {} + '@types/d3-interpolate@3.0.4': dependencies: '@types/d3-color': 3.1.3 '@types/d3-path@3.1.1': {} + '@types/d3-polygon@3.0.2': {} + + '@types/d3-quadtree@3.0.6': {} + + '@types/d3-random@3.0.4': {} + + '@types/d3-scale-chromatic@3.1.0': {} + '@types/d3-scale@4.0.9': dependencies: '@types/d3-time': 3.0.4 + '@types/d3-selection@3.0.11': {} + '@types/d3-shape@3.1.8': dependencies: '@types/d3-path': 3.1.1 + '@types/d3-time-format@4.0.3': {} + '@types/d3-time@3.0.4': {} '@types/d3-timer@3.0.2': {} - '@types/debug@4.1.13': + '@types/d3-transition@3.0.9': dependencies: - '@types/ms': 2.1.0 - - '@types/deep-eql@4.0.2': {} + '@types/d3-selection': 3.0.11 - '@types/diff@6.0.0': {} + '@types/d3-zoom@3.0.8': + dependencies: + '@types/d3-interpolate': 3.0.4 + '@types/d3-selection': 3.0.11 - '@types/eslint-scope@3.7.7': + '@types/d3@7.4.3': dependencies: - '@types/eslint': 9.6.1 + '@types/d3-array': 3.2.2 + '@types/d3-axis': 3.0.6 + '@types/d3-brush': 3.0.6 + '@types/d3-chord': 3.0.6 + '@types/d3-color': 3.1.3 + '@types/d3-contour': 3.0.6 + '@types/d3-delaunay': 6.0.4 + '@types/d3-dispatch': 3.0.7 + '@types/d3-drag': 3.0.7 + '@types/d3-dsv': 3.0.7 + '@types/d3-ease': 3.0.2 + '@types/d3-fetch': 3.0.7 + '@types/d3-force': 3.0.10 + '@types/d3-format': 3.0.4 + '@types/d3-geo': 3.1.0 + '@types/d3-hierarchy': 3.1.7 + '@types/d3-interpolate': 3.0.4 + '@types/d3-path': 3.1.1 + '@types/d3-polygon': 3.0.2 + '@types/d3-quadtree': 3.0.6 + '@types/d3-random': 3.0.4 + '@types/d3-scale': 4.0.9 + '@types/d3-scale-chromatic': 3.1.0 + '@types/d3-selection': 3.0.11 + '@types/d3-shape': 3.1.8 + '@types/d3-time': 3.0.4 + '@types/d3-time-format': 4.0.3 + '@types/d3-timer': 3.0.2 + '@types/d3-transition': 3.0.9 + '@types/d3-zoom': 3.0.8 + + '@types/debug@4.1.13': + dependencies: + '@types/ms': 2.1.0 + + '@types/deep-eql@4.0.2': {} + + '@types/diff@6.0.0': {} + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 '@types/estree': 1.0.8 '@types/eslint@9.6.1': @@ -20051,34 +21032,15 @@ snapshots: '@types/estree@1.0.8': {} - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.3 + '@types/geojson@7946.0.16': {} - '@types/istanbul-lib-coverage@2.0.6': {} - - '@types/istanbul-lib-report@3.0.3': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - - '@types/istanbul-reports@3.0.4': + '@types/hast@3.0.5': dependencies: - '@types/istanbul-lib-report': 3.0.3 - - '@types/jest-image-snapshot@6.4.1': - dependencies: - '@types/jest': 30.0.0 - '@types/pixelmatch': 5.2.6 - ssim.js: 3.5.0 - - '@types/jest@30.0.0': - dependencies: - expect: 30.3.0 - pretty-format: 30.3.0 + '@types/unist': 3.0.3 '@types/jsdom@21.1.7': dependencies: - '@types/node': 22.13.13 + '@types/node': 25.6.0 '@types/tough-cookie': 4.0.5 parse5: 7.3.0 @@ -20088,6 +21050,8 @@ snapshots: '@types/json5@0.0.29': {} + '@types/katex@0.16.8': {} + '@types/lodash.foreach@4.5.9': dependencies: '@types/lodash': 4.17.24 @@ -20116,15 +21080,7 @@ snapshots: '@types/mysql@2.15.27': dependencies: - '@types/node': 22.13.13 - - '@types/node@20.19.39': - dependencies: - undici-types: 6.21.0 - - '@types/node@22.13.13': - dependencies: - undici-types: 6.20.0 + '@types/node': 25.6.0 '@types/node@25.6.0': dependencies: @@ -20132,7 +21088,7 @@ snapshots: '@types/nodemailer@7.0.11': dependencies: - '@types/node': 22.13.13 + '@types/node': 25.6.0 '@types/parse-json@4.0.2': {} @@ -20142,20 +21098,16 @@ snapshots: '@types/pg@8.15.6': dependencies: - '@types/node': 22.13.13 + '@types/node': 25.6.0 pg-protocol: 1.13.0 pg-types: 2.2.0 '@types/pg@8.20.0': dependencies: - '@types/node': 22.13.13 + '@types/node': 25.6.0 pg-protocol: 1.13.0 pg-types: 2.2.0 - '@types/pixelmatch@5.2.6': - dependencies: - '@types/node': 22.13.13 - '@types/prop-types@15.7.15': {} '@types/react-dom@19.2.3(@types/react@19.2.14)': @@ -20172,16 +21124,17 @@ snapshots: '@types/retry@0.12.2': {} - '@types/stack-utils@2.0.3': {} - '@types/statuses@2.0.6': {} '@types/tedious@4.0.14': dependencies: - '@types/node': 22.13.13 + '@types/node': 25.6.0 '@types/tough-cookie@4.0.5': {} + '@types/trusted-types@2.0.7': + optional: true + '@types/unist@2.0.11': {} '@types/unist@3.0.3': {} @@ -20193,49 +21146,72 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 22.13.13 + '@types/node': 25.6.0 - '@types/yargs-parser@21.0.3': {} + '@typescript/typescript-aix-ppc64@7.0.2': + optional: true - '@types/yargs@17.0.35': - dependencies: - '@types/yargs-parser': 21.0.3 + '@typescript/typescript-darwin-arm64@7.0.2': + optional: true - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260615.1': + '@typescript/typescript-darwin-x64@7.0.2': optional: true - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260615.1': + '@typescript/typescript-freebsd-arm64@7.0.2': optional: true - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260615.1': + '@typescript/typescript-freebsd-x64@7.0.2': optional: true - '@typescript/native-preview-linux-arm@7.0.0-dev.20260615.1': + '@typescript/typescript-linux-arm64@7.0.2': optional: true - '@typescript/native-preview-linux-x64@7.0.0-dev.20260615.1': + '@typescript/typescript-linux-arm@7.0.2': optional: true - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260615.1': + '@typescript/typescript-linux-loong64@7.0.2': optional: true - '@typescript/native-preview-win32-x64@7.0.0-dev.20260615.1': + '@typescript/typescript-linux-mips64el@7.0.2': optional: true - '@typescript/native-preview@7.0.0-dev.20260615.1': - optionalDependencies: - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260615.1 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260615.1 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20260615.1 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260615.1 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20260615.1 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260615.1 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20260615.1 + '@typescript/typescript-linux-ppc64@7.0.2': + optional: true + + '@typescript/typescript-linux-riscv64@7.0.2': + optional: true + + '@typescript/typescript-linux-s390x@7.0.2': + optional: true + + '@typescript/typescript-linux-x64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-x64@7.0.2': + optional: true - '@typescript/vfs@1.6.4(typescript@5.9.3)': + '@typescript/typescript-sunos-x64@7.0.2': + optional: true + + '@typescript/typescript-win32-arm64@7.0.2': + optional: true + + '@typescript/typescript-win32-x64@7.0.2': + optional: true + + '@typescript/vfs@1.6.4(typescript@7.0.2)': dependencies: debug: 4.4.3 - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - supports-color @@ -20368,42 +21344,40 @@ snapshots: '@uppy/core': 3.13.1 '@uppy/utils': 5.9.0 - '@vercel/analytics@1.6.1(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)': + '@upsetjs/venn.js@2.0.0': optionalDependencies: - next: 16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + '@vercel/analytics@1.6.1(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)': + optionalDependencies: + next: 16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) react: 19.2.5 '@vercel/oidc@3.0.5': {} - '@vitejs/devtools-kit@0.1.13(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(ws@8.20.0)': + '@vitejs/devtools-kit@0.1.13(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(ws@8.20.0)': dependencies: - '@vitejs/devtools-rpc': 0.1.13(typescript@5.9.3)(ws@8.20.0) + '@vitejs/devtools-rpc': 0.1.13(typescript@7.0.2)(ws@8.20.0) birpc: 4.0.0 ohash: 2.0.11 - vite: 8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - typescript - ws - '@vitejs/devtools-rpc@0.1.13(typescript@5.9.3)(ws@8.20.0)': + '@vitejs/devtools-rpc@0.1.13(typescript@7.0.2)(ws@8.20.0)': dependencies: birpc: 4.0.0 ohash: 2.0.11 p-limit: 7.3.0 structured-clone-es: 2.0.0 - valibot: 1.3.1(typescript@5.9.3) + valibot: 1.3.1(typescript@7.0.2) optionalDependencies: ws: 8.20.0 transitivePeerDependencies: - typescript - '@vitejs/plugin-react@6.0.1(babel-plugin-react-compiler@1.0.0)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))': - dependencies: - '@rolldown/pluginutils': 1.0.0-rc.7 - vite: 8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) - optionalDependencies: - babel-plugin-react-compiler: 1.0.0 - '@vitejs/plugin-react@6.0.1(babel-plugin-react-compiler@1.0.0)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.7 @@ -20411,402 +21385,159 @@ snapshots: optionalDependencies: babel-plugin-react-compiler: 1.0.0 - '@vitest/expect@4.1.7': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@vitest/spy': 4.1.7 - '@vitest/utils': 4.1.7 - chai: 6.2.2 - tinyrainbow: 3.1.0 - - '@vitest/mocker@4.1.7(msw@2.11.5(@types/node@20.19.39)(typescript@5.9.3))(vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))': - dependencies: - '@vitest/spy': 4.1.7 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - msw: 2.11.5(@types/node@20.19.39)(typescript@5.9.3) - vite: 8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) - - '@vitest/mocker@4.1.7(msw@2.11.5(@types/node@25.6.0)(typescript@5.9.3))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))': - dependencies: - '@vitest/spy': 4.1.7 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - msw: 2.11.5(@types/node@25.6.0)(typescript@5.9.3) - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) - optional: true - - '@vitest/pretty-format@4.1.5': + '@vitest/browser-playwright@4.1.10(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(playwright@1.60.0)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(vitest@4.1.10)': dependencies: + '@vitest/browser': 4.1.10(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(vitest@4.1.10) + '@vitest/mocker': 4.1.10(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + playwright: 1.60.0 tinyrainbow: 3.1.0 - - '@vitest/pretty-format@4.1.7': - dependencies: - tinyrainbow: 3.1.0 - - '@vitest/runner@4.1.7': - dependencies: - '@vitest/utils': 4.1.7 - pathe: 2.0.3 - - '@vitest/snapshot@4.1.7': - dependencies: - '@vitest/pretty-format': 4.1.7 - '@vitest/utils': 4.1.7 - magic-string: 0.30.21 - pathe: 2.0.3 - - '@vitest/spy@4.1.7': {} - - '@vitest/ui@4.1.5(vitest@4.1.7)': - dependencies: - '@vitest/utils': 4.1.5 - fflate: 0.8.3 - flatted: 3.4.2 - pathe: 2.0.3 - sirv: 3.0.2 - tinyglobby: 0.2.16 - tinyrainbow: 3.1.0 - vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(@vitest/ui@4.1.5)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@20.19.39)(typescript@5.9.3))(vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) - - '@vitest/utils@4.1.5': - dependencies: - '@vitest/pretty-format': 4.1.5 - convert-source-map: 2.0.0 - tinyrainbow: 3.1.0 - - '@vitest/utils@4.1.7': - dependencies: - '@vitest/pretty-format': 4.1.7 - convert-source-map: 2.0.0 - tinyrainbow: 3.1.0 - - '@voidzero-dev/vite-plus-core@0.1.24(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0)': - dependencies: - '@oxc-project/runtime': 0.133.0 - '@oxc-project/types': 0.133.0 - lightningcss: 1.32.0 - postcss: 8.5.14 - optionalDependencies: - '@types/node': 20.19.39 - esbuild: 0.27.5 - fsevents: 2.3.3 - jiti: 2.6.1 - terser: 5.46.2 - tsx: 4.21.0 - typescript: 5.9.3 - yaml: 2.9.0 - - '@voidzero-dev/vite-plus-core@0.1.24(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0)': - dependencies: - '@oxc-project/runtime': 0.133.0 - '@oxc-project/types': 0.133.0 - lightningcss: 1.32.0 - postcss: 8.5.14 - optionalDependencies: - '@types/node': 22.13.13 - esbuild: 0.27.5 - fsevents: 2.3.3 - jiti: 2.6.1 - terser: 5.46.2 - tsx: 4.21.0 - typescript: 5.9.3 - yaml: 2.9.0 - - '@voidzero-dev/vite-plus-core@0.1.24(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0)': - dependencies: - '@oxc-project/runtime': 0.133.0 - '@oxc-project/types': 0.133.0 - lightningcss: 1.32.0 - postcss: 8.5.14 - optionalDependencies: - '@types/node': 25.6.0 - esbuild: 0.27.5 - fsevents: 2.3.3 - jiti: 2.6.1 - terser: 5.46.2 - tsx: 4.21.0 - typescript: 5.9.3 - yaml: 2.9.0 - - '@voidzero-dev/vite-plus-darwin-arm64@0.1.24': - optional: true - - '@voidzero-dev/vite-plus-darwin-x64@0.1.24': - optional: true - - '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.24': - optional: true - - '@voidzero-dev/vite-plus-linux-arm64-musl@0.1.24': - optional: true - - '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.24': - optional: true - - '@voidzero-dev/vite-plus-linux-x64-musl@0.1.24': - optional: true - - '@voidzero-dev/vite-plus-test@0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(@vitest/ui@4.1.5)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@voidzero-dev/vite-plus-core': 0.1.24(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0) - es-module-lexer: 1.7.0 - obug: 2.1.1 - pixelmatch: 7.2.0 - pngjs: 7.0.0 - sirv: 3.0.2 - std-env: 4.0.0 - tinybench: 2.9.0 - tinyexec: 1.2.4 - tinyglobby: 0.2.16 - vite: 8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) - ws: 8.20.0 - optionalDependencies: - '@opentelemetry/api': 1.9.1 - '@types/node': 20.19.39 - '@vitest/ui': 4.1.5(vitest@4.1.7) - jsdom: 29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0) + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(@vitest/browser-preview@4.1.10)(@vitest/ui@4.1.5)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@tsdown/css' - - '@tsdown/exe' - - '@vitejs/devtools' - bufferutil - - esbuild - - jiti - - less - - publint - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - typescript - - unplugin-unused - - unrun + - msw - utf-8-validate - - yaml + - vite - '@voidzero-dev/vite-plus-test@0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)': + '@vitest/browser-preview@4.1.10(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(vitest@4.1.10)': dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@voidzero-dev/vite-plus-core': 0.1.24(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0) - es-module-lexer: 1.7.0 - obug: 2.1.1 - pixelmatch: 7.2.0 - pngjs: 7.0.0 - sirv: 3.0.2 - std-env: 4.0.0 - tinybench: 2.9.0 - tinyexec: 1.2.4 - tinyglobby: 0.2.16 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) - ws: 8.20.0 - optionalDependencies: - '@opentelemetry/api': 1.9.1 - '@types/node': 20.19.39 - jsdom: 29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0) + '@testing-library/dom': 10.4.1 + '@testing-library/user-event': 14.6.3(@testing-library/dom@10.4.1) + '@vitest/browser': 4.1.10(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(vitest@4.1.10) + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(@vitest/browser-preview@4.1.10)(@vitest/ui@4.1.5)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@tsdown/css' - - '@tsdown/exe' - - '@vitejs/devtools' - bufferutil - - esbuild - - jiti - - less - - publint - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - typescript - - unplugin-unused - - unrun + - msw - utf-8-validate - - yaml + - vite - '@voidzero-dev/vite-plus-test@0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)': + '@vitest/browser@4.1.10(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(vitest@4.1.10)': dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@voidzero-dev/vite-plus-core': 0.1.24(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0) - es-module-lexer: 1.7.0 - obug: 2.1.1 - pixelmatch: 7.2.0 + '@blazediff/core': 1.9.1 + '@vitest/mocker': 4.1.10(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + '@vitest/utils': 4.1.10 + magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 - std-env: 4.0.0 - tinybench: 2.9.0 - tinyexec: 1.2.4 - tinyglobby: 0.2.16 - vite: 8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + tinyrainbow: 3.1.0 + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(@vitest/browser-preview@4.1.10)(@vitest/ui@4.1.5)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) ws: 8.20.0 - optionalDependencies: - '@opentelemetry/api': 1.9.1 - '@types/node': 22.13.13 - jsdom: 29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0) transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@tsdown/css' - - '@tsdown/exe' - - '@vitejs/devtools' - bufferutil - - esbuild - - jiti - - less - - publint - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - typescript - - unplugin-unused - - unrun + - msw - utf-8-validate - - yaml + - vite - '@voidzero-dev/vite-plus-test@0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)': + '@vitest/expect@4.1.10': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@voidzero-dev/vite-plus-core': 0.1.24(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0) - es-module-lexer: 1.7.0 - obug: 2.1.1 - pixelmatch: 7.2.0 - pngjs: 7.0.0 - sirv: 3.0.2 - std-env: 4.0.0 - tinybench: 2.9.0 - tinyexec: 1.2.4 - tinyglobby: 0.2.16 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) - ws: 8.20.0 - optionalDependencies: - '@opentelemetry/api': 1.9.1 - '@types/node': 22.13.13 - jsdom: 29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0) - transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@tsdown/css' - - '@tsdown/exe' - - '@vitejs/devtools' - - bufferutil - - esbuild - - jiti - - less - - publint - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - typescript - - unplugin-unused - - unrun - - utf-8-validate - - yaml + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 + chai: 6.2.2 + tinyrainbow: 3.1.0 - '@voidzero-dev/vite-plus-test@0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@25.0.1(canvas@2.11.2))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)': + '@vitest/mocker@4.1.10(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))': dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@voidzero-dev/vite-plus-core': 0.1.24(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0) - es-module-lexer: 1.7.0 - obug: 2.1.1 - pixelmatch: 7.2.0 - pngjs: 7.0.0 - sirv: 3.0.2 - std-env: 4.0.0 - tinybench: 2.9.0 - tinyexec: 1.2.4 - tinyglobby: 0.2.16 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) - ws: 8.20.0 + '@vitest/spy': 4.1.10 + estree-walker: 3.0.3 + magic-string: 0.30.21 optionalDependencies: - '@opentelemetry/api': 1.9.1 - '@types/node': 25.6.0 - jsdom: 25.0.1(canvas@2.11.2) - transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@tsdown/css' - - '@tsdown/exe' - - '@vitejs/devtools' - - bufferutil - - esbuild - - jiti - - less - - publint - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - typescript - - unplugin-unused - - unrun - - utf-8-validate - - yaml + msw: 2.11.5(@types/node@25.6.0)(typescript@7.0.2) + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + + '@vitest/pretty-format@4.1.10': + dependencies: + tinyrainbow: 3.1.0 + + '@vitest/pretty-format@4.1.5': + dependencies: + tinyrainbow: 3.1.0 + + '@vitest/runner@4.1.10': + dependencies: + '@vitest/utils': 4.1.10 + pathe: 2.0.3 + + '@vitest/snapshot@4.1.10': + dependencies: + '@vitest/pretty-format': 4.1.10 + '@vitest/utils': 4.1.10 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.1.10': {} - '@voidzero-dev/vite-plus-test@0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)': + '@vitest/ui@4.1.5(vitest@4.1.10)': dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@voidzero-dev/vite-plus-core': 0.1.24(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0) - es-module-lexer: 1.7.0 - obug: 2.1.1 - pixelmatch: 7.2.0 - pngjs: 7.0.0 + '@vitest/utils': 4.1.5 + fflate: 0.8.3 + flatted: 3.4.2 + pathe: 2.0.3 sirv: 3.0.2 - std-env: 4.0.0 - tinybench: 2.9.0 - tinyexec: 1.2.4 - tinyglobby: 0.2.16 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) - ws: 8.20.0 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.0 + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(@vitest/browser-preview@4.1.10)(@vitest/ui@4.1.5)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + + '@vitest/utils@4.1.10': + dependencies: + '@vitest/pretty-format': 4.1.10 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 + + '@vitest/utils@4.1.5': + dependencies: + '@vitest/pretty-format': 4.1.5 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 + + '@voidzero-dev/vite-plus-core@0.2.9(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(yaml@2.9.0)': + dependencies: + '@oxc-project/runtime': 0.143.0 + '@oxc-project/types': 0.143.0 + lightningcss: 1.33.0 + postcss: 8.5.14 + yuku-codegen: 0.5.48 + yuku-parser: 0.5.48 optionalDependencies: - '@opentelemetry/api': 1.9.1 '@types/node': 25.6.0 - jsdom: 29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0) - transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@tsdown/css' - - '@tsdown/exe' - - '@vitejs/devtools' - - bufferutil - - esbuild - - jiti - - less - - publint - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - typescript - - unplugin-unused - - unrun - - utf-8-validate - - yaml + '@voidzero-dev/vite-plus-darwin-arm64': 0.2.9 + '@voidzero-dev/vite-plus-darwin-x64': 0.2.9 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.2.9 + '@voidzero-dev/vite-plus-linux-arm64-musl': 0.2.9 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.2.9 + '@voidzero-dev/vite-plus-linux-x64-musl': 0.2.9 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.2.9 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.2.9 + esbuild: 0.27.5 + fsevents: 2.3.3 + jiti: 2.6.1 + terser: 5.46.2 + tsx: 4.21.0 + typescript: 7.0.2 + yaml: 2.9.0 + + '@voidzero-dev/vite-plus-darwin-arm64@0.2.9': + optional: true + + '@voidzero-dev/vite-plus-darwin-x64@0.2.9': + optional: true + + '@voidzero-dev/vite-plus-linux-arm64-gnu@0.2.9': + optional: true + + '@voidzero-dev/vite-plus-linux-arm64-musl@0.2.9': + optional: true + + '@voidzero-dev/vite-plus-linux-x64-gnu@0.2.9': + optional: true + + '@voidzero-dev/vite-plus-linux-x64-musl@0.2.9': + optional: true - '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.24': + '@voidzero-dev/vite-plus-win32-arm64-msvc@0.2.9': optional: true - '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.24': + '@voidzero-dev/vite-plus-win32-x64-msvc@0.2.9': optional: true '@webassemblyjs/ast@1.14.1': @@ -20885,6 +21616,8 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 + '@xmldom/xmldom@0.9.10': {} + '@xtuc/ieee754@1.2.0': {} '@xtuc/long@4.2.2': {} @@ -20905,7 +21638,7 @@ snapshots: '@y-sweet/sdk@0.6.4': dependencies: - '@types/node': 20.19.39 + '@types/node': 25.6.0 '@y/prosemirror@2.0.0-6(patch_hash=e49b17b47e301dd138d7e383a779a0e2125bf7f038e10e3c740e26b43d988776)(@y/protocols@1.0.6-rc.1(@y/y@14.0.0-rc.23))(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.2)': dependencies: @@ -20931,13 +21664,78 @@ snapshots: dependencies: lib0: 1.0.0-rc.22 - '@zeit/schemas@2.36.0': {} + '@yuku-codegen/binding-darwin-arm64@0.5.48': + optional: true - '@zip.js/zip.js@2.8.26': {} + '@yuku-codegen/binding-darwin-x64@0.5.48': + optional: true + + '@yuku-codegen/binding-freebsd-x64@0.5.48': + optional: true + + '@yuku-codegen/binding-linux-arm-gnu@0.5.48': + optional: true + + '@yuku-codegen/binding-linux-arm-musl@0.5.48': + optional: true + + '@yuku-codegen/binding-linux-arm64-gnu@0.5.48': + optional: true + + '@yuku-codegen/binding-linux-arm64-musl@0.5.48': + optional: true + + '@yuku-codegen/binding-linux-x64-gnu@0.5.48': + optional: true + + '@yuku-codegen/binding-linux-x64-musl@0.5.48': + optional: true + + '@yuku-codegen/binding-win32-arm64@0.5.48': + optional: true + + '@yuku-codegen/binding-win32-x64@0.5.48': + optional: true + + '@yuku-parser/binding-darwin-arm64@0.5.48': + optional: true + + '@yuku-parser/binding-darwin-x64@0.5.48': + optional: true + + '@yuku-parser/binding-freebsd-x64@0.5.48': + optional: true + + '@yuku-parser/binding-linux-arm-gnu@0.5.48': + optional: true + + '@yuku-parser/binding-linux-arm-musl@0.5.48': + optional: true + + '@yuku-parser/binding-linux-arm64-gnu@0.5.48': + optional: true + + '@yuku-parser/binding-linux-arm64-musl@0.5.48': + optional: true + + '@yuku-parser/binding-linux-x64-gnu@0.5.48': + optional: true + + '@yuku-parser/binding-linux-x64-musl@0.5.48': + optional: true + + '@yuku-parser/binding-win32-arm64@0.5.48': + optional: true - abbrev@1.1.1: + '@yuku-parser/binding-win32-x64@0.5.48': optional: true + '@yuku-toolchain/types@0.5.43': {} + + '@zeit/schemas@2.36.0': {} + + '@zip.js/zip.js@2.8.26': {} + abs-svg-path@0.1.1: {} abstract-leveldown@6.2.3: @@ -20983,8 +21781,6 @@ snapshots: transitivePeerDependencies: - supports-color - agent-base@7.1.4: {} - ai@6.0.5(zod@4.3.6): dependencies: '@ai-sdk/gateway': 3.0.4(zod@4.3.6) @@ -21045,17 +21841,8 @@ snapshots: ansis@4.2.0: {} - aproba@2.1.0: - optional: true - arch@2.2.0: {} - are-we-there-yet@2.0.0: - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.2 - optional: true - arg@5.0.2: {} argparse@1.0.10: @@ -21186,7 +21973,7 @@ snapshots: baseline-browser-mapping@2.10.17: {} - better-auth@1.4.22(better-sqlite3@12.8.0)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@5.9.3))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))): + better-auth@1.4.22(better-sqlite3@12.8.0)(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.10): dependencies: '@better-auth/core': 1.4.22(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.2)(kysely@0.28.15)(nanostores@1.2.0) '@better-auth/telemetry': 1.4.22(@better-auth/core@1.4.22(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.2)(kysely@0.28.15)(nanostores@1.2.0)) @@ -21202,11 +21989,11 @@ snapshots: zod: 4.3.6 optionalDependencies: better-sqlite3: 12.8.0 - next: 16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + next: 16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) pg: 8.20.0 react: 19.2.5 react-dom: 19.2.5(react@19.2.5) - vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@5.9.3))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(@vitest/browser-preview@4.1.10)(@vitest/ui@4.1.5)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) better-call@1.1.8(zod@4.3.6): dependencies: @@ -21352,20 +22139,11 @@ snapshots: caniuse-lite@1.0.30001787: {} - canvas@2.11.2: - dependencies: - '@mapbox/node-pre-gyp': 1.0.11 - nan: 2.26.2 - simple-get: 3.1.1 - transitivePeerDependencies: - - encoding - - supports-color - optional: true - canvas@3.1.0: dependencies: node-addon-api: 7.1.1 prebuild-install: 7.1.3 + optional: true ccount@2.0.1: {} @@ -21420,13 +22198,8 @@ snapshots: chownr@1.1.4: {} - chownr@2.0.0: - optional: true - chrome-trace-event@1.0.4: {} - ci-info@4.4.0: {} - citty@0.1.6: dependencies: consola: 3.4.2 @@ -21489,13 +22262,11 @@ snapshots: color-name@1.1.4: {} - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.4 + color-name@2.1.0: {} - color-support@1.1.3: - optional: true + color-string@2.1.4: + dependencies: + color-name: 2.1.0 combined-stream@1.0.8: dependencies: @@ -21507,6 +22278,10 @@ snapshots: commander@2.20.3: {} + commander@7.2.0: {} + + commander@8.3.0: {} + commondir@1.0.1: {} compressible@2.0.18: @@ -21555,9 +22330,6 @@ snapshots: consola@3.4.2: {} - console-control-strings@1.1.0: - optional: true - content-disposition@0.5.2: {} convert-gitmoji@0.1.5: {} @@ -21577,6 +22349,14 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 + cose-base@1.0.3: + dependencies: + layout-base: 1.0.2 + + cose-base@2.2.0: + dependencies: + layout-base: 2.0.1 + cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 @@ -21595,8 +22375,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - crypto-js@4.2.0: {} - css-tree@3.2.1: dependencies: mdn-data: 2.27.1 @@ -21604,29 +22382,109 @@ snapshots: cssesc@3.0.0: {} - cssstyle@4.6.0: + csstype@3.2.3: {} + + cytoscape-cose-bilkent@4.1.0(cytoscape@3.34.0): dependencies: - '@asamuzakjp/css-color': 3.2.0 - rrweb-cssom: 0.8.0 + cose-base: 1.0.3 + cytoscape: 3.34.0 - csstype@3.2.3: {} + cytoscape-fcose@2.2.0(cytoscape@3.34.0): + dependencies: + cose-base: 2.2.0 + cytoscape: 3.34.0 + + cytoscape@3.34.0: {} + + d3-array@2.12.1: + dependencies: + internmap: 1.0.1 d3-array@3.2.4: dependencies: internmap: 2.0.3 + d3-axis@3.0.0: {} + + d3-brush@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3-chord@3.0.1: + dependencies: + d3-path: 3.1.0 + d3-color@3.1.0: {} + d3-contour@4.0.2: + dependencies: + d3-array: 3.2.4 + + d3-delaunay@6.0.4: + dependencies: + delaunator: 5.1.0 + + d3-dispatch@3.0.1: {} + + d3-drag@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + + d3-dsv@3.0.1: + dependencies: + commander: 7.2.0 + iconv-lite: 0.6.3 + rw: 1.3.3 + d3-ease@3.0.1: {} + d3-fetch@3.0.1: + dependencies: + d3-dsv: 3.0.1 + + d3-force@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + d3-format@3.1.2: {} + d3-geo@3.1.1: + dependencies: + d3-array: 3.2.4 + + d3-hierarchy@3.1.2: {} + d3-interpolate@3.0.1: dependencies: d3-color: 3.1.0 + d3-path@1.0.9: {} + d3-path@3.1.0: {} + d3-polygon@3.0.1: {} + + d3-quadtree@3.0.1: {} + + d3-random@3.0.1: {} + + d3-sankey@0.12.3: + dependencies: + d3-array: 2.12.1 + d3-shape: 1.3.7 + + d3-scale-chromatic@3.1.0: + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 + d3-scale@4.0.2: dependencies: d3-array: 3.2.4 @@ -21635,6 +22493,12 @@ snapshots: d3-time: 3.1.0 d3-time-format: 4.1.0 + d3-selection@3.0.0: {} + + d3-shape@1.3.7: + dependencies: + d3-path: 1.0.9 + d3-shape@3.2.0: dependencies: d3-path: 3.1.0 @@ -21649,10 +22513,60 @@ snapshots: d3-timer@3.0.1: {} - data-urls@5.0.0: + d3-transition@3.0.1(d3-selection@3.0.0): + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + + d3-zoom@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3@7.9.0: + dependencies: + d3-array: 3.2.4 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 4.0.2 + d3-delaunay: 6.0.4 + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-fetch: 3.0.1 + d3-force: 3.0.0 + d3-format: 3.1.2 + d3-geo: 3.1.1 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-path: 3.1.0 + d3-polygon: 3.0.1 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.1.0 + d3-selection: 3.0.0 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + d3-timer: 3.0.1 + d3-transition: 3.0.1(d3-selection@3.0.0) + d3-zoom: 3.0.0 + + dagre-d3-es@7.0.14: dependencies: - whatwg-mimetype: 4.0.0 - whatwg-url: 14.2.0 + d3: 7.9.0 + lodash-es: 4.18.1 data-urls@7.0.0(@noble/hashes@2.0.1): dependencies: @@ -21683,6 +22597,8 @@ snapshots: date-fns@4.1.0: {} + dayjs@1.11.21: {} + debounce-fn@6.0.0: dependencies: mimic-function: 5.0.1 @@ -21709,11 +22625,6 @@ snapshots: dependencies: character-entities: 2.0.2 - decompress-response@4.2.1: - dependencies: - mimic-response: 2.1.0 - optional: true - decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 @@ -21753,10 +22664,11 @@ snapshots: defu@6.1.6: {} - delayed-stream@1.0.0: {} + delaunator@5.1.0: + dependencies: + robust-predicates: 3.0.3 - delegates@1.0.0: - optional: true + delayed-stream@1.0.0: {} dequal@2.0.3: {} @@ -21806,6 +22718,10 @@ snapshots: dependencies: domelementtype: 2.3.0 + dompurify@3.4.12: + optionalDependencies: + '@types/trusted-types': 2.0.7 + domutils@3.2.2: dependencies: dom-serializer: 2.0.0 @@ -21857,7 +22773,7 @@ snapshots: engine.io@6.6.6: dependencies: '@types/cors': 2.8.19 - '@types/node': 22.13.13 + '@types/node': 25.6.0 '@types/ws': 8.18.1 accepts: 1.3.8 base64id: 2.0.0 @@ -21954,8 +22870,6 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@1.7.0: {} - es-module-lexer@2.1.0: {} es-object-atoms@1.1.1: @@ -22055,8 +22969,6 @@ snapshots: escalade@3.2.0: {} - escape-string-regexp@2.0.0: {} - escape-string-regexp@4.0.0: {} escape-string-regexp@5.0.0: {} @@ -22160,6 +23072,8 @@ snapshots: transitivePeerDependencies: - supports-color + esm@3.2.25: {} + espree@10.4.0: dependencies: acorn: 8.16.0 @@ -22249,15 +23163,6 @@ snapshots: expect-type@1.3.0: {} - expect@30.3.0: - dependencies: - '@jest/expect-utils': 30.3.0 - '@jest/get-type': 30.1.0 - jest-matcher-utils: 30.3.0 - jest-message-util: 30.3.0 - jest-mock: 30.3.0 - jest-util: 30.3.0 - exsolve@1.0.8: {} extend-shallow@2.0.1: @@ -22365,25 +23270,17 @@ snapshots: fs-constants@1.0.0: {} - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - optional: true - - fs.realpath@1.0.0: - optional: true - fsevents@2.3.2: optional: true fsevents@2.3.3: optional: true - fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6): + fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6): dependencies: '@formatjs/intl-localematcher': 0.8.2 '@orama/orama': 3.1.18 - '@shikijs/rehype': 3.23.0 + '@shikijs/rehype': 4.4.3 '@shikijs/transformers': 3.23.0 estree-util-value-to-estree: 3.5.0 github-slugger: 2.0.0 @@ -22397,27 +23294,27 @@ snapshots: remark-gfm: 4.0.1 remark-rehype: 11.1.2 scroll-into-view-if-needed: 3.1.0 - shiki: 3.23.0 + shiki: 4.4.3 tinyglobby: 0.2.16 unist-util-visit: 5.1.0 optionalDependencies: '@types/react': 19.2.14 lucide-react: 0.562.0(react@19.2.5) - next: 16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + next: 16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) react: 19.2.5 react-dom: 19.2.5(react@19.2.5) zod: 4.3.6 transitivePeerDependencies: - supports-color - fumadocs-mdx@14.2.11(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)): + fumadocs-mdx@14.2.11(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)): dependencies: '@mdx-js/mdx': 3.1.1 '@standard-schema/spec': 1.1.0 chokidar: 5.0.0 esbuild: 0.27.5 estree-util-value-to-estree: 3.5.0 - fumadocs-core: 16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6) + fumadocs-core: 16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6) js-yaml: 4.1.1 mdast-util-mdx: 3.0.0 mdast-util-to-markdown: 2.1.2 @@ -22434,24 +23331,24 @@ snapshots: '@types/mdast': 4.0.4 '@types/mdx': 2.0.13 '@types/react': 19.2.14 - next: 16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + next: 16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) react: 19.2.5 vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color - fumadocs-twoslash@3.1.15(@fumadocs/base-ui@16.5.0(@types/react@19.2.14)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3): + fumadocs-twoslash@3.1.15(@fumadocs/base-ui@16.5.0(@date-fns/tz@1.4.1)(@types/react@19.2.14)(date-fns@4.1.0)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@7.0.2): 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.5(react@19.2.5))(react@19.2.5) - '@shikijs/twoslash': 4.0.2(typescript@5.9.3) - fumadocs-ui: '@fumadocs/base-ui@16.5.0(@types/react@19.2.14)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2)' + '@radix-ui/react-popover': 1.1.23(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@shikijs/twoslash': 4.0.2(typescript@7.0.2) + fumadocs-ui: '@fumadocs/base-ui@16.5.0(@date-fns/tz@1.4.1)(@types/react@19.2.14)(date-fns@4.1.0)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2)' mdast-util-from-markdown: 2.0.3 mdast-util-gfm: 3.1.0 mdast-util-to-hast: 13.2.1 react: 19.2.5 - shiki: 4.0.2 + shiki: 4.4.3 tailwind-merge: 3.5.0 - twoslash: 0.3.6(typescript@5.9.3) + twoslash: 0.3.6(typescript@7.0.2) optionalDependencies: '@types/react': 19.2.14 transitivePeerDependencies: @@ -22460,26 +23357,26 @@ snapshots: - supports-color - typescript - fumadocs-typescript@5.2.1(7b71d35b2307cf0dedaa2cbc5003f54e): + fumadocs-typescript@5.2.1(c2cf99cf8c13a0f5fb978e1c3d570ec2): dependencies: estree-util-value-to-estree: 3.5.0 - fumadocs-core: 16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6) + fumadocs-core: 16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6) hast-util-to-estree: 3.1.3 hast-util-to-jsx-runtime: 2.3.6 react: 19.2.5 remark: 15.0.1 remark-rehype: 11.1.2 ts-morph: 27.0.2 - typescript: 5.9.3 + typescript: 7.0.2 unified: 11.0.5 unist-util-visit: 5.1.0 optionalDependencies: '@types/estree': 1.0.8 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@types/react': 19.2.14 - fumadocs-ui: '@fumadocs/base-ui@16.5.0(@types/react@19.2.14)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2)' - shiki: 4.0.2 + fumadocs-ui: '@fumadocs/base-ui@16.5.0(@date-fns/tz@1.4.1)(@types/react@19.2.14)(date-fns@4.1.0)(fumadocs-core@16.5.0(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.5))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2)' + shiki: 4.4.3 transitivePeerDependencies: - supports-color @@ -22496,19 +23393,6 @@ snapshots: functions-have-names@1.2.3: {} - gauge@3.0.2: - dependencies: - aproba: 2.1.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - object-assign: 4.1.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - optional: true - generator-function@2.0.1: {} gensync@1.0.0-beta.2: {} @@ -22539,8 +23423,6 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-stdin@5.0.1: {} - get-stream@6.0.1: {} get-symbol-description@1.1.0: @@ -22582,16 +23464,6 @@ snapshots: minipass: 7.1.3 path-scurry: 2.0.2 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.5 - once: 1.4.0 - path-is-absolute: 1.0.1 - optional: true - globals@11.12.0: {} globals@14.0.0: {} @@ -22601,8 +23473,6 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 - glur@1.1.2: {} - gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -22616,6 +23486,8 @@ snapshots: section-matter: 1.0.0 strip-bom-string: 1.0.0 + hachure-fill@0.5.2: {} + has-bigints@1.1.0: {} has-flag@4.0.0: {} @@ -22632,10 +23504,7 @@ snapshots: has-tostringtag@1.0.2: dependencies: - has-symbols: 1.1.0 - - has-unicode@2.0.1: - optional: true + has-symbols: 1.1.0 hash.js@1.1.7: dependencies: @@ -22650,7 +23519,7 @@ snapshots: dependencies: '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 comma-separated-tokens: 2.0.3 devlop: 1.1.0 estree-util-attach-comments: 3.0.0 @@ -22669,7 +23538,7 @@ snapshots: hast-util-to-html@9.0.5: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/unist': 3.0.3 ccount: 2.0.1 comma-separated-tokens: 2.0.3 @@ -22684,7 +23553,7 @@ snapshots: hast-util-to-jsx-runtime@2.3.6: dependencies: '@types/estree': 1.0.8 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 devlop: 1.1.0 @@ -22703,11 +23572,11 @@ snapshots: hast-util-to-string@3.0.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-whitespace@3.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 headers-polyfill@4.0.3: {} @@ -22723,10 +23592,6 @@ snapshots: hsl-to-rgb-for-reals@1.1.1: {} - html-encoding-sniffer@4.0.0: - dependencies: - whatwg-encoding: 3.1.1 - html-encoding-sniffer@6.0.0(@noble/hashes@2.0.1): dependencies: '@exodus/bytes': 1.15.0(@noble/hashes@2.0.1) @@ -22754,13 +23619,6 @@ snapshots: domutils: 3.2.2 entities: 4.5.0 - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 @@ -22768,13 +23626,6 @@ snapshots: transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - human-signals@2.1.0: {} hyphen@1.14.1: {} @@ -22819,13 +23670,9 @@ snapshots: cjs-module-lexer: 2.2.0 module-details-from-path: 1.0.4 - imurmurhash@0.1.4: {} + import-meta-resolve@4.2.0: {} - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - optional: true + imurmurhash@0.1.4: {} inherits@2.0.4: {} @@ -22844,6 +23691,8 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 + internmap@1.0.1: {} + internmap@2.0.3: {} is-alphabetical@2.0.1: {} @@ -22861,8 +23710,6 @@ snapshots: is-arrayish@0.2.1: {} - is-arrayish@0.3.4: {} - is-async-function@2.1.1: dependencies: async-function: 1.0.0 @@ -23037,62 +23884,9 @@ snapshots: dependencies: restructure: 3.0.2 - jest-diff@30.3.0: - dependencies: - '@jest/diff-sequences': 30.3.0 - '@jest/get-type': 30.1.0 - chalk: 4.1.2 - pretty-format: 30.3.0 - - jest-image-snapshot@6.5.2: - dependencies: - chalk: 4.1.2 - get-stdin: 5.0.1 - glur: 1.1.2 - lodash: 4.18.1 - pixelmatch: 5.3.0 - pngjs: 3.4.0 - ssim.js: 3.5.0 - - jest-matcher-utils@30.3.0: - dependencies: - '@jest/get-type': 30.1.0 - chalk: 4.1.2 - jest-diff: 30.3.0 - pretty-format: 30.3.0 - - jest-message-util@30.3.0: - dependencies: - '@babel/code-frame': 7.29.0 - '@jest/types': 30.3.0 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - picomatch: 4.0.4 - pretty-format: 30.3.0 - slash: 3.0.0 - stack-utils: 2.0.6 - - jest-mock@30.3.0: - dependencies: - '@jest/types': 30.3.0 - '@types/node': 22.13.13 - jest-util: 30.3.0 - - jest-regex-util@30.0.1: {} - - jest-util@30.3.0: - dependencies: - '@jest/types': 30.3.0 - '@types/node': 22.13.13 - chalk: 4.1.2 - ci-info: 4.4.0 - graceful-fs: 4.2.11 - picomatch: 4.0.4 - jest-worker@27.5.1: dependencies: - '@types/node': 22.13.13 + '@types/node': 25.6.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -23114,6 +23908,8 @@ snapshots: js-base64@3.7.8: {} + js-md5@0.8.3: {} + js-tokens@4.0.0: {} js-yaml@3.14.2: @@ -23125,36 +23921,6 @@ snapshots: dependencies: argparse: 2.0.1 - jsdom@25.0.1(canvas@2.11.2): - dependencies: - cssstyle: 4.6.0 - data-urls: 5.0.0 - decimal.js: 10.6.0 - form-data: 4.0.5 - html-encoding-sniffer: 4.0.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.23 - parse5: 7.3.0 - rrweb-cssom: 0.7.1 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 5.1.2 - w3c-xmlserializer: 5.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 3.1.1 - whatwg-mimetype: 4.0.0 - whatwg-url: 14.2.0 - ws: 8.20.0 - xml-name-validator: 5.0.0 - optionalDependencies: - canvas: 2.11.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0): dependencies: '@asamuzakjp/css-color': 5.1.11 @@ -23214,16 +23980,26 @@ snapshots: readable-stream: 2.3.8 setimmediate: 1.0.5 + katex@0.16.47(patch_hash=cbfb6fe178282ddb73b753dcb27f891295e4f9ed85f63bc1466b4e4b1e4ef6e7): + dependencies: + commander: 8.3.0 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 + khroma@2.1.0: {} + kind-of@6.0.3: {} kleur@3.0.3: {} kysely@0.28.15: {} + layout-base@1.0.2: {} + + layout-base@2.0.1: {} + leac@0.6.0: {} level-codec@9.0.2: @@ -23302,36 +24078,69 @@ snapshots: lightningcss-android-arm64@1.32.0: optional: true + lightningcss-android-arm64@1.33.0: + optional: true + lightningcss-darwin-arm64@1.32.0: optional: true + lightningcss-darwin-arm64@1.33.0: + optional: true + lightningcss-darwin-x64@1.32.0: optional: true + lightningcss-darwin-x64@1.33.0: + optional: true + lightningcss-freebsd-x64@1.32.0: optional: true + lightningcss-freebsd-x64@1.33.0: + optional: true + lightningcss-linux-arm-gnueabihf@1.32.0: optional: true + lightningcss-linux-arm-gnueabihf@1.33.0: + optional: true + lightningcss-linux-arm64-gnu@1.32.0: optional: true + lightningcss-linux-arm64-gnu@1.33.0: + optional: true + lightningcss-linux-arm64-musl@1.32.0: optional: true + lightningcss-linux-arm64-musl@1.33.0: + optional: true + lightningcss-linux-x64-gnu@1.32.0: optional: true + lightningcss-linux-x64-gnu@1.33.0: + optional: true + lightningcss-linux-x64-musl@1.32.0: optional: true + lightningcss-linux-x64-musl@1.33.0: + optional: true + lightningcss-win32-arm64-msvc@1.32.0: optional: true + lightningcss-win32-arm64-msvc@1.33.0: + optional: true + lightningcss-win32-x64-msvc@1.32.0: optional: true + lightningcss-win32-x64-msvc@1.33.0: + optional: true + lightningcss@1.32.0: dependencies: detect-libc: 2.1.2 @@ -23348,6 +24157,22 @@ snapshots: lightningcss-win32-arm64-msvc: 1.32.0 lightningcss-win32-x64-msvc: 1.32.0 + lightningcss@1.33.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 + linebreak@1.1.0: dependencies: base64-js: 0.0.8 @@ -23361,6 +24186,8 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash-es@4.18.1: {} + lodash.debounce@4.0.8: {} lodash.isequal@4.5.0: {} @@ -23418,11 +24245,6 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - make-dir@3.1.0: - dependencies: - semver: 6.3.1 - optional: true - markdown-extensions@2.0.0: {} markdown-table@3.0.4: {} @@ -23433,8 +24255,19 @@ snapshots: marked@15.0.12: {} + marked@16.4.2: {} + math-intrinsics@1.1.0: {} + mathjax-full@3.2.2: + dependencies: + esm: 3.2.25 + mhchemparser: 4.2.1 + mj-context-menu: 0.6.1 + speech-rule-engine: 4.1.4 + + mathml2omml@0.5.0: {} + mdast-util-find-and-replace@3.0.2: dependencies: '@types/mdast': 4.0.4 @@ -23519,7 +24352,7 @@ snapshots: mdast-util-mdx-expression@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 mdast-util-from-markdown: 2.0.3 @@ -23530,7 +24363,7 @@ snapshots: mdast-util-mdx-jsx@3.2.0: dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@types/unist': 3.0.3 ccount: 2.0.1 @@ -23557,7 +24390,7 @@ snapshots: mdast-util-mdxjs-esm@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 mdast-util-from-markdown: 2.0.3 @@ -23572,7 +24405,7 @@ snapshots: mdast-util-to-hast@13.2.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@ungap/structured-clone': 1.3.0 devlop: 1.1.0 @@ -23606,6 +24439,32 @@ snapshots: merge-stream@2.0.0: {} + mermaid@11.16.0: + dependencies: + '@braintree/sanitize-url': 7.1.2 + '@iconify/utils': 3.1.4 + '@mermaid-js/parser': 1.2.0 + '@types/d3': 7.4.3 + '@upsetjs/venn.js': 2.0.0 + cytoscape: 3.34.0 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.34.0) + cytoscape-fcose: 2.2.0(cytoscape@3.34.0) + d3: 7.9.0 + d3-sankey: 0.12.3 + dagre-d3-es: 7.0.14 + dayjs: 1.11.21 + dompurify: 3.4.12 + es-toolkit: 1.45.1 + katex: 0.16.47(patch_hash=cbfb6fe178282ddb73b753dcb27f891295e4f9ed85f63bc1466b4e4b1e4ef6e7) + khroma: 2.1.0 + marked: 16.4.2 + roughjs: 4.6.6 + stylis: 4.4.0 + ts-dedent: 2.3.0 + uuid: 14.0.1 + + mhchemparser@4.2.1: {} + micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.3.0 @@ -23896,9 +24755,6 @@ snapshots: mimic-function@5.0.1: {} - mimic-response@2.1.0: - optional: true - mimic-response@3.1.0: {} minimalistic-assert@1.0.1: {} @@ -23917,27 +24773,12 @@ snapshots: minimist@1.2.8: {} - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - optional: true - - minipass@5.0.0: - optional: true - minipass@7.1.3: {} - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - optional: true + mj-context-menu@0.6.1: {} mkdirp-classic@0.5.3: {} - mkdirp@1.0.4: - optional: true - module-details-from-path@1.0.4: {} motion-dom@12.38.0: @@ -23963,62 +24804,11 @@ snapshots: ms@2.1.3: {} - msw-snapshot@5.3.0(msw@2.11.5(@types/node@22.13.13)(typescript@5.9.3)): - dependencies: - msw: 2.11.5(@types/node@22.13.13)(typescript@5.9.3) - - msw@2.11.5(@types/node@20.19.39)(typescript@5.9.3): - dependencies: - '@inquirer/confirm': 5.1.21(@types/node@20.19.39) - '@mswjs/interceptors': 0.39.8 - '@open-draft/deferred-promise': 2.2.0 - '@types/statuses': 2.0.6 - cookie: 1.1.1 - graphql: 16.13.2 - headers-polyfill: 4.0.3 - is-node-process: 1.2.0 - outvariant: 1.4.3 - path-to-regexp: 6.3.0 - picocolors: 1.1.1 - rettime: 0.7.0 - statuses: 2.0.2 - strict-event-emitter: 0.5.1 - tough-cookie: 6.0.1 - type-fest: 4.41.0 - until-async: 3.0.2 - yargs: 17.7.2 - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - '@types/node' - optional: true - - msw@2.11.5(@types/node@22.13.13)(typescript@5.9.3): + msw-snapshot@5.3.0(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2)): dependencies: - '@inquirer/confirm': 5.1.21(@types/node@22.13.13) - '@mswjs/interceptors': 0.39.8 - '@open-draft/deferred-promise': 2.2.0 - '@types/statuses': 2.0.6 - cookie: 1.1.1 - graphql: 16.13.2 - headers-polyfill: 4.0.3 - is-node-process: 1.2.0 - outvariant: 1.4.3 - path-to-regexp: 6.3.0 - picocolors: 1.1.1 - rettime: 0.7.0 - statuses: 2.0.2 - strict-event-emitter: 0.5.1 - tough-cookie: 6.0.1 - type-fest: 4.41.0 - until-async: 3.0.2 - yargs: 17.7.2 - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - '@types/node' + msw: 2.11.5(@types/node@25.6.0)(typescript@7.0.2) - msw@2.11.5(@types/node@25.6.0)(typescript@5.9.3): + msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2): dependencies: '@inquirer/confirm': 5.1.21(@types/node@25.6.0) '@mswjs/interceptors': 0.39.8 @@ -24039,20 +24829,18 @@ snapshots: until-async: 3.0.2 yargs: 17.7.2 optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - '@types/node' - optional: true mute-stream@2.0.0: {} namespace-emitter@2.0.1: {} - nan@2.26.2: - optional: true - nanoid@3.3.12: {} + nanoid@3.3.18: {} + nanoid@4.0.2: {} nanoid@5.1.7: {} @@ -24091,38 +24879,40 @@ snapshots: transitivePeerDependencies: - supports-color - next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + next@16.3.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.60.0)(@types/node@25.6.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: - '@next/env': 16.2.7 + '@next/env': 16.3.0 '@swc/helpers': 0.5.15 baseline-browser-mapping: 2.10.17 caniuse-lite: 1.0.30001787 - postcss: 8.4.31 + postcss: 8.5.23 react: 19.2.5 react-dom: 19.2.5(react@19.2.5) styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.5) optionalDependencies: - '@next/swc-darwin-arm64': 16.2.7 - '@next/swc-darwin-x64': 16.2.7 - '@next/swc-linux-arm64-gnu': 16.2.7 - '@next/swc-linux-arm64-musl': 16.2.7 - '@next/swc-linux-x64-gnu': 16.2.7 - '@next/swc-linux-x64-musl': 16.2.7 - '@next/swc-win32-arm64-msvc': 16.2.7 - '@next/swc-win32-x64-msvc': 16.2.7 + '@next/swc-darwin-arm64': 16.3.0 + '@next/swc-darwin-x64': 16.3.0 + '@next/swc-linux-arm64-gnu': 16.3.0 + '@next/swc-linux-arm64-musl': 16.3.0 + '@next/swc-linux-x64-gnu': 16.3.0 + '@next/swc-linux-x64-musl': 16.3.0 + '@next/swc-win32-arm64-msvc': 16.3.0 + '@next/swc-win32-x64-msvc': 16.3.0 '@opentelemetry/api': 1.9.1 '@playwright/test': 1.60.0 babel-plugin-react-compiler: 1.0.0 - sharp: 0.34.5 + sharp: 0.35.3(@types/node@25.6.0) transitivePeerDependencies: - '@babel/core' + - '@types/node' - babel-plugin-macros node-abi@3.89.0: dependencies: - semver: 7.7.4 + semver: 7.8.5 - node-addon-api@7.1.1: {} + node-addon-api@7.1.1: + optional: true node-exports-info@1.6.0: dependencies: @@ -24144,11 +24934,6 @@ snapshots: nodemailer@7.0.13: {} - nopt@5.0.0: - dependencies: - abbrev: 1.1.1 - optional: true - normalize-path@3.0.0: {} normalize-range@0.1.2: {} @@ -24163,16 +24948,6 @@ snapshots: npm-to-yarn@3.0.1: {} - npmlog@5.0.1: - dependencies: - are-we-there-yet: 2.0.0 - console-control-strings: 1.1.0 - gauge: 3.0.2 - set-blocking: 2.0.0 - optional: true - - nwsapi@2.2.23: {} - nypm@0.6.2: dependencies: citty: 0.1.6 @@ -24247,11 +25022,11 @@ snapshots: dependencies: mimic-function: 5.0.1 - oniguruma-parser@0.12.1: {} + oniguruma-parser@0.12.2: {} - oniguruma-to-es@4.3.5: + oniguruma-to-es@4.3.6: dependencies: - oniguruma-parser: 0.12.1 + oniguruma-parser: 0.12.2 regex: 6.1.0 regex-recursion: 6.0.2 @@ -24302,308 +25077,63 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - oxfmt@0.52.0(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(@vitest/ui@4.1.5)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)): - dependencies: - tinypool: 2.1.0 - optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.52.0 - '@oxfmt/binding-android-arm64': 0.52.0 - '@oxfmt/binding-darwin-arm64': 0.52.0 - '@oxfmt/binding-darwin-x64': 0.52.0 - '@oxfmt/binding-freebsd-x64': 0.52.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.52.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.52.0 - '@oxfmt/binding-linux-arm64-gnu': 0.52.0 - '@oxfmt/binding-linux-arm64-musl': 0.52.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.52.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.52.0 - '@oxfmt/binding-linux-riscv64-musl': 0.52.0 - '@oxfmt/binding-linux-s390x-gnu': 0.52.0 - '@oxfmt/binding-linux-x64-gnu': 0.52.0 - '@oxfmt/binding-linux-x64-musl': 0.52.0 - '@oxfmt/binding-openharmony-arm64': 0.52.0 - '@oxfmt/binding-win32-arm64-msvc': 0.52.0 - '@oxfmt/binding-win32-ia32-msvc': 0.52.0 - '@oxfmt/binding-win32-x64-msvc': 0.52.0 - vite-plus: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(@vitest/ui@4.1.5)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - - oxfmt@0.52.0(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)): - dependencies: - tinypool: 2.1.0 - optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.52.0 - '@oxfmt/binding-android-arm64': 0.52.0 - '@oxfmt/binding-darwin-arm64': 0.52.0 - '@oxfmt/binding-darwin-x64': 0.52.0 - '@oxfmt/binding-freebsd-x64': 0.52.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.52.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.52.0 - '@oxfmt/binding-linux-arm64-gnu': 0.52.0 - '@oxfmt/binding-linux-arm64-musl': 0.52.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.52.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.52.0 - '@oxfmt/binding-linux-riscv64-musl': 0.52.0 - '@oxfmt/binding-linux-s390x-gnu': 0.52.0 - '@oxfmt/binding-linux-x64-gnu': 0.52.0 - '@oxfmt/binding-linux-x64-musl': 0.52.0 - '@oxfmt/binding-openharmony-arm64': 0.52.0 - '@oxfmt/binding-win32-arm64-msvc': 0.52.0 - '@oxfmt/binding-win32-ia32-msvc': 0.52.0 - '@oxfmt/binding-win32-x64-msvc': 0.52.0 - vite-plus: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - - oxfmt@0.52.0(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)): - dependencies: - tinypool: 2.1.0 - optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.52.0 - '@oxfmt/binding-android-arm64': 0.52.0 - '@oxfmt/binding-darwin-arm64': 0.52.0 - '@oxfmt/binding-darwin-x64': 0.52.0 - '@oxfmt/binding-freebsd-x64': 0.52.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.52.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.52.0 - '@oxfmt/binding-linux-arm64-gnu': 0.52.0 - '@oxfmt/binding-linux-arm64-musl': 0.52.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.52.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.52.0 - '@oxfmt/binding-linux-riscv64-musl': 0.52.0 - '@oxfmt/binding-linux-s390x-gnu': 0.52.0 - '@oxfmt/binding-linux-x64-gnu': 0.52.0 - '@oxfmt/binding-linux-x64-musl': 0.52.0 - '@oxfmt/binding-openharmony-arm64': 0.52.0 - '@oxfmt/binding-win32-arm64-msvc': 0.52.0 - '@oxfmt/binding-win32-ia32-msvc': 0.52.0 - '@oxfmt/binding-win32-x64-msvc': 0.52.0 - vite-plus: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - - oxfmt@0.52.0(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)): - dependencies: - tinypool: 2.1.0 - optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.52.0 - '@oxfmt/binding-android-arm64': 0.52.0 - '@oxfmt/binding-darwin-arm64': 0.52.0 - '@oxfmt/binding-darwin-x64': 0.52.0 - '@oxfmt/binding-freebsd-x64': 0.52.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.52.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.52.0 - '@oxfmt/binding-linux-arm64-gnu': 0.52.0 - '@oxfmt/binding-linux-arm64-musl': 0.52.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.52.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.52.0 - '@oxfmt/binding-linux-riscv64-musl': 0.52.0 - '@oxfmt/binding-linux-s390x-gnu': 0.52.0 - '@oxfmt/binding-linux-x64-gnu': 0.52.0 - '@oxfmt/binding-linux-x64-musl': 0.52.0 - '@oxfmt/binding-openharmony-arm64': 0.52.0 - '@oxfmt/binding-win32-arm64-msvc': 0.52.0 - '@oxfmt/binding-win32-ia32-msvc': 0.52.0 - '@oxfmt/binding-win32-x64-msvc': 0.52.0 - vite-plus: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - - oxfmt@0.52.0(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@25.0.1(canvas@2.11.2))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)): - dependencies: - tinypool: 2.1.0 - optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.52.0 - '@oxfmt/binding-android-arm64': 0.52.0 - '@oxfmt/binding-darwin-arm64': 0.52.0 - '@oxfmt/binding-darwin-x64': 0.52.0 - '@oxfmt/binding-freebsd-x64': 0.52.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.52.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.52.0 - '@oxfmt/binding-linux-arm64-gnu': 0.52.0 - '@oxfmt/binding-linux-arm64-musl': 0.52.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.52.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.52.0 - '@oxfmt/binding-linux-riscv64-musl': 0.52.0 - '@oxfmt/binding-linux-s390x-gnu': 0.52.0 - '@oxfmt/binding-linux-x64-gnu': 0.52.0 - '@oxfmt/binding-linux-x64-musl': 0.52.0 - '@oxfmt/binding-openharmony-arm64': 0.52.0 - '@oxfmt/binding-win32-arm64-msvc': 0.52.0 - '@oxfmt/binding-win32-ia32-msvc': 0.52.0 - '@oxfmt/binding-win32-x64-msvc': 0.52.0 - vite-plus: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@25.0.1(canvas@2.11.2))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - - oxfmt@0.52.0(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)): + oxfmt@0.62.0(vite-plus@0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)): dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.52.0 - '@oxfmt/binding-android-arm64': 0.52.0 - '@oxfmt/binding-darwin-arm64': 0.52.0 - '@oxfmt/binding-darwin-x64': 0.52.0 - '@oxfmt/binding-freebsd-x64': 0.52.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.52.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.52.0 - '@oxfmt/binding-linux-arm64-gnu': 0.52.0 - '@oxfmt/binding-linux-arm64-musl': 0.52.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.52.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.52.0 - '@oxfmt/binding-linux-riscv64-musl': 0.52.0 - '@oxfmt/binding-linux-s390x-gnu': 0.52.0 - '@oxfmt/binding-linux-x64-gnu': 0.52.0 - '@oxfmt/binding-linux-x64-musl': 0.52.0 - '@oxfmt/binding-openharmony-arm64': 0.52.0 - '@oxfmt/binding-win32-arm64-msvc': 0.52.0 - '@oxfmt/binding-win32-ia32-msvc': 0.52.0 - '@oxfmt/binding-win32-x64-msvc': 0.52.0 - vite-plus: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - - oxlint-tsgolint@0.23.0: + '@oxfmt/binding-android-arm-eabi': 0.62.0 + '@oxfmt/binding-android-arm64': 0.62.0 + '@oxfmt/binding-darwin-arm64': 0.62.0 + '@oxfmt/binding-darwin-x64': 0.62.0 + '@oxfmt/binding-freebsd-x64': 0.62.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.62.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.62.0 + '@oxfmt/binding-linux-arm64-gnu': 0.62.0 + '@oxfmt/binding-linux-arm64-musl': 0.62.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.62.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.62.0 + '@oxfmt/binding-linux-riscv64-musl': 0.62.0 + '@oxfmt/binding-linux-s390x-gnu': 0.62.0 + '@oxfmt/binding-linux-x64-gnu': 0.62.0 + '@oxfmt/binding-linux-x64-musl': 0.62.0 + '@oxfmt/binding-openharmony-arm64': 0.62.0 + '@oxfmt/binding-win32-arm64-msvc': 0.62.0 + '@oxfmt/binding-win32-ia32-msvc': 0.62.0 + '@oxfmt/binding-win32-x64-msvc': 0.62.0 + vite-plus: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + + oxlint-tsgolint@7.0.2001: optionalDependencies: - '@oxlint-tsgolint/darwin-arm64': 0.23.0 - '@oxlint-tsgolint/darwin-x64': 0.23.0 - '@oxlint-tsgolint/linux-arm64': 0.23.0 - '@oxlint-tsgolint/linux-x64': 0.23.0 - '@oxlint-tsgolint/win32-arm64': 0.23.0 - '@oxlint-tsgolint/win32-x64': 0.23.0 - - oxlint@1.67.0(oxlint-tsgolint@0.23.0)(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(@vitest/ui@4.1.5)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)): + '@oxlint-tsgolint/darwin-arm64': 7.0.2001 + '@oxlint-tsgolint/darwin-x64': 7.0.2001 + '@oxlint-tsgolint/linux-arm64': 7.0.2001 + '@oxlint-tsgolint/linux-x64': 7.0.2001 + '@oxlint-tsgolint/win32-arm64': 7.0.2001 + '@oxlint-tsgolint/win32-x64': 7.0.2001 + + oxlint@1.77.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)): optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.67.0 - '@oxlint/binding-android-arm64': 1.67.0 - '@oxlint/binding-darwin-arm64': 1.67.0 - '@oxlint/binding-darwin-x64': 1.67.0 - '@oxlint/binding-freebsd-x64': 1.67.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.67.0 - '@oxlint/binding-linux-arm-musleabihf': 1.67.0 - '@oxlint/binding-linux-arm64-gnu': 1.67.0 - '@oxlint/binding-linux-arm64-musl': 1.67.0 - '@oxlint/binding-linux-ppc64-gnu': 1.67.0 - '@oxlint/binding-linux-riscv64-gnu': 1.67.0 - '@oxlint/binding-linux-riscv64-musl': 1.67.0 - '@oxlint/binding-linux-s390x-gnu': 1.67.0 - '@oxlint/binding-linux-x64-gnu': 1.67.0 - '@oxlint/binding-linux-x64-musl': 1.67.0 - '@oxlint/binding-openharmony-arm64': 1.67.0 - '@oxlint/binding-win32-arm64-msvc': 1.67.0 - '@oxlint/binding-win32-ia32-msvc': 1.67.0 - '@oxlint/binding-win32-x64-msvc': 1.67.0 - oxlint-tsgolint: 0.23.0 - vite-plus: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(@vitest/ui@4.1.5)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - - oxlint@1.67.0(oxlint-tsgolint@0.23.0)(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)): - optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.67.0 - '@oxlint/binding-android-arm64': 1.67.0 - '@oxlint/binding-darwin-arm64': 1.67.0 - '@oxlint/binding-darwin-x64': 1.67.0 - '@oxlint/binding-freebsd-x64': 1.67.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.67.0 - '@oxlint/binding-linux-arm-musleabihf': 1.67.0 - '@oxlint/binding-linux-arm64-gnu': 1.67.0 - '@oxlint/binding-linux-arm64-musl': 1.67.0 - '@oxlint/binding-linux-ppc64-gnu': 1.67.0 - '@oxlint/binding-linux-riscv64-gnu': 1.67.0 - '@oxlint/binding-linux-riscv64-musl': 1.67.0 - '@oxlint/binding-linux-s390x-gnu': 1.67.0 - '@oxlint/binding-linux-x64-gnu': 1.67.0 - '@oxlint/binding-linux-x64-musl': 1.67.0 - '@oxlint/binding-openharmony-arm64': 1.67.0 - '@oxlint/binding-win32-arm64-msvc': 1.67.0 - '@oxlint/binding-win32-ia32-msvc': 1.67.0 - '@oxlint/binding-win32-x64-msvc': 1.67.0 - oxlint-tsgolint: 0.23.0 - vite-plus: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - - oxlint@1.67.0(oxlint-tsgolint@0.23.0)(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)): - optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.67.0 - '@oxlint/binding-android-arm64': 1.67.0 - '@oxlint/binding-darwin-arm64': 1.67.0 - '@oxlint/binding-darwin-x64': 1.67.0 - '@oxlint/binding-freebsd-x64': 1.67.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.67.0 - '@oxlint/binding-linux-arm-musleabihf': 1.67.0 - '@oxlint/binding-linux-arm64-gnu': 1.67.0 - '@oxlint/binding-linux-arm64-musl': 1.67.0 - '@oxlint/binding-linux-ppc64-gnu': 1.67.0 - '@oxlint/binding-linux-riscv64-gnu': 1.67.0 - '@oxlint/binding-linux-riscv64-musl': 1.67.0 - '@oxlint/binding-linux-s390x-gnu': 1.67.0 - '@oxlint/binding-linux-x64-gnu': 1.67.0 - '@oxlint/binding-linux-x64-musl': 1.67.0 - '@oxlint/binding-openharmony-arm64': 1.67.0 - '@oxlint/binding-win32-arm64-msvc': 1.67.0 - '@oxlint/binding-win32-ia32-msvc': 1.67.0 - '@oxlint/binding-win32-x64-msvc': 1.67.0 - oxlint-tsgolint: 0.23.0 - vite-plus: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - - oxlint@1.67.0(oxlint-tsgolint@0.23.0)(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)): - optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.67.0 - '@oxlint/binding-android-arm64': 1.67.0 - '@oxlint/binding-darwin-arm64': 1.67.0 - '@oxlint/binding-darwin-x64': 1.67.0 - '@oxlint/binding-freebsd-x64': 1.67.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.67.0 - '@oxlint/binding-linux-arm-musleabihf': 1.67.0 - '@oxlint/binding-linux-arm64-gnu': 1.67.0 - '@oxlint/binding-linux-arm64-musl': 1.67.0 - '@oxlint/binding-linux-ppc64-gnu': 1.67.0 - '@oxlint/binding-linux-riscv64-gnu': 1.67.0 - '@oxlint/binding-linux-riscv64-musl': 1.67.0 - '@oxlint/binding-linux-s390x-gnu': 1.67.0 - '@oxlint/binding-linux-x64-gnu': 1.67.0 - '@oxlint/binding-linux-x64-musl': 1.67.0 - '@oxlint/binding-openharmony-arm64': 1.67.0 - '@oxlint/binding-win32-arm64-msvc': 1.67.0 - '@oxlint/binding-win32-ia32-msvc': 1.67.0 - '@oxlint/binding-win32-x64-msvc': 1.67.0 - oxlint-tsgolint: 0.23.0 - vite-plus: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - - oxlint@1.67.0(oxlint-tsgolint@0.23.0)(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@25.0.1(canvas@2.11.2))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)): - optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.67.0 - '@oxlint/binding-android-arm64': 1.67.0 - '@oxlint/binding-darwin-arm64': 1.67.0 - '@oxlint/binding-darwin-x64': 1.67.0 - '@oxlint/binding-freebsd-x64': 1.67.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.67.0 - '@oxlint/binding-linux-arm-musleabihf': 1.67.0 - '@oxlint/binding-linux-arm64-gnu': 1.67.0 - '@oxlint/binding-linux-arm64-musl': 1.67.0 - '@oxlint/binding-linux-ppc64-gnu': 1.67.0 - '@oxlint/binding-linux-riscv64-gnu': 1.67.0 - '@oxlint/binding-linux-riscv64-musl': 1.67.0 - '@oxlint/binding-linux-s390x-gnu': 1.67.0 - '@oxlint/binding-linux-x64-gnu': 1.67.0 - '@oxlint/binding-linux-x64-musl': 1.67.0 - '@oxlint/binding-openharmony-arm64': 1.67.0 - '@oxlint/binding-win32-arm64-msvc': 1.67.0 - '@oxlint/binding-win32-ia32-msvc': 1.67.0 - '@oxlint/binding-win32-x64-msvc': 1.67.0 - oxlint-tsgolint: 0.23.0 - vite-plus: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@25.0.1(canvas@2.11.2))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - - oxlint@1.67.0(oxlint-tsgolint@0.23.0)(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)): - optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.67.0 - '@oxlint/binding-android-arm64': 1.67.0 - '@oxlint/binding-darwin-arm64': 1.67.0 - '@oxlint/binding-darwin-x64': 1.67.0 - '@oxlint/binding-freebsd-x64': 1.67.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.67.0 - '@oxlint/binding-linux-arm-musleabihf': 1.67.0 - '@oxlint/binding-linux-arm64-gnu': 1.67.0 - '@oxlint/binding-linux-arm64-musl': 1.67.0 - '@oxlint/binding-linux-ppc64-gnu': 1.67.0 - '@oxlint/binding-linux-riscv64-gnu': 1.67.0 - '@oxlint/binding-linux-riscv64-musl': 1.67.0 - '@oxlint/binding-linux-s390x-gnu': 1.67.0 - '@oxlint/binding-linux-x64-gnu': 1.67.0 - '@oxlint/binding-linux-x64-musl': 1.67.0 - '@oxlint/binding-openharmony-arm64': 1.67.0 - '@oxlint/binding-win32-arm64-msvc': 1.67.0 - '@oxlint/binding-win32-ia32-msvc': 1.67.0 - '@oxlint/binding-win32-x64-msvc': 1.67.0 - oxlint-tsgolint: 0.23.0 - vite-plus: 0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + '@oxlint/binding-android-arm-eabi': 1.77.0 + '@oxlint/binding-android-arm64': 1.77.0 + '@oxlint/binding-darwin-arm64': 1.77.0 + '@oxlint/binding-darwin-x64': 1.77.0 + '@oxlint/binding-freebsd-x64': 1.77.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.77.0 + '@oxlint/binding-linux-arm-musleabihf': 1.77.0 + '@oxlint/binding-linux-arm64-gnu': 1.77.0 + '@oxlint/binding-linux-arm64-musl': 1.77.0 + '@oxlint/binding-linux-ppc64-gnu': 1.77.0 + '@oxlint/binding-linux-riscv64-gnu': 1.77.0 + '@oxlint/binding-linux-riscv64-musl': 1.77.0 + '@oxlint/binding-linux-s390x-gnu': 1.77.0 + '@oxlint/binding-linux-x64-gnu': 1.77.0 + '@oxlint/binding-linux-x64-musl': 1.77.0 + '@oxlint/binding-openharmony-arm64': 1.77.0 + '@oxlint/binding-win32-arm64-msvc': 1.77.0 + '@oxlint/binding-win32-ia32-msvc': 1.77.0 + '@oxlint/binding-win32-x64-msvc': 1.77.0 + oxlint-tsgolint: 7.0.2001 + vite-plus: 0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) p-limit@3.1.0: dependencies: @@ -24676,13 +25206,12 @@ snapshots: path-browserify@1.0.1: {} + path-data-parser@0.1.0: {} + path-exists@4.0.0: {} path-expression-matcher@1.2.0: {} - path-is-absolute@1.0.1: - optional: true - path-is-inside@1.0.2: {} path-key@3.1.1: {} @@ -24707,26 +25236,9 @@ snapshots: path-type@4.0.0: {} - path2d@0.2.2: - optional: true - pathe@2.0.3: {} - pdf-to-img@4.5.0: - dependencies: - canvas: 3.1.0 - pdfjs-dist: 4.2.67 - transitivePeerDependencies: - - encoding - - supports-color - - pdfjs-dist@4.2.67: - optionalDependencies: - canvas: 2.11.2 - path2d: 0.2.2 - transitivePeerDependencies: - - encoding - - supports-color + pdfjs-dist@4.10.38: {} peberminta@0.9.0: {} @@ -24771,14 +25283,6 @@ snapshots: picomatch@4.0.4: {} - pixelmatch@5.3.0: - dependencies: - pngjs: 6.0.0 - - pixelmatch@7.2.0: - dependencies: - pngjs: 7.0.0 - pkg-types@2.3.0: dependencies: confbox: 0.2.4 @@ -24793,12 +25297,19 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - pngjs@3.4.0: {} - - pngjs@6.0.0: {} + png-js@2.0.0: + dependencies: + fflate: 0.8.3 pngjs@7.0.0: {} + points-on-curve@0.2.0: {} + + points-on-path@0.2.1: + dependencies: + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + possible-typed-array-names@1.1.0: {} postcss-selector-parser@7.1.1: @@ -24808,15 +25319,15 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.4.31: + postcss@8.5.14: dependencies: nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.14: + postcss@8.5.23: dependencies: - nanoid: 3.3.12 + nanoid: 3.3.18 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -24859,12 +25370,6 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 - pretty-format@30.3.0: - dependencies: - '@jest/schemas': 30.0.5 - ansi-styles: 5.2.0 - react-is: 18.3.1 - prismjs@1.30.0: {} process-nextick-args@2.0.1: {} @@ -24907,10 +25412,10 @@ snapshots: prosemirror-state: 1.4.4 prosemirror-view: 1.42.2 - prosemirror-highlight@0.15.1(@shikijs/types@4.0.2)(@types/hast@3.0.4)(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-transform@1.12.0)(prosemirror-view@1.42.2): + prosemirror-highlight@0.15.3(@shikijs/types@4.4.3)(@types/hast@3.0.5)(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-transform@1.12.0)(prosemirror-view@1.42.2): optionalDependencies: - '@shikijs/types': 4.0.2 - '@types/hast': 3.0.4 + '@shikijs/types': 4.4.3 + '@types/hast': 3.0.5 prosemirror-model: 1.25.11 prosemirror-state: 1.4.4 prosemirror-transform: 1.12.0 @@ -25126,8 +25631,6 @@ snapshots: react-is@17.0.2: {} - react-is@18.3.1: {} - react-is@19.2.4: {} react-medium-image-zoom@5.4.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5): @@ -25330,7 +25833,7 @@ snapshots: rehype-recma@1.0.0: dependencies: '@types/estree': 1.0.8 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-to-estree: 3.1.3 transitivePeerDependencies: - supports-color @@ -25364,7 +25867,7 @@ snapshots: remark-rehype@11.1.2: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 mdast-util-to-hast: 13.2.1 unified: 11.0.5 @@ -25431,15 +25934,12 @@ snapshots: rettime@0.7.0: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - optional: true - rimraf@5.0.10: dependencies: glob: 10.5.0 + robust-predicates@3.0.3: {} + rolldown@1.0.0-rc.15: dependencies: '@oxc-project/types': 0.124.0 @@ -25500,12 +26000,17 @@ snapshots: rou3@0.7.12: {} - rrweb-cssom@0.7.1: {} - - rrweb-cssom@0.8.0: {} + roughjs@4.6.6: + dependencies: + hachure-fill: 0.5.2 + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + points-on-path: 0.2.1 run-applescript@7.1.0: {} + rw@1.3.3: {} + rxjs@7.8.2: dependencies: tslib: 2.8.1 @@ -25571,6 +26076,8 @@ snapshots: semver@7.7.4: {} + semver@7.8.5: {} + serve-handler@6.1.7: dependencies: bytes: 3.0.0 @@ -25597,9 +26104,6 @@ snapshots: transitivePeerDependencies: - supports-color - set-blocking@2.0.0: - optional: true - set-cookie-parser@2.7.2: {} set-function-length@1.2.2: @@ -25626,36 +26130,38 @@ snapshots: setimmediate@1.0.5: {} - sharp@0.34.5: + sharp@0.35.3(@types/node@25.6.0): dependencies: '@img/colour': 1.1.0 detect-libc: 2.1.2 - semver: 7.7.4 + semver: 7.8.5 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 + '@img/sharp-darwin-arm64': 0.35.3 + '@img/sharp-darwin-x64': 0.35.3 + '@img/sharp-freebsd-wasm32': 0.35.3 + '@img/sharp-libvips-darwin-arm64': 1.3.2 + '@img/sharp-libvips-darwin-x64': 1.3.2 + '@img/sharp-libvips-linux-arm': 1.3.2 + '@img/sharp-libvips-linux-arm64': 1.3.2 + '@img/sharp-libvips-linux-ppc64': 1.3.2 + '@img/sharp-libvips-linux-riscv64': 1.3.2 + '@img/sharp-libvips-linux-s390x': 1.3.2 + '@img/sharp-libvips-linux-x64': 1.3.2 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.2 + '@img/sharp-libvips-linuxmusl-x64': 1.3.2 + '@img/sharp-linux-arm': 0.35.3 + '@img/sharp-linux-arm64': 0.35.3 + '@img/sharp-linux-ppc64': 0.35.3 + '@img/sharp-linux-riscv64': 0.35.3 + '@img/sharp-linux-s390x': 0.35.3 + '@img/sharp-linux-x64': 0.35.3 + '@img/sharp-linuxmusl-arm64': 0.35.3 + '@img/sharp-linuxmusl-x64': 0.35.3 + '@img/sharp-webcontainers-wasm32': 0.35.3 + '@img/sharp-win32-arm64': 0.35.3 + '@img/sharp-win32-ia32': 0.35.3 + '@img/sharp-win32-x64': 0.35.3 + '@types/node': 25.6.0 optional: true shebang-command@2.0.0: @@ -25666,27 +26172,16 @@ snapshots: shell-quote@1.8.3: {} - shiki@3.23.0: - dependencies: - '@shikijs/core': 3.23.0 - '@shikijs/engine-javascript': 3.23.0 - '@shikijs/engine-oniguruma': 3.23.0 - '@shikijs/langs': 3.23.0 - '@shikijs/themes': 3.23.0 - '@shikijs/types': 3.23.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - shiki@4.0.2: + shiki@4.4.3: dependencies: - '@shikijs/core': 4.0.2 - '@shikijs/engine-javascript': 4.0.2 - '@shikijs/engine-oniguruma': 4.0.2 - '@shikijs/langs': 4.0.2 - '@shikijs/themes': 4.0.2 - '@shikijs/types': 4.0.2 + '@shikijs/core': 4.4.3 + '@shikijs/engine-javascript': 4.4.3 + '@shikijs/engine-oniguruma': 4.4.3 + '@shikijs/langs': 4.4.3 + '@shikijs/themes': 4.4.3 + '@shikijs/types': 4.4.3 '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 side-channel-list@1.0.1: dependencies: @@ -25724,23 +26219,12 @@ snapshots: simple-concat@1.0.1: {} - simple-get@3.1.1: - dependencies: - decompress-response: 4.2.1 - once: 1.4.0 - simple-concat: 1.0.1 - optional: true - simple-get@4.0.1: dependencies: decompress-response: 6.0.0 once: 1.4.0 simple-concat: 1.0.1 - simple-swizzle@0.2.4: - dependencies: - is-arrayish: 0.3.4 - sirv@3.0.2: dependencies: '@polka/url': 1.0.0-next.29 @@ -25749,8 +26233,6 @@ snapshots: sisteransi@1.0.5: {} - slash@3.0.0: {} - slate-history@0.110.3(slate@0.110.2): dependencies: is-plain-object: 5.0.0 @@ -25825,16 +26307,16 @@ snapshots: space-separated-tokens@2.0.2: {} + speech-rule-engine@4.1.4: + dependencies: + '@xmldom/xmldom': 0.9.10 + commander: 13.1.0 + wicked-good-xpath: 1.3.0 + split2@4.2.0: {} sprintf-js@1.0.3: {} - ssim.js@3.5.0: {} - - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 - stackback@0.0.2: {} stacktrace-parser@0.1.11: @@ -25960,6 +26442,8 @@ snapshots: stylis@4.2.0: {} + stylis@4.4.0: {} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -26007,16 +26491,6 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - tar@6.2.1: - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - optional: true - terser-webpack-plugin@5.5.0(esbuild@0.27.5)(webpack@5.105.4(esbuild@0.27.5)): dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -26058,38 +26532,29 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + tinypool@2.1.0: {} tinyrainbow@3.1.0: {} - tldts-core@6.1.86: {} - tldts-core@7.0.27: {} - tldts@6.1.86: - dependencies: - tldts-core: 6.1.86 - tldts@7.0.27: dependencies: tldts-core: 7.0.27 totalist@3.0.1: {} - tough-cookie@5.1.2: - dependencies: - tldts: 6.1.86 - tough-cookie@6.0.1: dependencies: tldts: 7.0.27 tr46@0.0.3: {} - tr46@5.1.1: - dependencies: - punycode: 2.3.1 - tr46@6.0.0: dependencies: punycode: 2.3.1 @@ -26100,6 +26565,8 @@ snapshots: trough@2.2.0: {} + ts-dedent@2.3.0: {} + ts-morph@27.0.2: dependencies: '@ts-morph/common': 0.28.1 @@ -26135,11 +26602,11 @@ snapshots: twoslash-protocol@0.3.6: {} - twoslash@0.3.6(typescript@5.9.3): + twoslash@0.3.6(typescript@7.0.2): dependencies: - '@typescript/vfs': 1.6.4(typescript@5.9.3) + '@typescript/vfs': 1.6.4(typescript@7.0.2) twoslash-protocol: 0.3.6 - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - supports-color @@ -26192,6 +26659,29 @@ snapshots: typescript@5.9.3: {} + typescript@7.0.2: + optionalDependencies: + '@typescript/typescript-aix-ppc64': 7.0.2 + '@typescript/typescript-darwin-arm64': 7.0.2 + '@typescript/typescript-darwin-x64': 7.0.2 + '@typescript/typescript-freebsd-arm64': 7.0.2 + '@typescript/typescript-freebsd-x64': 7.0.2 + '@typescript/typescript-linux-arm': 7.0.2 + '@typescript/typescript-linux-arm64': 7.0.2 + '@typescript/typescript-linux-loong64': 7.0.2 + '@typescript/typescript-linux-mips64el': 7.0.2 + '@typescript/typescript-linux-ppc64': 7.0.2 + '@typescript/typescript-linux-riscv64': 7.0.2 + '@typescript/typescript-linux-s390x': 7.0.2 + '@typescript/typescript-linux-x64': 7.0.2 + '@typescript/typescript-netbsd-arm64': 7.0.2 + '@typescript/typescript-netbsd-x64': 7.0.2 + '@typescript/typescript-openbsd-arm64': 7.0.2 + '@typescript/typescript-openbsd-x64': 7.0.2 + '@typescript/typescript-sunos-x64': 7.0.2 + '@typescript/typescript-win32-arm64': 7.0.2 + '@typescript/typescript-win32-x64': 7.0.2 + ufo@1.6.3: {} uint8array-extras@1.5.0: {} @@ -26216,10 +26706,6 @@ snapshots: quansync: 1.0.0 unconfig-core: 7.5.0 - undici-types@6.20.0: {} - - undici-types@6.21.0: {} - undici-types@7.19.2: {} undici@6.25.0: {} @@ -26321,11 +26807,13 @@ snapshots: util-deprecate@1.0.2: {} + uuid@14.0.1: {} + uuid@9.0.1: {} - valibot@1.3.1(typescript@5.9.3): + valibot@1.3.1(typescript@7.0.2): optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 vary@1.1.2: {} @@ -26362,13 +26850,13 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - vite-node@6.0.0(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0): + vite-node@6.0.0(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0): dependencies: cac: 7.0.0 es-module-lexer: 2.1.0 obug: 2.1.1 pathe: 2.0.3 - vite: 8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - '@types/node' - '@vitejs/devtools' @@ -26383,17 +26871,13 @@ snapshots: - tsx - yaml - vite-plugin-externalize-deps@0.10.0(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)): - dependencies: - vite: 8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) - vite-plugin-externalize-deps@0.10.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)): dependencies: vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) - vite-plugin-inspect@12.0.0-beta.1(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(ws@8.20.0): + vite-plugin-inspect@12.0.0-beta.1(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(ws@8.20.0): dependencies: - '@vitejs/devtools-kit': 0.1.13(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(ws@8.20.0) + '@vitejs/devtools-kit': 0.1.13(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(ws@8.20.0) ansis: 4.2.0 error-stack-parser-es: 1.0.5 obug: 2.1.1 @@ -26402,296 +26886,55 @@ snapshots: perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: 8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - typescript - ws - vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(@vitest/ui@4.1.5)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0): - dependencies: - '@oxc-project/types': 0.133.0 - '@oxlint/plugins': 1.61.0 - '@voidzero-dev/vite-plus-core': 0.1.24(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0) - '@voidzero-dev/vite-plus-test': 0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(@vitest/ui@4.1.5)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - oxfmt: 0.52.0(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(@vitest/ui@4.1.5)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)) - oxlint: 1.67.0(oxlint-tsgolint@0.23.0)(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(@vitest/ui@4.1.5)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)) - oxlint-tsgolint: 0.23.0 - optionalDependencies: - '@voidzero-dev/vite-plus-darwin-arm64': 0.1.24 - '@voidzero-dev/vite-plus-darwin-x64': 0.1.24 - '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.24 - '@voidzero-dev/vite-plus-linux-arm64-musl': 0.1.24 - '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.24 - '@voidzero-dev/vite-plus-linux-x64-musl': 0.1.24 - '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.24 - '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.24 - transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@edge-runtime/vm' - - '@opentelemetry/api' - - '@tsdown/css' - - '@tsdown/exe' - - '@types/node' - - '@vitejs/devtools' - - '@vitest/coverage-istanbul' - - '@vitest/coverage-v8' - - '@vitest/ui' - - bufferutil - - esbuild - - happy-dom - - jiti - - jsdom - - less - - publint - - sass - - sass-embedded - - stylus - - sugarss - - svelte - - terser - - tsx - - typescript - - unplugin-unused - - unrun - - utf-8-validate - - vite - - yaml - - vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0): - dependencies: - '@oxc-project/types': 0.133.0 - '@oxlint/plugins': 1.61.0 - '@voidzero-dev/vite-plus-core': 0.1.24(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0) - '@voidzero-dev/vite-plus-test': 0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - oxfmt: 0.52.0(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)) - oxlint: 1.67.0(oxlint-tsgolint@0.23.0)(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)) - oxlint-tsgolint: 0.23.0 - optionalDependencies: - '@voidzero-dev/vite-plus-darwin-arm64': 0.1.24 - '@voidzero-dev/vite-plus-darwin-x64': 0.1.24 - '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.24 - '@voidzero-dev/vite-plus-linux-arm64-musl': 0.1.24 - '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.24 - '@voidzero-dev/vite-plus-linux-x64-musl': 0.1.24 - '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.24 - '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.24 - transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@edge-runtime/vm' - - '@opentelemetry/api' - - '@tsdown/css' - - '@tsdown/exe' - - '@types/node' - - '@vitejs/devtools' - - '@vitest/coverage-istanbul' - - '@vitest/coverage-v8' - - '@vitest/ui' - - bufferutil - - esbuild - - happy-dom - - jiti - - jsdom - - less - - publint - - sass - - sass-embedded - - stylus - - sugarss - - svelte - - terser - - tsx - - typescript - - unplugin-unused - - unrun - - utf-8-validate - - vite - - yaml - - vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0): - dependencies: - '@oxc-project/types': 0.133.0 - '@oxlint/plugins': 1.61.0 - '@voidzero-dev/vite-plus-core': 0.1.24(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0) - '@voidzero-dev/vite-plus-test': 0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - oxfmt: 0.52.0(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)) - oxlint: 1.67.0(oxlint-tsgolint@0.23.0)(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)) - oxlint-tsgolint: 0.23.0 - optionalDependencies: - '@voidzero-dev/vite-plus-darwin-arm64': 0.1.24 - '@voidzero-dev/vite-plus-darwin-x64': 0.1.24 - '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.24 - '@voidzero-dev/vite-plus-linux-arm64-musl': 0.1.24 - '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.24 - '@voidzero-dev/vite-plus-linux-x64-musl': 0.1.24 - '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.24 - '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.24 - transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@edge-runtime/vm' - - '@opentelemetry/api' - - '@tsdown/css' - - '@tsdown/exe' - - '@types/node' - - '@vitejs/devtools' - - '@vitest/coverage-istanbul' - - '@vitest/coverage-v8' - - '@vitest/ui' - - bufferutil - - esbuild - - happy-dom - - jiti - - jsdom - - less - - publint - - sass - - sass-embedded - - stylus - - sugarss - - svelte - - terser - - tsx - - typescript - - unplugin-unused - - unrun - - utf-8-validate - - vite - - yaml - - vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0): - dependencies: - '@oxc-project/types': 0.133.0 - '@oxlint/plugins': 1.61.0 - '@voidzero-dev/vite-plus-core': 0.1.24(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0) - '@voidzero-dev/vite-plus-test': 0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - oxfmt: 0.52.0(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)) - oxlint: 1.67.0(oxlint-tsgolint@0.23.0)(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)) - oxlint-tsgolint: 0.23.0 - optionalDependencies: - '@voidzero-dev/vite-plus-darwin-arm64': 0.1.24 - '@voidzero-dev/vite-plus-darwin-x64': 0.1.24 - '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.24 - '@voidzero-dev/vite-plus-linux-arm64-musl': 0.1.24 - '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.24 - '@voidzero-dev/vite-plus-linux-x64-musl': 0.1.24 - '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.24 - '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.24 - transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@edge-runtime/vm' - - '@opentelemetry/api' - - '@tsdown/css' - - '@tsdown/exe' - - '@types/node' - - '@vitejs/devtools' - - '@vitest/coverage-istanbul' - - '@vitest/coverage-v8' - - '@vitest/ui' - - bufferutil - - esbuild - - happy-dom - - jiti - - jsdom - - less - - publint - - sass - - sass-embedded - - stylus - - sugarss - - svelte - - terser - - tsx - - typescript - - unplugin-unused - - unrun - - utf-8-validate - - vite - - yaml - - vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@25.0.1(canvas@2.11.2))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0): - dependencies: - '@oxc-project/types': 0.133.0 - '@oxlint/plugins': 1.61.0 - '@voidzero-dev/vite-plus-core': 0.1.24(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0) - '@voidzero-dev/vite-plus-test': 0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@25.0.1(canvas@2.11.2))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - oxfmt: 0.52.0(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@25.0.1(canvas@2.11.2))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)) - oxlint: 1.67.0(oxlint-tsgolint@0.23.0)(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@25.0.1(canvas@2.11.2))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)) - oxlint-tsgolint: 0.23.0 - optionalDependencies: - '@voidzero-dev/vite-plus-darwin-arm64': 0.1.24 - '@voidzero-dev/vite-plus-darwin-x64': 0.1.24 - '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.24 - '@voidzero-dev/vite-plus-linux-arm64-musl': 0.1.24 - '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.24 - '@voidzero-dev/vite-plus-linux-x64-musl': 0.1.24 - '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.24 - '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.24 - transitivePeerDependencies: - - '@arethetypeswrong/core' - - '@edge-runtime/vm' - - '@opentelemetry/api' - - '@tsdown/css' - - '@tsdown/exe' - - '@types/node' - - '@vitejs/devtools' - - '@vitest/coverage-istanbul' - - '@vitest/coverage-v8' - - '@vitest/ui' - - bufferutil - - esbuild - - happy-dom - - jiti - - jsdom - - less - - publint - - sass - - sass-embedded - - stylus - - sugarss - - svelte - - terser - - tsx - - typescript - - unplugin-unused - - unrun - - utf-8-validate - - vite - - yaml - - vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0): - dependencies: - '@oxc-project/types': 0.133.0 - '@oxlint/plugins': 1.61.0 - '@voidzero-dev/vite-plus-core': 0.1.24(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0) - '@voidzero-dev/vite-plus-test': 0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - oxfmt: 0.52.0(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)) - oxlint: 1.67.0(oxlint-tsgolint@0.23.0)(vite-plus@0.1.24(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)) - oxlint-tsgolint: 0.23.0 + vite-plus@0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0): + dependencies: + '@oxc-project/types': 0.143.0 + '@oxlint/plugins': 1.73.0 + '@vitest/browser': 4.1.10(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(vitest@4.1.10) + '@vitest/browser-preview': 4.1.10(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(vitest@4.1.10) + '@vitest/expect': 4.1.10 + '@vitest/mocker': 4.1.10(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.10 + '@vitest/runner': 4.1.10 + '@vitest/snapshot': 4.1.10 + '@vitest/spy': 4.1.10 + '@vitest/ui': 4.1.5(vitest@4.1.10) + '@vitest/utils': 4.1.10 + '@voidzero-dev/vite-plus-core': 0.2.9(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(yaml@2.9.0) + oxfmt: 0.62.0(vite-plus@0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)) + oxlint: 1.77.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.2.9(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(esbuild@0.27.5)(jiti@2.6.1)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(terser@5.46.2)(tsx@4.21.0)(typescript@7.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0)) + oxlint-tsgolint: 7.0.2001 + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(@vitest/browser-preview@4.1.10)(@vitest/ui@4.1.5)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) optionalDependencies: - '@voidzero-dev/vite-plus-darwin-arm64': 0.1.24 - '@voidzero-dev/vite-plus-darwin-x64': 0.1.24 - '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.24 - '@voidzero-dev/vite-plus-linux-arm64-musl': 0.1.24 - '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.24 - '@voidzero-dev/vite-plus-linux-x64-musl': 0.1.24 - '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.24 - '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.24 + '@vitest/browser-playwright': 4.1.10(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(playwright@1.60.0)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(vitest@4.1.10) + '@voidzero-dev/vite-plus-darwin-arm64': 0.2.9 + '@voidzero-dev/vite-plus-darwin-x64': 0.2.9 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.2.9 + '@voidzero-dev/vite-plus-linux-arm64-musl': 0.2.9 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.2.9 + '@voidzero-dev/vite-plus-linux-x64-musl': 0.2.9 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.2.9 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.2.9 transitivePeerDependencies: - '@arethetypeswrong/core' - '@edge-runtime/vm' - '@opentelemetry/api' - - '@tsdown/css' - - '@tsdown/exe' - '@types/node' - '@vitejs/devtools' - '@vitest/coverage-istanbul' - '@vitest/coverage-v8' - - '@vitest/ui' - bufferutil - esbuild - happy-dom - jiti - jsdom - less + - msw - publint - sass - sass-embedded @@ -26707,45 +26950,13 @@ snapshots: - vite - yaml - vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0): - dependencies: - lightningcss: 1.32.0 - picomatch: 4.0.4 - postcss: 8.5.14 - rolldown: 1.0.0-rc.15 - tinyglobby: 0.2.16 - optionalDependencies: - '@types/node': 20.19.39 - esbuild: 0.27.5 - fsevents: 2.3.3 - jiti: 2.6.1 - terser: 5.46.2 - tsx: 4.21.0 - yaml: 2.9.0 - - vite@8.0.8(@types/node@22.13.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0): - dependencies: - lightningcss: 1.32.0 - picomatch: 4.0.4 - postcss: 8.5.14 - rolldown: 1.0.0-rc.15 - tinyglobby: 0.2.16 - optionalDependencies: - '@types/node': 22.13.13 - esbuild: 0.27.5 - fsevents: 2.3.3 - jiti: 2.6.1 - terser: 5.46.2 - tsx: 4.21.0 - yaml: 2.9.0 - vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0): dependencies: - lightningcss: 1.32.0 + lightningcss: 1.33.0 picomatch: 4.0.4 - postcss: 8.5.14 + postcss: 8.5.23 rolldown: 1.0.0-rc.15 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 optionalDependencies: '@types/node': 25.6.0 esbuild: 0.27.5 @@ -26755,54 +26966,24 @@ snapshots: tsx: 4.21.0 yaml: 2.9.0 - vitest-browser-react@2.2.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.7): + vitest-browser-react@2.2.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.10): dependencies: react: 19.2.5 react-dom: 19.2.5(react@19.2.5) - vitest: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(@vitest/ui@4.1.5)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@20.19.39)(typescript@5.9.3))(vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(@vitest/browser-preview@4.1.10)(@vitest/ui@4.1.5)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) optionalDependencies: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - vitest@4.1.7(@opentelemetry/api@1.9.1)(@types/node@20.19.39)(@vitest/ui@4.1.5)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@20.19.39)(typescript@5.9.3))(vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)): - dependencies: - '@vitest/expect': 4.1.7 - '@vitest/mocker': 4.1.7(msw@2.11.5(@types/node@20.19.39)(typescript@5.9.3))(vite@8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) - '@vitest/pretty-format': 4.1.7 - '@vitest/runner': 4.1.7 - '@vitest/snapshot': 4.1.7 - '@vitest/spy': 4.1.7 - '@vitest/utils': 4.1.7 - es-module-lexer: 2.1.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.4 - std-env: 4.0.0 - tinybench: 2.9.0 - tinyexec: 1.2.4 - tinyglobby: 0.2.16 - tinyrainbow: 3.1.0 - vite: 8.0.8(@types/node@20.19.39)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@opentelemetry/api': 1.9.1 - '@types/node': 20.19.39 - '@vitest/ui': 4.1.5(vitest@4.1.7) - jsdom: 29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0) - transitivePeerDependencies: - - msw - - vitest@4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@5.9.3))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)): + vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.10)(@vitest/browser-preview@4.1.10)(@vitest/ui@4.1.5)(jsdom@29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0))(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)): dependencies: - '@vitest/expect': 4.1.7 - '@vitest/mocker': 4.1.7(msw@2.11.5(@types/node@25.6.0)(typescript@5.9.3))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) - '@vitest/pretty-format': 4.1.7 - '@vitest/runner': 4.1.7 - '@vitest/snapshot': 4.1.7 - '@vitest/spy': 4.1.7 - '@vitest/utils': 4.1.7 + '@vitest/expect': 4.1.10 + '@vitest/mocker': 4.1.10(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.10 + '@vitest/runner': 4.1.10 + '@vitest/snapshot': 4.1.10 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 es-module-lexer: 2.1.0 expect-type: 1.3.0 magic-string: 0.30.21 @@ -26812,17 +26993,19 @@ snapshots: std-env: 4.0.0 tinybench: 2.9.0 tinyexec: 1.2.4 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 tinyrainbow: 3.1.0 vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 '@types/node': 25.6.0 + '@vitest/browser-playwright': 4.1.10(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(playwright@1.60.0)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(vitest@4.1.10) + '@vitest/browser-preview': 4.1.10(msw@2.11.5(@types/node@25.6.0)(typescript@7.0.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))(vitest@4.1.10) + '@vitest/ui': 4.1.5(vitest@4.1.10) jsdom: 29.0.2(@noble/hashes@2.0.1)(canvas@3.1.0) transitivePeerDependencies: - msw - optional: true w3c-keyname@2.2.8: {} @@ -26849,8 +27032,6 @@ snapshots: webidl-conversions@3.0.1: {} - webidl-conversions@7.0.0: {} - webidl-conversions@8.0.1: {} webpack-sources@3.4.1: {} @@ -26887,19 +27068,8 @@ snapshots: - esbuild - uglify-js - whatwg-encoding@3.1.1: - dependencies: - iconv-lite: 0.6.3 - - whatwg-mimetype@4.0.0: {} - whatwg-mimetype@5.0.0: {} - whatwg-url@14.2.0: - dependencies: - tr46: 5.1.1 - webidl-conversions: 7.0.0 - whatwg-url@16.0.1(@noble/hashes@2.0.1): dependencies: '@exodus/bytes': 1.15.0(@noble/hashes@2.0.1) @@ -26965,10 +27135,7 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 - wide-align@1.1.5: - dependencies: - string-width: 4.2.3 - optional: true + wicked-good-xpath@1.3.0: {} widest-line@4.0.1: dependencies: @@ -27085,9 +27252,6 @@ snapshots: yallist@3.1.1: {} - yallist@4.0.0: - optional: true - yaml@1.10.3: {} yaml@2.9.0: {} @@ -27118,6 +27282,38 @@ snapshots: yoga-layout@3.2.1: {} + yuku-codegen@0.5.48: + dependencies: + '@yuku-toolchain/types': 0.5.43 + optionalDependencies: + '@yuku-codegen/binding-darwin-arm64': 0.5.48 + '@yuku-codegen/binding-darwin-x64': 0.5.48 + '@yuku-codegen/binding-freebsd-x64': 0.5.48 + '@yuku-codegen/binding-linux-arm-gnu': 0.5.48 + '@yuku-codegen/binding-linux-arm-musl': 0.5.48 + '@yuku-codegen/binding-linux-arm64-gnu': 0.5.48 + '@yuku-codegen/binding-linux-arm64-musl': 0.5.48 + '@yuku-codegen/binding-linux-x64-gnu': 0.5.48 + '@yuku-codegen/binding-linux-x64-musl': 0.5.48 + '@yuku-codegen/binding-win32-arm64': 0.5.48 + '@yuku-codegen/binding-win32-x64': 0.5.48 + + yuku-parser@0.5.48: + dependencies: + '@yuku-toolchain/types': 0.5.43 + optionalDependencies: + '@yuku-parser/binding-darwin-arm64': 0.5.48 + '@yuku-parser/binding-darwin-x64': 0.5.48 + '@yuku-parser/binding-freebsd-x64': 0.5.48 + '@yuku-parser/binding-linux-arm-gnu': 0.5.48 + '@yuku-parser/binding-linux-arm-musl': 0.5.48 + '@yuku-parser/binding-linux-arm64-gnu': 0.5.48 + '@yuku-parser/binding-linux-arm64-musl': 0.5.48 + '@yuku-parser/binding-linux-x64-gnu': 0.5.48 + '@yuku-parser/binding-linux-x64-musl': 0.5.48 + '@yuku-parser/binding-win32-arm64': 0.5.48 + '@yuku-parser/binding-win32-x64': 0.5.48 + zod@4.3.6: {} zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3ec1520280..c48f3d7dbe 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -15,13 +15,46 @@ publicHoistPattern: - "prosemirror-*" overrides: "@headlessui/react": "^2.2.4" + # fumadocs-core still declares @shikijs/rehype ^3 while the rest of the + # workspace (code-block, docs, fumadocs-twoslash) is on shiki 4.4.3 - two + # shiki identities in one graph make the docs' rehype transformer types + # clash ("ShikiTransformer | ShikiTransformer"). Force one shiki everywhere. + "shiki": "^4.4.3" + "@shikijs/rehype": "^4.4.3" + "@shikijs/types": "^4.4.3" "@tiptap/core": "^3.29.2" "@tiptap/pm": "^3.29.2" - "vitest": "4.1.7" - "@vitest/runner": "4.1.7" + # vite-plus declares @types/node and jsdom as peers, so every distinct version + # of them in the workspace produces a separate vite-plus (and therefore vitest) + # instance. `vp run test` starts the runner from the workspace root while each + # test file resolves `vite-plus/test` relative to itself, so a package on a + # different instance ends up with a second SnapshotClient and every + # `toMatchSnapshot` fails with "The snapshot state for '...' is not found". + # Pin both so the whole workspace shares one instance. + "@types/node": "^25.6.0" + "jsdom": "^29.0.2" + "vitest": "4.1.10" + "@vitest/runner": "4.1.10" + # @vitest/mocker must stay >=4.1.10: earlier builds only recognize `vitest` + # as the mocks-API source, so `vi.mock` imported from `vite-plus/test` fails + # to hoist ("problems in resolving the mocks API"). 4.1.10 adds vite-plus/test. + "@vitest/mocker": "4.1.10" "@y/y": "14.0.0-rc.23" "@y/prosemirror": "2.0.0-6" "lib0": "1.0.0-rc.22" +packageExtensions: + # `@vitest/ui` is an *optional peer* of vitest, which vite-plus re-exposes as + # an optional peer of its own. Only `tests` declares it (its browser config + # uses the `html` reporter), so it used to be resolved in that one importer + # and missing everywhere else - two `vite-plus` peer keys, two physical + # instances. Declaring it in more importers doesn't help: an importer that + # depends on it directly resolves it *without* vitest attached, so the key + # differs either way. Making it a regular dependency of vite-plus satisfies + # the peer inside vite-plus itself, so it drops out of the peer key entirely + # and every importer shares one instance. + vite-plus: + dependencies: + "@vitest/ui": "4.1.5" allowBuilds: "@parcel/watcher": true "@sentry/cli": true @@ -35,10 +68,13 @@ allowBuilds: workerd: false leveldown: false patchedDependencies: - { "@y/prosemirror@2.0.0-6": patches/@y__prosemirror@2.0.0-6.patch } + { + "@y/prosemirror@2.0.0-6": patches/@y__prosemirror@2.0.0-6.patch, + katex@0.16.47: patches/katex@0.16.47.patch, + } catalog: vite: ^8.0.0 - vite-plus: ^0.1.24 + vite-plus: ^0.2.9 minimumReleaseAgeExclude: - vite-plus - lib0 @@ -51,3 +87,8 @@ minimumReleaseAgeExclude: - "@oxlint-tsgolint/*" - oxfmt - "@oxfmt/*" + +# pdfjs-dist pulls @napi-rs/canvas (native binaries) for Node-side +# rendering, which we never do - pdf.js only runs in the browser suite. +ignoredOptionalDependencies: + - "@napi-rs/canvas" diff --git a/scripts/release.mjs b/scripts/release.mjs index 07cba236de..c72e09a5c9 100755 --- a/scripts/release.mjs +++ b/scripts/release.mjs @@ -213,4 +213,4 @@ To recover: } } -main(); +void main(); diff --git a/shared/README.md b/shared/README.md index babd002e8f..f45c5f724a 100644 --- a/shared/README.md +++ b/shared/README.md @@ -1 +1,8 @@ This directory contains shared source files. It is not built into a separate package, so consumers should not add it as a dependency in package.json. Instead, use Typescript project references to re-use files from this directory. + +Concretely, a consumer wires this directory up with two things (never a `package.json` dependency): + +- The `@shared/*` path alias, in both `tsconfig.json` (`compilerOptions.paths`) and the bundler config (e.g. the `@shared` alias in `vite.config.ts`). This is the mechanism every `import` uses — e.g. `import { testDocument } from "@shared/testDocument.js"`. +- A TypeScript project reference to `../shared` (`references` in `tsconfig.json`), for build ordering and type resolution. + +The `@blocknote/shared` name in this directory's `package.json` is internal-only: the package is `private` and unbuilt, is never published, and is never imported by that name. See the `@blocknote/tests` package for a reference setup. diff --git a/shared/formatConversionTestUtil.ts b/shared/formatConversionTestUtil.ts index f91ea53b96..1fdab51b45 100644 --- a/shared/formatConversionTestUtil.ts +++ b/shared/formatConversionTestUtil.ts @@ -39,6 +39,7 @@ function partialContentToInlineContent( | PartialTableCell | TableContent | undefined, + inlineContentSchema?: InlineContentSchema, ): | InlineContent[] | TableContent @@ -62,10 +63,22 @@ function partialContentToInlineContent( } else { // custom inline content + // Plain inline content (e.g. inline math) resolves to a bare string, + // not a StyledText array - so keep the string as-is rather than + // treating it as text shorthand. + const config = inlineContentSchema?.[partialContent.type]; + const isPlain = + typeof config === "object" && config.content === "plain"; + return { props: {}, ...partialContent, - content: partialContentToInlineContent(partialContent.content), + content: isPlain + ? (partialContent.content ?? "") + : partialContentToInlineContent( + partialContent.content, + inlineContentSchema, + ), } as any; } }); @@ -78,12 +91,15 @@ function partialContentToInlineContent( rows: content.rows.map((row) => { const cells: any[] = row.cells.map((cell) => { if (!("type" in cell) || cell.type !== "tableCell") { - return partialContentToInlineContent({ - type: "tableCell", - content: cell as any, - }); + return partialContentToInlineContent( + { + type: "tableCell", + content: cell as any, + }, + inlineContentSchema, + ); } - return partialContentToInlineContent(cell); + return partialContentToInlineContent(cell, inlineContentSchema); }); return { @@ -95,7 +111,10 @@ function partialContentToInlineContent( } else if (content?.type === "tableCell") { return { type: "tableCell", - content: partialContentToInlineContent(content.content) as any[], + content: partialContentToInlineContent( + content.content, + inlineContentSchema, + ) as any[], props: { backgroundColor: content.props?.backgroundColor ?? "default", textColor: content.props?.textColor ?? "default", @@ -118,7 +137,11 @@ export function partialBlocksToBlocksForTesting< partialBlocks: Array>, ): Array> { return partialBlocks.map((partialBlock) => - partialBlockToBlockForTesting(schema.blockSchema, partialBlock), + partialBlockToBlockForTesting( + schema.blockSchema, + partialBlock, + schema.inlineContentSchema, + ), ); } @@ -129,6 +152,7 @@ export function partialBlockToBlockForTesting< >( schema: BSchema, partialBlock: PartialBlock, + inlineContentSchema?: InlineContentSchema, ): Block { const contentType: "inline" | "table" | "none" | "plain" = schema[partialBlock.type!].content; @@ -166,7 +190,10 @@ export function partialBlockToBlockForTesting< if (contentType === "inline") { const content = withDefaults.content as InlineContent[] | undefined; - withDefaults.content = partialContentToInlineContent(content) as any; + withDefaults.content = partialContentToInlineContent( + content, + inlineContentSchema, + ) as any; } else if (contentType === "table") { const content = withDefaults.content as TableContent | undefined; withDefaults.content = { @@ -179,16 +206,21 @@ export function partialBlockToBlockForTesting< headerCols: content?.headerCols || undefined, rows: content?.rows.map((row) => ({ - cells: row.cells.map((cell) => partialContentToInlineContent(cell)), + cells: row.cells.map((cell) => + partialContentToInlineContent(cell, inlineContentSchema), + ), })) || [], } as any; } return { ...withDefaults, - content: partialContentToInlineContent(withDefaults.content), + content: partialContentToInlineContent( + withDefaults.content, + inlineContentSchema, + ), children: withDefaults.children.map((c) => { - return partialBlockToBlockForTesting(schema, c); + return partialBlockToBlockForTesting(schema, c, inlineContentSchema); }), } as any; } diff --git a/shared/package.json b/shared/package.json index 66f2d870e4..9f35779aec 100644 --- a/shared/package.json +++ b/shared/package.json @@ -9,22 +9,32 @@ "src" ], "scripts": { - "clean": "tsgo --build --clean" + "clean": "tsc --build --clean" }, "dependencies": { "@blocknote/core": "workspace:^" }, "devDependencies": { "@types/node": "22.13.13", - "typescript": "^5.9.3", - "vite-plus": "catalog:" + "@zip.js/zip.js": "^2.8.8", + "typescript": "^7.0.2", + "vite-plus": "catalog:", + "xml-formatter": "^3.6.7" }, "peerDependencies": { - "image-meta": "^0.2.1" + "@zip.js/zip.js": "^2.8.8", + "image-meta": "^0.2.1", + "xml-formatter": "^3.6.7" }, "peerDependenciesMeta": { + "@zip.js/zip.js": { + "optional": true + }, "image-meta": { "optional": true + }, + "xml-formatter": { + "optional": true } } } diff --git a/shared/tsconfig.json b/shared/tsconfig.json index d443d0665d..dfad97cf0a 100644 --- a/shared/tsconfig.json +++ b/shared/tsconfig.json @@ -18,7 +18,8 @@ "emitDeclarationOnly": true, "types": ["node"] }, - "include": ["."], + "include": ["*.ts", "api/**/*.ts", "util/**/*.ts"], + "exclude": ["dist", "assets", "vite.config.ts"], "references": [ { "path": "../packages/core/" diff --git a/shared/vite.config.ts b/shared/vite.config.ts index 817e8db181..224e07b714 100644 --- a/shared/vite.config.ts +++ b/shared/vite.config.ts @@ -4,11 +4,15 @@ export default defineConfig({ run: { tasks: { build: { - command: "tsgo", + command: "tsc", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, ], + // Without declared outputs the cache can't restore `dist/` on a + // cache hit, leaving consumers type-checking against missing or + // stale declarations. + output: ["dist/**", "!dist/**/*.tsbuildinfo"], }, }, }, diff --git a/tests/Dockerfile b/tests/Dockerfile index 532ee39330..f19e9428c4 100644 --- a/tests/Dockerfile +++ b/tests/Dockerfile @@ -51,4 +51,11 @@ COPY examples ./examples WORKDIR /work/tests # Callers append flags, e.g. `docker run --run` or `--ui --watch --no-open`. -ENTRYPOINT ["pnpm", "exec", "vp", "test", "-c", "vite.config.browser.ts"] +# `vp` is invoked through its bin symlink rather than `pnpm exec`: under CI=1 +# (which the run scripts set) `pnpm exec` first verifies node_modules against the +# lockfile and re-installs when they differ. The install above is filtered +# (`!docs`), so that check always fires — and reinstalling docs pulls +# better-sqlite3, whose prebuilt binary isn't always available; the node-gyp +# fallback then fails since this image has no `make`. The image's deps are +# correct by construction, so there's nothing to verify. +ENTRYPOINT ["node_modules/.bin/vp", "test", "-c", "vite.config.browser.ts"] diff --git a/tests/docker-run.sh b/tests/docker-run.sh index e9fd9eb1c8..c78524166c 100755 --- a/tests/docker-run.sh +++ b/tests/docker-run.sh @@ -27,15 +27,17 @@ done entrypoint_args=("$@") # Auto-rebuild the image if its content hash label doesn't match the current -# repo state. The hash covers every file that affects the installed deps or the -# baked-in examples (lockfile, workspace file, all package.json files, patches, -# and example sources). When the hashes differ the image is rebuilt in place +# repo state. The hash covers every file that affects the image's contents: the +# Dockerfile itself, plus everything it bakes in — the lockfile, workspace file, +# all package.json files, patches, and example sources. When they differ the +# image is rebuilt in place # (Docker's layer cache makes this fast when only a leaf changed). _dep_files() { # Print the sorted list of files that are baked into the image. { echo pnpm-lock.yaml echo pnpm-workspace.yaml + echo tests/Dockerfile find patches examples \( -name node_modules -prune \) -o -type f -print 2>/dev/null find . -name package.json \ -not -path '*/node_modules/*' \ @@ -77,6 +79,9 @@ mounts+=( mounts+=( -v "$PWD/shared/testDocument.ts:/work/shared/testDocument.ts" -v "$PWD/shared/formatConversionTestUtil.ts:/work/shared/formatConversionTestUtil.ts" + -v "$PWD/shared/api:/work/shared/api" + -v "$PWD/shared/util:/work/shared/util" + -v "$PWD/shared/assets:/work/shared/assets" ) # Mount the report dir so the html reporter's output lands on the host instead # of being thrown away with the container. Created on the host first so docker diff --git a/tests/package.json b/tests/package.json index 70dd65a13b..bef2956fcc 100644 --- a/tests/package.json +++ b/tests/package.json @@ -12,6 +12,12 @@ "@blocknote/ariakit": "workspace:^", "@blocknote/core": "workspace:^", "@blocknote/mantine": "workspace:^", + "@blocknote/diagram-block": "workspace:^", + "@blocknote/xl-email-exporter": "workspace:^", + "@blocknote/xl-pdf-exporter": "workspace:^", + "@react-pdf/renderer": "^4.5.1", + "pdfjs-dist": "^4.10.38", + "@blocknote/math-block": "workspace:^", "@blocknote/react": "workspace:^", "@blocknote/shadcn": "workspace:^", "@blocknote/xl-multi-column": "workspace:^", @@ -21,6 +27,7 @@ "@types/node": "^20.19.22", "@types/react": "^19.2.3", "@types/react-dom": "^19.2.3", + "@vitest/browser-playwright": "4.1.10", "@vitest/ui": "4.1.5", "@y/protocols": "^1.0.6-rc.1", "@y/y": "^14.0.0-rc.23", diff --git a/tests/src/utils/context.ts b/tests/src/utils/context.ts index 189f2e7738..ad25d7157f 100644 --- a/tests/src/utils/context.ts +++ b/tests/src/utils/context.ts @@ -1,47 +1,17 @@ -import { createUserEvent, page } from "vite-plus/test/browser/context"; +import { commands, page, server, userEvent } from "vite-plus/test/browser"; -// This vite-plus build's `@vitest/browser/context` runtime only exports -// `createUserEvent`, `page`, `cdp`, `locators`, `utils` — there is no default -// `userEvent`, `server`, or `commands` export (the published `.d.ts` lists them, -// but they aren't in the runtime bundle). So we adapt here and re-export a -// single shared API surface for the e2e utils + tests to consume. - -/** Shared userEvent instance (preserves keyboard/pointer state across calls). */ -export const userEvent = createUserEvent(); - -export { page }; - -/** - * Triggers a custom browser command registered in `vite.config.browser.ts` - * (e.g. `positionalMouse`). The public `server.commands` API isn't exported in - * this build, so we go through the browser runner directly. - */ -export function triggerCommand( - name: string, - args: unknown[] = [], -): Promise { - return (window as any).__vitest_browser_runner__.commands.triggerCommand( - name, - args, - ); -} - -const ua = navigator.userAgent; +// `vite-plus/test/browser` re-exports `vitest/browser`, which Vitest replaces +// with a generated virtual module while running in Browser Mode. Import it from +// this single place so the e2e utils + tests share one `userEvent` instance +// (it preserves keyboard/pointer state across calls) and one command surface. +export { commands, page, server, userEvent }; /** The browser instance the current test is running in. */ -export const browserName: "chromium" | "firefox" | "webkit" = /Firefox/.test(ua) - ? "firefox" - : /Chrome|Chromium|HeadlessChrome/.test(ua) - ? "chromium" - : "webkit"; +export const browserName = server.browser as "chromium" | "firefox" | "webkit"; /** * Platform modifier for `userEvent.keyboard` (Cmd on macOS, Ctrl elsewhere) — - * the equivalent of Playwright's `ControlOrMeta`. Derived from the browser the - * test runs in, since `server.platform` isn't available. + * the equivalent of Playwright's `ControlOrMeta`. */ -export const MOD: "Meta" | "Control" = /Mac|iPhone|iPad/i.test( - navigator.platform || ua, -) - ? "Meta" - : "Control"; +export const MOD: "Meta" | "Control" = + server.platform === "darwin" ? "Meta" : "Control"; diff --git a/tests/src/utils/editor.ts b/tests/src/utils/editor.ts index 708e4326a0..278e1119cf 100644 --- a/tests/src/utils/editor.ts +++ b/tests/src/utils/editor.ts @@ -1,5 +1,5 @@ import { expect, vi } from "vite-plus/test"; -import type { Locator } from "vite-plus/test/browser/context"; +import type { Locator } from "vite-plus/test/browser"; import { userEvent } from "./context.js"; import { EDITOR_SELECTOR } from "./const.js"; diff --git a/tests/src/utils/mouse.ts b/tests/src/utils/mouse.ts index 184dd350cf..792d15fe0a 100644 --- a/tests/src/utils/mouse.ts +++ b/tests/src/utils/mouse.ts @@ -1,12 +1,24 @@ -import { triggerCommand } from "./context.js"; +import { commands } from "./context.js"; import { DRAG_HANDLE_SELECTOR } from "./const.js"; import { sleep, waitForSelector } from "./editor.js"; -import type { MouseAction } from "./positionalMouse.js"; +import type { MouseAction, PositionalMouseCommand } from "./positionalMouse.js"; // `positionalMouse` is registered as a browser command in vite.config.browser.ts. // `import type` above keeps the (Node-only) command module out of the browser bundle. +// +// Custom commands are normally declared by augmenting Vitest's `BrowserCommands` +// interface, but that isn't possible here: it's declared in `vitest/internal/browser`, +// which the context modules only import (never re-export), and `vitest` isn't a +// direct dependency of this project — we go through `vite-plus/test/browser`. +// Augmenting a module that merely re-exports declares an unrelated interface, so +// the command is typed at this single boundary instead, against the signature +// derived from its implementation. +const browserCommands = commands as typeof commands & { + positionalMouse: PositionalMouseCommand; +}; + function runMouse(actions: MouseAction[]): Promise { - return triggerCommand("positionalMouse", actions); + return browserCommands.positionalMouse(...actions); } /** Bounding rect of an element, resolved from a selector or the element itself. */ diff --git a/tests/src/utils/positionalMouse.ts b/tests/src/utils/positionalMouse.ts index 92a865e6d8..adc3e63ce4 100644 --- a/tests/src/utils/positionalMouse.ts +++ b/tests/src/utils/positionalMouse.ts @@ -4,7 +4,6 @@ import type { FrameLocator, Page, } from "@playwright/test"; -import type {} from "vite-plus/test/browser"; import type { BrowserCommand } from "vite-plus/test/node"; // Vite+ overrides `BrowserCommandContext` with itself, but for some reason it uses: @@ -26,6 +25,17 @@ export type MouseAction = | { type: "up" } | { type: "click"; x: number; y: number; clickCount?: number }; +/** + * Browser-side signature of the {@link positionalMouse} command below, i.e. what + * `BrowserCommand` turns into once Vitest strips the (Node-only) + * `BrowserCommandContext` first parameter. Used by `mouse.ts` to type the + * command on the browser `commands` object — see the note there on why this + * can't be a `declare module` augmentation. + */ +export type PositionalMouseCommand = ( + ...actions: MouseAction[] +) => Promise; + /** * Vitest's `userEvent` doesn't have several mouse commands that we relied on in Playwright, namely * clicking at the current mouse position, and moving the mouse to a given position across N steps. @@ -69,10 +79,3 @@ export const positionalMouse: BrowserCommand = async ( } } }; - -// Add command to types, as registering it in `vite.config.browser.ts` isn't enough. -declare module "vite-plus/test/browser" { - interface BrowserCommands { - positionalMouse: (...actions: MouseAction[]) => Promise; - } -} diff --git a/tests/src/vitest-browser.d.ts b/tests/src/vitest-browser.d.ts deleted file mode 100644 index abb2734028..0000000000 --- a/tests/src/vitest-browser.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -// This vite-plus build's `@vitest/browser/context` runtime exports -// `createUserEvent` (a factory), but its shipped `.d.ts` only declares the -// default `userEvent`. Augment the module type to match the runtime so -// `src/utils/context.ts` type-checks. -import type { UserEvent } from "vite-plus/test/browser/context"; - -declare module "vite-plus/test/browser/context" { - export function createUserEvent(): UserEvent; -} diff --git a/tests/vite.config.browser.ts b/tests/vite.config.browser.ts index a4f19f3fcf..21fb2a1e1b 100644 --- a/tests/vite.config.browser.ts +++ b/tests/vite.config.browser.ts @@ -1,7 +1,7 @@ +import tailwindcss from "@tailwindcss/vite"; import * as fs from "fs"; import * as path from "path"; -import tailwindcss from "@tailwindcss/vite"; -import { configDefaults, defineConfig, type UserConfig } from "vite-plus"; +import { defineConfig, type UserConfig } from "vite-plus"; import { playwright } from "vite-plus/test/browser/providers/playwright"; import { positionalMouse } from "./src/utils/positionalMouse.js"; @@ -67,16 +67,27 @@ export default defineConfig( // src/examples.d.ts. alias: { ...blockNoteSrcAliases, - // `@blocknote/shared` lives at the repo root (not under packages/), so - // it isn't picked up by the packages scan above. The suggestion-gallery - // scenarios import the shared `testDocument` from it. - "@blocknote/shared": path.resolve(__dirname, "../shared"), + // The shared test-utils package lives at the repo root (not under + // packages/), so it isn't picked up by the packages scan above. + // All consumers - test code and example apps alike - import it via + // the repo-wide `@shared` path alias (matching the packages' vite + // and tsconfig setups); the package itself is private, so its name + // resolves nowhere outside the workspace anyway. + "@shared": path.resolve(__dirname, "../shared"), "@examples": path.resolve(__dirname, "../examples"), }, }, test: { name: "e2e", - include: ["./src/end-to-end/**/*.test.tsx"], + // Besides the end-to-end tests, this suite also runs the packages' + // `.browser.test` files: unit tests for browser-only implementations + // (canvas rasterization, Mermaid rendering), colocated with the code + // they test but needing a real browser. The packages' own (node) + // vitest configs exclude them. + include: [ + "./src/end-to-end/**/*.test.tsx", + "../packages/*/src/**/*.browser.test.{ts,tsx}", + ], setupFiles: ["./vitestSetup.browser.ts"], // Running three browsers concurrently inside one Docker container already // saturates CPU; layering per-browser file parallelism on top causes diff --git a/tests/vite.config.ts b/tests/vite.config.ts index 650c20d409..bdbf19262c 100644 --- a/tests/vite.config.ts +++ b/tests/vite.config.ts @@ -8,7 +8,7 @@ export default defineConfig( run: { tasks: { build: { - command: "tsgo", + command: "tsc", input: [ { auto: true }, { pattern: "!**/*.tsbuildinfo", base: "workspace" }, @@ -53,6 +53,14 @@ export default defineConfig( __dirname, "../packages/mantine/src/", ), + "@blocknote/math-block": path.resolve( + __dirname, + "../packages/math-block/src/", + ), + "@blocknote/diagram-block": path.resolve( + __dirname, + "../packages/diagram-block/src/", + ), "@blocknote/server-util": path.resolve( __dirname, "../packages/server-util/src/", diff --git a/tests/vitestSetup.browser.ts b/tests/vitestSetup.browser.ts index 9333a919a1..469a859137 100644 --- a/tests/vitestSetup.browser.ts +++ b/tests/vitestSetup.browser.ts @@ -1,5 +1,5 @@ import { afterEach, beforeAll, beforeEach } from "vite-plus/test"; -import { page } from "vite-plus/test/browser/context"; +import { page } from "vite-plus/test/browser"; // Browser-mode setup. Unlike the jsdom `vitestSetup.ts`, we don't mock // ClipboardEvent/DragEvent/matchMedia here — the real browser provides them. From 7d9107e77ccff11bda67af8bb68b731ddcc9567b Mon Sep 17 00:00:00 2001 From: Nick the Sick Date: Thu, 13 Aug 2026 16:26:32 +0200 Subject: [PATCH 2/5] feat(core): source-with-preview, syntax highlighting & exporter images Core primitives that the math and diagram blocks are built on. - De-duplicate and order extensions by key in `ExtensionManager`, and stop `editor.getExtension` from erasing extension instance types. - Make syntax highlighting a user-provided singleton extension; code blocks and other blocks configure a shared highlighter instead of owning one. - Add `SourceBlockWithPreview` / `SourceInlineContentWithPreview` extensions and their React counterparts: a reusable source/preview block and inline content pattern with popup editing, keyboard and selection handling. - Support converting between plain and styled text in `updateBlock`, and add inline content boundary editing. - Give exporters a typed `ExportImage` contract and dictionary-backed i18n so they never hardcode language strings. --- examples/04-theming/06-code-block/src/App.tsx | 8 +- .../07-custom-code-block/.bnexample.json | 10 +- .../07-custom-code-block/src/App.tsx | 25 +- .../.bnexample.json | 8 +- .../05-converting-blocks-to-pdf/src/App.tsx | 62 +- .../.bnexample.json | 5 +- .../06-converting-blocks-to-docx/src/App.tsx | 64 +- .../.bnexample.json | 5 +- .../07-converting-blocks-to-odt/src/App.tsx | 64 +- .../.bnexample.json | 2 + .../src/App.tsx | 65 +- .../11-source-with-preview/.bnexample.json | 9 + .../11-source-with-preview/README.md | 11 + .../11-source-with-preview/main.tsx | 11 + .../11-source-with-preview/src/App.tsx | 214 ++ .../11-source-with-preview/src/styles.css | 26 + .../14-suggestion-gallery/.bnexample.json | 1 - .../14-suggestion-gallery/src/scenarios.ts | 2 +- packages/code-block/src/index.test.ts | 9 +- packages/code-block/src/index.ts | 26 +- .../__snapshots__/updateBlock.test.ts.snap | 3268 +++++++++++++---- .../commands/updateBlock/updateBlock.test.ts | 42 + .../commands/updateBlock/updateBlock.ts | 20 +- .../api/exporters/markdown/htmlToMarkdown.ts | 55 +- .../src/api/nodeConversions/blockToNode.ts | 6 +- .../src/api/nodeConversions/nodeToBlock.ts | 3 + packages/core/src/api/pmUtil.ts | 24 +- .../core/src/blocks/Code/CodeBlockOptions.ts | 83 + packages/core/src/blocks/Code/block.test.ts | 2 +- packages/core/src/blocks/Code/block.ts | 310 +- .../CodeKeyboardShortcutsExtension.ts | 120 + .../blocks/Code/helpers/parse/parsePreCode.ts | 45 + .../Code/helpers/render/createCodeBlock.ts | 98 + .../helpers/toExternalHTML/createPreCode.ts | 14 + packages/core/src/blocks/Code/shiki.ts | 73 - packages/core/src/blocks/index.ts | 3 + packages/core/src/editor/Block.css | 275 +- packages/core/src/editor/BlockNoteEditor.ts | 29 +- .../managers/ExtensionManager/extensions.ts | 6 + packages/core/src/exporter/ExportImage.ts | 50 + packages/core/src/exporter/Exporter.test.ts | 48 + packages/core/src/exporter/Exporter.ts | 58 +- packages/core/src/exporter/index.ts | 1 + packages/core/src/exporter/mapping.ts | 5 +- .../FormattingToolbar/FormattingToolbar.ts | 18 +- .../InlineContentBoundaryEdit.ts | 109 + .../SourceBlockWithPreview.ts | 192 + .../SourceInlineContentWithPreview.ts | 142 + .../SyntaxHighlighting.test.ts | 120 + .../SyntaxHighlighting/SyntaxHighlighting.ts | 89 + .../inlineHighlight.test.ts | 135 + .../extensions/SyntaxHighlighting/shiki.ts | 116 + packages/core/src/extensions/index.ts | 4 + .../KeyboardShortcutsExtension.test.ts | 53 +- .../KeyboardShortcutsExtension.ts | 24 +- packages/core/src/i18n/locales/ar.ts | 9 + packages/core/src/i18n/locales/de.ts | 9 + packages/core/src/i18n/locales/en.ts | 9 + packages/core/src/i18n/locales/es.ts | 9 + packages/core/src/i18n/locales/fa.ts | 9 + packages/core/src/i18n/locales/fr.ts | 9 + packages/core/src/i18n/locales/he.ts | 9 + packages/core/src/i18n/locales/hr.ts | 9 + packages/core/src/i18n/locales/is.ts | 9 + packages/core/src/i18n/locales/it.ts | 9 + packages/core/src/i18n/locales/ja.ts | 9 + packages/core/src/i18n/locales/ko.ts | 9 + packages/core/src/i18n/locales/nl.ts | 9 + packages/core/src/i18n/locales/no.ts | 9 + packages/core/src/i18n/locales/pl.ts | 9 + packages/core/src/i18n/locales/pt.ts | 9 + packages/core/src/i18n/locales/ru.ts | 9 + packages/core/src/i18n/locales/sk.ts | 9 + packages/core/src/i18n/locales/uk.ts | 9 + packages/core/src/i18n/locales/uz.ts | 9 + packages/core/src/i18n/locales/vi.ts | 9 + packages/core/src/i18n/locales/zh-tw.ts | 9 + packages/core/src/i18n/locales/zh.ts | 9 + packages/core/src/index.ts | 5 +- packages/core/src/schema/blocks/createSpec.ts | 5 +- packages/core/src/schema/blocks/types.ts | 56 +- .../src/schema/contentTypePropagation.test.ts | 2 +- .../schema/inlineContent/createSpec.test.ts | 161 + .../src/schema/inlineContent/createSpec.ts | 183 +- .../core/src/schema/inlineContent/internal.ts | 23 +- .../core/src/schema/inlineContent/types.ts | 40 +- .../SourceWithPreview/PreviewPlaceholder.tsx | 31 + .../SourceWithPreview/SourcePreviewPopup.ts | 25 + .../SourceWithPreview/SourceWithPreview.tsx | 252 ++ .../block/SourceBlockWithPreview.tsx | 45 + .../block/useSourceBlockPreviewPopup.ts | 57 + .../SourceInlineContentWithPreview.tsx | 34 + .../useSourceInlineContentPreviewPopup.ts | 94 + packages/react/src/index.ts | 7 + packages/react/src/schema/ReactBlockSpec.tsx | 15 +- .../src/schema/ReactInlineContentSpec.tsx | 60 +- .../src/docx/defaultSchema/blocks.ts | 61 +- .../src/docx/defaultSchema/inlinecontent.ts | 4 +- .../src/docx/docxExporter.test.ts | 39 +- .../reactEmailExporter.test.tsx.snap | 8 +- .../src/react-email/defaultSchema/blocks.tsx | 73 +- .../defaultSchema/inlinecontent.tsx | 4 +- .../src/react-email/imageDelivery.test.ts | 77 + .../src/react-email/imageDelivery.ts | 97 + .../src/react-email/index.ts | 1 + .../src/odt/__snapshots__/basic/content.xml | 113 +- .../withCustomOptions/content.xml | 113 +- .../__snapshots__/withMultiColumn/content.xml | 37 +- .../src/odt/defaultSchema/blocks.tsx | 75 +- .../src/odt/defaultSchema/inlineContent.tsx | 10 +- packages/xl-odt-exporter/src/odt/index.ts | 1 + .../src/odt/odtExporter.test.ts | 61 +- .../xl-odt-exporter/src/odt/odtExporter.tsx | 86 +- .../src/odt/util/createODTImageParagraph.tsx | 68 + .../xl-odt-exporter/src/odt/util/jsx.d.ts | 2 + .../src/pdf/__snapshots__/example.jsx | 4 +- .../exampleWithHeaderAndFooter.jsx | 4 +- .../src/pdf/defaultSchema/blocks.tsx | 98 +- .../src/pdf/defaultSchema/inlinecontent.tsx | 4 +- .../src/pdf/pdfExporter.test.tsx | 35 +- shared/util/browserImageTestUtil.ts | 55 + shared/util/odtTestUtil.ts | 55 + .../ariakit-image-toolbar-chromium-linux.png | Bin 16251 -> 13468 bytes .../ariakit-image-toolbar-firefox-linux.png | Bin 16543 -> 13662 bytes .../ariakit-image-toolbar-webkit-linux.png | Bin 16012 -> 13114 bytes .../email-export-chromium-linux.png | Bin 0 -> 252638 bytes .../email-export-firefox-linux.png | Bin 0 -> 268249 bytes .../email-export-webkit-linux.png | Bin 0 -> 264339 bytes .../pdf-export-page-1-chromium-linux.png | Bin 0 -> 70578 bytes .../pdf-export-page-2-chromium-linux.png | Bin 0 -> 151995 bytes .../pdf-export-page-3-chromium-linux.png | Bin 0 -> 25467 bytes .../pdf-export-page-4-chromium-linux.png | Bin 0 -> 86290 bytes .../exporters/exporterImages.test.tsx | 236 ++ .../create-image-chromium-linux.png | Bin 14616 -> 13239 bytes .../create-image-firefox-linux.png | Bin 14578 -> 13401 bytes .../create-image-webkit-linux.png | Bin 14248 -> 12986 bytes .../embed-image-chromium-linux.png | Bin 24767 -> 24059 bytes .../embed-image-firefox-linux.png | Bin 36649 -> 35775 bytes .../embed-image-webkit-linux.png | Bin 24784 -> 23908 bytes .../resize-image-chromium-linux.png | Bin 23338 -> 22566 bytes .../resize-image-firefox-linux.png | Bin 35318 -> 34317 bytes .../resize-image-webkit-linux.png | Bin 23339 -> 22325 bytes tests/src/end-to-end/images/images.test.tsx | 20 + ...nshot-full-tall-element-chromium-linux.png | Bin 0 -> 248178 bytes ...enshot-full-tall-element-firefox-linux.png | Bin 0 -> 264105 bytes ...eenshot-full-tall-element-webkit-linux.png | Bin 0 -> 252516 bytes .../screenshots/screenshotFull.test.tsx | 36 + .../shadcn-image-toolbar-chromium-linux.png | Bin 18029 -> 15214 bytes .../shadcn-image-toolbar-firefox-linux.png | Bin 17506 -> 14566 bytes .../shadcn-image-toolbar-webkit-linux.png | Bin 17593 -> 14625 bytes tests/src/end-to-end/static/static.test.tsx | 4 + .../dark-image-toolbar-chromium-linux.png | Bin 16237 -> 14800 bytes .../dark-image-toolbar-firefox-linux.png | Bin 16226 -> 14838 bytes .../dark-image-toolbar-webkit-linux.png | Bin 15857 -> 14484 bytes ...rop-change-image-source-chromium-linux.png | Bin 11401 -> 11451 bytes ...prop-change-image-source-firefox-linux.png | Bin 12470 -> 12027 bytes .../prop-change-image-source-webkit-linux.png | Bin 12851 -> 12461 bytes ...prop-change-image-width-chromium-linux.png | Bin 12922 -> 13014 bytes .../prop-change-image-width-firefox-linux.png | Bin 13903 -> 13394 bytes .../prop-change-image-width-webkit-linux.png | Bin 14310 -> 13853 bytes .../__snapshots__/text/html/basicBlocks.html | 2 +- .../__snapshots__/text/plain/basicBlocks.md | 2 +- tests/src/unit/core/createTestEditor.ts | 5 + .../codeBlock/contains-newlines.html | 7 +- .../codeBlock/defaultLanguage.html | 1 + .../blocknoteHTML/codeBlock/empty.html | 1 + .../blocknoteHTML/codeBlock/python.html | 1 + .../blocknoteHTML/complex/document.html | 7 +- .../html/codeBlock/contains-newlines.html | 2 +- .../html/codeBlock/defaultLanguage.html | 2 +- .../__snapshots__/html/codeBlock/empty.html | 2 +- .../__snapshots__/html/complex/document.html | 2 +- .../markdown/codeBlock/defaultLanguage.md | 2 +- .../__snapshots__/markdown/codeBlock/empty.md | 2 +- .../nodes/codeBlock/defaultLanguage.json | 2 +- .../__snapshots__/nodes/codeBlock/empty.json | 2 +- .../markdown/specialCharEscaping.json | 2 +- .../parse/__snapshots__/html/codeBlocks.json | 2 +- .../html/codeBlocksMultiLine.json | 2 +- .../html/codeBlocksNestedHTML.json | 2 +- .../markdown/codeBlockBasic.json | 2 +- .../markdown/codeBlockTildes.json | 2 +- .../core/schema/__snapshots__/blocks.json | 4 +- .../schema/__snapshots__/inlinecontent.json | 2 + .../react/clipboard/copy/copyTestInstances.ts | 71 + .../react/clipboard/copy/runTests.test.ts | 15 + .../copyPasteEqualityTestInstances.ts | 34 + .../copyPasteEquality/runTests.test.ts | 15 + .../markdown/codeBlock/nested.md | 6 + .../export/exportTestInstances.ts | 140 + .../formatConversion/export/runTests.test.ts | 11 + .../exportParseEqualityTestInstances.ts | 12 +- .../parse/parseTestInstances.ts | 64 + .../formatConversion/parse/runTests.test.ts | 30 + tests/src/utils/screenshotFull.ts | 42 + 195 files changed, 7888 insertions(+), 1662 deletions(-) create mode 100644 examples/06-custom-schema/11-source-with-preview/.bnexample.json create mode 100644 examples/06-custom-schema/11-source-with-preview/README.md create mode 100644 examples/06-custom-schema/11-source-with-preview/main.tsx create mode 100644 examples/06-custom-schema/11-source-with-preview/src/App.tsx create mode 100644 examples/06-custom-schema/11-source-with-preview/src/styles.css create mode 100644 packages/core/src/blocks/Code/CodeBlockOptions.ts create mode 100644 packages/core/src/blocks/Code/helpers/extensions/CodeKeyboardShortcutsExtension.ts create mode 100644 packages/core/src/blocks/Code/helpers/parse/parsePreCode.ts create mode 100644 packages/core/src/blocks/Code/helpers/render/createCodeBlock.ts create mode 100644 packages/core/src/blocks/Code/helpers/toExternalHTML/createPreCode.ts delete mode 100644 packages/core/src/blocks/Code/shiki.ts create mode 100644 packages/core/src/exporter/ExportImage.ts create mode 100644 packages/core/src/exporter/Exporter.test.ts create mode 100644 packages/core/src/extensions/InlineContentBoundaryEdit/InlineContentBoundaryEdit.ts create mode 100644 packages/core/src/extensions/SourceBlockWithPreview/SourceBlockWithPreview.ts create mode 100644 packages/core/src/extensions/SourceInlineContentWithPreview/SourceInlineContentWithPreview.ts create mode 100644 packages/core/src/extensions/SyntaxHighlighting/SyntaxHighlighting.test.ts create mode 100644 packages/core/src/extensions/SyntaxHighlighting/SyntaxHighlighting.ts create mode 100644 packages/core/src/extensions/SyntaxHighlighting/inlineHighlight.test.ts create mode 100644 packages/core/src/extensions/SyntaxHighlighting/shiki.ts create mode 100644 packages/core/src/schema/inlineContent/createSpec.test.ts create mode 100644 packages/react/src/blocks/SourceWithPreview/PreviewPlaceholder.tsx create mode 100644 packages/react/src/blocks/SourceWithPreview/SourcePreviewPopup.ts create mode 100644 packages/react/src/blocks/SourceWithPreview/SourceWithPreview.tsx create mode 100644 packages/react/src/blocks/SourceWithPreview/block/SourceBlockWithPreview.tsx create mode 100644 packages/react/src/blocks/SourceWithPreview/block/useSourceBlockPreviewPopup.ts create mode 100644 packages/react/src/blocks/SourceWithPreview/inlineContent/SourceInlineContentWithPreview.tsx create mode 100644 packages/react/src/blocks/SourceWithPreview/inlineContent/useSourceInlineContentPreviewPopup.ts create mode 100644 packages/xl-email-exporter/src/react-email/imageDelivery.test.ts create mode 100644 packages/xl-email-exporter/src/react-email/imageDelivery.ts create mode 100644 packages/xl-odt-exporter/src/odt/util/createODTImageParagraph.tsx create mode 100644 shared/util/browserImageTestUtil.ts create mode 100644 shared/util/odtTestUtil.ts create mode 100644 tests/src/end-to-end/exporters/__screenshots__/exporterImages.test.tsx/email-export-chromium-linux.png create mode 100644 tests/src/end-to-end/exporters/__screenshots__/exporterImages.test.tsx/email-export-firefox-linux.png create mode 100644 tests/src/end-to-end/exporters/__screenshots__/exporterImages.test.tsx/email-export-webkit-linux.png create mode 100644 tests/src/end-to-end/exporters/__screenshots__/exporterImages.test.tsx/pdf-export-page-1-chromium-linux.png create mode 100644 tests/src/end-to-end/exporters/__screenshots__/exporterImages.test.tsx/pdf-export-page-2-chromium-linux.png create mode 100644 tests/src/end-to-end/exporters/__screenshots__/exporterImages.test.tsx/pdf-export-page-3-chromium-linux.png create mode 100644 tests/src/end-to-end/exporters/__screenshots__/exporterImages.test.tsx/pdf-export-page-4-chromium-linux.png create mode 100644 tests/src/end-to-end/exporters/exporterImages.test.tsx create mode 100644 tests/src/end-to-end/screenshots/__screenshots__/screenshotFull.test.tsx/screenshot-full-tall-element-chromium-linux.png create mode 100644 tests/src/end-to-end/screenshots/__screenshots__/screenshotFull.test.tsx/screenshot-full-tall-element-firefox-linux.png create mode 100644 tests/src/end-to-end/screenshots/__screenshots__/screenshotFull.test.tsx/screenshot-full-tall-element-webkit-linux.png create mode 100644 tests/src/end-to-end/screenshots/screenshotFull.test.tsx create mode 100644 tests/src/unit/react/clipboard/copy/copyTestInstances.ts create mode 100644 tests/src/unit/react/clipboard/copy/runTests.test.ts create mode 100644 tests/src/unit/react/clipboard/copyPasteEquality/copyPasteEqualityTestInstances.ts create mode 100644 tests/src/unit/react/clipboard/copyPasteEquality/runTests.test.ts create mode 100644 tests/src/unit/react/formatConversion/export/__snapshots__/markdown/codeBlock/nested.md create mode 100644 tests/src/unit/react/formatConversion/parse/parseTestInstances.ts create mode 100644 tests/src/unit/react/formatConversion/parse/runTests.test.ts create mode 100644 tests/src/utils/screenshotFull.ts diff --git a/examples/04-theming/06-code-block/src/App.tsx b/examples/04-theming/06-code-block/src/App.tsx index 82d10bae9e..b5b3fbbd3a 100644 --- a/examples/04-theming/06-code-block/src/App.tsx +++ b/examples/04-theming/06-code-block/src/App.tsx @@ -3,12 +3,16 @@ import "@blocknote/core/fonts/inter.css"; import { BlockNoteView } from "@blocknote/mantine"; import "@blocknote/mantine/style.css"; import { useCreateBlockNote } from "@blocknote/react"; -// This packages some of the most used languages in on-demand bundle -import { codeBlockOptions } from "@blocknote/code-block"; +// This packages some of the most used languages in on-demand bundle, and a +// ready-to-use syntax highlighter extension configured with them. +import { codeBlockOptions, syntaxHighlighter } from "@blocknote/code-block"; export default function App() { // Creates a new editor instance. const editor = useCreateBlockNote({ + // Adding the syntax highlighter extension enables syntax highlighting for + // the code block. Without it, code renders as plain text. + extensions: [syntaxHighlighter], schema: BlockNoteSchema.create().extend({ blockSpecs: { codeBlock: createCodeBlockSpec(codeBlockOptions), diff --git a/examples/04-theming/07-custom-code-block/.bnexample.json b/examples/04-theming/07-custom-code-block/.bnexample.json index 84166710e3..0ab79ff45e 100644 --- a/examples/04-theming/07-custom-code-block/.bnexample.json +++ b/examples/04-theming/07-custom-code-block/.bnexample.json @@ -5,10 +5,10 @@ "tags": ["Basic"], "dependencies": { "@blocknote/code-block": "latest", - "@shikijs/core": "^4", - "@shikijs/engine-javascript": "^4", - "@shikijs/langs-precompiled": "^4", - "@shikijs/themes": "^4", - "@shikijs/types": "^4" + "@shikijs/core": "^4.4.3", + "@shikijs/engine-javascript": "^4.4.3", + "@shikijs/langs-precompiled": "^4.4.3", + "@shikijs/themes": "^4.4.3", + "@shikijs/types": "^4.4.3" } } diff --git a/examples/04-theming/07-custom-code-block/src/App.tsx b/examples/04-theming/07-custom-code-block/src/App.tsx index 8a9c74eac1..387d3463c8 100644 --- a/examples/04-theming/07-custom-code-block/src/App.tsx +++ b/examples/04-theming/07-custom-code-block/src/App.tsx @@ -1,4 +1,8 @@ -import { BlockNoteSchema, createCodeBlockSpec } from "@blocknote/core"; +import { + BlockNoteSchema, + createCodeBlockSpec, + SyntaxHighlightingExtension, +} from "@blocknote/core"; import "@blocknote/core/fonts/inter.css"; import { BlockNoteView } from "@blocknote/mantine"; import "@blocknote/mantine/style.css"; @@ -6,9 +10,22 @@ import { useCreateBlockNote } from "@blocknote/react"; // Bundle created from `npx shiki-codegen --langs typescript,javascript,react --themes light-plus,dark-plus --engine javascript --precompiled ./shiki.bundle.ts` import { createHighlighter } from "./shiki.bundle"; +// Syntax highlighting is a separate extension, configured with a highlighter. +// Here we build one from our own custom Shiki bundle (with `dark-plus` / +// `light-plus` themes) and pass it to the editor's `extensions` below. +const syntaxHighlighter = SyntaxHighlightingExtension({ + // This creates a highlighter, it can be asynchronous to load it afterwards + createHighlighter: () => + createHighlighter({ + themes: ["dark-plus", "light-plus"], + langs: [], + }), +}); + export default function App() { // Creates a new editor instance. const editor = useCreateBlockNote({ + extensions: [syntaxHighlighter], schema: BlockNoteSchema.create().extend({ blockSpecs: { codeBlock: createCodeBlockSpec({ @@ -27,12 +44,6 @@ export default function App() { name: "Vue", }, }, - // This creates a highlighter, it can be asynchronous to load it afterwards - createHighlighter: () => - createHighlighter({ - themes: ["dark-plus", "light-plus"], - langs: [], - }), }), }, }), diff --git a/examples/05-interoperability/05-converting-blocks-to-pdf/.bnexample.json b/examples/05-interoperability/05-converting-blocks-to-pdf/.bnexample.json index 6115e659a5..553ec97d2c 100644 --- a/examples/05-interoperability/05-converting-blocks-to-pdf/.bnexample.json +++ b/examples/05-interoperability/05-converting-blocks-to-pdf/.bnexample.json @@ -4,9 +4,13 @@ "author": "yousefed", "tags": ["Interoperability"], "dependencies": { - "@blocknote/xl-pdf-exporter": "latest", + "@blocknote/diagram-block": "latest", + "@blocknote/math-block": "latest", "@blocknote/xl-multi-column": "latest", - "@react-pdf/renderer": "^4.3.0" + "@blocknote/xl-pdf-exporter": "latest", + "@react-pdf/math": "^2.0.1", + "@react-pdf/renderer": "^4.5.1", + "mathjax-full": "^3.2.2" }, "pro": true } diff --git a/examples/05-interoperability/05-converting-blocks-to-pdf/src/App.tsx b/examples/05-interoperability/05-converting-blocks-to-pdf/src/App.tsx index 4aaad9c805..956e045e8f 100644 --- a/examples/05-interoperability/05-converting-blocks-to-pdf/src/App.tsx +++ b/examples/05-interoperability/05-converting-blocks-to-pdf/src/App.tsx @@ -8,6 +8,11 @@ import "@blocknote/core/fonts/inter.css"; import * as locales from "@blocknote/core/locales"; import { BlockNoteView } from "@blocknote/mantine"; import "@blocknote/mantine/style.css"; +import { createReactDiagramBlockSpec } from "@blocknote/diagram-block"; +import { + createReactInlineMathSpec, + createReactMathBlockSpec, +} from "@blocknote/math-block"; import { SuggestionMenuController, getDefaultReactSlashMenuItems, @@ -24,6 +29,11 @@ import { PDFExporter, pdfDefaultSchemaMappings, } from "@blocknote/xl-pdf-exporter"; +import { diagramBlockMapping } from "@blocknote/diagram-block/pdf-exporter"; +import { + inlineMathMapping, + mathBlockMapping, +} from "@blocknote/math-block/pdf-exporter"; import { pdf, PDFViewer } from "@react-pdf/renderer"; import { JSX, useEffect, useMemo, useReducer, useState } from "react"; @@ -38,7 +48,16 @@ export default function App() { // Creates a new editor instance. const editor = useCreateBlockNote({ // Adds support for page breaks & multi-column blocks. - schema: withMultiColumn(withPageBreak(BlockNoteSchema.create())), + // Adds support for math & diagram blocks. + schema: withMultiColumn(withPageBreak(BlockNoteSchema.create())).extend({ + blockSpecs: { + mathBlock: createReactMathBlockSpec(), + diagram: createReactDiagramBlockSpec(), + }, + inlineContentSpecs: { + math: createReactInlineMathSpec(), + }, + }), dropCursor: multiColumnDropCursor, dictionary: { ...locales.en, @@ -330,6 +349,31 @@ export default function App() { console.log("Hello World", message); };`, }, + { + type: "mathBlock", + content: "a^2 = \\sqrt{b^2 + c^2}", + }, + { + type: "diagram", + content: `graph TD + A[Start] --> B{Works?} + B -->|Yes| C[Ship it] + B -->|No| A`, + }, + { + type: "paragraph", + content: [ + { + type: "text", + text: "Inline math: ", + styles: {}, + }, + { + type: "math", + content: "e^{i\\pi} + 1 = 0", + }, + ], + }, { type: "columnList", children: [ @@ -402,7 +446,21 @@ export default function App() { // Exports the editor document to PDF whenever it changes. const onChange = async () => { - const exporter = new PDFExporter(editor.schema, pdfDefaultSchemaMappings); + const exporter = new PDFExporter(editor.schema, { + ...pdfDefaultSchemaMappings, + blockMapping: { + ...pdfDefaultSchemaMappings.blockMapping, + // Embeds diagrams as images instead of their Mermaid source. + diagram: diagramBlockMapping, + // Renders math blocks as formulas instead of their LaTeX source. + mathBlock: mathBlockMapping, + }, + inlineContentMapping: { + ...pdfDefaultSchemaMappings.inlineContentMapping, + // Renders inline math as formula images instead of its LaTeX source. + math: inlineMathMapping, + }, + }); const pdfDocument = await exporter.toReactPDFDocument(editor.document); setPDFDocument(pdfDocument); forceRerender(); diff --git a/examples/05-interoperability/06-converting-blocks-to-docx/.bnexample.json b/examples/05-interoperability/06-converting-blocks-to-docx/.bnexample.json index 17ec620bc9..f370c604f4 100644 --- a/examples/05-interoperability/06-converting-blocks-to-docx/.bnexample.json +++ b/examples/05-interoperability/06-converting-blocks-to-docx/.bnexample.json @@ -4,8 +4,11 @@ "author": "yousefed", "tags": [""], "dependencies": { + "@blocknote/diagram-block": "latest", + "@blocknote/math-block": "latest", "@blocknote/xl-docx-exporter": "latest", - "@blocknote/xl-multi-column": "latest" + "@blocknote/xl-multi-column": "latest", + "katex": "^0.16.11" }, "pro": true } diff --git a/examples/05-interoperability/06-converting-blocks-to-docx/src/App.tsx b/examples/05-interoperability/06-converting-blocks-to-docx/src/App.tsx index 4b873d9a40..8907bf760f 100644 --- a/examples/05-interoperability/06-converting-blocks-to-docx/src/App.tsx +++ b/examples/05-interoperability/06-converting-blocks-to-docx/src/App.tsx @@ -8,6 +8,11 @@ import "@blocknote/core/fonts/inter.css"; import * as locales from "@blocknote/core/locales"; import { BlockNoteView } from "@blocknote/mantine"; import "@blocknote/mantine/style.css"; +import { + createReactInlineMathSpec, + createReactMathBlockSpec, +} from "@blocknote/math-block"; +import { createReactDiagramBlockSpec } from "@blocknote/diagram-block"; import { SuggestionMenuController, getDefaultReactSlashMenuItems, @@ -18,6 +23,11 @@ import { DOCXExporter, docxDefaultSchemaMappings, } from "@blocknote/xl-docx-exporter"; +import { diagramBlockMapping } from "@blocknote/diagram-block/docx-exporter"; +import { + inlineMathMapping, + mathBlockMapping, +} from "@blocknote/math-block/docx-exporter"; import { getMultiColumnSlashMenuItems, multiColumnDropCursor, @@ -32,7 +42,16 @@ export default function App() { // Creates a new editor instance. const editor = useCreateBlockNote({ // Adds support for page breaks & multi-column blocks. - schema: withMultiColumn(withPageBreak(BlockNoteSchema.create())), + // Adds support for math & diagram blocks. + schema: withMultiColumn(withPageBreak(BlockNoteSchema.create())).extend({ + blockSpecs: { + mathBlock: createReactMathBlockSpec(), + diagram: createReactDiagramBlockSpec(), + }, + inlineContentSpecs: { + math: createReactInlineMathSpec(), + }, + }), dropCursor: multiColumnDropCursor, dictionary: { ...locales.en, @@ -324,6 +343,31 @@ export default function App() { console.log("Hello World", message); };`, }, + { + type: "mathBlock", + content: "a^2 = \\sqrt{b^2 + c^2}", + }, + { + type: "diagram", + content: `graph TD + A[Start] --> B{Works?} + B -->|Yes| C[Ship it] + B -->|No| A`, + }, + { + type: "paragraph", + content: [ + { + type: "text", + text: "Inline math: ", + styles: {}, + }, + { + type: "math", + content: "e^{i\\pi} + 1 = 0", + }, + ], + }, { type: "columnList", @@ -396,7 +440,23 @@ export default function App() { // Exports the editor content to DOCX and downloads it. const onDownloadClick = async () => { - const exporter = new DOCXExporter(editor.schema, docxDefaultSchemaMappings); + const exporter = new DOCXExporter(editor.schema, { + ...docxDefaultSchemaMappings, + blockMapping: { + ...docxDefaultSchemaMappings.blockMapping, + // Embeds diagrams as images instead of their Mermaid source. + diagram: diagramBlockMapping, + // Renders math blocks as native equations instead of their LaTeX + // source. + mathBlock: mathBlockMapping, + }, + inlineContentMapping: { + ...docxDefaultSchemaMappings.inlineContentMapping, + // Renders inline math as native equations instead of its LaTeX + // source. + math: inlineMathMapping, + }, + }); const blob = await exporter.toBlob(editor.document); const link = document.createElement("a"); diff --git a/examples/05-interoperability/07-converting-blocks-to-odt/.bnexample.json b/examples/05-interoperability/07-converting-blocks-to-odt/.bnexample.json index 7e3174aeea..3fee215859 100644 --- a/examples/05-interoperability/07-converting-blocks-to-odt/.bnexample.json +++ b/examples/05-interoperability/07-converting-blocks-to-odt/.bnexample.json @@ -4,8 +4,11 @@ "author": "areknawo", "tags": [""], "dependencies": { + "@blocknote/diagram-block": "latest", + "@blocknote/math-block": "latest", + "@blocknote/xl-multi-column": "latest", "@blocknote/xl-odt-exporter": "latest", - "@blocknote/xl-multi-column": "latest" + "katex": "^0.16.11" }, "pro": true } diff --git a/examples/05-interoperability/07-converting-blocks-to-odt/src/App.tsx b/examples/05-interoperability/07-converting-blocks-to-odt/src/App.tsx index 7b884ac658..518617bafd 100644 --- a/examples/05-interoperability/07-converting-blocks-to-odt/src/App.tsx +++ b/examples/05-interoperability/07-converting-blocks-to-odt/src/App.tsx @@ -8,6 +8,11 @@ import * as locales from "@blocknote/core/locales"; import "@blocknote/core/fonts/inter.css"; import { BlockNoteView } from "@blocknote/mantine"; import "@blocknote/mantine/style.css"; +import { + createReactInlineMathSpec, + createReactMathBlockSpec, +} from "@blocknote/math-block"; +import { createReactDiagramBlockSpec } from "@blocknote/diagram-block"; import { SuggestionMenuController, getDefaultReactSlashMenuItems, @@ -18,6 +23,11 @@ import { ODTExporter, odtDefaultSchemaMappings, } from "@blocknote/xl-odt-exporter"; +import { diagramBlockMapping } from "@blocknote/diagram-block/odt-exporter"; +import { + inlineMathMapping, + mathBlockMapping, +} from "@blocknote/math-block/odt-exporter"; import { getMultiColumnSlashMenuItems, multiColumnDropCursor, @@ -32,7 +42,16 @@ export default function App() { // Creates a new editor instance. const editor = useCreateBlockNote({ // Adds support for page breaks & multi-column blocks. - schema: withMultiColumn(withPageBreak(BlockNoteSchema.create())), + // Adds support for math & diagram blocks. + schema: withMultiColumn(withPageBreak(BlockNoteSchema.create())).extend({ + blockSpecs: { + mathBlock: createReactMathBlockSpec(), + diagram: createReactDiagramBlockSpec(), + }, + inlineContentSpecs: { + math: createReactInlineMathSpec(), + }, + }), dropCursor: multiColumnDropCursor, dictionary: { ...locales.en, @@ -324,6 +343,31 @@ export default function App() { console.log("Hello World", message); };`, }, + { + type: "mathBlock", + content: "a^2 = \\sqrt{b^2 + c^2}", + }, + { + type: "diagram", + content: `graph TD + A[Start] --> B{Works?} + B -->|Yes| C[Ship it] + B -->|No| A`, + }, + { + type: "paragraph", + content: [ + { + type: "text", + text: "Inline math: ", + styles: {}, + }, + { + type: "math", + content: "e^{i\\pi} + 1 = 0", + }, + ], + }, { type: "columnList", children: [ @@ -395,7 +439,23 @@ export default function App() { // Exports the editor content to ODT and downloads it. const onDownloadClick = async () => { - const exporter = new ODTExporter(editor.schema, odtDefaultSchemaMappings); + const exporter = new ODTExporter(editor.schema, { + ...odtDefaultSchemaMappings, + blockMapping: { + ...odtDefaultSchemaMappings.blockMapping, + // Embeds diagrams as images instead of their Mermaid source. + diagram: diagramBlockMapping, + // Renders math blocks as native equations instead of their LaTeX + // source. + mathBlock: mathBlockMapping, + }, + inlineContentMapping: { + ...odtDefaultSchemaMappings.inlineContentMapping, + // Renders inline math as native equations instead of its LaTeX + // source. + math: inlineMathMapping, + }, + }); const blob = await exporter.toODTDocument(editor.document); const link = document.createElement("a"); diff --git a/examples/05-interoperability/08-converting-blocks-to-react-email/.bnexample.json b/examples/05-interoperability/08-converting-blocks-to-react-email/.bnexample.json index 34a9fffa9c..12f951eec2 100644 --- a/examples/05-interoperability/08-converting-blocks-to-react-email/.bnexample.json +++ b/examples/05-interoperability/08-converting-blocks-to-react-email/.bnexample.json @@ -4,6 +4,8 @@ "author": "jmarbutt", "tags": [""], "dependencies": { + "@blocknote/diagram-block": "latest", + "@blocknote/math-block": "latest", "@blocknote/xl-email-exporter": "latest", "@react-email/render": "^2.0.4" }, diff --git a/examples/05-interoperability/08-converting-blocks-to-react-email/src/App.tsx b/examples/05-interoperability/08-converting-blocks-to-react-email/src/App.tsx index 9db579a8d1..86640c049b 100644 --- a/examples/05-interoperability/08-converting-blocks-to-react-email/src/App.tsx +++ b/examples/05-interoperability/08-converting-blocks-to-react-email/src/App.tsx @@ -17,6 +17,16 @@ import { useCreateBlockNote, usePrefersColorScheme, } from "@blocknote/react"; +import { createReactDiagramBlockSpec } from "@blocknote/diagram-block"; +import { createDiagramBlockMapping } from "@blocknote/diagram-block/email-exporter"; +import { + createReactInlineMathSpec, + createReactMathBlockSpec, +} from "@blocknote/math-block"; +import { + createInlineMathMapping, + createMathBlockMapping, +} from "@blocknote/math-block/email-exporter"; import { ReactEmailExporter, reactEmailDefaultSchemaMappings, @@ -33,7 +43,16 @@ export default function App() { // Creates a new editor instance. const editor = useCreateBlockNote({ // Adds support for page breaks. - schema: withPageBreak(BlockNoteSchema.create()), + // Adds support for math & diagram blocks. + schema: withPageBreak(BlockNoteSchema.create()).extend({ + blockSpecs: { + mathBlock: createReactMathBlockSpec(), + diagram: createReactDiagramBlockSpec(), + }, + inlineContentSpecs: { + math: createReactInlineMathSpec(), + }, + }), // Adds support for advanced table features. tables: { splitCells: true, @@ -320,6 +339,31 @@ export default function App() { console.log("Hello World", message); };`, }, + { + type: "mathBlock", + content: "a^2 = \\sqrt{b^2 + c^2}", + }, + { + type: "paragraph", + content: [ + { + type: "text", + text: "Inline math: ", + styles: {}, + }, + { + type: "math", + content: "e^{i\\pi} + 1 = 0", + }, + ], + }, + { + type: "diagram", + content: `graph TD + A[Start] --> B{Works?} + B -->|Yes| C[Ship it] + B -->|No| A`, + }, ], }); @@ -345,7 +389,24 @@ export default function App() { existingContext?.colorSchemePreference || systemColorScheme; const exporter = new ReactEmailExporter( editor.schema, - reactEmailDefaultSchemaMappings, + { + ...reactEmailDefaultSchemaMappings, + blockMapping: { + ...reactEmailDefaultSchemaMappings.blockMapping, + // Renders math blocks & diagrams as images with the source as alt + // text. Embedded as data URLs by default - when actually sending + // emails, deliver them as inline attachments instead (which Gmail + // & Outlook also display) by passing an `imageDelivery` from + // `createCIDImageDelivery()` to each mapping, and handing its + // `attachments` to your mailer alongside the HTML. + mathBlock: createMathBlockMapping(), + diagram: createDiagramBlockMapping(), + }, + inlineContentMapping: { + ...reactEmailDefaultSchemaMappings.inlineContentMapping, + math: createInlineMathMapping(), + }, + }, { colors: colorScheme === "dark" ? COLORS_DARK_MODE_DEFAULT : COLORS_DEFAULT, diff --git a/examples/06-custom-schema/11-source-with-preview/.bnexample.json b/examples/06-custom-schema/11-source-with-preview/.bnexample.json new file mode 100644 index 0000000000..5539a634d2 --- /dev/null +++ b/examples/06-custom-schema/11-source-with-preview/.bnexample.json @@ -0,0 +1,9 @@ +{ + "playground": true, + "docs": true, + "author": "yousefed", + "tags": ["Advanced", "Blocks", "Custom Schemas"], + "dependencies": { + "react-icons": "^5.5.0" + } +} diff --git a/examples/06-custom-schema/11-source-with-preview/README.md b/examples/06-custom-schema/11-source-with-preview/README.md new file mode 100644 index 0000000000..844fc92044 --- /dev/null +++ b/examples/06-custom-schema/11-source-with-preview/README.md @@ -0,0 +1,11 @@ +# Source with Preview Blocks + +In this example, we build custom blocks on the source-with-preview pattern — the same building blocks behind BlockNote's math and diagram blocks. A custom "CSV table" block renders its comma-separated source as a table, and a custom "color" inline content renders a CSS color as a swatch. Both show the rendered preview in place, while the source is edited in a popup. + +**Try it out:** Click the table or a color chip to edit its source! + +**Relevant Docs:** + +- [Source with Preview Blocks](/docs/features/custom-schemas/source-with-preview) +- [Custom Blocks](/docs/features/custom-schemas/custom-blocks) +- [Custom Inline Content](/docs/features/custom-schemas/custom-inline-content) diff --git a/examples/06-custom-schema/11-source-with-preview/main.tsx b/examples/06-custom-schema/11-source-with-preview/main.tsx new file mode 100644 index 0000000000..1260513388 --- /dev/null +++ b/examples/06-custom-schema/11-source-with-preview/main.tsx @@ -0,0 +1,11 @@ +// AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY +import React from "react"; +import { createRoot } from "react-dom/client"; +import App from "./src/App.jsx"; + +const root = createRoot(document.getElementById("root")!); +root.render( + + + , +); diff --git a/examples/06-custom-schema/11-source-with-preview/src/App.tsx b/examples/06-custom-schema/11-source-with-preview/src/App.tsx new file mode 100644 index 0000000000..3485907844 --- /dev/null +++ b/examples/06-custom-schema/11-source-with-preview/src/App.tsx @@ -0,0 +1,214 @@ +import { + BlockNoteSchema, + createBlockConfig, + CustomInlineContentConfig, + plainContentToString, +} from "@blocknote/core"; +import "@blocknote/core/fonts/inter.css"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; +import { + createReactBlockSpec, + createReactInlineContentSpec, + PreviewPlaceholder, + ReactCustomBlockRenderProps, + ReactCustomInlineContentRenderProps, + SourceBlockWithPreview, + SourceInlineContentWithPreview, + useCreateBlockNote, +} from "@blocknote/react"; +import { TbTable } from "react-icons/tb"; + +import "./styles.css"; + +// A custom "CSV table" block: authored as comma-separated values in a source +// popup, rendered as a table. Built on the same source-with-preview pattern +// as BlockNote's math and diagram blocks. +const createCSVTableBlockConfig = createBlockConfig( + () => + ({ + type: "csvTable" as const, + propSchema: {}, + // The source is stored as the block's plain text content. + content: "plain" as const, + }) as const, +); + +type CSVTableBlockConfig = ReturnType; + +// Renders the CSV source to a table element, or reports invalid source as an +// error. Expected failures are values, not exceptions - the preview +// component decides how to show them. +function renderCSV( + source: string, +): { table: string[][]; error?: undefined } | { error: string } { + const rows = source + .split("\n") + .filter((row) => row.trim()) + .map((row) => row.split(",").map((cell) => cell.trim())); + if (rows.length === 0) { + return { error: "No rows" }; + } + if (rows.some((row) => row.length !== rows[0].length)) { + return { error: "All rows must have the same number of columns" }; + } + return { table: rows }; +} + +const CSVTablePreview = ( + props: ReactCustomBlockRenderProps, +) => { + // The block's content as plain text, i.e. the source to render. + const source = plainContentToString(props.block.content).trim(); + const result = renderCSV(source); + + return ( + + + {result.table.map((row, i) => ( + + {row.map((cell, j) => ( + {cell} + ))} + + ))} + + + ) : undefined + } + // Shown below the source in the popup while editing. + error={result.error} + // The compact error state shown in place of the preview. + errorPreview={ + } + text="Invalid CSV - click to fix" + /> + } + // Shown in place of the preview when the source is empty. + emptySourcePlaceholder={ + } text="Add a CSV table" /> + } + sourcePlaceholder="Enter comma-separated values" + /> + ); +}; + +const createCSVTableBlockSpec = createReactBlockSpec( + createCSVTableBlockConfig, + { + meta: { + code: true, + defining: true, + isolating: false, + // Marks the block as rendering a preview with an editable source popup + // (driven by an editor-wide extension - nothing to register). + hasPreview: true, + // Enter inserts a newline while the popup is open (multiline source); + // use "shift+enter" for single-line sources, where Enter closes the + // popup instead. + hardBreakShortcut: "enter", + }, + render: CSVTablePreview, + }, +); + +// A custom "color" inline content: authored as a CSS color, rendered as a +// color chip that flows with the text. +const colorChipConfig = { + type: "colorChip" as const, + propSchema: {}, + content: "plain" as const, +} satisfies CustomInlineContentConfig; + +const ColorChipPreview = ( + props: ReactCustomInlineContentRenderProps, +) => { + // For "plain" inline content, `content` is already a plain string. + const source = props.inlineContent.content.trim(); + const isValidColor = CSS.supports("color", source); + + return ( + + + {source} + + ) : undefined + } + error={isValidColor ? undefined : `Not a CSS color: "${source}"`} + sourcePlaceholder="Enter a CSS color" + /> + ); +}; + +const createColorChipSpec = () => + createReactInlineContentSpec(colorChipConfig, { + meta: { + code: true, + hasPreview: true, + }, + render: ColorChipPreview, + }); + +// Our schema with the two custom specs added. +const schema = BlockNoteSchema.create().extend({ + blockSpecs: { + csvTable: createCSVTableBlockSpec(), + }, + inlineContentSpecs: { + colorChip: createColorChipSpec(), + }, +}); + +export default function App() { + const editor = useCreateBlockNote({ + schema, + initialContent: [ + { + type: "paragraph", + content: "Click the table to edit its comma-separated source:", + }, + { + type: "csvTable", + content: "Name, Role\nAda, Engineer\nGrace, Admiral", + }, + { + type: "paragraph", + content: [ + "Inline content works too - this color chip ", + { + type: "colorChip", + content: "rebeccapurple", + }, + " is editable when the selection is inside it.", + ], + }, + { + type: "paragraph", + }, + ], + }); + + return ; +} diff --git a/examples/06-custom-schema/11-source-with-preview/src/styles.css b/examples/06-custom-schema/11-source-with-preview/src/styles.css new file mode 100644 index 0000000000..167d4f7af2 --- /dev/null +++ b/examples/06-custom-schema/11-source-with-preview/src/styles.css @@ -0,0 +1,26 @@ +.csv-table { + border-collapse: collapse; +} + +.csv-table td { + border: 1px solid #ddd; + padding: 4px 12px; +} + +.color-chip { + display: inline-flex; + align-items: center; + gap: 0.3em; + border: 1px solid #ddd; + border-radius: 4px; + padding: 0 0.3em; + font-family: monospace; + font-size: 0.9em; +} + +.color-chip-swatch { + display: inline-block; + width: 0.8em; + height: 0.8em; + border-radius: 2px; +} diff --git a/examples/07-collaboration/14-suggestion-gallery/.bnexample.json b/examples/07-collaboration/14-suggestion-gallery/.bnexample.json index 2e3d585a3a..e03899c16d 100644 --- a/examples/07-collaboration/14-suggestion-gallery/.bnexample.json +++ b/examples/07-collaboration/14-suggestion-gallery/.bnexample.json @@ -4,7 +4,6 @@ "author": "yousefed", "tags": ["Advanced", "Development", "Collaboration"], "dependencies": { - "@blocknote/shared": "latest", "@blocknote/xl-multi-column": "latest", "@y/protocols": "^1.0.6-rc.1", "@y/y": "^14.0.0-rc.23" diff --git a/examples/07-collaboration/14-suggestion-gallery/src/scenarios.ts b/examples/07-collaboration/14-suggestion-gallery/src/scenarios.ts index f01d84cc60..e485ed3f87 100644 --- a/examples/07-collaboration/14-suggestion-gallery/src/scenarios.ts +++ b/examples/07-collaboration/14-suggestion-gallery/src/scenarios.ts @@ -1,4 +1,4 @@ -import { testDocument } from "@blocknote/shared/testDocument"; +import { testDocument } from "@shared/testDocument.js"; import type { GalleryEditor, GalleryPartialBlock } from "./gallerySchema"; diff --git a/packages/code-block/src/index.test.ts b/packages/code-block/src/index.test.ts index f8a87bbdf4..8a83d858b5 100644 --- a/packages/code-block/src/index.test.ts +++ b/packages/code-block/src/index.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vite-plus/test"; -import { codeBlockOptions } from "./index.js"; +import { codeBlockOptions, syntaxHighlighter } from "./index.js"; describe("codeBlock", () => { it("should exist", () => { @@ -11,7 +11,10 @@ describe("codeBlock", () => { it("should have supportedLanguages", () => { expect(codeBlockOptions.supportedLanguages).toBeDefined(); }); - it("should have createHighlighter", () => { - expect(codeBlockOptions.createHighlighter).toBeDefined(); + it("should not configure a highlighter (that's now the syntaxHighlighter extension)", () => { + expect("createHighlighter" in codeBlockOptions).toBe(false); + }); + it("should export a pre-configured syntaxHighlighter extension", () => { + expect(syntaxHighlighter).toBeDefined(); }); }); diff --git a/packages/code-block/src/index.ts b/packages/code-block/src/index.ts index 2cb588092d..7cc905f662 100644 --- a/packages/code-block/src/index.ts +++ b/packages/code-block/src/index.ts @@ -1,6 +1,27 @@ import type { CodeBlockOptions } from "@blocknote/core"; +import { SyntaxHighlightingExtension } from "@blocknote/core"; import { createHighlighter } from "./shiki.bundle.js"; +/** + * A ready-to-use syntax highlighting extension, pre-configured with this + * package's bundled Shiki highlighter (the languages in `codeBlockOptions` and + * the `github-dark` / `github-light` themes). Add it to the editor's + * `extensions` to enable syntax highlighting for code blocks (and any other + * block that declares a language, such as the math block): + * + * @example + * ```ts + * useCreateBlockNote({ extensions: [syntaxHighlighter] }); + * ``` + */ +export const syntaxHighlighter = SyntaxHighlightingExtension({ + createHighlighter: () => + createHighlighter({ + themes: ["github-dark", "github-light"], + langs: [], + }), +}); + export const codeBlockOptions = { defaultLanguage: "javascript", supportedLanguages: { @@ -197,9 +218,4 @@ export const codeBlockOptions = { aliases: ["objective-c", "objc"], }, }, - createHighlighter: () => - createHighlighter({ - themes: ["github-dark", "github-light"], - langs: [], - }), } satisfies CodeBlockOptions; diff --git a/packages/core/src/api/blockManipulation/commands/updateBlock/__snapshots__/updateBlock.test.ts.snap b/packages/core/src/api/blockManipulation/commands/updateBlock/__snapshots__/updateBlock.test.ts.snap index e4559884da..f98a42cfbf 100644 --- a/packages/core/src/api/blockManipulation/commands/updateBlock/__snapshots__/updateBlock.test.ts.snap +++ b/packages/core/src/api/blockManipulation/commands/updateBlock/__snapshots__/updateBlock.test.ts.snap @@ -3142,196 +3142,1780 @@ exports[`Test updateBlock > Update inline content to no content 2`] = ` ] `; -exports[`Test updateBlock > Update inline content to table content 1`] = ` +exports[`Test updateBlock > Update inline content to plain content 1`] = ` { "children": [], - "content": { - "columnWidths": [ - undefined, - undefined, - undefined, + "content": [ + { + "styles": {}, + "text": "Paragraph 0", + "type": "text", + }, + ], + "id": "paragraph-0", + "props": { + "language": "text", + }, + "type": "codeBlock", +} +`; + +exports[`Test updateBlock > Update inline content to plain content 2`] = ` +[ + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 0", + "type": "text", + }, ], - "headerCols": undefined, - "headerRows": undefined, - "rows": [ + "id": "paragraph-0", + "props": { + "language": "text", + }, + "type": "codeBlock", + }, + { + "children": [], + "content": [ { - "cells": [ - { - "content": [ - { - "styles": {}, - "text": "Cell 1", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, + "styles": {}, + "text": "Paragraph 1", + "type": "text", + }, + ], + "id": "paragraph-1", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [ + { + "children": [ { + "children": [], "content": [ { "styles": {}, - "text": "Cell 2", + "text": "Double Nested Paragraph 0", "type": "text", }, ], + "id": "double-nested-paragraph-0", "props": { "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, "textAlignment": "left", "textColor": "default", }, - "type": "tableCell", + "type": "paragraph", }, + ], + "content": [ { - "content": [ - { - "styles": {}, - "text": "Cell 3", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", + "styles": {}, + "text": "Nested Paragraph 0", + "type": "text", }, ], + "id": "nested-paragraph-0", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", }, + ], + "content": [ { - "cells": [ - { - "content": [ - { - "styles": {}, - "text": "Cell 4", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, + "styles": {}, + "text": "Paragraph with children", + "type": "text", + }, + ], + "id": "paragraph-with-children", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 2", + "type": "text", + }, + ], + "id": "paragraph-2", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph with props", + "type": "text", + }, + ], + "id": "paragraph-with-props", + "props": { + "backgroundColor": "default", + "textAlignment": "center", + "textColor": "red", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 3", + "type": "text", + }, + ], + "id": "paragraph-3", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": { + "bold": true, + }, + "text": "Paragraph", + "type": "text", + }, + { + "styles": {}, + "text": " with styled ", + "type": "text", + }, + { + "styles": { + "italic": true, + }, + "text": "content", + "type": "text", + }, + ], + "id": "paragraph-with-styled-content", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 4", + "type": "text", + }, + ], + "id": "paragraph-4", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Heading 1", + "type": "text", + }, + ], + "id": "heading-0", + "props": { + "backgroundColor": "default", + "isToggleable": false, + "level": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "heading", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 5", + "type": "text", + }, + ], + "id": "paragraph-5", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": undefined, + "id": "image-0", + "props": { + "backgroundColor": "default", + "caption": "", + "name": "", + "showPreview": true, + "textAlignment": "left", + "url": "https://via.placeholder.com/150", + }, + "type": "image", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 6", + "type": "text", + }, + ], + "id": "paragraph-6", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": { + "columnWidths": [ + undefined, + undefined, + undefined, + ], + "headerCols": undefined, + "headerRows": undefined, + "rows": [ + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 1", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 2", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 3", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 4", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 5", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 6", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 7", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 8", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 9", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + ], + "type": "tableContent", + }, + "id": "table-0", + "props": { + "textColor": "default", + }, + "type": "table", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 7", + "type": "text", + }, + ], + "id": "paragraph-7", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [], + "id": "empty-paragraph", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 8", + "type": "text", + }, + ], + "id": "paragraph-8", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [ + { + "children": [ + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Double Nested Paragraph 1", + "type": "text", + }, + ], + "id": "double-nested-paragraph-1", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + ], + "content": [ + { + "styles": {}, + "text": "Nested Paragraph 1", + "type": "text", + }, + ], + "id": "nested-paragraph-1", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + ], + "content": [ + { + "styles": { + "bold": true, + }, + "text": "Heading", + "type": "text", + }, + { + "styles": {}, + "text": " with styled ", + "type": "text", + }, + { + "styles": { + "italic": true, + }, + "text": "content", + "type": "text", + }, + ], + "id": "heading-with-everything", + "props": { + "backgroundColor": "red", + "isToggleable": false, + "level": 2, + "textAlignment": "center", + "textColor": "red", + }, + "type": "heading", + }, + { + "children": [], + "content": [], + "id": "paragraph-9", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, +] +`; + +exports[`Test updateBlock > Update inline content to table content 1`] = ` +{ + "children": [], + "content": { + "columnWidths": [ + undefined, + undefined, + undefined, + ], + "headerCols": undefined, + "headerRows": undefined, + "rows": [ + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 1", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 2", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 3", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 4", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 5", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 6", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 7", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 8", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 9", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + ], + "type": "tableContent", + }, + "id": "paragraph-0", + "props": { + "textColor": "default", + }, + "type": "table", +} +`; + +exports[`Test updateBlock > Update inline content to table content 2`] = ` +[ + { + "children": [], + "content": { + "columnWidths": [ + undefined, + undefined, + undefined, + ], + "headerCols": undefined, + "headerRows": undefined, + "rows": [ + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 1", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 2", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 3", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 4", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 5", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 6", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 7", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 8", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 9", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + ], + "type": "tableContent", + }, + "id": "paragraph-0", + "props": { + "textColor": "default", + }, + "type": "table", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 1", + "type": "text", + }, + ], + "id": "paragraph-1", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [ + { + "children": [ + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Double Nested Paragraph 0", + "type": "text", + }, + ], + "id": "double-nested-paragraph-0", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + ], + "content": [ + { + "styles": {}, + "text": "Nested Paragraph 0", + "type": "text", + }, + ], + "id": "nested-paragraph-0", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + ], + "content": [ + { + "styles": {}, + "text": "Paragraph with children", + "type": "text", + }, + ], + "id": "paragraph-with-children", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 2", + "type": "text", + }, + ], + "id": "paragraph-2", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph with props", + "type": "text", + }, + ], + "id": "paragraph-with-props", + "props": { + "backgroundColor": "default", + "textAlignment": "center", + "textColor": "red", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 3", + "type": "text", + }, + ], + "id": "paragraph-3", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": { + "bold": true, + }, + "text": "Paragraph", + "type": "text", + }, + { + "styles": {}, + "text": " with styled ", + "type": "text", + }, + { + "styles": { + "italic": true, + }, + "text": "content", + "type": "text", + }, + ], + "id": "paragraph-with-styled-content", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 4", + "type": "text", + }, + ], + "id": "paragraph-4", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Heading 1", + "type": "text", + }, + ], + "id": "heading-0", + "props": { + "backgroundColor": "default", + "isToggleable": false, + "level": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "heading", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 5", + "type": "text", + }, + ], + "id": "paragraph-5", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": undefined, + "id": "image-0", + "props": { + "backgroundColor": "default", + "caption": "", + "name": "", + "showPreview": true, + "textAlignment": "left", + "url": "https://via.placeholder.com/150", + }, + "type": "image", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 6", + "type": "text", + }, + ], + "id": "paragraph-6", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": { + "columnWidths": [ + undefined, + undefined, + undefined, + ], + "headerCols": undefined, + "headerRows": undefined, + "rows": [ + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 1", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 2", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 3", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 4", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 5", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 6", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 7", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 8", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 9", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + ], + "type": "tableContent", + }, + "id": "table-0", + "props": { + "textColor": "default", + }, + "type": "table", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 7", + "type": "text", + }, + ], + "id": "paragraph-7", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [], + "id": "empty-paragraph", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 8", + "type": "text", + }, + ], + "id": "paragraph-8", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [ + { + "children": [ { + "children": [], "content": [ { "styles": {}, - "text": "Cell 5", + "text": "Double Nested Paragraph 1", "type": "text", }, ], + "id": "double-nested-paragraph-1", "props": { "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, "textAlignment": "left", "textColor": "default", }, - "type": "tableCell", + "type": "paragraph", + }, + ], + "content": [ + { + "styles": {}, + "text": "Nested Paragraph 1", + "type": "text", }, + ], + "id": "nested-paragraph-1", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + ], + "content": [ + { + "styles": { + "bold": true, + }, + "text": "Heading", + "type": "text", + }, + { + "styles": {}, + "text": " with styled ", + "type": "text", + }, + { + "styles": { + "italic": true, + }, + "text": "content", + "type": "text", + }, + ], + "id": "heading-with-everything", + "props": { + "backgroundColor": "red", + "isToggleable": false, + "level": 2, + "textAlignment": "center", + "textColor": "red", + }, + "type": "heading", + }, + { + "children": [], + "content": [], + "id": "paragraph-9", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, +] +`; + +exports[`Test updateBlock > Update no content to empty inline content 1`] = ` +{ + "children": [], + "content": [], + "id": "image-0", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", +} +`; + +exports[`Test updateBlock > Update no content to empty inline content 2`] = ` +[ + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 0", + "type": "text", + }, + ], + "id": "paragraph-0", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 1", + "type": "text", + }, + ], + "id": "paragraph-1", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [ + { + "children": [ { + "children": [], "content": [ { "styles": {}, - "text": "Cell 6", + "text": "Double Nested Paragraph 0", "type": "text", }, ], + "id": "double-nested-paragraph-0", "props": { "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, "textAlignment": "left", "textColor": "default", }, - "type": "tableCell", + "type": "paragraph", + }, + ], + "content": [ + { + "styles": {}, + "text": "Nested Paragraph 0", + "type": "text", }, ], + "id": "nested-paragraph-0", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + ], + "content": [ + { + "styles": {}, + "text": "Paragraph with children", + "type": "text", + }, + ], + "id": "paragraph-with-children", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 2", + "type": "text", + }, + ], + "id": "paragraph-2", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph with props", + "type": "text", + }, + ], + "id": "paragraph-with-props", + "props": { + "backgroundColor": "default", + "textAlignment": "center", + "textColor": "red", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 3", + "type": "text", + }, + ], + "id": "paragraph-3", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": { + "bold": true, + }, + "text": "Paragraph", + "type": "text", + }, + { + "styles": {}, + "text": " with styled ", + "type": "text", + }, + { + "styles": { + "italic": true, + }, + "text": "content", + "type": "text", + }, + ], + "id": "paragraph-with-styled-content", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 4", + "type": "text", }, + ], + "id": "paragraph-4", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ { - "cells": [ - { - "content": [ - { - "styles": {}, - "text": "Cell 7", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, - { - "content": [ - { - "styles": {}, - "text": "Cell 8", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, - { - "content": [ - { - "styles": {}, - "text": "Cell 9", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, - ], + "styles": {}, + "text": "Heading 1", + "type": "text", }, ], - "type": "tableContent", + "id": "heading-0", + "props": { + "backgroundColor": "default", + "isToggleable": false, + "level": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "heading", }, - "id": "paragraph-0", - "props": { - "textColor": "default", + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 5", + "type": "text", + }, + ], + "id": "paragraph-5", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [], + "id": "image-0", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 6", + "type": "text", + }, + ], + "id": "paragraph-6", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", }, - "type": "table", -} -`; - -exports[`Test updateBlock > Update inline content to table content 2`] = ` -[ { "children": [], "content": { @@ -3511,11 +5095,176 @@ exports[`Test updateBlock > Update inline content to table content 2`] = ` ], "type": "tableContent", }, + "id": "table-0", + "props": { + "textColor": "default", + }, + "type": "table", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 7", + "type": "text", + }, + ], + "id": "paragraph-7", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [], + "id": "empty-paragraph", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 8", + "type": "text", + }, + ], + "id": "paragraph-8", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + { + "children": [ + { + "children": [ + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Double Nested Paragraph 1", + "type": "text", + }, + ], + "id": "double-nested-paragraph-1", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + ], + "content": [ + { + "styles": {}, + "text": "Nested Paragraph 1", + "type": "text", + }, + ], + "id": "nested-paragraph-1", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + ], + "content": [ + { + "styles": { + "bold": true, + }, + "text": "Heading", + "type": "text", + }, + { + "styles": {}, + "text": " with styled ", + "type": "text", + }, + { + "styles": { + "italic": true, + }, + "text": "content", + "type": "text", + }, + ], + "id": "heading-with-everything", + "props": { + "backgroundColor": "red", + "isToggleable": false, + "level": 2, + "textAlignment": "center", + "textColor": "red", + }, + "type": "heading", + }, + { + "children": [], + "content": [], + "id": "paragraph-9", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, +] +`; + +exports[`Test updateBlock > Update no content to empty table content 1`] = ` +{ + "children": [], + "content": { + "columnWidths": [], + "headerCols": undefined, + "headerRows": undefined, + "rows": [], + "type": "tableContent", + }, + "id": "image-0", + "props": { + "textColor": "default", + }, + "type": "table", +} +`; + +exports[`Test updateBlock > Update no content to empty table content 2`] = ` +[ + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 0", + "type": "text", + }, + ], "id": "paragraph-0", "props": { + "backgroundColor": "default", + "textAlignment": "left", "textColor": "default", }, - "type": "table", + "type": "paragraph", }, { "children": [], @@ -3724,17 +5473,14 @@ exports[`Test updateBlock > Update inline content to table content 2`] = ` }, { "children": [], - "content": undefined, + "content": [], "id": "image-0", "props": { "backgroundColor": "default", - "caption": "", - "name": "", - "showPreview": true, "textAlignment": "left", - "url": "https://via.placeholder.com/150", + "textColor": "default", }, - "type": "image", + "type": "paragraph", }, { "children": [], @@ -4066,10 +5812,16 @@ exports[`Test updateBlock > Update inline content to table content 2`] = ` ] `; -exports[`Test updateBlock > Update no content to empty inline content 1`] = ` +exports[`Test updateBlock > Update no content to inline content 1`] = ` { "children": [], - "content": [], + "content": [ + { + "styles": {}, + "text": "Paragraph", + "type": "text", + }, + ], "id": "image-0", "props": { "backgroundColor": "default", @@ -4080,7 +5832,7 @@ exports[`Test updateBlock > Update no content to empty inline content 1`] = ` } `; -exports[`Test updateBlock > Update no content to empty inline content 2`] = ` +exports[`Test updateBlock > Update no content to inline content 2`] = ` [ { "children": [], @@ -4306,7 +6058,13 @@ exports[`Test updateBlock > Update no content to empty inline content 2`] = ` }, { "children": [], - "content": [], + "content": [ + { + "styles": {}, + "text": "Paragraph", + "type": "text", + }, + ], "id": "image-0", "props": { "backgroundColor": "default", @@ -4621,38 +6379,208 @@ exports[`Test updateBlock > Update no content to empty inline content 2`] = ` "type": "text", }, ], - "id": "heading-with-everything", - "props": { - "backgroundColor": "red", - "isToggleable": false, - "level": 2, - "textAlignment": "center", - "textColor": "red", - }, - "type": "heading", - }, - { - "children": [], - "content": [], - "id": "paragraph-9", - "props": { - "backgroundColor": "default", - "textAlignment": "left", - "textColor": "default", - }, - "type": "paragraph", - }, -] -`; - -exports[`Test updateBlock > Update no content to empty table content 1`] = ` -{ - "children": [], - "content": { - "columnWidths": [], - "headerCols": undefined, - "headerRows": undefined, - "rows": [], + "id": "heading-with-everything", + "props": { + "backgroundColor": "red", + "isToggleable": false, + "level": 2, + "textAlignment": "center", + "textColor": "red", + }, + "type": "heading", + }, + { + "children": [], + "content": [], + "id": "paragraph-9", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, +] +`; + +exports[`Test updateBlock > Update no content to table content 1`] = ` +{ + "children": [], + "content": { + "columnWidths": [ + undefined, + undefined, + undefined, + ], + "headerCols": undefined, + "headerRows": undefined, + "rows": [ + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 1", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 2", + "type": "text", + }, + ], + "props": { + "backgroundColor": "red", + "colspan": 1, + "rowspan": 1, + "textAlignment": "right", + "textColor": "red", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 3", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 4", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 5", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 6", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 7", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 8", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 9", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + ], "type": "tableContent", }, "id": "image-0", @@ -4663,7 +6591,7 @@ exports[`Test updateBlock > Update no content to empty table content 1`] = ` } `; -exports[`Test updateBlock > Update no content to empty table content 2`] = ` +exports[`Test updateBlock > Update no content to table content 2`] = ` [ { "children": [], @@ -4889,14 +6817,188 @@ exports[`Test updateBlock > Update no content to empty table content 2`] = ` }, { "children": [], - "content": [], + "content": { + "columnWidths": [ + undefined, + undefined, + undefined, + ], + "headerCols": undefined, + "headerRows": undefined, + "rows": [ + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 1", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 2", + "type": "text", + }, + ], + "props": { + "backgroundColor": "red", + "colspan": 1, + "rowspan": 1, + "textAlignment": "right", + "textColor": "red", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 3", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 4", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 5", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 6", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + { + "cells": [ + { + "content": [ + { + "styles": {}, + "text": "Cell 7", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 8", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + { + "content": [ + { + "styles": {}, + "text": "Cell 9", + "type": "text", + }, + ], + "props": { + "backgroundColor": "default", + "colspan": 1, + "rowspan": 1, + "textAlignment": "left", + "textColor": "default", + }, + "type": "tableCell", + }, + ], + }, + ], + "type": "tableContent", + }, "id": "image-0", "props": { - "backgroundColor": "default", - "textAlignment": "left", "textColor": "default", }, - "type": "paragraph", + "type": "table", }, { "children": [], @@ -5228,27 +7330,7 @@ exports[`Test updateBlock > Update no content to empty table content 2`] = ` ] `; -exports[`Test updateBlock > Update no content to inline content 1`] = ` -{ - "children": [], - "content": [ - { - "styles": {}, - "text": "Paragraph", - "type": "text", - }, - ], - "id": "image-0", - "props": { - "backgroundColor": "default", - "textAlignment": "left", - "textColor": "default", - }, - "type": "paragraph", -} -`; - -exports[`Test updateBlock > Update no content to inline content 2`] = ` +exports[`Test updateBlock > Update partial (offset start + end) 1`] = ` [ { "children": [], @@ -5474,20 +7556,17 @@ exports[`Test updateBlock > Update no content to inline content 2`] = ` }, { "children": [], - "content": [ - { - "styles": {}, - "text": "Paragraph", - "type": "text", - }, - ], + "content": undefined, "id": "image-0", "props": { "backgroundColor": "default", + "caption": "", + "name": "", + "showPreview": true, "textAlignment": "left", - "textColor": "default", + "url": "https://via.placeholder.com/150", }, - "type": "paragraph", + "type": "image", }, { "children": [], @@ -5738,276 +7817,88 @@ exports[`Test updateBlock > Update no content to inline content 2`] = ` }, { "children": [ - { - "children": [ - { - "children": [], - "content": [ - { - "styles": {}, - "text": "Double Nested Paragraph 1", - "type": "text", - }, - ], - "id": "double-nested-paragraph-1", - "props": { - "backgroundColor": "default", - "textAlignment": "left", - "textColor": "default", - }, - "type": "paragraph", - }, - ], - "content": [ - { - "styles": {}, - "text": "Nested Paragraph 1", - "type": "text", - }, - ], - "id": "nested-paragraph-1", - "props": { - "backgroundColor": "default", - "textAlignment": "left", - "textColor": "default", - }, - "type": "paragraph", - }, - ], - "content": [ - { - "styles": { - "bold": true, - }, - "text": "Heading", - "type": "text", - }, - { - "styles": {}, - "text": " with styled ", - "type": "text", - }, - { - "styles": { - "italic": true, - }, - "text": "content", - "type": "text", - }, - ], - "id": "heading-with-everything", - "props": { - "backgroundColor": "red", - "isToggleable": false, - "level": 2, - "textAlignment": "center", - "textColor": "red", - }, - "type": "heading", - }, - { - "children": [], - "content": [], - "id": "paragraph-9", - "props": { - "backgroundColor": "default", - "textAlignment": "left", - "textColor": "default", - }, - "type": "paragraph", - }, -] -`; - -exports[`Test updateBlock > Update no content to table content 1`] = ` -{ - "children": [], - "content": { - "columnWidths": [ - undefined, - undefined, - undefined, - ], - "headerCols": undefined, - "headerRows": undefined, - "rows": [ - { - "cells": [ - { - "content": [ - { - "styles": {}, - "text": "Cell 1", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, - { - "content": [ - { - "styles": {}, - "text": "Cell 2", - "type": "text", - }, - ], - "props": { - "backgroundColor": "red", - "colspan": 1, - "rowspan": 1, - "textAlignment": "right", - "textColor": "red", - }, - "type": "tableCell", - }, - { - "content": [ - { - "styles": {}, - "text": "Cell 3", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, - ], - }, - { - "cells": [ - { - "content": [ - { - "styles": {}, - "text": "Cell 4", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, - { - "content": [ - { - "styles": {}, - "text": "Cell 5", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, - { - "content": [ - { - "styles": {}, - "text": "Cell 6", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, - ], - }, - { - "cells": [ - { - "content": [ - { - "styles": {}, - "text": "Cell 7", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, - { - "content": [ - { - "styles": {}, - "text": "Cell 8", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, + { + "children": [ { + "children": [], "content": [ { "styles": {}, - "text": "Cell 9", + "text": "Double Nested Paragraph 1", "type": "text", }, ], + "id": "double-nested-paragraph-1", "props": { "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, "textAlignment": "left", "textColor": "default", }, - "type": "tableCell", + "type": "paragraph", + }, + ], + "content": [ + { + "styles": {}, + "text": "Nested Paragraph 1", + "type": "text", }, ], + "id": "nested-paragraph-1", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", }, ], - "type": "tableContent", + "content": [ + { + "styles": { + "bold": true, + }, + "text": "Heading", + "type": "text", + }, + { + "styles": {}, + "text": " without styles and with styled ", + "type": "text", + }, + { + "styles": { + "italic": true, + }, + "text": "content", + "type": "text", + }, + ], + "id": "heading-with-everything", + "props": { + "backgroundColor": "red", + "isToggleable": false, + "level": 2, + "textAlignment": "center", + "textColor": "red", + }, + "type": "heading", }, - "id": "image-0", - "props": { - "textColor": "default", + { + "children": [], + "content": [], + "id": "paragraph-9", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", }, - "type": "table", -} +] `; -exports[`Test updateBlock > Update no content to table content 2`] = ` +exports[`Test updateBlock > Update partial (offset start) 1`] = ` [ { "children": [], @@ -6226,195 +8117,24 @@ exports[`Test updateBlock > Update no content to table content 2`] = ` "id": "paragraph-5", "props": { "backgroundColor": "default", - "textAlignment": "left", - "textColor": "default", - }, - "type": "paragraph", - }, - { - "children": [], - "content": { - "columnWidths": [ - undefined, - undefined, - undefined, - ], - "headerCols": undefined, - "headerRows": undefined, - "rows": [ - { - "cells": [ - { - "content": [ - { - "styles": {}, - "text": "Cell 1", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, - { - "content": [ - { - "styles": {}, - "text": "Cell 2", - "type": "text", - }, - ], - "props": { - "backgroundColor": "red", - "colspan": 1, - "rowspan": 1, - "textAlignment": "right", - "textColor": "red", - }, - "type": "tableCell", - }, - { - "content": [ - { - "styles": {}, - "text": "Cell 3", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, - ], - }, - { - "cells": [ - { - "content": [ - { - "styles": {}, - "text": "Cell 4", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, - { - "content": [ - { - "styles": {}, - "text": "Cell 5", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, - { - "content": [ - { - "styles": {}, - "text": "Cell 6", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, - ], - }, - { - "cells": [ - { - "content": [ - { - "styles": {}, - "text": "Cell 7", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, - { - "content": [ - { - "styles": {}, - "text": "Cell 8", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, - { - "content": [ - { - "styles": {}, - "text": "Cell 9", - "type": "text", - }, - ], - "props": { - "backgroundColor": "default", - "colspan": 1, - "rowspan": 1, - "textAlignment": "left", - "textColor": "default", - }, - "type": "tableCell", - }, - ], - }, - ], - "type": "tableContent", + "textAlignment": "left", + "textColor": "default", }, + "type": "paragraph", + }, + { + "children": [], + "content": undefined, "id": "image-0", "props": { - "textColor": "default", + "backgroundColor": "default", + "caption": "", + "name": "", + "showPreview": true, + "textAlignment": "left", + "url": "https://via.placeholder.com/150", }, - "type": "table", + "type": "image", }, { "children": [], @@ -6711,14 +8431,7 @@ exports[`Test updateBlock > Update no content to table content 2`] = ` }, { "styles": {}, - "text": " with styled ", - "type": "text", - }, - { - "styles": { - "italic": true, - }, - "text": "content", + "text": " without styles", "type": "text", }, ], @@ -6746,7 +8459,7 @@ exports[`Test updateBlock > Update no content to table content 2`] = ` ] `; -exports[`Test updateBlock > Update partial (offset start + end) 1`] = ` +exports[`Test updateBlock > Update partial (props + offset end) 1`] = ` [ { "children": [], @@ -7270,16 +8983,9 @@ exports[`Test updateBlock > Update partial (offset start + end) 1`] = ` }, ], "content": [ - { - "styles": { - "bold": true, - }, - "text": "Heading", - "type": "text", - }, { "styles": {}, - "text": " without styles and with styled ", + "text": "Title with styled ", "type": "text", }, { @@ -7294,7 +9000,7 @@ exports[`Test updateBlock > Update partial (offset start + end) 1`] = ` "props": { "backgroundColor": "red", "isToggleable": false, - "level": 2, + "level": 1, "textAlignment": "center", "textColor": "red", }, @@ -7314,7 +9020,7 @@ exports[`Test updateBlock > Update partial (offset start + end) 1`] = ` ] `; -exports[`Test updateBlock > Update partial (offset start) 1`] = ` +exports[`Test updateBlock > Update partial (table cell) 1`] = ` [ { "children": [], @@ -7586,7 +9292,7 @@ exports[`Test updateBlock > Update partial (offset start) 1`] = ` "content": [ { "styles": {}, - "text": "Cell 1", + "text": "updated cell 1", "type": "text", }, ], @@ -7847,7 +9553,14 @@ exports[`Test updateBlock > Update partial (offset start) 1`] = ` }, { "styles": {}, - "text": " without styles", + "text": " with styled ", + "type": "text", + }, + { + "styles": { + "italic": true, + }, + "text": "content", "type": "text", }, ], @@ -7875,7 +9588,7 @@ exports[`Test updateBlock > Update partial (offset start) 1`] = ` ] `; -exports[`Test updateBlock > Update partial (props + offset end) 1`] = ` +exports[`Test updateBlock > Update partial (table row) 1`] = ` [ { "children": [], @@ -8147,7 +9860,7 @@ exports[`Test updateBlock > Update partial (props + offset end) 1`] = ` "content": [ { "styles": {}, - "text": "Cell 1", + "text": "updated cell 1", "type": "text", }, ], @@ -8164,7 +9877,7 @@ exports[`Test updateBlock > Update partial (props + offset end) 1`] = ` "content": [ { "styles": {}, - "text": "Cell 2", + "text": "updated cell 2", "type": "text", }, ], @@ -8181,7 +9894,7 @@ exports[`Test updateBlock > Update partial (props + offset end) 1`] = ` "content": [ { "styles": {}, - "text": "Cell 3", + "text": "updated cell 3", "type": "text", }, ], @@ -8399,9 +10112,16 @@ exports[`Test updateBlock > Update partial (props + offset end) 1`] = ` }, ], "content": [ + { + "styles": { + "bold": true, + }, + "text": "Heading", + "type": "text", + }, { "styles": {}, - "text": "Title with styled ", + "text": " with styled ", "type": "text", }, { @@ -8416,7 +10136,7 @@ exports[`Test updateBlock > Update partial (props + offset end) 1`] = ` "props": { "backgroundColor": "red", "isToggleable": false, - "level": 1, + "level": 2, "textAlignment": "center", "textColor": "red", }, @@ -8436,7 +10156,27 @@ exports[`Test updateBlock > Update partial (props + offset end) 1`] = ` ] `; -exports[`Test updateBlock > Update partial (table cell) 1`] = ` +exports[`Test updateBlock > Update plain content to inline content 1`] = ` +{ + "children": [], + "content": [ + { + "styles": {}, + "text": "Paragraph 0", + "type": "text", + }, + ], + "id": "paragraph-0", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", +} +`; + +exports[`Test updateBlock > Update plain content to inline content 2`] = ` [ { "children": [], @@ -8708,7 +10448,7 @@ exports[`Test updateBlock > Update partial (table cell) 1`] = ` "content": [ { "styles": {}, - "text": "updated cell 1", + "text": "Cell 1", "type": "text", }, ], @@ -9004,7 +10744,79 @@ exports[`Test updateBlock > Update partial (table cell) 1`] = ` ] `; -exports[`Test updateBlock > Update partial (table row) 1`] = ` +exports[`Test updateBlock > Update single prop 1`] = ` +{ + "children": [ + { + "children": [ + { + "children": [], + "content": [ + { + "styles": {}, + "text": "Double Nested Paragraph 1", + "type": "text", + }, + ], + "id": "double-nested-paragraph-1", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + ], + "content": [ + { + "styles": {}, + "text": "Nested Paragraph 1", + "type": "text", + }, + ], + "id": "nested-paragraph-1", + "props": { + "backgroundColor": "default", + "textAlignment": "left", + "textColor": "default", + }, + "type": "paragraph", + }, + ], + "content": [ + { + "styles": { + "bold": true, + }, + "text": "Heading", + "type": "text", + }, + { + "styles": {}, + "text": " with styled ", + "type": "text", + }, + { + "styles": { + "italic": true, + }, + "text": "content", + "type": "text", + }, + ], + "id": "heading-with-everything", + "props": { + "backgroundColor": "red", + "isToggleable": false, + "level": 3, + "textAlignment": "center", + "textColor": "red", + }, + "type": "heading", +} +`; + +exports[`Test updateBlock > Update single prop 2`] = ` [ { "children": [], @@ -9276,7 +11088,7 @@ exports[`Test updateBlock > Update partial (table row) 1`] = ` "content": [ { "styles": {}, - "text": "updated cell 1", + "text": "Cell 1", "type": "text", }, ], @@ -9293,7 +11105,7 @@ exports[`Test updateBlock > Update partial (table row) 1`] = ` "content": [ { "styles": {}, - "text": "updated cell 2", + "text": "Cell 2", "type": "text", }, ], @@ -9310,7 +11122,7 @@ exports[`Test updateBlock > Update partial (table row) 1`] = ` "content": [ { "styles": {}, - "text": "updated cell 3", + "text": "Cell 3", "type": "text", }, ], @@ -9552,7 +11364,7 @@ exports[`Test updateBlock > Update partial (table row) 1`] = ` "props": { "backgroundColor": "red", "isToggleable": false, - "level": 2, + "level": 3, "textAlignment": "center", "textColor": "red", }, @@ -9572,79 +11384,25 @@ exports[`Test updateBlock > Update partial (table row) 1`] = ` ] `; -exports[`Test updateBlock > Update single prop 1`] = ` +exports[`Test updateBlock > Update styled inline content to plain content 1`] = ` { - "children": [ - { - "children": [ - { - "children": [], - "content": [ - { - "styles": {}, - "text": "Double Nested Paragraph 1", - "type": "text", - }, - ], - "id": "double-nested-paragraph-1", - "props": { - "backgroundColor": "default", - "textAlignment": "left", - "textColor": "default", - }, - "type": "paragraph", - }, - ], - "content": [ - { - "styles": {}, - "text": "Nested Paragraph 1", - "type": "text", - }, - ], - "id": "nested-paragraph-1", - "props": { - "backgroundColor": "default", - "textAlignment": "left", - "textColor": "default", - }, - "type": "paragraph", - }, - ], + "children": [], "content": [ - { - "styles": { - "bold": true, - }, - "text": "Heading", - "type": "text", - }, { "styles": {}, - "text": " with styled ", - "type": "text", - }, - { - "styles": { - "italic": true, - }, - "text": "content", + "text": "Paragraph with styled content", "type": "text", }, ], - "id": "heading-with-everything", + "id": "paragraph-with-styled-content", "props": { - "backgroundColor": "red", - "isToggleable": false, - "level": 3, - "textAlignment": "center", - "textColor": "red", + "language": "text", }, - "type": "heading", + "type": "codeBlock", } `; -exports[`Test updateBlock > Update single prop 2`] = ` +exports[`Test updateBlock > Update styled inline content to plain content 2`] = ` [ { "children": [], @@ -9787,33 +11545,17 @@ exports[`Test updateBlock > Update single prop 2`] = ` { "children": [], "content": [ - { - "styles": { - "bold": true, - }, - "text": "Paragraph", - "type": "text", - }, { "styles": {}, - "text": " with styled ", - "type": "text", - }, - { - "styles": { - "italic": true, - }, - "text": "content", + "text": "Paragraph with styled content", "type": "text", }, ], "id": "paragraph-with-styled-content", "props": { - "backgroundColor": "default", - "textAlignment": "left", - "textColor": "default", + "language": "text", }, - "type": "paragraph", + "type": "codeBlock", }, { "children": [], @@ -10192,7 +11934,7 @@ exports[`Test updateBlock > Update single prop 2`] = ` "props": { "backgroundColor": "red", "isToggleable": false, - "level": 3, + "level": 2, "textAlignment": "center", "textColor": "red", }, diff --git a/packages/core/src/api/blockManipulation/commands/updateBlock/updateBlock.test.ts b/packages/core/src/api/blockManipulation/commands/updateBlock/updateBlock.test.ts index 57aaf34fdd..e44e4a6380 100644 --- a/packages/core/src/api/blockManipulation/commands/updateBlock/updateBlock.test.ts +++ b/packages/core/src/api/blockManipulation/commands/updateBlock/updateBlock.test.ts @@ -475,6 +475,48 @@ describe("Test updateBlock", () => { expect(getEditor().document).toMatchSnapshot(); }); + it("Update inline content to plain content", () => { + expect( + getEditor().transact((tr) => + updateBlock(tr, "paragraph-0", { + type: "codeBlock", + }), + ), + ).toMatchSnapshot(); + + expect(getEditor().document).toMatchSnapshot(); + }); + + it("Update styled inline content to plain content", () => { + // The plain block can't hold formatting marks, so the styling is dropped + // but the text is preserved. + expect( + getEditor().transact((tr) => + updateBlock(tr, "paragraph-with-styled-content", { + type: "codeBlock", + }), + ), + ).toMatchSnapshot(); + + expect(getEditor().document).toMatchSnapshot(); + }); + + it("Update plain content to inline content", () => { + getEditor().transact((tr) => + updateBlock(tr, "paragraph-0", { type: "codeBlock" }), + ); + + expect( + getEditor().transact((tr) => + updateBlock(tr, "paragraph-0", { + type: "paragraph", + }), + ), + ).toMatchSnapshot(); + + expect(getEditor().document).toMatchSnapshot(); + }); + it("Update no content to empty inline content", () => { expect( getEditor().transact((tr) => diff --git a/packages/core/src/api/blockManipulation/commands/updateBlock/updateBlock.ts b/packages/core/src/api/blockManipulation/commands/updateBlock/updateBlock.ts index 6ee03b04d9..6edfc434d5 100644 --- a/packages/core/src/api/blockManipulation/commands/updateBlock/updateBlock.ts +++ b/packages/core/src/api/blockManipulation/commands/updateBlock/updateBlock.ts @@ -202,14 +202,26 @@ function updateBlockContentNode< // Since some block types contain inline content and others don't, // we either need to call setNodeMarkup to just update type & // attributes, or replaceWith to replace the whole blockContent. + const oldContent = blockInfo.blockContent.node.content; if (oldNodeType.spec.content === "") { // keep old content, because it's empty anyway and should be compatible with // any newContentType - } else if (newNodeType.spec.content !== oldNodeType.spec.content) { - // the content type changed, replace the previous content - content = []; - } else { + } else if (newNodeType.spec.content === oldNodeType.spec.content) { // keep old content, because the content type is the same and should be compatible + } else if (newNodeType.validContent(oldContent)) { + // The content-type strings differ (e.g. "inline*" vs a plain block's + // "text*"), but the existing content is still valid for the new type + // (e.g. plain, unstyled text), so keep it rather than clearing it. + } else if (newNodeType.inlineContent && oldNodeType.inlineContent) { + // Both blocks hold text, but the existing content isn't directly valid + // for the new type (e.g. converting styled/complex inline content into a + // plain block that disallows formatting marks and inline nodes). Preserve + // the text, dropping the styling the new type can't represent. + const text = blockInfo.blockContent.node.textContent; + content = text.length > 0 ? [pmSchema.text(text)] : []; + } else { + // the content type changed and is incompatible, replace the previous content + content = []; } } diff --git a/packages/core/src/api/exporters/markdown/htmlToMarkdown.ts b/packages/core/src/api/exporters/markdown/htmlToMarkdown.ts index e74ecb68d3..553247fddb 100644 --- a/packages/core/src/api/exporters/markdown/htmlToMarkdown.ts +++ b/packages/core/src/api/exporters/markdown/htmlToMarkdown.ts @@ -78,6 +78,8 @@ function serializeNode(node: Node, ctx: SerializeContext): string { return serializeTable(el, ctx); case "hr": return ctx.indent + "***\n\n"; + case "math": + return serializeMathBlock(el, ctx); case "img": return serializeImage(el, ctx); case "video": @@ -175,18 +177,41 @@ function serializeCodeBlock(el: HTMLElement, ctx: SerializeContext): string { // For empty code blocks, don't add a newline between the fences if (!code) { - return ctx.indent + fence + language + "\n" + fence + "\n\n"; - } + return ctx.indent + fence + language + "\n" + ctx.indent + fence + "\n\n"; + } + + // Every (non-blank) line carries the indent - inside a list item or + // blockquote, an unindented line would end the parent container. Blank + // lines stay blank: they don't terminate an indented fence, and indenting + // them would add trailing whitespace. + const lines = [ + fence + language, + ...(code.endsWith("\n") ? code.slice(0, -1) : code).split("\n"), + fence, + ]; + return ( + lines.map((line) => (line ? ctx.indent + line : line)).join("\n") + "\n\n" + ); +} +// The LaTeX source of a MathML element, taken from the annotation KaTeX +// embeds in its output (also what external HTML parsing reads). Falls back to +// the element's text content for MathML from other sources. +function extractMathLatexSource(el: Element): string { + const annotation = el.querySelector( + 'annotation[encoding="application/x-tex"]', + ); + return (annotation?.textContent ?? el.textContent ?? "").trim(); +} + +function serializeMathBlock(el: HTMLElement, ctx: SerializeContext): string { + const latex = extractMathLatexSource(el); + // Every (non-blank) line carries the indent - inside a list item or + // blockquote, an unindented line would end the parent container. return ( - ctx.indent + - fence + - language + - "\n" + - code + - (code.endsWith("\n") ? "" : "\n") + - fence + - "\n\n" + ["$$", ...latex.split("\n"), "$$"] + .map((line) => (line ? ctx.indent + line : line)) + .join("\n") + "\n\n" ); } @@ -775,6 +800,16 @@ function serializeInlineContent(el: Element): string { case "br": result += "\\\n"; break; + case "math": { + // Inline math — emit its LaTeX source as a math span. Collapsed to + // a single line, as $...$ spans cannot contain newlines. + const latex = extractMathLatexSource(childEl) + .split("\n") + .map((line) => line.trim()) + .join(" "); + result += `$${latex}$`; + break; + } case "span": // Color spans, etc. — strip the tag, keep content result += serializeInlineContent(childEl); diff --git a/packages/core/src/api/nodeConversions/blockToNode.ts b/packages/core/src/api/nodeConversions/blockToNode.ts index 61bc44d68a..af5c0ba1b7 100644 --- a/packages/core/src/api/nodeConversions/blockToNode.ts +++ b/packages/core/src/api/nodeConversions/blockToNode.ts @@ -64,7 +64,11 @@ function styledTextToNodes( ? [...schema.nodes[blockType].allowedMarks(marks)] : marks; - const parseHardBreaks = !blockType || !schema.nodes[blockType].spec.code; + // Plain content nodes hold raw text — including newlines — + // rather than inline content, so they can't contain `hardBreak` nodes. Keep + // newlines as text characters for them instead of splitting into hard breaks. + const parseHardBreaks = + !blockType || !isPlainContentNodeType(schema, schema.nodes[blockType]); if (!parseHardBreaks) { return styledText.text.length > 0 diff --git a/packages/core/src/api/nodeConversions/nodeToBlock.ts b/packages/core/src/api/nodeConversions/nodeToBlock.ts index 6d3b7e23b2..fead006657 100644 --- a/packages/core/src/api/nodeConversions/nodeToBlock.ts +++ b/packages/core/src/api/nodeConversions/nodeToBlock.ts @@ -373,6 +373,9 @@ export function nodeToCustomInlineContent< inlineContentSchema, styleSchema, ) as any; // TODO: is this safe? could we have Links here that are undesired? + } else if (icConfig.content === "plain") { + // Plain inline content is a single unstyled string. + content = node.textContent as any; } else { content = undefined; } diff --git a/packages/core/src/api/pmUtil.ts b/packages/core/src/api/pmUtil.ts index bb427a3710..17ed2aa943 100644 --- a/packages/core/src/api/pmUtil.ts +++ b/packages/core/src/api/pmUtil.ts @@ -54,18 +54,26 @@ export function getBlockCache(schema: Schema) { } /** - * Whether `nodeType` is a BlockNote block whose content type is `"plain"` — i.e. - * it holds unstyled text and only allows the non-formatting (`"annotation"`) - * marks. Resolved semantically from the block schema (the source of truth), - * reachable from `schema.cached.blockNoteEditor`. + * Whether `nodeType` is a BlockNote block or inline content whose content type + * is `"plain"` — i.e. it holds unstyled text and only allows the non-formatting + * (`"annotation"`) marks. Resolved semantically from the block / inline content + * schema (the source of truth), reachable from `schema.cached.blockNoteEditor`. * - * Returns `false` for every non-block / structural node type (`doc`, - * `blockGroup`, `text`, inline content, table sub-nodes), since those aren't - * keys in the block schema. + * Returns `false` for every other node type (`doc`, `blockGroup`, `text`, table + * sub-nodes, and non-plain blocks / inline content), since those aren't plain + * content keys in either schema. */ export function isPlainContentNodeType( schema: Schema, nodeType: NodeType, ): boolean { - return getBlockSchema(schema)[nodeType.name]?.content === "plain"; + if (getBlockSchema(schema)[nodeType.name]?.content === "plain") { + return true; + } + + const inlineContentConfig = getInlineContentSchema(schema)[nodeType.name]; + return ( + typeof inlineContentConfig === "object" && + inlineContentConfig.content === "plain" + ); } diff --git a/packages/core/src/blocks/Code/CodeBlockOptions.ts b/packages/core/src/blocks/Code/CodeBlockOptions.ts new file mode 100644 index 0000000000..5f9435b0c4 --- /dev/null +++ b/packages/core/src/blocks/Code/CodeBlockOptions.ts @@ -0,0 +1,83 @@ +import type { BlockNoteEditor } from "../../editor/BlockNoteEditor.js"; +import type { BlockFromConfig } from "../../schema/index.js"; + +/** + * Renders a preview of a code block's content (e.g. rendered LaTeX). Takes the + * same parameters as a block's `render` function and returns the same type, + * minus `contentDOM` - as a preview never holds the block's editable content. + * + * A `renderPreview` function is only responsible for the preview itself. It has + * no opinion on when, where, or how the preview is displayed - that's up to the + * code block's `render` function. + */ +export type CodeBlockPreview = ( + block: BlockFromConfig, + editor: BlockNoteEditor, +) => { + dom: HTMLElement | DocumentFragment; + error?: string | null; +}; + +export type CodeBlockOptions = { + /** + * Whether to indent lines with a tab when the user presses `Tab` in a code block. + * + * @default true + */ + indentLineWithTab?: boolean; + /** + * The default language to use for code blocks. + * + * @default "text" + */ + defaultLanguage?: string; + /** + * The languages that are supported in the editor. + * + * @example + * { + * javascript: { + * name: "JavaScript", + * aliases: ["js"], + * }, + * typescript: { + * name: "TypeScript", + * aliases: ["ts"], + * }, + * } + */ + supportedLanguages?: Record< + string, + { + /** + * The display name of the language. + */ + name: string; + /** + * Aliases for this language. + */ + aliases?: string[]; + /** + * Renders a preview of the result of the code (e.g. rendered LaTeX). When + * defined, the code block displays this preview instead of the raw source + * by default, and shows the editable source in a popup when selected. + */ + createPreview?: CodeBlockPreview; + } + >; +}; + +export function getLanguageId( + options: CodeBlockOptions, + languageName: string, +): string | undefined { + const normalizedLanguage = languageName.trim().toLowerCase(); + return Object.entries(options.supportedLanguages ?? {}).find( + ([id, { aliases }]) => { + return ( + id.toLowerCase() === normalizedLanguage || + aliases?.some((alias) => alias.toLowerCase() === normalizedLanguage) + ); + }, + )?.[0]; +} diff --git a/packages/core/src/blocks/Code/block.test.ts b/packages/core/src/blocks/Code/block.test.ts index 2bceaca629..9ce39df387 100644 --- a/packages/core/src/blocks/Code/block.test.ts +++ b/packages/core/src/blocks/Code/block.test.ts @@ -8,7 +8,7 @@ import { } from "vite-plus/test"; import { BlockNoteEditor } from "../../editor/BlockNoteEditor.js"; import type { PartialBlock } from "../defaultBlocks.js"; -import { getLanguageId, type CodeBlockOptions } from "./block.js"; +import { getLanguageId, type CodeBlockOptions } from "./CodeBlockOptions.js"; /** * @vitest-environment jsdom diff --git a/packages/core/src/blocks/Code/block.ts b/packages/core/src/blocks/Code/block.ts index 41fb17b61e..586d41e349 100644 --- a/packages/core/src/blocks/Code/block.ts +++ b/packages/core/src/blocks/Code/block.ts @@ -1,57 +1,14 @@ -import type { HighlighterGeneric } from "@shikijs/types"; -import { DOMParser } from "@tiptap/pm/model"; -import { createExtension } from "../../editor/BlockNoteExtension.js"; import { createBlockConfig, createBlockSpec } from "../../schema/index.js"; -import { lazyShikiPlugin } from "./shiki.js"; +import { + parsePreCode, + parsePreCodeContent, +} from "./helpers/parse/parsePreCode.js"; +import { createPreCode } from "./helpers/toExternalHTML/createPreCode.js"; +import { CodeKeyboardShortcutsExtension } from "./helpers/extensions/CodeKeyboardShortcutsExtension.js"; +import { CodeBlockOptions } from "./CodeBlockOptions.js"; +import { createCodeBlock } from "./helpers/render/createCodeBlock.js"; -export type CodeBlockOptions = { - /** - * Whether to indent lines with a tab when the user presses `Tab` in a code block. - * - * @default true - */ - indentLineWithTab?: boolean; - /** - * The default language to use for code blocks. - * - * @default "text" - */ - defaultLanguage?: string; - /** - * The languages that are supported in the editor. - * - * @example - * { - * javascript: { - * name: "JavaScript", - * aliases: ["js"], - * }, - * typescript: { - * name: "TypeScript", - * aliases: ["ts"], - * }, - * } - */ - supportedLanguages?: Record< - string, - { - /** - * The display name of the language. - */ - name: string; - /** - * Aliases for this language. - */ - aliases?: string[]; - } - >; - /** - * The highlighter to use for code blocks. - */ - createHighlighter?: () => Promise>; -}; - -export type CodeBlockConfig = ReturnType; +const CODE_BLOCK_KEYBOARD_SHORTCUTS_KEY = "code-block-keyboard-shortcuts"; export const createCodeBlockConfig = createBlockConfig( ({ defaultLanguage = "text" }: CodeBlockOptions) => @@ -66,6 +23,8 @@ export const createCodeBlockConfig = createBlockConfig( }) as const, ); +export type CodeBlockConfig = ReturnType; + export const createCodeBlockSpec = createBlockSpec( createCodeBlockConfig, (options) => ({ @@ -73,236 +32,25 @@ export const createCodeBlockSpec = createBlockSpec( code: true, defining: true, isolating: false, + highlight: (block) => block.props.language, }, - parse: (e) => { - if (e.tagName !== "PRE") { - return undefined; - } - - if ( - e.childElementCount !== 1 || - e.firstElementChild?.tagName !== "CODE" - ) { - return undefined; - } - - const code = e.firstElementChild!; - const language = - code.getAttribute("data-language") || - code.className - .split(" ") - .find((name) => name.includes("language-")) - ?.replace("language-", ""); - - return { language }; - }, - - parseContent: ({ el, schema }) => { - const parser = DOMParser.fromSchema(schema); - const code = el.firstElementChild!; - - return parser.parse(code, { - preserveWhitespace: "full", - topNode: schema.nodes["codeBlock"].create(), - }).content; - }, - - render(block, editor) { - const wrapper = document.createDocumentFragment(); - const pre = document.createElement("pre"); - const code = document.createElement("code"); - pre.appendChild(code); - - let removeSelectChangeListener = undefined; - - if (options.supportedLanguages) { - const select = document.createElement("select"); - - Object.entries(options.supportedLanguages ?? {}).forEach( - ([id, { name }]) => { - const option = document.createElement("option"); - - option.value = id; - option.text = name; - select.appendChild(option); - }, - ); - select.value = - block.props.language || options.defaultLanguage || "text"; - - if (editor.isEditable) { - const handleLanguageChange = (event: Event) => { - const language = (event.target as HTMLSelectElement).value; - - editor.updateBlock(block.id, { props: { language } }); - }; - select.addEventListener("change", handleLanguageChange); - removeSelectChangeListener = () => - select.removeEventListener("change", handleLanguageChange); - } else { - select.disabled = true; - } - - const selectWrapper = document.createElement("div"); - selectWrapper.contentEditable = "false"; - - selectWrapper.appendChild(select); - wrapper.appendChild(selectWrapper); - } - wrapper.appendChild(pre); - - return { - dom: wrapper, - contentDOM: code, - destroy: () => { - removeSelectChangeListener?.(); + parse: (el) => parsePreCode(el), + parseContent: (opts) => parsePreCodeContent(opts, "codeBlock"), + render: (block, editor) => + createCodeBlock( + block, + editor, + options.supportedLanguages && { + selectedLanguage: block.props.language, + supportedLanguages: options.supportedLanguages, }, - }; - }, - toExternalHTML(block) { - const pre = document.createElement("pre"); - const code = document.createElement("code"); - code.className = `language-${block.props.language}`; - code.dataset.language = block.props.language; - pre.appendChild(code); - return { - dom: pre, - contentDOM: code, - }; - }, + ), + toExternalHTML: (block) => createPreCode(block), }), - (options) => { - return [ - createExtension({ - key: "code-block-highlighter", - prosemirrorPlugins: [lazyShikiPlugin(options)], - }), - createExtension({ - key: "code-block-keyboard-shortcuts", - keyboardShortcuts: { - Delete: ({ editor }) => { - return editor.transact((tr) => { - const { block } = editor.getTextCursorPosition(); - if (block.type !== "codeBlock") { - return false; - } - const { $from } = tr.selection; - - // When inside empty codeblock, on `DELETE` key press, delete the codeblock - if (!$from.parent.textContent) { - editor.removeBlocks([block]); - - return true; - } - - return false; - }); - }, - Tab: ({ editor }) => { - if (options.indentLineWithTab === false) { - return false; - } - - return editor.transact((tr) => { - const { block } = editor.getTextCursorPosition(); - if (block.type === "codeBlock") { - // TODO should probably only tab when at a line start or already tabbed in - tr.insertText(" "); - return true; - } - - return false; - }); - }, - Enter: ({ editor }) => { - return editor.transact((tr) => { - const { block, nextBlock } = editor.getTextCursorPosition(); - if (block.type !== "codeBlock") { - return false; - } - const { $from } = tr.selection; - - const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2; - const endsWithDoubleNewline = - $from.parent.textContent.endsWith("\n\n"); - - // The user is trying to exit the code block by pressing enter at the end of the code block - if (isAtEnd && endsWithDoubleNewline) { - // Remove the double newline - tr.delete($from.pos - 2, $from.pos); - - // If there is a next block, move the cursor to it - if (nextBlock) { - editor.setTextCursorPosition(nextBlock, "start"); - return true; - } - - // If there is no next block, insert a new paragraph - const [newBlock] = editor.insertBlocks( - [{ type: "paragraph" }], - block, - "after", - ); - // Move the cursor to the new block - editor.setTextCursorPosition(newBlock, "start"); - - return true; - } - - tr.insertText("\n"); - return true; - }); - }, - "Shift-Enter": ({ editor }) => { - return editor.transact(() => { - const { block } = editor.getTextCursorPosition(); - if (block.type !== "codeBlock") { - return false; - } - - const [newBlock] = editor.insertBlocks( - // insert a new paragraph - [{ type: "paragraph" }], - block, - "after", - ); - // move the cursor to the new block - editor.setTextCursorPosition(newBlock, "start"); - return true; - }); - }, - }, - inputRules: [ - { - find: /^```(.*?)\s$/, - replace: ({ match }) => { - const languageName = match[1].trim(); - const attributes = { - language: getLanguageId(options, languageName) ?? languageName, - }; - - return { - type: "codeBlock", - props: { - language: attributes.language, - }, - content: [], - }; - }, - }, - ], - }), - ]; - }, + (options) => [ + CodeKeyboardShortcutsExtension(options)( + CODE_BLOCK_KEYBOARD_SHORTCUTS_KEY, + "codeBlock", + ), + ], ); - -export function getLanguageId( - options: CodeBlockOptions, - languageName: string, -): string | undefined { - return Object.entries(options.supportedLanguages ?? {}).find( - ([id, { aliases }]) => { - return aliases?.includes(languageName) || id === languageName; - }, - )?.[0]; -} diff --git a/packages/core/src/blocks/Code/helpers/extensions/CodeKeyboardShortcutsExtension.ts b/packages/core/src/blocks/Code/helpers/extensions/CodeKeyboardShortcutsExtension.ts new file mode 100644 index 0000000000..f6b69f6c69 --- /dev/null +++ b/packages/core/src/blocks/Code/helpers/extensions/CodeKeyboardShortcutsExtension.ts @@ -0,0 +1,120 @@ +import { createExtension } from "../../../../editor/BlockNoteExtension.js"; +import { CodeBlockOptions, getLanguageId } from "../../CodeBlockOptions.js"; + +export const CodeKeyboardShortcutsExtension = + (options: CodeBlockOptions) => (key: string, blockType: string) => + createExtension({ + key, + keyboardShortcuts: { + Delete: ({ editor }) => { + return editor.transact((tr) => { + const { block } = editor.getTextCursorPosition(); + if (block.type !== blockType) { + return false; + } + const { $from } = tr.selection; + + // When inside empty codeblock, on `DELETE` key press, delete the codeblock + if (!$from.parent.textContent) { + editor.removeBlocks([block]); + + return true; + } + + return false; + }); + }, + Tab: ({ editor }) => { + if (options.indentLineWithTab === false) { + return false; + } + + return editor.transact((tr) => { + const { block } = editor.getTextCursorPosition(); + if (block.type === blockType) { + // TODO should probably only tab when at a line start or already tabbed in + tr.insertText(" "); + return true; + } + + return false; + }); + }, + Enter: ({ editor }) => { + return editor.transact((tr) => { + const { block, nextBlock } = editor.getTextCursorPosition(); + if (block.type !== blockType) { + return false; + } + const { $from } = tr.selection; + + const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2; + const endsWithDoubleNewline = + $from.parent.textContent.endsWith("\n\n"); + + // The user is trying to exit the code block by pressing enter at the end of the code block + if (isAtEnd && endsWithDoubleNewline) { + // Remove the double newline + tr.delete($from.pos - 2, $from.pos); + + // If there is a next block, move the cursor to it + if (nextBlock) { + editor.setTextCursorPosition(nextBlock, "start"); + return true; + } + + // If there is no next block, insert a new paragraph + const [newBlock] = editor.insertBlocks( + [{ type: "paragraph" }], + block, + "after", + ); + // Move the cursor to the new block + editor.setTextCursorPosition(newBlock, "start"); + + return true; + } + + tr.insertText("\n"); + return true; + }); + }, + "Shift-Enter": ({ editor }) => { + return editor.transact(() => { + const { block } = editor.getTextCursorPosition(); + if (block.type !== blockType) { + return false; + } + + const [newBlock] = editor.insertBlocks( + // insert a new paragraph + [{ type: "paragraph" }], + block, + "after", + ); + // move the cursor to the new block + editor.setTextCursorPosition(newBlock, "start"); + return true; + }); + }, + }, + inputRules: [ + { + find: /^```(.*?)\s$/, + replace: ({ match }) => { + const languageName = match[1].trim(); + const attributes = { + language: getLanguageId(options, languageName) ?? languageName, + }; + + return { + type: blockType, + props: { + language: attributes.language, + }, + content: [], + }; + }, + }, + ], + }); diff --git a/packages/core/src/blocks/Code/helpers/parse/parsePreCode.ts b/packages/core/src/blocks/Code/helpers/parse/parsePreCode.ts new file mode 100644 index 0000000000..237462fdb6 --- /dev/null +++ b/packages/core/src/blocks/Code/helpers/parse/parsePreCode.ts @@ -0,0 +1,45 @@ +import { DOMParser, Schema } from "@tiptap/pm/model"; + +export const parsePreCode = (el: HTMLElement) => { + { + if (el.tagName !== "PRE") { + return undefined; + } + + if ( + el.childElementCount !== 1 || + el.firstElementChild?.tagName !== "CODE" + ) { + return undefined; + } + + const code = el.firstElementChild!; + const language = + code.getAttribute("data-language") || + code.className + .split(" ") + .find((name) => name.startsWith("language-")) + ?.replace("language-", ""); + + return { language }; + } +}; + +export const parsePreCodeContent = ( + { + el, + schema, + }: { + el: HTMLElement; + schema: Schema; + }, + blockType: string, +) => { + const parser = DOMParser.fromSchema(schema); + const code = el.firstElementChild!; + + return parser.parse(code, { + preserveWhitespace: "full", + topNode: schema.nodes[blockType].create(), + }).content; +}; diff --git a/packages/core/src/blocks/Code/helpers/render/createCodeBlock.ts b/packages/core/src/blocks/Code/helpers/render/createCodeBlock.ts new file mode 100644 index 0000000000..ed1e73edf3 --- /dev/null +++ b/packages/core/src/blocks/Code/helpers/render/createCodeBlock.ts @@ -0,0 +1,98 @@ +import type { BlockNoteEditor } from "../../../../editor/BlockNoteEditor.js"; +import type { BlockFromConfig } from "../../../../schema/index.js"; + +// Select dropdown to change the block's language. Assumes `block` has a `language` prop. +export const createLanguageSelect = ( + block: BlockFromConfig, + editor: BlockNoteEditor, + selectedLanguage: string, + supportedLanguages: Record< + string, + { + name: string; + } + >, +) => { + if (!(selectedLanguage in supportedLanguages)) { + throw new Error(`Language ${selectedLanguage} is not supported.`); + } + + const select = document.createElement("select"); + Object.entries(supportedLanguages).forEach(([id, { name }]) => { + const option = document.createElement("option"); + option.value = id; + option.text = name; + select.appendChild(option); + }); + select.value = selectedLanguage; + + const handleLanguageChange = (event: Event) => { + if (!editor.isEditable) { + return; + } + + editor.updateBlock(block.id, { + props: { language: (event.target as HTMLSelectElement).value }, + }); + }; + + if (editor.isEditable) { + select.addEventListener("change", handleLanguageChange); + } else { + select.disabled = true; + } + + const selectWrapper = document.createElement("div"); + selectWrapper.contentEditable = "false"; + selectWrapper.appendChild(select); + + return { + dom: selectWrapper, + destroy: () => select.removeEventListener("change", handleLanguageChange), + }; +}; + +// Renders the block's inline content as code, alongside a language picker, if multiple languages +// are supported. +export const createCodeBlock = ( + block: BlockFromConfig, + editor: BlockNoteEditor, + options?: { + selectedLanguage: string; + supportedLanguages: Record< + string, + { + name: string; + } + >; + }, +) => { + const pre = document.createElement("pre"); + const code = document.createElement("code"); + pre.appendChild(code); + + const sourceBlock = document.createDocumentFragment(); + + let languageSelect: ReturnType | undefined = + undefined; + if (options && Object.keys(options.supportedLanguages).length > 1) { + languageSelect = createLanguageSelect( + block, + editor, + options.selectedLanguage, + options.supportedLanguages, + ); + + sourceBlock.appendChild(languageSelect.dom); + } + + sourceBlock.appendChild(pre); + + return { + dom: sourceBlock, + contentDOM: code, + destroy: () => { + languageSelect?.destroy(); + }, + }; +}; diff --git a/packages/core/src/blocks/Code/helpers/toExternalHTML/createPreCode.ts b/packages/core/src/blocks/Code/helpers/toExternalHTML/createPreCode.ts new file mode 100644 index 0000000000..1b53828585 --- /dev/null +++ b/packages/core/src/blocks/Code/helpers/toExternalHTML/createPreCode.ts @@ -0,0 +1,14 @@ +import type { BlockFromConfig } from "../../../../schema/index.js"; + +export const createPreCode = (block: BlockFromConfig) => { + const pre = document.createElement("pre"); + const code = document.createElement("code"); + code.className = `language-${block.props.language}`; + code.dataset.language = block.props.language; + pre.appendChild(code); + + return { + dom: pre, + contentDOM: code, + }; +}; diff --git a/packages/core/src/blocks/Code/shiki.ts b/packages/core/src/blocks/Code/shiki.ts deleted file mode 100644 index 1298007a58..0000000000 --- a/packages/core/src/blocks/Code/shiki.ts +++ /dev/null @@ -1,73 +0,0 @@ -import type { HighlighterGeneric } from "@shikijs/types"; -import { Parser, createHighlightPlugin } from "prosemirror-highlight"; -import { createParser } from "prosemirror-highlight/shiki"; -import { CodeBlockOptions, getLanguageId } from "./block.js"; - -export const shikiParserSymbol = Symbol.for("blocknote.shikiParser"); -export const shikiHighlighterPromiseSymbol = Symbol.for( - "blocknote.shikiHighlighterPromise", -); - -export function lazyShikiPlugin(options: CodeBlockOptions) { - const globalThisForShiki = globalThis as { - [shikiHighlighterPromiseSymbol]?: Promise>; - [shikiParserSymbol]?: Parser; - }; - - let highlighter: HighlighterGeneric | undefined; - let parser: Parser | undefined; - let hasWarned = false; - const lazyParser: Parser = (parserOptions) => { - if (!options.createHighlighter) { - if (process.env.NODE_ENV === "development" && !hasWarned) { - // eslint-disable-next-line no-console - console.log( - "For syntax highlighting of code blocks, you must provide a `createCodeBlockSpec({ createHighlighter: () => ... })` function", - ); - hasWarned = true; - } - return []; - } - if (!highlighter) { - globalThisForShiki[shikiHighlighterPromiseSymbol] = - globalThisForShiki[shikiHighlighterPromiseSymbol] || - options.createHighlighter(); - - return globalThisForShiki[shikiHighlighterPromiseSymbol].then( - (createdHighlighter) => { - highlighter = createdHighlighter; - }, - ); - } - const language = getLanguageId(options, parserOptions.language!); - - if ( - !language || - language === "text" || - language === "none" || - language === "plaintext" || - language === "txt" - ) { - return []; - } - - if (!highlighter.getLoadedLanguages().includes(language)) { - return highlighter.loadLanguage(language); - } - - if (!parser) { - parser = - globalThisForShiki[shikiParserSymbol] || - createParser(highlighter as any); - globalThisForShiki[shikiParserSymbol] = parser; - } - - return parser(parserOptions); - }; - - return createHighlightPlugin({ - parser: lazyParser, - languageExtractor: (node) => node.attrs.language, - nodeTypes: ["codeBlock"], - }); -} diff --git a/packages/core/src/blocks/index.ts b/packages/core/src/blocks/index.ts index 56f4c6de3c..d40bba055c 100644 --- a/packages/core/src/blocks/index.ts +++ b/packages/core/src/blocks/index.ts @@ -16,6 +16,9 @@ export * from "./Table/block.js"; export * from "./Video/block.js"; export { EMPTY_CELL_HEIGHT, EMPTY_CELL_WIDTH } from "./Table/TableExtension.js"; +export * from "./Code/helpers/parse/parsePreCode.js"; +export * from "./Code/helpers/render/createCodeBlock.js"; +export * from "./Code/helpers/toExternalHTML/createPreCode.js"; export * from "./ToggleWrapper/createToggleWrapper.js"; export * from "./File/helpers/uploadToTmpFilesDotOrg_DEV_ONLY.js"; export * from "./PageBreak/getPageBreakSlashMenuItems.js"; diff --git a/packages/core/src/editor/Block.css b/packages/core/src/editor/Block.css index 80a707f02e..ef2867121d 100644 --- a/packages/core/src/editor/Block.css +++ b/packages/core/src/editor/Block.css @@ -22,9 +22,27 @@ BASIC STYLES .bn-block-content.ProseMirror-selectednode > *, /* Case for node view renderers */ -.ProseMirror-selectednode > .bn-block-content > * { +.ProseMirror-selectednode > .bn-block-content > *, +/* Case for blocks/inline content where class is set manually */ +.bn-block-content .ProseMirror-selectednode, +.bn-inline-content .ProseMirror-selectednode { + /* Anchor for the `::after` highlight overlay below. */ + position: relative; +} + +/* Draws the selection highlight (border + translucent fill) as an overlay on + top of the element's content */ +.bn-block-content.ProseMirror-selectednode > *::after, +.ProseMirror-selectednode > .bn-block-content > *::after, +.bn-block-content .ProseMirror-selectednode::after, +.bn-inline-content .ProseMirror-selectednode::after { + content: ""; + position: absolute; + inset: 0; border-radius: 4px; - outline: 4px solid rgb(100, 160, 255); + background-color: rgba(100, 160, 255, 0.08); + box-shadow: inset 0 0 0 4px rgba(100, 160, 255, 0.3); + pointer-events: none; } .bn-block-content::before { @@ -468,6 +486,259 @@ NESTED BLOCKS transition-delay: 0.1s; } +/* CODE BLOCK PREVIEW */ +.bn-block-content[data-content-type="codeBlock"]:has( + .bn-preview-with-source-popup + ) { + background-color: transparent; + color: inherit; +} + +/* Default to dark theme as the code block has a dark background regardless of theme. */ +.shiki { + color: var(--shiki-dark); +} +.bn-source-block-popup .shiki { + color: var(--shiki-light); +} +.bn-root[data-color-scheme="dark"] .bn-source-block-popup .shiki { + color: var(--shiki-dark); +} + +.bn-preview-with-source-popup { + position: relative; +} + +.bn-block-content .bn-preview-with-source-popup { + display: flex; + padding: 12px; + width: 100%; +} + +.bn-inline-content-section .bn-preview-with-source-popup { + display: inline-block; + padding: 0; + width: fit-content; +} + +.bn-preview-container { + anchor-name: --bn-source-popup-anchor; + cursor: pointer; +} + +.bn-block-content .bn-preview-container { + overflow: auto; + width: 100%; +} + +.bn-inline-content-section .bn-preview-container { + overflow: visible; + width: fit-content; +} + +/* Additional right padding for equation numbers. */ +.bn-block-content .bn-preview-container .katex-html:has(> .tag) { + box-sizing: border-box; + width: max-content; + min-width: 100%; + padding-right: 2.5em; +} + +.bn-source-block-popup { + background-color: transparent; + border: none; + border-radius: 0; + box-shadow: none; + color: transparent; + height: 0; + left: 0; + margin-top: 4px; + overflow: clip; + position: absolute; + top: 100%; + width: 0; + z-index: 0; +} + +.bn-preview-with-source-popup[data-open="true"] .bn-source-block-popup { + background-color: var(--bn-colors-menu-background); + border: var(--bn-border); + border-radius: var(--bn-border-radius-medium); + box-shadow: var(--bn-shadow-medium); + color: var(--bn-colors-menu-text); + height: unset; + z-index: 1; +} + +.bn-block-content + .bn-preview-with-source-popup[data-open="true"] + .bn-source-block-popup { + width: 100%; +} + +.bn-inline-content-section + .bn-preview-with-source-popup[data-open="true"] + .bn-source-block-popup { + width: 300px; +} + +.bn-code-block-source-popup-body { + align-items: flex-end; + display: flex; +} + +.bn-code-block-source-popup-body > pre { + align-self: center; + flex: 1; + margin: 0; + max-height: 200px; + overflow: auto; + padding: 16px; + position: relative; + tab-size: 2; + white-space: pre; + width: 0; +} + +.bn-code-block-source-popup-input-empty::before { + color: currentColor; + content: attr(data-placeholder); + left: 16px; + opacity: 0.5; + overflow: hidden; + pointer-events: none; + position: absolute; + right: 16px; + text-overflow: ellipsis; + top: 16px; + white-space: nowrap; +} + +.bn-code-block-source-error { + border-top: var(--bn-border); + color: var(--bn-colors-highlights-red-text); + font-size: 0.8em; + padding: 8px 16px; + white-space: pre-wrap !important; + font-family: monospace; +} + +.bn-code-block-source-popup-ok-button-wrapper { + align-items: flex-end; + justify-content: flex-end; + padding: 14px 16px; +} + +.bn-code-block-source-popup-ok-button { + align-items: center; + appearance: none; + background-color: rgb(37, 99, 235); + border: none; + border-radius: var(--bn-border-radius-small); + color: white; + cursor: pointer; + display: flex; + font-size: 0.8em; + font-weight: 500; + gap: 4px; + padding: 4px 8px; +} + +.bn-code-block-source-popup-ok-button-icon { + height: 1.2em; + width: 1.2em; +} + +.bn-code-block-source-popup-ok-button:hover { + background-color: rgb(29, 78, 216); +} + +.bn-preview-with-source-popup:has(.bn-preview-placeholder) { + padding: 0; +} + +.bn-preview-placeholder { + align-items: center; + background-color: rgb(242, 241, 238); + border-radius: 4px; + color: rgb(95, 91, 92); + display: flex; +} + +.bn-block-content .bn-preview-placeholder { + gap: 10px; + padding: 12px; +} + +.bn-inline-content-section .bn-preview-placeholder { + gap: 4px; + padding: 0 4px; +} + +.bn-preview-placeholder:where(.dark, .dark *) { + background-color: rgb(70, 70, 70); + color: rgb(190, 190, 190); +} + +.bn-editor[contenteditable="true"] + .bn-preview-placeholder:not(.bn-preview-placeholder-error):hover { + background-color: rgb(225, 225, 225); +} + +.bn-editor[contenteditable="true"] + .bn-preview-placeholder:not(.bn-preview-placeholder-error):hover:where( + .dark, + .dark * + ) { + background-color: rgb(90, 90, 90); +} + +.bn-preview-placeholder-error { + background-color: var(--bn-colors-highlights-red-background); + color: var(--bn-colors-highlights-red-text); +} + +.bn-preview-placeholder-icon { + align-items: center; + display: flex; +} + +.bn-block-content .bn-preview-placeholder-icon { + height: 24px; + width: 24px; +} + +.bn-inline-content-section .bn-preview-placeholder-icon { + height: 14px; + width: 14px; +} + +.bn-preview-placeholder-icon > svg { + height: 100%; + width: 100%; +} + +.bn-preview-placeholder-text { + margin: 0; +} + +.bn-block-content .bn-preview-placeholder-text { + font-size: 0.9rem; +} + +.bn-inline-content-section .bn-preview-placeholder-text { + font-size: 0.7rem; +} + +/* Toggled for a single frame while an up/down arrow press is handled, so the + browser's geometry-based vertical caret movement skips the popup. */ +.bn-suppress-source-popup-caret + .bn-inline-content-section + .bn-preview-with-source-popup:not([data-open="true"]) + .bn-source-block-popup { + visibility: hidden; +} + /* PAGE BREAK */ .bn-block-content[data-content-type="pageBreak"] > div { width: 100%; diff --git a/packages/core/src/editor/BlockNoteEditor.ts b/packages/core/src/editor/BlockNoteEditor.ts index 0f8c24f6b7..25b93d03f4 100644 --- a/packages/core/src/editor/BlockNoteEditor.ts +++ b/packages/core/src/editor/BlockNoteEditor.ts @@ -41,7 +41,11 @@ import "../style.css"; import { mergeCSSClasses } from "../util/browser.js"; import { EventEmitter } from "../util/EventEmitter.js"; import type { NoInfer } from "../util/typescript.js"; -import { ExtensionFactoryInstance } from "./BlockNoteExtension.js"; +import { + Extension, + ExtensionFactory, + ExtensionFactoryInstance, +} from "./BlockNoteExtension.js"; import type { TextCursorPosition } from "./cursorPositionTypes.js"; import { BlockManager, @@ -690,9 +694,26 @@ export class BlockNoteEditor< /** * Get an extension from the editor */ - public getExtension: ExtensionManager["getExtension"] = (( - ...args: Parameters - ) => this._extensionManager.getExtension(...args)) as any; + // Declared as an explicit intersection of the two `ExtensionManager` + // overloads rather than `ExtensionManager["getExtension"]`: indexed access on + // an overloaded method collapses the signatures, which widened the factory + // overload's `ReturnType>` result to `any` (losing e.g. a + // returned extension's `store` type). + public getExtension: (< + const Ext extends Extension | ExtensionFactory = Extension, + >( + extension: string, + ) => + | (Ext extends Extension + ? Ext + : Ext extends ExtensionFactory + ? ReturnType> + : never) + | undefined) & + (( + extension: T, + ) => ReturnType> | undefined) = ((extension: any) => + this._extensionManager.getExtension(extension)) as any; /** * Mount the editor to a DOM element. diff --git a/packages/core/src/editor/managers/ExtensionManager/extensions.ts b/packages/core/src/editor/managers/ExtensionManager/extensions.ts index 2592b25d2a..853cca2493 100644 --- a/packages/core/src/editor/managers/ExtensionManager/extensions.ts +++ b/packages/core/src/editor/managers/ExtensionManager/extensions.ts @@ -15,6 +15,7 @@ import { FilePanelExtension, FormattingToolbarExtension, HistoryExtension, + InlineContentBoundaryEditExtension, LinkToolbarExtension, NodeSelectionKeyboardExtension, PlaceholderExtension, @@ -22,6 +23,8 @@ import { PreviousBlockTypeExtension, ShowSelectionExtension, SideMenuExtension, + SourceBlockWithPreviewExtension, + SourceInlineContentWithPreviewExtension, SuggestionMenu, TableHandlesExtension, TrailingNodeExtension, @@ -167,8 +170,11 @@ export function getDefaultExtensions( PlaceholderExtension(options), ShowSelectionExtension(options), SideMenuExtension(options), + SourceBlockWithPreviewExtension(), + SourceInlineContentWithPreviewExtension(), SuggestionMenu(options), HistoryExtension(), + InlineContentBoundaryEditExtension(), PositionMappingExtension(), ...(options.trailingBlock !== false ? [TrailingNodeExtension()] : []), ] as ExtensionFactoryInstance[]; diff --git a/packages/core/src/exporter/ExportImage.ts b/packages/core/src/exporter/ExportImage.ts new file mode 100644 index 0000000000..8d7fb30c07 --- /dev/null +++ b/packages/core/src/exporter/ExportImage.ts @@ -0,0 +1,50 @@ +/** + * An image generated during export (e.g. a rendered formula or diagram): the + * encoded image bytes plus the dimensions to display it at. + * + * The bytes (rather than e.g. a data URL string or a `Blob`) are the source + * of truth: they carry no encoding ambiguity, work in every environment, and + * are readable synchronously - each output format converts them at its own + * boundary (data URL for HTML-based targets, raw bytes for DOCX, base64 for + * email attachments). + */ +export type ExportImage = { + /** MIME type of `data`, e.g. `"image/png"` or `"image/svg+xml"`. */ + mimeType: string; + /** The encoded image bytes. */ + data: Uint8Array; + /** + * Dimensions to display the image at, in the target format's units (CSS + * pixels, points, ...). For raster images, `data`'s own pixel dimensions + * may be larger - images are often rendered at 2-4x for sharpness. + */ + width: number; + height: number; +}; + +/** + * Encodes bytes as base64. This papers over a platform gap: until + * `Uint8Array.prototype.toBase64()` (ES2026) is available in every runtime + * BlockNote supports, the only universal built-in is `btoa`, which takes + * binary *strings*. Uses `toBase64` when the runtime has it. + */ +export function bytesToBase64(bytes: Uint8Array): string { + if ("toBase64" in bytes && typeof bytes.toBase64 === "function") { + return (bytes as Uint8Array & { toBase64(): string }).toBase64(); + } + + let binary = ""; + for (const byte of bytes) { + binary += String.fromCharCode(byte); + } + return btoa(binary); +} + +/** + * Encodes an {@link ExportImage}'s bytes as a base64 data URL, for targets + * that take image sources as URLs (HTML `src` attributes, react-pdf image + * sources, ...). + */ +export function exportImageToDataURL(image: ExportImage): string { + return `data:${image.mimeType};base64,${bytesToBase64(image.data)}`; +} diff --git a/packages/core/src/exporter/Exporter.test.ts b/packages/core/src/exporter/Exporter.test.ts new file mode 100644 index 0000000000..e1fd22d9e8 --- /dev/null +++ b/packages/core/src/exporter/Exporter.test.ts @@ -0,0 +1,48 @@ +import { describe, expect, it } from "vite-plus/test"; + +import { BlockNoteSchema } from "../blocks/BlockNoteSchema.js"; +import { COLORS_DEFAULT } from "../editor/defaultColors.js"; +import { StyledText } from "../schema/index.js"; +import { Exporter } from "./Exporter.js"; + +// A minimal concrete exporter with empty mappings, to exercise the +// missing-mapping errors thrown when a document contains block types the +// mappings don't cover (e.g. blocks from separate packages, like math, +// without their exporter mappings spread in). +class TestExporter extends Exporter { + constructor() { + super( + BlockNoteSchema.create(), + { blockMapping: {}, inlineContentMapping: {}, styleMapping: {} } as any, + { colors: COLORS_DEFAULT }, + ); + } + + public transformStyledText(_styledText: StyledText) { + return undefined; + } +} + +describe("Exporter missing mappings", () => { + it("throws a descriptive error for an unmapped block type", async () => { + await expect( + new TestExporter().mapBlock({ type: "math" } as any, 0, 0), + ).rejects.toThrow( + 'missing a block mapping for block type "math". If this block comes from a separate package, spread that package\'s exporter mappings', + ); + }); + + it("throws a descriptive error for an unmapped inline content type", () => { + expect(() => + new TestExporter().mapInlineContent({ type: "inlineMath" } as any), + ).toThrow( + 'missing an inline content mapping for inline content type "inlineMath"', + ); + }); + + it("throws a descriptive error for an unmapped style", () => { + expect(() => new TestExporter().mapStyles({ bold: true } as any)).toThrow( + 'missing a style mapping for style "bold"', + ); + }); +}); diff --git a/packages/core/src/exporter/Exporter.ts b/packages/core/src/exporter/Exporter.ts index f42e89e6f4..9c7a2650fd 100644 --- a/packages/core/src/exporter/Exporter.ts +++ b/packages/core/src/exporter/Exporter.ts @@ -1,5 +1,7 @@ import { BlockNoteSchema } from "../blocks/BlockNoteSchema.js"; import { COLORS_DEFAULT } from "../editor/defaultColors.js"; +import type { Dictionary } from "../i18n/dictionary.js"; +import { en } from "../i18n/locales/index.js"; import { BlockFromConfig, BlockSchema, @@ -34,6 +36,20 @@ export type ExporterOptions = { * Colors to use for background of blocks, font colors, and highlight colors */ colors: typeof COLORS_DEFAULT; + /** + * The strings an exporter renders into the produced document (file link + * texts, error placeholders). Accepts a locale from + * `@blocknote/core/locales` or an editor dictionary; block packages that + * ship their own exporter strings (e.g. math, diagram) read their sections + * from this same object, exactly as they do from an editor dictionary. + * + * @default the English strings + */ + dictionary?: { exporter: Dictionary["exporter"] } & { + // Block packages read their own sections (e.g. `math`, `diagram`) from + // the same object; their types live with those packages. + [blockDictionary: string]: unknown; + }; }; export abstract class Exporter< B extends BlockSchema, @@ -54,6 +70,15 @@ export abstract class Exporter< public readonly options: ExporterOptions, ) {} + /** + * The strings this exporter renders into the produced document - the + * `exporter` section of the configured dictionary (the `dictionary` + * option of {@link ExporterOptions}), or the English defaults. + */ + public get dictionary(): Dictionary["exporter"] { + return this.options.dictionary?.exporter ?? en.exporter; + } + public async resolveFile(url: string) { if (!this.options?.resolveFileUrl) { return (await fetch(url)).blob(); @@ -67,17 +92,26 @@ export abstract class Exporter< public mapStyles(styles: Styles) { const stylesArray = Object.entries(styles).map(([key, value]) => { - const mappedStyle = this.mappings.styleMapping[key](value, this); + const mapping = this.mappings.styleMapping[key]; + if (!mapping) { + throw new Error( + `Exporter is missing a style mapping for style "${key}". If this style comes from a separate package, spread that package's exporter mappings into your styleMapping.`, + ); + } + const mappedStyle = mapping(value, this); return mappedStyle; }); return stylesArray; } public mapInlineContent(inlineContent: InlineContent) { - return this.mappings.inlineContentMapping[inlineContent.type]( - inlineContent, - this, - ); + const mapping = this.mappings.inlineContentMapping[inlineContent.type]; + if (!mapping) { + throw new Error( + `Exporter is missing an inline content mapping for inline content type "${inlineContent.type}". If this inline content comes from a separate package, spread that package's exporter mappings into your inlineContentMapping.`, + ); + } + return mapping(inlineContent, this); } public transformInlineContent(inlineContentArray: InlineContent[]) { @@ -92,12 +126,12 @@ export abstract class Exporter< numberedListIndex: number, children?: Array>, ) { - return this.mappings.blockMapping[block.type]( - block, - this, - nestingLevel, - numberedListIndex, - children, - ); + const mapping = this.mappings.blockMapping[block.type]; + if (!mapping) { + throw new Error( + `Exporter is missing a block mapping for block type "${block.type}". If this block comes from a separate package, spread that package's exporter mappings into your blockMapping.`, + ); + } + return mapping(block, this, nestingLevel, numberedListIndex, children); } } diff --git a/packages/core/src/exporter/index.ts b/packages/core/src/exporter/index.ts index e9d6a7bb03..8dcf4c2c2b 100644 --- a/packages/core/src/exporter/index.ts +++ b/packages/core/src/exporter/index.ts @@ -1,2 +1,3 @@ export * from "./Exporter.js"; +export * from "./ExportImage.js"; export * from "./mapping.js"; diff --git a/packages/core/src/exporter/mapping.ts b/packages/core/src/exporter/mapping.ts index 0dca63ebc3..fbe88d693e 100644 --- a/packages/core/src/exporter/mapping.ts +++ b/packages/core/src/exporter/mapping.ts @@ -42,7 +42,10 @@ export type InlineContentMapping< > = { [K in keyof I]: ( inlineContent: InlineContentFromConfig, - exporter: Exporter, + // Deliberately loose on the schema generics, like `BlockMapping` above - + // otherwise a mapping declared for one schema can't be reused (e.g. + // spread) in a mapping for a schema with different types. + exporter: Exporter, ) => RI; }; diff --git a/packages/core/src/extensions/FormattingToolbar/FormattingToolbar.ts b/packages/core/src/extensions/FormattingToolbar/FormattingToolbar.ts index 84524eee2e..429624cc8e 100644 --- a/packages/core/src/extensions/FormattingToolbar/FormattingToolbar.ts +++ b/packages/core/src/extensions/FormattingToolbar/FormattingToolbar.ts @@ -24,18 +24,20 @@ export const FormattingToolbarExtension = createExtension(({ editor }) => { return false; } - // Searches the content of the selection to see if it spans a node with a - // code spec. - let spansCode = false; + // Searches the content of the selection to see if it spans a node with + // `"plain"` content (mapped to a `"text*"` node spec), i.e. plain, + // unformattable text such as a code block. Blocks without inline content + // but that aren't plain (e.g. images) should still show the toolbar. + let spansPlainContent = false; tr.selection.content().content.descendants((node) => { - if (node.type.spec.code) { - spansCode = true; + if (node.type.spec.content === "text*") { + spansPlainContent = true; } - return !spansCode; // keep descending if we haven't found a code block + return !spansPlainContent; // keep descending until we find plain content }); - // Don't show if the selection spans a code block. - if (spansCode) { + // Don't show if the selection spans plain content. + if (spansPlainContent) { return false; } diff --git a/packages/core/src/extensions/InlineContentBoundaryEdit/InlineContentBoundaryEdit.ts b/packages/core/src/extensions/InlineContentBoundaryEdit/InlineContentBoundaryEdit.ts new file mode 100644 index 0000000000..01c0357d03 --- /dev/null +++ b/packages/core/src/extensions/InlineContentBoundaryEdit/InlineContentBoundaryEdit.ts @@ -0,0 +1,109 @@ +import { Plugin, PluginKey, Selection, TextSelection } from "prosemirror-state"; +import { createExtension } from "../../editor/BlockNoteExtension.js"; + +const PLUGIN_KEY = new PluginKey("inline-content-boundary-edit"); + +// Whether a Backspace/Delete at `selection` would remove the entire content +// range `[content.from, content.to)` of an inline content node. +function emptiesInlineContent( + selection: Selection, + key: string, + content: { from: number; to: number }, +) { + if (!selection.empty) { + return selection.from <= content.from && selection.to >= content.to; + } + + const isSingleChar = content.to - content.from === 1; + + return key === "Backspace" + ? isSingleChar && selection.from === content.to + : isSingleChar && selection.from === content.from; +} + +// Fixes editing at the boundary of an empty custom inline content node (i.e. an +// inline node with editable content, like a mention or inline math). +// +// An empty inline node can't hold a text cursor, so ProseMirror can't reconcile +// edits across the empty boundary from the DOM: typing into an empty node +// inserts text next to it rather than inside, and deleting the last character +// leaves an un-reconcilable empty node that corrupts/freezes the editor. Both +// boundary edits are handled here via transactions so the caret stays inside +// the node, which is kept alive and editable in its empty state. +// +// The cursor is inside such a node exactly when its directly-enclosing node is +// inline (`inline: true` in the spec) - regular text blocks aren't inline, and +// atomic inline content can't hold a cursor - so the handling applies to any +// inline content type without needing to know it by name. +export const InlineContentBoundaryEditExtension = createExtension( + () => + ({ + key: "inlineContentBoundaryEdit", + prosemirrorPlugins: [ + new Plugin({ + key: PLUGIN_KEY, + props: { + handleKeyDown: (view, event) => { + if (!view.editable) { + return false; + } + + const isTypedChar = + event.key.length === 1 && !event.ctrlKey && !event.metaKey; + + if ( + !isTypedChar && + event.key !== "Backspace" && + event.key !== "Delete" + ) { + return false; + } + + const { selection } = view.state; + const node = selection.$from.node(); + if (!node.type.spec.inline) { + return false; + } + + const pos = selection.$from.before(); + const contentFrom = pos + 1; + const contentTo = pos + 1 + node.content.size; + + // Empty content: redirect the typed character into the node. + if (isTypedChar && node.content.size === 0) { + const tr = view.state.tr.insert( + contentFrom, + view.state.schema.text(event.key), + ); + tr.setSelection( + TextSelection.create(tr.doc, contentFrom + event.key.length), + ); + view.dispatch(tr); + + return true; + } + + // Backspace/Delete that would empty the content: delete it all in + // one transaction, keeping the now-empty node (and the caret + // inside it) so it stays editable. + if ( + node.content.size > 0 && + emptiesInlineContent(selection, event.key, { + from: contentFrom, + to: contentTo, + }) + ) { + const tr = view.state.tr.delete(contentFrom, contentTo); + tr.setSelection(TextSelection.create(tr.doc, contentFrom)); + view.dispatch(tr); + + return true; + } + + return false; + }, + }, + }), + ], + }) as const, +); diff --git a/packages/core/src/extensions/SourceBlockWithPreview/SourceBlockWithPreview.ts b/packages/core/src/extensions/SourceBlockWithPreview/SourceBlockWithPreview.ts new file mode 100644 index 0000000000..c9e8648861 --- /dev/null +++ b/packages/core/src/extensions/SourceBlockWithPreview/SourceBlockWithPreview.ts @@ -0,0 +1,192 @@ +import { TextSelection } from "prosemirror-state"; + +import type { BlockNoteEditor } from "../../editor/BlockNoteEditor"; +import { + createExtension, + createStore, +} from "../../editor/BlockNoteExtension.js"; +import { Block } from "../../blocks/index.js"; + +/** + * A single editor-wide extension that drives the source popup for blocks that + * render a preview. Which blocks it activates on is decided by each spec's + * `meta.hasPreview` flag, so individual blocks opt in rather than the extension + * being configured with a block type. + * + * The extension is registered once (it's a default extension) and is a no-op + * when no block declares `meta.hasPreview`. + */ +export const SourceBlockWithPreviewExtension = createExtension( + ({ editor }: { editor: BlockNoteEditor }) => { + const store = createStore<{ + popupOpen: string | undefined; + selected: string | undefined; + }>({ + popupOpen: undefined, + selected: undefined, + }); + + // A block has a preview iff its spec's implementation declares + // `meta.hasPreview` (read from the spec, like the syntax-highlighting + // extension reads `meta.highlight`). + const blockHasPreview = (block: Block) => + !!editor.schema.blockSpecs[block.type]?.implementation?.meta?.hasPreview; + + const handleArrow = + (direction: "prev" | "next") => + ({ editor }: { editor: BlockNoteEditor }) => { + const { block, prevBlock, nextBlock } = editor.getTextCursorPosition(); + if (!blockHasPreview(block) || store.state.popupOpen === block.id) { + return false; + } + + const targetBlock = direction === "prev" ? prevBlock : nextBlock; + if (!targetBlock) { + return false; + } + + editor.setTextCursorPosition( + targetBlock.id, + direction === "prev" ? "end" : "start", + ); + + return true; + }; + + return { + key: "sourceBlockWithPreview", + store, + keyboardShortcuts: { + // Toggles the popup. This may be overridden by `hardBreakShortcut`. + Enter: ({ editor }) => { + const { block } = editor.getTextCursorPosition(); + if (!blockHasPreview(block)) { + return false; + } + + if ( + store.state.popupOpen === block.id && + editor.schema.blockSpecs[block.type]?.implementation?.meta + ?.hardBreakShortcut === "enter" + ) { + const view = editor.prosemirrorView!; + view.dispatch(view.state.tr.insertText("\n")); + + return true; + } + + editor.setTextCursorPosition(block.id, "end"); + store.setState((state) => ({ + ...state, + popupOpen: + store.state.popupOpen === block.id ? undefined : block.id, + })); + + return true; + }, + // Closes the popup. + Escape: ({ editor }) => { + const { block } = editor.getTextCursorPosition(); + if (!blockHasPreview(block) || store.state.popupOpen !== block.id) { + return false; + } + + editor.setTextCursorPosition(block.id, "end"); + + store.setState((state) => ({ ...state, popupOpen: undefined })); + + return true; + }, + // While the popup is open, selects the whole source instead of the + // whole document. + "Mod-a": ({ editor }) => { + const { block } = editor.getTextCursorPosition(); + if (!blockHasPreview(block) || store.state.popupOpen !== block.id) { + return false; + } + + const view = editor.prosemirrorView!; + const { $from } = view.state.selection; + if ($from.parent.type.name !== block.type) { + return false; + } + + view.dispatch( + view.state.tr.setSelection( + TextSelection.create(view.state.doc, $from.start(), $from.end()), + ), + ); + + return true; + }, + // While the popup is closed, moves the selection straight to the previous/next block + // instead of into the (hidden) source. + ArrowUp: handleArrow("prev"), + ArrowLeft: handleArrow("prev"), + ArrowDown: handleArrow("next"), + ArrowRight: handleArrow("next"), + }, + mount: ({ dom, signal }) => { + // Closes the popup when the selection leaves the block that owns it and tracks which block + // the selection is in. + const unsubscribeSelectionChange = editor.onSelectionChange(() => { + const { block } = editor.getTextCursorPosition(); + + const selected = blockHasPreview(block) ? block.id : undefined; + const popupOpen = + store.state.popupOpen && store.state.popupOpen !== block.id + ? undefined + : store.state.popupOpen; + + if ( + selected === store.state.selected && + popupOpen === store.state.popupOpen + ) { + return; + } + + store.setState((state) => ({ ...state, selected, popupOpen })); + }); + signal.addEventListener("abort", unsubscribeSelectionChange); + + // While the popup is closed, prevents editing of the (hidden) source. Handled here rather + // than in `keyboardShortcuts` as it needs to match any text-input key, which a keymap + // can't express. + const handleKeyDown = (event: KeyboardEvent) => { + if (!editor.isEditable) { + return; + } + + const { block } = editor.getTextCursorPosition(); + if (!blockHasPreview(block) || store.state.popupOpen === block.id) { + return; + } + + if (event.key === "Backspace" || event.key === "Delete") { + event.preventDefault(); + event.stopImmediatePropagation(); + editor.removeBlocks([block.id]); + + return; + } + + if ( + (event.key.length === 1 && !event.ctrlKey && !event.metaKey) || + event.key === "Tab" + ) { + event.preventDefault(); + event.stopImmediatePropagation(); + } + }; + dom.addEventListener("keydown", handleKeyDown, { + capture: true, + signal, + }); + + const handleBlur = () => + store.setState((state) => ({ ...state, popupOpen: undefined })); + dom.addEventListener("blur", handleBlur, { capture: true, signal }); + }, + }; + }, +); diff --git a/packages/core/src/extensions/SourceInlineContentWithPreview/SourceInlineContentWithPreview.ts b/packages/core/src/extensions/SourceInlineContentWithPreview/SourceInlineContentWithPreview.ts new file mode 100644 index 0000000000..9ab67e93a7 --- /dev/null +++ b/packages/core/src/extensions/SourceInlineContentWithPreview/SourceInlineContentWithPreview.ts @@ -0,0 +1,142 @@ +import { Selection, TextSelection } from "prosemirror-state"; + +import type { BlockNoteEditor } from "../../editor/BlockNoteEditor"; +import { + createExtension, + createStore, +} from "../../editor/BlockNoteExtension.js"; + +/** + * Inline-content counterpart of {@link SourceBlockWithPreviewExtension}. A + * single editor-wide extension that drives the source popup for inline content + * that renders a preview. Which inline content it activates on is decided by + * each spec's `meta.hasPreview` flag, so individual inline content opts in + * rather than the extension being configured with a type. + * + * Unlike the block version, the popup isn't toggled with a separate state flag: + * it's open exactly when the selection is inside the inline content's source. + * The store therefore only tracks which inline content (by its position) holds + * the selection - moving the selection in opens its popup, moving it out closes + * it. Since the source popup is always laid out (just hidden via opacity), the + * cursor can navigate into and out of it with the arrow keys as usual. + * + * The extension is registered once (it's a default extension) and is a no-op + * when no inline content declares `meta.hasPreview`. + */ +export const SourceInlineContentWithPreviewExtension = createExtension( + ({ editor }: { editor: BlockNoteEditor }) => { + const store = createStore<{ + selected: number | undefined; + }>({ + selected: undefined, + }); + + // Inline content has a preview iff its spec's implementation declares + // `meta.hasPreview`. + const nodeHasPreview = (nodeName: string) => + !!editor.schema.inlineContentSpecs[nodeName]?.implementation?.meta + ?.hasPreview; + + // Moves the selection out of the inline content, to just `"before"` or + // `"after"` it, which closes the popup via the selection-change handler + // below. Lets the keyboard commit-and-exit the source the same way arrowing + // past its edge does, keeps Enter from splitting the block while editing the + // source, and lets the up/down arrows step out of the source rather than + // staying trapped inside it. + const moveSelectionOut = + (direction: "before" | "after") => + ({ editor }: { editor: BlockNoteEditor }) => { + const { $from } = editor.prosemirrorState.selection; + const node = $from.node(); + if (!nodeHasPreview(node.type.name)) { + return false; + } + + const view = editor.prosemirrorView!; + const selection = Selection.near( + view.state.doc.resolve( + direction === "before" ? $from.before() : $from.after(), + ), + direction === "before" ? -1 : 1, + ); + view.dispatch(view.state.tr.setSelection(selection)); + + return true; + }; + + return { + key: "sourceInlineContentWithPreview", + store, + keyboardShortcuts: { + Enter: moveSelectionOut("after"), + "Shift-Enter": moveSelectionOut("after"), + Escape: moveSelectionOut("after"), + ArrowUp: moveSelectionOut("before"), + ArrowDown: moveSelectionOut("after"), + // While editing the source, selects the whole source instead of the + // whole document. + "Mod-a": ({ editor }) => { + const { $from } = editor.prosemirrorState.selection; + if (!nodeHasPreview($from.node().type.name)) { + return false; + } + + const view = editor.prosemirrorView!; + view.dispatch( + view.state.tr.setSelection( + TextSelection.create(view.state.doc, $from.start(), $from.end()), + ), + ); + + return true; + }, + }, + mount: ({ dom, signal }) => { + // The popup is open exactly when the selection is inside the inline + // content, so we just track which inline content (if any) holds it. + const unsubscribeSelectionChange = editor.onSelectionChange(() => { + const { $from } = editor.prosemirrorState.selection; + const node = $from.node(); + + store.setState({ + selected: nodeHasPreview(node.type.name) + ? $from.before() + : undefined, + }); + }); + signal.addEventListener("abort", unsubscribeSelectionChange); + + // Sets `visibility: hidden` on the popup for a single frame when pressing up/down arrow + // keys. The popup is normally hidden through `opacity: 0`, which means it's still visible + // to the browser for navigation. Therefore, the up/down arrows can sometimes move the + // selection into the popup from unexpected positions, such as on the same line. Setting + // `visibility: hidden` makes the browser ignore it when determining the new selection. + // TODO: This is hacky, we should find a cleaner solution. + const handleVerticalArrow = (event: KeyboardEvent) => { + if (event.key !== "ArrowUp" && event.key !== "ArrowDown") { + return; + } + + // When the selection is already inside a source, leave navigation + // (moving within or out of it) to the browser as usual. + const { $from } = editor.prosemirrorState.selection; + if (nodeHasPreview($from.node().type.name)) { + return; + } + + dom.classList.add("bn-suppress-source-popup-caret"); + requestAnimationFrame(() => + dom.classList.remove("bn-suppress-source-popup-caret"), + ); + }; + dom.addEventListener("keydown", handleVerticalArrow, { + capture: true, + signal, + }); + + const handleBlur = () => store.setState({ selected: undefined }); + dom.addEventListener("blur", handleBlur, { capture: true, signal }); + }, + }; + }, +); diff --git a/packages/core/src/extensions/SyntaxHighlighting/SyntaxHighlighting.test.ts b/packages/core/src/extensions/SyntaxHighlighting/SyntaxHighlighting.test.ts new file mode 100644 index 0000000000..dd89b96ad9 --- /dev/null +++ b/packages/core/src/extensions/SyntaxHighlighting/SyntaxHighlighting.test.ts @@ -0,0 +1,120 @@ +import { describe, expect, it } from "vite-plus/test"; +import { + collectHighlightNodeTypes, + SyntaxHighlightingExtension, +} from "./SyntaxHighlighting.js"; + +/** + * @vitest-environment jsdom + */ + +describe("SyntaxHighlightingExtension", () => { + // The extension only reads `editor.schema.blockSpecs` and + // `inlineContentSpecs`, so a minimal stub is enough. + const fakeEditor = () => + ({ + schema: { + blockSpecs: { + paragraph: { config: { type: "paragraph", content: "inline" } }, + codeBlock: { config: { type: "codeBlock", content: "plain" } }, + image: { config: { type: "image", content: "none" } }, + }, + inlineContentSpecs: {}, + }, + }) as any; + + const pluginsFor = (options: any) => + SyntaxHighlightingExtension(options)({ editor: fakeEditor() }) + .prosemirrorPlugins; + + // Whether highlighting is enabled at all is decided by the user (they choose + // to add this extension to the editor's `extensions`), so the extension + // itself always installs the plugin once created. + it("installs a highlight plugin when a highlighter is configured", () => { + const plugins = pluginsFor({ createHighlighter: async () => ({}) as any }); + + expect(plugins).toHaveLength(1); + }); + + it("installs the plugin even without a highlighter (it no-ops at parse time)", () => { + expect(pluginsFor({})).toHaveLength(1); + }); +}); + +describe("collectHighlightNodeTypes", () => { + const highlight = () => "latex"; + + it("includes blocks with `content: plain` and a `meta.highlight`", () => { + const types = collectHighlightNodeTypes({ + blockSpecs: { + // Highlightable: plain content + a highlight callback. + mathBlock: { + config: { type: "mathBlock", content: "plain" }, + implementation: { meta: { highlight } }, + }, + // Not highlightable: no highlight callback. + paragraph: { + config: { type: "paragraph", content: "inline" }, + implementation: { meta: {} }, + }, + // Not highlightable: `content: none` holds no editable text. + image: { + config: { type: "image", content: "none" }, + implementation: { meta: { highlight } }, + }, + }, + inlineContentSpecs: {}, + }); + + expect(types).toEqual(["mathBlock"]); + }); + + it("includes inline content with `content: plain` and a `meta.highlight`", () => { + const types = collectHighlightNodeTypes({ + blockSpecs: {}, + inlineContentSpecs: { + // Highlightable: plain (editable plain text) + a highlight callback. + math: { + config: { type: "math", content: "plain" }, + implementation: { meta: { highlight } }, + }, + // Not highlightable: no highlight callback. + mention: { + config: { type: "mention", content: "plain" }, + implementation: { meta: {} }, + }, + // Not highlightable: `content: none` holds no editable text. + tag: { + config: { type: "tag", content: "none" }, + implementation: { meta: { highlight } }, + }, + // Built-in `text`/`link` specs have string configs, not objects. + text: { config: "text", implementation: undefined }, + link: { config: "link", implementation: undefined }, + }, + }); + + expect(types).toEqual(["math"]); + }); + + it("collects both block and inline-content highlight types together", () => { + const types = collectHighlightNodeTypes({ + blockSpecs: { + mathBlock: { + config: { type: "mathBlock", content: "plain" }, + implementation: { meta: { highlight } }, + }, + }, + inlineContentSpecs: { + math: { + config: { type: "math", content: "plain" }, + implementation: { meta: { highlight } }, + }, + }, + }); + + expect(types).toContain("mathBlock"); + expect(types).toContain("math"); + expect(types).toHaveLength(2); + }); +}); diff --git a/packages/core/src/extensions/SyntaxHighlighting/SyntaxHighlighting.ts b/packages/core/src/extensions/SyntaxHighlighting/SyntaxHighlighting.ts new file mode 100644 index 0000000000..877dea8428 --- /dev/null +++ b/packages/core/src/extensions/SyntaxHighlighting/SyntaxHighlighting.ts @@ -0,0 +1,89 @@ +import type { HighlighterGeneric } from "@shikijs/types"; +import { + createExtension, + ExtensionOptions, +} from "../../editor/BlockNoteExtension.js"; +import { lazyShikiPlugin } from "./shiki.js"; +import { + CustomInlineContentConfig, + InlineContentSpec, + LooseBlockSpec, +} from "../../schema/index.js"; + +export type SyntaxHighlightingOptions = { + /** + * Creates the Shiki highlighter used for syntax highlighting. Can be + * asynchronous, so the highlighter is only loaded once it's first needed. + * + * When omitted, content renders without syntax highlighting. + */ + createHighlighter: () => Promise>; +}; + +/** + * Collects the node type names that should be syntax-highlighted from a schema's + * block and inline-content specs. + * + * A spec is a candidate when it has a `meta.highlight` callback (which decides + * the language) AND the node actually holds editable text. Block and + * inline-content specs use different `content` value spaces, so "editable text" + * means `content === "plain"` for both blocks (code/math blocks) and inline + * content (inline math) - both hold plain text - hence the two are filtered + * separately. + * + * Inline content (e.g. inline math) is highlighted too: `prosemirror-highlight` + * collects nodes by `node.inlineContent` since v0.15.3 + * (https://github.com/ocavue/prosemirror-highlight/pull/137), so inline nodes + * holding inline content are visited alongside text blocks. + */ +export function collectHighlightNodeTypes(schema: { + blockSpecs: Record; + inlineContentSpecs: Record; +}): string[] { + const blockNodeTypes = Object.values(schema.blockSpecs) + .filter( + (blockSpec): blockSpec is LooseBlockSpec => + typeof (blockSpec as LooseBlockSpec)?.config === "object" && + (blockSpec as LooseBlockSpec).config.content === "plain" && + !!(blockSpec as LooseBlockSpec).implementation?.meta?.highlight, + ) + .map((blockSpec) => blockSpec.config.type); + + const inlineContentNodeTypes = Object.values(schema.inlineContentSpecs) + .filter( + ( + inlineContentSpec, + ): inlineContentSpec is InlineContentSpec => + typeof ( + inlineContentSpec as InlineContentSpec + )?.config === "object" && + (inlineContentSpec as InlineContentSpec) + .config.content === "plain" && + !!(inlineContentSpec as InlineContentSpec) + .implementation?.meta?.highlight, + ) + .map((inlineContentSpec) => inlineContentSpec.config.type); + + return [...blockNodeTypes, ...inlineContentNodeTypes]; +} + +/** + * A single editor-wide extension that syntax-highlights block and inline-content + * content. Which nodes get highlighted (and as which language) is decided by + * each spec's `meta.highlight` callback, so individual specs declare their own + * language rather than the extension configuring them. + * + * Highlighting is opt-in: the user adds this extension to the editor's + * `extensions` (configured with a `createHighlighter`) to enable it. When it's + * absent, content renders as plain text. + */ +export const SyntaxHighlightingExtension = createExtension( + ({ editor, options }: ExtensionOptions) => { + const nodeTypes = collectHighlightNodeTypes(editor.schema); + + return { + key: "syntaxHighlighting", + prosemirrorPlugins: [lazyShikiPlugin(options, nodeTypes, editor.schema)], + }; + }, +); diff --git a/packages/core/src/extensions/SyntaxHighlighting/inlineHighlight.test.ts b/packages/core/src/extensions/SyntaxHighlighting/inlineHighlight.test.ts new file mode 100644 index 0000000000..96e03418e7 --- /dev/null +++ b/packages/core/src/extensions/SyntaxHighlighting/inlineHighlight.test.ts @@ -0,0 +1,135 @@ +import { Schema } from "prosemirror-model"; +import { EditorState, PluginKey } from "prosemirror-state"; +import { Decoration } from "prosemirror-view"; +import { createHighlightPlugin } from "prosemirror-highlight"; +import { describe, expect, it } from "vite-plus/test"; + +/** + * @vitest-environment jsdom + */ + +// Regression coverage for inline syntax highlighting. `prosemirror-highlight` +// used to collect only text-block nodes, so inline nodes (e.g. inline math) +// were never highlighted. Since v0.15.3 it collects nodes by +// `node.inlineContent` (https://github.com/ocavue/prosemirror-highlight/pull/137), +// so inline content with a `meta.highlight` is highlighted too. This suite +// guards that behavior. It drives the plugin directly against a hand-built +// ProseMirror doc, so it needs neither Shiki nor a browser. +describe("inline syntax highlighting", () => { + // A minimal schema with an *inline* node type that holds inline content + // (`content: "text*"`), mirroring how inline content like inline math is + // structured, plus an *atom* inline node that holds no content. + const schema = new Schema({ + nodes: { + text: { group: "inline" }, + inlineCode: { + group: "inline", + inline: true, + content: "text*", + toDOM: () => ["span", 0], + }, + // An atom inline node (no inline content) - like a mention. It should + // never be collected for highlighting even if named in `nodeTypes`, since + // it holds no editable text. This is why the library keys off + // `node.inlineContent` rather than merely `node.isInline`. + mention: { + group: "inline", + inline: true, + atom: true, + toDOM: () => ["span", "@x"], + }, + paragraph: { + group: "block", + content: "inline*", + toDOM: () => ["p", 0], + }, + doc: { content: "block+" }, + }, + }); + + const docWithInline = schema.node("doc", null, [ + schema.node("paragraph", null, [ + schema.text("before "), + schema.node("inlineCode", null, [schema.text("const x = 1")]), + schema.text(" "), + schema.node("mention"), + schema.text(" after"), + ]), + ]); + + it("calls the parser with the inline node's content and decorates it", () => { + const seen: { content: string; language?: string }[] = []; + + const plugin = createHighlightPlugin({ + // Synchronous stub parser mirroring how the real Shiki parser emits token + // decorations: `Decoration.inline` over positions *inside* the node, + // starting at `pos + 1` (the node's content starts after its opening + // boundary). Node-spanning decorations aren't valid over an inline node, + // which is fine - the token decorations are what actually color the text. + parser: ({ content, language, pos }) => { + seen.push({ content, language }); + return [ + Decoration.inline(pos + 1, pos + 1 + content.length, { + class: "hl", + }), + ]; + }, + nodeTypes: ["inlineCode"], + languageExtractor: () => "javascript", + }); + + const state = EditorState.create({ + schema, + doc: docWithInline, + plugins: [plugin], + }); + + const key = (plugin as any).spec.key as PluginKey; + const pluginState = key.getState(state); + + // The inline node's text reached the parser - proving inline nodes are + // collected (with the pre-0.15.3 library, `seen` would be empty). + expect(seen).toHaveLength(1); + expect(seen[0].content).toBe("const x = 1"); + expect(seen[0].language).toBe("javascript"); + + // And a decoration was produced for it. + expect(pluginState.decorations).toBeDefined(); + expect(pluginState.decorations.find().length).toBeGreaterThan(0); + }); + + it("still leaves non-matching inline nodes untouched", () => { + const seen: string[] = []; + const plugin = createHighlightPlugin({ + parser: ({ content }) => { + seen.push(content); + return []; + }, + nodeTypes: ["somethingElse"], + languageExtractor: () => "javascript", + }); + + EditorState.create({ schema, doc: docWithInline, plugins: [plugin] }); + + expect(seen).toHaveLength(0); + }); + + it("excludes atom inline nodes even when named in `nodeTypes`", () => { + const seen: string[] = []; + const plugin = createHighlightPlugin({ + parser: ({ content }) => { + seen.push(content); + return []; + }, + // `mention` is an atom inline node with no inline content, so it holds no + // text to highlight. The library keys off `node.inlineContent`, not + // `node.isInline`, so it's correctly skipped. + nodeTypes: ["mention"], + languageExtractor: () => "javascript", + }); + + EditorState.create({ schema, doc: docWithInline, plugins: [plugin] }); + + expect(seen).toHaveLength(0); + }); +}); diff --git a/packages/core/src/extensions/SyntaxHighlighting/shiki.ts b/packages/core/src/extensions/SyntaxHighlighting/shiki.ts new file mode 100644 index 0000000000..a0e8cec88b --- /dev/null +++ b/packages/core/src/extensions/SyntaxHighlighting/shiki.ts @@ -0,0 +1,116 @@ +import type { HighlighterGeneric } from "@shikijs/types"; +import { Parser, createHighlightPlugin } from "prosemirror-highlight"; +import { createParser } from "prosemirror-highlight/shiki"; +import type { SyntaxHighlightingOptions } from "./SyntaxHighlighting.js"; +import { CustomBlockNoteSchema } from "../../schema/schema.js"; + +export const shikiParserSymbol = Symbol.for("blocknote.shikiParser"); +export const shikiHighlighterPromiseSymbol = Symbol.for( + "blocknote.shikiHighlighterPromise", +); + +// Languages that represent "no highlighting" - skipped without asking Shiki to +// load a grammar for them. +const PLAIN_TEXT_LANGUAGES = ["text", "none", "plaintext", "txt"]; + +/** + * Creates the syntax highlighting plugin for the given block types, lazily + * loading the highlighter on first use. + * + * Each spec's `meta.highlight` callback resolves a node to a language, which is + * passed straight to Shiki - it resolves aliases and loads the grammar from its + * bundle, so any language the provided highlighter bundles can be highlighted. + */ +export function lazyShikiPlugin( + options: SyntaxHighlightingOptions, + nodeTypes: string[], + schema: CustomBlockNoteSchema, +) { + const globalThisForShiki = globalThis as { + [shikiHighlighterPromiseSymbol]?: Promise>; + [shikiParserSymbol]?: Parser; + }; + + let highlighter: HighlighterGeneric | undefined; + let parser: Parser | undefined; + // Languages the highlighter failed to load (e.g. not in its bundle). Tracked + // so we don't keep retrying - and re-triggering re-highlights - forever. + const unsupportedLanguages = new Set(); + const lazyParser: Parser = (parserOptions) => { + if (!options.createHighlighter) { + return []; + } + if (!highlighter) { + globalThisForShiki[shikiHighlighterPromiseSymbol] = + globalThisForShiki[shikiHighlighterPromiseSymbol] || + options.createHighlighter(); + + return globalThisForShiki[shikiHighlighterPromiseSymbol].then( + (createdHighlighter) => { + highlighter = createdHighlighter; + }, + ); + } + const language = parserOptions.language; + + if ( + !language || + PLAIN_TEXT_LANGUAGES.includes(language) || + unsupportedLanguages.has(language) + ) { + return []; + } + + if (!highlighter.getLoadedLanguages().includes(language)) { + return highlighter.loadLanguage(language as any).catch(() => { + // The highlighter doesn't bundle this language - give up on it so we + // don't loop trying to load it on every re-highlight. + unsupportedLanguages.add(language); + }); + } + + if (!parser) { + parser = + globalThisForShiki[shikiParserSymbol] || + createParser(highlighter as any, pickThemeOptions(highlighter)); + globalThisForShiki[shikiParserSymbol] = parser; + } + + return parser(parserOptions); + }; + + return createHighlightPlugin({ + parser: lazyParser, + // The highlight plugin only gives us the block content node, so we can only + // reconstruct the block's `type` and `props` (which is all a spec's + // `meta.highlight` needs to pick a language). + languageExtractor: (node) => { + const nodeShape = { + type: node.type.name, + props: node.attrs, + }; + // search for the node in the blockSpec or inlineContentSpecs + const spec = + schema.blockSpecs[nodeShape.type] || + schema.inlineContentSpecs[nodeShape.type]; + + return spec?.implementation?.meta?.highlight?.(nodeShape) ?? undefined; + }, + nodeTypes, + }); +} + +// If a light and dark theme is added to the highlighter, this function specifies them in +// `createParser`. This lets us use `--shiki-light` and `--shiki-dark` CSS variables for correct +// styling for both light & dark editor themes. +function pickThemeOptions(highlighter: HighlighterGeneric) { + const themes = highlighter.getLoadedThemes(); + const light = themes.find((t) => /light/i.test(t)); + const dark = themes.find((t) => /dark/i.test(t)); + + if (light && dark) { + return { themes: { light, dark }, defaultColor: false as const }; + } + + return undefined; +} diff --git a/packages/core/src/extensions/index.ts b/packages/core/src/extensions/index.ts index 3258f127c2..eb1d455e33 100644 --- a/packages/core/src/extensions/index.ts +++ b/packages/core/src/extensions/index.ts @@ -3,6 +3,7 @@ export * from "./DropCursor/DropCursor.js"; export * from "./FilePanel/FilePanel.js"; export * from "./FormattingToolbar/FormattingToolbar.js"; export * from "./History/History.js"; +export * from "./InlineContentBoundaryEdit/InlineContentBoundaryEdit.js"; export * from "./LinkToolbar/LinkToolbar.js"; export * from "./LinkToolbar/protocols.js"; export * from "./NodeSelectionKeyboard/NodeSelectionKeyboard.js"; @@ -11,7 +12,10 @@ export * from "./PositionMapping/PositionMapping.js"; export * from "./PreviousBlockType/PreviousBlockType.js"; export * from "./ShowSelection/ShowSelection.js"; export * from "./SideMenu/SideMenu.js"; +export * from "./SourceBlockWithPreview/SourceBlockWithPreview.js"; +export * from "./SourceInlineContentWithPreview/SourceInlineContentWithPreview.js"; export * from "./SuggestionMenu/DefaultGridSuggestionItem.js"; +export * from "./SyntaxHighlighting/SyntaxHighlighting.js"; export * from "./SuggestionMenu/DefaultSuggestionItem.js"; export * from "./SuggestionMenu/getDefaultEmojiPickerItems.js"; export * from "./SuggestionMenu/getDefaultSlashMenuItems.js"; diff --git a/packages/core/src/extensions/tiptap-extensions/KeyboardShortcuts/KeyboardShortcutsExtension.test.ts b/packages/core/src/extensions/tiptap-extensions/KeyboardShortcuts/KeyboardShortcutsExtension.test.ts index 1e27c9beeb..2f1e601a35 100644 --- a/packages/core/src/extensions/tiptap-extensions/KeyboardShortcuts/KeyboardShortcutsExtension.test.ts +++ b/packages/core/src/extensions/tiptap-extensions/KeyboardShortcuts/KeyboardShortcutsExtension.test.ts @@ -18,15 +18,17 @@ import { createBlockSpec } from "../../../schema/index.js"; const createHardBreakTestBlockSpec = < const T extends string, const S extends "shift+enter" | "enter" | "none", + const C extends "inline" | "plain", >( type: T, hardBreakShortcut: S, + content: C = "inline" as C, ) => createBlockSpec( { type, propSchema: {}, - content: "inline", + content, }, { meta: { @@ -47,11 +49,22 @@ const schema = BlockNoteSchema.create({ ...defaultBlockSpecs, hardBreakEnter: createHardBreakTestBlockSpec("hardBreakEnter", "enter"), hardBreakNone: createHardBreakTestBlockSpec("hardBreakNone", "none"), + // "plain" content (`text*`) can't hold a `hardBreak` node, so these blocks + // insert a literal newline character instead - e.g. code/math/diagram source. + hardBreakEnterPlain: createHardBreakTestBlockSpec( + "hardBreakEnterPlain", + "enter", + "plain", + ), }, }); function createEditor( - blockType: "paragraph" | "hardBreakEnter" | "hardBreakNone", + blockType: + | "paragraph" + | "hardBreakEnter" + | "hardBreakNone" + | "hardBreakEnterPlain", ) { const editor = BlockNoteEditor.create({ schema, @@ -87,6 +100,16 @@ function countHardBreaks(editor: BlockNoteEditor) { return count; } +function getTextContent(editor: BlockNoteEditor) { + let text = ""; + editor._tiptapEditor.state.doc.descendants((node) => { + if (node.isText) { + text += node.text; + } + }); + return text; +} + describe("KeyboardShortcutsExtension hardBreakShortcut", () => { it("inserts a hard break on Shift-Enter by default", () => { const editor = createEditor("paragraph"); @@ -152,4 +175,30 @@ describe("KeyboardShortcutsExtension hardBreakShortcut", () => { editor._tiptapEditor.destroy(); }); + + it('inserts a newline character on Enter when content is "plain"', () => { + const editor = createEditor("hardBreakEnterPlain"); + + pressKeys(editor, "Enter"); + + // A "plain" block can't hold a `hardBreak` node, so no node is inserted and + // the block is not split - a literal newline is added to its text instead. + expect(countHardBreaks(editor)).toBe(0); + expect(editor.document.length).toBe(1); + expect(getTextContent(editor)).toBe("Hello world\n"); + + editor._tiptapEditor.destroy(); + }); + + it('inserts a newline character on Shift-Enter when content is "plain"', () => { + const editor = createEditor("hardBreakEnterPlain"); + + pressKeys(editor, "Shift-Enter"); + + expect(countHardBreaks(editor)).toBe(0); + expect(editor.document.length).toBe(1); + expect(getTextContent(editor)).toBe("Hello world\n"); + + editor._tiptapEditor.destroy(); + }); }); diff --git a/packages/core/src/extensions/tiptap-extensions/KeyboardShortcuts/KeyboardShortcutsExtension.ts b/packages/core/src/extensions/tiptap-extensions/KeyboardShortcuts/KeyboardShortcutsExtension.ts index b3a0b62550..4d1758094a 100644 --- a/packages/core/src/extensions/tiptap-extensions/KeyboardShortcuts/KeyboardShortcutsExtension.ts +++ b/packages/core/src/extensions/tiptap-extensions/KeyboardShortcuts/KeyboardShortcutsExtension.ts @@ -804,9 +804,20 @@ export const KeyboardShortcutsExtension = Extension.create<{ commands.command(({ state }) => { const blockInfo = getBlockInfoFromSelection(state); + const blockSpec = + this.options.editor.schema.blockSpecs[blockInfo.blockNoteType]; + + // NOTE: This likely doesn't work as intended - `blockSchema[type]` + // holds the block *config* (type/propSchema/content), which carries + // no `meta`, so `meta?.hardBreakShortcut` is always `undefined` and + // this falls back to the default. It should read from the block + // spec's implementation instead (i.e. + // `editor.schema.blockSpecs[type].implementation.meta`), the way the + // syntax-highlighting extension reads `meta.highlight`. Left as-is + // for a follow-up pass. const blockHardBreakShortcut = - this.options.editor.schema.blockSpecs[blockInfo.blockNoteType] - ?.implementation?.meta?.hardBreakShortcut ?? "shift+enter"; + blockSpec?.implementation?.meta?.hardBreakShortcut ?? + "shift+enter"; if (blockHardBreakShortcut === "none") { return false; @@ -820,6 +831,15 @@ export const KeyboardShortcutsExtension = Extension.create<{ // both enter and shift+enter. blockHardBreakShortcut === "enter" ) { + // "plain" blocks (e.g. code/math/diagram source) hold text only + // (their content is `text*`), which can't contain a `hardBreak` + // node - inserting one would split the block into a new one. + // They represent line breaks as literal newline characters. + if (blockSpec?.config?.content === "plain") { + tr.insertText("\n", tr.selection.head); + return true; + } + const marks = tr.storedMarks || tr.selection.$head diff --git a/packages/core/src/i18n/locales/ar.ts b/packages/core/src/i18n/locales/ar.ts index 379517c9fa..094671d920 100644 --- a/packages/core/src/i18n/locales/ar.ts +++ b/packages/core/src/i18n/locales/ar.ts @@ -185,6 +185,10 @@ export const ar: Dictionary = { toggle_blocks: { add_block_button: "تبديل فارغ. انقر لإضافة كتلة.", }, + code_block: { + add_source_button_text: "إضافة كود المصدر", + ok_button_text: "موافق", + }, // from react package: side_menu: { add_block_label: "إضافة محتوي", @@ -395,6 +399,11 @@ export const ar: Dictionary = { formatting_change_by: (formats: string, users: string) => `تغيير التنسيق (${formats}) بواسطة: ${users}`, }, + exporter: { + open_file: "فتح الملف", + open_video_file: "فتح الفيديو", + open_audio_file: "فتح الصوت", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/de.ts b/packages/core/src/i18n/locales/de.ts index 90512f2995..bf77a36a01 100644 --- a/packages/core/src/i18n/locales/de.ts +++ b/packages/core/src/i18n/locales/de.ts @@ -221,6 +221,10 @@ export const de: Dictionary = { add_block_button: "Leerer aufklappbarer Bereich. Klicken, um einen Block hinzuzufügen.", }, + code_block: { + add_source_button_text: "Quellcode hinzufügen", + ok_button_text: "OK", + }, side_menu: { add_block_label: "Block hinzufügen", drag_handle_label: "Blockmenü öffnen", @@ -429,6 +433,11 @@ export const de: Dictionary = { formatting_change_by: (formats: string, users: string) => `Formatierungsänderung (${formats}) von: ${users}`, }, + exporter: { + open_file: "Datei öffnen", + open_video_file: "Video öffnen", + open_audio_file: "Audio öffnen", + }, generic: { ctrl_shortcut: "Strg", }, diff --git a/packages/core/src/i18n/locales/en.ts b/packages/core/src/i18n/locales/en.ts index 6493c0f77b..e5386f3020 100644 --- a/packages/core/src/i18n/locales/en.ts +++ b/packages/core/src/i18n/locales/en.ts @@ -200,6 +200,10 @@ export const en = { toggle_blocks: { add_block_button: "Empty toggle. Click to add a block.", }, + code_block: { + add_source_button_text: "Add source code", + ok_button_text: "OK", + }, // from react package: side_menu: { add_block_label: "Add block", @@ -410,6 +414,11 @@ export const en = { formatting_change_by: (formats: string, users: string) => `Formatting change (${formats}) by: ${users}`, }, + exporter: { + open_file: "Open file", + open_video_file: "Open video", + open_audio_file: "Open audio", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/es.ts b/packages/core/src/i18n/locales/es.ts index 1b7f6bc240..743a1be05c 100644 --- a/packages/core/src/i18n/locales/es.ts +++ b/packages/core/src/i18n/locales/es.ts @@ -200,6 +200,10 @@ export const es: Dictionary = { toggle_blocks: { add_block_button: "Toggle vacío. Haz clic para añadir un bloque.", }, + code_block: { + add_source_button_text: "Agregar código fuente", + ok_button_text: "Aceptar", + }, side_menu: { add_block_label: "Agregar bloque", drag_handle_label: "Abrir menú de bloque", @@ -408,6 +412,11 @@ export const es: Dictionary = { formatting_change_by: (formats: string, users: string) => `Cambio de formato (${formats}) por: ${users}`, }, + exporter: { + open_file: "Abrir archivo", + open_video_file: "Abrir vídeo", + open_audio_file: "Abrir audio", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/fa.ts b/packages/core/src/i18n/locales/fa.ts index c62f9ad72e..6b2783ab68 100644 --- a/packages/core/src/i18n/locales/fa.ts +++ b/packages/core/src/i18n/locales/fa.ts @@ -168,6 +168,10 @@ export const fa = { toggle_blocks: { add_block_button: "تاشوی خالی. برای افزودن بلوک کلیک کنید.", }, + code_block: { + add_source_button_text: "افزودن کد منبع", + ok_button_text: "تأیید", + }, // from react package: side_menu: { add_block_label: "افزودن بلوک", @@ -379,6 +383,11 @@ export const fa = { formatting_change_by: (formats: string, users: string) => `تغییر قالب‌بندی (${formats}) توسط: ${users}`, }, + exporter: { + open_file: "باز کردن فایل", + open_video_file: "باز کردن ویدیو", + open_audio_file: "باز کردن صدا", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/fr.ts b/packages/core/src/i18n/locales/fr.ts index 9386d85e85..ad605db24a 100644 --- a/packages/core/src/i18n/locales/fr.ts +++ b/packages/core/src/i18n/locales/fr.ts @@ -246,6 +246,10 @@ export const fr: Dictionary = { toggle_blocks: { add_block_button: "Liste repliable vide. Cliquez pour ajouter un bloc.", }, + code_block: { + add_source_button_text: "Ajouter le code source", + ok_button_text: "OK", + }, // from react package: side_menu: { add_block_label: "Ajouter un bloc", @@ -456,6 +460,11 @@ export const fr: Dictionary = { formatting_change_by: (formats: string, users: string) => `Modification de mise en forme (${formats}) par : ${users}`, }, + exporter: { + open_file: "Ouvrir le fichier", + open_video_file: "Ouvrir la vidéo", + open_audio_file: "Ouvrir l'audio", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/he.ts b/packages/core/src/i18n/locales/he.ts index 33f866fcaa..4662a94202 100644 --- a/packages/core/src/i18n/locales/he.ts +++ b/packages/core/src/i18n/locales/he.ts @@ -202,6 +202,10 @@ export const he: Dictionary = { toggle_blocks: { add_block_button: "מתג ריק. לחץ כדי להוסיף בלוק.", }, + code_block: { + add_source_button_text: "הוסף קוד מקור", + ok_button_text: "אישור", + }, side_menu: { add_block_label: "הוסף בלוק", drag_handle_label: "פתח תפריט בלוק", @@ -410,6 +414,11 @@ export const he: Dictionary = { formatting_change_by: (formats: string, users: string) => `שינוי עיצוב (${formats}) על ידי: ${users}`, }, + exporter: { + open_file: "פתח קובץ", + open_video_file: "פתח וידאו", + open_audio_file: "פתח שמע", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/hr.ts b/packages/core/src/i18n/locales/hr.ts index 56fcd64d97..03eb016eed 100644 --- a/packages/core/src/i18n/locales/hr.ts +++ b/packages/core/src/i18n/locales/hr.ts @@ -213,6 +213,10 @@ export const hr: Dictionary = { toggle_blocks: { add_block_button: "Prazan sklopivi blok. Klikni da dodaš sadržaj.", }, + code_block: { + add_source_button_text: "Dodaj izvorni kôd", + ok_button_text: "U redu", + }, // from react package: side_menu: { add_block_label: "Dodaj blok", @@ -424,6 +428,11 @@ export const hr: Dictionary = { formatting_change_by: (formats: string, users: string) => `Promjena oblikovanja (${formats}) od: ${users}`, }, + exporter: { + open_file: "Otvori datoteku", + open_video_file: "Otvori videozapis", + open_audio_file: "Otvori audiozapis", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/is.ts b/packages/core/src/i18n/locales/is.ts index 32ba20614d..913b2324b0 100644 --- a/packages/core/src/i18n/locales/is.ts +++ b/packages/core/src/i18n/locales/is.ts @@ -214,6 +214,10 @@ export const is: Dictionary = { toggle_blocks: { add_block_button: "Tóm fellilína. Smelltu til að bæta við blokk.", }, + code_block: { + add_source_button_text: "Bæta við frumkóða", + ok_button_text: "Í lagi", + }, side_menu: { add_block_label: "Bæta við blokki", drag_handle_label: "Opna blokkarvalmynd", @@ -424,6 +428,11 @@ export const is: Dictionary = { formatting_change_by: (formats: string, users: string) => `Sniðbreyting (${formats}) af: ${users}`, }, + exporter: { + open_file: "Opna skrá", + open_video_file: "Opna myndband", + open_audio_file: "Opna hljóð", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/it.ts b/packages/core/src/i18n/locales/it.ts index bbb144d33b..44be22c1bd 100644 --- a/packages/core/src/i18n/locales/it.ts +++ b/packages/core/src/i18n/locales/it.ts @@ -222,6 +222,10 @@ export const it: Dictionary = { toggle_blocks: { add_block_button: "Toggle vuoto. Clicca per aggiungere un blocco.", }, + code_block: { + add_source_button_text: "Aggiungi codice sorgente", + ok_button_text: "OK", + }, // from react package: side_menu: { add_block_label: "Aggiungi blocco", @@ -432,6 +436,11 @@ export const it: Dictionary = { formatting_change_by: (formats: string, users: string) => `Modifica formattazione (${formats}) da: ${users}`, }, + exporter: { + open_file: "Apri file", + open_video_file: "Apri video", + open_audio_file: "Apri audio", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/ja.ts b/packages/core/src/i18n/locales/ja.ts index 792bc9f363..ead1f2fb30 100644 --- a/packages/core/src/i18n/locales/ja.ts +++ b/packages/core/src/i18n/locales/ja.ts @@ -240,6 +240,10 @@ export const ja: Dictionary = { toggle_blocks: { add_block_button: "空のトグルです。クリックしてブロックを追加。", }, + code_block: { + add_source_button_text: "ソースコードを追加", + ok_button_text: "OK", + }, // from react package: side_menu: { add_block_label: "ブロックを追加", @@ -450,6 +454,11 @@ export const ja: Dictionary = { formatting_change_by: (formats: string, users: string) => `書式の変更 (${formats}) 変更者: ${users}`, }, + exporter: { + open_file: "ファイルを開く", + open_video_file: "動画を開く", + open_audio_file: "音声を開く", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/ko.ts b/packages/core/src/i18n/locales/ko.ts index a2e341e976..2981ff1c36 100644 --- a/packages/core/src/i18n/locales/ko.ts +++ b/packages/core/src/i18n/locales/ko.ts @@ -213,6 +213,10 @@ export const ko: Dictionary = { toggle_blocks: { add_block_button: "비어 있는 토글입니다. 클릭하여 블록을 추가하세요.", }, + code_block: { + add_source_button_text: "소스 코드 추가", + ok_button_text: "확인", + }, // from react package: side_menu: { add_block_label: "블록 추가", @@ -423,6 +427,11 @@ export const ko: Dictionary = { formatting_change_by: (formats: string, users: string) => `서식 변경 (${formats}) 변경한 사람: ${users}`, }, + exporter: { + open_file: "파일 열기", + open_video_file: "동영상 열기", + open_audio_file: "오디오 열기", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/nl.ts b/packages/core/src/i18n/locales/nl.ts index c258000eb1..da599e017c 100644 --- a/packages/core/src/i18n/locales/nl.ts +++ b/packages/core/src/i18n/locales/nl.ts @@ -201,6 +201,10 @@ export const nl: Dictionary = { toggle_blocks: { add_block_button: "Lege uitklapper. Klik om een blok toe te voegen.", }, + code_block: { + add_source_button_text: "Broncode toevoegen", + ok_button_text: "OK", + }, // from react package: side_menu: { add_block_label: "Nieuw blok", @@ -411,6 +415,11 @@ export const nl: Dictionary = { formatting_change_by: (formats: string, users: string) => `Opmaakwijziging (${formats}) door: ${users}`, }, + exporter: { + open_file: "Bestand openen", + open_video_file: "Video openen", + open_audio_file: "Audio openen", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/no.ts b/packages/core/src/i18n/locales/no.ts index bfd4a4ac74..72efc096ed 100644 --- a/packages/core/src/i18n/locales/no.ts +++ b/packages/core/src/i18n/locales/no.ts @@ -219,6 +219,10 @@ export const no: Dictionary = { toggle_blocks: { add_block_button: "Tomt toggle. Klikk for å legge til en blokk.", }, + code_block: { + add_source_button_text: "Legg til kildekode", + ok_button_text: "OK", + }, side_menu: { add_block_label: "Legg til blokk", drag_handle_label: "Åpne blokkmeny", @@ -428,6 +432,11 @@ export const no: Dictionary = { formatting_change_by: (formats: string, users: string) => `Formateringsendring (${formats}) av: ${users}`, }, + exporter: { + open_file: "Åpne fil", + open_video_file: "Åpne video", + open_audio_file: "Åpne lyd", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/pl.ts b/packages/core/src/i18n/locales/pl.ts index fe928d4477..d00039633c 100644 --- a/packages/core/src/i18n/locales/pl.ts +++ b/packages/core/src/i18n/locales/pl.ts @@ -192,6 +192,10 @@ export const pl: Dictionary = { add_block_button: "Brak bloków do rozwinięcia. Kliknij, aby dodać pierwszego.", }, + code_block: { + add_source_button_text: "Dodaj kod źródłowy", + ok_button_text: "OK", + }, side_menu: { add_block_label: "Dodaj blok", drag_handle_label: "Otwórz menu bloków", @@ -401,6 +405,11 @@ export const pl: Dictionary = { formatting_change_by: (formats: string, users: string) => `Zmiana formatowania (${formats}) przez: ${users}`, }, + exporter: { + open_file: "Otwórz plik", + open_video_file: "Otwórz wideo", + open_audio_file: "Otwórz audio", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/pt.ts b/packages/core/src/i18n/locales/pt.ts index 7598f092c2..fe719ce023 100644 --- a/packages/core/src/i18n/locales/pt.ts +++ b/packages/core/src/i18n/locales/pt.ts @@ -192,6 +192,10 @@ export const pt: Dictionary = { toggle_blocks: { add_block_button: "Toggle vazio. Clique para adicionar um bloco.", }, + code_block: { + add_source_button_text: "Adicionar código-fonte", + ok_button_text: "OK", + }, // from react package: side_menu: { add_block_label: "Adicionar bloco", @@ -403,6 +407,11 @@ export const pt: Dictionary = { formatting_change_by: (formats: string, users: string) => `Alteração de formatação (${formats}) por: ${users}`, }, + exporter: { + open_file: "Abrir arquivo", + open_video_file: "Abrir vídeo", + open_audio_file: "Abrir áudio", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/ru.ts b/packages/core/src/i18n/locales/ru.ts index 3546f4fa80..a4a7987dfc 100644 --- a/packages/core/src/i18n/locales/ru.ts +++ b/packages/core/src/i18n/locales/ru.ts @@ -243,6 +243,10 @@ export const ru: Dictionary = { toggle_blocks: { add_block_button: "Пустой переключатель. Нажмите, чтобы добавить блок.", }, + code_block: { + add_source_button_text: "Добавить исходный код", + ok_button_text: "ОК", + }, // from react package: side_menu: { add_block_label: "Добавить блок", @@ -454,6 +458,11 @@ export const ru: Dictionary = { formatting_change_by: (formats: string, users: string) => `Изменение форматирования (${formats}): ${users}`, }, + exporter: { + open_file: "Открыть файл", + open_video_file: "Открыть видео", + open_audio_file: "Открыть аудио", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/sk.ts b/packages/core/src/i18n/locales/sk.ts index e70d44d6e9..4e73dc7eca 100644 --- a/packages/core/src/i18n/locales/sk.ts +++ b/packages/core/src/i18n/locales/sk.ts @@ -200,6 +200,10 @@ export const sk = { toggle_blocks: { add_block_button: "Prázdne prepínanie. Kliknite pre pridanie bloku.", }, + code_block: { + add_source_button_text: "Pridať zdrojový kód", + ok_button_text: "OK", + }, side_menu: { add_block_label: "Pridať blok", drag_handle_label: "Otvoriť menu bloku", @@ -408,6 +412,11 @@ export const sk = { formatting_change_by: (formats: string, users: string) => `Zmena formátovania (${formats}) od: ${users}`, }, + exporter: { + open_file: "Otvoriť súbor", + open_video_file: "Otvoriť video", + open_audio_file: "Otvoriť zvuk", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/uk.ts b/packages/core/src/i18n/locales/uk.ts index 68cbc2af4b..e9d379ac0b 100644 --- a/packages/core/src/i18n/locales/uk.ts +++ b/packages/core/src/i18n/locales/uk.ts @@ -225,6 +225,10 @@ export const uk: Dictionary = { toggle_blocks: { add_block_button: "Порожній перемикач. Натисніть, щоб додати блок.", }, + code_block: { + add_source_button_text: "Додати вихідний код", + ok_button_text: "ОК", + }, // from react package: side_menu: { add_block_label: "Додати блок", @@ -434,6 +438,11 @@ export const uk: Dictionary = { formatting_change_by: (formats: string, users: string) => `Зміна форматування (${formats}) користувачем: ${users}`, }, + exporter: { + open_file: "Відкрити файл", + open_video_file: "Відкрити відео", + open_audio_file: "Відкрити аудіо", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/uz.ts b/packages/core/src/i18n/locales/uz.ts index 618d861654..13aee55a73 100644 --- a/packages/core/src/i18n/locales/uz.ts +++ b/packages/core/src/i18n/locales/uz.ts @@ -262,6 +262,10 @@ export const uz: Dictionary = { add_block_button: "Bo‘sh toggle. Blok qo‘shish uchun bosing.", }, + code_block: { + add_source_button_text: "Manba kodini qoʻshish", + ok_button_text: "OK", + }, side_menu: { add_block_label: "Blok qo‘shish", drag_handle_label: "Blok menyusini ochish", @@ -444,6 +448,11 @@ export const uz: Dictionary = { formatting_change_by: (formats: string, users: string) => `Formatlash o'zgarishi (${formats}), o'zgartirgan: ${users}`, }, + exporter: { + open_file: "Faylni ochish", + open_video_file: "Videoni ochish", + open_audio_file: "Audioni ochish", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/vi.ts b/packages/core/src/i18n/locales/vi.ts index 88ee9794fe..8733fbf0ba 100644 --- a/packages/core/src/i18n/locales/vi.ts +++ b/packages/core/src/i18n/locales/vi.ts @@ -199,6 +199,10 @@ export const vi: Dictionary = { toggle_blocks: { add_block_button: "Toggle trống. Nhấp để thêm khối.", }, + code_block: { + add_source_button_text: "Thêm mã nguồn", + ok_button_text: "OK", + }, // từ gói phản ứng: side_menu: { add_block_label: "Thêm khối", @@ -409,6 +413,11 @@ export const vi: Dictionary = { formatting_change_by: (formats: string, users: string) => `Thay đổi định dạng (${formats}) bởi: ${users}`, }, + exporter: { + open_file: "Mở tệp", + open_video_file: "Mở video", + open_audio_file: "Mở âm thanh", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/zh-tw.ts b/packages/core/src/i18n/locales/zh-tw.ts index 1ed96794e0..5ac37a80c7 100644 --- a/packages/core/src/i18n/locales/zh-tw.ts +++ b/packages/core/src/i18n/locales/zh-tw.ts @@ -241,6 +241,10 @@ export const zhTW: Dictionary = { toggle_blocks: { add_block_button: "空的切換區。點擊新增區塊。", }, + code_block: { + add_source_button_text: "新增原始碼", + ok_button_text: "確定", + }, // from react package: side_menu: { add_block_label: "新增區塊", @@ -451,6 +455,11 @@ export const zhTW: Dictionary = { formatting_change_by: (formats: string, users: string) => `格式變更(${formats}),變更者:${users}`, }, + exporter: { + open_file: "開啟檔案", + open_video_file: "開啟影片", + open_audio_file: "開啟音訊", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/i18n/locales/zh.ts b/packages/core/src/i18n/locales/zh.ts index f5f4a5fb6a..3f4c90bb56 100644 --- a/packages/core/src/i18n/locales/zh.ts +++ b/packages/core/src/i18n/locales/zh.ts @@ -241,6 +241,10 @@ export const zh: Dictionary = { toggle_blocks: { add_block_button: "空的切换区。点击添加区块。", }, + code_block: { + add_source_button_text: "添加源代码", + ok_button_text: "确定", + }, // from react package: side_menu: { add_block_label: "添加块", @@ -451,6 +455,11 @@ export const zh: Dictionary = { formatting_change_by: (formats: string, users: string) => `格式更改(${formats}),更改者:${users}`, }, + exporter: { + open_file: "打开文件", + open_video_file: "打开视频", + open_audio_file: "打开音频", + }, generic: { ctrl_shortcut: "Ctrl", }, diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 8c9b6066b9..b4f220e1e2 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -28,7 +28,10 @@ export * from "./util/string.js"; export * from "./util/table.js"; export * from "./util/typescript.js"; -export type { CodeBlockOptions } from "./blocks/Code/block.js"; +export type { + CodeBlockOptions, + CodeBlockPreview, +} from "./blocks/Code/CodeBlockOptions.js"; export { assertEmpty, UnreachableCaseError } from "./util/typescript.js"; export * from "./util/EventEmitter.js"; diff --git a/packages/core/src/schema/blocks/createSpec.ts b/packages/core/src/schema/blocks/createSpec.ts index 5db7ff48eb..b1e54d640a 100644 --- a/packages/core/src/schema/blocks/createSpec.ts +++ b/packages/core/src/schema/blocks/createSpec.ts @@ -7,12 +7,12 @@ import { } from "@tiptap/pm/model"; import { NodeView } from "@tiptap/pm/view"; import { mergeParagraphs } from "../../blocks/defaultBlockHelpers.js"; -import { ignoreNonContentMutations } from "../nodeViewMutations.js"; import { Extension, ExtensionFactoryInstance, } from "../../editor/BlockNoteExtension.js"; import { nonFormattingMarks } from "../markGroups.js"; +import { ignoreNonContentMutations } from "../nodeViewMutations.js"; import { PropSchema } from "../propTypes.js"; import { getBlockFromNodeView, @@ -286,8 +286,7 @@ export function addNodeAndExtensionsToSpec< // See explanation for why `update` is not implemented for NodeViews // https://github.com/TypeCellOS/BlockNote/pull/1904#discussion_r2313461464 - // TODO: in a future version, we might want to implement updates so that - // vanilla blocks don't always re-render entirely (https://github.com/TypeCellOS/BlockNote/issues/220) + // https://github.com/TypeCellOS/BlockNote/issues/220 return typedNodeView; }; }, diff --git a/packages/core/src/schema/blocks/types.ts b/packages/core/src/schema/blocks/types.ts index 00b564ef0b..8d7e203e61 100644 --- a/packages/core/src/schema/blocks/types.ts +++ b/packages/core/src/schema/blocks/types.ts @@ -1,7 +1,11 @@ /** Define the main block types **/ // import { Extension, Node } from "@tiptap/core"; import type { Node, NodeViewRendererProps } from "@tiptap/core"; -import type { Fragment, Schema } from "prosemirror-model"; +import type { + Fragment, + Node as ProsemirrorNode, + Schema, +} from "prosemirror-model"; import type { ViewMutationRecord } from "prosemirror-view"; import type { BlockNoteEditor } from "../../editor/BlockNoteEditor.js"; import type { @@ -28,7 +32,10 @@ export type BlockNoteDOMAttributes = Partial<{ [DOMElement in BlockNoteDOMElement]: Record; }>; -export interface BlockConfigMeta { +export interface BlockConfigMeta< + TName extends string = string, + TProps extends PropSchema = PropSchema, +> { /** * Defines which keyboard shortcut should be used to insert a hard break into the block's inline content. * @default "shift+enter" @@ -59,6 +66,18 @@ export interface BlockConfigMeta { * Whether the block is a {@link https://prosemirror.net/docs/ref/#model.NodeSpec.isolating} block */ isolating?: boolean; + + /** + * Enables syntax highlighting of the contents of the block with the result of this callback + */ + highlight?(block: { type: TName; props: Props }): string | undefined; + + /** + * Marks the block as rendering a preview with an editable source popup, driven + * by the editor-wide `SourceBlockWithPreviewExtension`. When `true`, the + * block's source is hidden behind its preview and edited via the popup. + */ + hasPreview?: boolean; } /** @@ -209,6 +228,7 @@ export type LooseBlockSpec< dom: HTMLElement | DocumentFragment; contentDOM?: HTMLElement; ignoreMutation?: (mutation: ViewMutationRecord) => boolean; + update?: (node: ProsemirrorNode) => boolean; destroy?: () => void; }; toExternalHTML?: ( @@ -267,6 +287,7 @@ export type BlockSpecs = { dom: HTMLElement | DocumentFragment; contentDOM?: HTMLElement; ignoreMutation?: (mutation: ViewMutationRecord) => boolean; + update?: (node: ProsemirrorNode) => boolean; destroy?: () => void; }; toExternalHTML?: ( @@ -354,6 +375,24 @@ export type PartialPlainContent = | string | (string | (StyledText<{}> & { styles: Record }))[]; +/** + * The text of a block's `"plain"` content (e.g. a code block's source code). + * Accepts the partial form too: block render/export paths can receive + * `PartialBlock`s (e.g. the HTML serializers take them directly), where + * plain content may still be the bare-string sugar. + */ +export function plainContentToString( + content: PlainContent | PartialPlainContent, +): string { + if (typeof content === "string") { + return content; + } + + return content + .map((item) => (typeof item === "string" ? item : item.text)) + .join(""); +} + // A BlockConfig has all the information to get the type of a Block (which is a specific instance of the BlockConfig. // i.e.: paragraphConfig: BlockConfig defines what a "paragraph" is / supports, and BlockFromConfigNoChildren is the shape of a specific paragraph block. // (for internal use) @@ -518,7 +557,7 @@ export type BlockImplementation< /** * Metadata */ - meta?: BlockConfigMeta; + meta?: BlockConfigMeta; /** * A function that converts the block into a DOM element */ @@ -552,6 +591,17 @@ export type BlockImplementation< dom: HTMLElement | DocumentFragment; contentDOM?: HTMLElement; ignoreMutation?: (mutation: ViewMutationRecord) => boolean; + /** + * Called by ProseMirror when this block's node is updated (e.g. its content + * or props change). Return `true` to handle the update in place - keeping + * the existing DOM - or `false` to have the node view recreated via + * `render`. When omitted, ProseMirror keeps the node view and reconciles its + * `contentDOM` in place as long as the node type stays the same. + * + * Useful for blocks whose `render` builds custom DOM that needs to stay in + * sync with the node (e.g. a code block rendering a preview of its content). + */ + update?: (node: ProsemirrorNode) => boolean; destroy?: () => void; }; diff --git a/packages/core/src/schema/contentTypePropagation.test.ts b/packages/core/src/schema/contentTypePropagation.test.ts index a22b129ad6..e17f9209c1 100644 --- a/packages/core/src/schema/contentTypePropagation.test.ts +++ b/packages/core/src/schema/contentTypePropagation.test.ts @@ -24,7 +24,7 @@ import type { StyleSchema } from "./styles/types.js"; * `undefined`. * * The assertions are the type annotations and `@ts-expect-error` directives: if - * propagation breaks, this file stops compiling, which `vp lint` / `tsgo` + * propagation breaks, this file stops compiling, which `vp lint` / `tsc` * catches in CI (note that `vp test`, which strips types via esbuild, does not * — these tests are guarded by the type-checker, not the runner). The `it` * bodies otherwise contain no meaningful runtime logic, mirroring the existing diff --git a/packages/core/src/schema/inlineContent/createSpec.test.ts b/packages/core/src/schema/inlineContent/createSpec.test.ts new file mode 100644 index 0000000000..b0c1ed5639 --- /dev/null +++ b/packages/core/src/schema/inlineContent/createSpec.test.ts @@ -0,0 +1,161 @@ +import { describe, expect, it } from "vite-plus/test"; + +import { BlockNoteSchema } from "../../blocks/BlockNoteSchema.js"; +import { + defaultBlockSpecs, + defaultInlineContentSpecs, +} from "../../blocks/defaultBlocks.js"; +import { BlockNoteEditor } from "../../editor/BlockNoteEditor.js"; +import { YAttributionMarksExtension } from "../../y/extensions/YAttributionMarks.js"; +import { createInlineContentSpec } from "./createSpec.js"; + +// A minimal "plain" inline content, matched from external HTML by a `parse` +// function (the `tag: "*"` parse rule). +const customPlainIC = createInlineContentSpec( + { + type: "customPlainIC", + propSchema: {}, + content: "plain", + }, + { + parse: (el) => (el.classList?.contains("custom-plain-ic") ? {} : undefined), + render: () => { + const dom = document.createElement("span"); + const contentDOM = document.createElement("span"); + dom.append(contentDOM); + return { dom, contentDOM }; + }, + }, +); + +const createEditor = () => + BlockNoteEditor.create({ + schema: BlockNoteSchema.create({ + blockSpecs: defaultBlockSpecs, + inlineContentSpecs: { + ...defaultInlineContentSpecs, + customPlainIC, + }, + }), + }); + +describe("plain inline content", () => { + it("holds its text as a string in the block model", () => { + const editor = createEditor(); + + editor.replaceBlocks(editor.document, [ + { + type: "paragraph", + content: [ + { + type: "customPlainIC", + props: {}, + content: "hello world", + } as any, + ], + }, + ]); + + const inlineContent = (editor.document[0] as any).content[0]; + expect(inlineContent.type).toBe("customPlainIC"); + expect(inlineContent.content).toBe("hello world"); + + editor._tiptapEditor.destroy(); + }); + + it("round-trips a newline in its string content", () => { + const editor = createEditor(); + + // Plain content holds raw text, so newlines are kept as characters rather + // than being split into (disallowed) `hardBreak` nodes. + editor.replaceBlocks(editor.document, [ + { + type: "paragraph", + content: [ + { + type: "customPlainIC", + props: {}, + content: "first\nsecond", + } as any, + ], + }, + ]); + + const inlineContent = (editor.document[0] as any).content[0]; + expect(inlineContent.type).toBe("customPlainIC"); + expect(inlineContent.content).toBe("first\nsecond"); + + editor._tiptapEditor.destroy(); + }); + + it("keeps text and drops formatting marks when parsed", () => { + const editor = createEditor(); + + const blocks = editor.tryParseHTMLToBlocks( + `

hello world

`, + ); + + const inlineContent = (blocks[0] as any).content[0]; + expect(inlineContent.type).toBe("customPlainIC"); + expect(inlineContent.content).toBe("hello world"); + + editor._tiptapEditor.destroy(); + }); + + it("converts line breaks to newline characters when parsed", () => { + const editor = createEditor(); + + const blocks = editor.tryParseHTMLToBlocks( + `

first
second

`, + ); + + const inlineContent = (blocks[0] as any).content[0]; + expect(inlineContent.type).toBe("customPlainIC"); + expect(inlineContent.content).toBe("first\nsecond"); + + editor._tiptapEditor.destroy(); + }); + + it("disallows formatting marks but allows annotation marks", () => { + // Checked at the ProseMirror level because the block model intentionally + // represents plain content as a bare string, without marks. + // + // Every non-formatting mark comes from an optional extension. The Yjs + // attribution marks are the ones reachable from core, so they stand in for + // the `"annotation"` group here; register them so the group is non-empty + // (mirroring the "plain" block test). + const editor = BlockNoteEditor.create({ + schema: BlockNoteSchema.create({ + blockSpecs: defaultBlockSpecs, + inlineContentSpecs: { + ...defaultInlineContentSpecs, + customPlainIC, + }, + }), + extensions: [YAttributionMarksExtension()], + }); + + const plainType = editor.pmSchema.nodes["customPlainIC"]; + const insertMark = editor.pmSchema.marks["y-attributed-insert"]; + const boldMark = editor.pmSchema.marks["bold"]; + + // The plain inline content allows the non-formatting mark but not the + // formatting one. + expect(plainType.allowsMarkType(insertMark)).toBe(true); + expect(plainType.allowsMarkType(boldMark)).toBe(false); + + // ...and so `allowedMarks` keeps the former while dropping the latter. + const markNames = new Set( + plainType + .allowedMarks([ + insertMark.create({ userIds: ["test-user"] }), + boldMark.create(), + ]) + .map((m) => m.type.name), + ); + expect(markNames.has("y-attributed-insert")).toBe(true); + expect(markNames.has("bold")).toBe(false); + + editor._tiptapEditor.destroy(); + }); +}); diff --git a/packages/core/src/schema/inlineContent/createSpec.ts b/packages/core/src/schema/inlineContent/createSpec.ts index 7b6505d245..103dec52a8 100644 --- a/packages/core/src/schema/inlineContent/createSpec.ts +++ b/packages/core/src/schema/inlineContent/createSpec.ts @@ -1,11 +1,18 @@ import { Node } from "@tiptap/core"; -import { TagParseRule } from "@tiptap/pm/model"; +import { + DOMParser, + Fragment, + Node as ProsemirrorNode, + Schema, + TagParseRule, +} from "@tiptap/pm/model"; import { inlineContentToNodes } from "../../api/nodeConversions/blockToNode.js"; import { nodeToCustomInlineContent } from "../../api/nodeConversions/nodeToBlock.js"; import type { BlockNoteEditor } from "../../editor/BlockNoteEditor.js"; import { ignoreNonContentMutations } from "../nodeViewMutations.js"; import { propsToAttributes } from "../blocks/internal.js"; +import { nonFormattingMarks } from "../markGroups.js"; import { Props } from "../propTypes.js"; import { StyleSchema } from "../styles/types.js"; import { @@ -26,6 +33,23 @@ export type CustomInlineContentImplementation< > = { meta?: { draggable?: boolean; + code?: boolean; + /** + * When {@link code} is `true`, this can syntax highlight the contents of the + * inline content with the result of this callback. + */ + // Method syntax (rather than an arrow-function property) so its parameter is + // checked bivariantly, keeping a specific implementation assignable to the + // generic spec record type. + highlight?( + inlineContent: Pick, "type" | "props">, + ): string | undefined; + /** + * Marks the inline content as rendering a preview with an editable source + * popup, driven by the editor-wide + * `SourceInlineContentWithPreviewExtension`. + */ + hasPreview?: boolean; }; /** @@ -33,6 +57,17 @@ export type CustomInlineContentImplementation< */ parse?: (el: HTMLElement) => Partial> | undefined; + /** + * Advanced parsing function that controls how the content within the inline + * content is parsed. This is not recommended to use, and is only useful for + * advanced use cases. Only applies to inline content with `content: "styled"`. + * Return `undefined` to fall through to the default inline content parsing. + */ + parseContent?: (options: { + el: HTMLElement; + schema: Schema; + }) => Fragment | undefined; + /** * Renders an inline content to DOM elements */ @@ -55,6 +90,16 @@ export type CustomInlineContentImplementation< editor: BlockNoteEditor, // (note) if we want to fix the manual cast, we need to prevent circular references and separate block definition and render implementations // or allow manually passing , but that's not possible without passing the other generics because Typescript doesn't support partial inferred generics + /** + * The ProseMirror node backing this inline content. + */ + node: ProsemirrorNode, + /** + * Returns this inline content's position in the document. When rendered + * outside the editor (i.e. serialized to HTML), this is a no-op that returns + * `undefined`. + */ + getPos: () => number | undefined, ) => { dom: HTMLElement; contentDOM?: HTMLElement; @@ -86,22 +131,98 @@ export type CustomInlineContentImplementation< runsBefore?: string[]; }; +// Resolves the element whose children hold the inline content's editable +// content, i.e. the `[data-editable]` element (or the element itself if it is / +// contains none). +function getEditableElement(element: HTMLElement) { + if (element.matches("[data-editable]")) { + return element; + } + + return element.querySelector("[data-editable]") || element; +} + +// Parses an element's children as inline content. +function parseInlineContent(el: HTMLElement, schema: Schema) { + return DOMParser.fromSchema(schema).parse(el, { + topNode: schema.nodes.paragraph.create(), + preserveWhitespace: true, + }).content; +} + +// Flattens parsed inline content into text nodes only. "plain" inline content +// holds text only, so non-text inline nodes are flattened: line breaks become +// newline characters and other nodes (e.g. mentions) are kept as their text. +function flattenToText(content: Fragment, schema: Schema) { + const textNodes: ProsemirrorNode[] = []; + content.forEach((child) => { + if (child.isText) { + textNodes.push(child); + } else { + const text = + child.type === schema.linebreakReplacement ? "\n" : child.textContent; + if (text) { + textNodes.push(schema.text(text, child.marks)); + } + } + }); + + return Fragment.fromArray(textNodes); +} + export function getInlineContentParseRules( config: C, customParseFunction?: CustomInlineContentImplementation["parse"], + customParseContentFunction?: CustomInlineContentImplementation< + C, + any + >["parseContent"], ) { + // When a custom `parseContent` function is provided (and this inline content + // actually holds content), it controls how content within the inline content + // is parsed. This applies to _both_ parse rules below, as content copied from + // within the editor is tagged with `data-inline-content-type` (matched by the + // first rule), while content pasted from outside is matched by the custom + // `parse` function (the second rule). `resolveContentElement` locates the + // element whose children to parse as a fallback when `parseContent` returns + // `undefined`. + // "plain" inline content always needs `getContent` so its parsed content is + // flattened to text (`
`/line breaks become newline characters), regardless + // of whether a custom `parseContent` is provided — mirroring "plain" blocks. + // "styled" inline content only needs it to run a custom `parseContent`. + const getContent = + config.content === "plain" || + (customParseContentFunction && config.content === "styled") + ? (resolveContentElement: (el: HTMLElement) => HTMLElement) => + (node: HTMLElement, schema: Schema) => { + const result = customParseContentFunction?.({ el: node, schema }); + + // `parseContent` may return `undefined` to fall through to the + // default inline content parsing. + if (result !== undefined) { + return config.content === "plain" + ? flattenToText(result, schema) + : result; + } + + const parsed = parseInlineContent( + resolveContentElement(node), + schema, + ); + return config.content === "plain" + ? flattenToText(parsed, schema) + : parsed; + } + : undefined; + const rules: TagParseRule[] = [ { tag: `[data-inline-content-type="${config.type}"]`, - contentElement: (element) => { - const htmlElement = element as HTMLElement; - - if (htmlElement.matches("[data-editable]")) { - return htmlElement; - } - - return htmlElement.querySelector("[data-editable]") || htmlElement; - }, + contentElement: (element) => getEditableElement(element as HTMLElement), + getContent: getContent + ? (node, schema) => + getContent(getEditableElement)(node as HTMLElement, schema) + : undefined, }, ]; @@ -121,6 +242,12 @@ export function getInlineContentParseRules( return props; }, + // Because we do the parsing ourselves, we want to preserve whitespace for + // content we've parsed. + preserveWhitespace: getContent ? true : undefined, + getContent: getContent + ? (node, schema) => getContent((el) => el)(node as HTMLElement, schema) + : undefined, }); } return rules; @@ -138,9 +265,27 @@ export function createInlineContentSpec< inline: true, group: "inline", draggable: inlineContentImplementation.meta?.draggable, - selectable: inlineContentConfig.content === "styled", + selectable: inlineContentConfig.content !== "none", atom: inlineContentConfig.content === "none", - content: inlineContentConfig.content === "styled" ? "inline*" : "", + code: inlineContentImplementation.meta?.code, + content: + inlineContentConfig.content === "styled" + ? "inline*" + : inlineContentConfig.content === "plain" + ? "text*" + : "", + // "plain" inline content holds unstyled text, so it disallows formatting + // marks (mirroring "plain" blocks). It still allows the non-formatting marks + // (comments and suggestions/diffs), which annotate content without changing + // it and are ignored by the content model. `nonFormattingMarks` resolves the + // group only when at least one such mark is registered, so a plain inline + // content in an editor without any of them doesn't reference an empty + // (unknown) mark group. + marks() { + return inlineContentConfig.content === "plain" + ? nonFormattingMarks(this.editor) + : undefined; + }, addAttributes() { return propsToAttributes(inlineContentConfig.propSchema); @@ -154,6 +299,7 @@ export function createInlineContentSpec< return getInlineContentParseRules( inlineContentConfig, inlineContentImplementation.parse, + inlineContentImplementation.parseContent, ); }, @@ -171,6 +317,8 @@ export function createInlineContentSpec< // No-op }, editor, + node, + () => undefined, ); return addInlineContentAttributes( @@ -207,6 +355,8 @@ export function createInlineContentSpec< ); }, editor, + node, + getPos, ); const nodeView = addInlineContentAttributes( @@ -233,10 +383,19 @@ export function createInlineContentSpec< ...inlineContentImplementation, toExternalHTML: inlineContentImplementation.toExternalHTML, render(inlineContent, updateInlineContent, editor) { + // Rendered outside the editor (serialization), so there's no live node + // view - derive the node from the content and stub out `getPos`. + const node = inlineContentToNodes( + [inlineContent] as any, + editor.pmSchema, + )[0]; + const output = inlineContentImplementation.render( inlineContent, updateInlineContent, editor, + node, + () => undefined, ); return addInlineContentAttributes( diff --git a/packages/core/src/schema/inlineContent/internal.ts b/packages/core/src/schema/inlineContent/internal.ts index 799c41e4f1..ab283a674d 100644 --- a/packages/core/src/schema/inlineContent/internal.ts +++ b/packages/core/src/schema/inlineContent/internal.ts @@ -1,5 +1,9 @@ import { KeyboardShortcutCommand, Node } from "@tiptap/core"; +import { + Extension, + ExtensionFactoryInstance, +} from "../../editor/BlockNoteExtension.js"; import { camelToDataKebab } from "../../util/string.js"; import { PropSchema, Props } from "../propTypes.js"; import { @@ -77,10 +81,12 @@ export function createInternalInlineContentSpec< >( config: T, implementation: InlineContentImplementation>, + extensions?: (Extension | ExtensionFactoryInstance)[], ): InlineContentSpec { return { config, implementation, + extensions, } as const; } @@ -99,12 +105,25 @@ export function createInlineContentSpecFromTipTapNode< { type: node.name as T["name"], propSchema, - content: node.config.content === "inline*" ? "styled" : "none", + content: + node.config.content === "inline*" + ? "styled" + : node.config.content === "text*" + ? "plain" + : "none", }, + // Cast needed because `implementation` is typed against the generic + // `CustomInlineContentConfig`, while `createInternalInlineContentSpec` + // expects the implementation for the specific (still-generic) config + // inferred from `node`/`propSchema` above. { ...implementation, node, - }, + } as unknown as InlineContentImplementation<{ + type: T["name"]; + propSchema: P; + content: "styled" | "none" | "plain"; + }>, ); } diff --git a/packages/core/src/schema/inlineContent/types.ts b/packages/core/src/schema/inlineContent/types.ts index e502e05ead..bcc670fe88 100644 --- a/packages/core/src/schema/inlineContent/types.ts +++ b/packages/core/src/schema/inlineContent/types.ts @@ -1,8 +1,12 @@ import { Node } from "@tiptap/core"; import { ViewMutationRecord } from "prosemirror-view"; -import { BlockNoteEditor } from "../../editor/BlockNoteEditor.js"; import { PropSchema, Props } from "../propTypes.js"; import { StyleSchema, Styles } from "../styles/types.js"; +import { BlockNoteEditor } from "../../editor/BlockNoteEditor.js"; +import { + Extension, + ExtensionFactoryInstance, +} from "../../editor/BlockNoteExtension.js"; export type CustomInlineContentConfig = { type: string; @@ -16,11 +20,35 @@ export type InlineContentConfig = CustomInlineContentConfig | "text" | "link"; // InlineContentImplementation contains the "implementation" info about an InlineContent element // such as the functions / Nodes required to render and / or serialize it export type InlineContentImplementation = - T extends "link" | "text" - ? undefined - : { + T extends CustomInlineContentConfig + ? { meta?: { + /** + * Whether the inline content is a {@link https://prosemirror.net/docs/ref/#model.NodeSpec.code} block + */ + code?: boolean; + /** + * When {@link code} is `true`, this can syntax highlight the contents of the block with the result of this callback + */ + // Method syntax (rather than an arrow-function property) so its + // parameter is checked bivariantly, keeping a specific + // implementation assignable to the generic spec record type. + highlight?( + inlineContent: Pick< + CustomInlineContentFromConfig, + "type" | "props" + >, + ): string | undefined; + /** + * Whether the inline content is draggable + */ draggable?: boolean; + /** + * Marks the inline content as rendering a preview with an editable + * source popup, driven by the editor-wide + * `SourceInlineContentWithPreviewExtension`. + */ + hasPreview?: boolean; }; node: Node; toExternalHTML?: ( @@ -43,7 +71,8 @@ export type InlineContentImplementation = destroy?: () => void; }; runsBefore?: string[]; - }; + } + : undefined; export type InlineContentSchemaWithInlineContent< IType extends string, @@ -57,6 +86,7 @@ export type InlineContentSchemaWithInlineContent< export type InlineContentSpec = { config: T; implementation: InlineContentImplementation; + extensions?: (Extension | ExtensionFactoryInstance)[]; }; // A Schema contains all the types (Configs) supported in an editor diff --git a/packages/react/src/blocks/SourceWithPreview/PreviewPlaceholder.tsx b/packages/react/src/blocks/SourceWithPreview/PreviewPlaceholder.tsx new file mode 100644 index 0000000000..7a2c8b1625 --- /dev/null +++ b/packages/react/src/blocks/SourceWithPreview/PreviewPlaceholder.tsx @@ -0,0 +1,31 @@ +import { ReactNode } from "react"; +import { FaCode } from "react-icons/fa"; +import { MdErrorOutline } from "react-icons/md"; + +/** + * Shown in place of the preview when there's nothing to render: the "add + * source" state when the source is empty, or - with `error` - the compact + * error state when the source failed to render (the full error message is + * shown in the source popup while editing). + */ +export const PreviewPlaceholder = (props: { + text: string; + icon?: ReactNode; + error?: boolean; +}) => ( +
+ {/* The icon is decorative next to the text, so hide it from screen + readers - react-icons don't set this themselves (some even carry + `role="img"`, announcing a nameless image). */} + +

{props.text}

+
+); diff --git a/packages/react/src/blocks/SourceWithPreview/SourcePreviewPopup.ts b/packages/react/src/blocks/SourceWithPreview/SourcePreviewPopup.ts new file mode 100644 index 0000000000..7f78539376 --- /dev/null +++ b/packages/react/src/blocks/SourceWithPreview/SourcePreviewPopup.ts @@ -0,0 +1,25 @@ +/** + * State of & actions on the source popup of a block or inline content with a + * preview. Returned by `useSourceBlockPreviewPopup` and + * `useSourceInlineContentPreviewPopup`. + */ +export type SourcePreviewPopup = { + /** + * Whether the source popup is open. + */ + isOpen: boolean; + /** + * Whether the block/inline content is selected, i.e. whether its preview is + * highlighted. + */ + isSelected: boolean; + /** + * Opens the popup, moves the cursor into the source, and focuses the + * editor. Does nothing when the editor isn't editable. + */ + open: () => void; + /** + * Closes the popup. + */ + close: () => void; +}; diff --git a/packages/react/src/blocks/SourceWithPreview/SourceWithPreview.tsx b/packages/react/src/blocks/SourceWithPreview/SourceWithPreview.tsx new file mode 100644 index 0000000000..65be1cfa13 --- /dev/null +++ b/packages/react/src/blocks/SourceWithPreview/SourceWithPreview.tsx @@ -0,0 +1,252 @@ +import { BlockNoteEditor } from "@blocknote/core"; +import { MouseEvent, ReactNode, useId, useRef } from "react"; +import { MdKeyboardReturn } from "react-icons/md"; + +import { PreviewPlaceholder } from "./PreviewPlaceholder.js"; +import { SourcePreviewPopup } from "./SourcePreviewPopup.js"; + +/** + * Props shared by {@link SourceBlockWithPreview} and + * {@link SourceInlineContentWithPreview}. + */ +export type SourceWithPreviewProps = { + /** + * Ref for the element holding the editable source content. + */ + contentRef: (node: HTMLElement | null) => void; + /** + * The source as plain text. When empty, an "add source" button is shown in + * place of the preview. + */ + source: string; + /** + * The rendered preview (e.g. a formula or diagram). When the current source + * has an error, pass the last successfully rendered preview so it stays up + * while the user edits, or `undefined` when there is none - the error state + * is shown in its place. The last-good preview only stays up within the + * editing session that introduced the error: once the popup closes on an + * erroneous source, the error state shows until the source renders + * successfully again. + */ + preview?: ReactNode; + /** + * Error from rendering the preview, shown below the source in the popup. + * Accepts arbitrary elements, so actions (e.g. a button that fixes the + * source) can be rendered alongside the error message. + */ + error?: ReactNode; + /** + * Shown in place of the preview when the source is empty. A string sets + * the text of the default "add source" button, while an element replaces + * the button entirely. Defaults to the editor dictionary's + * `code_block.add_source_button_text`. + */ + emptySourcePlaceholder?: ReactNode; + /** + * Shown in place of the preview when the source has an error, unless + * there's a last-good `preview` and the error hasn't been committed yet + * (the popup hasn't closed since it appeared). A string sets the text of + * the default compact error state, while an element replaces it entirely. + * The full `error` is only shown in the popup while editing. + */ + errorPreview?: ReactNode; + /** + * Placeholder shown in the source input popup while the source is empty + * (e.g. "Enter a LaTeX equation"). + */ + sourcePlaceholder?: string; +}; + +/** + * Renders a preview of source content (e.g. math or diagrams), with the + * editable source in a popup driven by the given popup controller: decides + * what shows in place of the preview (empty state, last-good preview, or + * error state) and opens/closes the popup on clicks. + * `SourceBlockWithPreview` and `SourceInlineContentWithPreview` are thin + * per-kind wrappers around this, obtaining the popup controller from their + * respective hooks. + */ +export const SourceWithPreview = ( + props: SourceWithPreviewProps & { + editor: BlockNoteEditor; + popup: SourcePreviewPopup; + /** + * Renders with `span` wrappers for inline content. + */ + inline?: boolean; + /** + * Whether pressing Enter in the source popup does what the "OK" button + * does (closing the popup). Shows the return-key icon on the "OK" button. + */ + enterSubmits?: boolean; + }, +) => { + const { + editor, + popup, + inline, + enterSubmits = true, + contentRef, + source, + preview, + error, + emptySourcePlaceholder, + errorPreview, + sourcePlaceholder, + } = props; + + // Whether the error has been "committed": shown while the popup was + // closed. The last-good preview only stays up within the editing session + // that introduced the error - once committed, the error state also shows + // when the popup reopens, until the source renders successfully again. + // Updated during render (rather than in an effect) so reopening doesn't + // flash the stale preview for a frame first. + const errorCommittedRef = useRef(false); + if (error == null) { + errorCommittedRef.current = false; + } else if (!popup.isOpen) { + errorCommittedRef.current = true; + } + + // For both placeholder props, a string customizes the default element's + // text while any other element replaces it entirely. + const emptyState = + emptySourcePlaceholder == null || + typeof emptySourcePlaceholder === "string" ? ( + + ) : ( + emptySourcePlaceholder + ); + const errorState = + errorPreview == null || typeof errorPreview === "string" ? ( + + ) : ( + errorPreview + ); + + // Links the source input to the render error so screen readers announce it + // when the input is focused. + const errorId = useId(); + + // What to show in place of the source: the empty state, the preview, or - + // when the source has an error that's committed (or no last-good preview + // to keep showing) - the error state. + const previewContent = + source.length === 0 + ? emptyState + : error != null && (errorCommittedRef.current || preview == null) + ? errorState + : preview; + + // Whether the source is empty and the preview instead shows a button to edit it. + const previewIsButton = + editor.isEditable && + (source.length === 0 || + (error != null && (errorCommittedRef.current || preview == null))); + + // Opens the popup when clicking the preview. + const handlePreviewClick = (event: MouseEvent) => { + if (!editor.isEditable) { + return; + } + + event.stopPropagation(); + + popup.open(); + }; + + // Closes the popup when clicking the "OK" button. + const handleOkButtonClick = (event: MouseEvent) => { + event.stopPropagation(); + + popup.close(); + }; + + // `span` wrappers so inline content stays valid inside a paragraph. + const Wrapper = inline ? "span" : "div"; + const PreviewContainer = inline ? "span" : "div"; + + return ( + + + {previewContent} + +
+
+
+            
+            {inline && source.length === 0 && (
+              
+            )}
+          
+
+ +
+
+ +
+
+ ); +}; diff --git a/packages/react/src/blocks/SourceWithPreview/block/SourceBlockWithPreview.tsx b/packages/react/src/blocks/SourceWithPreview/block/SourceBlockWithPreview.tsx new file mode 100644 index 0000000000..1384b13cda --- /dev/null +++ b/packages/react/src/blocks/SourceWithPreview/block/SourceBlockWithPreview.tsx @@ -0,0 +1,45 @@ +import { ReactCustomBlockRenderProps } from "../../../schema/ReactBlockSpec.js"; +import { + SourceWithPreview, + SourceWithPreviewProps, +} from "../SourceWithPreview.js"; +import { useSourceBlockPreviewPopup } from "./useSourceBlockPreviewPopup.js"; + +export type SourceBlockWithPreviewProps = Pick< + ReactCustomBlockRenderProps, + "block" | "editor" +> & + // `contentRef` comes from the shared props rather than being picked from + // `ReactCustomBlockRenderProps`, as it's conditional on the block's content + // type there, which TypeScript can't resolve for a generic block config. + SourceWithPreviewProps; + +/** + * Renders a block as a preview of its source content, with the editable + * source in a popup. The popup is controlled via + * {@link useSourceBlockPreviewPopup}, so the block's + * `SourceBlockWithPreviewExtension` (from `@blocknote/core`) must be registered + * with the block spec. The caller only provides the preview itself, making this + * the base for custom blocks rendered from source code (math, diagrams, etc). + */ +export const SourceBlockWithPreview = (props: SourceBlockWithPreviewProps) => { + const { block, editor, ...shared } = props; + + const popup = useSourceBlockPreviewPopup({ editor, block }); + + // Mirrors the `SourceBlockWithPreviewExtension` Enter handling: when the + // block uses Enter for hard breaks (multi-line source, e.g. diagrams), + // Enter inserts a newline instead of closing the popup. + const enterSubmits = + editor.schema.blockSpecs[block.type]?.implementation?.meta + ?.hardBreakShortcut !== "enter"; + + return ( + + ); +}; diff --git a/packages/react/src/blocks/SourceWithPreview/block/useSourceBlockPreviewPopup.ts b/packages/react/src/blocks/SourceWithPreview/block/useSourceBlockPreviewPopup.ts new file mode 100644 index 0000000000..f7e83df201 --- /dev/null +++ b/packages/react/src/blocks/SourceWithPreview/block/useSourceBlockPreviewPopup.ts @@ -0,0 +1,57 @@ +import { + BlockNoteEditor, + SourceBlockWithPreviewExtension, +} from "@blocknote/core"; + +import { + useExtension, + useExtensionState, +} from "../../../hooks/useExtension.js"; +import type { SourcePreviewPopup } from "../SourcePreviewPopup.js"; + +/** + * Controls the source popup of a block with a preview, e.g. to open it from a + * custom preview element. A block's popup is toggled explicitly - `open` and + * `close` set a flag, separate from the selection. The popup state itself is + * managed by the `SourceBlockWithPreviewExtension` registered with the block + * spec (so it survives node view re-creation and stays in sync with the + * keyboard handling) - this hook is the React API to it. + */ +export const useSourceBlockPreviewPopup = (props: { + editor: BlockNoteEditor; + block: { id: string }; +}): SourcePreviewPopup => { + const { editor, block } = props; + + const { store } = useExtension(SourceBlockWithPreviewExtension, { editor }); + + const isOpen = useExtensionState(SourceBlockWithPreviewExtension, { + editor, + selector: (state) => state.popupOpen === block.id, + }); + const isSelected = useExtensionState(SourceBlockWithPreviewExtension, { + editor, + selector: (state) => state.selected === block.id, + }); + + // Opens the popup with the cursor at the end of the source. + const open = () => { + if (!editor.isEditable) { + return; + } + + store.setState((state) => ({ ...state, popupOpen: block.id })); + editor.setTextCursorPosition(block.id, "end"); + editor.focus(); + }; + + const close = () => { + store.setState((state) => ({ ...state, popupOpen: undefined })); + // Restores focus in case closing was triggered by clicking the "OK" + // button, which moves focus to it - otherwise keyboard interactions (e.g. + // Enter to re-open the popup) stop reaching the editor. + editor.focus(); + }; + + return { isOpen, isSelected, open, close }; +}; diff --git a/packages/react/src/blocks/SourceWithPreview/inlineContent/SourceInlineContentWithPreview.tsx b/packages/react/src/blocks/SourceWithPreview/inlineContent/SourceInlineContentWithPreview.tsx new file mode 100644 index 0000000000..60a3970758 --- /dev/null +++ b/packages/react/src/blocks/SourceWithPreview/inlineContent/SourceInlineContentWithPreview.tsx @@ -0,0 +1,34 @@ +import { ReactCustomInlineContentRenderProps } from "../../../schema/ReactInlineContentSpec.js"; +import { + SourceWithPreview, + SourceWithPreviewProps, +} from "../SourceWithPreview.js"; +import { useSourceInlineContentPreviewPopup } from "./useSourceInlineContentPreviewPopup.js"; + +export type SourceInlineContentWithPreviewProps = Pick< + ReactCustomInlineContentRenderProps, + "editor" | "node" | "getPos" +> & + SourceWithPreviewProps; + +/** + * Renders inline content as a preview of its source, with the editable source + * in a popup - the inline counterpart of `SourceBlockWithPreview`. The popup + * is controlled via {@link useSourceInlineContentPreviewPopup}, so the inline + * content's `SourceInlineContentWithPreviewExtension` must be registered with + * the inline content spec. Unlike blocks, the popup is open exactly while the + * selection is inside the inline content's source, which is the same + * condition that marks it as selected. + */ +export const SourceInlineContentWithPreview = ( + props: SourceInlineContentWithPreviewProps, +) => { + const { editor, node, getPos, ...shared } = props; + + const popup = useSourceInlineContentPreviewPopup({ editor, node, getPos }); + + // Enter always commits-and-exits inline sources (see + // `SourceInlineContentWithPreviewExtension`), so the default `enterSubmits` + // applies and the "OK" button always shows the return-key icon. + return ; +}; diff --git a/packages/react/src/blocks/SourceWithPreview/inlineContent/useSourceInlineContentPreviewPopup.ts b/packages/react/src/blocks/SourceWithPreview/inlineContent/useSourceInlineContentPreviewPopup.ts new file mode 100644 index 0000000000..30cc81b7a1 --- /dev/null +++ b/packages/react/src/blocks/SourceWithPreview/inlineContent/useSourceInlineContentPreviewPopup.ts @@ -0,0 +1,94 @@ +import { + BlockNoteEditor, + SourceInlineContentWithPreviewExtension, +} from "@blocknote/core"; +import { TextSelection } from "@tiptap/pm/state"; + +import { + useExtension, + useExtensionState, +} from "../../../hooks/useExtension.js"; +import type { SourcePreviewPopup } from "../SourcePreviewPopup.js"; + +/** + * Controls the source popup of inline content with a preview, e.g. to open it + * from a custom preview element. Unlike a block's, the popup is open exactly + * while the selection is inside the inline content's source - so `isOpen` and + * `isSelected` always agree, and `open`/`close` work by moving the selection + * into/out of the source. The popup state itself is managed by the + * `SourceInlineContentWithPreviewExtension` registered with the inline + * content spec (so it survives node view re-creation and stays in sync with + * the keyboard handling) - this hook is the React API to it. + */ +export const useSourceInlineContentPreviewPopup = (props: { + editor: BlockNoteEditor; + node: { nodeSize: number }; + getPos: () => number | undefined; +}): SourcePreviewPopup => { + const { editor, node, getPos } = props; + + const { store } = useExtension(SourceInlineContentWithPreviewExtension, { + editor, + }); + + // `getPos` is called fresh in the selector and actions rather than captured + // once per render, as the inline content's position can shift without its + // node view re-rendering. The `undefined` guard matters when rendered + // outside the editor (i.e. serialized to HTML): there `getPos()` returns + // `undefined`, which must not match the store's initial `undefined` state. + const isSelected = useExtensionState( + SourceInlineContentWithPreviewExtension, + { + editor, + selector: (state) => + state.selected !== undefined && state.selected === getPos(), + }, + ); + + // Opens the popup by moving the selection to the end of the source. + const open = () => { + if (!editor.isEditable) { + return; + } + + const pos = getPos(); + if (!pos) { + return; + } + + store.setState({ selected: pos }); + + const view = editor.prosemirrorView!; + view.dispatch( + view.state.tr.setSelection( + TextSelection.create(view.state.tr.doc, pos + node.nodeSize - 1), + ), + ); + editor.focus(); + }; + + // Closes the popup by moving the selection to just after the inline + // content. + const close = () => { + if (!editor.isEditable) { + return; + } + + const pos = getPos(); + if (!pos) { + return; + } + + const view = editor.prosemirrorView!; + view.dispatch( + view.state.tr.setSelection( + TextSelection.create(view.state.tr.doc, pos + node.nodeSize), + ), + ); + editor.focus(); + }; + + // The popup is open exactly when the selection is inside the source, which + // is the same condition that marks it as selected. + return { isOpen: isSelected, isSelected, open, close }; +}; diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts index 2de5361e99..0553f8a30d 100644 --- a/packages/react/src/index.ts +++ b/packages/react/src/index.ts @@ -16,6 +16,13 @@ export * from "./blocks/File/helpers/toExternalHTML/LinkWithCaption.js"; export * from "./blocks/File/useResolveUrl.js"; export * from "./blocks/Image/block.js"; export * from "./blocks/PageBreak/getPageBreakReactSlashMenuItems.js"; +export * from "./blocks/SourceWithPreview/PreviewPlaceholder.js"; +export * from "./blocks/SourceWithPreview/SourceWithPreview.js"; +export * from "./blocks/SourceWithPreview/SourcePreviewPopup.js"; +export * from "./blocks/SourceWithPreview/block/SourceBlockWithPreview.js"; +export * from "./blocks/SourceWithPreview/block/useSourceBlockPreviewPopup.js"; +export * from "./blocks/SourceWithPreview/inlineContent/SourceInlineContentWithPreview.js"; +export * from "./blocks/SourceWithPreview/inlineContent/useSourceInlineContentPreviewPopup.js"; export * from "./blocks/Video/block.js"; export * from "./blocks/ToggleWrapper/ToggleWrapper.js"; diff --git a/packages/react/src/schema/ReactBlockSpec.tsx b/packages/react/src/schema/ReactBlockSpec.tsx index 4bd1649292..5311d4e37d 100644 --- a/packages/react/src/schema/ReactBlockSpec.tsx +++ b/packages/react/src/schema/ReactBlockSpec.tsx @@ -33,7 +33,7 @@ export type ReactCustomBlockRenderProps< > = { block: BlockNoDefaults, any, any>; editor: BlockNoteEditor, any, any>; -} & (Config["content"] extends "inline" +} & (Config["content"] extends "inline" | "plain" ? { contentRef: (node: HTMLElement | null) => void; } @@ -63,11 +63,8 @@ export type ReactCustomBlockImplementation< }; export type ReactCustomBlockSpec< - B extends BlockConfig = BlockConfig< - string, - PropSchema, - "inline" | "none" - >, + B extends BlockConfig = + BlockConfig, > = { config: B; implementation: ReactCustomBlockImplementation; @@ -133,7 +130,7 @@ export function BlockContentWrapper< export function createReactBlockSpec< const TName extends string, const TProps extends PropSchema, - const TContent extends "inline" | "none", + const TContent extends "inline" | "none" | "plain", const TOptions extends Record | undefined = undefined, >( blockConfigOrCreator: BlockConfig, @@ -159,7 +156,7 @@ export function createReactBlockSpec< export function createReactBlockSpec< const TName extends string, const TProps extends PropSchema, - const TContent extends "inline" | "none", + const TContent extends "inline" | "none" | "plain", const BlockConf extends BlockConfig, const TOptions extends Partial>, >( @@ -188,7 +185,7 @@ export function createReactBlockSpec< export function createReactBlockSpec< const TName extends string, const TProps extends PropSchema, - const TContent extends "inline" | "none", + const TContent extends "inline" | "none" | "plain", const TOptions extends Record | undefined = undefined, >( blockConfigOrCreator: BlockConfigOrCreator, diff --git a/packages/react/src/schema/ReactInlineContentSpec.tsx b/packages/react/src/schema/ReactInlineContentSpec.tsx index 84df6cefb7..9674a83b81 100644 --- a/packages/react/src/schema/ReactInlineContentSpec.tsx +++ b/packages/react/src/schema/ReactInlineContentSpec.tsx @@ -6,12 +6,15 @@ import { createInternalInlineContentSpec, CustomInlineContentConfig, CustomInlineContentImplementation, + Extension, + ExtensionFactoryInstance, getInlineContentParseRules, InlineContentFromConfig, InlineContentSchemaWithInlineContent, InlineContentSpec, inlineContentToNodes, nodeToCustomInlineContent, + nonFormattingMarks, PartialCustomInlineContentFromConfig, Props, PropSchema, @@ -44,6 +47,16 @@ export type ReactCustomInlineContentRenderProps< S >; contentRef: (node: HTMLElement | null) => void; + /** + * The ProseMirror node backing this inline content. + */ + node: NodeViewProps["node"]; + /** + * Returns this inline content's position in the document. When rendered + * outside the editor (i.e. serialized to HTML) this is a no-op that returns + * `undefined`. + */ + getPos: NodeViewProps["getPos"]; }; // extend BlockConfig but use a React render function @@ -101,10 +114,13 @@ export function InlineContentWrapper< * rendering. * * @param inlineContentConfig - The inline content type configuration, including - * its `type` name, `propSchema`, and `content` mode (`"styled"` or `"none"`). + * its `type` name, `propSchema`, and `content` mode (`"styled"`, `"plain"`, or + * `"none"`). * @param inlineContentImplementation - The React implementation, including a * `render` component and optionally a `toExternalHTML` component and `parse` * rules. + * @param extensions - Optional editor extensions registered alongside this + * inline content (e.g. for keyboard handling), mirroring block specs. * @returns An `InlineContentSpec` that can be passed to the editor's schema. */ export function createReactInlineContentSpec< @@ -114,17 +130,33 @@ export function createReactInlineContentSpec< >( inlineContentConfig: T, inlineContentImplementation: ReactInlineContentImplementation, + extensions?: (Extension | ExtensionFactoryInstance)[], ): InlineContentSpec { const node = Node.create({ name: inlineContentConfig.type as T["type"], inline: true, group: "inline", - selectable: inlineContentConfig.content === "styled", + selectable: inlineContentConfig.content !== "none", atom: inlineContentConfig.content === "none", draggable: inlineContentImplementation.meta?.draggable, + code: inlineContentImplementation.meta?.code, content: (inlineContentConfig.content === "styled" ? "inline*" - : "") as T["content"] extends "styled" ? "inline*" : "", + : inlineContentConfig.content === "plain" + ? "text*" + : "") as T["content"] extends "styled" ? "inline*" : "", + // "plain" inline content holds unstyled text, so it disallows formatting + // marks (mirroring "plain" blocks). It still allows the non-formatting marks + // (comments and suggestions/diffs), which annotate content without changing + // it and are ignored by the content model. `nonFormattingMarks` resolves the + // group only when at least one such mark is registered, so a plain inline + // content in an editor without any of them doesn't reference an empty + // (unknown) mark group. + marks() { + return inlineContentConfig.content === "plain" + ? nonFormattingMarks(this.editor) + : undefined; + }, addAttributes() { return propsToAttributes(inlineContentConfig.propSchema); @@ -138,6 +170,7 @@ export function createReactInlineContentSpec< return getInlineContentParseRules( inlineContentConfig, inlineContentImplementation.parse, + inlineContentImplementation.parseContent, ); }, @@ -166,6 +199,8 @@ export function createReactInlineContentSpec< // No-op }} editor={editor} + node={node} + getPos={() => undefined} /> ), editor, @@ -205,6 +240,8 @@ export function createReactInlineContentSpec< } }} editor={editor} + node={props.node} + getPos={props.getPos} inlineContent={ nodeToCustomInlineContent( props.node, @@ -248,6 +285,12 @@ export function createReactInlineContentSpec< node, render(inlineContent, updateInlineContent, editor) { const Content = inlineContentImplementation.render; + // Rendered outside the editor (serialization), so there's no live node + // view - derive the node from the content and stub out `getPos`. + const node = inlineContentToNodes( + [inlineContent] as any, + editor.pmSchema, + )[0]; const output = renderToDOMSpec((ref) => { return ( undefined} /> ); @@ -275,6 +320,12 @@ export function createReactInlineContentSpec< const Content = inlineContentImplementation.toExternalHTML || inlineContentImplementation.render; + // Rendered outside the editor (serialization), so there's no live node + // view - derive the node from the content and stub out `getPos`. + const node = inlineContentToNodes( + [inlineContent] as any, + editor.pmSchema, + )[0]; const output = renderToDOMSpec((ref) => { return ( { // no-op }} + node={node} + getPos={() => undefined} /> ); @@ -301,5 +354,6 @@ export function createReactInlineContentSpec< return output; }, }, + extensions, ) as any; } diff --git a/packages/xl-docx-exporter/src/docx/defaultSchema/blocks.ts b/packages/xl-docx-exporter/src/docx/defaultSchema/blocks.ts index 77c360b668..87e5c3a5ea 100644 --- a/packages/xl-docx-exporter/src/docx/defaultSchema/blocks.ts +++ b/packages/xl-docx-exporter/src/docx/defaultSchema/blocks.ts @@ -1,9 +1,11 @@ import { + BlockFromConfigNoChildren, BlockMapping, COLORS_DEFAULT, createPageBreakBlockConfig, DefaultBlockSchema, DefaultProps, + PlainContent, UnreachableCaseError, } from "@blocknote/core"; import { multiColumnSchema } from "@blocknote/xl-multi-column"; @@ -24,6 +26,10 @@ import { } from "docx"; import { Table } from "../util/Table.js"; +type BSchema = DefaultBlockSchema & { + pageBreak: ReturnType; +} & typeof multiColumnSchema.blockSchema; + function blockPropsToStyles( props: Partial, colors: typeof COLORS_DEFAULT, @@ -68,10 +74,32 @@ function blockPropsToStyles( })(), }; } + +const codeMapping = ( + block: BlockFromConfigNoChildren, +) => { + // Code blocks hold plain content: at most a single unstyled text item. + const [textItem, ...excessItems] = block.content as PlainContent; + if (excessItems.length > 0 || (textItem && !("text" in textItem))) { + throw new Error("expected plain block content to be a single text item"); + } + const textContent = textItem?.text ?? ""; + + return new Paragraph({ + style: "SourceCode", + children: [ + ...textContent.split("\n").map((line, index) => { + return new TextRun({ + text: line, + break: index > 0 ? 1 : 0, + }); + }), + ], + }); +}; + export const docxBlockMappingForDefaultSchema: BlockMapping< - DefaultBlockSchema & { - pageBreak: ReturnType; - } & typeof multiColumnSchema.blockSchema, + BSchema, any, any, | Promise @@ -145,42 +173,23 @@ export const docxBlockMappingForDefaultSchema: BlockMapping< }, audio: (block, exporter) => { return [ - file(block.props, "Open audio", exporter), + file(block.props, exporter.dictionary.open_audio_file, exporter), ...caption(block.props, exporter), ]; }, video: (block, exporter) => { return [ - file(block.props, "Open video", exporter), + file(block.props, exporter.dictionary.open_video_file, exporter), ...caption(block.props, exporter), ]; }, file: (block, exporter) => { return [ - file(block.props, "Open file", exporter), + file(block.props, exporter.dictionary.open_file, exporter), ...caption(block.props, exporter), ]; }, - codeBlock: (block) => { - // Code blocks hold plain content: at most a single unstyled text item. - const [textItem, ...excessItems] = block.content; - if (excessItems.length > 0 || (textItem && !("text" in textItem))) { - throw new Error("expected plain block content to be a single text item"); - } - const textContent = textItem?.text ?? ""; - - return new Paragraph({ - style: "SourceCode", - children: [ - ...textContent.split("\n").map((line, index) => { - return new TextRun({ - text: line, - break: index > 0 ? 1 : 0, - }); - }), - ], - }); - }, + codeBlock: codeMapping, pageBreak: () => { return new Paragraph({ children: [new PageBreak()], diff --git a/packages/xl-docx-exporter/src/docx/defaultSchema/inlinecontent.ts b/packages/xl-docx-exporter/src/docx/defaultSchema/inlinecontent.ts index 5d8b0f442d..aa783b12d8 100644 --- a/packages/xl-docx-exporter/src/docx/defaultSchema/inlinecontent.ts +++ b/packages/xl-docx-exporter/src/docx/defaultSchema/inlinecontent.ts @@ -6,8 +6,10 @@ import { import { ExternalHyperlink, ParagraphChild, TextRun } from "docx"; import type { DOCXExporter } from "../docxExporter.js"; +type ICSchema = DefaultInlineContentSchema; + export const docxInlineContentMappingForDefaultSchema: InlineContentMapping< - DefaultInlineContentSchema, + ICSchema, DefaultStyleSchema, ParagraphChild, TextRun diff --git a/packages/xl-docx-exporter/src/docx/docxExporter.test.ts b/packages/xl-docx-exporter/src/docx/docxExporter.test.ts index a24340a7ab..53722a4988 100644 --- a/packages/xl-docx-exporter/src/docx/docxExporter.test.ts +++ b/packages/xl-docx-exporter/src/docx/docxExporter.test.ts @@ -3,6 +3,7 @@ import { defaultBlockSpecs, createPageBreakBlockSpec, } from "@blocknote/core"; +import { de } from "@blocknote/core/locales"; import { testDocument } from "@shared/testDocument.js"; import { BlobReader, @@ -59,8 +60,6 @@ describe("exporter", () => { await expect( prettify(await getZIPEntryContent(entries, "word/styles.xml")), ).toMatchFileSnapshot("__snapshots__/basic/styles.xml"); - - // fs.writeFileSync(__dirname + "/My Document.docx", buffer); }); it( @@ -107,8 +106,6 @@ describe("exporter", () => { const blob = await Packer.toBlob(doc); - // fs.writeFileSync(__dirname + "/My Document.docx", buffer); - const zip = new ZipReader(new BlobReader(blob)); const entries = await zip.getEntries(); @@ -245,6 +242,40 @@ describe("exporter", () => { return zip.getEntries(); } + it( + "should export file links with the configured dictionary", + { timeout: 10000 }, + async () => { + // Exporter strings are never hardcoded - the file link text comes + // from the `exporter` section of the configured dictionary (English + // when not configured). + const exporter = new DOCXExporter( + BlockNoteSchema.create({ + blockSpecs: { + ...defaultBlockSpecs, + pageBreak: createPageBreakBlockSpec(), + }, + }), + docxDefaultSchemaMappings, + { resolveFileUrl: testResolveFileUrl, dictionary: de }, + ); + const doc = await exporter.toDocxJsDocument(testDocument, { + sectionOptions: {}, + documentOptions: {}, + locale: "de-DE", + }); + + const zip = new ZipReader(new BlobReader(await Packer.toBlob(doc))); + const documentXML = await getZIPEntryContent( + await zip.getEntries(), + "word/document.xml", + ); + + expect(documentXML).toContain("Datei öffnen"); + expect(documentXML).not.toContain("Open file"); + }, + ); + it( "should export a document without w:lang when no locale is provided", { timeout: 10000 }, diff --git a/packages/xl-email-exporter/src/react-email/__snapshots__/reactEmailExporter.test.tsx.snap b/packages/xl-email-exporter/src/react-email/__snapshots__/reactEmailExporter.test.tsx.snap index aa26f51f26..8c8fdbd507 100644 --- a/packages/xl-email-exporter/src/react-email/__snapshots__/reactEmailExporter.test.tsx.snap +++ b/packages/xl-email-exporter/src/react-email/__snapshots__/reactEmailExporter.test.tsx.snap @@ -1,10 +1,10 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`react email exporter > should export a document (HTML snapshot) > __snapshots__/reactEmailExporter 1`] = `"

Welcome to this demo 🙌!

Hello World nested

Hello World double nested

This paragraph has a background color

Paragraph

Heading

Heading right

justified paragraph. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.


  • Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    • Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    • Bullet List Item right. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    1. Numbered List Item 1

    2. Numbered List Item 2

      1. Numbered List Item Nested 1

      2. Numbered List Item Nested 2

      3. Numbered List Item Nested funky right

      4. Numbered List Item Nested funky center

  1. Numbered List Item

Check List Item

Wide CellTable CellTable Cell
Wide CellTable CellTable Cell
Wide CellTable CellTable Cell
From https://placehold.co/332x322.jpg
Open video file

From https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm

Open audio file

From https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3

audio.mp3

Audio file caption

Inline Content:

Styled Text Link

Table Cell 1Table Cell 2Table Cell 3
Table Cell 4Table Cell Bold 5Table Cell 6
Table Cell 7Table Cell 8Table Cell 9
const ‍​helloWorld ‍​= ‍​(message) ‍​=> ‍​{
 ‍​ ‍​console.log("Hello World", ‍​message);
};

Some inline code: var foo = 'bar';


All those moments will be lost in time, like tears in rain.

"`; +exports[`react email exporter > should export a document (HTML snapshot) > __snapshots__/reactEmailExporter 1`] = `"

Welcome to this demo 🙌!

Hello World nested

Hello World double nested

This paragraph has a background color

Paragraph

Heading

Heading right

justified paragraph. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.


  • Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    • Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    • Bullet List Item right. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    1. Numbered List Item 1

    2. Numbered List Item 2

      1. Numbered List Item Nested 1

      2. Numbered List Item Nested 2

      3. Numbered List Item Nested funky right

      4. Numbered List Item Nested funky center

  1. Numbered List Item

Check List Item

Wide CellTable CellTable Cell
Wide CellTable CellTable Cell
Wide CellTable CellTable Cell
From https://placehold.co/332x322.jpg
Open video

From https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm

Open audio

From https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3

audio.mp3

Audio file caption

Inline Content:

Styled Text Link

Table Cell 1Table Cell 2Table Cell 3
Table Cell 4Table Cell Bold 5Table Cell 6
Table Cell 7Table Cell 8Table Cell 9
const ‍​helloWorld ‍​= ‍​(message) ‍​=> ‍​{
 ‍​ ‍​console.log("Hello World", ‍​message);
};

Some inline code: var foo = 'bar';


All those moments will be lost in time, like tears in rain.

"`; -exports[`react email exporter > should export a document with multiple preview lines > __snapshots__/reactEmailExporterWithMultiplePreview 1`] = `"
First preview lineSecond preview line
 ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏

Welcome to this demo 🙌!

Hello World nested

Hello World double nested

This paragraph has a background color

Paragraph

Heading

Heading right

justified paragraph. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.


  • Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    • Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    • Bullet List Item right. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    1. Numbered List Item 1

    2. Numbered List Item 2

      1. Numbered List Item Nested 1

      2. Numbered List Item Nested 2

      3. Numbered List Item Nested funky right

      4. Numbered List Item Nested funky center

  1. Numbered List Item

Check List Item

Wide CellTable CellTable Cell
Wide CellTable CellTable Cell
Wide CellTable CellTable Cell
From https://placehold.co/332x322.jpg
Open video file

From https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm

Open audio file

From https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3

audio.mp3

Audio file caption

Inline Content:

Styled Text Link

Table Cell 1Table Cell 2Table Cell 3
Table Cell 4Table Cell Bold 5Table Cell 6
Table Cell 7Table Cell 8Table Cell 9
const ‍​helloWorld ‍​= ‍​(message) ‍​=> ‍​{
 ‍​ ‍​console.log("Hello World", ‍​message);
};

Some inline code: var foo = 'bar';


All those moments will be lost in time, like tears in rain.

"`; +exports[`react email exporter > should export a document with multiple preview lines > __snapshots__/reactEmailExporterWithMultiplePreview 1`] = `"
First preview lineSecond preview line
 ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏

Welcome to this demo 🙌!

Hello World nested

Hello World double nested

This paragraph has a background color

Paragraph

Heading

Heading right

justified paragraph. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.


  • Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    • Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    • Bullet List Item right. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    1. Numbered List Item 1

    2. Numbered List Item 2

      1. Numbered List Item Nested 1

      2. Numbered List Item Nested 2

      3. Numbered List Item Nested funky right

      4. Numbered List Item Nested funky center

  1. Numbered List Item

Check List Item

Wide CellTable CellTable Cell
Wide CellTable CellTable Cell
Wide CellTable CellTable Cell
From https://placehold.co/332x322.jpg
Open video

From https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm

Open audio

From https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3

audio.mp3

Audio file caption

Inline Content:

Styled Text Link

Table Cell 1Table Cell 2Table Cell 3
Table Cell 4Table Cell Bold 5Table Cell 6
Table Cell 7Table Cell 8Table Cell 9
const ‍​helloWorld ‍​= ‍​(message) ‍​=> ‍​{
 ‍​ ‍​console.log("Hello World", ‍​message);
};

Some inline code: var foo = 'bar';


All those moments will be lost in time, like tears in rain.

"`; -exports[`react email exporter > should export a document with preview > __snapshots__/reactEmailExporterWithPreview 1`] = `"
This is a preview of the email content
 ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏

Welcome to this demo 🙌!

Hello World nested

Hello World double nested

This paragraph has a background color

Paragraph

Heading

Heading right

justified paragraph. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.


  • Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    • Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    • Bullet List Item right. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    1. Numbered List Item 1

    2. Numbered List Item 2

      1. Numbered List Item Nested 1

      2. Numbered List Item Nested 2

      3. Numbered List Item Nested funky right

      4. Numbered List Item Nested funky center

  1. Numbered List Item

Check List Item

Wide CellTable CellTable Cell
Wide CellTable CellTable Cell
Wide CellTable CellTable Cell
From https://placehold.co/332x322.jpg
Open video file

From https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm

Open audio file

From https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3

audio.mp3

Audio file caption

Inline Content:

Styled Text Link

Table Cell 1Table Cell 2Table Cell 3
Table Cell 4Table Cell Bold 5Table Cell 6
Table Cell 7Table Cell 8Table Cell 9
const ‍​helloWorld ‍​= ‍​(message) ‍​=> ‍​{
 ‍​ ‍​console.log("Hello World", ‍​message);
};

Some inline code: var foo = 'bar';


All those moments will be lost in time, like tears in rain.

"`; +exports[`react email exporter > should export a document with preview > __snapshots__/reactEmailExporterWithPreview 1`] = `"
This is a preview of the email content
 ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏

Welcome to this demo 🙌!

Hello World nested

Hello World double nested

This paragraph has a background color

Paragraph

Heading

Heading right

justified paragraph. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.


  • Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    • Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    • Bullet List Item right. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    1. Numbered List Item 1

    2. Numbered List Item 2

      1. Numbered List Item Nested 1

      2. Numbered List Item Nested 2

      3. Numbered List Item Nested funky right

      4. Numbered List Item Nested funky center

  1. Numbered List Item

Check List Item

Wide CellTable CellTable Cell
Wide CellTable CellTable Cell
Wide CellTable CellTable Cell
From https://placehold.co/332x322.jpg
Open video

From https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm

Open audio

From https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3

audio.mp3

Audio file caption

Inline Content:

Styled Text Link

Table Cell 1Table Cell 2Table Cell 3
Table Cell 4Table Cell Bold 5Table Cell 6
Table Cell 7Table Cell 8Table Cell 9
const ‍​helloWorld ‍​= ‍​(message) ‍​=> ‍​{
 ‍​ ‍​console.log("Hello World", ‍​message);
};

Some inline code: var foo = 'bar';


All those moments will be lost in time, like tears in rain.

"`; exports[`react email exporter > should handle document with background colors > __snapshots__/reactEmailExporterBackgroundColor 1`] = `"

Text with background color

"`; @@ -14,7 +14,7 @@ exports[`react email exporter > should handle document with code blocks > __snap exports[`react email exporter > should handle document with complex nested structure > __snapshots__/reactEmailExporterComplexNested 1`] = `"

Complex Document

This is a paragraph with bold and italic text, plus a link.

  • List item with nested content

    Nested paragraph

    1. Nested numbered item

"`; -exports[`react email exporter > should handle document with custom body styles > __snapshots__/reactEmailExporterCustomBodyStyles 1`] = `"

Welcome to this demo 🙌!

Hello World nested

Hello World double nested

This paragraph has a background color

Paragraph

Heading

Heading right

justified paragraph. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.


  • Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    • Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    • Bullet List Item right. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    1. Numbered List Item 1

    2. Numbered List Item 2

      1. Numbered List Item Nested 1

      2. Numbered List Item Nested 2

      3. Numbered List Item Nested funky right

      4. Numbered List Item Nested funky center

  1. Numbered List Item

Check List Item

Wide CellTable CellTable Cell
Wide CellTable CellTable Cell
Wide CellTable CellTable Cell
From https://placehold.co/332x322.jpg
Open video file

From https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm

Open audio file

From https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3

audio.mp3

Audio file caption

Inline Content:

Styled Text Link

Table Cell 1Table Cell 2Table Cell 3
Table Cell 4Table Cell Bold 5Table Cell 6
Table Cell 7Table Cell 8Table Cell 9
const ‍​helloWorld ‍​= ‍​(message) ‍​=> ‍​{
 ‍​ ‍​console.log("Hello World", ‍​message);
};

Some inline code: var foo = 'bar';


All those moments will be lost in time, like tears in rain.

"`; +exports[`react email exporter > should handle document with custom body styles > __snapshots__/reactEmailExporterCustomBodyStyles 1`] = `"

Welcome to this demo 🙌!

Hello World nested

Hello World double nested

This paragraph has a background color

Paragraph

Heading

Heading right

justified paragraph. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.


  • Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    • Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    • Bullet List Item right. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

    1. Numbered List Item 1

    2. Numbered List Item 2

      1. Numbered List Item Nested 1

      2. Numbered List Item Nested 2

      3. Numbered List Item Nested funky right

      4. Numbered List Item Nested funky center

  1. Numbered List Item

Check List Item

Wide CellTable CellTable Cell
Wide CellTable CellTable Cell
Wide CellTable CellTable Cell
From https://placehold.co/332x322.jpg
Open video

From https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm

Open audio

From https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3

audio.mp3

Audio file caption

Inline Content:

Styled Text Link

Table Cell 1Table Cell 2Table Cell 3
Table Cell 4Table Cell Bold 5Table Cell 6
Table Cell 7Table Cell 8Table Cell 9
const ‍​helloWorld ‍​= ‍​(message) ‍​=> ‍​{
 ‍​ ‍​console.log("Hello World", ‍​message);
};

Some inline code: var foo = 'bar';


All those moments will be lost in time, like tears in rain.

"`; exports[`react email exporter > should handle document with headings of different levels > __snapshots__/reactEmailExporterHeadings 1`] = `"

Heading 1

Heading 2

Heading 3

"`; diff --git a/packages/xl-email-exporter/src/react-email/defaultSchema/blocks.tsx b/packages/xl-email-exporter/src/react-email/defaultSchema/blocks.tsx index f617736b6d..854fec4392 100644 --- a/packages/xl-email-exporter/src/react-email/defaultSchema/blocks.tsx +++ b/packages/xl-email-exporter/src/react-email/defaultSchema/blocks.tsx @@ -1,8 +1,10 @@ import { + BlockFromConfigNoChildren, BlockMapping, createPageBreakBlockConfig, DefaultBlockSchema, mapTableCell, + PlainContent, } from "@blocknote/core"; import { CodeBlock, @@ -114,12 +116,41 @@ export const defaultReactEmailTextStyles = { }, } satisfies ReactEmailTextStyles; +type BSchema = DefaultBlockSchema & { + pageBreak: ReturnType; +}; + +const codeMapping = ( + block: BlockFromConfigNoChildren, + language: PrismLanguage, + textStyles: ReactEmailTextStyles, +) => { + // Code blocks hold plain content: at most a single unstyled text item. + const [textItem, ...excessItems] = block.content as PlainContent; + if (excessItems.length > 0 || (textItem && !("text" in textItem))) { + throw new Error("expected plain block content to be a single text item"); + } + const textContent = textItem?.text ?? ""; + + return ( + + ); +}; + export const createReactEmailBlockMappingForDefaultSchema = ( textStyles: ReactEmailTextStyles = defaultReactEmailTextStyles, ): BlockMapping< - DefaultBlockSchema & { - pageBreak: ReturnType; - }, + BSchema, any, any, React.ReactElement, @@ -258,29 +289,9 @@ export const createReactEmailBlockMappingForDefaultSchema = ( ); }, - codeBlock: (block) => { - // Code blocks hold plain content: at most a single unstyled text item. - const [textItem, ...excessItems] = block.content; - if (excessItems.length > 0 || (textItem && !("text" in textItem))) { - throw new Error("expected plain block content to be a single text item"); - } - const textContent = textItem?.text ?? ""; - - return ( - - ); - }, - audio: (block) => { + codeBlock: (block) => + codeMapping(block, block.props.language as PrismLanguage, textStyles), + audio: (block, exporter) => { // Audio icon SVG const icon = ( ); }, - video: (block) => { + video: (block, exporter) => { // Video icon SVG const icon = ( ); }, - file: (block) => { + file: (block, exporter) => { // File icon SVG const icon = ( | React.ReactElement, React.ReactElement diff --git a/packages/xl-email-exporter/src/react-email/imageDelivery.test.ts b/packages/xl-email-exporter/src/react-email/imageDelivery.test.ts new file mode 100644 index 0000000000..86ff2938e6 --- /dev/null +++ b/packages/xl-email-exporter/src/react-email/imageDelivery.test.ts @@ -0,0 +1,77 @@ +import { describe, expect, it } from "vite-plus/test"; + +import { + createCIDImageDelivery, + dataURLImageDelivery, +} from "./imageDelivery.js"; + +// Base64 "AAAA" = three zero bytes. +const pngImage = { + mimeType: "image/png", + data: new Uint8Array([0, 0, 0]), + width: 100, + height: 50, +}; + +describe("dataURLImageDelivery", () => { + it("encodes the image as a data URL src", () => { + expect(dataURLImageDelivery.deliver({ ...pngImage, name: "math" })).toBe( + "data:image/png;base64,AAAA", + ); + }); +}); + +describe("createCIDImageDelivery", () => { + it("collects base64 attachments and returns cid: srcs", () => { + const delivery = createCIDImageDelivery(); + + const src = delivery.deliver({ ...pngImage, name: "math" }); + + expect(src).toBe("cid:math-1@blocknote"); + expect(delivery.attachments).toEqual([ + { + cid: "math-1@blocknote", + filename: "math-1.png", + content: "AAAA", + encoding: "base64", + contentType: "image/png", + contentDisposition: "inline", + }, + ]); + }); + + it("numbers multiple images to keep CIDs and filenames unique", () => { + const delivery = createCIDImageDelivery(); + + delivery.deliver({ ...pngImage, name: "math" }); + const second = delivery.deliver({ ...pngImage, name: "diagram" }); + + expect(second).toBe("cid:diagram-2@blocknote"); + expect(delivery.attachments[1].filename).toBe("diagram-2.png"); + }); + + it("converts SVG images, including non-Latin-1 characters", () => { + // MathJax SVG output can contain characters outside Latin-1 (which a + // naive `btoa` rejects); the byte-based contract must round-trip them. + const svg = `e^{iπ} + 1 = 0`; + const delivery = createCIDImageDelivery(); + + const src = delivery.deliver({ + mimeType: "image/svg+xml", + data: new TextEncoder().encode(svg), + width: 100, + height: 20, + name: "math", + }); + + expect(src).toBe("cid:math-1@blocknote"); + const attachment = delivery.attachments[0]; + expect(attachment.contentType).toBe("image/svg+xml"); + expect(attachment.filename).toBe("math-1.svg"); + // The attachment round-trips back to the original SVG. + const bytes = Uint8Array.from(atob(attachment.content), (char) => + char.charCodeAt(0), + ); + expect(new TextDecoder().decode(bytes)).toBe(svg); + }); +}); diff --git a/packages/xl-email-exporter/src/react-email/imageDelivery.ts b/packages/xl-email-exporter/src/react-email/imageDelivery.ts new file mode 100644 index 0000000000..7423ecb400 --- /dev/null +++ b/packages/xl-email-exporter/src/react-email/imageDelivery.ts @@ -0,0 +1,97 @@ +import { + bytesToBase64, + ExportImage, + exportImageToDataURL, +} from "@blocknote/core"; + +/** + * How generated images (math formulas, diagrams) find their way into an + * email. Mappings that generate images take a delivery via their factory + * options, hand it the generated {@link ExportImage}, and use the returned + * string as the `` src. + * + * Custom deliveries can implement any transport: `deliver` registers the + * image and synchronously returns the reference to embed (a data URL, a + * `cid:`, a content-addressed hosted URL, ...); work that can't happen + * during rendering - uploading, attaching - happens after the email is + * rendered, from what was registered (see {@link createCIDImageDelivery} + * for this pattern). + */ +export type ReactEmailImageDelivery = { + /** + * Registers a generated image and returns the `src` to reference it with + * in the email body. Must be synchronous: some inline content renders + * synchronously. + * + * @param image - The generated image, plus a short `name` for the image + * kind (e.g. "math"), used for attachment filenames. + */ + deliver: (image: ExportImage & { name: string }) => string; +}; + +/** + * Embeds images directly in the email body as data URLs. Self-contained (no + * attachments to manage), but some email clients (notably Gmail and Outlook + * for Windows) don't display data URL images. + */ +export const dataURLImageDelivery: ReactEmailImageDelivery = { + deliver: (image) => exportImageToDataURL(image), +}; + +/** + * Delivers images as inline email attachments, referenced from the body via + * `cid:` URLs (RFC 2392) - the most widely supported way to embed generated + * images (works in Gmail and Outlook, which both block data URLs). + * + * Attaching happens at send time: after rendering the email, pass + * `attachments` to your mailer alongside the HTML. The attachment objects + * use the field names of nodemailer & compatible APIs: + * + * ```ts + * const imageDelivery = createCIDImageDelivery(); + * const exporter = new ReactEmailExporter(schema, { + * ...reactEmailDefaultSchemaMappings, + * blockMapping: { + * ...reactEmailDefaultSchemaMappings.blockMapping, + * math: createMathBlockMapping({ imageDelivery }), + * }, + * }); + * const html = await exporter.toReactEmailDocument(blocks); + * + * await transporter.sendMail({ html, attachments: imageDelivery.attachments }); + * ``` + * + * Create one delivery per rendered email - the attachment list accumulates + * across renders otherwise. + */ +export function createCIDImageDelivery(): ReactEmailImageDelivery & { + attachments: { + cid: string; + filename: string; + content: string; + encoding: "base64"; + contentType: string; + contentDisposition: "inline"; + }[]; +} { + const attachments: ReturnType["attachments"] = + []; + + return { + attachments, + deliver: (image) => { + const cid = `${image.name}-${attachments.length + 1}@blocknote`; + const extension = image.mimeType.split("/")[1]?.split("+")[0] ?? "bin"; + attachments.push({ + cid, + filename: `${image.name}-${attachments.length + 1}.${extension}`, + content: bytesToBase64(image.data), + encoding: "base64", + contentType: image.mimeType, + contentDisposition: "inline", + }); + + return `cid:${cid}`; + }, + }; +} diff --git a/packages/xl-email-exporter/src/react-email/index.ts b/packages/xl-email-exporter/src/react-email/index.ts index 8412da0065..b4da61e643 100644 --- a/packages/xl-email-exporter/src/react-email/index.ts +++ b/packages/xl-email-exporter/src/react-email/index.ts @@ -1,2 +1,3 @@ export * from "./defaultSchema/index.js"; +export * from "./imageDelivery.js"; export * from "./reactEmailExporter.jsx"; diff --git a/packages/xl-odt-exporter/src/odt/__snapshots__/basic/content.xml b/packages/xl-odt-exporter/src/odt/__snapshots__/basic/content.xml index 22f5bde3d1..e108e17026 100644 --- a/packages/xl-odt-exporter/src/odt/__snapshots__/basic/content.xml +++ b/packages/xl-odt-exporter/src/odt/__snapshots__/basic/content.xml @@ -49,59 +49,34 @@ - - + - + - - - - + - + - + - - - - + - + - - - - - - - - - - - - - - - - - - - + - + - + @@ -145,7 +120,7 @@ - + Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. @@ -266,56 +241,56 @@ Check List Item - + + + - - - + Wide Cell - + Table Cell - + Table Cell - + Wide Cell - + Table Cell - + Table Cell - + Wide Cell - + Table Cell - + Table Cell @@ -340,7 +315,7 @@ - + @@ -379,70 +354,70 @@ Audio file caption - + Inline Content: - + Styled Text Link - - - - + + + + - + Table Cell 1 - + Table Cell 2 - + Table Cell 3 - + Table Cell 4 - + - + Table Cell Bold 5 - + Table Cell 6 - + Table Cell 7 - + Table Cell 8 - + Table Cell 9 @@ -457,15 +432,15 @@ }; - + Some inline code: - + var foo = 'bar'; - - + + All those moments will be lost in time, like tears in rain. diff --git a/packages/xl-odt-exporter/src/odt/__snapshots__/withCustomOptions/content.xml b/packages/xl-odt-exporter/src/odt/__snapshots__/withCustomOptions/content.xml index b3081d8610..aeb491ece1 100644 --- a/packages/xl-odt-exporter/src/odt/__snapshots__/withCustomOptions/content.xml +++ b/packages/xl-odt-exporter/src/odt/__snapshots__/withCustomOptions/content.xml @@ -49,59 +49,34 @@ - - + - + - - - - + - + - + - - - - + - + - - - - - - - - - - - - - - - - - - - + - + - + @@ -159,7 +134,7 @@ - + Bullet List Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. @@ -280,56 +255,56 @@ Check List Item - + + + - - - + Wide Cell - + Table Cell - + Table Cell - + Wide Cell - + Table Cell - + Table Cell - + Wide Cell - + Table Cell - + Table Cell @@ -354,7 +329,7 @@ - + @@ -393,70 +368,70 @@ Audio file caption - + Inline Content: - + Styled Text Link - - - - + + + + - + Table Cell 1 - + Table Cell 2 - + Table Cell 3 - + Table Cell 4 - + - + Table Cell Bold 5 - + Table Cell 6 - + Table Cell 7 - + Table Cell 8 - + Table Cell 9 @@ -471,15 +446,15 @@ }; - + Some inline code: - + var foo = 'bar'; - - + + All those moments will be lost in time, like tears in rain. diff --git a/packages/xl-odt-exporter/src/odt/__snapshots__/withMultiColumn/content.xml b/packages/xl-odt-exporter/src/odt/__snapshots__/withMultiColumn/content.xml index fd41c45fa7..efe542c994 100644 --- a/packages/xl-odt-exporter/src/odt/__snapshots__/withMultiColumn/content.xml +++ b/packages/xl-odt-exporter/src/odt/__snapshots__/withMultiColumn/content.xml @@ -19,66 +19,55 @@ - - - - - - - - - - + + - + - + - - - - - - - + + + + This paragraph is in a column! - + So is this heading! - + You can have multiple blocks in a column too - + Block 1 - + Block 2 - + Block 3 diff --git a/packages/xl-odt-exporter/src/odt/defaultSchema/blocks.tsx b/packages/xl-odt-exporter/src/odt/defaultSchema/blocks.tsx index 7b4d9dcedf..f86ab23d63 100644 --- a/packages/xl-odt-exporter/src/odt/defaultSchema/blocks.tsx +++ b/packages/xl-odt-exporter/src/odt/defaultSchema/blocks.tsx @@ -1,15 +1,45 @@ import { BlockFromConfig, + BlockFromConfigNoChildren, BlockMapping, createPageBreakBlockConfig, DefaultBlockSchema, DefaultProps, mapTableCell, + PlainContent, TableCell, } from "@blocknote/core"; import { multiColumnSchema } from "@blocknote/xl-multi-column"; import { ODTExporter } from "../odtExporter.js"; +type BSchema = DefaultBlockSchema & { + pageBreak: ReturnType; +} & typeof multiColumnSchema.blockSchema; + +const codeMapping = ( + block: BlockFromConfigNoChildren, +) => { + // Code blocks hold plain content: at most a single unstyled text item. + const [textItem, ...excessItems] = block.content as PlainContent; + if (excessItems.length > 0 || (textItem && !("text" in textItem))) { + throw new Error("expected plain block content to be a single text item"); + } + const textContent = textItem?.text ?? ""; + + return ( + + {...textContent.split("\n").map((line, index) => { + return ( + <> + {index !== 0 && } + {line} + + ); + })} + + ); +}; + export const getTabs = (nestingLevel: number) => { return Array.from({ length: nestingLevel }, (_, i) => ); }; @@ -163,9 +193,7 @@ const wrapWithLists = ( }; export const odtBlockMappingForDefaultSchema: BlockMapping< - DefaultBlockSchema & { - pageBreak: ReturnType; - } & typeof multiColumnSchema.blockSchema, + BSchema, any, any, React.ReactNode, @@ -498,30 +526,9 @@ export const odtBlockMappingForDefaultSchema: BlockMapping< ); }, + codeBlock: codeMapping, - codeBlock: (block) => { - // Code blocks hold plain content: at most a single unstyled text item. - const [textItem, ...excessItems] = block.content; - if (excessItems.length > 0 || (textItem && !("text" in textItem))) { - throw new Error("expected plain block content to be a single text item"); - } - const textContent = textItem?.text ?? ""; - - return ( - - {...textContent.split("\n").map((line, index) => { - return ( - <> - {index !== 0 && } - {line} - - ); - })} - - ); - }, - - file: async (block) => { + file: async (block, exporter) => { return ( <> @@ -534,11 +541,11 @@ export const odtBlockMappingForDefaultSchema: BlockMapping< xlink:href={block.props.url} > - Open file + {exporter.dictionary.open_file} ) : ( - "Open file" + exporter.dictionary.open_file )} {block.props.caption && ( @@ -548,7 +555,7 @@ export const odtBlockMappingForDefaultSchema: BlockMapping< ); }, - video: (block) => ( + video: (block, exporter) => ( <> - Open video + + {exporter.dictionary.open_video_file} + {block.props.caption && ( @@ -567,7 +576,7 @@ export const odtBlockMappingForDefaultSchema: BlockMapping< ), - audio: (block) => ( + audio: (block, exporter) => ( <> - Open audio + + {exporter.dictionary.open_audio_file} + {block.props.caption && ( diff --git a/packages/xl-odt-exporter/src/odt/defaultSchema/inlineContent.tsx b/packages/xl-odt-exporter/src/odt/defaultSchema/inlineContent.tsx index 94f0fcaae4..544b1b2d63 100644 --- a/packages/xl-odt-exporter/src/odt/defaultSchema/inlineContent.tsx +++ b/packages/xl-odt-exporter/src/odt/defaultSchema/inlineContent.tsx @@ -3,11 +3,15 @@ import { InlineContentMapping, } from "@blocknote/core"; +type ICSchema = DefaultInlineContentSchema; + +// `React.ReactNode` result types, matching `ODTExporter`'s `Exporter` +// generics - mismatched result types make the mappings unassignable. export const odtInlineContentMappingForDefaultSchema: InlineContentMapping< - DefaultInlineContentSchema, + ICSchema, any, - React.JSX.Element, - React.JSX.Element + React.ReactNode, + React.ReactNode > = { link: (ic, exporter) => { const content = ic.content.map((c) => exporter.transformStyledText(c)); diff --git a/packages/xl-odt-exporter/src/odt/index.ts b/packages/xl-odt-exporter/src/odt/index.ts index 3fadfc7a6a..f4a1c2c0c4 100644 --- a/packages/xl-odt-exporter/src/odt/index.ts +++ b/packages/xl-odt-exporter/src/odt/index.ts @@ -1,2 +1,3 @@ export * from "./defaultSchema/index.js"; export * from "./odtExporter.js"; +export * from "./util/createODTImageParagraph.js"; diff --git a/packages/xl-odt-exporter/src/odt/odtExporter.test.ts b/packages/xl-odt-exporter/src/odt/odtExporter.test.ts index 971d12ba1e..56685b77bd 100644 --- a/packages/xl-odt-exporter/src/odt/odtExporter.test.ts +++ b/packages/xl-odt-exporter/src/odt/odtExporter.test.ts @@ -3,10 +3,10 @@ import { createPageBreakBlockSpec, defaultBlockSpecs, } from "@blocknote/core"; +import { testODTDocumentAgainstSnapshot } from "@shared/util/odtTestUtil.js"; import { testDocument } from "@shared/testDocument.js"; -import { BlobReader, FileEntry, TextWriter, ZipReader } from "@zip.js/zip.js"; import { beforeAll, describe, expect, it } from "vite-plus/test"; -import xmlFormat from "xml-formatter"; +import { createElement } from "react"; import { odtDefaultSchemaMappings } from "./defaultSchema/index.js"; import { ODTExporter } from "./odtExporter.js"; import { ColumnBlock, ColumnListBlock } from "@blocknote/xl-multi-column"; @@ -146,32 +146,35 @@ describe("exporter", () => { }); }, ); -}); -async function testODTDocumentAgainstSnapshot( - odt: globalThis.Blob, - snapshots: { - styles: string; - content: string; - }, -) { - const zipReader = new ZipReader(new BlobReader(odt)); - const entries = await zipReader.getEntries(); - const stylesXMLWriter = new TextWriter(); - const contentXMLWriter = new TextWriter(); - const stylesXML = entries.find( - (entry) => entry.filename === "styles.xml", - ) as FileEntry; - const contentXML = entries.find((entry) => { - return entry.filename === "content.xml"; - }) as FileEntry; + it("deduplicates identical automatic styles", () => { + const exporter = new ODTExporter( + BlockNoteSchema.create({ + blockSpecs: { + ...defaultBlockSpecs, + pageBreak: createPageBreakBlockSpec(), + }, + }), + odtDefaultSchemaMappings, + { resolveFileUrl: testResolveFileUrl }, + ); + + const italic = (name: string) => + createElement( + "style:style", + { "style:family": "text", "style:name": name }, + createElement("style:text-properties", { "fo:font-style": "italic" }), + ); + const bold = (name: string) => + createElement( + "style:style", + { "style:family": "text", "style:name": name }, + createElement("style:text-properties", { "fo:font-weight": "bold" }), + ); - expect(stylesXML).toBeDefined(); - expect(contentXML).toBeDefined(); - await expect( - xmlFormat(await stylesXML.getData(stylesXMLWriter)), - ).toMatchFileSnapshot(snapshots.styles); - await expect( - xmlFormat(await contentXML.getData(contentXMLWriter)), - ).toMatchFileSnapshot(snapshots.content); -} + expect(exporter.registerStyle(italic)).toBe(exporter.registerStyle(italic)); + expect(exporter.registerStyle(italic)).not.toBe( + exporter.registerStyle(bold), + ); + }); +}); diff --git a/packages/xl-odt-exporter/src/odt/odtExporter.tsx b/packages/xl-odt-exporter/src/odt/odtExporter.tsx index de9567c59e..7c17cad0ad 100644 --- a/packages/xl-odt-exporter/src/odt/odtExporter.tsx +++ b/packages/xl-odt-exporter/src/odt/odtExporter.tsx @@ -44,7 +44,16 @@ export class ODTExporter< } >(); + // Embedded object sub-documents (e.g. formulas), added as + // "Object N/content.xml" entries in the ODT file. + private objects: Array<{ + path: string; + contentXml: string; + mediaType: string; + }> = []; + private styleCounter = 0; + private readonly registeredStyleNames = new Map(); public readonly options: ExporterOptions; @@ -99,15 +108,22 @@ export class ODTExporter< return styledText.text; } - const styleName = `BN_T${++this.styleCounter}`; - - // Store the complete style element - this.automaticStyles.set( - styleName, - - - , - ); + // Like `registerStyle`, identical style combinations are deduplicated - + // every styled run (each bold word, say) would otherwise create its own + // automatic style. The key is prefixed so the two key spaces can't + // collide. + const key = "T:" + JSON.stringify(styles); + let styleName = this.registeredStyleNames.get(key); + if (styleName === undefined) { + styleName = `BN_T${++this.styleCounter}`; + this.automaticStyles.set( + styleName, + + + , + ); + this.registeredStyleNames.set(key, styleName); + } return {styledText.text}; } @@ -290,6 +306,18 @@ export class ODTExporter< /> ); })} + {this.objects.flatMap((object) => [ + , + , + ])} ); const zipWriter = new ZipWriter( @@ -323,16 +351,56 @@ export class ODTExporter< new BlobReader(picture.file), ); }); + this.objects.forEach((object) => { + void zipWriter.add( + `${object.path}content.xml`, + new TextReader(object.contentXml), + ); + }); return zipWriter.close(); } public registerStyle(style: (name: string) => React.ReactNode): string { + // Identical definitions are deduplicated: mappings register their styles + // per block, and a document with many alike blocks would otherwise fill + // the automatic styles with copies. The definition is keyed by its + // rendered shape, with a placeholder where the generated name appears. + const key = "S:" + JSON.stringify(style("BN_STYLE_NAME_PLACEHOLDER")); + const existing = this.registeredStyleNames.get(key); + if (existing !== undefined) { + return existing; + } const styleName = `BN_S${++this.styleCounter}`; this.automaticStyles.set(styleName, style(styleName)); + this.registeredStyleNames.set(key, styleName); return styleName; } + /** + * Registers an embedded object sub-document (e.g. a formula) and returns + * its path, for referencing from a `draw:object`'s `xlink:href`: + * + * ```tsx + * + * + * + * ``` + */ + public registerObject( + contentXml: string, + mediaType = "application/vnd.oasis.opendocument.formula", + ): string { + const path = `Object ${this.objects.length + 1}/`; + this.objects.push({ path, contentXml, mediaType }); + return path; + } + public async registerPicture(url: string): Promise<{ path: string; mimeType: string; diff --git a/packages/xl-odt-exporter/src/odt/util/createODTImageParagraph.tsx b/packages/xl-odt-exporter/src/odt/util/createODTImageParagraph.tsx new file mode 100644 index 0000000000..e3008cc342 --- /dev/null +++ b/packages/xl-odt-exporter/src/odt/util/createODTImageParagraph.tsx @@ -0,0 +1,68 @@ +import { ODTExporter } from "../odtExporter.js"; + +/** + * Registers a picture (from a URL or data URL) with the exporter and returns + * a paragraph embedding it, sized to the given dimensions (or the image's own + * by default) and aligned as requested. Lets custom block mappings embed + * images without having to build the ODT exporter's internal XML JSX elements + * themselves. + */ +export const createODTImageParagraph = async ( + exporter: ODTExporter, + url: string, + options?: { + /** + * Dimensions to render the image at. Defaults to the image's own. + */ + width?: number; + height?: number; + /** + * Horizontal alignment of the image within the paragraph. + * + * @default "left" + */ + align?: "left" | "center" | "right"; + }, +): Promise => { + const { path, mimeType, ...originalDimensions } = + await exporter.registerPicture(url); + const width = options?.width ?? originalDimensions.width; + const height = options?.height ?? originalDimensions.height; + + const align = options?.align ?? "left"; + const styleName = + align === "left" + ? "Standard" + : exporter.registerStyle((name) => ( + + + + )); + + return ( + + + + + + ); +}; diff --git a/packages/xl-odt-exporter/src/odt/util/jsx.d.ts b/packages/xl-odt-exporter/src/odt/util/jsx.d.ts index 8f996ea6df..5d89aaa19e 100644 --- a/packages/xl-odt-exporter/src/odt/util/jsx.d.ts +++ b/packages/xl-odt-exporter/src/odt/util/jsx.d.ts @@ -22,6 +22,7 @@ declare module "react/jsx-runtime" { "text:tab": any; "draw:frame": any; "draw:image": any; + "draw:object": any; "draw:text-box": any; "table:table": any; "table:table-row": any; @@ -30,6 +31,7 @@ declare module "react/jsx-runtime" { "manifest:manifest": any; "manifest:file-entry": any; "style:paragraph-properties": any; + "style:graphic-properties": any; "style:background-fill": any; "style:table-properties": any; "style:table-cell-properties": any; diff --git a/packages/xl-pdf-exporter/src/pdf/__snapshots__/example.jsx b/packages/xl-pdf-exporter/src/pdf/__snapshots__/example.jsx index 71684acf42..723124df6e 100644 --- a/packages/xl-pdf-exporter/src/pdf/__snapshots__/example.jsx +++ b/packages/xl-pdf-exporter/src/pdf/__snapshots__/example.jsx @@ -712,7 +712,7 @@ - Open video file + Open video @@ -755,7 +755,7 @@ - Open audio file + Open audio diff --git a/packages/xl-pdf-exporter/src/pdf/__snapshots__/exampleWithHeaderAndFooter.jsx b/packages/xl-pdf-exporter/src/pdf/__snapshots__/exampleWithHeaderAndFooter.jsx index dc11a90c93..7281749d28 100644 --- a/packages/xl-pdf-exporter/src/pdf/__snapshots__/exampleWithHeaderAndFooter.jsx +++ b/packages/xl-pdf-exporter/src/pdf/__snapshots__/exampleWithHeaderAndFooter.jsx @@ -720,7 +720,7 @@ - Open video file + Open video @@ -763,7 +763,7 @@ - Open audio file + Open audio diff --git a/packages/xl-pdf-exporter/src/pdf/defaultSchema/blocks.tsx b/packages/xl-pdf-exporter/src/pdf/defaultSchema/blocks.tsx index fc1b91a9e1..44ff2b73e0 100644 --- a/packages/xl-pdf-exporter/src/pdf/defaultSchema/blocks.tsx +++ b/packages/xl-pdf-exporter/src/pdf/defaultSchema/blocks.tsx @@ -1,8 +1,10 @@ import { + BlockFromConfigNoChildren, BlockMapping, + createPageBreakBlockConfig, DefaultBlockSchema, DefaultProps, - createPageBreakBlockConfig, + PlainContent, } from "@blocknote/core"; import { multiColumnSchema } from "@blocknote/xl-multi-column"; import { Image, Link, Path, Svg, Text, View } from "@react-pdf/renderer"; @@ -18,10 +20,53 @@ import { Table } from "../util/table/Table.js"; const PIXELS_PER_POINT = 0.75; const FONT_SIZE = 16; +type BSchema = DefaultBlockSchema & { + pageBreak: ReturnType; +} & typeof multiColumnSchema.blockSchema; + +const codeMapping = ( + block: BlockFromConfigNoChildren, +) => { + // Code blocks hold plain content: at most a single unstyled text item. + const [textItem, ...excessItems] = block.content as PlainContent; + if (excessItems.length > 0 || (textItem && !("text" in textItem))) { + throw new Error("expected plain block content to be a single text item"); + } + const textContent = textItem?.text ?? ""; + const lines = textContent.split("\n").map((line, index) => { + const indent = line.match(/^\s*/)?.[0].length || 0; + + return ( + + {line.trimStart() || <> } + + ); + }); + + return ( + + {lines} + + ); +}; + export const pdfBlockMappingForDefaultSchema: BlockMapping< - DefaultBlockSchema & { - pageBreak: ReturnType; - } & typeof multiColumnSchema.blockSchema, + BSchema, any, any, React.ReactElement, @@ -112,44 +157,7 @@ export const pdfBlockMappingForDefaultSchema: BlockMapping< ); }, - codeBlock: (block) => { - // Code blocks hold plain content: at most a single unstyled text item. - const [textItem, ...excessItems] = block.content; - if (excessItems.length > 0 || (textItem && !("text" in textItem))) { - throw new Error("expected plain block content to be a single text item"); - } - const textContent = textItem?.text ?? ""; - const lines = textContent.split("\n").map((line, index) => { - const indent = line.match(/^\s*/)?.[0].length || 0; - - return ( - - {line.trimStart() || <> } - - ); - }); - - return ( - - {lines} - - ); - }, + codeBlock: codeMapping, pageBreak: () => { return ; }, @@ -191,7 +199,7 @@ export const pdfBlockMappingForDefaultSchema: BlockMapping< {file( block.props, - "Open audio file", + exporter.dictionary.open_audio_file, , @@ -206,7 +214,7 @@ export const pdfBlockMappingForDefaultSchema: BlockMapping< {file( block.props, - "Open video file", + exporter.dictionary.open_video_file, , @@ -221,7 +229,7 @@ export const pdfBlockMappingForDefaultSchema: BlockMapping< {file( block.props, - "Open file", + exporter.dictionary.open_file, , diff --git a/packages/xl-pdf-exporter/src/pdf/defaultSchema/inlinecontent.tsx b/packages/xl-pdf-exporter/src/pdf/defaultSchema/inlinecontent.tsx index a1ea3cc7e2..064953a2f3 100644 --- a/packages/xl-pdf-exporter/src/pdf/defaultSchema/inlinecontent.tsx +++ b/packages/xl-pdf-exporter/src/pdf/defaultSchema/inlinecontent.tsx @@ -4,8 +4,10 @@ import { } from "@blocknote/core"; import { Link, Text } from "@react-pdf/renderer"; +type ICSchema = DefaultInlineContentSchema; + export const pdfInlineContentMappingForDefaultSchema: InlineContentMapping< - DefaultInlineContentSchema, + ICSchema, any, React.ReactElement | React.ReactElement, React.ReactElement diff --git a/packages/xl-pdf-exporter/src/pdf/pdfExporter.test.tsx b/packages/xl-pdf-exporter/src/pdf/pdfExporter.test.tsx index 738e931a1e..11d0192c17 100644 --- a/packages/xl-pdf-exporter/src/pdf/pdfExporter.test.tsx +++ b/packages/xl-pdf-exporter/src/pdf/pdfExporter.test.tsx @@ -16,16 +16,9 @@ import { describe, expect, it } from "vite-plus/test"; import { pdfDefaultSchemaMappings } from "./defaultSchema/index.js"; import { PDFExporter } from "./pdfExporter.js"; import { partialBlocksToBlocksForTesting } from "@shared/formatConversionTestUtil.js"; -// import * as ReactPDF from "@react-pdf/renderer"; -// expect.extend({ toMatchImageSnapshot }); -// import { toMatchImageSnapshot } from "jest-image-snapshot"; -// import { pdf } from "pdf-to-img"; describe("exporter", () => { it("typescript: schema with extra block", async () => { - // const exporter = createPdfExporterForDefaultSchema(); - // const ps = exporter.transform(testDocument); - const schema = BlockNoteSchema.create({ blockSpecs: { ...defaultBlockSpecs, @@ -177,24 +170,11 @@ describe("exporter", () => { await expect(str).toMatchFileSnapshot("__snapshots__/example.jsx"); - // would be nice to compare pdf images, but currently doesn't work on mac os (due to node canvas installation issue) - - // await ReactPDF.render(transformed, `${__dirname}/example.pdf`); - // eslint-disable-next-line - // const b = await ReactPDF(transformed); - - // await toMatchBinaryFileSnapshot(b, `__snapshots__/example.pdf`); - // expect(b.toString("utf-8")).toMatchFileSnapshot( - // `__snapshots__/example.pdf` - // ); - // const doc = await pdf(`${__dirname}/example.pdf`); - - // // expect(doc.length).toBe(2); - // // expect(doc.metadata).toEqual({ ... }); - - // for await (const page of doc) { - // expect(page).toMatchImageSnapshot(); - // } + // Visual verification of an actually produced PDF lives in the browser + // suite (tests/src/end-to-end/exporters/exporterImages.test.tsx), which + // renders the file's pages with pdf.js and screenshots them - possible + // there because a real browser needs no native canvas dependencies, + // which is what blocked doing this in Node. }); it("should export a document with header and footer", async () => { @@ -218,11 +198,6 @@ describe("exporter", () => { await expect(str).toMatchFileSnapshot( "__snapshots__/exampleWithHeaderAndFooter.jsx", ); - - // await ReactPDF.render( - // transformed, - // `${__dirname}/exampleWithHeaderAndFooter.pdf` - // ); }); it("should export a document with a multi-column block", async () => { const schema = BlockNoteSchema.create({ diff --git a/shared/util/browserImageTestUtil.ts b/shared/util/browserImageTestUtil.ts new file mode 100644 index 0000000000..5736016ca1 --- /dev/null +++ b/shared/util/browserImageTestUtil.ts @@ -0,0 +1,55 @@ +/** + * Decodes a data URL image and samples its pixels, so browser tests can + * assert generated images actually contain ink rather than being + * valid-but-blank - and that the ink covers the image rather than sitting + * letterboxed in a corner of it (`inkedFractionX`/`inkedFractionY` are the + * fractions of the width/height the inked bounding box spans). Browser-only + * (needs image decoding and a canvas). + */ +export async function decodeAndSample(dataURL: string): Promise<{ + width: number; + height: number; + inkedPixels: number; + inkedFractionX: number; + inkedFractionY: number; +}> { + const image = new Image(); + image.src = dataURL; + await image.decode(); + + const canvas = document.createElement("canvas"); + canvas.width = image.naturalWidth || image.width; + canvas.height = image.naturalHeight || image.height; + const context = canvas.getContext("2d"); + if (!context) { + throw new Error("2D canvas context unavailable for decoding images"); + } + context.drawImage(image, 0, 0); + + const pixels = context.getImageData(0, 0, canvas.width, canvas.height).data; + let inkedPixels = 0; + let minX = canvas.width; + let maxX = -1; + let minY = canvas.height; + let maxY = -1; + for (let i = 3; i < pixels.length; i += 4) { + if (pixels[i] > 0) { + inkedPixels++; + const pixelIndex = (i - 3) / 4; + const x = pixelIndex % canvas.width; + const y = Math.floor(pixelIndex / canvas.width); + minX = Math.min(minX, x); + maxX = Math.max(maxX, x); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + } + } + + return { + width: canvas.width, + height: canvas.height, + inkedPixels, + inkedFractionX: maxX < minX ? 0 : (maxX - minX + 1) / canvas.width, + inkedFractionY: maxY < minY ? 0 : (maxY - minY + 1) / canvas.height, + }; +} diff --git a/shared/util/odtTestUtil.ts b/shared/util/odtTestUtil.ts new file mode 100644 index 0000000000..8b794a18d4 --- /dev/null +++ b/shared/util/odtTestUtil.ts @@ -0,0 +1,55 @@ +import { BlobReader, FileEntry, TextWriter, ZipReader } from "@zip.js/zip.js"; +import { expect } from "vite-plus/test"; +import xmlFormat from "xml-formatter"; + +/** + * Verifies an exported ODT document against file snapshots: `styles.xml`, + * `content.xml`, and the embedded objects (the sub-documents that e.g. + * formulas are stored in, as separate `Object N/content.xml` zip entries). + * Tests that don't declare `objects` assert the document embeds none, so + * object payloads can't go unverified. + */ +export async function testODTDocumentAgainstSnapshot( + odt: Blob, + snapshots: { + styles: string; + content: string; + objects?: { snapshot: string; expectedCount: number }; + }, +) { + const zipReader = new ZipReader(new BlobReader(odt)); + const entries = await zipReader.getEntries(); + const stylesXML = entries.find( + (entry) => entry.filename === "styles.xml", + ) as FileEntry; + const contentXML = entries.find( + (entry) => entry.filename === "content.xml", + ) as FileEntry; + + expect(stylesXML).toBeDefined(); + expect(contentXML).toBeDefined(); + await expect( + xmlFormat(await stylesXML.getData(new TextWriter())), + ).toMatchFileSnapshot(snapshots.styles); + await expect( + xmlFormat(await contentXML.getData(new TextWriter())), + ).toMatchFileSnapshot(snapshots.content); + + const objectEntries = entries + .filter((entry) => /^Object \d+\/content\.xml$/.test(entry.filename)) + .sort((a, b) => a.filename.localeCompare(b.filename)) as FileEntry[]; + expect(objectEntries).toHaveLength(snapshots.objects?.expectedCount ?? 0); + + if (snapshots.objects) { + const objectContents = await Promise.all( + objectEntries.map( + async (entry) => + `\n` + + xmlFormat(await entry.getData(new TextWriter())), + ), + ); + await expect(objectContents.join("\n")).toMatchFileSnapshot( + snapshots.objects.snapshot, + ); + } +} diff --git a/tests/src/end-to-end/ariakit/__screenshots__/ariakit.test.tsx/ariakit-image-toolbar-chromium-linux.png b/tests/src/end-to-end/ariakit/__screenshots__/ariakit.test.tsx/ariakit-image-toolbar-chromium-linux.png index 8891baa46a3d63325ebd6333d29ffe8efff9c11a..7a73788dd12e0bb9740c65169b15019fa41dfc6e 100644 GIT binary patch literal 13468 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 diff --git a/tests/src/end-to-end/ariakit/__screenshots__/ariakit.test.tsx/ariakit-image-toolbar-firefox-linux.png b/tests/src/end-to-end/ariakit/__screenshots__/ariakit.test.tsx/ariakit-image-toolbar-firefox-linux.png index bdf0682fd7c0e6e4d43d012bc14962906ec1091b..19f01795f6f890668e5e9797f3103e515378179c 100644 GIT binary patch literal 13662 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 HXRiJ)L|%T? diff --git a/tests/src/end-to-end/ariakit/__screenshots__/ariakit.test.tsx/ariakit-image-toolbar-webkit-linux.png b/tests/src/end-to-end/ariakit/__screenshots__/ariakit.test.tsx/ariakit-image-toolbar-webkit-linux.png index d50b0bf1abfd8c285e6ca0175ec47e546a8e1312..ac3dee421fa28b7bf55153190d6a86a5c6c114d3 100644 GIT binary patch literal 13114 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�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

p-b9@aQ~Ne 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

iC{a_AiHn;}2TbTtJp>GBGcXF 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%0AM?LlL$3j~0Nj+;XP!&8}_anX@as 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≻m>Xu3bo?DS+t<+U&9i>n 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 z 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

RDL?j9N8`P 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 z zME;tPbRMdb!xZ5eN^|pZVP@GT`lY}3{-Po3&rL&Rn3|g24lkD^h-KJcXBb(7+hQFo zDLN~5vPjmfueoPbKdcKkpks6?rB+Z7bNjYI1W9uvoJYQ92Wt=she-%?Hrp~@N`V@O z=&DYfhl!+tb&w$_324i6voH9_>Em0_`1UdDGD8Tbh(T8K+dF8%B4K4%I^ESj*wWq; z%Ld=bPAn!gl*))wz9IVHl_+gqImH@DlBY!i#Q%5`Vx^>pyXic*saj@cTn*>xbWhzV zF(ZkL!R7)#8TKO*tY$ycV~}!Ihs(T>qmzqQyao3YjxUk=PwZA?HAo0$qG-VP@XsO! zVjfuUE%8!&Sjv0HGYsa%KC#m}==KIQ>2ruQVXAe1l4`=9^B2F=fVj!K!iYucl7G0K zPWcDEyM00Hylh2DtfHj(em}SeZyjAtjhvh4r9mr{RF5D%LgJKvyGSZ^ya+V!jrx1L zVpQzYkI7U#AQdLBwHC|;+`0zDaR0|4>YiHpoQ6}kNf2&KSbFi2w$SB9tVJ?%2x8v0 z=7%T92hjvoh`J9l@)zXzKR$aP_M{d6h)Ax^R(4obw~t^Hc-7N4=lJ6ij>)(=_eG( zii_E2;s=(l(|{PKGNn(siJqLzFA?M6Z95&DXbD!Bstv9bpwDNa_9i{m4;$%y;1!b!K@|Ux6_0 z+dzdO?3!V@|7j!uV*<7|8D%xES$VBC*O(P~m)9Dn^iPO|n9k?z$Bp`xIud#jcNHPE zs_JQ3EzXd*$BzRV9372!ZL)!nEl2m`LWX3Un@*9tXlM^kK1-Qh*8{17HLf37k zvY1E;WoLW`8)+ctznkmAjQ?p%?V_+#`noDkPQHgQ;T>pM9nuf)naDz##j?1Mi8=sfw#BHSP0m(5$Fcogg7ZBz3`p` z=NtIq$dE$ILyH(&9$hi7n#cao+*tEe)2-otgYlk#(oWlaNw$Q6Zz)gM{8FAi^~U

$sj2EyLPT6h)xs?(thlIvxET&50x= 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

p|-)qU=-;6*~G#dnZa{ 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 literal 0 HcmV?d00001 diff --git a/tests/src/end-to-end/exporters/__screenshots__/exporterImages.test.tsx/pdf-export-page-3-chromium-linux.png b/tests/src/end-to-end/exporters/__screenshots__/exporterImages.test.tsx/pdf-export-page-3-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..bc81b617bab0c399241ed417c9aa38d2fc4401ab GIT binary patch literal 25467 zcmeIbd0dWb+cq2)$xviSq@)z0D4GX~1{x3&4WdEPT$*c9SSh7aX+|nUQIRyMXr7al z<~hw>&EvZrv7URmZ|nKK@Atj$Kku{d-=ZsB*Lfc2e(b}xZ~Jz1yB<@NS-EWEGAb&n zm2$F&PEb)T5~ia1&1>lr{L5TX7Xua5MM=3s2Txir=*e(+&itE$Kwrs>SQO7a|KIL! z5xe_H`OJE@xAF-^+t)AJ=G_!T% zwL-z!@fNUxDM{-V1^O~NXKaDRhP*uO+2?#t5o<9jEt>zF<9HT} zu6D-t#R0GE#`@fu9LJj&0|Eo{b5m?6yu3`bd>3tPvG4Ea?B~s$UGaVqo#mgM%;CG+v({e|~KLyL3A z$E~GrW@$-hXJ>!EksuRXYdkEL>|UYu#xJif%1F~nOb^Uoo-aEmhmTiGEX3s%)e1lotOUJ?#*#ssZSA7l9;j3{qx0m(U%k(^H9ghE-I>l zhAivAw*#5WDLwHe?Gb5{m9gy)oN4ptxGE|tY&t|50!r-L`2z0W&vjxr>d#%2BR=}7 zFib*%?XTa=`HrQHrK%=hHS`c_zd!v(UP-AVq~BgooDxu?ec{5^^q9Z?Jmr(eW)ZX5 ziH?qF&6&%z!krJM`FE+m+s88XC5P8(cG~^zlj_2eIvo{kTen_X&SDQ57_K#F)hEcQF??G2Bgio1GwE63i#`y2A z=U?;A(x85JG_hm!t8vM>`XN6w&sN9uo0A)6j2t_x968+>c#4}py2V=$Ht*6%5yYh@ zob&~m+C%O7^6*4MM~Veo<{y#o≪tza|=&yfOS5XVR4Eex)Hz?CTrDg3KGsDbeFY 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�^G7#n*cEO6E@%L~7&=RTMilir&Bfp`*C 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

%8qDRvARtIe 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 ajqZJ|yU(;C{GxTov@ literal 0 HcmV?d00001 diff --git a/tests/src/end-to-end/exporters/exporterImages.test.tsx b/tests/src/end-to-end/exporters/exporterImages.test.tsx new file mode 100644 index 0000000000..4acd85a13e --- /dev/null +++ b/tests/src/end-to-end/exporters/exporterImages.test.tsx @@ -0,0 +1,236 @@ +import { BlockNoteSchema, defaultBlockSpecs } from "@blocknote/core"; +import { diagramBlockMapping as emailDiagramBlockMapping } from "@blocknote/diagram-block/email-exporter"; +import { diagramBlockMapping as pdfDiagramBlockMapping } from "@blocknote/diagram-block/pdf-exporter"; +import { + inlineMathMapping as emailInlineMathMapping, + mathBlockMapping as emailMathBlockMapping, +} from "@blocknote/math-block/email-exporter"; +import { + inlineMathMapping as pdfInlineMathMapping, + mathBlockMapping as pdfMathBlockMapping, +} from "@blocknote/math-block/pdf-exporter"; +import { + ReactEmailExporter, + reactEmailDefaultSchemaMappings, +} from "@blocknote/xl-email-exporter"; +import { + PDFExporter, + pdfDefaultSchemaMappings, +} from "@blocknote/xl-pdf-exporter"; +import { pdf } from "@react-pdf/renderer"; +import { testDocumentWithSourceBlocks } from "@shared/testDocument.js"; +import { decodeAndSample } from "@shared/util/browserImageTestUtil.js"; +import { testResolveFileUrl } from "@shared/util/testFileResolver.js"; +import { afterEach, describe, expect, test } from "vite-plus/test"; +import { browserName } from "../../utils/context.js"; +import { screenshotFull } from "../../utils/screenshotFull.js"; + +// Complete exports of the full shared test document with the default +// mappings in a real browser, where the mappings' `typeof document` checks +// select the built-in image implementations. These are the only tests of +// that composition - the packages' (node) unit suites always take the +// headless side of those checks (or plug in stubs), and the colocated +// `.browser.test` files call the implementations directly, bypassing the +// mappings. A broken default wiring or inverted environment check passes +// every one of those tests and only fails here - while breaking the primary +// real-world path, exporting from the browser. Lives in this package because +// it spans math-block, diagram-block and the exporters, and this is the +// repo's only browser-mode runner. + +// An invalid diagram and an invalid formula, whose typed errors must render +// as placeholders without failing the export. Unlike the packages' node +// suites, this exercises the real error classes through vite's +// bundling/interop of mermaid and mathjax-full - e.g. a mis-resolved +// `TexError` import only breaks here (and in real apps), not in node. +const invalidDiagramBlock = { + id: "invalid-diagram", + type: "diagram", + props: {}, + content: [{ type: "text", text: "not a valid diagram !!", styles: {} }], + children: [], +} as any; +const invalidMathBlock = { + id: "invalid-math", + type: "mathBlock", + props: {}, + // A structural error: MathJax's `noundefined` package renders unknown + // commands as text rather than erroring, so an unknown command wouldn't + // reach the error path. + content: [{ type: "text", text: "\\frac{1}{", styles: {} }], + children: [], +} as any; + +const schema = () => BlockNoteSchema.create({ blockSpecs: defaultBlockSpecs }); + +afterEach(() => { + document.getElementById("export-under-test")?.remove(); +}); + +// Creates the container the export under test is rendered into (removed +// again by the afterEach above). +function createExportFrame(width: string) { + const frame = document.createElement("div"); + frame.id = "export-under-test"; + frame.style.width = width; + frame.style.background = "white"; + document.body.append(frame); + return frame; +} + +describe("email export through a complete exporter in the browser", () => { + test("renders math and diagrams to images", { timeout: 30000 }, async () => { + // The full shared test document, minus the media blocks: the email + // mappings embed media by their (remote) URLs directly, which the + // screenshot below would then try to load over the network. + const emailDocument = [ + ...testDocumentWithSourceBlocks.filter( + (block) => !["image", "video", "audio", "file"].includes(block.type), + ), + invalidDiagramBlock, + invalidMathBlock, + ]; + + const exporter = new ReactEmailExporter(schema(), { + ...reactEmailDefaultSchemaMappings, + blockMapping: { + ...reactEmailDefaultSchemaMappings.blockMapping, + mathBlock: emailMathBlockMapping, + diagram: emailDiagramBlockMapping, + }, + inlineContentMapping: { + ...reactEmailDefaultSchemaMappings.inlineContentMapping, + math: emailInlineMathMapping, + }, + } as any); + + const html = await exporter.toReactEmailDocument(emailDocument as any); + + // Three generated images: block math (rasterized to PNG in the + // browser), inline math (always SVG), and the valid diagram (PNG). The + // invalid diagram renders the error placeholder instead - and doesn't + // fail the export. + // Decodes the HTML-escaped attribute value; `&` must be decoded + // last - decoding it first would double-unescape sequences like + // `&#x27;` (an escaped literal `'`) into `'`. + const srcs = [...html.matchAll(/]*src="(data:[^"]+)"/g)].map( + (match) => match[1].replaceAll("'", "'").replaceAll("&", "&"), + ); + expect(srcs).toHaveLength(3); + expect(srcs[0]).toMatch(/^data:image\/png/); + expect(srcs[1]).toMatch(/^data:image\/svg\+xml/); + expect(srcs[2]).toMatch(/^data:image\/png/); + for (const src of srcs) { + expect((await decodeAndSample(src)).inkedPixels).toBeGreaterThan(0); + } + expect(html).toContain("Invalid diagram"); + expect(html).toContain("Invalid formula"); + + // Visual regression of the exported email as a client would show it, + // rendered at 600px (typical email client width). + const frame = createExportFrame("600px"); + frame.innerHTML = html; + // Wait until every image is ready to paint - a screenshot taken while a + // data: URL is still decoding captures a gap (and unloaded images throw + // off the height measurement in screenshotFull). + await Promise.all( + [...frame.querySelectorAll("img")].map((img) => img.decode()), + ); + await screenshotFull(frame, "email-export"); + }); +}); + +describe("pdf export through a complete exporter in the browser", () => { + // Chromium only: the produced PDF is the same file everywhere (react-pdf + // lays it out from bundled fonts, not browser rendering), so per-browser + // runs would only re-test pdf.js's rasterizer at 3x the suite cost. + test.skipIf(browserName !== "chromium")( + "renders math and diagrams to images in the produced PDF", + { timeout: 60000 }, + async () => { + const mappings = { + ...pdfDefaultSchemaMappings, + blockMapping: { + ...pdfDefaultSchemaMappings.blockMapping, + mathBlock: pdfMathBlockMapping, + diagram: pdfDiagramBlockMapping, + }, + inlineContentMapping: { + ...pdfDefaultSchemaMappings.inlineContentMapping, + math: pdfInlineMathMapping, + }, + }; + // The full shared test document: unlike the email mappings, the PDF + // exporter fetches media through `resolveFileUrl`, so the test + // resolver keeps it deterministic and offline. + const exporter = new PDFExporter(schema(), mappings as any, { + resolveFileUrl: testResolveFileUrl, + }); + + const transformed = await exporter.toReactPDFDocument([ + ...testDocumentWithSourceBlocks, + invalidDiagramBlock, + invalidMathBlock, + ] as any); + + // The element tree carries the inline math as an image with + // react-pdf's async (rasterizing) src function, and the diagram as a + // rendered PNG. + const images: any[] = []; + const collectImages = (node: any) => { + if (!node || typeof node !== "object") { + return; + } + if (Array.isArray(node)) { + node.forEach(collectImages); + return; + } + if (node.type === "IMAGE") { + images.push(node); + } + collectImages(node.props?.children); + }; + collectImages(transformed); + expect(images.some((i) => typeof i.props.src === "function")).toBe(true); + expect( + images.some((i) => String(i.props.src).startsWith("data:image/png")), + ).toBe(true); + + // Produce the actual file - this runs react-pdf's asset resolution, + // which invokes the inline math's rasterizing src function. + const blob = await pdf(transformed as any).toBlob(); + const bytes = new Uint8Array(await blob.arrayBuffer()); + expect(new TextDecoder().decode(bytes.slice(0, 5))).toBe("%PDF-"); + + // Render the produced PDF's pages with pdf.js (pure JS - the reason + // the old Node-side attempt at this failed was native canvas + // dependencies, which a real browser doesn't need) and screenshot + // them, stacked, as a visual regression of the actual export. + const pdfjs = await import("pdfjs-dist"); + const workerUrl = ( + await import("pdfjs-dist/build/pdf.worker.min.mjs?url" as string) + ).default; + pdfjs.GlobalWorkerOptions.workerSrc = workerUrl; + + const parsed = await pdfjs.getDocument({ data: bytes }).promise; + // The test document contains a page break. + expect(parsed.numPages).toBeGreaterThanOrEqual(2); + + // Screenshot each page as its own full-resolution baseline. + const frame = createExportFrame("fit-content"); + for (let n = 1; n <= parsed.numPages; n++) { + const pdfPage = await parsed.getPage(n); + const viewport = pdfPage.getViewport({ scale: 1 }); + const canvas = document.createElement("canvas"); + canvas.width = viewport.width; + canvas.height = viewport.height; + canvas.style.display = "block"; + await pdfPage.render({ + canvasContext: canvas.getContext("2d")!, + viewport, + } as any).promise; + frame.replaceChildren(canvas); + await screenshotFull(frame, `pdf-export-page-${n}`); + } + }, + ); +}); diff --git a/tests/src/end-to-end/images/__screenshots__/images.test.tsx/create-image-chromium-linux.png b/tests/src/end-to-end/images/__screenshots__/images.test.tsx/create-image-chromium-linux.png index 32c5a65f990c2dc2f8db0c0d79c19df812a2e0dd..8145737c48edf1525f52b37fe318971f0456da28 100644 GIT binary patch literal 13239 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 literal 14616 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 CeFSF! diff --git a/tests/src/end-to-end/images/__screenshots__/images.test.tsx/create-image-firefox-linux.png b/tests/src/end-to-end/images/__screenshots__/images.test.tsx/create-image-firefox-linux.png index 09682f860197d47d860da38ee7bf766287f284c2..d391b8fb0e9ab496e448bef5553ff3bc7b0fc7a1 100644 GIT binary patch literal 13401 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 yDcTUg>+b_sj-!9%Vu=HL9UB4UNfN>RByD2L zXyWrlxpe?>A(Q^Y;}vi-Eec%}!5Z34F$~aSHf|$1dsq7E;!1ZNOP7G?0d<(}XmD#m$Rf0ReVqTm?(IZ;#tf?z1?B@n z2zfNLc{5lD1V-)bTm(ko%iM{!DJ?^s)mEwYWI}7m^^g%gy1#{y2nV7_O0flKL>TX& zLt#l=SuK{HS>}Td798)umy#L64U)(Vs#!Z98iSg(7x`b3uke$0kg<0tsW#ZL@1HK9 z#cxEQ5Uqs56>?8D5xP`hv~2;s0(>1(dx;5-llM>RE#qQRXHK5q=oRBA#X1U1^iyD> zG23#)B%oY-PwwO}{3F6_aH4GcUmu~{eomf)c~1awiq43S&4rlXglGsT>O@c}aPgY2 z-g>!JBVM?4EI|oE8nhEXG4zd=Ae5g0-t_0lz>|oDh*r3hm9xf%w0nPPAL{cHb zHyfy6>huPq$I#AfXHXR)76Mgpf(WcNaS)0En3-1Y16X+rEHk|dG?dt`c%WW)IrwM^f@08>GCJdeac;bM?Ro(Vr#%H zul}-w4BYwja^Ty&T6h;18YdxV2=cl9K%~!T3D5ZrcodM+@JXk~B3pk+w)uJw9BR+o zOa{t0k3Y?6qv!A<(hE_+aQD9u^^f^pgclIuIPs6|@&=neMm7ZtPqWiV22c`N0G7s6 z0#29W2KWaV835aW03IFATSJ@BU( z(HlAGv~MCsW{fcX1vxCZ4g|;IbNDGjiTK4_$O1@dkPqi`!PJl|@I!-{GlLU*rY#3q z<&XJcdF<*{bae15SPK^h8Dc@r&p6*31ZM`)U z_)!8nLLsM3eK|88Oyz{egS)^QFa`39e`$$Jad102z<41Af7KM)1T+gGt*HU%c;+CP zjCN&uC~ns;k@ex%=IdwY!5cuL3Jq)T|MGY5|^M0ms5gbn7f8_9?toS+~CM|m+C z_a*Q%w^Wj=2!w^ynl0w4Z=>c-n!WfJfCE;hYB2j|fE- z%0TFB<$pR;LgSG!ekGHIZn%*^dPvIiz5=1(APSu%Q3D{`#!vjt??72*+pCym3w~P! zR|miS9s03EXhI<|O&>)C!a5VEyRjaJ7a*5G)`OqwKlQIrf9Bt)UXBIx|6losw3n8A zY03Y$9LdBPyk+wm?8>ZPdaOO{|9rjduW*4q-3eqhhIM?0{vHcmfIbf9<78NjC%ULE zg#Y%#u$wLDFZOcKOGCW$2<&BOyvz|VljX~*@v?lrgarS8W209^Hcais@ed^k{cYJ4 L@JZ3fUmyP;(J^L5 literal 14578 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 q@hN-?U_11ocv$Z(;Q>~ diff --git a/tests/src/end-to-end/images/__screenshots__/images.test.tsx/create-image-webkit-linux.png b/tests/src/end-to-end/images/__screenshots__/images.test.tsx/create-image-webkit-linux.png index cbed364961230de297d4d6aaa913efab5434644b..36d68026d26eea91f9809ff03bdc61895a169136 100644 GIT binary patch literal 12986 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 literal 14248 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 V!s>Jp1k|G5OpGk{at#ih`CoJKUa$ZF diff --git a/tests/src/end-to-end/images/__screenshots__/images.test.tsx/embed-image-chromium-linux.png b/tests/src/end-to-end/images/__screenshots__/images.test.tsx/embed-image-chromium-linux.png index 4fddbd3b9be327fa0e29e887258e6ddadf40f5da..150757d98da7d3db4431f2279f918cacfb926f92 100644 GIT binary patch literal 24059 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 literal 24767 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 N>gQ^o9j-k1)<3Kg{|5j7 literal 36649 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 E1C;)g<^TWy diff --git a/tests/src/end-to-end/images/__screenshots__/images.test.tsx/embed-image-webkit-linux.png b/tests/src/end-to-end/images/__screenshots__/images.test.tsx/embed-image-webkit-linux.png index 0f4251b10aefcbb2d7d9e4a6a0a2c20159cc01b7..d03b263d386407a1d94377c1d892e84506a528bc 100644 GIT binary patch literal 23908 zcmeIac{r8p`!;TuU3R;YD0Ty7t4vW+W@;x|G88RBsBIpij3Mks4TdsiN+rY!MaZyd zLI@!wQ;Ezi8O!)P@3q?d{d|w#_xm2ldmQik-|nzk)_R`%x$o<~uJbyt^SbRT2es9g zEm^aKjg4&?WxuK}8{5x#x!?`QBK)ZFY13z8GZCYx?m2w=r@?22&W8=|P7ci*iFr(< z9JZ$1UbOTJO*>BH+w{`Y|8^h$Zw8~TWc#35qrk1yDqt_IwJI66KV8Kon{vo4pRV6DWxew! zw)O`?Y)_4qh62VrIQ_}z4cy6feZmd%lP7O$n#RO8{LJ>vL!a%hT(2iGtMQ!lB7bjl z-1d42+pvD9FgNopO4u)K!&aMqdb;XSL4lZk+AbLxH`Bt&t9SQ@YwXKd^5S5(vtcP; z+$QaDNyn`LSm9r^kF^w&;%j;s>8=pl6T!`)SE}nz%Dzod4-T`8`rOmwHu_nMKGs|N z`}nkvp}pJm#EG42mNCtB@UTAH!Gp8DW`+@ciS_k*^e(zVaYxeu!-$j)#;?Q{e+gzS z`0HGBOiVrF{ZNjnRO$T&yFQO0cVqG)8;>Cc_g7izb@)!Fb;{~zHNRyzb`+(3Jb8Zu z$KjO2?Bt@|H^SN3e%4Ppj5o&et+GVOn{0DSH85~Rre>VBdVSyFc%O-={_%X%HGyjK z^76XbMhz7eR|B>)H|h3$TpDcSk+4w`)-)NZ*Ommc{|`{QtWHu=_bFPe){Vl zlH*=VvqMgP^#@v7T1MIjHkk+L>+7>-aOj^6eGtO-;rD#s+5Gm;?R0OizH5?2Z#<6} z8rHhXQ`eOl85`F#9NY2}&!1lyUTK;3-~k7j>tBLmzpyQ-;7eF5ZEp)ulV8yqE42PO|3POP01~xxd#~?~P3H`k9$R$M(XMNPZ=+d%nez_G!dK zY6%;eLtL#`!nP!}gCSNaMR)b`N{uX>?4O+W5~-BJZm~AWf^3qDi_4TrL0jX2Qod}X zt+VNEjz9JXQ%k?>MVBxSs6GJu=XUtgWP=(Uc8wRbh_KYCKP)NNW04lVT`hhAgPtj_7o8+k`pO7w1R42c9^QzsMCLB#GqmrH1#Nl4 zx9KOgzc@eBBPUI_Y}q2OtlW5P+ndvh`Vp31CW*R-5^CQ(e|~N?FE2Gs-!h=qa-<#E zZkhky_3PJzXV^=xLAIkKy{aYL$;*@5Dk*92=%`)F_nWzERN*8Z1cIWjuD)jJBCrEw zc51a82uxK~m93|zA;<^0^1`2&@9s}dPM*3M>jJi-w}L(20W79zz*Z`%SG-zotAqp+ zp@}qu9wJm*TYE!WTU(lMDG&0tfkb43UADA}N=9PhCS=Or%)uFyk5bs!KG3z2^^k?# z3QX1u2#9IvRjs^q=lQm`U%x)$S3Yy!Dl4T%d0G=(C{S&0wVaPQCB#N{U4L)y{x(O0 z<9z+%?cP`;zJ`W|L^u{~-MW>`7t~?TieB@ppN?QvxDX4|2vN1hKHztJ)!b6jOVq6$ z8Oe-@hEgZf*-Tx1|A05F|8T$m*recbWv z*ail@y$Qter0ikvFR+$$lY%6DTH>`XdQ)Ft%EaWP+nF;Dq_xJCJ7pW^=8ELwg1|1b z^Yc?LUi?|E$Mr_xB)D7Mvu9_$=(p;m8>Ts49IS~~Y5Mr_4!JHTCkfYmtlznA`MCAY zIPLMSa_*8-4=S+<7`kD|oqV9oq(5LlsZ9e$Mn-kx15H#Wk8C#~I})e4nH#Gf7#lm> z?j0A|=bAb@OZMl)i4%SAv+d!+g`NyDu#(^0QA$X!;yv3`$6OkyZCZMIe`A_4t`HQW z+*J?ePpR({*3ygf2U+TKb#->WYu}V^Yj1y`TJB^04l>2Cq?9l1bXu*=y~?+Y$?@Tj zdzUR*7#I2V^aFe)B>di1AHBW2+Q})&9#Uu%dhPNU0te^j1B{yefb=r<*FWx_6Bl&cJ@v~ zdlUsDk1(wro(wlv*Lw;cUxb(LC9Z!<$vX)v7on_-^Dno!yO@*ze#=n*T`a3D&qW=R z@3E9#(>FIeEiWfmyH7z@_RaaloYHaH7j?=kq;5=_3dC$zE9Em;#GnTS1-Zg)Dnl%z zh+8n)mG&LFcMTSEcXuC~`R?M$_-7IbprOG*;UIG#O-a+jH=oLa!;?~!FHD*S3#jPB zIm@K@mX3Y*Pcmpt1AXRw?gd`MAI?7C#-qIK#m9q@8#xxh#VfbLamM=e zh~ogPlIv@$tAh~IW!HtSxO;ev4>s=r6rBN?eHsN9#D^${+Nm&dYisQ4)vMpyNO#57 z7s$)X9>l%=PyFVKu$Hk$C?1Gk?S*fY1q;|?Z_E{7gfCyx>!equ7ZE4eCL@znf>7~6HYuL0<9(6frpUG(kiAU5Q^lQ#}5A3p2@kqRgM95i4kt&7n zQpLcxZ%2R=^;1*%0o%QJ+r7zXc#m<{C@obt<-R@*c!R2>>=729R1as;HAR^U1%<}7QwT`>q#c$$;JN;bCBG=$?8om;}3J+Y3hPwq4{P_bb$ zr>axh90{P)O?3(i3i`*rqAdZFnC`&9fEO=HI$(r>X|)_8)Q$z{iMo^wBq8iN!ex4T z8UX33=reT~*a@^{2rk{LE^4GHUNjY^8Z=tBhs0d@xaE+;(EC3trsd0;%n3#AwuZXIVVM9H z{ScvOOGSQrYio70GhZ*B+=*CAv`x)=Y_!#9dMJ15V58A*<`!uUmVCiw1bh%UmcQZU zNY|ASqoYUPMwDMEl-%|9v3&(xsonZ(JAn?wtX@{*KsC)=S zOd?N?JaHe2Mk2%D1yByArUo*?%WR}|i#rTV5AoPy@t$ECo7(c-4*dG-ug=xBtL@W1 zfBwwOak?qO!J(ntfRFBmfpLO1im@(afb544H`u3HovOCAwA^RrGamjRyTTme0NmwC z^z&_pBP``n2p?X-zU18QJu8Hnu(5%IhyCoi4F~^+H=V1?jcAqElTyfO6d;)GUZWu;VUugPmL7#9~kc*e@IM?fK{HCE-Bn%>^t z6)%iv#<`BR*hB`236ev$t9ce;+YKXrF{nX&vR3&v`L%aOPfa|nzOPpt?hGcv3k(PE z5eWvHk}RIlZ8W0)ihzXV0K%dO-h*TYa3-n~TOk1yI7gys2F)~MVDE$UbkSfW%kCR6 zg^FJ~ajRXsc9GqaDz$;R;ZGF_NSs0DRZ{DgH!vo{%Q`#nLT4E((l;<@aLf%?hkgX0 zq5_;lgh1BJ_lKw&7y`61HLY#4ji$mN*C=_8sAl0=2-;r3(+ms)Sdm6lHl>^BfqF~} zM^@(hOy|V9FgLc{8<6g2O(u;8!*LB$8&WH}GnG~8rUog8>%@T}?cP<+$aUM6hL;Vs zLEfTR>c87$NB6cbW`pDnB;oKiZB8uj_Q2rV=7{ho;3O1~;Z;n{bix(@PL%KMfUJ#YkZ z8K?HQfICwdmG>iZHYG$j7)dA2AC`y3pB=kRQaFC#O}U;6e*)*c`WSxm1#{nP{Q46a z#q*{rvtyxl+0m|oY`d330B!{?_|AM)p9PfkyUOEh>U&T8_@`i%RLFWIf0D|JWUf&l zlGXOoS8~Z&OBXF9jvwn{m)jyQiA*jUSy}N3vvJxHr3nU&%WRGx-_!GqF9AHGdwZPr zPX6HWN1hDu>T$3uuoMGOG;kY29(odCAQnB%fWh;Cp}+8P%ZcC2!^#l5$~nHp86dS_yL1ZQrKzFZ zj<*BjC|;(4LmxiuCe$44Iu!X5EneA1T5e**E1Zr() zfAPA0^c#Vf3K^2g*lj&^_5RYj`N9vj0yI{R$tq$20$z2 zs|pb!+|x8NDMc;e23d)`6a2Qq9Ob^2o{y%zz5V;v)-V@sVgybB<+rHH3n#sJfp`iE z3JBe-2N@am$T_Gua=<;a-rAwI8BZBzawcGHv?V@drBYJDbRQB8#{^w(!DC3`kX?ra zH$x+2d@X1!MDxHh)XG8T;8`r1M0`HKE#2yubGr{5I3Rx@M2I|<3GxIdQV)xQK^)@g z6Ss{Pg-baq@>hCiC;}#`TTo1Z1KUeQ-G>XBgNm4&?}d)iSD!3@fbWvmx8Xa;E+CEJ zWhj2XbPyw3HNSsf7r0giLsPe{33QEMn#&X!$Py+Cj;N!4hFtd!W4t3E+%11a5eusttYrV#4X=#1HIF!hipje<*U~yp} z5J+M}Lnpc)WoClRREMyFt3M?&P~#qf8L5J)wOxhLwT^u{<9-N@D#I6rBMEanLpFu4Fj zfTC1E>i{E|3r9!qG!5ARS-lDmhp{uD2>?0>Dv|s~aswDE`bk!BRKp0{)#d@`HoWl^ z3)gV2773OO3b%|h1zLuyuV5#^W@x{P{p`q1&CU5s8;uAxjfsiD`;d2f(Of}FKqZ_p z`X5Qe`cb2ukBPs8ib4hiZ4>>gjHIaTmY~tqHK#!LUrXQ45cQv4~7R;<4gX)x-!yQ($>+*e)NcB ze;I@jk~%V0y{mkKc%u;&l`b zO_;zY$hBj2^~pLgNBd@|6}~e^pqqhsP!W=(SjVN7@N_A1j5hQVhzEo>o!%3)m;HYxfvY}t$o zkwv4RI=G_e3W2~zDoQvQ*#}>f-LXtjfP}PMvLbq?{H1)*(Apnlg8>E$QIH{MaF7HId;BfT_XuAVcFeGA(t1jA}*hbn@BO1squp8nG z;xZS`iWaR@DXAhdi;B_%1DByKy$T8ZdGEk98A23Hb?zA8z!@|M8;Z=BT{Jgk4`4I708Nb97tXeCBGS)r zyO^YTfW$e#p#=e4-yR}cd-9pP9zr3BI^5)E_zH9p*fDw&WhFAUA?k?7=$Zl_X?F5) z72X+@b&N>@eDL(ikMyQ2>l#-`qlVzagxV8XY-C&ME53wl#{v$)NW>YQk$Ni&YzgrY zmkaF$-DO-cdE-B?kOH9WY!0C?k+KM%|$-19*`;i9(Oui{hG)hi#?3sbAYk zYQ!MI;O(govh&>rkl#Xx;0V1~;z72NnOW24&q>NZ6X7Lz{u?J0G%%ST-^E`yY35S@gfLDv#djR2%bi$wlFK^s~hm=Ov| z0-UIRK}Y%_S|h6yW@H(~uXy@4R$|!L)C2)t6b>1>T`jVTx%C9{AL5%eMh0iCN3eqw zm*FmCG~d~AgCPb3<~D@8zVOBlNSuTJ97#p3ahAt8`NiyCQ%9t*egMhx<>$DNNYmwNj-x+A(v7h;?d6 z#;6w2U#hSN*nv`#5Yne1c&L~_5RsQU0v z>OM|tw+xVdLL~uy*FdsHPFDA&lFkSK8jx;^!rj{&z~5GfE)Q8o3^XR7(_?6PiqL@& z2IIT%B%OF=oJoo91`wg@%NKo+4MPTtSGsbA2puv-Vt~%ZNyN4eESJ^8_#u&vk2jf- z2xT^==+#Cv=%k=XK;hYLNk3TVFhABz*i3YiSIh>EFxUlqQV2L>=@2MzGQdMUkzlTY z$Bz&}<|+}&p?w1jJaFKJw7^U=w(KwE12~CsEa*N3bjcb-mfOZ>6M?4Br*dzsF1x9)BC&x z(DVCR!b^(h(oc`9(62BuF`=Ry9DvZs&vcx)Txl&LA_|9Vkl7-QdZIkLhBhK|wxTS( znY2V8{h`qJ&d3Et_4v|S%WHP#4ogL{&H;yl#3u#@fS4LrV9-&tpx3bzl@{ujHNj<5 zE84wbldRJWh&fOZ+wUEfU{-j0R**n?z72#4XU392zzb2A{EhJQpHU-tvhTS~c1kXp z6NT+qvvs_!hlc^FZUN7PWVvAwIat$eHG>WU=6N7Q74=Xs6YET=8BO8p>&hUFRLjLB zi&yfLJsP>+G>|WfDU#z(!dIm$!4}Y^n43Z0xV{C!0}TRxQBtxGtk9YaV6d(X(Kclg zokZLrI*9-es#%aS9}ea-4I!|h6Z0V3D-_AItcNJRY4?VUC_bPa?CE z)4d(VNm7a_FOjg{0D4g(0ex?wyud?B8Slt3vT23xfU;wnGH3CIhIENZ5R1A6eC zVjP|9im;4AA#B=YmyJgpTuK&!3OgGQ|G$`@94pnmRks-3Kj|1 z059>1%hm@td5(E0#pM#gxz6@d&{M*f08oT-jCAT&Ek~*qu1j}-CZ5peQPFv#MgzB` zQ;_KSK_&=x0_@2`9zA?`yONMWXh}AJt_YUS3vcbiNZ=E_=u;CVNa@VCgSgdi7n9*A zA}*OL2&heVgy#W;2%e5Y^~5T1fB`2S?#N;WoGLT7n`Vb!aDrZ-(MiPB#)0v%V85BY z0I&I(9+mOB$qv7ac;6`sh8MmhLlE$RPvA@UpQX&15MmhM1 zBDyai4>1tcNTEbjCcFzU9|bMP;ZS~rQvOo71V{neQK+;?@r(MEY!6&4-*YqxVSbHQ z60>fB>Qvyt=tq~k9)bxn-3~tFSoAhFaE#@{X+fC)Njg#4`Vaw#h|vvg5#=SYa<3=B zGO~13#(P$9l+^xj78%0D>bmA3FtAs%O@6bHh?D~;#Fz&_I7*JCQ3)bfN}e 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 literal 24784 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 Oud8M7Q`**jr~e1+G|zVc diff --git a/tests/src/end-to-end/images/__screenshots__/images.test.tsx/resize-image-chromium-linux.png b/tests/src/end-to-end/images/__screenshots__/images.test.tsx/resize-image-chromium-linux.png index f908dcbbfdc298aa6aedc6231acbf1afe272182e..9d9d4ac87cef66df858b382f2a0fdabd58644a59 100644 GIT binary patch literal 22566 zcmeHvc~I2X)@>)6V4~4ngGvy@L=BUoCo~ezxvXc!FUHx-+s94UHszuwVN^+W`nw4eqnO-JX*~wQA{OF6NfuBddBf3{_E}`vqkRzbSpT*F%2F6ztd!@2AFI}IPZ=}fz2Ze@J#i3x;^ zzdmV(TOFOC-{&23-)2aptADkW!T9B5`xl=wKF{x2%1Hf}RKRSKS*BGfTi2B%yJFu| zS(eHN?=D&M{yQJrDCtG0miDFhC14azk#yje(zRO*FjCEX41)_+S*g13fB(5*f`(Dp z=9rk6hCGLsvFdPX!$?na&j2|ICK&rHqdwH(&7d@@g8MR8~<*bt}AS zwkJMhVq(H%>sn=P?d>)}bUCAn9mjaOwA6RXxZT-oc=gXoR!6O^TZ$uUPHt0Bu(v2K zE`I#v$s_r?Q-?eKXENxI(JX^3F&iZeAsis5`mfE0S*1_Ax*Am;J$kfWUd5&3(dJq% zH@$P%K~=*3`0+2Y{KlKi9(Qz@CLMY>J6p1F|C~6+#^fNyBA;<~hiQ6~NqUpec6YqL zd57_FZ(QRyJ07;Z`@?r}ETP+N?00+ne9-?p^BY`nE8J=m^jXUP#x59KkT=Ub-Qe39 zJv`%cEYEzw$$8)XH_rY)8aaOt_J5vj{^AVm%RJw5ByR9!hfpua9-1>&Op(e4gCxrUpder^iwI>G%!*@~mfPZs4(5H)8XJn|V3S za*5pZLozpxY{ioru}wfIPQXFu1yZ~?)V%zHg1qwbtQ{-X><KI?3P@IkFavlQd{o|@>U(@O4PxcZMj zzOyRxOJ#atrOeC<-=+KKeuk* zzR}lbhlLDOzsF$A2H^H6UB)>LL=h0QH3dD+=X+sj_>UANuJB>Tvt z)Ybb#SFTz`?_#R1syxyCp;#Aopra$<<#Xe+ zN?sg3D7ydUj7UWtRZIM>psfkh(EVrEk;ETZ1_W&$KQ@k$ zxu|64Dv{pmXm4Y)FW%rl*BOrN#ZUJeUBmt7=KO%EEMbYmhY!PvfMSoi0f^{@eYxGL zgjO^?SEgkuQ90dpS^F0D>R_}&-}C#Ia+>Y2Gxh~-(|oSB$C)!5d2w1g=}irDGn2~d z>gn6dXN^;gbt}a5XKPHe9{tA&$Z>c zH^i}keFEmEQdh2A2_MqZ`EaSv>ye~WwzlK<*IC~%&j1)ZaR6};$1)P_o1dGp-yIus zYvZz8`T5sP(^FzqT&npR`giN=LpNxg{Y^DQSr!|9?%c5h2M$d4#=2nhlw`5DMP9=R zpFL1Z&B)m1PlwH|n1wes$cN67~+KXTkXE=xl_2$zPxNNv(xO|PEa3&g9$yVw?&^118q zGBw^zyIgXm9@9RS%A|iMD>igW?!*1s7(ZziI{44>ZrDb(j4-O5zY_Set zite8ly(-gCU40P%w>$15+<1oWo(j)<`I0>`Iq9)_w~EU6>sK~N2&e5Wp zA58iMJJ{MDfEP}GIOlJ@e*Jn_Vi=!w$OuyOk-}U3{rxcQaE)5(#%1n;c|SNp=_;F` zn|V7cUikfZ{KmP-p|rNaYBgzJE4Zz6O8w~@AQIPByt_oxZ`y>T7JqGFWym~}$Ad!i zOe@4nFUwrKh0wCfl4dZ@5D&Ve_Gr*EFE1~}^^v`@Ws$pXu+F~w-x}egQJXKoxhWP4 z3)7qn(!qA>ktm2eIAl~Heqldlu@y=yxqKx}%?zK?%)Ln)9WtJ)He)y8U@>*q<5+r) zeeSo4irB{roFDKtg5^VO=B9XwSXS4L3UZS-cLPI0xWWAQ?(GZSbn#Qoa}!@5Ja`Zx z_gW*4_0oOMp7(NdbBnzB*Mk)Iym#-}q01XIDRy*WwDk1!m*YO-fr>hfjg25=#z}{M z$ukv}f%GQ(z85dP(hZZ*M+8+={5NW<$Oa|x584Y^2avn5@H+E! zuqETPYs=RuyeR1OKV06~BJ;(EryU#)Ub=KiyaiDYt0;#carX3_WXi4i*aoG-fum+w z=6e*5DK9S%wx*Yhm~L%7TF2!&SioDb(c%a4%$o+=3Yc5ho(u|A)X7rgxlfIreCLbb znwps7KAI`5t*!Mb2csXIR{D{fj3O3dBUx#lPB~@Y$2KN%k@y4H+sTY3-7}oNzQ$Ap z_Z~ZSb#>&s7S)UQuR3>@W$2}RD)gW_HECWPvf~C#pKE`7^PAGl%nYbkGlmDh;#>!l zR<*@mO-$rBVCUOQ&zWKMc0r1AYcEaLSkGUz_Mh61AWzo7P9Qf&@VxaJ`^Rs=7hFN= z9PI3LQRXa#r4?qM?za}O4_w~RH!^a_EJf zD!zuY_y>OcIu&zp&1cV&8g6D~^%oD9p}c)$V1+y>gLGTu+VwLh1{rv8VBp0yIKPvV zlbysm1&fCn#|ltr#!$gP)s>Y~%IC+k%q=aOu$c`dV6vDGR)I8adl}q|_jPXTBesB0m@*1tI-LRPZ&3VpsF{K2ktBEt!_#d8T$q zrI*hQc+A;Bo^+O>;qA~*dZk^-L6rI1v{ z3jgJLGu1GW-R|6f_&pTA*;j#BuE8bMkf#1|CA|#O#-qsRsE(pbztbu7oys|N>J+l? zXKAgDa?9RMIeO&Cq2&69fxlk4QV-FgK`B-rss7o(h=!q&C^irJioL1?s^VJ=P9mbh zhOc4hD$$>s=-*(dJ$KE_|MfGGxh^TeAwVyQ%Da8*eokr-C6Q?Clbd;R(KYsY=HgpI zY}9zj0j^dhXOong%?U76i1{tE30k{u9YHu?o@!t;@!+3B8Xb2-m}%I$bt}TaZyA?= z>-XP(D=pOwUR{|DjR;0a4qscD?Jt<~QjXOp-!Grw-u z104R?$mMIGC?@((>uS%9g~ zHZ+Al~oB(lO>-XL$zjuo(W;291kC9AIx9j>S|{5@J&FiYoEEDPL*6{<5c%1%x7Bz* zHsbRJ4h{}JZI2(vU_nb6s@8-FZLeRy9&sIOz;68$+zRn*BDY3TT6Z;-;8z-kJ#I(C z52ZILg=}0lrhu}ohq4sO*dwXwGxim5 zLd3>pAT3%VLJk*V6J!Lr)2;wnKwB_-I2qZI%8(0%=Jy*Ps$yF{OEQrII!ft7eF^&# z9CqOMw;504uEfS3j!9151S+zs-noD#ipZ9f4zYokq{xcCF9-Miac|OZcu*m6xzu%p ziUn#zkYdbIn;_8B22>=Fy|f;_x8K}&3uWpp3yuVr=z8f{JUutr+2mZHtOsb)UhD<_ zJEo?}do(=h5eIIFksEKeI};_;4LeP4C6mbQKMXvkcX;bsp;1t0kSOeYN)w)|u7!Ek z!H=HCq1qwrL4fucAebixuAtz30@#SXMxjLZkjXRGhoLLMlaGtZ>1UY2ox;BfG6HQw z8Q1BXobhQx(I!;0uo!rtxX_|lp4JwdAoz0GRPXwXn>Sy;DJtK)cc^@J^wLmAX}W!$ z9EBfXEr2JWj}h#EVhQ9lt_FplAk~f)9>_sL0RW{Ddl|NQXGN8{eCK4(Oc`#8!jJNm zXPRifFnbgnohfiKk7su&^UKl(APja^oL()|> zr%NVMFXkF<={h#!SBj2HFksjNv1HvH6*AE^vcW8a<6@G9oqP7|fg*xP zBblVVy$RVm&B(X2r77L4$2&nQ53L;62)!-(#tR{Y znou_N4Gm#ud5AUU>6>+78dM`fkAt4Hhy69%%T16bl|v9Wx~OVhVk_PSqVd^w@zWGV zTBThW>OhbpW`rc~(Eu#f|H6xud8T+B5rXkpugE2%P1 z*M)~xh!Ko{GR8Z!buC>oH$O8BeWDV%-5f0-aHn*ci(^m!Sc1$NY>avJH*Z6Vj$ey3 zC4C%V64lIWxC0_hqfkLXRadG8MkH|yIAAY`mnsbQnQS8WuT?;vjXPW+hIJ5QLlz;u zMt8N)t>J#E*Hcr+$$iW-s>PDQKkOusw!^^}ltOl_7{3n5W2HmJXAtphf*Stix|J7a z5TmGrB-ZK64@PBB(nAdr%ykOvkk?UO0Abd&7kM0v)Z3rBKWsB)G+Ct1$>B~j(279h zYcvAu;d456O5#PHgE7!3WWi6nfG@)#B`SwJJ0k z^}bIDX%jP&MsN`l0F3ohO=K8ggNTKCNku<Ai_#jATQMq24*m<(12qKqfaV0u_E?*fj72dX&O0mvp64HrY=1_QzaFTE3_ z9Wuf;8%b1xEunG}`9^*T+bmv*k_H8iiUVmE8JU@EOf&+f^PB34o|b?NViQzpE^uuf?m#Hc~cW~@+^=WeRXBYzH3-1EUAweJiNSOQ;2 zz!xcMkhJVfWklU^+q&9X8DR_{qkWrw!$JX5#f1ha0vHh_q-jBh0n2g)zOu8o*Gu5p ziSpuh@7_&l+z3T=G3ARO?E|`?dp$ueyApu~z`u|57O|gwtf7x&p$dqs+VBG6G7=fw zsv;D03t-a~YIi9zI#gRFU5*-rujIzNV#&xIV3H7E5ve((VCEi3lHTi`~LwmZa5Lq3K$ z89`z;C;|E0Vc~Ew*DzlsoxiHfKUoG)V|=E^(khJPB5#$H+yrVSc@1fVZn-~H2e1gT z7D@=12IM{`K&&n?A;%7fKwe=4mj50wb z;jgM6x_~2sZP3xDGXWsA4M!YE+$0?)1~glhlusmn1!Uf?e?lErl31y{vU74AH8NF+ zqlQf(-HxM{@}S3U&j%=H&`;r^V`WGOKZvXXk>|t$n82_pcDrNUIDJmYe66{*s4dCe zd~eG_xBb`$XR2*TwZh>;e6?^MVIj>Lpk5>C0a%^#^fa~h8;?ZIpBeG9#*qXQf-$JJ z?|ku_*Qua3<=y6j^!C{b#pX#HJ;Km`A)5vQc^dvQ!^x+#2(t#-frV?-h z0zy9O3qD<%0c`@&pvM|~tcV@Mf^EbR|NRYJ|)U z^d|#a4Nm|eQAJXDgNUICf)oD$FQX!kTvobvf9M7+-y5ig7xPRZ&fp<+S1lFk!w4e8 zEznOd;9GMGi$@N~HeH}+MQ5IU|5*yoa!@@bj#Bj=<2>uri=UFXh0g-B2+6#?k~lJ> z_{o3(YuzwJnhF9R833qA58!Mw94!TQhjyq>+lNvbP6!jQ5AeLuT?p}Hmc1QpoMB2j zn@te8hI4^O9EdJd(#2BD`$EV+kps|p=z!V-B@bEQ77~SFTIVp1ob*GQ^aMhzwuBE+?dNJg;t2LFQBg#0&mdY3y7qOVcImf;h+N_ z{hWkQ*^DLtTvrKU?ULJ!#3u`tJCbD({#3{oVnBpY?Hhnm7bl0lLlKJ?f@E(6mCHI{ zE^iT=PY$&oE^aq%R^!2zi01KpChokWu7U52IC67MgM!A_s$BLIzYoVp-83|zWD;C@mUfnsc@*_ok$nNS%J@13p;bn z7zBL$EjS=b%MCQ+2-Xm-fhg;QnlUlhhMZ3173EcK#lDkA!!{#AgK^ZR4fLOL)jZ?6 zD+Dn8y^zNwDv7h7%vfVk0MHKX+~;{4IH7)K3BU{N6$cB5)QE+> za8K}q$}0&8L@#BKlaVb+0X&4?(5LJmI1_9|VxV3uaDxts{T}^M2sD6XBS?*u38W^nWmuX6KSeeo0vXWhU2?beb*^2Dq;&e3gE>ln1m6S2wXiv=^Rn>GB=QqlK-AS#(!fBH0d z#;}dQzZK$wgm{E@I;hY-Ro>WG-(e)Q-b>rdKIDM2{Ks0MY@>&9o^{ni0RcgsHzTp1 zr^Vo-Xv*5%%tJQa!@)kl$_*tD)e#U<&w-h67wQ2)I9JjuwSppJ8iO7$*5&t4bTQED zNkQxafbNk+c$gsKT`>YJ5++@R#@`~dmgL?2X*pREbP-S%Ziwuv3(pXapJoDIjZj7( z1Tk-i#x)%c_=E~G8nxt)cu)yODtj7N)#HZDsJBaEC2;a4aIr6O2n5&?0Uo21{0U-E z!X~Jf$BV2`OC^l}!VB;s%4uGna&Q-n^NXSmp(@A;vik7FKmR-g(Mt-MSqNz5>(Dhp zDloV>JX3UTG84<`F#T%_Q8TFk4iyihEis;tjw$U25P~!`59GqW0KsIyxVC_=Efjl& zy$>xMqw$%aEkw~Ib(~@V{e$T3)~0~VDEDY0fcV@-)j`9yLUHk|>YY{_>Z?EVP5{GK zrp8x4wnOS$@IiDy#Ve_|Q(Iem1Ibe#%p8X*)&RQy12_lASEx$Dns{^_K|d(_hzVgp z%+C(ET>>#o^ae^cszx3>EF83I4A|M>)G3`Tpioj8uoL0Wy%R`C#7ZB7R#6WR4Grqn zfJV{Qv|x*fl4fLOrMEl7%9Hf~k1y&sp->W5!*QCOf>r0vtbaM_*C`^Ho0=Ek;6<3n zN1auk-yY2O{YctV(&^(RS-z4zLW?()aYoNV=9#>zyktI2of2w0YayR9kjcYc)}A|V*_ zDP`~6FS1giDnawy=qW4zsh-)s#Cf~5m-Z{%pW^fQsR7fe-hC<2qo+IvA4e_`S-F&P z)>izj^A2A!dwyQ;{1vmOE>82@?#|g>6@Iy3Qefc4Gj{h%@OhawnNhG;c(eZ4o*T?=rSYm7VkTe4OK(!#jLJim0lD;E{;y~JymhT1n=G}76Y?WeEha` zn|=MtxBpmYb$V7=%)wW+ySUwGVEdF!mJatAKk;a>Y%M+Kb=|%)M6z(IHu&;FV z^9Rz2wad4c`~qfk%E@UPw3=G6P0Yw44h+xgt-TVb<+q2c!T;LIr!U2VO`oFsiVpiv z7W3~e-`Mc`#A$oi4p8(N@(`bM;a^)BRaooD9k>DuVI_53mBGjoafPhm$Y0DMha;)}xo2 zP!bPoZ}1)YBTkL=8M-K~3c0OYS82Werbyi-+RVy(i=o!k2|Vv^wN0#JaW$g>a8GrX z`L!0ZY)|DLtq?o9b*-A$kcB~_R{Y^qgPuq;s|P82&OH6xxv(ed>vr^}*k!m3-sX!(U* z{p?;K{|BkrjRKxvHqqiD-RV)<;nr-M1Ax57%rv&U7gh)-h-UFPJ#GV?<=QHpzAUy} z^tZcXdoqiMs#VIT>S&EFr&z3Am*zFJ(Tg7zpyoepRIlm;GcPFjh)LAUwYDWT6@ z*=6e{Tci%1;9D!-SNFFvnQXcC_#sZuV@!LcS{d{ zhO&Y7VwIMQlIot_WN*BwQ2A|kRd4Sp%087?DmF3Kp(PWmaKtJ;c${l%I8-(>H1MQw zmsukPbBm?dNxCtU>0H!zosz{BF0a)9LI*8(VyHc~;9K|}y@1!|H`0x10NmI@lM)7c z0g1<4N|kMbEVdPU4p#e3wnzKTO!S!N1_}L}u) zWimlMqD3~G-FR+d;6c;x2tAFFJ4?tQqxZyZx}%OcKhT_fg7#JZy%0(DQGk1G97*$I z%egd>mk*ato+>tBk|8Vt=Ek4BjOFqQ`5bk`%;Yt8PCGVh6kfD_W@4}=?{rXTtaFhp zz-$05<5|6wtI+D6 zvyfHkIBT;~N-GX|ZDitOo9^qe&eg~o{6Uuhb;=av#amE8dvI)!Q`|W>1ozpN&L*4F z^b`E2`zWcj#}}~KqnTc%@_@kS-~dGoMx){?hDDd>z@MS&L$^1nw7VZpI5$-2J6YUW z2gf*u=6Bd+2~U$|p9>#nS4SE%TMJyQ$%d56a4y506Q>p~)r?FXjl+qWX!UckWY0hI z9L$DbF}ianI09>WtZ(*rx+|?0WddQmTwDCjtqY#G9TY||=I=~NqTpK(4`q6ne1QDV zCg>LvCOH^FVf*%yk-fC8lG)LkspEqkrRoLkp2sM|)}G46vUaXwASEFba*#kJw0u=5 zt5e;f{DM=1h+=Ofenp)MF{&>sH)#C2-udHf*89MDOtu1GHdIFFqQMw%JEc zAkM~v6nDnfxwU(=^yIfW*Od9qY92t}RO^}Ay0s9p|W_QT%XbE8jK+@3;SLJfLXai}H;-4bvz%>s@ML zTXjlG@W*~6nZgEmr*p}xiYI68eL#t+3_jO8*4NnjsCy1nJ$`I1Oyz|! zY&mijx-Hq0iUv6WPO5Jn-=mrG7ObH z@+x+<`U8EH_6Wj3<4BGt5c=dx6k&8d|~Rr%a`_uU|Ikr zAG=r)##w!4BxXhHNh{|2u;sMhXUh?M!0dA$wHF>?_8i#HJPDV@4354Wvbf2+$xWx#U}nUvn(eH!;3$TgJ%hugWNXo3Z2M0cXg&*PS*ntXiB@hV(o} z1+!B%YJQ%f{8&kVxuU6?Ip->?LXUa&XsQgo&uHAeisAA?Q)RIFobzM)iso7A|E=YDMd}BEqf!O9+5c_#&k?MCroCV`0*6il?{6z*#%ai0jwp)gmw%(az%_cG6taj-0(P+Fn33%2D7KzgD#lD>qnG1=T_}IJI07*# z5bIru++0vThGPN2Evm0X_3;kjimVhij$FH(+Hl^%gbYS^hq;Q>!7}l%2_on>;yH6q zd-mRJv&)<*2^~bBT2~SYAkw)@o4?EZMN*(!5oV8u(vy~&Pz6fMh|6IVQ}$AxC12qvpTkQAhl67s< z#Qp95ipR=c-{0PAKl6NDxmZ}MV^j*ZTZr6*lP5QT6Va;v!IU$vGRe~CT!cn;`@fMqbXuxh_4b)ya$F34@V!a_LiX(A*=7^Aj>whQEnW zE}#&=t$E+JOCnMqE@K4f3P1MOP_UOq}#=fBu&KOBZyAr3qCSbW79glA7 zx%2?S&+m5F6{#ca@eqcbCZAz(Z()MM$Z2f%mWO=kHt=V*#c4l3O?(lkRY7X*#Q{Dq zV4hbfO0>zpOT~Xv+o06^y?|d+1S3-O`!b`nr^2-#n3YdAX}o^=L*YYuHp>-EX|q59 zEk1yPR8vu*6NQm;%E}T3N3$>cZPlL1)sC%s_0x9WPjIUFY-YqN-=|9oC8Q1Fsv_N? zh*^Z-@L;dr9{<_13YGQA2Uu!CO9-cV7!C_u%6OWGg@5pJs3dA}zr5u);E25Mi+xhn z_zqk`O5#jmV$F9;L~`QiF&_|Hk41J$}R4749j2ydQ z==*7O*Pq!og%XQf&NpAM^zDZljFuZn$WW>73soLAJ7kek-UF4PYb!5rjP-oB(LTd~ zJyL?#mAMcz90SoHQVm=wDcrsTQhrJ<-5({s{*rbTU(2z*s5M#06)I)rGhPCP^0~Hh z$?HkQh#~Eug%a>4YZOW#dvhDIZ7N4~urd}r+7bU>1ecPLq(5IJU>7qoVC?d|QIrd^B4{!h+9)klaT%7pktISt)R#8GrnHw6OcP0XwIQt;6wjpc&Wma$be2XCFvTygM z)|F&ONv|iNDdewpw4L-$(vFKSnJTqsA>Rx)S7AK_WBK4id7tuswJt!hTrg9fIGB^29SSnm6HHdHvDwtt121dE zn6YZuF$FVWN)XmeVa509ed`-H|CxdSb-{e6U}h^xBlo1{&%hG7aD|0cUie6Q^iP}1 zJy>PyO2L%2fH(WdaLy!uwjIXh|LY^e?oCotUtJ%d*=q5xaJ#MNYXYFOaJu(`;!O?M zYR5vN_G>i|%q9x>&`5?KwBXdu6X;n}Pk36q zeRsC?;hPgLve2dIVyS5frnn*uM&{4njI%XBA?ApNC?o}V6mRchidIkpJZhis?VOFB5=L>? z`p&8>O!ovt56WJIC@bixzvi;Om+eF0pg{Jq0;pAg;#w&wv@MP^TD-U*olqr&Ph(Y^ zE_V-(O>qOXTvE9K^L*5Hsr>-VQ4~}!>XQo}9yZjBB%e+-h_7xy?jVgxLeoddtPL-6 z$EahFI6sz3u*Wf)45&>b|pGQrsrbnZW`c@|2qE^Dh;e?yb^} zlkaKkocEk>?wmg6t%-e^O4goE))=kY-I+l{RO=eX}b!)WlBRx1PN}J3lP& z&#%c6OlQ$p-kaV`kw!%o8a;(lhwpma7DvuI=IH3yZ9h}jIa^l}UpAiM(j)EvT-vQt z(yM#?$+_XusWy}zp5c7Ap->t(Ye2W8!*}EdsoFvoZ&XKE3ZT`aloLden)$PG)N|_Y zy0Txk`#wW&h`>kWVPDOSG_3<~UUBWP{(ta%>*cknMo&U3S zIg-x!YKU*|uEh6T22k6P0S}<2TCCS$oOh@ucLf%Kv~_zoIw$xSt_<9m&Ng923CYF# zcP_^W(J@fEkYB9-_^qePOy<)A_o*3?N5bzh&*6^vbSIqScqT9-t|nEn?2a-U43J&z z0G;={g0`f6fo^${z}&~Er;|STFlpZ>qyTRdk}*P3K@5u@*m58v1jC7wLAb?*2ehZ_ zEu07f=Jq5@&7IE7zwAGj{0XrF<3-F~5=9)$!ZH7q;JrJ_H-+So7#LtI$OY_jr>zh7 zgRXmSbRd`8+Y@a~DrT-E6+fzdmo-Me@}I2?&=5|J-XU+JzA&{D+m555BfOX*u`*z` za^EOPwa}8&h|^Vk#T0&lnT;>nn4o(lq_ltTTy;k|bAji9+F&YFg&}T3v0PCSzrp84 zlE&D>ecr{wpP){6o8IWZB;JA|;z6|R#0JKE*dje4(np#pMk6&9vT)Ep&JX^6WNQu- zSfu1P#1LF*Veep-5Wo^e;@hC&;EH-Q*C7s33@W71iXn!Ai!vMohd2#zLNu>IQ5P4r zcwcC%#Hy9BBsS&+vQ0a*z&&Xs>bn9?zM)79Llp>;6s#1a8ML@(%in;>_u zMSFlB5mA0aa2X1ai_`v^3w;IPKbI|Z_mp2no{AGeHDM~4;yafo?9haOgUoBZw7)8LVl4( z{zls{zZa@VkYa<7DAL$O6rsC_JT*393O8lpihoZ_IKZOt((?OXY6R--!XRWJp*Heg zMnQV{ufqr%zjz}>sHcz~;wsc<$lEAOEKEUoy_;|re@#SaAY`Y7-CvL07b-eJacA%1 z7$g=Yy%CGZ5DTBjO@-4~RDVX+Em+cFL5l!wW>JV z_S+-(*zA%}GQ{lf(EdJPGNFtW9%8=pR8Q#Pk?5^O3)2H*SQP(H4xIi(F#V$BO~1Zw z7XF`kJC6SSN5$4o9HK_0NfH##}snG-xvLD2spvt9`QdA8qJI>+nf-EfQe5iu5|Ys Le3`lToA3V@J!eiT literal 23338 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 JAAb7vzX9)GC@KH| diff --git a/tests/src/end-to-end/images/__screenshots__/images.test.tsx/resize-image-firefox-linux.png b/tests/src/end-to-end/images/__screenshots__/images.test.tsx/resize-image-firefox-linux.png index f5e64ec07f861e330e16537113e7a301a966a7a6..b8244698ea975032ef7203050cbd607cbba3343f 100644 GIT binary patch literal 34317 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 z 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 Ne(JcGv2*|N{{Zc(JTm|Q literal 35318 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%0AFogrRLd#H(YaX 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 literal 23339 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 diff --git a/tests/src/end-to-end/images/images.test.tsx b/tests/src/end-to-end/images/images.test.tsx index ae49808c10..67ded55285 100644 --- a/tests/src/end-to-end/images/images.test.tsx +++ b/tests/src/end-to-end/images/images.test.tsx @@ -130,6 +130,26 @@ describe("Check Image Block and Toolbar functionality", () => { await compareDocToSnapshot("deleteImage"); }); + test("Should show formatting toolbar when image block is selected", async () => { + await render(); + await waitForSelector(EDITOR_SELECTOR); + await focusOnEditor(); + await executeSlashCommand("image"); + + await userEvent.click(await waitForSelector(`[data-test="embed-tab"]`)); + await userEvent.click(await waitForSelector(`[data-test="embed-input"]`)); + await userEvent.keyboard(IMAGE_EMBED_URL); + await userEvent.click( + await waitForSelector(`[data-test="embed-input-button"]`), + ); + await waitForSelector(`img[src="${IMAGE_EMBED_URL}"]`); + await sleep(500); + + await userEvent.click(await waitForSelector(`img`)); + + const toolbar = await waitForSelector(".bn-formatting-toolbar"); + await expectElement(toolbar).toBeVisible(); + }); test("Should open file panel but not formatting toolbar when inserting image with no trailing block", async () => { await render(); await waitForSelector(EDITOR_SELECTOR); diff --git a/tests/src/end-to-end/screenshots/__screenshots__/screenshotFull.test.tsx/screenshot-full-tall-element-chromium-linux.png b/tests/src/end-to-end/screenshots/__screenshots__/screenshotFull.test.tsx/screenshot-full-tall-element-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..c349554d145a2c8bb4c48969c9253b4672a355d5 GIT binary patch literal 248178 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 W) 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

pk`I6YSRR(u496eWCcpl|(zoJ} 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ۖZTSS{n2bmG8lCcByaD4JjXN5otJh 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 H^7elLhfn$| literal 0 HcmV?d00001 diff --git a/tests/src/end-to-end/screenshots/__screenshots__/screenshotFull.test.tsx/screenshot-full-tall-element-firefox-linux.png b/tests/src/end-to-end/screenshots/__screenshots__/screenshotFull.test.tsx/screenshot-full-tall-element-firefox-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..4b2491fa800831cef2e113828312b227dbfcb59c GIT binary patch literal 264105 zcmd43Wk8)v(=B*nKnQ^l+yex6cL*Usa1AcO-Q5%1-Q8US1a~$r!QI{6ZF-+`?#!K; zcjo(k&D?*4z_a`5uBx?a)oKEyC57L@W5fUT*I#c%zJ8JY>#yfZfBgmf2Mz{&2fvAM z=&zTsmLgyHeM9OjeBGfFtyN_u2n*meAi{ zpi;7YhJKMLU4Z=e7e1mP@1S3h%Nv8AgCqQsF?x#Of{ER>{hDceqMGNy`R2GnS68=O zcY@TN-8T7pi;iMr{nIe*0TydM24@N);UdK2h>+EMPC}`ZxVR*6EYnD!E9?OQ$Ak*{ z!T0$$UiX`{-9;KW@RSrcXk^1LPd_kwhLOM6W8?LcRjd56>(+RLcejaK`&RarU~Ft#iML=PvV`mM)Pm7|Rooc~Kd7z_ zOGg+XTY1gd^nNl;MS}Bm+X@x>F78$L{94Fij_=U~_`j9NMkq2k{MoZ}rIypDUbQ}c zJA^wUI3{G*J5i;DcZ+lvDM;14vKNqbqcl1?TIY7fTVP~#kJe6vfAW#iH;e)-c+TM{ zDlxXJ1=5z4r&R5Z<1Xi#z%UV~_QKgAqqGJ|KuBWqeB}tbjf=S?VX8Gp$gU6Q92^{u z^$oH$3M|anZv(gE+1rT;P@e8de2b}RHQQF$*l z8pWN3U^ck>rCTK5!mr*0#TCz0MGYOOj#SC0pYBfe`;~BARXA=4kp|-hMnoX{9846U z4#7N%itjT~2VrE%Jj_nd%!X5Ki^7Gae#w9fa~*()wJ9m1=Or6pSz{r{ImgoMc^yf*%@!FktUsy4C~?D_IBqOStwGZuqB`mT+18M(o@DICgvGouyU2npccL~ z@2ZO?cDZ`$!H6=5DB=$)CI9TsArvFJak9hYIm^B!^}1}+`r;m0#okBeT*k2DxIn2fjDN|)~MoV2u z9o<9W|MQ#I*&IDfaY5Pw8;W@OJ3BWgB0T&{T&UUcQvLfB$!LyP2up`hb!*xFvaP)E8$*RyLUe`{%cwoW9guWQ**V zbrkdY`u_Chg+DvCjU|dxmjlTyo=vc!vJJTyfnfimPH$P?u%^4%8~=1-@`nYxYQHa{N!7BvMi7p$vn45ZX;7^^5+&~i zht+p3nkJl#TIUD!gZj6*Pvs}cT=+l0XJGls>a z{edzj@D8cn@PO&ZqF1-|Wj^1L&BLY{svggLk5n~fT6(SP1GX9o~HAAH` zbUxP_d?qG2P`eWLYr;jwFr+J;(XiR_CA7zBK6emVm5s(vi0LyLD|uM+goNg(K1DEF zjQ%)SqK34$;|lf+axt4ugp}#iXmxk#t+SZ!%R4*l_4H)8Sy3GXgXFzMIN9jj`IO2B zPgwTY(fkpVLqE2mmCapo5UNYBaKA76zaCI;jKz|3b4tq_sj%JSi`H^+Mg% zkMJai=_Wh0qtj(AcE!?#bpdhl;FFy{i4Jw{XRLw0@Xgn|o5YO*(OK3`Cveu$@KCz< z1&eNW^7-tHzir%x%-QbTak%l_c|NIe1?h;mY~DyLw?;$-A3r4SVT46SMRkPBL~SoL z5u2&7@#@gvy>8Cr^MQFL#09E05=TD%8!r+qE+6uyt#0lHf6kE| zsWC914pLoKEBr{HO^+GB&6V8tP_Lz>B}rS>hh_*8xHTy5h6$9>tlCsxP2~{=^+&*6o)T?R0TK}4CZut7=x2TC z_}9g*ys%7@F$rsFqHurc!*rt?5>xK2wz)=hOwj%I?3GPy$;`mslu@JjS8a&r4&WTu zOX(X9_b72yF0l& zKJz9!C&%V?>rHlU?nt?YL}qGNcwD8N2r59HEd2{gSO18J)O%D4ZBHT+l9={&g?d!u z>O`zFh4c|a!^wPn+M!UxY87W&BVm5_IBVT5c}-M0jgRlJ@kKssGXmm42!6}pWVn}# zi7ASq16KCkKhV(3=ZGtHg=TBM6nLt)Fk;ADWi}D*X-T`$6I{?tuF?4Q12cD|cc<=R zqmuwYLjcrg1{b@NsVh1yt5fMF<0a}L`}?N$2RuF33<6GR882KIY`@dN2Z6;pP-ttn zS6*YRZ+y29%et-ZEdop?J`sIoTxtu@3k*R}L9eUqnDl9s1od;DJ(W;ZR8@Tf@%jWq z(~`tvhFf#AU@(>HwLfd~u39A|uYqbXiS>K?bOw8DRo;jB1+_nW7pT#ad242&h?lws z1}G?Z!9CqFv={Ua(QFhQ=t7vsU@=1--G3p^2E4mzYmAFgL50M}ui zjK##liU^PYqM!S-24FHjzgvU*>jl_g?XE_&f%ux|#KgpnlyP|ibLhc%4DV1-ba+4h zKRYdMYt)sKOS@%-L->c8oT_oACqXa8o&l%fsOcKg! zTP%GkBc;=8aWi8>+*R-|EU? z-yFWTZ`O78XXVA5;3TG!L^dKt3Sn4y?d#>m^PR$u&gN zv($=%-TO@o3=_nHaEtb()oQE#BJ>@Yjpkm&$%ZC#*LromHO`valW}EmLN8)7-5UN? zRh6FOAaHs36akWP8q4ypBhrfs8m*2ywHB)+IX?AefdTO#dVmd!kgfET{iKwXFRI5m6fE*J*2I2E*-=^&i%*Bd9z8A(P2Js0AqopBi2eXb@j@Wo&C8T)D z4OXyG-65XvyVzmZA(2c$(OIdb>e{w`9K#V3L%(iP!$fv=j(s$Ae;8Meu<+n zupxl&EBNmC0hzaRwvau`_hL)E&$(8nK$}A{g-6O=GWqpKDyks+lB9^K%Ihsm1ehun znmSpzG5=5}p#_z1y%!%T69F!lf8YG*&V9o)wn+^E1z(gS=F8vU!%9Jsz&Xe{R-i7n zc`Nau47y%=Ooa7c zvo4)1qVKvdfrMBEl3U9*9uDYNA|SMJT29GFNBiq?WWAzIys z1OPy=w`4<6b90JVD@+IV-QREqfNEPO$~nEFFq;6Iu>xH}=&IglA}2lFMt*4h*Kj!G zSzb>#LyZ<>u+hkABxPbkNs;s;I@W&I1QVh+cMGX9oD5g%>Jl0+R`3Dri2)O#QA(%_ z=WpDz+gf}9Wvd$KkO3Kh2ifVfH78vI1JN>?w@|*EXHRnze#m>UeK;1{PH%0f=^K*J zSIPss1F*Ud0p`V;S=NJvR4trrwjoY*q$ zCFoH3+X$1nQF_2(dHeFUS7hTkJe`H}r%5d<-@j>|tHK3+1*nUY3bCdOb#YWv=Bw+5 zVT5C?pqs>GI5a6#czoGHp(9f?(J1x6IWbe=!nbt5;ooHT`kWK5<)wPg(jO~K1ZCXm zrie_zL2~g}2#wO&pgrP)BX*GXCgzS^qhmtrCf+mGhCLVG^CL;IBO&rYR0gg7P@a4H zExszFk(XX=KNPYAizdolmbCEs0=kN1oz9){@`g0h!L!GUH4^+Xkj0ajv8z=E3({yU zcTVkcrSQE}N=VB<--?LO5uj0)C+lPVk%UaHYr-ex8SHfP9&B*%c|0agL_|azNM29? zpu|iZi|;*1qPzV?hxl%(%#%WS{3ea=f=Y~SHd|blBE?P6B8-uS2$d+vW&6KYwclT< z;d;uD2qJ}M4K|HRNvs2?3iA)c0?<}?wt$AGzG~}8zFHJo15>JT9MY$D$jxPfVUdV2 zZ#I}|@2!1~97;Pn7Gl(%EfEmX@}`11nK5R>z(&`%lST_w3W`gpXX?$7g@l~#ub)~^ zt5t7K?n`^<)*OzO#UbI;90(OnFy?Eror;Q!>TlGS zRGpfCIY`tX2QS0!L>jKM3d_Lj8MbZy&oKR%?eRpI4nWdptt`1Nb z#93L$=FJrppRVHhkyFG5ZAWPDu?PAD-KS&9SFQ_e5OBtmK-95cjJ={&Zyq}D)sZfm zSpNnZasWXU3s11qB@GC>b0M^Nsy0trF9GuWvuiampivzCt%qW7t`eG%KykFT zau{fYjKXS$^c^&~1Df@r0M06{BM9tCOxfLcaXVlxa-rFmgNrwP*ph~3QUjHrR9Gy& zP~=56hH2#KTs3!4C$qeAV8eKn1SQ@)W$tuUkEnmr6zsMc$S#a(6|bks7)Q1ODGg{q zFi<3bBTG2G;NGNG8AS36T{~1r6nK_IzVlspzS42lfuKEp`HwQ=5XCd zNV_=t33L*m=R7vabCeO;T=V_<^~>Mi^|P@GHXu_E~X|T5R5q4d|OJJL(j^(I{Z~!oRpFi zX72suw36zHgX0O&&+Tb;@!$}OgH>;#EJD8C-ZHo#$6zNJCUC&%V>{B>c?R#$Pv8I> z0nH^qw|f~NGJ$?752p}kw1bAT3I2kfy_tn-N6H>;&UoqxTP)mj)y7~hOHaL;+6zk)| zfsVd;pHf^LsH68S842WNpyCF6_cz$%?rBJk?!^pspTkMDPDn|jDhyqYHoKgjMf>f#3jSubBE^umO z#4)*0LAhUD`qD3aY*dsB_;8kY2-@ey!LbE2#W>mVLJc24Nwsv$AT4d#biPsX(ZN8x z%h(_$U)%hQ#fIVC0}3%qzGfcG6Dw#bfgs>5oevEM?|1)q-BgzNZvhoP1{?hMXE>Ss zap=zh={4uSExrE#^9Y=nwZB*HP0sy4G~oYwAv7Kp{^fq+N%XOy>Mo->2AaITK_ci& z+`RW$^3;Pnp>^H$zB}8%my$STu)3XbO~CngJL0BtTI+C! z&Q_*LLPiFw=zvr>RTw0c#gB}GGPu@bsnO^tsSx{FgpXv}As9>!9`8i!GU&r7=)c91{Yi^gw?9MNRlf@yzGpFlY zJ5k*)AFNY@&u#l0V{`OVZc)dFXqM=0`q=xv<#+xZ!!Vr7C-sPnRxG{Q8BUR%eSW2ocplWnd8m`W$3Ka|q?~ z_!+5S;IT+dp<`@OD}fe0X06o$e8h?tILfuvU7--pi;=wx@={n>pdv zMhpwNwVmEn*5c!SnZT}==@jB4;o`!96(-Zx$*glcq{goHg^_5g_)WoI3SvHA-dIg- zp=ZxZ_oXv2@%}y@NcNNA%nb*MGL4g)AF1H|*da6}e{isnF;FCC;M2;@h6!=SIBd>a zdG#gng=y1bL!^^y9Yf$_3h9e26dR4l+p|nxH9uOTLPrG?`92^$BnlN_dz0g!)z5+;h}MhEaJRR^uH3wJWf99GdHS$+}G@t-I#6oJwd0O#UwW5o76 zG`Xv7HX7x(mB%J7go6bi zu!+;NT;Z{?qOzZ#n{nA|UBn&%_13i~0Yx~0*%?zL;B~aM6*z+=@RRIu_QcCQM!2{s z+jDhqdqqUZSxeO0a;vEfM}EIhwLc=`gT1Ot2^`}d`y8yzp zFuk5F9W177x~-w)b%k}N#miGC?jU_PNR^YA;o`0wZi>3U6E>tl9G53Lz}@C#XTwI@QyK{N>BnMrWd>}h-0x~4;k;i#0@jX^(ZE$wd*e=2foutk9X9jkP*mI(U!T#|{-~KC zMTYOwU#%fRe0pD=@R?0Vlfm)I475Lo93&Ci8ZE>NRyONHx(?P^APz56>Mt^%4AR!r zW?X=kM| zW_loDvl`Iq7V3C;^2(sdLbR1QE~)mqeEtXxuc0~ z-JVc#VEG7TW#~+$4k*{dRAvgw%r`sX31Wr)TFxGk13;Jrvgu|@ODn+#_&-$EIq zQ`P;ULJy1R^vqaK14$jFV#(0t53lUp=G=5iT#lY%NYOTvAvsh`_HihZ+F3OC3m!bS zc;+6jnzFWB@4;B5dhg3>e_XK!V^}WDEWKkVrgdGN3!~lSbKk4Ip^zfQeAy<_BOQ%m zOph7>uHgXgk}gviSeOK~OtsrV2<59(BIfiv9uvZN{X}j?*&cCt2cf3!`Bw1@V{opD zcsuTF9Swl&Bpzqw_YD|cD65-e6ENHwdyApSh6;FG8opaOxkhrN+xPF@M=zbv z@xCy;d1L*pcwg|0^#Ja6gWJQ`O+?su(yX=3ts#Nk4YAIBx+zLjW5UwrYF(XH9Zq+0 zobKjb()-_4JIft+A4y28dD#8Q!iWyZgi(XHXs zjPi7991q9Eo+yFdZgEjt9QwnQr%Z-_bsL`1(XOKjrE%4wVd z_TZ$aug_?BZ3zFlL;;#EI!W)ijuLK?p>5ywlH{2O=K z%!QEUgZM^F3|iipz-;uo%)sjD5D#(xVyjid zW89d<{4kZ-aCPvwVy%L1=PQ4-y^V0$l$^9mNodUsS2Q%f0N7;W3une3vH9G%%k@Z! z+oF0@^KjKv7;Ldx$CO;ZK8r2ca0A6Y9z=&tb84%%Oj-s#odQA`cJ`UjW%>tz z`V4NFbZlj>vPKNc0fV&A{UWRV94v5gQ@NDrRkdk{0x!XzD7`a-U#5@Z!NI}#(!D|G zW^+s+hd>d(4&Q6z7f;*nA2ewL`(0dY2EZCX+YdsfD89Y1Q1y6TEdq*7F}1w?K`wHJL-mlcjZaSY`*s zUZ`v;E1ts%cdl8vV-D;KdH!zouJw*RJ3zC(iFD1^b~5P+j&(cDt-q^lh9pz)TBhaIa&H00C@7GTSJmH8dZd%nNY<56Tp1po3(6v&|Ng-TotG4Zd< zkTXYYR#&q5<`mODy#;rht%o=KwYid#}!=#1<(Hv>^dbtc_M}t5~n7osGsd!lc9}= zOAP|xjZvfj=g$^Ewq*#H@wzLwT|ftM#ZL>4uTZ|It!|90r;qWN*J4pO9f}iWcUOn+ z94|jQp;eZDiikgs^fVsH#mm*#7sugC1kkMFHXDItbTk%n$-8iEk<%!uzuu}Le_ANn z8ZowQ%Xz9&<4QO)GgEamnxgi=cbD9&<7e|dj4!4BiYN{M-@++mI?guRtebW{CN;JT z0Nu`LC0$)80mmmHAs7kOD$=R-3Svu|wKjvS=GKObysF|oNY#nXbp6(czc-p096*xQ zRt=78gB4A0uSh%^ji{tOqJy~){jdc*MOkD*wIdo}9-00@0h^s8UZ890Q^@ZuTK_06 zF?jrBj{*cyz*Hj@t!0T+C(AM`9K;GI^FvmhkM*7pCx0Z_K#S1I083nN^EhO5Uw^03 z$)~fCi#I*P1*V?l=6ZvvDRZ?}G?;#op_q(slkZR7X@=m4K>EJjXrJ1G(sFdRcas)? zfV5_%%N|DD!QuR!08G0;7m6?Jdj^_3HVZ~jXEVxCsWg%;*h)9n!~7@|2A(%Xq47UPrcxDKVO?5h-wVUQ;$kn(5p1sYNQfBb?| zu35mF0n~fBKi%hX_$V}nUIJzlhRiBpSaSqz1uTzfr@ZLSjPhu0w@1BN#3G1tr=!a^ z=0Z%M>kCXw(gDq=!xmfYU{dc84bJw6#k&q650O%-Livr^7%|rdBWUw&^X5&v0KxG^ z?TFgV#d93{eaPT~mztl)bjR5>yQh~sf8K}p zE)P_0spGWUgEXtpDRUce25pJwxv%N(^STD|=}hF}QOBR44erVFYnjP;Ud+A7SF7f% ztG~kfp?$J%WNS8tDhR;8{sOBt8tV+CwCh*CwBNw}7p{0;$?j}tC{hY4Y=z?>DZCiq z%li)}WcQ@EjLu&PtgWr3Q7g-r&#a;_*&tz!_nUNj`vwn&+uzV3NMtWg%r7W32Q_-2 z4bd+T0w~cP&}fW|&y(VCxP5styjouAuA>GkJc7;<(d5}#K#4||6mx}hbm291TT3p5>=pobeH4d$0A)h3xVKkF_wlmVa3 zU~|gu8-^!!BSjfya(-Qa`{<4|Ms_=zE@A`12*`!2X#y7?IjH=epbaKj1Tt_oXdf;6 zgIak5)FVPh?r1R10xUwyNN38|=fElHaLMB??WZ`O=qMD6rc#*!j=vY_liL5n*OuA`?1 zlgt1Euviay;N^)}$p9xV-9Cv3qS892*ZohbKiCSqltu*Vgwv zg|b%EHAu+L$cYdtGdH7cDSZI0x;4+$N95Q%z%@U;1bN^69s@_9J!os1gI!yuk)0qC zU_5vtCQj0_QeVP7!r@FpL(9VQ=z-$o!NkhiRjKys5eGEEqvnU}dHw|y_<#c&VBz4b zDVIKfB{M#s92nC??yuO}YpT{1OxtvuF=2cYZ+fs_QC*pr4kbZrGO?brMH97kE=1sj zJiO2eAGMy_n{ISQctIOQ2w=B=PXr{YTwgBI%xNDaXzp zW2)ai1@S&UlQ-v+y|q{$prqh;EM=~H{xN-zinQo!o_JnSe#vZQc5 zk=2U%t*Twtk%8v%^(rT z%{ki`ue(0t`T~5%&~H0%IG&>xO4^S>D}}_S(IUCAK63_)tulG~-=GFkzOXcIlH*mqQ6@(6EoI+ZJ7ej0&_TTo zh9}e_$5~w%83#b8;bo7*ytyA@Sq-@1;DJaTL zEFCt?tcF*62bh z`d7jK0e|;e6uchCF9#+tcARN=5^j#?4pMuoVk?Mz+RsoZPZ=hahCE)nBIsj{AB@We zl@yJqj@xJZBCRJ9D_q-bU4;=pLr2nG9xQQ1TVa3dZ9G=fT7Wm_4WNhK6&*_KE{t`6 zvBYz`5sE2VwEy;I0Y((3ci8+BlxQ5N<*&gYcQG$I>jl&%d`h;_BXzP0kIm7c!D zyN&?XlGEJ@lVscjV1M*&3x~|_tR-ASEKy51ugEAUupp-_s!GlJZ}4V+FMn?pLKO~6 z+o&9g68S3LH313O-^T?mqUFuqff?ckOKaOt6_z(JlF5j=cWh!t9YZr8O|&Gp^iUrxcg=xKZywm18DK)mRsydfZTw@;e1b>7LqCs zOpK+plDY<4$Mn?Cfu(&2f5s;&>&1Uw+G(Z9Fh8ke(s0W1STx<9q(%uBQo31x?m+4# ziAQx(%@NekIZ2l$AOg#^NJez}n$3JcPkPB5aEHaoA`=(=A)s76E1-nPRn; z5W6IM>&JBsVE+FJbxblF&cqPA)GU9ufVTWCvHy$suyyqHMa#_b9OIz=64`=$wF+Dx z3Xs*eZ}EgXoU5-_8ZLlKEfSPb-4-9H!6R{^=ua)b+50SWWNh>RmzXY~=SInN+(zvg z*-|guhGjcN!I(bjQ-JX}`DgRR46Pz_R~D1kT&%RjWgyZPZ6(Tri5YE@M%YVHP7XN;@T0IcI+kXc#^8elC{ZVLvh?)BR z6=jHWlP)RL&*lc)l*8FOZ>E9e-sXWcd=JZ}h)3ADAfgQff? zfn%HY022z7R{z7B9_ErT3MQ*v8%1o=YAsGUg33s2r)wIy%z{CQRyVtEPXj{(bS^U| z?rq1@K$*3E=rXH6e@Jdlb8GV`O@RPQ*V#R(<#LaR(6#&EMUXHc!2m`?&JPzOSZR^~ znOH5$+i*}Ud-82ke+`UpM2Z)MG3<>7Ol5Loz2|K-1UHB?mrqWzHiiaQh}uIAQc}aXjP@T<(1WhQ288i9dH9g0QqX410K}1(=6G7^52w_ zfCrq`JMcx@bic?~%;OB){YF(`HNmZ7zu&!i;1UmP$G~_|thO#Z)tpudOo0GK*YrNW zr$QGO2J`wQf&L?4Xdwl5KR4fNMpsLVLWR<=5k#cp`3ebq?ZCV7)2&`sx~bm&1D%-I z8|?9tHsJmGDkipdK8*2ILLy76De((W2qB$8UL<*F8n5u+?zii#c4GXof+>1%6=^Lg z=8W9bJVy*DfC&s1uYk~|AF{i$y6>-0lp`ExkLqnhAq)&!f+wqj&ofpc0J=l_WB{#B z=ugRwz*CCF-IWk04EgRv|$zp*a0j zd~+~~Ejv5=l=_jwL!r$40E_pM%KdG<5Y%irG^9VZ=oL)B6n%xoS&kt9d%3E^z&LtF zD=01wh=yk)Fu^s7A)}zALRvo10iPfCM45!fAof(pcokfpJLfReC0=i9+L2e1!~pKR zF*3cqwor%KETQ@kK4|D&X4%b`8is+(5qjSRXcSToiivDyt=<&^R@6pP{Iv~rfW%Rd zgL^b{xOn@$Lqnvbmsk;DS<>RE&EdUc7?ElDc@_6E0R6{uhPMDeIytNOYyUv>m{-+d zUk_yRdLf{dd$GeSZppZKN)4v0Yb}ZW;So{Ns8srr;EK}u(S`uHghAn-PW6Q3V)-oQ zVg=Uq&W6pO=>7Z54{)2(`;z-wQ~L!>`sqW9s1*zQ@k8bexdYR!iTO$SOa|hw_$gFB zk*qhbEF8I|-r?dSQJ#eb*)&htMIf)`S|8r)0Y(6>1p$X&DhWwcg3-Di@C`>P0%L8K z$&!|MO0|DMB|4b&AD1YF{w_&EreBw%rlE0+^RL9fVlb!N8qyTX8iC>gxG$zG%b1WL zw5YgcUxLM}PpRtQE8U=v7K;DmbBBa~B4Xh27!p{=o(UYAD-z(I1Y~FuMvwtR7*(W~ zqOmt9t^j(^EeiCicGw{>26>sCkR`IboTZm5J8}fwnU_^p7NJnk35(_9K(||-B6g{@ zUqkPf60*F!*ON@)?T$p-o54FJR+RM9Hc<3-sHiGm_R#BN%mAJ^B}@czsL#zqjL#Za z#BZo#i8VzBKWiWyE_tP@&z+nFjD1ON_}W<) zgv*D;KOJFt*ww|Pb^dN~b2da3T)KLD^}f{G$21e94v+^?vq;5tcKSjZhek&|8w=Gd z;TfhRPxcbd?%!LbGHuaXpHA6`BP92qL?L@0F7(W)HCP1+l{Bnqw8xZ(O8`eTN|Q#I z_PDnZwR&B|m7a--fKAKo{=7{%L=*NGha;VP$nL7r_|KX;%NW!$2t))F)~`-2t+fLa17F@*T6F_$%n@q zN_6rl5L-Omny>W$wToT-i4?f`wFoH3p!8#ykqtTuyA2^BEYe7egCdwa2Hr=8U;pL6 zrf6M{hvn7wy%kbNp2Iya)7eF$t);bWmynPE6>W)FSVEq4bfGl5@aepOVKCWM0s-bE z1MWTo4$*c;uJi}~Nx}WP=2QSV%`y!;WVXU}f)otTJ%KAdA_>_1p|DXj* zL7^x`@X>5QDH$(PPjRj;%7U83-L8Im<0F#o4ykkV%sWQ?hu?}4%~>tm1-CU}-8uVG z-7@xPF#7rgnVjP0WJX>dEepCoTq^{d<9d#nH3I4#gc`i3cc_@8KLb;|;n7lZ!cU#v0*!-R@?arieO8|mr^i*2fA;MW z!-Vyf9LSad?ZYl)t3#r}hh1=4z-YFX7V*;FwZN@|}Z zPvsRO$_oxwBnJhjX9t9_Hy#JS#tiE3O>j5$A3wXacUoY&OUqxAW!Jv?61zJ3T3YGO zF`{74yA7F7S+TInq{02e@Ud!~8aOU%&ty}0)hx$b>VQV$vA!_RS0$L2f*+vD{guT~ zgYCh#)Kuu>J&G^lJ|rDEYPz1-8()1+OP?7#p}~@*6p{@3SQdRyytV)Mi zpl8Ak8Bni%KczhcF83rRgQ%YQeFp37aO6J&P7_FBe+rd}2Vh=_w>QX(2q6*t@Sx(O zoHXt&XZX24R{;am1A)YX!Y;<)UtDBf(d9%rQX73N-~c}!fNRdCR2zv zE_-MAh^9>4s_;umgij?3XQW_ldG=$Woe(l$OLhQxVlb?^xqs6S{iVt+IvY^eii_c; z$J;{hwN*QP^_I-m{k;4tC`?26%hr0w42ow^2YgE!u>Ryx4L)F}lS{WoRwvmX-&OM& zP81^xWg(Xc1t}D1-Icn{2T8O}<>5Lvg$f8ujk+uw7AltX9P}8Hh7p9Slx+T~h)U+Q z`ALBS?Ff4*2v437-gSTrO4reJV%DPYAkAlR8{hQ1z*H1ctgC3O}2)Ghl*AKG< zRmPKW&_sgz-cLzEue9eePr5oU$XR0{Q6p(~&81#%odR?OYqCvz2kk>-`}3DFBMt>} zm6Q%g5G(M_D+2D!+M+jseKC~BdkJr-HLG7YNeUw;wa?e%4gR4cwKS=7Lf z|5hshQ*&7D`%R(5wjF2SH0mZ8EBd-KBt*3&>s@VHoLru^QafI`<8wQA(jjk+>{KbK zVyqrl$h{1H)4n(qYq#Vc(w1&8_WMY=))f!dp{!%37ukhNRinunlK8gGRlb>dqt6k< z+-k?@X&zdT{<6||DxljH-*>Q~m2;M*@c69l00f5iWR@5gtLe<(`p#Jbw;Qhn_T);> zV@YEeO%Voz)vlVW@$XME<87%aNwIR(zmW9PE_Z`hi+0Wor+?wVQx!dTovmcD@$3ST z>6FB0E*O!V?5RC+YS-8sD9A*iIhk}X+cg)p#s|ZsJumNkj`RWa{yrfgEGR-qTD#d1 z>s6LRy3UB0J~bA^sANb7t81|m*UqO`bJ);VllA#TSaXh?@mxb2LOm>iIs+js6Z38IJ4>} zb>(p*;ASe3X)uzlg_{P`pah|zq92P9pI3bp-yH>NPQu+axe!6=@n?mS1rP} z7%R!*Q+4o$-dlS#M|r;W-u`3qRQ2vO1``mCi0J&Xz#Mshsm`}TbCA?>@^hC&YDi{P z99f17+v-$4Ek}Vo<>irD$8?!K3cCs68tJf*%xr(upC%k=shmRl{agR8p5z?!UF$K! zPjXkvXcET`S$H(c9xuNzOcpCn09djoS=RAx9QK%POGgHs(*?|C@)#z2fDU?JTguN2 z>-@TD0SGa|Pyy~yuk5Y{mz2D%gR(wGO5b3`GN2r^f_Q0xo=I>beaLoEo~45g2`lZ- zEjo==^}>%}VmKc!P6}###K|ri{vioyD~>f!)_a-WAM&-1wtGe%LIBpSlag$3$c$W- z)5?dxho}P^9{K1PlYd}ykWbr>h9oM$yjv)Naib?6lTo7y+|qsqqH#c@S$xCXlshoe z90KklE|&qM{6Kk2iw^VR(7Y5_Di*;=^8ftQ#zBX@-;8=)pI0pe(}Cn(25knwBVy5E z=0$5yX`vcpNJ#f+`w!LEiq>PLbDwA*+*9IB@}N4Hy)Ls#2|73zsJhu;*vp?aBHcHZ z;viEX?-)ZV;!bh6+ui^^7C`hh-LFb2&lGj!MaXRZyJochGtM_}UTpL`pS6Gkh5ocT zw9u6XV;uFjw|@dGWZkFQj?k4VmW)nTHkHX^2mAJX8^G>HODAAfpy;f}0G6)T$kR&& z*o={d6m$(-M#!t0`Ukmq`wIkJK4OY8!EZ7Bp*~Q}%ngELtDvr0beqh4FTBr%J7JCkn$_btW~`M`+o z{{-`oPEVxy?;q>9`S*`?^eFy2EolB%>OcM0bRJRmuj$KnLav%hU?@2h64o*?kb3Bn zz+zr~^RJh8DSMMHkF@^Fv%l>qR zqm5{M1c;Cp8HrF|y!A9&K0^GKM6{U-Cmw?Kdu2HznHu<~?7P<|*AvA(p@VxjbhE#; z-mVEF5Z!;pB#jD~?_3Na1z-N}9`*mju%5++>8QS38-W0fOrL#Dqd^f|TD%v$) zB;7eAEodD(8j0)xKE+zs6*fSJPL5A=fwvaqDe4spN-c(sADI-s4kH$a%PndkJa02< z`7ffwMRf#pbaqs`^;4gvTE{~KGfumla67H{D68cTmf)ge)>r4tV6rfR)tzsN<8gGa z`LKn6T{)&`s+-p3uXu4-1AQvf`h=$(Eyd?phN_^gHB6Q*Eh#f zs1?-$7WBs-7=AKt@M%AU5?Io#bp32yut_&T-Nr&UHOFiX{!5lAQYMwA&R?p?u zbYlnxm*ZWFCR!(lQiZr0o@D}m)=)o zZ1a0;O3L7VYe2C|{a<&Pp{TT`9UxET^OX{++gvDiw>#&Ql$8EdE`3`3NJxtasyCsD z$>|(eOFX?b998>!>5xpD5gUt54@N*JRB)t7fC^;1OtD6@|3p8=NU@#jr1_H9 z>euaOT}T99tVfwdYh8fjO3-%P3`EoW#wU8(QizOe!?8(wn0LkZ4QI|8<1f4Yam;2L z!z%<=I+GPnFHke`hU6CW-m_V#>3k29{35*2H8SH@Cv9p4Y;p) zTCZ2UzDha^y>>u?UNj4>4^b77^1LGG0xNCetRf=ez=G^<1SvJSA`hz6=p9`0tdr_) zu>xDb@JMCLntCoS$Hn1vV%MN5!)1|?t0Aa+o?#Z>^l8*Wqr?~%Nk}MO<0KIQgdeSS zJz@JLPAVE#^rIw&hhqVFZGd^j_TYj7FyyJ~z5CbT&(N&3rmD-ADxg5(G!e)yHr{aB z?)7>jd(kI|17-orfO5S)6V3fxmQsWE>m-G;?+)8m&}%EJHB2p|;Ke78?w`+W4pS zc_5`Os^}89P4FdDU4x5~xB^bB8hdM3USMIcM*+L;>2{l27a~DVpx}~poyuF4>l)z- z(??td>RaCe8;ntlV@p60Woj%&8+1&B5Vi%6A3GYuKz#o$R)w4pXPgr-dJ_G%U(W-% z%U~_7X*^yqTsYWJPN@_Q?hEL{O6pEVzm_kQ4Nri`P5&V)EW)f*yO`~5!F{FPzCIvF(5{jv z0^BjrxJjjws5dNi%ZSZY|BjU%oJO$X3RMb91mCsf^+-s7XQ2BNDMCq=|u;tCT=*gv1885d16dr4?`MAmiS`N+3k|5kv zh8&A;7LpTb7AVW@CE>T_u8H9?dU2HBwR3zAI4-y(hI@;GK2p{eU3*Mbu(uy3h~6BW z4^*5mY?gf@&x%QK4+>_T;e9^!7YV!seWor*0u-H~O1HFnYC`)8(UAXam2zE43?n4J z)b?IiA|$TQp(3i@!)XQggYc9>;tC+pt@lUG$*Zy?qP|9OTtALAP|2}X9=PQHF7`0I z9CMtaHXjxmIlT=~5*eH^DBb-XR0~%HmS?hri_<`sniSUAF14UXYp+Y5$=G-N6aV1q z_Pz|xh_ntp>$NPc!xg3v-&E*WDdqe)PTF!{&(0XEf%%9z?YQOY#pQeKxZL;vs7j{& zX%`@Z`26EX{)^4;F3+-bg2GeFT?kWpn%})Q_%)D0;b&ofKjUdnbXw+d!2aAt-tmBP z@wP&;m^^2iH30B8fUVeA8@l9#EsrE&uru|QzFcVtEZblKcX5}hsW($q7;|*!xk~b9 zR$0vh+>N%Y6aHYXzYS(df_Dv$W51BMR%F%KRD_wRlj;)DM_2ce>lfBUL-JRu%n?Vl z#dj>i`RvDXax=9hSM=8!?i-x4n+?8vtf6sF_&27}#vsSr65NKYBu@!c-^Tv57#_f6 z&|s}0xaq3H2teB(0WtK%IoRyM@~5wACHL$Ak!*YvWj>i7)q{J1;e~~4_n6x7eUjIHLIBWY~!_nnt zgLAmHxj6-?t}CwbJg#ry{Ky@<`vMXb4wa<7J1K7ofs@$A*7VbR%9(OHK>vAKq=yS@ zA5h^Gtt(GzQ1kl^U|$z|Q?L(OGQZG)WQ$*(4}gDuns&#`Sgr!qbi{E zAzoLa(A{}C>Xxp=jeA@8>8v`N`#oZ|t?lh!Ca0#+ej1sLa1r4*?p?Ktsiwnef;xt+ zfGB`)?Sad*Mr{Z@w1R-!p>GWTdum~~#*B8=FO|+Mvy#{@x+{EMwe|1C_E*}opJgh< zfwkCO9c%oAqr1)}D0C7`p5)mmTm!B>n|*HRhaCl&e>M_cJ@#F3fY91rDJ!)6;x>6M z=GV^UiTd8$zrrX4sp%w*34tH+P|ksbEBVz2e7aC_Bjgz}M;&Uj8=9D6`N<57Xr%`& zYZ?a#AS>{~X7;+h)z1lZp~i`X(V;Rs5~LlF-TU(;x@qba8xNr!4Xc!^Yx3Z73uC5A z({j9aAi|sTISQyB4-#SHx2DXyKo=fY@5{5<3Q-a5<&H+CU%!+Ny?PVblJ=SkoUfV< zT0OFKG}q~Zn3RoCX_^YOWjaTTiwTSyj}6=R&6o`QJ>JxoTI+#N{<1|^VLDnu;(`PT zN{u1t%>z4#;UHMpUCs-Hrv1M5*I`g3pvsy`L*O6zf_pk_43>nC}eJT%Q1wWO1 z_6|o)O=FXVuv7fL;n-uABw>Fb26s-JtEhPhJ~jB`$MWp3Q3w6jA)MdiB_ZD)nAt5s zJSJEyKPorAUv!&oRazqWD0~drYM%m9cpVq%0AlqjB?v1p5=}h;l1qdTc2LoQ7hQ(h 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

nvc2vC8XU)SHq+feALDylG%gvA&?-wu?gpumJo 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 z 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ν10*dJ>9EBf@o*)FI%1zafZcdjn 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 C_k2(Q literal 0 HcmV?d00001 diff --git a/tests/src/end-to-end/screenshots/__screenshots__/screenshotFull.test.tsx/screenshot-full-tall-element-webkit-linux.png b/tests/src/end-to-end/screenshots/__screenshots__/screenshotFull.test.tsx/screenshot-full-tall-element-webkit-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..e964772e39799686ccea3ed07418e4e0baf97e39 GIT binary patch literal 252516 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

a_}W=fW^i{ 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�N#WM%CXHVx}MpuV?*Sg?#UUgevpLX}?DCAj?1uFrZfE-qjb4z7j zZ_>9f0#zX3*z#Ml2Bch0Hf5CsP6G}CMM|&M`R-2(JmlUNGQGc!f5}rq{a|pwp%spi zFk(MqerW)}^8WFly9cn}EiY_C!90W@Smd!r?=|E|R_^Of#AW7FOxU0^kU@$W+zoaC z&~m#uQ3ubfBa$x+gsPK_Rdn!wXGyMIBzR(X@A@Ln^|9i3EZ5^rR$%RZ*i6rG@DEPD z)V=ZUyEH^EB&fr7#zzj|W8m=jBskII*6^i(GsnYUdQalNL`8M=X*23b*WS6I8sCd( z;90OnO1+SfSOhu*OSlR z&x8Zc%*?7+yc7X$niHo~+SJqCYP&NJ_x3?lrvBp;v9Kxq-rgrmqsAPjTa?JcO7`4a zlvOG<@GG}{W+h6LV19C+uf*J#1*)b+27@2Fk=d**V}0(oyIcBbvP!UXITW$$Scz7* zag_DTi5->hti=WC5QP83d*I1*D+9t#vHt4^G;DF>=_f zLQT!V(cHvHgJ#Xg>lun7@464f$^IM}_w->KGxIbJ#B*E)i-~IVGTXDs;I!`6A2z+A9H$jq4MQ=a)R;XczkItWqXTOAgs`X_$A2>ztu4a9ZcYuJ%VY9PfZKrQ+kfZfgkZ6bn-_yRm%spC+*K zch^u@X!hKLc;-uivAP=TpG335pEY;jP#x zIi@0%;K>%?$$>=aS2JY%>d5r`hC`J&q|$%I{y%yP*|AM!7ZZ(-x)Z5JOLYT~CeD;6 zmh3gXpI#K`D@+gw3=FdHxwJq%*%r3!j~C5T17jE78@DIL59Tv2-)00WpPy%w!^EZ^ zsSCr9gRJitwdjGQXI|HwpFit=t&WV5a+s%{va4S>BB<*?2&| zMqdgFV&>;&^;T=z`$bGh_RGj={UC_TALJ6EBq8m3S1mbzm~lBEUTo^$f80=vm|dQ6 zOOovTM#N_oMNT`ov$Q1(l(pu;&1+E24zSi`EHOU34paSBMv|%`9Q^Vv2ClwZ=S8OR zTaX;M-nU?Wu8zH<6_A`1k9h+safsFGk@y=b1H-1K#?05dJBjI@gb$({%0p~o3pA^c z@IGyyOu%o+x8@Rs9Q}h^Fho*bnJz6+cg0n9gqR8<$M<%?DC^r?9tt*2WJp+mlQs)R zx@cQ98r?fAfqHi#gx1qJX02GR#k|74@m1VY-eO}sjFEbITI9!q2?P1NGy?)gSUFD* zf9gPnAyt`>`c|@{YcAgv%1>aegkwE-8EsbTy{4j9bm=P-v!a%Q&sS8pTQ;2Yet%b^ z@H>tZ!)x2xu$Zy92r;}o&LJ8y2~LMy7EDs!L@3=rJgwiG8{;`$yAEYS52TuduuZBS zx|!d_LEoI@b*a331nb;&ixL|8M2aILM8h~f!O6T_NWqYeIhY-B?I0#+rH=)^e}UPW z*78tBS5@RJ>>N-n@LwIhE7;$)hg*{0JYIEQD>c>4Xw1JdnmM#B9LnhDV|Wp4YQsfh z^X)R(X0|zR#kEvl6P+Z@fU7Sx@mR_I-9>lU%adf26lBcI%)A45>wl)Z>X-q<@f*Sa zG-q9gc@yCuJDP3dkb=2`rF z4bGX3Los~zL7TiXP&|UCH{1B@vSf_p)PMSspl(Y_^JW)}-Lg`}Pvl`Y#IoGHR=H0+ z1(rDAJ{i}ke@8a`^A!&*EiEya@n$UdW&&b94AoqU;V~zHYD`#Xv>5DR7SMTX$aJIh zgf~xe&X8FQ=UEMHVfM(9~5p*ma)Htsy`Ct<*eIXXL-B;YOLhhip7^eu9$68DTZm52?L)_ziG z)>zRcSl}Q85R{BEnd)JJ;qVL9e1JQU`FaW>DU?^tW_CF*Mqim)o@or{u{#Z^KA9cP zGvm8*Giqyt<^7Tn2;y|c{ZN3y;r1p92N#~?Fb+XGywas2rvBr5+!BkS0%`Zdbt3*y zWI5A5UQ_Xs=R>dyfl{2?eoU?6(_-6$)BeztR!*1p-vIj;s z*dq;{b4f5o$Fx3bvuu`#^>nQ!en7h*11T?TtI#6~V%z!j|MNbOQ`X+!@?7`<|8hf1 z@BFJJZMYc^Ux49>dTStUIAd>;6YJH$xbG3I%tw`9Yiv7x+|9jwz2}blC;>Jn4LwmO zd?pOi+8Yj%VDOPmIN03V7Ih}-JpCIDFwAPLN5gxX^J0?>zdLV3h5 zx&vznsu^!SsI~Vv zO?V9xi1dADvsnEZ{f05F5D;R?rfAm!IRyZE4LQeSfL*JnR6BCST140O0X+K0kLTJ4 zb+d4X=uiQm?90)06glhhte9l0?`^vgn_gWR!7+oT*PkJ!v`pysBT)ZEH~~}MUFXwt zZWvh(OS-u35#kbeuUIt%{qYR++WT_M*@2&+KKK2n5DBL%w6ueQ;sR1a@q)GK@AF%E z8a@C>rbb$qde0BjrJ|K_fB6f=_?&s{L84s{6=B%b6!gxAB5_0&%WX)!?{)`4A)Y;@ zt*3h9plG9)Sop^`&6lL?7l|=5FH&K|)d(q0ZnNaR3B4irjY+4GL*&+K(}-+~w->)F zJbc#n(D%#ZO}j@sbTc0L0mv7cH@QvyoW6%JA$EDoqU%p1 zgE=f$uW@p20E)~f?hFm)npDjKAkg3P9NYxloVa`2K+l^Z1yegrqWY{>jTao|E`Wbfmr#+MrYw{*vtGQ8-mS@3aq?;XqAbri9q!-w zk0Sv)V2P1JJNOm60C-8E%N1(X3>pyrOfoBunri{5*dU!Mz(bf$_oql;wjpTD9BuxJ zJz}qk_^GZjsTQ3= zbFI=_i_2#HmGQ z3ZyF_#IRhH?1|BnZDnqOQ@2?%-Mwmci+ zJIhc?#u#LCZv}Gz%VaJheuvNUYutSq_QrsOc}Pa)FDJe*yS(rzQ1uEfWgyAIbaiEw z?U_#xD{aQRG`>#P(O&q~cYMx(Kc~?zS^Wwml(sP1KxnD}o9DxN(e?g}$&YcDuF96{ zNx*~e8lCse7)yA-khAW9c&sDLhQn#sBE88-$qDe7|_drY@eD{j?*h% z#)fYX$_oU1PB$jm^n40^Y2#-Aqnv7)X<}xTXto!%1lrMFzh*@r8~#*>r*jkn*m1Bf z0xJ<>Ma2!U5)qXj}Fm_)`O4`-hNfY2w0#9onn}(> z`!9)^{RYHA*=CHQ|4M&I?pwUrkTG_}C)QW9UATMm6vg=#W|q4=V50Pl$6S?&N*=DI zj2VB64v;MXX@-YoyFzOPfye;C1dzb!z*IP;k^h6{`n~`8d&!!NAO7%7Sy|bI^Ic}B zh9Vgc_x}yNnZ*cYg`NV5$MNPsH-e74rXy_vv*Ax{sOBD8SAg>p6SpPde8Y-3gP;@HiTTEzKa5;`emvmNf+%x~{AS!MSK>3zWCbja+8my|KkCJ95 zYjC>bcpez+T&>t$6(@^d005MW{E?5`rtY+;5#oeF{)YXbwZ{{kMgSyrR32Y znAS%KIAHNK*VH!Z(N5j{Ln6)C9$XK81QNc#w&_ZY1<+XknDnoVsa*ieT;A= zo_aFSDG>N|0g-PQ`;?gp1?F56ceKOJb_rPgSljP>xlQVM+yK6N!{Ys@KB`bLq;TZJ zpFTi(NKferse{JGlvkI}-q;~CLQ&fFHixT!z6*Fz$myt{L?yXmMST5Ojpl@m?Ak4* z`hiCAM=D%W?|ZOs+@*G@VI!`5^1DS>NL1wU`z5M#pG@!Y;ZpF4GUS$S%V*&Na{X_X z;^Rw7Ql$I>s`K9lIDWSaZYS$mVoIt?Oq+v{`)jjovHq^dyS%o$pEC+w(iKu@Yys0f zmp)Ksw|5bgFM!^mL?P^JcKGt)kxX#~T3T-EW_e5u5ly)~xt=z@vmA^-M>J<7EJ$iF z{8F;7FU9J~r!ChVEnt<@eEY*UF$l{RL@MUqi~{vTaV%s`pUy{ld%G!j>BHY@ zYb$pnwS`6$(D72myKBmZb`hjxZTg|B>R3Pw7m2SFF?-Z;Nve{+Qdxyunw^9ctf3!_ z(O;}y@1(zQDi6v1u{h47m&g7vrl_C&kqS@Xpx+i*B#>oQ5nhe6Fr=3bL)pY7R{IE; z!etkz4+k5CD4C2~AhJ)%KER_ly)@SWoSQO>b2?y{fg=8L|8ABqAfb;^kcfc`~kCQ5}qK|3|OB08W)QdT~c@FkNF9^fh9 zH4*+z#F;(lA5&x)ze`5x^gIE_q15%C+O~_ZCddkXZ$P z`L{03rAtM)V&tkC1|K?r1!J*5_pbA!nnwD942~mQoSOeCRxz`mN}}>+)}njc_rK`f zU$qY56B6uDFylDN53(uX(t7YIbK3(Ru^b@9#E_jgOT{-Gs$F`_DDU^;lR2WWQ~UZf zQF&wI@ne<`I~4;$!fyH6EmlQ96pUcAzW`{$2mA;#va+M210^QzC@3PrrDPtS)m*J* zSksuKV0xZaHjMAFe{u(O``I=|1BJI{aK8?SFBaOYV=nc7lZ~J7l=?ylhM!g>99>D} zpNM|ehRgZ7_H1qMs~ti2J1p-ZJLur%WJjAlm}aRtUt8)eWW)$aVPbir4#sw?W5urB zp+(mBYZr2_r4|+54B{3XsWM{a>SCBzC^2Fl&>y7upFUsPmRN+tsyBp8d5yHo1>6pV za^v4*a|FoEc3>uSbd=7eNGA%wtt2G?;WjZeD6DPhYg(F`uBLwgFzH}=Y?GIeuTiOK zb^;+rXXHQsj)YT0RAg}6@l{8Nr81xp#qV&Ro7Pvoi5?kVMw)Zc79-wY!`YM@PngT2 zY=U;QXGVb9)r?8_G1?xTro18u&{j?HTU)cDeBnTdffXx3t)}T8mXSdK_qk&Y=GkFa zI<-*aPoqk9wNcCH5s}fdJ-{Urp1A7Y!^Fx=$-gSbnfG4vaTMOYf3jlyuPqKwUwTQx z>c*;U^*Ord^LyYRY0Y$S-Xh?=;5a7eas*<5!cGK)gv?fA_hDFIRhwfo#?8*kfC-aJ4V=1PjTc;I zDBA`$o_P$LL|mL zEj{YZPe#TY3s=kdrHBb~J%!?&u&?T*K_*f%AgQou#F9lW8e=Jj+uUbjdTh8r zpWhR6T?0b-?!CvCyY1e=(fO}=I6f)a52=j~Pdl6*VmX4Bk&dF0(jV@Yof1v1YW3WP z5{Eqnbk&|xt}m&rr;In}s)!bS8%P(1Ep8aE!X12=5*e2~Gk{ug4YUE?8NHRL&owp7 zQ7wNtTtjy29#h!wA)u*7>~|8H9tm7LhN&>3xB>Jrfi$;JJSFN<LB8+`eA#35eNj`$j*i6?6q7^E z7AcN2H4Oz}a*dZoxoMwygcLCfzY`k`uWuhiV>BkMs&d@i-mm-L{{w@8Tl9>qc@x&u zosOsggvz4G=FEmiQ`uXT!mlLHR>EUv63^L3X|_1XxMUAU+Fet!$Djma9$2#kU(o~T zPKECWEp}6&E>v(-m?1q9no56$H0C1M&9RRK2D6^F=Nh6FIsHDfP7NRsDU`p!Vl?Uk zI|);1-uneN8HeND>wuV()`2C@OfRmGuXQAVAuPImJaChQx2*e9x(Zzk^Cf%F-i}jU zCS;>wiRa6Q$XM!B{wz^|CXUDMDPl-MQh)(r0vP)}2f%mU%M3>ir*V=LFDF>Sac)Lk zBmHghJ#f$g{+ao%Gz-5Zfp2;F6+ zji69>ddOq^(K{Z|$_0Ng7=z=WitWwUppsoQ!&}SReHdw#?qi0Yq+D>9?7-CN|Evb(vw?e|Rvwv%rHn#pQ5E zcrd38Ja040ljX8(t_uw2-2c^krGwtbbZ=W2UX_K6D=~V=oc`AnJR13h*_Oc7v1(V? zpZlI9AnX`s$Wp*dh%%6P8tB{5C_+zp<;~ZbCbf!z5MhkqkmLjBz#bSKknhMdYEnli z8SRU;Uw{bnK>rPpY%UpcTPACi#?7UMXy^*C=PoMsY9h8MErFyXkoN6pNv3K(wTGpt z1(XU%Ho=I@%a^yqdl>(vL?;kog0bZXaq0EMjF4xJK|0(H+#D10+&br10uDssUGcNP ziZvpioa*0Fh~sne5--0oUVd~FMr?C;ORz13J}?Yk0t!(++#CdYN^k|j5mm?MH~4F# zuy7a`%OAqF64?8~{yr@;3=~X_dHlPGnphw^&@Bll>>!S^J|vN_KCBvaxN0+ z>SihDN5IIwkP@G748n&U?fc0p9h~@xFwcipi_Xs|Td$}+Zk`pHeF>#j~CVf?*{w99_HP-W7S{A!rzeu@E z`>A)yY^_7NW;&B37;CL8jX1UX?;Mwco1%kPs>^ zY)KQQC7G!0u3O?I;y1e%oRkU+1#9ADmy&U@J4S0V#{}Ze8yv=<+oYl}{@1rmA2qi8 z<3BkAJV=g~9fq!-Z+w7(A+$F0w4VX+(G)NWmt-nAZWsH)kHfD=LWN=HxVT`6e38pa zIQ#rN*q@A$64aG5Q$j$}T#)j;zSMJtc(&f%ltwlH+ITp{%pnMG2I?G5KFY7so(awb zwiGx_zZGD=5}YhwXwxZT#+S}%b$B1{G%Y=Y;6G2;n%*u3IK6oB;&&!G+Jic1A58*p zr_vSaj@~afwWSLA_3pL=63rb2B_qpRG_G%J_G_E~j&dR}AQH+Y%_U!n%Wd~}nLPK`)#}>b z``x^|z^^;=V?(i;!|NZz0F~?{OC8lmXh~M4_x0|2hj;Z^_dK?!iY`eANyfRJCYc8V z2-L2x?;4u3M)5sh3NICwi8rsqM%ZmNnuQZjHmYI8k&Zg(&tp zhoy^Sr8S)P9`4;^(;8@g{I*T*DX6MWL$O`BF%hRR-V0Hv8LzbWw2G}PG#Rk-^YaJt z=bNk0F8e;Mp@XVG=aS1Dx^LGl8PL3%ro3^EPe2IHCBMU|Novp1r}^n@23}pH3|QzW zuH*=@67X`_HmnQ--Dfw;v4^*vC2Momp4Wsmj;tIYh4O>++cUM}?rwcw$17SPS3u~; z_5m>nHRg~q19@-ntI$GMjGN|l+J#&NQLz1k1oFZ83!fHaem$h|;&%Iri1(j=P)Q?a zQII72^a?RfzxLop2sXSea7`v51o=GyuZt;ghJt_KQj!1pWYSY={zoJSdUA)9#Jr|a-^;~E z@@TvY7$k9vnrH{jsn`M{esrG7zN>O*DxLICf|jMlub!yiY>=NBIeOyU$qzipHBvJ$ z5Hf=307^iVbn2uVsuT6Y!(NO>yT5P%{->t$9N&6_|Ers(X_QmnN8MS^+10u4i+qm9 zjljlHxQpF9ae_&$rWlht$?|^maGHag6OqN96l{vOp#F6)96L8iwYgcOEQH!$b4&eH zcKz#kT9C2!&#$R{DT4ZK;g+C_iMBdk7!O|>C^aD%hDu51l=FQ44%|Bwtg#HlO0qRs z%+~9C?-%3FghWWSPCQa9bo#zHx1D(ga#}9%koN1H6El#j%mT9X`~~8iLJ~-sASZi1 z1`1-ww@5@48u_*n9|i4Aj{1lDL4=T`1)e8EZsuckP7gXbcmHPBB(CyX#LS`zWW3EM z;(`GpITOuy6vbUTRo+y|W#Dn%^0AB-7;#?WXu))Q1``L^ii zoyLo9oAy@0X`4YaQSD>5X%+*NcgU7QFJ6-FAcr|c#6*U2yaS;$|n)ZohIwCpaUTD;aroB1X?>FoX z;B##;-Cr_-)Bst8VLrc2>DF(V-_4mBZ+ZleR4Cm`d75azC<3OzRo_L4GY97|@{6v7@!@_gHD->iG{Kv$Oh)u&!v6B`Nt zaQfrZQs(PKx>-?-4`Ndek}+aa(IR_2QI#gFDXZd7oaUbH%6*d#1IgVd=#1epTlf?)dswpKpY4yA?6IF*oQoM4&!=(T%L-!RuS!eM z*apcrw~W5$cB_7gihI@=Hej)WkIXZKn{1^)1$S7WH*qKD=b`%@K7XCrA)@S*Otzl- zG%QQK%H&X!2SHGr3pzW$ge8Lpu21y)R&1->Hh!=&mIkVML8!0icwYX7Wpt6Sesd$1 z#Y(@&q|=E%LE&9^VmhmGp5wTz)B?rdLXjCFPwul*J{N60Y`sYpJ9;9MUv*Ph!bcix z9imuuz2v-S92kHYvro(;mbUK%P6PtapmgalI}{3W3&h}<&+M&J{DLoy)su~2mw5i1 z;Fhk6;M`m3M*=4Tc%M%qB^cjOu38>Qjc|uzC}+R%Xq>C)%+k*cbolH8h*$s^I@Cq! z5s8I1CP&dKc?QNloc}2ZI4#YlC<&JR?XQB-@(x3p%(Z;ZFZArLVgXSoTLYPZfEsO_ zi+uJnY6}M<1U|Tw@A2rH%)GvMGdwpLf=@^R;|n7I?xar^@uCGbqN-&Hj}O)bo@S;3 z0BN%?X@Dby##@y2&G-aOU*0Fm6AThf>DqNbV1Ehgtj?#^Z9r@;@&QyNHmW3BD=C3! zm^Y_;^A~*hX#tZAsvm`uNU;8IX)k{>Vh%|8-oN^KtsGYO^#i@okup2JRAFCin7Fh< zUn04j@DWIN?29rt`{Fi(x4fi%Ny5lRhfrgP`4LBJgc^g*VSQbN`|8wWuV;5?0c~q9 z`2W5d#;?62fv{gbnTPijYy5Ri?|Ar@y7CL1N_EgfcmFMY)aC3vFUNFqv*98~c0Egs z*wJEvWYp~%+9>8lhQ3UDd#H&Pk54GzRfVDj#`Tmt>K8$9^9>4mpda2ToG1<3+3%r@ z!-nNOWzYhjA3k3L2Zf{ou*icRYgghhhY0$bCt$pRAmp|-+5+U4%^kz~MR0fuglkym z#x&N~-^xbAjNc@W=W~1rfeazPfEO+OWUBwKaeb=7#oQ0NJ-7b+Re!nbk|d+g;LcHc zvqQHkzp!;gR7W`RLOG``AeV`WS|H8J$)OX#c2K%2tCSOI2T$18(W5O^N~w6!jMp>k z@{ukU0HV|GR?#}oYV{*#`YV>rsdIB>I1q5B)05w*ooXa(&bRTD&{u|WifHZj+HKK1*l@)O-ATU^lFvm7J8&|nXiQ?4TktYo!UL#7-u*8 zZK=CFeT`asMbpymQ3=^zwAFj(4pSce@?ZoV2h^7r!_D)DZ2EqZi~HFiaQ|k|7$Xgm z5S9a7p|%M$9Xaq1;h&_KO9g|nvT}KK2(QilL|$Db#4;SA48pOa>kgeB^q{Y9b=4LK zm@`KcH|J8N0t285x1ITqpJafGR+@hsbBGOqE`a|&uZr@M2MBdhTRF!TIXn}@bj601 zz)`zfHB}$Yc`)~ez~YIFtRit0vUH0KCt}PrV+r`m*l&jAkTdXo!X)iq(gxtc0T}yB2=kYJ7RZrry~cdOUIl4lT$Utp_kMw8!BxDY(S~_* zxLlhbss|?2TlWy+8;j0WVIN!()zW|qFVEC2a32u8-_6@Nqy=OfnZp|vfY>D!X;5#Q z!LLtOCjA;N!Al_)m-)=+Af3Fo)XKaom#Gxl!ruLblw?4q+#k^G&Zu6!1;JI)%X@C)HjK^0%!8iF<&T zOk`DexKGxMwoU$T^cFT1wD-o^4c~`Q|Hf{S&UnnuPR0&` z;XwHP4hbxW`8qbAKcVzQ_LDsxUK5Kv%32Un0kR>5-ft{~a0e+la4?FXx^egx0_L2j zKw^R*p=!y7SJGQcW2FfC;P?mmU zsXH0zc|okCg7*(V~mt4Xxqj4kE=!S%of1XGf1+aFmE$vvQHsJ1)ZRDCp;JsV|%=GUc0E ztgv5H)~Cf-$4Im>y=jJnLnvD6M3z@vGBdS)+vjfSefDSKgSR0hbHO(E==}NRak61@i$vs6;_+t zhh>qEVx%5fEWQ)LJPW8Y7%p&C)6o8W7fdbUCab^mH$g0d4j-h~4le-n-|gi1EVy|O zWoDl3C6IU@A~fW8QC)?qsy$y#9d{j14}%zi73&UzvMUk6hY29@xU*vyK-y#1=w5-7 z$+>U}O6L%AH%P&NNdyijGF60wO_gdYdbY2VHBWxVaD;x0)+a9loWeb5m_XiULM?mG z@h*dE3glZzn$lT}t(4Xklcq1~{D-3gZgmLZmnOve0i&)i!7lz|pNQe$j+-&x%YrVo zN+>B^1@7rXiv35hf*u>qJ>71H*%>1iKGXeN%2|B7le<4t_7W`c@`A1q+Lf1qIcuA{ zMh*GF+C4IOuM**Qd#stZ?kP>~Eq5&bO-*@C!=lrZCZ7pJcR&648_+eW8*KLZDBpQa zXTUFsg5om$QKYI-$`s6&-0}z;^z02g%LVgAMwMsr0I(BJMtxR=R7JhNk(7W(?*>A( z6!#pQOYv7_rU`>DAtK^&8VrF$SGx4h2}bjmU>vW+#0SS#BI}}=vCcP({?Bji@;dIv z`1zHBdtBnq$_{A7?8p2$b}x6>mUyg9PpwNJJK#W_G67c}<-0vSh}9QEA|p4_CpbPP zYG`jl>uG;@vOS=Go&zMLt!dYLu`spFPP%xxiuK*)v+oV0gGolT zptbqRzRIq|^|#;a=T~|@m%?o6H|UQ-7%2Cu{lVSvOZ0zvX?vqYNBHr(PVO%zd{~Zf zD!1M!$fHs74k!*K2bZ}?;rQ%gJf%M@l2PXfNIJlfomLz%S~*%~<$_Qnvlv|hwC%`l z|CWDvC(WZbHasj5VS_`!^tN#TLNPRTWx90#jtA#G|Q%dC*VMpr$ z0@?rREu=fbF-y5i|C{r2w&a>p;@-(dE%S$6i;GIE$-;di$a;m4?T1hLBTXtEs%014 z7p_W1=*lH=+zijw=&os~vN?(ZwG}KZ+mA5xvZJUta(;=H?@!$a;RD0>NLqnclYS$^ zW^?oUe0!+cTC+4P7)N_60ab|jVL78uZ^n!CXRHOt1A{_ceHM96aAXk7?gD!VndX;q z{_f?RY7g3}_0(PD{g-nL#w&s)#;k+F_QS@g50030I1{-Ko@g)Fj2^O*u`e<_ni;4f zL&Q=BnLfVBmE|<0`Gk{(&GGL)k|>1p;5bo!)7yr1;|K8ND=cqK4XnIIj-`zmfbjq4 zkA(CWSgT^A($YNNO+?gk(JYVo#tZ7z&F)_;;r zw2Yd8WCE|I6uI)&{Y^5V32j5V)%Dh*%(^1Ci7z^o$5_Pb;&>#!ra_#BkxcoxaT=;7 zyN<`Z-r3VZ2r1{=XCFw}d&bkSAi>CkNqGG(_R-#vIFb{zu|_M_+M+>&A@NP={#@$6 z^rx5}Kfb@9L*%JG`65sFRMH!rd1_kO+(aM&tpKUr;tp3&0laAY~81q;tsFvC04-RiFD?D(qYC>3_j zLJV7wh2B7V^GI@KB%eN$zFckBEP^{{;x4T3iM5F|}V;p7Ak zV-TmZfrGilTEZsZziX150O8Q|_y>a)qe5MrBa_=Y=yldN+q}*ccs~{!rod#* zmJ`?Q_G$% zb)m$7BZ5w0Ba5Hb^){i{80XX>I#0J#07P_}o3ptinY5Xd;2Epcty142?DwsLO{QZy zo&IGMmJr!w7ZgNh-X zOuIPA!qR;Y6)sM5}9`< z6AIy+vTh`&kZ*+(d}&d3co?5_fQ+{oIS> zbtHl!-BAo|J)-+YYQw{kFEL^Q#pJwTGlTEa3P&|3$MY|d=HZXk`rpUI67>)~NkHSz zooo*Ie#Js>>;~jLkgxuJ;!d&i$phrWY1u&+7IVCoBvAI(t7|gSN=0kJLG{h6KWnaT zEfzst>Z^V$PZ?GqLf#N{zx{h&GQRo;Bal8|T##)Co*>dsaQ<@R!Fjt%jajTWvr|3n zQ+2dXNjYg~kX$tKzesF#NC59&q=bwAuNUwCzt*zY6Po>qG+W%LIR5qa3!XEg*vWxK z*igcY_J{Z}Gc+8mHcP?mG#Yp+3xG1MCYSQY)xepf!nBA;Woc;YdHBV7>9bn%9RM;B z!011KYiWDFN-gYjCnZXh{^~7)7l5Zc4W5xA(%h;dRV;ggPZ?f-i_k!T`R-w8kFhOf zySIIX?D*g-017T!EOj_TmA(O}4umW*)KI!5Jr|)*HwDt-BH(f3tg!}PL0?mR!^?8D5Wf)b6*r?^QWJa$fkMn*A z@ATMViHi80tXlwu;5!ATq{H_k=Cs3v^Y66{|KNl0|IG){&>ifJ|IG&AF{a4_O=BUB zBcOT`>^Q3Ki?{_xmlFKafy!MJBO=`x4+05|ALE49uQd(T606wl&Hf>ZTwhS=xKMvU zn&QyZhCEdpn)6N?c`I_hUu?g>qFj%^1O-V#pAf+#YB##+T5KA23_qAeZANPW;%jTn zxRxnvvK0P_WBZ5%V0IQB0g+z0ZzQxNiG)3kc&T5f-xgS^1fVa<^7)!#3GN3qZLEfNUq5V9QIPG{MriqOFYX zh`KW`F1vdGJAi?ANttnu3E*yS6Xp-H*&>3+lw{y8w!8eB7X)|(X#Z|YinP>a-B$9P zVU%gg=7OxTxjKweP*m!}?o>?-ucgb6;Xd3_x@Xnj7&;d%D3M`l$)s-xHz3?pZZnW$N#{ z*!B3s?&WcPyQJJAbAn@ZlCD+Iapxcwm7N^a=~T)ik~KFsSX)KC0T7miQjt1fhj^S! zNRi3=wWHKnv0R7b#A;&-76LA<(TfJ-s3%Uxbnt<4Q&#Ug=z0l#MUt#VS{=%b){}ux zSN^sUnOjOc127FHz+C~3RkOzY5f~}SJF_9CjZMuakI%9DnlZ@Cw5j&)*_qFM=d&Q{ zxRGc{b&d_tI;dI?SE$jCvE`7@?@K^?I@Qj96tEqkQE_`e0zsKJOR?s2vgiKJQXMZ8 zF#vLSSknEM-9D+GJf7!FRp*bV`T$gZNyr|fm3>ixv?7}E`myOfun8icZgvDnUP7*H zCdKQl)i%tXaOgAO5Vw9b=AK!27c7CwN5*-)QAqU3)K~!EML)<|&=scok+B0`iP}i< zVyxe;1@w=e=g))zU&MWfN>|mV4v0g!Z{5WJ9~6*4nrgP+e|?$#_-eM3%2*J<81P{4 z1@vBH^Qx%ab7Aw^zrgSBsf?^_(Xqvisk!_HB3@_Wv?mNYyiSLIZ79h_@Y!GBJ;8*Q z>v^v1mM2Jp_N2-F1u#j?-VV?*B{VnLAOUf8aS+fy^Yr_wDDE87R)&bV0}!jDV2WOc zlPmPu|FTR^$m?~-tYv;o@g`0MnKy6Tq%%(#MNWPpzI ztx0)SIGoSwcI+SBQ=f}IVdvZe?2K}!`6ulzr3v#(udimuUrft0LrDQKE4IefGdMJ| zwdAv(r9mrQV1e}QiApB)~{?RM-zyBUbbyE)wT(x+V_5qM;^<#^&coPM zS7EK!Cuu+lODGdU`K`5~Se$$&gzNw+;6O1#cA`$gAz%ZvEOy26xdYUE>&^OmBehS1 zvtU~CMJk>z=(h70*EEJ#V0@C@Ea7-mV|^ELRzbke7l~jl`-X<1W1&e&!<;CJIw`IL z{{~@mt=<$-RaknPtimr}>P+O2shY3vzJLm#9ME54l(H$vc>MuS4Dhc;1u=dIU{w=G0g~{X)-y-VdN>61lKMWr-_Z^fDx4^@sNN?yMNnP`e1qfwR z?igOBWjAQ4jAZ0GU*q0dZN;f)Gfn^i`w|doG^~f^F=DEoHqpqT{{5?Z)<~?#qrTeG zhUJX;Nx~}WD~Y@-s(~@}t}l4}KUkPpGpkyhj#h{(Kr9=cqf^7lURk+e4$8 ze}j+y^oPWePiV&6vdCPQ^i_X+->x{~F;l8FH_>b^2Z_TleQeitYr!#d2kjSv~^%=W3we z{l_}j5sa0^FP=}&#HrqXy>>imvD$V@nubM8Q1>x0`H&WTP1GmXi4Tj{o>I5;I;;b6 z51{_MT#$wo=BYr@aP3;cg@`VQn3z83g6I#0^ zI0;`Ul8e^MNABAfpl}EVD0ODOVFdg>92F8ZUlmb#c0c+8EgO52W4#+lzaa68zFd-( z$JQGJ3SAW$3}nLKf_d7cVoC?X3&fRQqEqRWXJ0qFSK;3y2)YZF(eZGkJ4EF4pG%2r z$~~vb9<_LyW*>ikYh%(Cou4rc1nX@EcOI^F>KA1hifyyrX`%-$^f$YJ|4!|S3apvd zpe!Um)ZSkkdEq-~h`Pt*L{lkH`q+F%2b>-dA!pcl0S$z70qSxMMJ0&?o6-UZB^;Gy zvqk9NPJH`c+`VO3R&Bd3`dT0$pmd|sQqm1C{n7#g(gI3IcY}(6v~);^h;%n7-QC^Y zUBbE^zqyXN_qXR-YyMov{^N1r1LGOv9`}9ad0wY-?Kc|4xTt73DZU@hLzMMe9coLq z7GxY_#E;~Gxf%unOr|YopV%_El1_U>T%v$ZyLwh-`E1!)4$p#h_ z=BQ6}?_CRg7JAhAQDqaXf?NCLmKl5~A(_GYvui4T3g{W$Y2j?dqd9Ycnq)Vg`qZJ4 ztvp!Fbb=AQ6s?hKI5-j6v^Co~J;^2Ienkq0&h}S8bOk}HrW4FyeFq?;SGwb6;bgSPqbyxS zidp=&@f!Zx*d7Es55D<|E2h|qjID76Ku6JaAnFEa*mQ-`AqHzVT<@m+nnf1kM%C zWIrpwaVNI!A!4Mf0$?oy34l$Kp79u+5CYV0?INPnxYBbhU<;fV1Duv%VpkK`8sjyl zLU_#qhg4KKIr|nX0X=|5i{aLP2(bMu?cRVMfr~w=?C2h&{VDRkER{^bYRn``E*~GC zEq<$baoamQHJ;4bc*rS>5O5wGYZfAW1;j7fnq12w4JK~CC;MTukdVk27{6%(|2S4| zikw7mvirA3x9%fZKvDuLtH^o!ogEzNLbGYZAEP;P|EItAj0F1DyP-T8SVvg(H;!kV zKPpr*AzE4bH@DR+)DGOOcVryrSd(E65d}pn*VFK(x3~H_{*hTW9T*%eC@G>Af+dzx zaQ712HLQa|(h#}emxM@hh=#zwoZ;i%Ab_->?hp<^nwDHm+d135*_ksB;)QhAB1LLV zw*d$AKiUPIE~glbfZv3#lIR>73VdcUd|nOart_m=v9ZNtIn9e=<71?*uI_ebIHW*v z94Es9)U7Dul`#Wv1K*yQT?8};;$I+L;wnbaRhO3x?z#W7_bIwUqO8lXizn0$AmB}!w7<{|JfY?Avt_m zS$|M{`3Hi=4UVI4I--_fCen?Ng?d_UJhy%!zv@A|Ioo$EuNHopF7`Am_NnWqHu-T^ zzLS}+3u9lq0^huJaCnpcMMa(T5o^de$2r+Hc!t;Nb}cD0_TQ9%GY&rkyvQs=%v zyOdNQ;gD|u+Y{MiouBZo&f*|IA6qI8E7f$=Q|XFhersr$+&9WKr)efVp|3m;CG?bv zCl=Yd@MXRVzJP#$^!T`PM^7S#w(CGkDF!}syf}Rb$d~jP_u125@cLW0Bkg6x5RaZI zf_w>>qdaKY>RYzH$oqKbJTRz`L0|lEB$3^6+po~tVh++n!Eho(}d~5Y-^U2v&LVYBC~OBH`jwBDb`mAvF>b(i*ReF}Z&f*>>OY#xk0c zveI)F4)M+7Y+XdApF8Oww%L(kg>iRVzxCQ6p4a*l=~u2kqdu#5!}d^^x%*u(J)^&+ zl#`7n@F_h#nzo6F32j$5V;`6&N*=mUN6Xp0d=1XtfZimbG+c)joREdx#hE&6)XaAr z-(QXU{l3NLboLlSJ7Bfz^*(kJm`)|F*4HvhuJb%?Vc!*WzbZUGXx52dv|`45)l60yYq%|b_1kr=h*sbG zDF@X(?I*1t{Q_zmL;my5lI;Z!o`TMA(X=C}?!}iV|I}n>JsW++CRFiv(x_D;!S}H7 zU6HlD85tCtgeqD?iV7G+rjhcdYH>w#UC?RYX~*xnWADYcnFXBmarSjkpw|x3MB(c)3&vJ1jjo=s8>X7;nFcjhc(0o zm(+No?V4hq+Y znJ5uV%2CrEbBI@<8f8;W>SmZK|2QNF@G`aS6B#sqGIh$!NX$(crlhlc)&4VQ$m zaksyHGt8OBdk?!7Cs-vOWn#T`X8Jmvl4hU#`c^hxFNKrt<8Y(iG;dc;8!Y$VsGzP% zNw+TmgoVZ5myTM&_ZMx%2%;$(Do7r+EPsA}K)Bla!} zj^ZTfdoiYh{SbOqFhi9oUZ5My1Ru-9p7JUgJDhpQ0 z-rvO`eAEIl^yh$D8LchthFh_z5u2M~Zfc%cZZ4*QcZnzdMvQw=FcJ+8kB?{zW+dL5ED7di3X0)0dIGP@OuarX4f(W)k(NNY_~TM{H0B*qij$oQ z`F{Q8EUjijaKVnFDH@utt4P06~aC&MN|C5p%DSv-f#Dz?qh!(W%TSvtPr!)7eIOO~!qk6F@% ziuY!`DwiQfz`LCS88Q(m7^pz^)~Gj6ltz7tBOy3f3o_VrLsEPPGX7r~1-5s$$66*w z^9!CC%E=S4o3s=ZhTk8n^UjWLur^%})a*F3Y zx_{mLZlwjc7>~ow)e7*@4JzDL5gdhUjz9CI7!RKATc1`q%`@Ob31e>E z3ekr6mj=nSpP%7}(U)Clngva*(V*gpkPp8~I7-YgH2G7Ye^@Dj&@XuMsZ9kjU>S%K zc}j@x#Qi5Wk^dUm6q@}KK87o5Wgvdg3$0hzqApBo=3H(u4K+PZ? zPT;@)a2%d}s7Z|R56~%=z6c2|xC}AAV?TO*(e&tw-}JU;wBs&zY`q<$Z*bxQfZbwZ z9qlx%lm?vfCGdDY+P#-OR%OBRcFU~YoZhX> zij_U^i|F;0wobjXOm9*PD-3+EaxiQ3gh)#C^g8YSl;bA_%SD(+x@78cxy|Lqd9g@d zkW_&j0#>zkJPV7$_b8)Q60I&GA)z}C-Q(=y-of5JHtJXWRFlPvu6TBTr7})8IzGOy z9K=_9$7oCQi!?Z#%wmHr$FV#nI2mTfkgs+(} z7sv+--r~>DP!Evgc|(7?OSVb5T+nEgY>J*`WV4%Z ziMWQ~QBqSCul{7=JtAlrdvxbj-D_$DhgauLYmuwM^KAi*J>{gl8kgUAv)i{w_?&}n zTkpWwZ8An!sQeEG3`|++OOQ!ygId7X=B>p z+Wh>G$Irh~boL4M*>?G?m2IxVTIKz^w=-De4b0kakFl5~FxCS`df90D$|fJHo|&b{ z$#7{A4++oLy9!mG-esFL#Zqp?6a}~_#*oQCqK7Dr&3V@?@K2~W)0c=lKi3J50sOIs zyNg}2eE11sjXI4m{x!BLw0h_&zgRE&Re>3)T3+jygakS0loJRRZ~=%y3=q+(E%LEm zQ98FYar*H?l$#5m4ilH8I0XFw&~jj%D7BR!e;8cs#aPY543Z5H1ZQY@up6SkJdrCK zBN)=VyKv@Qh^gtg^@N8i5@rn+!Y_10mx`)gHQxQ!t1i8EejkeJvOJdqfh1GW*R_0y z0_D3ii%LuAh*o(nkxIWx)k_o!%)`AcBVc5nW>S0!QtNO;gX7=tl%N0F@YSFcd`t)R(@$GX+YwfIAjn^)$=tX zorvhEPK8E9yu_iP=`vjUH11Sp(US60&aFETBuL=AE9f)pE7uTIX=&PL*kl~!=qxnr zZo>pdyET?i8$H4C0%c#}1`ip>$H(C`Dpeb*Aa)0n!J=DNl0aym?IRKaXQWXi`xgK{ zNL&~Zk7YM}UiB=3zA>G}D|V;$)8Tw5yTvQ~=8tbT=`6G(qzsVKvH?&5iX$=WGcw%d zWKxSh_KGFjyq^JTfmLA60nC&|c#!Xh-%U1W0^c5Hf;6`WjyW&p+)%8Qettqro}Cm9 zibA4tiVHR<>isJCPzwhFp`|eI)W$PmM+WmSdl-%q14C1uAP2{%&-S5EQe{4OX!?s^ zlPg1ZJ&ZwfQD&&SdTXKvOWZ`0*v@{F%fI?`XK}oW&bu2eG~8rH<~|H+1*G==(K*`f z6S5TH!=9;1qK_HkdN}n>&C2;E$kLNhubV%{0sw99Xxs`ZIKE+Um3cpo(jfhko7~pXvm(>j+KaG2u*EuBLz2$up`NEvvMYMjU5$`(^7UW->>2UCSHiQ$ zR}#y1pF6|coV&;fEwjg`*wBmIG`crKY+wK7j~962kO-n{*sUlwut{L-cquQVzA-Yg zJ#(T3-I%7nzW29ktCLN4QaQ{fE2F7{HU{$K(2!2HTZ%a9#HMRH^SbF3Bg#sJS-MSG z0F#tyH0lsYHjz|_+BEn3X81BSA*k6Sa?^LER0C+O8aC4rvy2(1GlZGXJv2y z1q^leOG&wP$HnnUn1Uu+z@u&58m`KXo@gt z)pXp>Z+DXc3#l|HxF_Iz@V$W6OkN%fJ3N--EzThI14&)oq+OJ;vbdZahPsw6P=QfZ z<@5&>7S`$96OdectdPj>mZd3)`OTGC4>)14p`!n{pW-9T=+_>h&{=MB=-w@M922<&(@8`b9nhyH!G~O4t zIzVCOeX8efkKL}2e|U->fdAiv4~i%%ePRV@=Gmae+PBzscJm7=FmA!g>F_qZAzG|N z{#8@R^H9KkygXA33_46P9xr*MeG&M2Cag3^gP&L&j4!ReVhkG1=@({Q9USxNuZlUw zj|_V?f4!ecD5TQ~v}EDzkz765aqILBP=kTGFYR+a=LsMO7lBX7i|6}PS0}jVSFiN4 ziOc=>K)T2WlxkED;3r2o(7v&%i67T&}Q8lSJe zoeSqeG2cWo*gHNAyv@>*{Fb|t(%}86GM}h!qLkqbQQ|~_n@GlM;RkEe-YXX9ex5L^ zO3AyZqTEbG{#jIcYk$h^>Qf{(>#o-&4%;X#WpAwCjplTegD!+`D7N9DfH(uA)A1e= z&-!RKHl!kOH`3za631szXwiA8-*rk^{bMu>|IE9NgEs+Z?4dh7o_JU8D;$7uyUEdM z62tcWT!$Nw*Qu7aHq!6KxQUm>VYc;P#B!!RB`wo<^c&B~TWOYe#=3yl6MH2_nIvRn zb#`XLl*IEMV50xp0li6VZCzJEYWcHD4J|~u)0%3Bl2diAA*Oo1ENpD^u29{X8Enxv zi^t6E*`7v-Ik{qz84NFsBf^B?O%`~|U)|0RQnOuY6b!r6J7&CE3Aqkvt^tJLL?>i&RN|KT!t@7f&;0*7P*f%dQc z;Wg)RXObvagr_?~>E`9aukh&`s+Mj0IbNSpLe$t`IzfOKgs+eeioj8I8X#$e!jq-g z9SR#KXMC4_ImdRidN{v{E_OgWMO5egiy4~|CPpzf@Hd?oB(w_Fu;6;r~Rxf zbU$mxu?e{KQDJ&Pe<7SpdiL}gov{+x(j22Gx1FYUz>wh~UW z@n%2e)$zspDERe%<~;$loN{(_&X%uJFP_^Ys&^>j*1Zr(ysuM$l?$;LwzUg64+68f zCH7F~Pz?*#I6yT=va`EXu(~|2A+>;qr@gH$+0PY|NkS(R(g4^hf#&TC1VjWyhH2!& zmmvpKup7@5HAk3Q@?J_osAQP1i&3)G8KIxKi~3GAUqqgjmDPA*#w#Fn)MU5+gg z1I;3CA0(fg@ioc5>$EHNGO7UO%qX^7ml$kDE!+-Br0M$2DYr6v9-Y0*3GL0fg>s{L0cS`Tc^&rgC9APvpmJo$t z_-Vd4cE!#8R?!|7yRHW(+gb|p;36vtoD=TNgvYX4&{n~ZXGEpEm_i+GZC`lUT3BGc zAQ|b5-0Y9%#qRlLeye1g^D|8$e*fs`s^)+3$7=SQYrnqx>4@nBQNP~RYY95@+a0em zz=TM2#T7R0-o`w~^)ty}-vQS>ZhyQ&%7ZOocoSYslD-FEfgah?N99Y&%C0Qu=bH?C zCqw9%g*!b|Fkkx{8B+VWsi;ri@=6B6%BJgr!(RAMKu}X*$ z>l%6HJg)Ot8XNrYaEOACv`5n{(;yMVud_RDk@JWE2@x+OZAd+vru>^z^m!nC&eBumR&{@pE+7#Q>XD+GmhKrBjupfNZq!<)y?uf4|kGT3uC z$GP+Tisw!)Aeyaieo^q2TLz^{aL~j*Q)?2M`^);2Jk_-7R4FQVU%c_OdCEV-rIAyt zd1}6^Ut5-hEygknR-Q4AGhKYpr^I;T3kZgRgqdg@dk#z(W}(+$H~;51FGrhPr#t83 zKn-@NT3SDXL9;hcf#==bUsUp3(t7t=)J|PpBN?7fRBf+NdCD(nQBqwaCOjsl3+Qrv zRRqpn6G4-O4&g$&(sDAQijcJO6c&~I9U2zqlLtPc0-M;ENe0ap2jOcZaSKa+mI{;V zTQmoEFj;xD_xKR^T$w8%TQw#^OsYU)0vwYj*WLC!ULQBgV43Li1qn}$u!)GDNl zR|_(zm-=zY)Q;EMbF{RapG5)Ze;+8ehCSNBdEma!Av4Cn?VRuLK+pYOe}w2{&=upS zn06xx;Q(`0Vjn@FaGPR)^a&^wK3%aa7~nP}6b`8Q_=w?MeKGoQ`i426!TVL&M6{Qr z{5~Mc$pkz)>O@;(IV|r{$-FAI>1RMVG6;#s3GF`f6_1*gvsYpMH3Y6*ENZ5WB7R}!3(Vq{O{6M;S0cE0xy zWLY*)MS#pS9y5fp-dfNfm$9MT?K=KfD()s|-TZ{m+2(7pG8G1?Ky!z^rl050CveHu z0vmXPHF&niE)N1$~8HUw?a5JaYGy#@&K` z#nZK)iV$(hO7=#<_S0Kg3Wa`!d;(x$iY@2ES)x`!n?2tFx5}sveyD5^ucj--(&c?;`w2~pEo25PmCJ435k59K3q)&1Y~}GtB1P8MNLzGbHe8vl4LmX zN$(|)VLdYoKL7JHU&5B=M9@)x*Y?8fu0mpMa=g2VhhM-dMEMYN3Xij9AWne1z2+nL zLyYceqSuD+I{tl05m6Ha`jU!0b?j2@bPT8CUEnh)si|$DJotg)+a8NR!s6v`T77kb zT$_^&DQS7V%3i}ftq^J!mRQKK9+0qjgV!XP-IaXQ*5CO67h?=Z34y5oJ6I*RmIVT@es=L%8&LHqRZWyew5C5|F)r1_C4E zAAfxMj)CE?uPQC**VmH@=yW0=pJ9c7^cVO1)hWC*#+-nIaU= zmN+UMv;En|R9xbJYc+B-*aMzM;TaEqUujxqLykE?Sd_wG1=R=Uned#y%w=Ta1 zmw5JTVdb)1-G(J~G(v8hXW;xHkGglsn!$}*;|1{}qJRmhrd5_^I8<8W(W{$ANL`(d zFBqZr)Fy?fL-9M%el17F@>nM_*WmmG>1mmzmPGeEc|=iQ{7@~K)<_q60pHkc{voex zt&^pbzqk8(W2>3nZ2TVBeyxoWN~jMTH8K_2w~`@>kM=C|ICZ9Y1CDKXse4}i{o$%5 z{`-q4aEeRm13+eHR zWDd6%%!nA(Za2fuViX}f1<f z!BXss#k?Bh>52mbiX#Q0qMWZt(d1bHe(bRGw^NUg_QFssnihX8Iat4i-E@i1H&%*V zyU*XAJY_)rT0Cw9vov^s;D_i(u$!O|{pmW0-^r|8uR`mAo1vqiSNlbjb1=gMP0wPMn}(IEgZfrLVwFv_G7 zJpP&K_j4}`$=NxFBXo}lzz$H!Oez+90m<@KOh9X8&`bI4?yvQEE4}Rq+uOS(iMdU& zWc(a4Bi?>8*f=AdQaPsreP^3@pW~RAb7l8vOX@Z>PY-z(**v```?)Ge-M#7uTT9rX zqdbrkiF{)MNe_Wgj*#!^z0h!l^>svJ4Z4vgeHC;tn3w{<9SGd53g4(?elY`J2|giw7hUFuU@F*}uAveMKzoUJGxU(4XKx|=ZVd>Mh`u99wZ5QHuThy{6-2%mdW>U>#eOW2h2EDW2@Y^cgGrQ z&(wdg-|-37pXq8B(|M3)(#c7y6b@Nqkw{9vvD3{CBaFXn;mW(qHUlZ`uOQ*F+vbfx#fJI+oSE-AzIA4iKm94zRk1!zy9bvJ8IJb%mJCqxb6 z1t6Rfe1RkQ5mX4TZ&v_Ciz$`Vus` z3SmV5!tQJ%t)04Y^mwJWRbjM4!XG{;?vu&J+2a4_@nxeT=81p<*#Skd=^)@rN*Yb`f?0gvo9} zezAo9TR99RN@3y8>EHB3%FK7ga(>WM996_&Rty7{&7k9+RSBGg#d$AoVEc%{70<$q zTJsnZ*}M#VPZaa@3`)Rm{^oVnj~5cU;}iJw;zGsY(tJhn>dpxXpI2fcSuq|%b8Zv` z40UaB92LaTQEpKza}#&LAOPCj{TGLre4Li)@3ZJWNQy#9>~93VQR2bcFK~y5T?LK= z-ca+ryD-eABnHfk+j>W{)q@AiUdvnV%^3^kecv#hk) zzYW8p04UNAu3_bMACsWR)!%^T_&zt+l+T$jrH|?3aGgr6LZXK=4m~UoL|!-%>|fUA{GC) zYDu<1Xj`_ed$meXR2V0rW5yrRNe+L;Oz9tBhyL>-YC zrd(+p=2KPvN?w?rt-E`&VZ2D#V!yt7PK={HT{i;Bs#TuDcg_m${idie{MzF@!1E+A<4HtpAwc z&Qnr#eD3EUx5)+vkBHqu;ubcxjf_N#5e{>rfVf(7hrHJBWfY-Q8(br%8UIxonD714 z>bvaT%-?nbP-Q0+V*ciq(cu;%k@kd*!mHd;7eI&~fXj@!cy-QWPZvk7Sn1D(Z`u5( zpYe?QCAE{~W6vnW*#b--;6NkjG|8HOC2Ko5Y)Ht*mA&&aH{q*m1xWoaWO@`_>EF@| z4AD?|Of?>_=VuAYU z0+#A%SANYetz>f`A^$ugu_seu-8gIb0&IR5Hq9y#!X}gj2~JhG#9jo&y(qN7{W1E( zt5gof<0Uv{0B}()jp>oi)Jp<56$*XOEx2&YQa8o)_yh(icfw%~f;^&^jJ}#Oj?egb z7GIST;gXQRvi|8?6u1v+hy;_afa{{H^8`h4;gtOR-Xu7%XlS+Htc@-I!v5xJyK2a8 zT|f1<))OjOWpp3lyRY-lzC^YBBqMbK7_w_{QZuxmav>;ZGhT9vkIzn%fu6}aj7g~B z`U2tgca_n5rFDX+0+IfRCdPuh22m9QL%?g*g2z=k{^|zmP5u>Q)yBBbS@Z^Sl499y z9)7!r#yaeJ3sJ{~CI$$cDXb9_%3EnCt4Z{s`w)wydnI zA|+KF4HXq(^T)`|ER9-fT?5sEhn_DX4x&IhYAX7Sdwm(Ar~3V26>Ow=&1XEkDNa{w zw`M`Z8cUTS#!EG5;+WfN<2IsQ@p^aPmO*!}JIlaVymG*C{ZMDp=5n_O!Q{q1^I3>bE$Ttm{2r%0@NRb0p) z9TXv0J6V4A1rg|{XJi~eJALU_O~F0Sj8Br7ghRy?y-Cz_^*02=??!~9VP)idhR=zz zQ=0*$+P>(!Pn+Y9D;gRW(N<1LLjz#P_7K|F`qDNFu6C82rhd{HPZtl3282A)0YnKg z^;LM>%`nJV@!Icp0~8uC?yDOa_dzY;cp=_`L?_w=Lt!4qk)c2W;j8NjGT)Nxe4_(U$8&wV3uBTw>Yp z{pf^1O@ufqZ#u9=QnVq>DK$@fey{E^LL954uyMS?0Fwu0Z?dbjEkJfZu6NHmyuTEJ zAKf(7>~lq6HOa>8bbnf(K>)PZHq|PuPS~r<&kvMOPqgYT2@oATs-Ko@qfePxn@t5F zCYKnssPDeY=I3*GJCfcnrX8@fSNAtkFhS=j0^kXe>=_wa=Touf`lWmu0Lisr>;$|G zO}(2``N_Q!^-3{GFvB2%i`gGF^3MU<*(Ru?=3xmPt*=Y>Xly|M-xo~5i@vwMzP+aL z+!Pf;cjw=mGC)ge;;sMt&)RCF_3u62!G{9Afw}U>t9z&~Anmayu2@*oN|+&?t|WOR zaSvG%(Ubr*gN4&W`~Wb8cGH1X@(@yjFPDbk3`dR0cX2$6zG|l4wX9p^WPZWB*mzkn`<$Ezz3TtPbr6!yRRtP#Uu0;g z@YXf~BGODMWQh{bF`k(SU&$2!97FF#q|E1#OK-$(>C9c*q^&w8{28rpp(UzDR!Zb8 zkv1<`S-$(}bjVtkm@l3yUw0mC&g|gSG&Y#jGqO9PqJKIP3<+GsNf~H+Yh&Kc*<7K$ zV=>INAa%Llh}8GZ-Kgqhr#IT7Rc!wWBRX>HGg=_fy-1UH7f~Rgf^s!bi0w!PN-)J` zLLAl*qzgz{U?Zj;Ukv9X^fE`x`BLqdmAK)A6&l>I$R}_&fOA-5Gv)@+HDF6`za$?R zFkaO78jCFv8X4)GS5m@`12SpGv6`>KzyX0)*_j$6z?N5glloCXA478g)Y@_u#ap?Q z2>9Pk*Y8RB-5&bpHQO4(h!T*^MW3}jRei7%^v-705a)xWJPawiTbB`2ijKL{%&Ir0 zke=}^byM-m-7ShK8D=pInU2LwEmb?*BaP#t+|ZyzWbKgKytc6TpsI(4hO>XVo6?#3 z8P|U(0>{pq1dSR9c0wIf4Pk%)pQ&~C8aZwYaAMEvbeOewTNl-M=KpcUyWLOx5j_qp z#2P9Oo-Bk^cDQ8)Vvla-$b>o?itfWsw1HbJ-QY<6Zf{+e3IF`B*%R;ySa$EJC@9<1 zPL%5}!W;phwk0uEw;7prjlRMugp9%fhAK8dveS3`gfU1RTN2o3Vo;RnCt`KsM<}qY z_ZIg>!UeLUyVA78k-=X49Sw6EQbu3eotqyC&qKK4KkIpuK)5J5kW)$%6j%1T!OjwR zVtaA?Q4qkusroySPUo-|0SktF7}(!U)#drlaeFa~zb+B-8xThAYn0qZI3PKYjsEEH z=(JP&U`g@t%H(!NXT;m`BxaZb89&-e5UcB80g*4RO1sgISZJ7CPDoRcmTf1 z36n7#ChR^w5@zVAE#Sf`+kdskDz|MYog_K}dctD#B8CXY2aadt%nh znW7xcN>}$xgJtL9`R}nej*gE}&;*(x`9Z~b{sfpAsBo%;Ja5??K<~+R<4jK?Fv;Iw z_}vwsxWp%G5OZ75-^BuI#GY+Rjnm0pzDpbaic>UTPdM*yp}>1w2L3og?Uauz&15W{ zhuYBa|HELxnypWRa|N{{ApYphT6kV@<6C8nst?_NKWmrrix(no03Uc3aUHsS8LY3TemA%A(hCA1Y5fJ)9v>1KsJcNK zJy&i*YOh7a0xtvb@?%9F954{zt>%m8-wf{|B6B1kiLL3eJp{p@#x!^QD9bSj$dv){UqnH%$d*DAY;({i42)9a?eP!) zCsxo{;SB*84G8pjVZSLB=b>$uBP-R2NtHn4wK$T>0lat+Ve^XTbH`e|y0@oM5>NIU z=|Dh@S$nDN`Z1WC@>I)*kgEV=CG?S=n8YVU;sQTl$oFvbs7cPxz48YA#seT)Lw%{C zQkmu-dFgcXOpBbEqHwITj5c#02?<1857`8w@B+z7h0XeHJnb&to% z)xhys@qSO{({ zuxaOaFh_Z;kZU+z)xEU*gU5jzp_>b|dOuZAHvNa&(Fc?&9+KnB9CB`3GpNRgIG@c4 z`eJMu>~H)fi-x-(WHPX3sa|dN1i4X!hXAhwV3B>iICV*0dMP9i(5P7E`JuM>cu|}; zz%$-&B%wsJskIpkF6XAjuy0-XuO9+ZX-l@}0#p@|C3(;6X*Sm0e%m}v$Itd&R1Fd9m=?j4cdN2mUMt}KF)@OVe; z0Uu}ns>1{$ul;s=7zZ&63&-+)+AQHjCfaP^RU+u6CM%b^Fg`umo;S9m6u3ZdX&OQl z)^rW+Zk9FCZ}e`Ns?G_SFc^gmS}`queCRWftxSxH`>e}{^vP!-qt~bM5RzD*Y?veB zC7?Q-F*`oFX3yfvv%Oei0qfpXN0Eu>snk*8id;ok$3?W&sE31ei&6g%^r0Vx&1?LG~oW@)G>OQG2AY{zPa(>khsoD-Yb=SF^~GXj|Z7{~sjb!oRgL!$Iq4ZV<1Qjn$>${1Exsjh|on>S)S zYWNp+yIp&h7Xb1pQDmoE{jACF{`o zf2_N@a#Ot~Y4iE{cwlF$v1i0*MVCwe;!|jZgY}B``T2Ry70(y+55nowmA(nN=-u@e zO-CpcblVGm##QR- zlCJJdbPwGM;qK~@qu<-^`!f&)ruB{$GlxxZOs~&&Vq%AXj2H0qV+l9JCdTibN!SEp z%YsaW?XF;EPdtrU?n=^^FA=gL`mDN20BB}uUEDL7jQ=yQ>bkK78wabWmEZIFV@qz8 z)#8YGmEAj;q@9E|m&op!JH7bVf&9 zw)OO&&pMcVN_^RWxerDnACd9paZuPHgLn< z%d5tzXKIg+Z5VWw>h%`e+T7aPMSmd%u_h2=OAb`1;3K*5eZbRoeQjd$VZ@)~>o`1a zWWaC2YdPH`#Fn{(9P%a3A=>7x48^B987Z}OE;|y-nVMgn#gE_t&%P*P|E{#&wga|L4zPvWEUdL*L1_$=C>(1?K5 zhPAOi=~ujX_82~yoUnnxk7_ju)AJ2EcH@!ICDT#o-@N!Y&Yk;7h`uqBuB)JH zX72ymm|545#dOEUCosMXMkJ~e7X&Ru5D#Uo2LlXBN==DYwG3k(*`QB@xPTO%?|uCO z)Ju6jVXsr))9g88bG6EtDO!!k%{vCC^HsSCjhCdXepmW9gEsEZ{qX$=YdSw$P;UUi zXtgfwnm8CT{M=;4&9GPZ*G_FH?ADE;A3jm`D2{l!uY6U9=CKj0GZ2XbCu`LmMp6Z; zT_z$x4FDxQaxPnM$w;)hYvSR zoDFlLWKS$9mG=9~d-umZzqr`{P%f?_)|kEsN`CP~`NT}qE0uO_Y;ycdQc`c3wkrZQ zn4ultzcFHY*Bdpq$Y_!XM_jmdrpE`2NZIy;4B*OX!7`}&T8Q2s!xG!XlOyDGA-Yrl z^=DYp?TSc;=x=1lpb+p`^^)n%x{w{ez*S8loqo{Bv}?U$juxqz|0`u!RPZvM+8@-F zC3<-Y+~Y?QF6P%>_r}cMF`1nRxWptYGH&M0VPG_VQBI8^zP)!~*0dXv_$4t^s;#W_ zXzwtk%JnT&tX|bS<5R`^7aBHl=4oAetLn(D_2p4%z})oINHy$@(cBNJSKeY6B4=1t|W9iVlwTmSi$%QA+?h!EO) z@FeF1w#5yA_3^{&CNhAz?$t_pvrqXqXtjCE)4;~cCsh6fxL7QlJBU32y}jSvM#rF4 z7yOg-$t!h@7ik)}59FX`VPCz2FpJ58+Jsa2d~dbl#~;-snG0X8jSk{}eX8oFQqSp7 z#u;B9)3lKx^xW(-vRjowDT_mL)tq#7qeFq{CKfsdYMQGrt*me&A%Q# zr3i=F)eBmw1RU9bIj?06A|9rIbr3~9d9$+AUt+Qj6WcLrLejhhvPUg5Vhj}Pe&`Y> zT-FP`=}ISmCFqF+FKSoi-)9X8{UXH}fGb(^dRLz-|ofr95VmchS$u+nK)@;W^(5ZZXL7U1S-=KM- z8;9wQbhT=CA1W$}WI}XnRD!Ew_Tkz<79+g=xxV{7@zr7=3B!;!0%O zAAYmj=8NYEPzB%qFxfJ#qd zbyF&N=5vdohjzRrrow#nAL9AlF?P$kO-8E-LlXJLv-j2Pt+TamC1lfawY$ZN_pL;N zA;L+>OPI91feFGD95EltN^#@LgCa!#e?GHM-7s-kf7$S;*<`_kgzMU? zvmcerq5Z8{YMDsnwj9gUa69)WYQjbs<5CA(RukCeCL&Z+&$hLnG@wSpX~l@&32CCn|i`8UH!B5Xm{He z#2h@MpmMe!ZUh!LF|+>l>C8V-xf5-39@G0~Q-9^A)6*G8+S<>%OILFnn43#2MB(lxy@E)$7 z1l)(cBvvG_OKW!PL&1PvD>l-lq{r)_e8Lh7)23e)T2XtW;fv^E3Xy|f=t^`)Cgjt9 z=qV1b_*crKGkY_ctT3uRm!l;*4K@!gn00x5w7DG610j&{)DN_9L#AYz%rYG2mG>!2 zD?j=#j>~=5vSHx%X@1hO?NH86%l49T4Lvh6renGP7AnvCI@kK^7T6LmN~OgGK|U1F zWBX_AY%qw1nwr`;7KRm{o8cs-8QODM&?GHrgT1P#R(Ye=cI*1bj>imGn)h(-fTfF@ zyA9TEezma`PG71SA--U9Q~Kj1h=iMTLt|sb3yVNnfRod(YwttXY0~GO;?;FyTw8_? z-?0gt`BO=SK9>`I(p>#u@$-k8U!PuGuc07xJ_1%{#b<~18^O&dOuJI7jnz?U4AKO? z-t4IjOyvF=KU#?hnqBPQ!QwB>zPyr&mN)m~A@kL&jY8apyqx1Zn5CU5In|28Bdt-}13RdL5O z>iWIB&J1x0IJW-$Xy%KqF4W@JCzLP|U4Qq3=!2VY%)8;?hjHbBkv+m*qGuL>rIXb!Wz_=f5M>naJ6>qU;KyalZ9JPga~r z0@QL=Uu_Ylo*?O48U+*0 z#QXCtfIAmTflCVXsZ$w3+G0gm3-qZ)EX zQ&X9!uGp6MfW0T_0U<2V{?bT2=Kp<s{EYIoFP|5$ zFwrm^+((Pb6>o(YoR2H_C#bT8C}t0{n~sJL?&GgRJ^)s14y+0FJ-JtvOkcni%q(lA zawnNCZg^KjF*SqH$r&#|Pk^Al*u9Z;V)_-C$b@|`^p2NY3zmY;>#J1y9 ztihgUeg`y7uhZoT(O3=@f)TN~x5z zbazREbW2NjN;lHoc&_F1oW0N30i^3AT*U{0J3X-Ibfaa>jK-LU!`aG76XEnb((7B(5yu2wbaR1*XJ%Kkk60;X65$= z@N2G7{Pmvzuc4CaW^J*j)NFC?{cT9-_~_T@9t-hxcP>)5V8<(*Xf`{7Gme{E^Dc_n z*PR(5y)~2}?%XiZbA%KQJa?=?P#%~M!rog#6_M6NdU|^N`a*B-XD%>3>vek^+KM4G z5c2{u5OIQ8@!LfOT{~8tCBzp5nqj;QHz+5k7X-gRkB01dmJN#>F zgnSp5EZs4#o)OjR!f>v{szMsi(=v^Ac8=TF%+7Gnrt4ff&jGr$Ha3#D;23qaWmP=E zbaU%EF@Xa1ccfg#pA6`mUsylE1q2ypW7i1(v9}d{$9(c54|`6320}nO&bMtU4_gh? zchHIMJz6?r(C7>kobi-YDJ(8c1_+g1sU)~Q6uobAye~2{Xw>_rM)$^z59e~pHFSx4 z^TL$1-u{nxmY?olQay7$;H;5ZUw%yk>5yn(%kI=y{+e~D!x;}}&$W72gwcM2&36I4 zQzr3BS3j>qGaaZwRDMsVQ7L1qt+r1|FuDVB3GRW}AMXMY*uBorr`;I+_pfmKc$tc> z75OYhJ_Imfc!5G^E$KVy&MPYk`kLZq33%m+}EKDGWFGBXY>J$yGIdC9(-~@=v^v<>q8eM3z zF4I$Rss!}RrBYQou5$p`63&s%gGizlomYKiy&-E{4O8wEHIfKZy(&m}- z9>C-_ht?_#-$}(({^J5c@l_5$6ywX?Hgac9yW6nI`m!C7mw+Dtq*Th2(8NU0^FX0y z?sc1|cj6_ExG4GLGUpA>ZiMCA7ZOlY=!z=#m#2sa0g>CSt+XY8sK?1_5&^Nw;>ubb zPg{mDsdyd6+9%6r5dcCzd-hEGyKXn7nj?EMvWU?Fw-XO#gsBo;vHsHSq2GLuQv&xc z!??kr3F|=xHe7Ngrb_nUCH5Sde)!=tRYrgCCdbRyA5FN?70><&>LoiYNE?#=fuNN& zLP%HV){1T5u&+R-^`C#WP3AJU_;DvK^%pXV>h%_KyyZ3Oq1ais#2m+W{gRxT5fZ;2 z^YeKu^_m8WQ1+X=yO0AFJ9kscTh1)NR@SJo@uVrnv%b>BMstmN)op5FJU%{AXg!4o zHL#2?;S~5d1+v94#OZPIC}TuYg7Zq*inMLN$}Lf+i5nK9(RL3_x}k~y0v*?d<+%Q3 zK%(247X0sWVcDJS71IuM#aoJ#wa3H^wJ~2moHI(Q+`8}fC>VK|0GcQl{OV}Ut6m!~ zz2V|yv#ck<&5KpY9_7)TqnM=_SZ+CkUBmggofUt6eJ}>Le>A_2hkEJ6vN;{BHHW4PladcEt5p7T+_o-S>mXd7pp^4L2|!KH(&B?7Ptjr~z8I)|4CEnr zue)jaho|4-$xoLIj*S(4H6(ZBMJ^a0>22xFkvmg^7B0~OFsUyx_%sC9jHACJ2Nlwu z7j#hn>4*BX=j}bnzu-M#6XOTLaow2y?ki6rnY5rd8EltVw|o?TzTwC9YA6^-H7d5q zxk1Y7V7n)?IldNP3Kt~4Q0moPm`5fs9E=HL6%POUBJ(fMv=Qwb8;jD?@sEKnoWQ(Dv&-|irtUSp1B;@zl!9tIa)0%l*xvK#QAo5~4ThjGW z;dY>Mu)OILSui(VaSfhl7SuhrO{Z#T7%3#dN|mp{>4{j4Gdkc16bucd3Q!+DY{$Ws zwK#ta%4ML0zMF2(E8#u(JrUe(hOYxl1a-67U+3!JXekI$wLeR#DPYP86Wei>K@0{@q)$Ii-bs6N#-qDxn$67Er>snj`g*ul4U%k^g_Y z`SQ1=^#4S!DSL*k=U*MNCb|FayQaNLL(hpsJf@5xJx@6yiDc4D(;WQZPaxolI_Nel zDeiXVujID^^4+be-k3mt$Z$=CnwK56#jt4-G92b;KDs(tz~o<+vL@;L&FBA+&*Wc}Lm%WG`B>-;kgER> z0&)*D+xt9J-T`KA^Dm5<%PpspK1v9~Jn-5;F?sDBbYZy%HqvCgg1s1dCtpFi+xlXj z{a|TjrPy(b*6!Br_s7yi9A$P64j))d8`&hP!oVt_SpaO}(zilQ+@lu`Z>zRg`y+@B; z{sMPByta91XPV>fsili(g~e>dDb-Ud%CB)zKO)28!&|ZzSW1i+y4{FN)w+*oFlJwf zF_Z5LyeCms2ReL0x-ReIu zQGmj2^O>l0J(<;X-o{y-(_qrx-T1;5jh>!?#@w(Kctj3~pfLOO&k=*!4R>Y^4v{bR z6jYkJ8->>{c9+q~613uY$eO&n;+SJf)H%m&XPMFYVp3S)LEg4o7yFt2?tt`yVc2X` zn2zQReB1xCQ<3$QQWBzf0c9M-tio2ED_ltr)~V z#ucc>$Pq-u>bykCwg$@=>G#g;9w2{iXJKeJjlX*?Qy76VT^1b~O*oYQ2Ny<5lVMO~ zwK_JUqmewr>i3D9H9~tqE&uvuJ)tzvAx^{AM?)$dw(iXY#EZe)XrD^94dHDJ;`X>T z93KHv$^DVd)35LdqPTS)u&yvQRfeJc@yLy2dQ)q|Kj&n>zdCmV1_cIA)|aKCcAo^c z#8=o+z)*l`@?ecCc%AfUcO+SgCLhw$`61nX4rHI!PuB*hJ@T z2VK1sA79D0XBAi*GsS*h0nfRunMp{EILY#{^s4YPnX7e(R3-Lf{(5 zlMqD6W&Sj8!anJfsKNm*wd}{9DJKLQPl$Ft1rVwz<1W6^sTv1Zs84=6OoZj{A>=Tb}DT{Sm*01#>+4<>IPUM1UqqXF8l06kmITETP+BZxt(=a4q*&SuBR@RF-@x50niz z?oGa6$;37vFO1O6*Ge|oSB5v>KGIq$&_9$z!M;8ux<25Eh~u;K7%f0>RS1MhPkoqE z&E;Z|L#`7VY;bCGL$8rM;`-TzLtM2~s_vvzZF^*x58*EEGiGDkG45!4z`>dc2!!pb ziW@22y}o?-KsV*F@l1OVTv~gNgwAbR20CI+>0DcX{zMUi?8D~WN=x#WOPg)huVgNF z6b91Sz*R@za>wrC!$C{c7xdC~&gRzEz%-A2Bq3|sy)N0}24-%q-`B`U(KbA?I4_EyIl-El-Q`jaIwtBy&< z{5bd_*L~al-SdIHb!(m)`s8Ge!gfw;^DE&#r&&(_Xg>D>^^(>iRjcW?>4sni;*r@| zReu-}O4;8jKR=Nn>&(3+Nwci@`PdPluHV6mzES;S-gDgX@q(W{uEKUlbl;1$gX1rK zH#Srjm+La#>#*`u&P~3_u23-oW;v)*-zUWqk=Qd32~6|_6?siKl+-Fk&$e;CBk1sZ z<8}J%Q{OWx5#^ZH)!2Pe@98J~RGaUCN7Rv*A)%$rcMb7H{ zRz|w{73)cLf0zx;Yw^ed5){ z*mPbUZHYw~Ne`q1aBAgE>>ljumHc*HdfC!pu{tSMDKXM1rEEFjW8^oo>R`Xs*fit% z#CV+&hKD~&!x|plez!8)j;5F^j~fs1UZXz3UnR$G_1AYD^lr5>gBGtm=sFAs1v2n) z5xIPYNVdzuDW4y5_$+id)^2`0g`H<8uhk^U;kcf+zo zr<@TI%X@yjp}YFcYIWmREzXKO<4~?bA|@)t2Oz}l(HserR)n2>4O)Y_YnVa5cmo+n zrVJVM%^iZT;=Z^zp{Uj(hv@nXi>P?u4y^!NwC6SIeRT@>5F*5-?KsXq+cUddh;5}! zHM-4Nm*i_!`YW4^TGzEVXVl~*XH%B{(Uj1@eVmcFy zyrl(fZmzqk3Bsh;?@5h7622Gz5h`VOnM`dNE%){uz(z^Bhob*Ysns2~)GcH0-*gQyxwrB-LFy!mRWzSgL>sk zKfIRK7KcuRqobmAj>K5P!-LDC_2(Iv6<@(^Wse4)8eeHlrVKd@^F#aMWhZ!tG#O!^ zk^sGU@gQ7rIvg%0it=oaP1N~ zGK7r4^k5cxxR)UDpCzsB|!cenpmbIz@>&O`!Z8_PZ>qRy0i!(>|uJ3tvh`*(UH zX+tvffn(yu7gPPcxtZJ1# zoZG!(&7d7@UpboF^6Beatuz6uwRy)9LurEUF4R=V#OiW|Q#yG|EhE_=X|Q6{?Fkun z{&`w#r6FDMBQ8DXRHFc4?QqF+hcvu{K$4D*KSQmX2TptUvTcqS7xV^S$I4Zj+M14< zeGEm2|Lw$do(;beC40EJY&(!BAoM>wF={1;%g9blKYae9?P=i!BHSI*sle=E(|N5_ zyzt3MXc*5UpdWygnYUTIHejJeb$QAPa6+xMwe>;?PSG>Bkq1ZH<1H0gR~of(KLfP$ zi|ovp$rlziu&Gu;oW%{7m(9@vUd3lF?{3%Q*w0hLer=2nZ5t;d^2v*Tu7-%rGx+&s zJ4?Bk;|%K4QD;qpjYl`Js?3PNvn}Zvhe)T`-$so>f{{UTZ{4>WBf`E(y+su`!lWdX z!Pe-cfFCKlPJ&UNc)e9hLkYcHfn}KgBe%;0Glz{8Z(jmsMN(DlJ_Ny6ogEV~Yk&ZN ztivyAMP+owC@D!-f_(a{fSVmVN993Ie7X&Sq?@w26kF4sqZGge>OxPz`ejb2QSh_u z1J99Z(o+pH6?)zAn(@`4tUtI;n2C$Xj?B*l_qI1Yy@^f1cT|hbAMpSR&Yi3v1@|0& zq*r^b3xcsZG2<@~C;W(Lmw&*xCHm>ol# z3~`w};G_TRFDS5PToTNyLPz<9(+mr-fj<2bz;9TNtWOYxK_TT4N&fT~pRSKhjPJ|H zW+}40o4y;*@9y=T$$<*=0hYaK7F6q8(bSYjMu6-bdkjOUB)sP-lj4%Xokb2-CC{|e z_8&pXy|9$2V+EMFkDpv}pYf@eh{!z{s;pepH&SSB#rxOp|8sJ<>J9;{21qax^TIue zK6-<_bkWSZC|m5Na_!ymGC*;>AhevRThbga&`LHiwD=V7B3D9BPoFif6<-fV-8+Mg z-1PA)GW#6U^qSSE$o;+C_sK;uUk&{{1;d%Kp3KFh?;9!)UWBr9;5fx@pnv zEi&Gs9>rAszaFLxCB2uPX?u8*dw=FrC-hT{P^dJk$lFY zD~j1y5`UiiK6dl$oZd;;?7LW)8h@Iot33q$3CvTOwXxDWXl_xhK2gT}qwAyGQFyc- z%IUOQaMr9CxP6Yno^54!8`ETH(d?ks*=lNv4PW-TrUM!>9oYX4i5a*MQC z`Bq#P$iJIgM=&Ju5rl}K1(FE%Yrr+V8$Jo3R|Lk8)yfW& z4b;iIy1L#}J7Z;Wx+X)wCAX&7eXKThj^5U;``%dMA?Ov1Ho+@%xse;G> z578wKe2>ROqA!|TucesN)@fAU95menjGLi!9$16)d(TwX(GELfD1h6F%{34q!_(cLY^Wcd0A46&eS&6QRfoIQxXgxAh zo3PsvUYU$mfYa4b)+dG`>RHS%YjlQj8u$VIIV7joIv|mna2hc>s|c=fImdGWzPa)E z#6+r|nRb{z{u-atnMb`@d)yl+^`+oA9Wa+GSPtZelB*4y4krV|_t=^cnaCqvRfjZZ zU4;>b6n1Dv^Pl$Tn`q{1)xDBE!SV_uYFnxJaEh&#zeKwu^Q-U!A@D@z20R^*9TrH3 zbj-|x0^@6+t7UN(r1nlXVC6+dN3Z$?-dhmqP~wlwbCHAix4*H5W5d{**m}P11-Xlt zeQn1FA7w0cUjEkq@)HN+#Ox#t{@B?$Xlxop z!<1p-MVSA_vs0fzsoDz)$ro0oJXS@5(-C&c-_f@2AnbFyCO(O*Q?z2RWyzA zyLon`F8yZ|@nmnaa=kZG8I?C&5zIK`BKj|2peN{(tIx}U4b(P|6wdFroHsY}XS-;t8k}q*C8KV>>-X?tKXHa!DV3XIyI~6$&EYbq$)b4K%9W z!^w1|I$XBBK3YHtSe?gi?Gpq7XQ}_zOMQmPjv^LsDDDM#dQ!ml)ict5fIy(}F9!)+ z&F(bZxcA5P8HAAC#0S7^XgozglF%9uW`-;@0UzQ$gUToMQMWmf4tBE1dQnhk0j1tH zNFP6!S?HSmP}`akUl=*m{=#b&wuI)Y-|5A!XpLCOME}Lipok(Y_ieP#{cF7XI8k9l zb@^b0J#WCb9T%xfS1yxsi^7eS7r)(>J_W*EsbA;N;HA_l22U3bbQ~9Uw+EJxLwsm= z#8;FJKb|DSL$)ZDH%#I(Zaq+A)2|UT`qi3xxFBJ;!4I}5oDj4Pk-si z3c+tRjCRvkEnZSe@uqjGJ)6a1Ls_y525KBpUx74vDe-ooWlg z5eh})ctqmTM|4Qj6xe0IIS$@#Mm&@VqxTGiumd^b(kQR}7vHhA-6!76tmSV(nyDhWLB{#slS^iT>Bv<8sC6^$-fbsyamERr2L%D;MDrgY=uq49mmJ;=KO?`v3 z?T3DAKzx;2yt>~L&+P*zA2c$WAg|%c@Vq-GpFu(uL`rGi%g9KjrN3jJ3Kby9OOXH{ zUb3bRiv6)tijR;Y7_4)IM&>M!%~2ywcq=_A;AbAqUAz&Ii3^0$Upl1;+)|#%sBb9n zw4N}@yjD-_DKTCb!ctcU!qIDeRqD2&SG#SoocBoC1Hq&%2?l-uw?v!;5aHPKd4)?Z z7nw=^<7mp>Ir5H@Nu|4}Ne(_a0Rm03#B?Z2w6T&EvOxEf3e}i$lOVmKdFQUCJICBM zZ^C{vYvB5w}i|r9o138VY4$A9{}@?_2^!XX&jfwGZkFA+ya*HAVxC-L1)h z+{ozWcrFPkMJ~AFbu^p3EJa*)5%rT-Ps134MOKWIA^I#1#8 z@x|^k_Acj9%MEy*C{UryRLAB-;+Tw8(3o-DnS;vY8M3f&bwTsUTl&8JV=vO!Q3UTM zUVPP&etS#+l7D^DzkP3W&=X!yCg+H>4;b=zupi$;H4buBJyri8Ejz|B;<; zCy_0JwcUg(()uNe(Asboy60V7!=}Ld&55i~g98~AE~i5d=!jgA{Uzc6)*2!n<#yR4 zpb8>0oC#Jy0vPRo`NzMO(4Wq22NYUtJbc@9_#M(ueV2l8%I#Fy{cnqbnc)AwT$}&T zbRk6w|1G2>98ily|GU(ptdmgWKxcB4YRa+Y5(3#<Ewz9pnyX8OciSJ!8{KAdT3H#GBrh|LRz#*l+8f8If+hvWwUA7@m? z@-4LCR#v&+KY+=*Ikk)jS&@20Ghq)2T4TBmD(s)t#1J=Dl}P!glV29Mhs+8w+i9}mc(J4o zvvHw3uXFRThG)R&rvnjZu3vOC4V3Zc_*tnH`yyiTW!~!Oc#V8Zb|K(1y^FxhGi*-M zf`P_|9{KB5u=X#$nvb==N5t((fuJfjY_j8bx#|ikyR$_F?|LGv49!YH0(ET=01 z+)0gZ@&y#^*~3HmOMK@?|M_> z#lU;?H7-PAlPLU6-CLe?NuE@?xqgL=E;YfEabsw}Wh(mULXXgo|2fYdZ~4~bf?yXr zs5bw7gi5)_I>>Sm48HmJ*S+dABzsDgxpy?>G*NEh<>^T%U@BXF8;^vpb$>64R?v1$ROcaUeQ!Q0;+ zA{(cAitiCHMpmpN`4H$|AagFd*sdp4+JPGdD_?4=NJ%v?z+a>vE|5(1*x}-Un^p;k z3VzRE+#F^i0=+!liD_uEjPD)q8dL-^O?ML`jE_ZJ4S(lSbg9p`6`$;L@jMWWbSmx% zqf?Jj@-y1mwxd3Hx><#uB0<3^O^)7d)WK(+z1_D9ZzEZ|w+CiM;}gL{h7{xI7Cf1U zRminGk-HK748dZQs%xxTk4FRw(oGF@4`Ej7l}faH3-Z4y7&0!KE8at29~DfsUAg9b zb`hPFmqWno$Ovy+c3FO)N?0$VC-!re2|t^f-9~5o7wY+fxW-CVEVcxGC-G?70977K zT4?wK>GA5Fv9`Ev~ZEd;|{m9dt+xmhHHv8&$9w{ZIV}FH{z$Z8jNprkbPc?bVmSHsM z1XP!yOZRe$NS`WET&p9JPG~{ou#oX>d(iy$^TnULC_H6mFV{kPU=6!k^FBT0bCrlZ zVqoFq6ry8g4K*o_+`SUQMq~sDXDOy2RSCQps@}tTTz;@gaVubafUwqA*?DBQ!7o-| zv02n*DGf8;)Nc*imvXF57-G9;>)d3^mD%^yqdNC^1!^cnH<*X?&qgb zagB`z>+fx-#nSikjpO)8g&P-)z|x^P2K^T>m3UwnJ5#$?`hWY#+F9{f+U*~aZP|iv z6Mkv73UWOqRn7-1bTmme&_d$DM8VXlY~dtJtjgB>H3+5eT5PqqEk3|wRQFC5dPy5@ zpPmwncKBOy1s=og!%eU4G&wf2dFkZOWf%VOdF-ylsM?6|4!tJas zw4KtG+Fx3bT@|;O^fmf@G6#Obt_BMuFF4Fm7n?u5TP$Zbx?I-OcRp_g3G)7`<5?`$ zm4YP6JCr=etK7|Z5-gPbIai}RyvEVr zWNsKGVCp_#<{t;wjXI@I*J{j zJNQ}`x~_W#)oyJ)KF=7o*0bkP3-w0`?n2UDMDp8LZz*>cIFug=&M5r z0tEhfk##T=QSI&1w`Q6jLG1Y}rzIJiTDh?lJbc)*(lcbFRyNel1yNCp>3YBLE;=gr zBf;5Q(FXC-Y&WhQd~jm24{Kqt8Rhl!b;R6&t+FM`EL=r5@8rU9LUE}gvyb(Q%rAE6 z(RUWXc#&i4*IKgL7l~M5>d&sE0>O3U-N^=nVqQ6tG$j^o0uL$J1HfKou*B*{2~Vk6 zyI-W+cSk2?7{e1>hsE3&bNOf{CrS;oy=v9RcFC(kiwWqS9>Z8OS_+PTNy*tGc#0hq%l}}texL7J-;{1rOdcT zVL8pW`g@`wHmf+I@OYL5tkc>A768S3KK33+evR;bVD}8{+0^ajPJZC%wtznMo=2h=-51W zx(aDQP$~d{$W;{Nf#eN#mN%V1Qx9@qUvdNROj%ZoNpkT% zHL_jn^A)c{tArznjNCyoS|js zW$n+Nb4+n#c;9m>x%B({M)T@y({5sdsY&tZ^|}Vpi2^t?DS)tw^|v0_ye8!Iw~e*? zzVd<^6tZ9HO`Ob`WAgp@hFXlg-O@($9dBJytixyuSO`;-EqJ0~=M z{9!Hnt2+MyT=3m)+}vg=u)cRO+RyQrA9Z^E05ZcAcv*UAeqZWhLQwmfCngigaME7WofP$O4K8=A#i(wM!y4_xz z9wg6OYVQO&{CR|0sum!!HCcHY4A9iN5p=VU@?xT>!!S7#}K_({q@K5M_n;IUSq`e6^P?& zPWHJJyq=_+G#kdfGdjB+=o*!-p=0}^a98M4*;`N$-Szye&BF2QF~cS+Q6++|UzYm8 zg>O+X7U1Q612etXR~O5x->qPGAnLA?t8 zJgnOB&fKSwDMK zmpNAo?xF>ynau=`jjJLqUi=dQqU}?)iC``9&dQcXyfL8ofnABH-rRn!F>3g!FE(LhL2poJI)>U^~_I z`Wtz0=)VuTaSvxJKI8?Kvj{_#75_3VGDj#E6^--ddaG~T{2Tq+&27x3#3jY%Pcg%E zSS8!c#TkJ*MmsNQD=K9(6s^ARFLkPbwc0Lkr8Nxz49~hra5`8+M6jm)A&1yT1&KsS zo!cL2&|LMgoKDu!d*|u$l9w%npK_m$93+T~$^@J0l1Pcf$wN=WgW74vRMmrVfC%9% zcJ?LTFklLnG%Yjdbs!LSQIIe-F<7kb1c=j${RmGEpRw3f^Pfv^nKX%X zYq$sI?887-R7Ky=a4%IRQ6N>vGzOE{jE=2K>UGxaa$`NHhOrv;n;LehzsxZtyP2!~ z8FqLT5=(!m@)deXTvS>lqJk52Mlx0IX+0cUsJn?r#Qv?j7wM34+tw@zR$KzP_PYBM z!shZh;tmI4QFKKc({3Js1tG0F+~L&Cv4*%mniZ<%tpANRlj7<-@)RoG~WMt4!R!+Oh4 zMR=jtgASfbE1bfL*xd^$dHH7rf1HIu`1Kp7nA9tv_-0of)!fA`k|!u=*J1r%^~GTmexr%T2XfuP4`s z(@fL%fd1uIEXM*b`ceoGq(}gN^NiCMMA75bD(g$iTe^r681!MLQ9)Sj-HUUzRrRoG)~ zejIuEffL-!#~85LXA8unr75nag-nOP`NJmyRx%hDrr2x`MEu^$<96A)uGXO;!3Mc- zRetNVU@8(`uI`l*FNVoyy$T@GgaZK227Yg2^HU~(@(!Gq{`UK=i>xd<{l15jwTT}g zOuH_bZZNQ&9d0xSF=|(TVoaC!@dAjI2~ewN)u)({@55c#|(+!ILxgcm^~4RGsJ<5+Na>-$S__!3%Tx`dwh6cwf^AlT%quNY{mvl*@tU=@U(nkJ5+&VMENNN#Xh9IB|U8#sUl4rC+{YE zg5(DW`XI{?x7#q!?f>h0^Rqv6GO#{~@!!AdmGt<8>Vj4QCGyRwRP#V?cuIQb{If&F zXhTyi2ILGo?+e_$ok;m6*JtOn?m$`w-%7T~GhJ1HWXQpB1Za%>S_y}{d$~c8MlLmc z>v}OvB{sTu^Z(_q> z^~0Y>KHPpIv%lqi0jl?b{ZaI4^?l8p(K|`~5ZBq@PVDJp8Qis)CSdA4gV=T(U>eMP zi39B&Ds>M>FQRb_Rq+e;*J#}^$hh0V(+7w-+~*jidS{bM4`|GLeLV-;$p zC$~L8=D&E$%NrP~ulaFs*l1PWBd-y2w8`GKpe#NyhsF)z9MlP?C`Z=TK}e9lBi1D7 zZDVa_h2)=U@;dBqxnM)e%|(ohERpnxw7ln_^>U_kq=C|p+Atkrch5Eg)T!r}RJH1) z7uSj-JrcQl<63fnRr*|swz5cPi4SIE`XVKkI;|nc1o@pubGxiswbF~f4`ZbgioSHJ zEU0ohJr3`vPLcc35dyq-E8zX_0cD!~h!Xx)zPUf)^)L5IJg3<21`=PRqs5^lLV3!V zQfse}-!=s%GjjlBr4s_@=hN4bJRMKLPx(;(vAaz^Z+GDmRvE_Uauh;Ib|~&}5oTb< zflRsqvsrI9Jh|X7Hv)c=&H7MGg66N__{V`q<`ZOHrDMOs7!*E(DdJ~Lk7w=nSev!6 z*3Y*%kba`cvR`@aEgBy`=EfrPi8kTinv(f3lJQT*snpM&W6K$CU`xQU5;Ej8q?(6heVIbuE!;Uy#_1m27IA03=i z2%~LBciuutA`g(Tts__<#jltR`?1>Xc z=uBfA_@%!!*MIdR--T=Jmt3VFH*|{XHS-BWMZ3RgB$Ev1D9*O#Ibe{XF3biqYt?*s z4bTlmwf-i8RiPx#5AV_Q=k9$ASR`E5*Of$WLyE7rF!C@=f&yIWUa441(9(@sG<2r& zL+yb3wb39n+r+R7_k1A3iT+ z_UOj+df=kD5cXB0)#JGA(l(q2B`N2?j_`w@e4MKH#Xs=TGaj#heeq4PA)GdR@@G6R z=Tvn`y8f>2WQ9xQ<)b!KfJ)(JoQ2GsO-76Vj4;Lq_=syAv_rhkC#?}z$wKktYJ-v@ zm;Kc<2obp&tCGmr)e+hjh20|^=g%cNJKdyF>l)hMbcV$JXSUgh-!^Rf5odGt?>OP8 z{o%M}Vl4AtaN?9xxUo3YMcnc;!VA9KuQCk&5e$n>t5 z(4p`O*s@4qk?UM2aDStPjtv%6&+VtxkvGZ8Kq;5Vy{*@FNY-#`xurkBWGp%Rq4`Gz zojY*s?>j#X1AP9zKqYkc9|7bx4T|}|@guA72HXxP{P!g`0(dJ%bHv|&B!~SeGzx`k zhvP>+2%QGxh2WL1KLx87LXT7S0fS7m}@~8=W^3T0ru0e`=Gp_?za~v^C099+l z7u$^RACM5e``(a=%$rxR5Eio~&>U$3xEs*EaoDnb__binS)E5&CGEvHttm z+VzcHlb?}%2%D}~8l5VOqAO2iid~20^R?@K9&gWB(Qmx+;~-sSb+`#*dl&I3y&_O( zH;*`b*Vtakb+)`+{<(NgXM@KfuD-Ln+>&6t{!V<=aYMBW6|_HwO}!2`TjyLF_?*uP zfz58M>rgMiRYLXUaZ8*}pwq{EM5auCUMYUPe2u>tuGYs^5O~u+os+-q<&R-gWaM<>q(}+e*leqSM)`M@`Wbobc%UrY&lDvL4Fob ztyc3?hWz={gFgO7K_S&zN2+f1a#6FviSVvCE-yihz>>8gbcEjppQ}S6Xh^=_*tzyu zsHxr3q-AEQr8rZg?!IspZM>VedeLYFu2Vq$;7SQwN{`22#T&Z6O`TSZwI=vf7r0>7 zvtTpEvT=8OpEZl7-S{2>zgHqWG7m;5zx=%R9Qj!@@+JlOSG8$1GUSgf{~nubCmy!bAvVk~Jz!GuO1SjyD^izX> zvu5k`Z1q_+3$x96v41xFO|_H<!oGN^+p}0*@f@F`_JbWb-ieO|3qh{=%-~4Se}D0%irfnJ z0U29dI>Loezy)K3qij_{&6E~C&-=w6WN-!^*QevcZ0R%CGZI)!s4kFb+0v#iy-DRG zszZzDxBMx_#-E;Eq;n|$Sej(%bg&J|BfdP5vq950R{PzU)rvFypFHF9U+5o=T4s$C za&rHs)ElqR7MQeT9Dx>q(?3eRu6zx)L=OY;IE>h!Vs7cgQDNfJs^|@QWGQB8`Nf@t zMYMViOZsqGg{{EcvwRlyZ;j6aA25?d|1=nf*_J$Ir??ehvLM3zZW4uv^Vks4cg@wX zf5RmA&9lTPUK#4e*)RDZQ7t#o68^?dWp5h~@57gCZZ<#ibaBf(y;zMpxU5Yl`>v3S z6Pe(GI=0%@o0joZ&qV2;JaAU}{{0zp_xGMKXuf#qbmw*uk#|0JdIvMOLg97CbhLac z9?GA&A5f<`vA48OH3BYb8}0la-lW3OlH#Fw(^9e39?lsV#s^!g-Iaq>J{8WynYum3 zAjbRPINKna-yZe(876dhuYS>-dJj?s^;f5IhUX0H5BQ%F5E3IUc3y&>x{$=4=o#c% z3x;{`X_vb|y}Z(8fhUJ!^F?Z*0*ej$=3u}b`|ZApO3n!7TR(dmqZPOu512{+thTJ< z_o9xM#~x{+qtx4kULWBw=Bsgw(1!?&sA_^D60v0UOCrCY|Ts5}r@nPXKt=!nSt!LYfP!|K0Xyi4V2<|z!vodXl=;P#g;w`kp?b6`(uo=rS3;Xhbi0dA> zkA43>6vyKlMWg4f1ESjCc%@p+{sn}inRS|9ASpFXl--48MGGow_N$G*TlTqX1fpI( zaq0VTxpynFCsA+Szw)AElu27mQgX@Oda1)x>6+R1(2LzCsgzQBQN2&09`agxbK-Yz z%WAPl+vHPTns)LcaN`;91PjZfx#hzgW3C5`jUd*$#{QmK4YvF4>YU5fD(goLr~*CN zK8kHIVD&LGobIO$K{mm?q|#By19w2X&`+@oQMNLx%}|p%h~yb{l#e^!?@IRG#D18Jd6S7s(dY20*|<*CEFL0Tmy8j)WL z_29mY-O)(?SO-q>$3?jNc_0uvP{ukk(YKx0CB@Ma3idr&#{lMorp4l1>^}`!gI&2 z4H|x_op?!|%oKepkWa^#N$e|C(o-wj6q{*yasoz8ciin+;5tKUYl;e80i0YNXFXh7Qx~? z$KV$ReGGees`n8KqW`W%tJagP2?Ik$wU@{RAFdL@$LmcHSxt7iN5B!|*4jO0M#5d_ zjRyo1*$Nb*?q4NsGnU+l%)phU;!FqoRez;x#AMS!MyH?06~AeOpYN87i(h@=&r)17 zuKBP_qRF__fjHe_wNBCSl!&X3{t*O@ebftTfnRH@`;i7#89i@at%216^l)B#Nwiek zTf%@oRIQSALYT;@n3_XymS`2{FS>8KhCwrzaMapkW2#%Av)aW7uPaKb(cS3*6A+Kw z8>)A<`aCxrz{x{_#mKd-@8_2pFff@d0Cx`EuB7QOI~vjLPfaKBVT(ae-K2Eiy||Br zNjd7Vgk)4&XmP^gC7D( zCjC@8IgI^D1i~+0@(-P5jjPKN6Z8J^*o{t;>y0FR?j-&p4yhTb<7n@D!3Za&xq<4MCW*2A3(j)>iQpl zk2}Y!qooXXo*U8CLzoOuu)B`w$)dCP5NSjbahTH&HauygKXj00O0%TuEYCQWRq9+% z8%GPY`{Zd6dWII#b{#6&60k4LrwYByBAMhfUp~?3P)d?GjDej(nF*zP@N>knJ75kX zn|uOb8ETZ!vshUc4Tvp&Oa&XUKJQAsb1ZhYL-s#gFGg^DeQvQ*B8)BX^D7uypNr5RZ%^w?9liaox2;Ox)Yf=G z3Nyov0qZJUWG?8Qf(_eU>UDwFn%d;+@C>tJ-F-I zGWIhH)5K);ds$J-V>efuaoq21ts{ZwyY_w0*je>p_ydC9Kl>M_(QF8QNQ$licqT)r zS>#~Tul~a$c(l0;$C?d}MHGiUDgby&s=MR7dj-Jz7G2OAxC8Ev{ZaM0q_{bX3r6&N z>U%1}UfwLZ+vH>baizDehc&}%_FV< zZn2~r(VOV0JWN!|{eF*R9PVrV?IKqCSb@+`QOsgE=_LU73qR~j=iXHfB?XqUtKyn_r>QBy(cY3Yq=U*+EvZIby6DQKJa^J7< z`)+|tEth?7{Pb)I&BP?@LONfgvXJ&|K;2}mODLenwSG(HWxP|zb4skduI-ujj;_Vc z*jH?KRevSPQZttqCON0mUifP^2tFt*n`=+K$+mG9SMbS_9(H|5+yxe$8L@TaP*>by z8s@4sT)a^9qJ16@_Gh6p1AkSugxdf7?kl}RT6Hw5phm>0S73cA$fiD0V0f`}?cW>B zRWwU+?_YhC-b8-55qiUrfF~*@Ms6hU`X5>Vnc2b!V3|@TbgLDaPvOA|oZ#tXc;4h7{TJFmxE7 zick9Z8kV8AnQ)(g$MAa9^&1?}H%SkPd&a@hYSba+obmTD=oVNMC{YOycP?}LJ2;s%aCH;w7CVrU3+P&juoimi)Y~k7~8*I|ItZ3jfb-u&0%q~ zUhkb==b^{wYG*?HHDuq!WK#l}V)QC9>IAixdKVNHl`h!Vxn6#@O5igNqgnTY-h#bF z%PwoXxOmO!K0DGrNCkRZ0{f@?R8o78{rv)#y40urmC>=o%#38mHkx?2G5Xcm5Zc|kV60UtM8F}1{xt_m(0B<%ay5G`oMnkE_b>jEol6$f|yzJjBhF+)V-J} zpwEkjE>E+WY(deCef6p)mb?gkNQ z5Rh(=29fTT?nb)1yUYCy|7)*(uCvzJd!27*@AJvaIVW?D@s9U>^1h$@q5|>c^5EbE zlf=5K@?^`a&Jne<dDW zo^b-Y02X<&c$+6Ny~dFQD00ynadPQ`2XZzjcJ91RCY1jpK*=2zDrk|zf*1t)dj0b@}e>zTd*KC-|XNynDrVY*P|tTJ9p@}w$5Yj z15xnt{de}91(X4eHs{pfn0r9GNdv|xAX|&PN#c=ww(@dt&6N2lOGftr4I|Ae z`xu+|vq&al6%o?O0{tCj(X!Ink)QX=Vg1l_#QEfZd9Zv0?@r+K|nufgeDpO0eKoJ7yOI%ud+6@s1M2`aaDz=+K#w0sKd+H0K5yTyb{CmhMe zM!5R(8OHUk*~k#g}pQ!8r7g*|2RW&8cvvyyuRr3=%K7c7h&wD@3LH)4rs!? z&@t;%lYP~_VN??rg;3Q(-Wstahd#2ujPDt3Cku%7*H&FSj|Gb9fV>^jmb@|-8LQPEy zW4Ky-qoFbEj^9E8Na0wbBZ{);4bqA>>vhK~7Eq~w84ty@+4Ut%?+cLEXkWR?n*9ilVF&H5#op;Vc(ozH6zfZ|$)eo270@LfLE{(1 z8FN20X+_zU%)yJu7y`b8X)v|Q6^?<@*r^F`sC!bn+K^+jIaS4&iMVc;_=KL+;9wKC7PW_$k~(`r>;dJcE=ZzG>7;!;k2cMD zFEMgdxsw!j0G7QJcE|B7>{a}$`d%48lfmc_Czr92YCU4moS7Y&6Mn#J{tdEMBy9}K z!Tc_?QT~x5oLaE0Ip8?wy(Hv_$Z=oKU}(Z5{WU}%KT=GOV?YEG6t*xIWfh-_h>)@q zTYsGo5Lq9tjQi|oknz6cO0X_1l1_H6$zj=>(kr?0GnBMQL4421{9I=%+X&~`{L3=b zP-KLwby<`6Zme`RAH`F-Y@zdwXc&O;4F*!|oc=~rEZS(uKTu+1VG_=KEv@_Zhb7oH z^H~txdH$C9$XNKpXI}7(k`oR|h-4J}Snsc-+o3-OU(Ugh3jq&LkQ0-xcD!sT_A@BM zCl)DEw0d7+#D?MS`(0bUg#<0;6*Kz zRFUk2k~0W$9*snDZ*Tv{|N0MXoJ5E|pjMRmva#)VsTFycrst8x!mJ$_AAF|Pa5Gt5 zWTUW=YifeWdX*x&G`F1@Hb`~yMmyl>A{!q zQa&)TEB)UTu0$m zKiaQL$i-%q*5v?^tP+z3nM~DdgT@nn7Tz+;oKQze#@rgVnSIu)TaQ%w0!UvVibp_N zCV+LHe0-*%aUQTb~S?3g@xts>wS4hc{3}QC#u< zc7|?UNCTi29MQh0%im5)56umvL3Ecd2j^cOsFL~bA81u8bnMiTbQ8X3{gI2q?BG=5 z$Dm1Lh*^CE(}ZVDd%+U@`~0@}9&D^i`wI^MAG0luU58<`w6(jq!F9RJ z76qU~1hVqCgHnD-P>T>qPB(d)ngH87utH7fV6!AI8g99`S#--%TU$HN-svBJHregZ z69ABB$56pjZ%+8lKx-iB|Kv?9BrPWqy-YMPD=CGpEE3EksCoo1Y2#f6)3L|msBvzd z_h#IYbSJhw&?V!tA+5`lkYYWfO_U1o|42cVCNow*43qN_WO&F^>90g3o6l`_28y|1>bp11QP$Z5nlWvb=^Nq==?yrqR0@QVT3bz58itHB8ZiV+z^g!%|0FVKR zSZK5$SQ8g3;<$(L$LQ6A7iJzz&0kEPsQhJ_q|Hxt03PHv8`(*PrT2 z0uFOdqu~lzIl{4PN7w+p1oQ@z-um4_dusz>z#y)`Lg0~OKq`s!hSWqahgMq9I@HR; z#N_9oW|JtMF^j%2<*Moo7)AFfT)@G*hq+{669Pj-y0+8(>4Bn5lD;7PBwx-eo)|x$ z8Td6+h4(T8MHuaP;<^JpJRg55dUJ7|z#37()Zu(vb^jsj>iDEe9;L zcH2)1w|KwBwINHSWxVZDg&@v3W=bqs7j;sRC6m8GBc^D}qBW5k%WZf1WwuKa5Kk?K zzpep5DF!A$CuWLy${9|Sg%@3NMR3?LBbU;;k!2Bp+hhKz zhUPaIivkP>-7m%28te0AKpJ`p?UyxNzxSLbs0b|Z<47Jo6?vjpjXCO)hTvb^zxEGi zjg`s_^pz~M)DF+hrBYddd1JA>8uP8|?<3@&U;_qtRnxmN*wgv~6MJ@F-6*a^l& zdkJ-fDj>L?_94qd_XlYXORTVA7Fu@tuW#N?0LlZ{KtTjcqtB}E>ao=jXt^;Qg;347 zY&Zaj22jp#vCt!st{b^6?8$fD@zXu?7`Q12lAW3PF%ZrG8x`@~m_3^=<+%4~D{>u^ z!#~s(>4=KFrqvA!2`;?s3=XTR@5>wak1dFE4 zheVC5PoIAAo47&Ura*0to!HXoauz@3JmoOy!0ppPSFyJ_vbDFr`qdI}(DZz-M!`by-<6#*7AIf}3G1u`RK zCg1i@D<&3ok78wo)Gj)t?hJFK^3OMb)&D2|G=D`$#if2J*`-n{`n&D^aIQHCz=hYn zxjTwVZ7Kap+(4MbA`m5DclI|?Tj&#!<}DNkU^{@MoJ7xH>__I4^mj?9_9dH-8H@%s z$}M+OB*aX3mXwnj#N>>>zx*WY7{#_Y7<)anQ&BuzvKsVwI+tR6agZV8I4veVQhQC* zeAYtWJ3F-Iid8-qMIINKxJ#yyGd~Nmz)M;g$+`we(x`V6@3BhV8-%5{w|WQ#bK-?G zG&DM*QVO85j?66PyyL7`W{egVw)kMIItQI5t)ZrI~1t z)Ug^SD*dEM#Lf_@Pkb^Z~*Q{eUFr9Ml8RefWvN)tT&DPi9+r_KDZKuGgB51 znHF#4f?L3;`b6mM8cUmoVVw5T<(zu-lsVx@VBY&g)ZOyv zqSs)pA17YYiNorU%t(=?Hce0yP+xwDuc{PF-%Rg;&9^dEPg-?E+Bfnb-#0UjJpFCn1N;ARulT466_IkCHJSjfUOu?2#y*I$)S60| zvmN*;Drwv>_2@u_@DWj1Z=xRg{yA6S;!g0=&oLa)DUwU(J>!-tHvt@ANgx+vE|Z|F zH$Kr;U?j|*kM>-I+wka{czBTTf0E4F)wn}#1{!s7-Ej>#(4V8`uH?!n? zVbB;VQ^6NyF6YnV>2i&JXJ%<9%1|ZUG+wwhSr+ar2l6raY}y!b3g2Xli{L2nS@#zO z({t$c_eIN4D4*bBV{29mrpWBbKTfM8f5PG3;~A}H(096ueb4|81x^~Tr0_Sl7GCR z$i~m8xBn1yEE)lXEAl7e73?3_VK95Z%eiNps^&1ui}TY>wg4S401}=0n{Ts}u>uI+ zF)%VdDgma_cOe!V^GxN)AjfQ>-=c2oU#B<5wCGg51sS#WnLWP7HHD8?#J@KFeURRC znfnk#?dLCDh21t@v>frGQ>-=+4CX|5il)@HymsZwlG~$5O{IkDU!kLf{i!f~SfKlL zQf*(~ml)6yl7u}LmW4Vy-k532_CxCa5$eD}x{x#;mAP2v?|jDt$~vI^fW4Zml;BJ2 zPe4>4EnrITHzKe@{zgiamHe}LwD@Y&n{v`CgZjT#YULArwua=$`!4hQ(L*3d#L6z1C8E^bdu-9a;Fy5AO*7bu<@X8^Oqy-4PwzYsOW+IZh+{=GQ~!i}@E)xFzM)A@E_dDd z5&S^0$L1?_ZSC4G1lTM6^#S9iW^{EmZGClD8^@BhWMrli6pFNNlCb>Pr5JR7)=KNZ zrG%KCNibF?X4|%dH*d_nPs0UUJM*>yOHjrf)gQy!k&c7ozB{Nes4>~>=!4b&s#-P5 z!fv5O#Q`!(i}NmTQoEGJkE_Xn-hJi$86BT-7FvW@>ulq2F?q~=1GXgj^0#KiKUD;>2;a4M%VnnI zNwIaQmhzpkc7jdB9Mb5Dz>m%~w7Q$19(Z1$?8_nBoJ3g5b@be6*0k7dGu6l8Mq4V;`ctW_8-JsCW8!SJ{_9z5VxjvZawoiZ&gfvR}F-6)o3xwPtO8DLM z>ADvgoTMBPNs&enAso*w%$+updF}xb8SKH}z=Q>UdrnqXcgO~IFbOXM;wCuz3Y3KV z`X((XDE<4F=<+PJ?_S*W0~uCi4=pJ%pX>t1Mq7KQ?1+@-I|CbA{bbiochH!7H%{|y z2s#dPLgyW$-w~&lECmfT*mqz#<4_kw_sWQBrd~<^t|C+G&r}j7v>O!a?yHOW`#8(* zTihO4DGmSD;@-~a<|df?r^oCjdTdJpi|MSBYF!Jig#vbynoVG0K{GIxtdLs#VRFZ1HCbGCu zK}QCI*zVEgpo(Z1wMRmG?-0;^Qo-njPP8SlJ8j+r<&@f}_@N3^-wArlwKc1oU}>0|=gBVh^w0Ny?^&_LFTaQFIqMmB>A2bV z+h86f;a+)S@PlE2@Bu;qF&JoOYMEPK@=n%KiKX%9hgT4UHExw`&1}lW<&^zj{}vyV zZKy3diOUv-s_)k~UABEz$F|)8MkMgrm5|s4F}2`U80}V83h?$x7*PLU@a%8QbT2_n z@-6Hz?#JeRX&fuF#80tN0uQ{%m@EikJ|zBVo-V1+p;1&4jNK5p;AHV;zbmM-$P9D? z#zM_*9-NIa=H{M$UHaD&PM#?#H|)V(%)<9WVtKC$+3^%wY$(=7T3eUoKhekQevvv% zzb`@9882huCl&o13E0h1;W^{mhlhF8bq(Hp0V*m%K{B=nr+5DR0H%6SV1nS*Hn1AY z97w^XyczhZ8rc^5H1~-uUdh(u4PppuRq#2RN2Rp>rej5wISmR#YzI=D8*HnXia7a+>?U$Dwpd zx}V_crq$Ux{B9o0-ncM z5)ZH`Odkhu#3dw_kx)>Y|8x)H9LkIGyZjJ}?2L^sAiF0zY;xI;urD5uUX5vG$Q|E) zkJWo>k*+z5@BL`ueiP!>*F!k)6^ozVa#uT(qecezez6}WYu3keb8jEsyJ z-kzxUJ0APEtM}UR*zI|WSgsB~15AqLd2!AV5_IZMK{MDtUh$~N;GLk^j5)ezqNEH& zO1RIIeC47==3SCNa^M<`m>A!eFm<`yhd!(C#)osYQHV<117ptpxsFJ-*T%K4Zw`pG5Dx*wx>mR`UpmvuR zv74Wx`-bJrfdC_vL}F+Y9H3QB2(m0XW2Y$qjSmk0@h-asF#xK0aSlhMyZa+(*#c_1 z=L2QR<@efS)S6`=OG8y6G6>6>Y)Q!+qSn%@4UJfPo4GE;h(~pm&E1@3@g~I4lr%KH zJt~1;qo0TSSJQg=SJfsnx1Mqto;9B!E`3?l-ckGy0>2|Gv)Ar zu*_^t^6HgLwmjp0>++M56x|_=`Q!*+Y?o-hGC~Vip9L{wWWaLv>n4dvG2tm(f#%5% zeG#u9ihz-nB~GaCX}vcTTncEqYEB%WdI; z7Oqi>G65MfHlzXoF{8lqz$vZar?Z6RmyT=!>h z=&q+SJL__Srrv8;P`;y4D!&fC^O-V93;2`A6e*?*tB)^k`Xg@gto{pJhF}hSIV8UM zrgjhUavHvcgw)lh2k#THhheU)tYf0p)lTA8eT&7a6cd{>l0gOP781&at`*5L(-nAm+8yKX@9t zoi6QeV77x?@1_?&_ovgZUBr&J6j?~c&@A>vap{5NP8o>epHDOU5DY%V$gNR#kfCX( z``h(zL|3`Oekw>=YLK77HaHA5xGwZYRljl20J}au@Q0c@_|*E4SXI;LijVaoP3Z zs(4vldJr&f2COz{$KJ6&*^8DbPo{xHLu1UpO4+-*E7!#-FON>3{*>eahqXr}+Es-L z#_L(E!G4)|-x7Z3|JgQ!tMhR$Bk&A}T|966NEtxYJsc;V}v*9ABxc!!+H|f98s^F9bI)JS1uK+UY3H zRhnu9+b*Kwwl}iWFfD6#<6V4r(Z{}9Ly298O@M<5!MQiY3~o1XyeYQ4%`*i4LfMzo zVs`%qpN-%>iw#QEJF9mIabAw}Q83`-GkqB{31+vV4oRQWeP5+cWP?qzUFFQh`ZLB8 z^ytC)C2AhU6L6IBBKc8{{X4eetx-@NYF?hIK!X$oDP24drK6Q@b{?Mnd;opeSQNId zX~hnLN4uhX)-RrXn+j1GlOw;3Dvmt^ReGt}P9|t|91nd2qS!ca*^V!|UH~Vlc_t~1 z-Qh7h>}=>4z4H2F-aBN>VBPj$-O%WkGLI)G$#0}%aw+*#MKKWrKE-z{PRya_mGA8~@0yMOOcB+eIKw24XCDWj6%LsNpNp{y+K^o!GHx z|GJm0^#Ag`FrNz=T*I{>TfM7fL;8>{TTrbwEfB?3$WM1aSqWj_I{k=ZIpgj8Wd(x2$byg|>Fl z(D}G$6&HVNYsCN#&IQVyB{5~6a*bsbeN>-ISC2gkIzbi2Tq}Jz*2_eBmiH@W{6Gj@fABYyFt=Y>q1&PxrlFIn^|e*9E;0?wVF; zxLxH!-qcrDa8tG!BS~|JWWGHdv&u__D}v!1Z`GESjAMnCZ(c~*5N3Vv&jd)tZ}0Ce z?(a}nQvw6S0u7C_GeX!nIW_qMKwFXt_FDX6YokXBUPLg;>M)o#DC~1uZ@g040)eBR z@a-gB0A(R3Knb$90;&M4TvH52dAgw3Sc#1Mg_V&l-ShGT0jyGu+x<-#!rhHzq&}{? z*)qLVs9A)AiTV;b?gie% zMX`9@aWXBV9yh00)c5D75ZGGhS{`$b8gUh65lvFWzg=GASs}9=z0$8<*E8D?Thc5! zv7MlllWH4h`+cI%lR4NzX3tmeqI4;1_qDuQAHfozxT*SJgw!R@SC9t>rCT{A(cwO% zAAo*TU-Mvry@b|(ev%ha{uIsN6H_TBQ9Ig%TLsW8sO?f~8P$jXCof%p79pWdrF#>d z*gc_7yM3?!n{-DkPvBmf)SH|c8)|6POPzWiJyWX*Rcj7-yxPOVe8SAUx1$a8mx##d zq~(pJ_6$u=4*Qjx*%YFQw&x63IZ^i`xixu^I{~XZq<7q(SAVv$u_Sh&Xob&ag$pP0 z!Ei-1*0s}bQ9<6>m*RHz{pzIlDG&SAL+?~>wsaKDY_#B8kMqrxz~2=BTK_cuXJC?UJHcHjt;j94OT@Mhwh0-R^7F*u#hAU(AfWe z$?df3H8Yp`4I3Ijl~Kjh2D2K8t!m%@vBvOUMmo&;vea3l*7LlAY5l!bPGZK&0W+TQ zo^OgPiM)@tunH+Z@99dKZ;LYvs)*&PJFutulc?9PE_5j5#*op`g*=hR5`;n|u@dvF z^sJNp1^YKt<4rByHFon4^w>h^4Z{s?fGYg(v2}b3G_bww{RsQV(`Z#3E`CL6`<9x~ zMy0q!L!wFRqR~}&`}#9rU;Q!OCtyJE(1v#uebw5xZgE)#fgx%U`CtD`t_D8?A|lo? zO}a99BwTGUc#q3LxH{D+jqX`ATX2_2aWPK=qfpvX6|P9x#7V<-Pne31p7fr4G?sXZuv}^^RR7n!1aU@h#Oa zxH5*ex%T0JR9!ee`KTi_6@L@kV&UG{m#byYTXbVb#89hcv>SA+d@&x$sE2M)vMIm_ z(7d*g%wI=N&H{kO`*_^H`0FTv+UzSGN(NzH;##ttHdZiT(H7keVHSH!V6>+zLwMj%gtVtDolVd(rBTbNvWhN zH;OKA{QK?I_B0jId>sFIUu@8ruNw{s9EH|i{<93lde;~jY4K{b;_cNzlln|OwEa=b z?YWU)DmOz#DIm;zT%P#a;O0OLYwKlWL253Os(hoZqO3qyn1S~Wf%oL*2B^C&iWWr` zokaC?5=AiUGfZjdZoS;E(w%RBA3~ZOYhbwput|H0BxDs!j*_-M*Csn3|Jv-y5+`Jd zK)G!b$!f!Bza=9J7W#9xQB+@f6{!;nI^{(@inXV)c3*le_v_O3!ZKg!@ybtk1QA0U zl$hO^SC~KBRHT5eQe{ap|6c%~+o!}LC4>?*Cee8QheY{lQqvtPMN7sKJr zO705C_hVy+4%*E}8KY>J3y} zfgGzdNyP3sIaoh8+SJHyR;D;yrAX~m5r=2bFi~LF*tdn*>L>c{huPuj3mzC;FJf0B>b7;O zwg*7Uk;h}e+W6T}0`brDB1P4jPf);ZY-qSH_=<@MBi{EB5d1TmM%Ipwkw(YD#8a$l zayRENljg3DILt_^j^kiz@1?bQVf^c71^%1c&Eepg|CU5n|bWY$~X?bfWRp*`_hVOuBF zpSY_T&h*hT|8GJPh#QVk?l|x24SDxBCv9hMNCx9(Whhrs8gIT!m#M#ojg4*I4){$7 zBVQSZK9lwDE|bsff*|lQRTafy8wHN65TsN=88 zZ52eNo{1_Ep>;sNpmLk>MQi|Re{cWCuOR2~m|1WtUpz|ev2(-OrC30rT{-seB@R<@%g^ zZo#6sJOUn$o7&PncKl@en0-$2Ms&K*^~CC>}{5W^o1 zxp!Qd`;8>3KTXT8F7lqe^)l<%K~kbWecNf-RiA#f3`YPe?_M>N+r(H&0*F;=fD4C^ zSHc*_%zQ>oTV3572_Hd5gj$DIRRnl0$M-V%2Is>-)kal9>HE>#G}c$*U2L$@8SjR$ z!Qi%{(S&zs_WoR1{{2%WK*duk5F47$0DkYPd*9DqX+lqf+bP)H-yW^KR*c~JC80&E zqR2M0>s|ne>o|neB2$PDTNWVIFJO{?4g1Hg~HRly#-FSo{i zr$0bO1y7DHE86s=?!9869%8;spD3bhVq?RDmJ}GazI;#DsGOmii7~^)htHu-Six6< z#G@(gVN_J4{rw_h4$UP<#0-p*-5@XkuuZ1L9-!gXf~W(^?W3N8!u&+@B0@)R%^5O8 zTjt>m32HN$;G1MhsvVXmPhfJ#NHEbNZdmf;s>W~f{kTw1DkLBPWB2lr0TCpH=dK=q zl4OTSELTTekM#7E1Ip@BEOZs%OeLWlG*{_cfo0vJg|c4_85F|0ooxS*z;U+#9S3O; zYI_5hY9|3*%J%I%Lp0QRfq_@&6-Six@NL1IAPA>xtS$o2%3A%?%ZKF)ocFe-$WM0# z4>!>lhG#Cmk{+UEvYAj()xL63t~L$JlhxgA-)6)gg#;rU3N}bjBLsFOqj?>(YL(-w zj!<8q9J(114es&}9mdq0`~&e(H6=Usw|2a)=hmy@Q2M;d56}8U{=|B{W4@Q)tJ={8 za-3y0Q~arW<#yMCh3+gWt*;Y%RUdu*lMJViu`@n?{PdWS7-C)Nkep?IutPe^&(wl~ zLK@nay3?n&xzHiv+MyujsZ9GG$>E_RLE;POP{4aPeHBRp5pR&hgmx)d#Ldae*e^Fa zP0gS9M3!+_5!p(YxZuIl`YtR?+7-_sV#j8KL+E!i7RGIqI&hH;-J@W%q&-E2WPqI= zH}y+2myhp~)ZADGlgDJWUFT{F+V<9DbWlqBE(^GhT%8jQaE6U=aN^rL1`;9Aq0A}8 zv1m+*pm7$|7e%!(X_l=|qJzUeOCcr;Y<^D5%eX;RD|UxfeESn-!b@jPVh`{TuMi3g z51zxp^RkrQk4OWfPrs<4xlsm!NAM{Ppy#KP<)}B<77q8KP-aVVWc)`GF1>ouzT-ZQ ziv8h&1;FVwspExQq1PIy#IwN#lv2|s%rkd+dbOTZSKg_hCkP$oVo0lOMhwm(gd9o%NOplk(u<5p_Ze17d^UVG%_;IS;%! z?;;^2(#G%^FTfV`W!+%dhcIw5B~?RR&wH{RuiI{C{Rzav0$UL7t)ot~E#^8s;JI77 z`0L&N`X4kBs~1pCxUvcxyYTQwXL6t`FeB>TC@K=75)pCj8?LX5h)B)?P2fBen4F?O z>$Zo9`HPoTT*rl5Zi(gxQE$`VMuIVWJYMCO08IOQoe@5W0XZ01I=fRW(g=9hVgBu@ zTLM5JaJx_LyURm37CU(JSt5Udhk#o3XJ|(VLn<;nJe;6wpzAq18LNb!Z(%C1L&tKT z-}BJjg6r~TnYN~`l&JYV6V)2Ntv0YTC)spFL)p_7Tm6#>)LNQilIss1NJARb*puKi z14h&35eQo09BodLmB3z3AN%DSJ*2slKJ>Xxvdd8n5+m-aN~kV0^|upA(VP5-|D>;p zz-(UAdFk0}I+7&q6Js@+%aGay3*V`27{K|n>GWopgMF8J=L$$jENpH}G4Auw`n4u` zd;nbn=Odow3udkBIjYqkE=__NL%Ep>i3yulV#X!y7L0^WoHr_i1QHQt(7`h2IE zRQv%W%;a!HxY6WP;`M!PJ{g)G|K57tc2o2|QsYBxlW05>#l>iF@&>VT)~!z0#Rpwi$iy9Q1pZ z&tLF2OY%XH*K54Wb;@LN+WK6=xOr-RySfSt0uTVph@FGScG!A9oqK`N*!59b(0?$A zCkb_g$CTr9jRm@pf7He3VSAOCd++q?&dHTM_2C;VzMl1$asl%@X6^Uyk3W@fgcRiq zTNXJTYgGQi({IoxXvp3`f~v4;VlQ7mq>co3U6Poq4nhY4PMv#5N1}Y)(AwR2;c$zs zHC(DbSlF9+*H}oS?!_RTn!x^oFEFEHASOf7#cvX8dP_s0k}3}0u$K}WZ%r2Zmkxhy z3(I^7O*pKIVkU=GTg6lBhw$@{lBg0vBM|Z|tpRmO0phyx@h|W#>IS+2ptA!Vi2zu)i=L2v0%3*LQn7>~sxpLG*GVR&re8J~ zQ+~yNT{kiIO!2jFN`lPVNY~jG|E#|L_?Qt$T8|Gs zJ@eq)UCgL!t>x>D=HIbv1bZ+gsnVm*#BR0DaCW#p4=ErRhv!yZWR6_cLfy>HpP&e` zIFMHlIl`i1$Nkfb=OK_^!0?jKOwCCO#UF5MiLSK{=)W(tzZOZL=ugb^vSjiCL~W)A z^2n8|EaMV1DHC8nz5Qt`QaFm9h#_FkpurXysi=5j{auen4RvJL6v{`3?w)4nEmtm& z_r2pizG`)Z5WsdfM`~iAI%~RUi_?zVL1wG@FjA4$SI*=i6Ms9v8vwtWQ>lLgw6;tZe|{(<7?xIG)An$%zikTMcjcnE$UOfQ0C7W3AVV zbxcf6SS3bz`rf6qSJdmo5A+~;(c6;Yz_Rk<51fH>T%Qz2=YMrH8>=+KLMxb4n#+!y8UQQ_F zY7j#Os?u>MCf@#d2ZCB=lL_1^NYk*(98i$49zZPzT^XR5{Aqt1Fr~e6jESb4=ccFW zX+cMKC0rx>R-immFg`y)%e7vUY*6bj5p$TG)8KHP`^!#eA#^*Yw}B9KbE3L&M7EjT zYM-GZAO`6(9CPU*tqZ?ld>sj5ProeUy|5f$hjPMOcb%zz&)K}^{I_O<^#3N!hX40n z6XvcT&B*=oc~vI;mwPXL+jz8!)&9`J;waR`E;FMz>Q3D2c1_G z$uLP4U?5~fnLUnVhCOy*~dMfCl0ZSZ)~@(4cGU>J}KjyKCUe_u6**F7(Hv z9OdIhl2ByFf4g`8Pu@gSgZ_{ZUM6PdnJN2ula~Otf%<(SKI@?SaRop#_+f~obmlw9 zttkv>-f=r!exZHj@NqJmYVGP`Uz#VWz0KB(@9JpIlawhvaNUTQ1%SA$*C(4{5dd-K z22j3T8@ugo#L~OIVKYkynFAuNmuMfHai78>3<-_AA8C&dD3^)N% z?|P%Tbr|kMo%Jp)^)g>{VWXj0xG~@mJGiRy`px&JNdcCG3U0G{QFPzRBjC)>_|oWo zg&`}nC6{BNe;bIcV}3fW4d5mZjs9W=1iQF6(EF8Whspj$h1GY-xkCUA`RobXfWehE z9K~%a-k9l#;fz8W)j7H)7z29aag*1C%r2Md0IGOkpuXjEfV~d z=E14aJ`r=6x@KAdpeUN9RKB|zNGr$qek0P;+lu7i{R|HlTEm90Ky`;IXOOc2hKj&F zw18_b?5B{~^!9B8sK0(-%V}fS87>~fL%KCMvD`m_33v!}yP|b*0JQ@Kw4r7U4w7xj zrchp@q=2B|Lfry>c4H%x+5SUNn2IL?D0s$JA3NA8KpX&nrge=?WWL+P$3R;5)AC5< zuC`dhP}$H!=;LcQFWv|LyT5Lj)!NmiW3f#K#_2nt^?kakZU*w!JmF%^c?lyNbaf3R ztgTt2U2S@Et5F(NRNfSBjK}}-dxYpdT;ZqcI|}c8ra;&N#~kpFO$`nBf(A9!`=o%qT>PD#$U*b@bWMG8Pi#l^)H3LfDDWa}p&?AO?w)5>i4 z0b9qPr`2d5<-nE_$S@vgjvboXTd%zYNZ%U- zPh&+`!q2F^ez*LzXaP1!0C5oiiYqI~s-0 zZJ}+5*aocLiSl_?g}?)LA2k%1y81*!6%gc(Oa1OI0zFR>Jb5qdtrFZa(Uka)ayhiv zs>-bz%D+(@=nwq@ISes*joS*xG}lf)1pr(HCqMr&(AMoGI8CQpM9NQ!QegWX7whxE zP+1Gy?1siNhTl&s64)KrnU6Mk=MSPEhviJZCYQnlbW9`WiwnEU+4~|-GSYY`GyJpkWyfB$E z#Ef5Wq{ElYo%r~kFbWq8CO~lOa7!<@0LO(+bVlQ=E7dfT!JrltcNthB^5p-K0t37l z$BvfoA6%}^&yTxj0yf>{4$YFfu}%|ga%Ep%-Pz?=P(nfnS%W@@U)1)N8!w3i^wA%1 zL>fDJA~c<_pXg*99HBQ4^g)CD&3Jk6FR)%KeXZfFv{ffD7J+ro-j@MJRANVOGD6Ab zUIf@R70#2s)D*UO3p$wy3L3UI4{M(AbP^@q8X<6DWeWBivrhP}GYjBNa2Gwfue(&f zrh-+4W`n+*m9F44?mf~MwKe<(e`zTI<1`5Cg47XlnrqDGdJE;W3W`w{hEuGtOQiQ# zW`u`$TsiQqg4C~_$$;ktN(CT+@7nCK^3W3Ql>tUbT|+~>u1FS$7T*zk9z7hzMUb=* zi1$zaPOID=E{@?WjlFtfH|Zk)?%*jzJlDj6IALa1 z*$t@?BTNIZkir4+dDI_>d-K>7@EA}4q(lwU+Mm@NNUIltg99i3N4fk%dco$&X#f{3 zUa-am@}DLR4W>Qei9I!6T^AfJ)c*pEol4sSLP3C$nP$GhtpYgOYo~Cb77uMiJ?6z9 zj4Wi7_Zq8vUx_EL{T6R>0f!czyp-^p3=NKbzB)3m3Ok~BTt7yfTx+JRDCg$IBHy01 z3n!{omX(%j{^p(Z_n|T4UN!uy70i6B&yqleXZghDW9J-I_xqA3A=NL=^%f_-Io$T9 zei}ya3Kuh<3{Dzg%DQ9zrb2fvu&T1g>dj~u#lZ=kL>)wzFnyfIscx*D^vAm$-YT-S z84En6d7<&nF_>y810oNr_BOw2yTVfTQX&1lJ((9?<|}V@w&`@}_VfQZGEA8n2(rNr z1~nkTyu_~gl&|QtK7hwmPd86N<*v4h`%efhc>I{8FVrVZ<}!fFgfyujX++SaidjHp z!A1bQW!9Jflu2j#5FO1)?v=sZaNs3jRa(&h`AHW$$^c{w;|Y=PfN`cSc3V$1pi(nO z&RU9S=`JlLWfRgMA}fK=%ufT{;cUpbUof60O-#N*a}6)Gyp1Fo*w(cW)l1c zR7I8y41c2SoHx?o{C8^45J1^x!6o4Ltyp%%GhX4x7P_OQJ&jwu<&&(krUTFgl7>{H z3V@Mvu8=Yzuw01ApnQl>0p{UYOE-5_bVY9j@#qxY(MXerw3?c}_4XeJIUHfPW|fot9wx=zM}!bRNK@I*mGCm5 zC)|7bB!T*n%$kbE`a_9AX7S`9l4?lws@SqMK=m zDLkCap=*8QNV)r{TI6is8}O}p7F(~%FPLM}mlXzcVgjI!tz%Ewae$L9pVyprOuW55C7@&vmY@ei8Yl6=q$ULS2+@jpT)AB{;m9?=Eq)=sv z`;I1b$zXS>;87ZIBR=-!lGuYLSkj*!@9Wpy-&EM&w?DI*Hoy>!{Vo=-&dxDx@j?FX z$=(tL604~q*uA&7@u_$j9p<+(H+1EQFFPVSvcOT|ZUPtiaZq$76Gu^(GYN@18dfEFOz4&9UK+VV z2BoXGvMDkg`ANU^Go~tO(q`#;QnfWtkF9=HeWO{_S$w93EwJ2m>+;>EJ2ah&u0B$C zh~%()ti)#{+m*=-Gs!8qKp)69{?uiQkx^RHMAtWueRM1#U9OCqm37b&s^|B*`zT5+ zwjQB|UzMZ|nxxpH-3pRLkiauCzitcmRcKW&sF@ zc`;I+PXa)C@^-DFMKz$IX|oG$8U{oy9N@`eg=J|}$sez#gEiSbbyNPHm+1tszM#`d9@s&Bt$k{EwZ+~tDmnz68isguvhFGzOTFt6L7?<8#2)l+~NNUajwyK@k5qHz9bn?Tep{VWL zcE@3bg;ENNi?3!D-rs|EY6^|FqXdZ6bjQ^sf2xY2uH+U=l*uTyqzKFbqRk=@Z3c4W zvH2q-BON4*WRNFcC1)f z8c*Hh&zY*!uI>BB-o`}AdzQqpJuI^m;9C6$!M*!wSj z%{SBgjZ&Z$nqq-RA1n(UG-6J4y&^?A6_JJl%iFv2t$x8tFRD8UXUBd%3bWf~fGprs zjU5Vow~S-EyIUspr`6s-`q&Cv0)F^ggr}UwS*X|KwNu0Jq2V!j6p1uz+T%F6P9mB7 zQj{r8U?4Gaa1P5>2;J9^jHh~`;_L3t;Q^rSt}L#jm9YYBA25#~`W5MflGxG`;Sw21 z;9pMzL+^{vIw&QXUPk2yt)hI_%pR45KOPo8ApqfR+T76mhjdHv*mkI{xdNAGvS@oJ+daUB*0IuHW=;hS-hwe2 zH#CV@=BZSx?K?kX1s_B6p{Kp2YOHQTlJ-!ty9AF^BG%Br^7HPtRcc;L+5L-gyMc3b>A6Z_L{q!m^d6 zG~>(PX3CHVj-OmdoC!QlU}1cgi+b}0%8=R(GX6;&amV^)2-^*xb zxi#(qg&r_0><&CG@WA(2pG4AaIN4oLdV^U=)SUJ5_a^70^oRdE+naAH`%K;>ldz7t z?#&IpSY-4Q_p8!HzgFFAfZIMf$72 z{+xkL#!N{Fa@&05@#W)XN1p|0u6lFD|JuXLDK%T8yEI_^%dW9D6bzslEP}y^WWzD~uJa0^Y||a+J88nO@`NNRc6_U=1~g*E;J%aVP-BZgj&uGT7Ph9v?M(C zqC1K1(jnBFufP!wW@AzsN<9XB5lUD)AYqv;DsyLscO{y++AoK~pV_oNd8UZfGJOpZyQQVOOS&7RyE~<0&fE3wJ$t^{v*-P9j&J^2$6By>?&rR)>%7kRg%p@? zJ?~O``8QZpAr~E&H8)v*pT{_X3p}RnSlz)6FH1;?XzM!Pr*BDCt(i(CD3?W1KjbS2 z&7C4XgDK%k8z#akaTps4V93D)Ro%L}@#yba8l~mzGI=Tl2-=1-2$-YNISSbrkloDf z4hmXsaW!l@xPyr?LCh#CmG1AW2ANqsd(DS}>bqKEM_#01B+pRFyPAcVI^hM=WaM z4cM)(8e+?yFLyaWZb|=0WkJw@m`ZaFKBU=mm|d!&$@BrMFWLfk+M8N*t-Rc)sp59( zeML%GBs{IY69LiO7FbjwcA#A;ymUa<+aA*XRg-iRD6=48Y*%*M$rZ=>^j#Dm8F+^+ zwB#u`Dlbd_Y%A}~-X@c)z*+EU-VGL(V-OD>d{_rLB`a=$v)m(tyT&jQJ2gUbW( zeU@2~a5Y^iKHkHzTjYi!h24ZbvOA8CNn63mF^cyF$SzqL>@6i4Wu+5y+-o;RKSv!d z#mr)L_R+r=m_2yM21qux7PX^ocZ7=C7C7!&1!Tp~M0@avx2N#3-#2;4t#a>->KxjRU`($G%_~bcvT4|()W~{vZC_i*;QKk^9fr^O{l2Xv;jhGScP@Ec zk@6f9^L$bi{d`2Uac}x9c-*?hY z6je`%37_PzqlV?ositzqzqo*ta9se|kSB(BsIXn{Se)VMvtBocA{ktWJHb>F76EC= z6|V961I`op_!Rq(Ll57dX1_cj;}%B9oViaCQ)vd-mDgm;N7%}#C0^$UvtiNG$B+x%(g9%u~XDMniQ!{-Md-O8ggp z=G(uBHBTS^Z}|&-+`VPU^y(J*H<5oBLjT4W!E}24`SMOe;vWi(*{sF)v_45RWl3^uoCt8&@l;xv)|Z{HQrx?D&%S*n zs2Ma7$#?G0zLXZPZ*2^5lT>>8spH}9Vz=L9tCq;}XgcH6>q2W$U-eR7KN*&bk%03MvI z9F_898#_tsQ0+{Wl+XTWSwCZve*ZD8iezcapo{le3~x%x9dm9kH%aB)DdCL4XCL1g zAGo>h@({`8yc;c@DJ{L5WV$B@a6a?H13Gy8+L>#o!*=`3$A%lPDy2n*5rdTKrmXK= zZU9EAKRM3RvAZRyR2(nshd{HxPJe&yOXBtL)1?f+jgb|f>)*alt2i1oEM5Wxor|*w za))w_4~F%z6nX3%72nyc2dpCpvK#hyD0GJ!v7uqZ>vYlK&pVNuU#!s`pb#Cc+C#+s zkz4YkyynRfPT|_DJII^xs~q4Kx@>XQ*3VSm(OCox1?5_Fse zj(TOG(FmIsKg{jYbhUx;?0zTZOr2tWem=EQ0v^u^Rubr`QeTy)|Il<4uw14X^_?Bx zE`Y4EtvA!?E{NT?O$W>oaC~Re(M%Y@weUJCwj7|It1aa4KGK_hiuZ*!Yn%>2l!vejnL77(AtR?$CF5w0I-~QWG;Wnb)gMuv1_~=Nod+L$y9= zIR_P>yX}sR%G8)LvEIyH+;KiFwZjwIS^K)6Ffu$nzy38I`Ap;SZ@}}hIh*E1wtC9I z;nt2iv%5n@F|t>77fO=5{4nvke#^rvE_GbEspFy}>4K6Of`VuSQG_xL0K$hOD@ zbPih+KG4P&$QXP*oQOYR`@248>#u#s2xd228F%*Eb^$br?zuW5w^&xK%^#YP*&6+N zM2*#?Hh(k63~tBbO!am^6O@^+-M9x@U)h>>-Ta~?lG9mQJh9W#G8L=+K{tPIxt0go zHm*Egy;<^nXD3+Ccbt_SCsUKYhdsDZH zQ9-KMZ>4n}OG2n>0$Yvs-POd*o+&Cu%(ol24;?W?3tYJ`e*=TeIbM@eY-cZ*u_Fq| zG>p9inWq$9yfI_`2Rqkje;F@?c_w;t7LxgRx(RnWL_E{K5-KN0ZELZ;04lk}JXV;8 z4@jxu2!6I&APeWzzvAd{6Y+Qlf{(kFJH^UiZJ5{FbS8}x15n~;&$VJpys`g?@|eWo zCT6Nee`x9bop&3%jVcwy-T6T9K`Xys+w*-=we0t)1tIGm5==%SxU}wo6nU~hN$ekj zPp)C1zKY+E0{PqmtLLVti(7?83Q_!0Q+11|*xh`083zd#nXa@Zmgb4ptz@r2&%GyGl!uh3RHXaDnPy`} zNG{YD)Qz9%4ZH&(@Rj)?A_4KG^R@%J7Xz8{aZR1dy~#_`nX1*{`eAd5_eu$bUK~E4 zUhE2YxlAZ4Tp13Tyymvc$P$wE;>su86ACWu7*OC(e@_LzJC>5GfJox8Js^|NlV-@z z{{)sDVWNpQ5dR0Nn#s)Z+jad^egtfVd=sbpOU=TPc~&N~%1T9B9lOUhc~&~qeAq-j zlR(jNm)bq63=UAx9Eycb6eEImUVm6)*Su{ii_dL)72eyQ4^6yDu{^n?!|NcX z1}<}HIPIQ9u<`s7I@}cd2GmG$LSV~ zZ2qmTEF#2f0LTU~P^k;EAG6S$>}Xw|!WHf;=SxWK2cURu7@;>isSpV!RgM z2#r)FH&?4Y-zY!gl{3q~WvPa3s+=82PiNMnHS3hj zMluy_dDtt;18@O;9z1XL{)6`Jek;Y*^DvVQGw!|fYpq&(tzmH7X<9-4tYaSG0-Z3- zj4oI&p56>>?z^Lf#CGqcuBXRCHsI@nRt3jvWh9;MEPR0?lQ5R4_W!|JI0!Epq zw<5yYXW)?LC!%n<+&A@omRz=2{uKma%6$LTL$D^Ht=26F3 zvr>c9jgdT~c7luAE9~qF?Aul;z}(X;tTe`wki*=a*|wtO=A2wh3|dIW4qbc{+tUvn zud15?-F(E=-6G{~!~+1o`389Ltt~CzU-r%x?xwj`Ia4q#(FtYA;gS~nycJ(WE?)?E z{96uU&-}>7Q^nie5Kk4}Yi@xDI~2fUc?N%UbE>NIn~nG@(EKJ4((u!?mwa(pH$30j z4zk=&KkbYYAUg^Y23ydx)-<2~h$XZhZ|eOE?|@o3C(b<=@Wiv4(%&VemtM}R)%nGO z4iTg!SDDY8<)XTlzG0}<*nja>ez7l?Io1|uI(PE+K|;4CY>p`;F=8<#ECaW-9HFQK zBs`wm)rB(}qsrf*H(QzI0Bdjl?C~VcgV*eHTzR1o1Ee|k zvPPe;`Klg8E>qk*N)uP!ha2fbZ#rh-<}iv@|HporKfIvi_TYta;01XC-PdHbjiefJ z!J+AX=CU>H77uvoXRt?*bw!>DWC3i>PbgvR19V0_nQudq;x}0`QC2_>GBJ7bvt+*0xIH7R8(}wxpRL(rV3P0zz$HCWVt3O=xlowV zVEw(Nn*l-(v=T1X3x-z?>EpuDTsIwtypYM(N_D!aSp=4ic&1Y@nIZ~o_>A4N**>DiwIyTuA?c|o`vp;3-UGTH)-PBi*h zE`coD-!!Tz#3AW&&5c=qb0iOb94Y-3CvbXbcK8buAcijxnKTxb1#!%%qK8z_NtaYE z`p|uFdo`Hhi*(RpFpct+oZY){oc?2&Lo{?^u6wDrIa&UqZ;b6fhdFT0TcTHRfj#8X z8>9`P5Wj1rB9;+zRZpUiMWt>fE`hNK1{3a7|C-qS~Ij`)Z!$ z#-U=NC5icrLQ#S)V0nP`CmLPGC*t$1>wI;-idZN@IWVg)M;FsQJHphPp_28e0xRwz z7X)-OU}LVXVx#V^i-cC~4?yeXeV3i-c@m!vG?{3yNk$ zH{sL33%EjsEMdPo3;R+5?`QdkGc1aCj^0%A%|ZP^q3*U(w`dbf3oQt^<##zr$14QR zjth`eI6U+6kuQEjWan6`6x4!Cb5e|sC&n0r99ROtKC<@_PDExrPw;v4ZU7Q&da(We zLlyRRs3vbs-u@}AI%=|b;sAig<52(a&*6=0p6yTJGn)~+!TKLt9T%@P00!EFkF0qz z*KnVN`|B1eloT{tZo53db8DEgam&Mdy#56yqtc|})s#GRKI1k|TGOQC`f^)B(1p^- zDgkbwQe*20(sW|83wt^P>8BKK;J9)e=|{%r-`s~LP>|}|+&bbK)*Z*F-=-jU!w{Ka z^65eSS7Ll270Vq8MPmbSD+nzr(`1^XpcTY zkV~2rj=AnYN0@M@eQQv2AaW-!Ep7$x?$0V`KU8^+(1xl%t<2hBMEs+j#xYnaX{RlL z-`arVZ2fx|1!$r3c7!a4jfvK%)y*B_#9H}QCdg5ST_|8{%L)AieA|nCRB)+FFz=3g zg_sk{Ts!Saki5xx{CiPco}qD%oaL@`jv2MeINIwnTRK3f`-8C#GWB_I;1aJ3Bvv<| z_P3n|kX868s)N@@6ZChPpOxVJckIWrmD~&c|508!lcF)*v7II_!e5+6VJG_)A zz*cfMXWAj;_@KY_e7EA^WTm6)q-&{c;aT1dqHA)y$=GRIGV=vR6kG?sQq)j3zFY3O zFfn?h_J{T9#Z_YLFAHa3;Ky7ixX1iZD!@WfQ8|viN}mm_gLnvw(3knKu_0h+O!m?4 z^wrpy`{*Pu@*{X*_{ufp6xQdfltIE6^L~66&l#ZJ07eoJVO*!Auf2k@2}%zK$0*L& zF*c{>9(cDYz65SSErqx&ytSl}h-?OQ#~818;JzxbI^Clbv+Mh=Cywxg7bW68$A4#` zeFd0$tVS}Yv)XwX0o~z_Fk4JQCfhy?gWbgsU`GUV8|a~3m1vT_G%N>tseUNK{JREH zcnz&kJbPkHwbo6g%*@JptbhnIBa2Xcdz&UgSh{c|!NtXdh8U7%UcZTgG|S-za+^$j zSYR~xZ1tEqfq&s6^=xZJ@bp)3$tI=c*`Yz~faYSe4mW?HHc zc@e0c3pWOQpd0-Cb(#soYdoK(U~o$*FdzGe+BB47#%{*Y-|RCjA;E0OWubL+L<88h zZ;b^8DB$u!WwP*^biAtGTc^A9j?pGDC}H%m&5w+E zvm4ZZ!hcmkzxUvMKWDa@SE^uZAMEmc;~`6U+b?COidCxcx^we_K&>U3+tLN8GwjFl z03_h{Nl_7@@pVq+XlW*Zqub4aJ-r6!3aeWRdErNUI^Zb6VP!P&w{8|6QU^ensc>sn z#PZ+!DDZ4Ed$9VnSH>O2-;1!hhex>H>FEhsBC>f{BAXw!f1p~2sj$i=XC{uSJZ=f$Vgm-u`fz!`)vjz1{KD9JAnIetlagb}!h*YW6jOdJbA=UlBF6_&QSEq7^|BkLl^^ ziTCey^%loM-Qb?m(QiLyN*yMv4w@6e+J@FBQjWqAMHFUZ?2ir8CAbLD4VF?S=QCn4^I8Ejul&x|` z`y;74^s$MD-2y#(M#C<3LS9Je=u7%-x^AQ& zk50zxnD$rSKna~2a=#8%Go@|GdiZiS#Cw>)85bCgEKFZKoTKx zOKas<3Qd{W!lQTk__N(B{biV*@(iYnqdd?PKC?pxI-B<6G@Ij zQ__EXTE%=O>Mfr+_ig|cYhy%EO2wmw9{|Y_%-Tu z$KPbX3Jq{R?P*D+9}yKl6)cOCEOS`mbvWa^v&PYHvHQS#xdV%Lqi{cw)DKQA-fQv|u z?mKu`{1H8}x43=f#aOA`CAnqsvEH^8UCK8SF~BcY2Zw|-?hd}Ve%%m!F5HJl7E^2e zio%~+QoBw7KI_)b5Qv$pR(=ZcMwM@+0Zt9K7hWB!6YmAR>CzqD@syh%i@c0Tl;_lX zLQ=ccb3crc!kDp^^U`MjVC`qgw}>+$ZNM#FHlDltc>+caX1_IcjpFiU;U*z9vH(C# z@NGusyO)O0O{==`O+$H@H^0C1g=$+UP3I6XmuVzW6J$!{-XhvT6Q{m^TidZ4DzPr6 zlExtFzE_9@hMl(An<)gSRrB%xFpV5UZddX|17>JX)=#R^`Z)5l5BWMDu#p1DgXt9! z$-t)68HPnbu~^Z^O>gZU@9C896L|R)-AzrjoSj{FnRJo4mi8)xqaG~hMTUyQ!^5|e z>qVsVL3q@6b4)DDZR7R>uAQ*#-o2$>Bvk|`jUb8Nf^w4&{?8$m>d2N+%vu9f6@GZR z`>ZHi58;VxB+1(0ulBC>7SRo^mBbHyW{l=2M+azzrtG%V*An-=vHd&=e3si)farT& z% zlgEK(YRPGDQc(sUhv@)WZvV`N889lyr*Vy);T>c)&T_~S@cv-)qP$om;L*FcVr;a# zR(UsbsxoFi_;4UoE}+po1;KK;ZH_zqOo~AF@bU$I#wRg6+B*LWo_Ey2_nP~fTj1{#YOg=^AYGrhF|!w zaiwP#SHF?N38UT<5Do2&>rywAZqOLDJdY5&TghI`7v3A>IM)rT5TDi=T|y;^5CADg zr&=kReAv}*B$H$UfD-+%zI`DP$ruNKAjeGQYmMu!873AqKS9%j@lCp*OcT~tH%RpX zLSU}BoaI&F>VO~U(B8?{AV_@F^!OckSV38) zN(=?ylz2^pm772JcaCjz$_fiXoqAS#TqyX-qV%G#~NqU*kSQaoj1s(%&tLhE>&(MMAM z{?73pS%+$+7up9Ny^+i-O)32=M|n0n2ZF?lR5iZ)8zT`9HjNB0C+ZgsD^^B|NRIbL zUKJ=&0(#DTvySrY{(0SJ-iaToiD<{Wqfm&x=)7UbVKRSRm8&qpxLfLoRsUzjJl-O` zl53Ry6$FB13g5|UlLw*v$YqYatQvi*H<*;3DV>b~xDz-zOcEaS z5^QeBGqL##(<##@L;Om9(Es~KCRNJotq!EORbLZ1E|Zo|k;Iqk7oG&9%DjFw@y3pN zh38c%EI6j9Rn5||jGAW*;BjDlIv`4>kH(;aWAuH324=Fhw7@uQ++9G8qh=!tc-rPJ;SzTGn)7S$m>r=TL@&v zzICwdFL8Opzpd!eBiXXM0o@+KXongzcG{PphOKU9LI1PwEm2EM``1OEwZ!3j#n^ym zC33a`Zch(jE8$=Q{+iu^H5LLLV32;OOnL)++P)M?6OM4f+ONla3_IeRkAvA3oJIAw#REkQtuvG2}W#Oz$Gu(z?T>VmaN* z$_T6&;vO2S>EnTH_>4Zxz1eZ>LXX04A&A!mQD<8?p5cmn=io&}=oQQ7*VH@d8+5ZI zh|7u|5B7Egfb@W}nBu2?6EM%Ms9AFD74wHsgzYZxFx@-Np@3ua>$tnI?-{lm5Fp;2 zW}ip%RNn*`^E9qgG6DiMXN^6sk$S(M>$qI>angTrMKhL_qZUmuo-VqwOJk?^8Z%yKKh0mP#j+OHe17IEyl(B!j4E`(H zdSqp=3K=Un4YteYM3lT|f#yug=b&qDfG8G}>8Ov%p;_M)o~-=!P(@S_Y-ApI0Wi#7 z5-!8t#iB>6CFU&UP=!k zm|h*<&HtS02-uc~e*4yq-0A=$UPj4LZ;FF;$Lxw57Ke|t_X9p?Qv(hXZK|*gBboFT zuL1+QyU(V-6!H!8``|z^$!xaNPgd{rl+! z#X$euDxh|h7`FnoqYRLkl-_pVhw}~DR7Xz(V?rezsFfOGwiwyi=Ir2DT>7H4Ujg`7a;pW5ZUtzI=lBh>yPD=k{ys=+?QY>G%(0)m0Ivp z!?U!~0t~TKT$P7(l~VBDV@aR%yVT2z{89j6hkz`2bU`s*Y7qwC8Ifc|I?RE_1vlnh zpmD02@d&wm6gZ5PnA4&0KeqV0A z0)#TPv_H1B{iJhQA8!BE!$S?HMtdf+6|(8)Ql({_dt3Q=#lkzRDve*ixWkLER#|kr}^vN z0*66sB>nFbECT6dG=!ejc&IBOam0ko7W#lOA_M$UFaYze8*TG~#G8>7(eRVGhI$Ka z2C6|oq`&Jt$)e^w!kpEIEFTvNlRJ&v;4cuIgJdVaKgtVqH;sBBR4MI=Hk<3KpT^5h zKbP*I8jO|swFop5JhgwOp)3~=^ZC0WkePn26U^cBnf>JkOM67<)8rDJpZip2aXtXq zs$gz2G54eMr}jBY~rUIM-0ahEGRI3~1;$BRDTlkEgb5&bsQInGad5NDob?x|de= zmi55d3X&qX?1o9f9f6!K`_0!K7G~m!z261g$sy|~A~G!vV{k6Baa{Kvo*ha+b)<`Y zr(x7}mYi|CVZ=?kxo{Loo5v<|)|0^$SAl0v@*gyv5}=>fwxIF>Gxz-+wW@d|;RZt# zNowWM5MxFbmYJMSGq0a4v;`+Tzd~D`6kb5_du?F)xgcHy;KTqi)YIi~Q>IXV!#m;s z`A6|f40m2iU3@Mox@*gTtG0J0bQRbhB3m8D;szttVIDk0BTmcIS6(RNKg*?xwa^DN z@znt!unZW?H~Ta8BVuwr?!kC?#jb`u1>i)($mls_Jh{6S$!f<)K%lh$01Ox=x3HH7 zvQfMU2OrC%Y1#k-V`j7J6hD&NoZMUPdIE*cafbwl`NbW?ZwX`s@Y~wjG=GhMppHCd z=9ek4WU+T3oL%d`tsdugbi&*)luGVH^h;o7{+(Zrw7}|6+6y(M%4fH_Q%F3k@w|}% z4*1sm>v3L~E=@Wh-Zcp?rKDvV%WfW64MKWM1Wi}CpWIjEKEqs<0!0G5(w13ufmD(P*dTHiCz56f4jEx+vp{@ zT)Yxg_g#27K=b(RlkSAOU%>FsMTA&uKWPLnw^-Y58|_I)rwn+=bh*)Sjg%U)ZB02% ztDOlr#@2lGk2yWIXks5NG~kyK3;9$#tWdxDoeoG^?Lj)-kThYPVhc0ck4s3!dZs`C zmxy|b0l|0(TFVh74?m}ejDyaFd!<~_Ym@_5k^E1CwzFj1i^tyAvsJ*7hG4Jk(*oh1 zW9;)mu}x~UF+9!2NFNoiGN~8(v~V=Pf26eX;^MkfND~}BtPEsbVNiC9x2uDKkC)^u z()9NzU5YQ6mr~ZF-6H~emCCk4)OzUM;J1Okhxjrt>>DAiq?z719cFk7XU-x|)CfRB zPC@NaL{L=#5&#MU~@!KpoeD$bV=f{96L*G zH}1(cV*|)a%fO%`Kr5A<*a8jYjW)-9Qaw~PK)<84l`QV!9l$Fj2${k^zJ0tK_i5FD zxi?I+?5>rcvgska?b#Ek`%}Lui#k>ib!U~@A)cCj$zt!8FY2423m7jtcLRj48-{{S zXs#PTSvLT}TP%w_YX{ zuz^?gR#u2dNhEM8>Xr?sEIwn?&{T>`%mSwPVYT#wcN6!{hKv#dbPN~Ixp82T^4}5- zmmU6n(=s#h-4$R5ce_WV(bOti&CKgc7q#8R;rF<-5N3Mh6E2fwCiL-bPRH*k({&yb zm#Uk-+xy4p<%Pzg+pDe$%8Cg~N(t-)1b_Ba_m_HICZ?616pnv!Y=C^|78uBvYcObQ zUq$q~Li;XWZWKi>o@^a$NMX| zTJG5MLj+ndOq_2>dG&(uS571B)MJYPzAr>2iG$ktrkxL-6)Ir~#lCwUXQZI0^c`uS zfNk0^Az>3hIQ1sRiQE%}T3Y*c7={ZjZ>^m#0Z*LZQj`xXuA`Fj$~uxJkfn9Odi!%-v7d#sW5S! z+H6F$!H{cfymtZ_lQ>af@}GrO*q-0RP3f*L&c%EIE&WuvxBrY&#KLx8{==PVVfx?A zbLOAn$iHKrvl!7u0Ivf4bFBV-{~W@Lr018((cd`hepTVjH~r3#*B$u*UK&!G;{$Qv zPGh$l&O&?7bbb599W`#M8dsE%^k46ON>hNiJxHbLNNP0Jao9`xIbJ)qXnlM^uOm&W z)jA%hI8Wx{txvP7^!@U+lrV|L+T^VZdJvA)w7!f5x&8Y!STX-_X8LltPOV&bPuG|` zIy#P2Qt$bcnJhl!P{hlPm71`NXLmTGo)|mYWl0tbTWAOw`xEHvBST!S-`rWAaX=fv z1NGP_@Su3rk$fG&aS_7ziOORf|K>wpBGK7Ft=1Rv)ztum-KvNs{VY3W(gq9H21tN9 z|FF`!YqBTHekz*-{oHwZJQ3TrwN;dzoufbBP^3D^v3~1_i^t*2Lwu>*KfZH1$ApR1 z4gT<1OyBF*?B)-=9(5}3{o%yeny4Rap;1!#R7Sm?oN#8~usXTU5XYBnS#@LC;iVKm zV~p#^gkS!oBQvld;$4sBod}}ZoT*Ti(%~xVm>pE9_MCi)nab=3cImxH3}oU zo6%L4el_i>(sB5sTXs*fGDocTp8zmr8IyqLi+1c_1f#}7lJegTEiJc%%=+xcdD5R+ z99(rdVlq;zX#4TP0X)~JKvI_j9yN!6+l*NKj@2Hgvhy`X(o#=NddePgDX}_4;`6S`>A18( z(~%;kpqQh`Hu|v4WO6IUZl9dZQL*%@xV}CpSu(z9NqOqypq$I0%OXw2)6iIi=Y=iW zIy^F#2+fL0yHhvNu+sut9(9_9`kQC>yBB`OlEC^))$+44A9cB#_B+-B;(ClNdq%m2 z(3ZD|Ha`469*~97^f|L*m`K$p3NbP=@>bkwk zx;?ube{GpVnE*trSl!S_LqICaK(Qt?i|E%Kr!6e)<6W6DB}w6Las1%e(&_{LF~2eu z084PwW_S4tVBqg$8`)3k{DnaNWopZAlLZFJNRV)S0~?s$Bv-OE{)27GJ*U{VHdk|x z>hs$-sdO+bKK6#^FHA%fy(4fcqL?|w-*yn;PJg4LWsO%OLE0V%pjv|Q3R=m?k_5#y zOZ*df!Q@eO%al}4TY)8eUtib-d;WD6L2C5xSx=k~Z|!Pme@g|;Tm1oH z)8D&7;AYeYE(XM-B~g~D)y>sEuF2rctd9}!1B$-Y*vNPGu%c#WNfo=%1GQgwERPm3 zkn3G10FW@^?nDK4e8DCb^|h@L42qnG_d)l8>0=)T08d|C&-tDDW+fj9g=FPLS~Cp& ziefa)PP6#>YZX^<9@Qswl8WC6&ujSs z`x3_Qie^r?c&FfgR#G$ewKTE&;B$&aa#uQqq{(B|*}vsV8sZDYjap5w*}{Avy^)P-X2I~Pe1(hJ&MT7)HD84-lg zePY27XQ?^H}XG^5`_Xn|{8<%VQAxJ!;Ww2g2q+q|4K1of7>)QWplh4YE^DxEqBYmm z-4STUBAfrcCSMv#U;mRdCY;yk`W5l}x#nxaPzXJi&+$|{tKxbR!Q~A*X1c%fZXE6E zbi>K#h57clxTb2lSL;(GV%jO8s$;AOjX$H91P&$faDj8U`2FSKEGlTXh`r4yprQT@ zw^x6;0~KE4jo*!+Ayn2bpZGcr02!ASgclm-J%mrPvPMA421tco;IQyCN!{jKrx`8Vz+og6%0;`NTmv|uBXOB+S^&WJokk^!PcnR}% z;*VFL)80F4gGyfJ+escnak0?wUDH7Orp7B0k zGIYlap?l62KeTc>S!g)hnn&UO15CO&%80DIgRxtWa;DtmgS3~6jHWz+v6|=5Z(F{< zE-tW@!d*`0m+)x>&HA+XAr;t5q()cVJhgP&p4(;wSDrk~rCEA}C6R+5mmw_f&=p$> zl@eZljsA2}&Gu(r5;c@_OQHNT*$wPe4+k0ELvjw!R6o+bEDKzvqBX&q7xlo$)q+*H zK(A07Ri5qSj6Im8{XUMv0Uoryd`U;8hx5$;;evj4a{^hhqu_|vD0x(N&iew!3*}j7 z1Xe~<56|X>GSTs-m7x`tNF_-HyTCSU)Z#saTjKE&?})uHGYVEWea5hG4kw!9-KFMN zQNF5*+k0>74mUJ^`UlK6wI<@6^#A}D1$`u!{oOS~F01-iaQ}k~87iL*j(o|pWs8m9 z*9;w2nH-0o6WR}57pJA&^^%MF0&7f#|5!cmPMD*egwdN!l@N2b+2cPBIODW;ip{y) zzz(S+Sbb5pm|v(GEV}~I26q=bX#p+*EH-MuNqKOSiT`*1nEucHa~){= zvy<_q?15nimg|NFJZv-%L1W$9H9-AQ*Ga3*&ozHinP_|0QvUpkn_pa;fAxfi*R52; zB_sP*u&HlXv zg0SN?R_+Z}#t^TlL2vO`1)P3bF+;?J_E5k8Gq|gHBTUL_=TRh2hvj^sj4fzA3KH-;O0Bk+`j>c3xYun zmx(iE<-aekAoemSH*Oc}bJ&NfbXZYEs^#m>g7v z;?I=k+VS#Nq~B8ZF5U2xHn9S)5Ku1k6G?u^+! z$Db5E*1?osju@gia9vuzOmH2k$cX5e>DRXX?Gv5#V~|ch)hF7!+>htv zQiwSayEw77o7Lcbdn>B0`0Q;0mU~cSAV0+IBSMHsKi(8^s%ydxTvu$#T}kFwH(7f{ zX!lgG`Vq|v4>(iIyCsLPh`fH&*oY@SePPMr0@Yww*XF*F>9*ctj;d zXN1@9(#P-tzl9c`?bBbRZ_{PECY+7`@LPb#X-`iFDE~57N>`xqD<~<+)FwXrW1iFh z1JwW>3vpBcE2{budkJX~4ee0BoR#6M`xdKgg57{V9XByC(~ft#T^_A3pu9W74C#N(;uYp+394Co|Bfk_R5h z3nHdV7PR$4#Hdrv5P^2oYwiLJ73|H@gft8czRrS~M@J;HTgY0;YY4NvRx|4~c(8r; zSh^ZjP3Sl4;sTHa)ry}w)r<>n$wTd+BDEy4NK8?Ez8p*wrZR`U0|m8-K`7s4D?*wu@$ zdGG*gJZCc|S+;CyC23*wY#o>fD>0Z{4o)hH_;&NP}U6|Q`qY~0fs#w`!&tiZlQVEVc9MaBxtG!@uT zAYO)`O!iuL;cXP+VZNS7imzS1u1L@FV&3(STtD2+#mrrUH8vPA4}}3a8os7=x@-#>rS8GYia2 zFL!KN&Ehj1-F(e!|FZ}FTBZuSJ6M0pg5T$S^7Bi|LgP{YjIcyxOaNI(V-t9Y))g01 z&u&fB`Wxcd;X%R2_-XzfzSW#jfHIuwhgH(^us@eoJ$XgewpQ~QP432tOCEnt_%5ko zrm5UO+UP$29)pAfzX_5xd?YMBxH#kjV=+}6q!>N$(H}@3`kde^WiJi|)c?(6=fAq| zfb&>Tjo53=2Vi2ElB7&f-Bj$s1B8(IAwArq^G#!XF-cJkV26fBMgXBneczFoHxiaw z;i#P%gRl zi~}Q{S(#+QOVM5(X&m#F2e7f>rLgKq3GSS&XhFKPeHt@WN@NwaBuyrp|3(jk$JROy z4zb>L47M6?wY{fOR*IaeG|=)JQojEM0ukL%2z#>UhP5WTo50z8qDUfvcA71DA`I`lM9D~X&g%J?xi z;sLK6GE{~8xzXEITqCy$-7LO*h5C^USC+}rXae#?s>gEKz^?v}ZiZJ##_MDy$yuX` z>FqC7#JstF_q*fz%2jplbvZm^U$4O>i};NS zz(GeoOn6c~nKmPjt@ZFpxtb|B6@M?^w?t${A zzsGh}G`lUnIl4HU35i4A^Hv|F-`r`kHRNCwGh;nZ4y2U^sB4fs{!wRSy?-w*hzKl~ zK}G*Ui!7Gg{%5biO?DiD7k#IKz!h%WwNOUN*Glb=+HUI2*`OU3%}d%^>rhc@eZgET zv>pLmeYj!2>x43p(Nj*aJ8%c)#*nM{RqT~A(EC>u&m<%YBO|tpSFkjT_&MY+`!F!&+A@i zX$~Q#JC0Y_^ynuqWc7=$hK)3}=z9;FVB~+=vVUrG%>`oBU@S z=jFu|aFf%I+kQrJzdw>=s=mA;XA@k}Tn^Fw%@0QG_A#J9YM2srzJ0l1r0V^l>zn5= zUh#+8w&&1`gOu^sj@4_PbN^(3>p%~0p5WgfLlFKmgGl}NXAuA2j%4PNY~ftP*KFbX z_a6k)sShM2kwGoRDQf_ceD>sb;rd?^q+BlQDLyk>yGN}|AZ7aSY@0E*#@f|Y$noQw ztcD-t=enyC{(szQjAW@_5DAo>kMY30VU$h3zdjmEe$5U<{*Nk%xomtR%tP}W2kphm z%Ke8zGgX>re#jD!lz7&(XABu1UAPDAuZ={|lPK-{p`~PPJuTki{MpQA#mL08AdaAP z5*A(%dw9(D2I)Z7+ZJk>ED~mkK`@L9xn4W~2>_n(=&3c=At0D@CCTlpGr9*%>#1jE zJC>l6pqR%Q{&RX`-03L1j@5PhIGb0t88gwvn+d6@kqJw+f(bK>3X@8k7(2%Q6cW5+>%+`W@W{~JAo14k@ zHmVdcTD-j?8*&zSFr63=cRzU4IC}jV&@BHl#s`7LXunY(kcR~U73`Fc=b_)ipL(lJ zj3J+`Ig*aKK5plK7hUJs`*#c&bc$uZAlY!o31r8U#r}4Q&loc5J#A*RKiNk$&N&f` zVQ(LjIQ_tAJVj}CJm8rAHqB$w@4UP}DUV9k7JC7t5(|xHoWVS2!e9)iDF-BrVFw3nRd(OSqvFH50fBRT}R9;@+c%J*duR3GG{=@Eiko7Cz z>DIx=kQX@QqLUnRp-gq1Rm%H+Rk`6BGuLWcR zd4*dC-JDq&YsCxCvjj{N5d71*t8(vu+Q`n;$EyW)noM z4!75e{>b3|zpn@^YxebuVqn2+P1Z=)yBYv(AkKK+7lB3DkW*4dd3Rhx6?6?k2~A1? z>y0H<&-ZRMER`Nu04U}|a9z5fyp2J^O45KYIa=Yyp!Gz5_?f%LO3!?yEf+7h_K!R# z0y-rc$go*Y@;1>!Gu)2Jax{m$=20qG4E72a7Phvrif9!+A}Ew9(WG)&K9{g}(+MJf zadG48Px`$lq*KnqofpM;v)2i4h|}e8dmX@LG*_tG(t_@@+z|$Fnl3!;RZ`Wv2*b3~ zFFG2yFnNE#&JYa1KHx5K%=(6=vh)MP1_%E)50QifI&J~aA^F}Y(HtXLOZgjX+)z@% zboIm5$7gTRyv~oG!Z9&I)D_F7+nNe+@8K_;MR&I`nN=(4UxuD>O&AoYB-){UvI#vw&U z$aHP!ixezQ^=g~je_8}tKhGRH4i|`jzd8)Xtz1twKem{3U!DAY;9PlXp_5HhQ?goG zU+I<-$x&@55n0$}Z5DLwjIZ#|S1%2N`?}JbbwluAt+V692n7{osj2OiDV{TAOG1Md zp*i^vEYEH#Cc{ROuTWwKe3k)d@_uq%_K(n$wE?RnasFf=@bHTqOPR0C)S$aFxH=|B zcGkB1#l?%43COEl$H;7<->SrZAS(a6n$>OY)+f%x##AHh`sR8+29U^>9h?pUvD@@x zPz4v2I*9{o*;%+nOybgie$+Hm$PM(1OG;3)Gb9d{+5K-n2pGK4P7)O4<|ZQ%j(WK` zcBkly1Ufq4!)$&V5QDz4NP6E+)xa{N4eb)oP@Y0YnVL98!Rv}(xV^F5;0PlUXayKS zgYMTaM?&1oEVjCq6Nm#!9&2Aa-H+?*uV4Y#pCKrO+ik9htuIZxcDJX}bX?{52tX1B zxBKa%5GTevUvXGWfLfI}=%~Y3_`??F@c){g=t8^^ta8xj{I2p|sV zF-?t)#3HXYBys8R1}*!s8}J3pFx49;9AM$p_=BB9_{BqSY{5fHCXG7#Ky-q_l3y|6 zK|}&q>NptUdrR~LrIKr2tm6xmnGMH&7_pRL`>c!u0j{?OkZcQBv}Q9!o(7Wlz*ftR zK1sl(y;?FAvJavI%l&6%WD5f1DH2K5C44YD%<%T()C`VcYWVY zZ0*$U*RL>~!CYDI1b}La?fK$`E8%(8IKQX;DUpE znuJKEbst|B?ys8|dK-T4SInodeE=t9GLqjo0!&ITKvwTFh-{dNS9-)H9IW;M$W6pT zl0-1bFFo7n&+i957#rd}Up5_&_})W8^MNGj&EDukg~GM>bK}8WxR7?ailY)3qTv=j zIua!gFy)++sjRBrp`=t#pq2R+FnZsbu-a;s4p?iTA#l2Ko0Qx8T?)enoWSOJS(Q(@ z)kF}M#4hyZL*gPtbuE&}>VRSV#A*1M{TBZZSPGC_wP(_gfC2~)m~u49z@hjmuKZ)7 z3l@vX3f6*XbDwWFm8CP)8ZM2L~ds|D4t!Lk$M#? z5DG8;OQ!6W6D7HD;9Pqt0b#B}F`x9d`UB2fCHv*?U97H*Alr|1T=HRKJTw*PZpE-Z z;GRY!g9iwR07=C!Pzr=I84Y;JU$p%Gzy4!SL#}DtFu*56d5^c`zn0MlFiafx7o?MM z18yx|j#A?UUtS)kUIa|o4dJeecCKDKxX1OWh2B%8_R%e5J~82?+zU(W01&m$k&~vd z7-CusYN2ecTZ~`Y=Q8#i6ds+ zi^u(f2EB!bh9*Ow|294cMYP26@&{|puP05}GXcVDqHvhi$ALf}q z%$}bk3|}{x`~}%-XQwm`8eUn}@i7VW8;hi5z$pG2ICDAL5bXT;zV0Oa;2;$KuU}HJ zs29MwxpQQ@yx`=>S0U*<4PsR(=yL3I&WMe; z+dv<@=d^t1AtzK000Y;9a5qWk(wF;M4{m3+b5ww1Wem9IhTR7|Nt7uEw*3wboR7RoqPO5!<63glHvjaP>0oe%3JG^+&QR)Z#~l$4aW zg<*4oi}gK(oCEO7MWspp1CTn7<9EaO?fWW4TgY^&n>Z9XV#S&S54NZ9aP;()ZkRuO zv+VxWXG>T%#;I;~fF=I<2 zGdl}74{1Mh@ZINz1j5EN@sF#z1g_ykH?z_W3(=ke1=O$C8B@V)aRGe2`z!Swx<#~7 zq4t1d?gN}*uOwf+E~bj@otnMKQxD)pz>3f8Hw^(FZiYG~0gE7#UOpfpBimyEDw`SI zHyN#fYW#Z(8xDljx*aD)U{CDktKrnu9B;8&oxFkI7y$E8AgOTSmy3m+2>2H|B}WD& z7TiW_OFN>uJ43z8z8w)>4Df%>{DOSPm=jXru6Rd)cL8)ZJUS^PSW*Z<>qPkc8OU=% zaelk~6g)GObuDd{E-0f>t`B&uT+dZ5@PpI1UPSLrb22p4Tb3cpBO@YhLsPFtV7UGy zU2HdnP2iu7f$*}G z^^0us%S-Y!rnVBdd-X`#GzKEa7X2bn5x;u;QqBs+;djCTNWZoB$SzeEPqW2OjYs1)aqERW$6Tu-W5on+Uq~RSrvN}U(1Q9ZW%+SQxAb9KsMlb(#ZXXD?anRI z-{Z{nMfAPvDcBiqL-LFfoXkNWhT;OI9xbD^wzsA#??TJuPX-*e7xtW_==&GAw)V~a z{Z|WbzTGjA@x7-=-&gBq3He-WQynofQ^F*1dbriST^ap2Bo#=HGC+qA+1&iRpo!T6 z8+2v7nB8Z()~&5k|NX&cU)YmOjnhwVvtf@lv7i6&S%f-hpWEDk3JnKG54X$pUYMYV z0D^dyzUI7FrAOTZE=nzlh1RrN$SS=I%E-WKo;ppeF3$tOM=N^8s}*vTD}Ci8<+bBh z7Y9xU0Kvh90kbfyl(dsnWkUf6$leMv{^0OIL+ll@MVusU2`Yk?9-@J9}$l_23bl#&M9&Ya1=s zd(n)SABo8Rx4&uu8Y(IUwa2&dakM&!I!>35-UGEY-2s;WSF;(3=A>Zou84$igS1g# zNdPMHueHcX1rv@vy&tiwAiSlsBK#5!ZK9E5Wo&HxV{B~mI;Z8SgJgVNEI89ShqX!B zZXcuAnT%W&2{wuP3^6$V*^$*Ta9<>osy>26NMBf~t3g%*w}-zFdG^lg05yg_*u$7^ zJwa|$Y7tP-pe%(XhQesx9;5D+V^=fLKHR70c?Q!9nJx5QJ7(iyD-y+saa=}L7ASn& z3pF?ePFJlEns|)hgZ0J9BtjGNHb)D? zap6_NZEvR~MB^oFFQ}{`EGaGjo2X-x2Rj7d;8sve-(DMPY%ivnnOji7g~kPVnYR5G zp{7FF4bIT{O+_-~S5Wq7=0g1+0QDR!bl0tln%x8*m#}g6JZ&?xAl;3fzmQElm`tFz z0+Gr+uHi1Ephf_Bulw(bIEXG9)vILRRJ=SdS>(e0t&1j|o;3>uu6lvnaqRlIkZB=o z6=-WAH%t@`f@B@F$~%G4C?&^FDZra(5jsE{;|_ktr7<$KvE&lVl1-y3UXP#=!jO7i ziRVBN9OeU7ld|Il6#tUo@Di`1)JWuksyWpxb{mK^f)*wq#%iykgUBp6o0jTyNI@0S zb$(1%N$}@m@^aw=2z2g=EFqAHe~f@6iJ4=#h{p&W7RKJfm@SBEG+lbhBGh3h%vWL8 zA*6#$xzwF}wFtfJZk#)1-unc4j(Zz7T(F3j+GZofCI0;Qp14lCwDD9kS2gGAc_aDj zY7_olEK-Ct25n01{-9GRM}wUNr4h0Xa<7YZyF?jV)U#8{@n93nl!x>FTf`U~rwa@M zMosH6 zzpW2FA3c0QlSZSf>yT2SOFv4I_odpt#(s00L?uP{Dji+F-)I1;eOj#PBR?81^!@46 znVAHK5V5d2hoh~kW%uN^$hrx)BA~0~<(tw@XJ!?<7LYA7Qhf{$f2puxeKR=rRcl-5 z^Xun&mdb>QC0{ZfV?MR+mAfa@#3CVBwz!RmP4@{AD3f4sgw|>3*j+vL-V@+Ytf0;L zAl4SP#~1~{Yp&FoS8{T_WMzbw1{Y1KVB+WWwb>6_W3L|4OQ7NY2+i?Fy{tKs?d*FG z;RFdc>p=$6B&;=}LodO?CW?Ntyl<)uO)sp4EQbnAIRCA9E+6?m!n9qNy34?K zAA6x8I$*Iw+X!sN4>sl`vs5Jy!f-bD?|g@@h;>ng{!rTMgOxdNsmqHjuoS|vUASHY ztf0BYydV;mJNMV0v0142Hd$xKHguxQn7{u#^xABqGU!$LC%@Qq=mg@R?|U{kCoXJM zbpQt#EmO{4ASRp=!~q^X-n(@!oGxRi-&f^kT06nk)LMN9jKQ_FUQmRww4Gd>vO+^x z=Mn~FQ7>)u^fdfhZ?9W%ZQ<_6oc^j|xKqv(XnsE?EJq0k+cxt1Zx>x1%{v9v<+;{8 zmv?JCpK-ab5o;Fk)2cQnP4YRNCH(eH8=EVQy*QOTl|F;ui(jB3ZS{iU`@=9qFrfhM z-*w;TcZu(|S4sE>-5Vz>Fc4(Rh!YbICljP(+q?DGIi~f70$;L#et(4+Xq{_{(=N}g zm=5KmcDDptZ@l3XI&XSWX>%=9^zhc+aVjj=`oY}SI0=CS^P}yKo=3i6R*N@DgV(SZ zwuN7h$gQAH68v1RpiS_@d~~#8%waLrRhQv=ur>U?U_D0L#H4YXNwcr2hnXtq-YZ{d zyFjrM%zsXPD>Oh4?l;^+L|Lr^_tU|f+kbTE-M%v0@2Qh&3VPf6>)z6#VcZD;gmP@Dce?YVO^9S|ar@e)QN>DRMcIx;VjzaD-NqJ>BS z58cfCzw!yW+4rdb`69D4|MnM|lioXg-CjIuWKZHp!SqGF{>22UZubR=6bWx* zfOkVlXB(DbOh4hL!k(8QEuy9CPboZNMhZ2bILl~N9}>NDShl#RfSGs@;b@@nxo71u z-8HDk>zBILmCaO36Gne9C-F&%rpm}vzv2c_<*raKUw~xya$`HhYHq6SF@Wa#{7TFH zm5%myo%Po8>nG=77tE-p@r{)(j!&HX?E-jX;3hU}3AZHMG0ff_xyu-)3~;1Kn#E@i zP48ba#xOMxWb2vYzN93nIZ9JOHPqzuXnmieaj-S|DO14RZhe5Ppi??|h0};|ri94~ zr91QGyv$%&Lq~*IdxD^C_^Y>69^R&?F_qC){tfb?&OFqit^Kv-1b@syC3N2R_OIUh z2R62Uw#<1d%o=?Uj_tO_V%)uaQrVu&{ai%vOx{H=4%6A-A@mLl!&coMkn6jLaCPPt zCW+kc1^e`Qo!eMRUn!{N>93o43L5+0Ej$G0(#UV22|kOn!9y0UBi*I$B3-35-7cdC zh%O7V+Gtw>R+roH1Q%0;q>qTj{Yk;3=@XYd6`tdbKzNrMouGJUbVIAuG>?gUY%Kp6 z3xIWm59{q1cAw1qVEzj2Nwz-TSy<>(sRy#;>x^1AVE{HOd{MfVC~(cUcg1%JV|&Jn zylgBx(C{`dmeq-vM+#rmNF=fPdCN~l99e zS|Zb6>Sm{EQBc4B&r~MvRe?Z{#P0TVu^*imz)X96hD9V)0nmxSndmRyC;RXEriHAO zex-di5N$p>Tk)Q{9n0FDwyT0-s-`JlJUy=5>V_0$!YO@5gGXr3p7)2XnWn(y9-24i z!s%q6Sd5n}!9i}Jb?CV&NB(=M(rU%tPvutJg17Gn5Bnb2aeR5*8urzMAT82gT0O+&i%P<1&?OXGKNE^J#*qS$Z9_1@VUKm?b zppK?#H+fJhYSPycOK%yt_ff1535|D{YVz+<$KFG2D``v!<@m z3>kiUEIuJ|egY#Ui>FQp&+&T_yT>BhjCxN{%5EO5{Adfp%AYC;)XJ86z`;Wt6&8SR zUI*|J+8bS6eQPsA@i^8j#M~Yv%W{lH{7#WUVg&)62^Ep`UOpgb00~R0WE?v$Bb8@; z;<&cq_P3N-J)_}V5=K$gEDdhSSW;4lI|fult_S>UcUb1Vpq&&y=c zzz!vzy#Ex|Gp)9P&oJ1k>>QcB8;)%U(sL$CvY>~-SnU}2Vy;zjKIBAbM0VDhaAE5W z78_??NVv3B=9IR_FpouwIf*c1o$ zrSbH5d|8=8zFKiCfc+{Jb9{#VE1US7KQ>Qr7Vgfh2x}ZumF;dlho^!z@eSh~TC>Sw z-y;oYnPNFbAUUb98Qw!Tly0dLmp}W%7yhYy-S%jKg`?oLRC-nyja(UF6@bmsgl!!_ z(l*U)B+&wUrNQQ6`m&UtT8O4E77gNbmXfFevd!1Q{5;q`r`? zZyla~Z(hG%BauFyyLjDsAkIoF9}T`@PfYs>hYQskr!^*Ih;l&a zn}g?gd)lC-v8rslKhdCIVmI@VNMN!4Z<9R&nx}9s^zz^mKUa$WT^r68B)@qyr((wDWgZgjM#!`JX2uuD-n>V*2 z^M3hsC&rJ6dnEhxL{B-gS$c;kXMf@IIE(zYskSohaD@kM}O=2A6&16tXEZNkq&tvK>XJQ7%=g`hHB0EzzVJl zi)xZp^kIHK&HlAHQd*4+_C{qPw_B7GrhF+uh4|0B8j69+#0*m+}6n zSUL;MISM(NIElx`Ieg;oFQf~X%GO7t-V2NEvXFaS6RL@2vBt%U*kUoWqmtoWq)G+fM??Y!^GPZIIMqrkhZrDb@&Os zC4Or_-C-Elkc%8?VI#Md*Forp<^4a1SQh2<-x?&24poDv((CBwJ3{sZpS}uF8 z@MLHEXW1XiZ+DDXBDP=)28ZFNaOGZs2J~s(=b<$y(P5Wxe)NcPSl)V^z#nz)U?~roT^Z)}&BhuDESrJ+x4a1wRXhBrApS(^ z{p@?PY?k_s#!xNo$)4Z48Z}pE%ISNbaB#F5nqGl*kjBJtNRqQHr?O1;H2x^D514Ov zfV-#D;lo}A#4?`4DTFeqYJVhhf=_RHU$gFl1WBt_8yJLUKBLNyL8R}!=3+ed<(ewO z#^TaOfdpfIpe@vHoA;dw`}*GkN(vXk6POxYPHgx+)ltR}a1>1j8w+d{bBFW2V0Sy| zYh}&B$BJXEHfZ8(oYQFc7=i-jIgJs0t(QWV`XZU+k z1XmeGZ3>uMx3wF~xYZlNza^@1sx*(zwe{t2dH4=GY^(5CQo%CM6y0=bXs*y;d%bV6PyDm3q_1t8|l>bT$tEFOOWxV2?k1URr3e!U|Z%-Ih4IZDXj zE!Pf>-Pk=2eiFB@_D3psbRPsDF$4K~tL3HJc97P_vh8zH1rrD9r#^cXS9%39%0Gg5 ze|q=Zl9{_>LO1KzQO5{=yyvg!D=8}hN@^zL@5!|^Yb(tS9l#?kfEWY34iO;m94h3! zjxQ{xdn2id_qDt!-HG1LC+J?!LZ4vi#7yY;;nXS|%vxw;1b%Wk8Bxk8dnUhgDf3mB z2@+M`-Y*hdx?Y8ZbQkiF64&pdEc*2w=hRsPcV^8ykg8L(P@74NxM9HHXnhbss`!W3#OsShLQ#2qf;z8ck z-USOsT-u}On2?A_M}8Dv7@_;xcC z2_X*eIkzd-eECKP=)JC4sqpsDS*XZ_Tr zyK6A`+7tpLBaYb|6Vzj8|2EIzYl947V|uManxEI^s8txD*+pOR5M*plHrU%Z#UMLI zKeInS-`(EZnoNXgz3u5UK8RaSjG9&Isg2r{3|rGQg6mI2pUcYiRbTQA=Rv44ji`N1=HA>{~$!Fh1SSI>bEHA zpyh&4)EfKhL=}UfG)Z=?ntmBvZrI4el@7~P-I?mW4vTvt`Q~Vl4SYbei0b2UIHH)= zs7~Jof{B@WU66&_+5DVpw52~L?~kl<`rWY-bl82awDc0e(Z$vR^#_o96l&I|WGbUv zVnC746=k*5^Fl&$aXK*`&LJ{5NFemRtgh_Oaj_hC8k|4y=due@pt~dszUc-5DQyU- z=MelVx*8z(Con`k9{U&5U#7LbNT`q+4D+ObgFPU za}*07Ldp;GoG>OWfdg-nNna)ULd+GH-3y}af&LW;Es)rtw=~qi**3!hvdE*uiQ-L&e9?M zrAEh67Zt!S66eKq9j*Q_!nYF2dl{^%@L9nd&PJ#}z3N+RvrCP;Y~Zd}v9NdboU&5K z@z`@gc#~D%$DQcwK;1_Y11uH8!K?*loJ5((niLU*@)E z{cC)ww@8!z&mZLA^7ts^Nx7AMJueUg>{q6Xg9Wz785g8!EzpgCj|bKAo6FAj$r@X9 zH?sbLIBsh;=-b$>vtCI|77Ja5z5DpLIn|lmbiK}DxKm`oFVWIr&6NQoHb^UOxLw{K zNgMhqY*>a^rewi+xX&@oW;`5@IO-ngQPusiL72t9AMv z-qw!ge+$)M?BX>SPn7mi8s6ui;J*Hag(5*C0@&T(e!OTIXlsw8)9`_U642GvhpVCW zkR6(7HhiK=VnEn;sxeFn^Nwb0kUi-Pd|HI?8uHwGcfAZ%MOAgSl>G`Ua3jSps);Fy zmm5=ciDiQhe6=2-h)G5X(?>0Xu5|s0qlMNg1!Dy|J$tk1r&hl(lLVbQ;qdqK=W2$J zZv)jC&)e-TC_>>(S>bhi9Fh)3v4`{0k&J3d4dH50Yt0{ge^prEwTmCaQsssn@}@7r z7`iS!gH`C(d2+W4o(+5N&Xh$rgOoxUT{B!!cr;kIMdD788|%njCi$=GHxOF+RD-W~ zX?Fj34GugAPD6H)FDa?#Fl|>aUbkL6xrVgDC8aRWz3i=*hi?Z3De$=^yu#_hr=Xr{ zbJ#><)Z%K(BWOTcU>BUHcPib`Nve-BBzo!>vQ&2OUN@WREN||JWKez&p!8?Q+d8uw zIb}y%&G2AQ5*rD;H~@p%^z^v!?*~^^-GB-$tEhnF2KuLnc)`mPuUJ1}AeA8Pik)O! zk2NmHLFT)=?oU=Zc}0lnIUOxvGk(#payZ9#u$cY@?tXC7ZZ6AZwqG3hBZ@3|_8$ov z1ec*jq0ZwFt#Mfo&WFSU7dJ+W_;10ohA;Ydt)|rS*dCTC^{LR^P*MtPBIkF;^I{+E zwlV2BPUI`z^YXx3h`StPLTdV=(lKe!ftHw;xGN*f>-2!d%ly0%f|uB`jMW{o{+WpI zz39r7Td?(u^!9IFa2BK|x!`1VYd{gAy?-|Jfdr&zQ|>%2KnrVl`qy4uY>C4N2N?K> zLhk*KHrsqw=O>LElef7;pSxhM`lInbRag;95_IuYZnJniQ-lYsAiI~5c0vW+6dX^2 zKKEXGqn~3uKjr@~S1PY((`oGPd-M2V>!U$ylMx5Q-(Q~w;4!@q5tbE$3T<|`$@jSr z$*+}JnohJ&tS)^v&WB{rH3yAkO51e%+lC1J&ekLe3G}$E85e*0 zR}w;zVMRIn2&s&rPUkS#j$PW`8) zL8tmRq2K66`La4i$?)!dB2k5vze-95kp>7H1h^%|v*0iD!S}lDffa>^>t$z8I`vLR zz7sN`k%v}S_3iuCYetVvqZuA($CE)-L(gGBNiQ#{{)z(JwbN3nZm2>}a<;#U6;wn5 zPvqN-hpS02MFPU(mwS@#yj{5>;da5?m7M%1qg~IZ*u6#f(KAmtQI=o<8i{z5QaqxF z_4}xOmod@sTMv1k&GAn2R8vHDXoP<-#(Z!6)9xf5sikabyR|;wA$MMyEp;>!@H8BE zSQR=uXM-j>4hjAMhYoFQUGVz{5EJI zf!M+gl(4-c_Vct5>ot|fHD4{}g!=h`yUUcoLEXF&mo)asOr>IqnIlHF?C&R4aDI@rAICgj>WUm^^I0j^CN& z3B=Fn{6nOAK;|wU)GZOmWB2}1&v=TQHiGBsL7B47I1EiXCfa>7Fx zFa43fJ}}cz{_}*C|9rwOb%9Dv+~?8x=VX&on(DQ#QL4dpu^iUd8@dv{%`EoKXFt~1 zlu#MOMr4D(d*1jA=s3XrXLuXx)!QwOODdh1&93;Df~@;J*3yf?&#L}_U7j7vBJ#*4 zZ~UZvYp{)a7@w*SF9Y z2iAFEjJLxsjz!Ai&}X6>lJHAo&4oB{d|x>I?BdCh;maDX{mg^};$gF$wh_UP8NQ)3 zW_psPWcQxv_0zoM;obe8ehJrQt}t~@x;oM^SORtA2R$H2)n7(^gAuDo%*j4#*~TbV zrkv2W1&I}-W{_b+gSO!>Ayxa8HiP6AjFkzzME>)p6>e=dZ}a@snHtv2m-y7=^Efb2 z-`x`M12=4-^b=k(Vv+F!i)H^!?$8AuBcOxw{+My zx739t5WOnf8YBa{u~=brq?OG=OUKBE4`c>fFRrtoILPFQ;@LsM<#sbz|2XLmk8}A# zw)+$S4A|=@uHFje`Pt`p1++#*Am`~d>{YSfMompumT+GiNd)-Vd=109ozLmS!M9SL zaVx`GAWRBqh*k40nQX90Xy^b(#8qx9To}qH_}^|V{(Ox`9{fF=o4y9c@x{2;@#p~4 z2>L+_AI5M&qG_lUk<3nE1vDgd z!kfw#8jGD_CH@#AKbNJ8GBTeb>D=Of*qO}lkId@_3YDqX*f(GNNyXuIc_a8=GoWS? z!6r}rbuI@M(Doqy8N<-EBjk1p?&@VqXJ$GZ3soyLor!%fxk!YDe&T%|`%LoIR8jBe ziO$8z{`HW=pyiFQ-?(3kfu%02^f;kCcJ^AY>T0PsWOrewOPCD|njO(3E-xfqq`j)y zRf?^s7JpWzY`e=n8CYVZJQ}4HaQm47qis>l(=fm=gcAsKxVQ8-61SycLRzaQIT0;b zG;K+Z6_G46-V!%BcntVwAAmjR>Fa-w`BXWg-?XGr>v(t%#N{zof1ld{okgtok{R}# zKbRYJ#dCl&J1Q6c+XuUAlDX_g!BUw#4873yr_%GmdP>j#`2-Kslwk5a3bU54BHNb^OA0QAqJe8wROq>_fxm0M+ z{MbjT&OHlYtj*rr290H>t{qi@{@^df3qYxKSSM$lUFc6dhAGxu>?tTNm`UnX)5^8S zoCCP=b^2o;uF!-12^b>ij3-bM^Ah!7fmzAF`1MfzxwgQYH+PEOvd?FClRsX&MMsXe zIl*B#c3~VFPw+fXW8{4^F?V|xy00~@;?;r$F=@ov2$rkiXo>)o$A5V6{@lTKi?r83 zkt?)+i{E{ELmmg`$X67^`mY20hQ+@5DF8Ln?Q-ruR-5lwq~{!6thies*DbZO4%lW+ zi^xyBwR@FNPFy_7GNd5Gd4sSMcLRtGhN$gd8}Ta1PEPb z=ann{g09*F!&g3)ZFRS=KvP38coGWZfAv0|7b9@JY;T4pH1=F`>C0-t;u@XUW8klG zX0>cr1^Chv>&`oNNqlbI0M2>Md`?imINv5+EB)siG_7ch8O($&<@U662%P_vpw~^8M8;Ba#qaaX5Y_>*JdfUBoendeOP8kJ$jljy98#lw!qYzJy#%P0U!lhphi$LotvAR zSnzE~2XzxOD?MmS8b|_@^!k4ENs-C!<1+UPr>jR_y}7Z=eXriwOCPE?w++BAHXN?S z!`PU>%hnZX2V1kQn!#g`(AYm|w}sfgWHa}c#lC<*V0$#Fk31JO9VLAL-ecUJ=m*@C9g~5euLYm>=7vnm z?y-LkhA6b6-ry8dcD#DsLPI!jNwRl!IEO?!>9TuiQwToM?L;ghvN7z+WC?0vE8$;E=jS@|5R>#jkU2haU+fek(9F8mdL* znc^v*Zy%T$tL685?^e^-Sjuu75#E=pQjcM-#!krz_dsr}fUoA*hZ$Kx_M52RtDds} z@~pMOY^>Nf498%X|H%Gp?ThNC7H7w+o-o{D%2l8XmCK>9(xTz7cHGSzTL0Zw4eorZ z{>qkVi)(Y8BawFY;NtE1A&;}~Wvw#~gEE0(JrV(7UO}N==U)$o3InjT;zt-n4M#^; z^N%OmzZVhml$pLaT@4SqcSa62O>-wXj!#&Jhy%Df{|SZvER&CMIaKuPtW26P5Q-q@ zsj0|c>Z!D!=O73nL*5dx6z`1V!DlVKx&o@y(Z;qh07~V`!|$1cB&1vG)tjNY*T~7? z#$V%z9Meane%g~il79sLXlh&S)nn%281~+oDT)LvWqP4<#SyM`QF>2GaZn;(OmW1i zM*!ET_3X(*x@ab^RDFZoKIe-A?z3El+;0&RhV6lCic^kOn-qUfbV}5?uO5*+n@Mkz ze!VxL0IKnA$1u_!Tzjlp@9YIWqRq|M3p{UhRoZZb*M8O<3Pu@`+RKD7G+j*;x%SM% zOGUW2Ec(NbEM_Fr)QJen>~E5$7!p|8%nyx6^k*iVBCFpu6dAU`nfJs@h7680(Fw+D zi0t+kMoJ__GUYh4J-4_!l&i3yVRBE^aylzTvH5$5WpOcMGXTj_50}i*R7Hq4PVfP) zcL5eWNNWqCknl{IKe@_wMFf)V^?tblfQR5W=Ucy_3}hq|)PDj8A23*a5ZIX9E*3Zr zJv>^Wom?yXmRC+)o~xXt8WjK#NIV=IoV{ElY!?%y!dIG6^z)4|CQ5nFf7Q!O*Sobr z%rgp3V)N~bSlVGfCZmW@K3rFzel(gKnk=yUYgW$_OQi2So28kQwvqbV@9mJ|Z_3Vje@iGgTF&IHri#EA-B zNITW@oO{10%I7M-O*bfisbEi!Tz6#XYszUs4KW(>hF!Rp|2gBC;w{(vnJ=<2jng=} zIuH0iulp5SB@S&oHu970Ver-$BuWfP2==yP_~b4rp08AVwBQ|_l559H8jw*w?-*6_ zj+V<=PyNdztUro zuqBbWPxWB^4S-cy9S0S_m{RoB56n*-#@|LBYgUDEqbsEiq*zEwkxYwO>@9Y*?f!UR z(4!^(;zS1!m!ToqV#4;8uf5H6?%RMk3D~F*WY078_vKMuJGXCv6Y14nT#-S#pwM?6 z*Y+G0**%le9$od9(b~t;cZN^5p0<_SiQAujNwM$BT@Wo$8YnYol4{e+fKuS*(PjXk zA7d9-b-F}7JUyFEl(}PQMC*8lP)8m7ss`GMSyw>hUOB~etbbwYe-D~o4{4)b0+>9h zecmVB>hLC+pnDn=5|D{KWR>rNbWnlj_?l{n2yyRAruC=Jo8%jyrvP49?hDcb-1PY{4Ts%QD@;-op&sF;JE|nG+Eh~u32f{6a zY=*#z9$i2VAMpD-$x-kCDTHFR@z^|7E)hRpy}~<7^4<=+;L+MEoa5>h71h`X0;!gO z5~nHM3$}Y()RZ_L4}sY!^C&I!39xsLHr1sqTz_BVCh-WnVe785SDCu9e~9(VRDq6s z?7sGLTDWg{o$Omf zo|qw%sAPiV#p(5{N2I`%Pd-Uv;5}jn-TL~r>F#I(ae@>2*f_itojTPOUQpqN#(b7& z`AZ{3dwO5kc~Az_Q-KP=azjIgam3C4=HZo&?(QX1NPM*|H1D`IbgKL5$)Y6vxeWIo zAh=Uz&H%lDOL3spRK8snxY30sGue)9yYK19mg_5)?hHIe@8LxE1pw*7fh;Bg6agVG zfX29C#mG_iI?V1VLOLrChbf)KVjqvw5+9t_soP+!@>pZBB{v~{(;mC~ zbu*1%cZWr=cn`(fHs6Ki$5Ao=X=yu>n-#=}BnIQ91k zh(fc@A6^%(;J5G7_}d&^yA}fpo(2Z65#K|yDh~mF#s*fJs^H;zYfQIRwWmPTOYdmW z^oNDj_GV3^?F~=tHrU{vN*;G_o+KTa$IE{SLZ8vo4aX7=4B?l`QVn*9Uvf2uvd!qN z@yxvfIMLYhl>>W!sDQuvM`Xye$xj%f1R13fo`X#W+{O>0t>IDZzMvbPYPtR0stgY6 z=QEH80Gul{GxG*dLxW=r{0L-mb{=E{82@^yc`nX#wZ@x2rlVO&Z%-mx*}ndH$dAk1fHMXL*XHR7UKd)x65e zjyEv)zKv|4@%-?`B7%?M{g6Rx-Pa`$2Aa}OlSR{Kn|v{V)R>|Nl)d528u1m|qEZoh z1_lzhhqEkjH2c;9)8`>9SLMQ)6k9-{zx7yo*ORsBy6Wc4qY9mr_F%6>232F@)fIHq z(Al#t-W9ME5?Y6lwD)tm8y}$KFKV45L~pOjbQa&5k%vE^$*_B1v-Uj7O(^@;@u1b)iUt1r32lM9XB{ z1^5@wBzjs03p8#QoS>sVZzIhHwlP$jfvSljDht@H(uuxNnUwD@O=*k_e3XK7EzG8> zV$5s2oQ}8nkt$@Q#q`#wi{EJ}bsr?q#Y~b zwp{j4k_7lceQ^&UBsUOqsg2W){GGARv3*oNw@Xi`kDfr!V04V7_KtaNZK= zgnNQCxLlZ*4hwS3o@0^jZk(bsYS#Z891G<3UhZ5+F zRO*@V=u0l{xe9(i=*i`%Oh>`!2B-m${ps?!RLnsUVsP=~Zl;|0t4Z=pU~wEdqiME26N%XZ8;<>+K9WyZUB^QJ7blJT@%N>d1@{|lzndT zZ@m*TBpyH1yJ|P|M(dW<)EI4uIHaGZn(B~DL~-) zyXTQUCg0ZiMYjAdBtwfo%j01QFFiG4lTPB#cFF#FVyP04>CMfEx-KR5ORwN`{dUD^Y8Lf`RB7{#oh^{NpZN7QF|8SmMApWcEg#zE! zp=qh%gz8INCZ7<96XRbm-h*G2)q}?YP?Rt;8MXctDJ7h2Kym8(EMyMtGNdj2{5csp z-xBdme~ z<@vnNTP|XUfYT1wohf`j)x?&s!5u#o^8Ed{fBw4UFJ@-)Q<_p8;v(_z*ARLLWj|)& za1!)sr7e&y$fa|rnFHk9;nu{X**T)wK#dY|7uaT$lBUDWPg~`n4 zqPI6gqk#p6)DJp)IG8@Icko<1^Lt)j@D&lLjWB)x`7@lU++_Ir@>~mYG^G62p-``S z4@tuH({mXpL$pl(2fEL}4QT2gPT)#CN5OVEV1qhfNwZ(r*@n7(5}b$Y%swxpr3Rh0 z|I}?eP47Ftu-&e5NIIXKSq90}XM|Dz2<_=8{G(d;K{n?fwvT8g*vkFSPjLEd3*{E_ zoX~&!ML_oL@Vx|g_?@0;4HsI!K=Eaxq0gkkZLi*JM8;hxl1?|YjpGG!RWe0WgI(w6 z7ucX9DE#L;`AKUwEg6sX!5!0Rrbnxt;?qE(2+X@*F#fjDqn9~ARc&ASC7;blN?XGc z8s=M^$4ty$|Lc8D^Z3qx(>9$Srb$S9xboW13I>D5!Hb!#=I0-5*N;b3R8)3Yj2$dW z&8A<409MRElqW>0o6TsYE0nx-Zt3!d5Ax{o*RGRDrk~0SJ5_mvKRY_e9XDS#KJ$E0 z;}Spjm2zkANatj zLfeyxa+y<(dnaJKR?(a8hK_&pW?!Zu*@34LgC0QHxuR@RHDb0@CUEDw3viVflO)tT zr5cYZWb!K+JfcvJ`?>bltxL+sF6h;z1bP-1_AjC|4fU-rtgcF`mcds9)sMl@OZbWr z$*j~kr}cXDAl%WVR?#$8&ITHvIv!>i)_q}SW96ZsN}qE4g!P)ppH%WwLIPz@gc0p? zye%?##QdqkICSRN&FSa>RZZBF3ztmHaYG1X=7V6{%n$4^DHWHX_!C&{DMQXdB7A=I zE%!6KEXrMLI~!5UAD?&Gj&miyog{-n1_9_DWvDm&1RSeTZ*ROLuf3j*vH$ecM8(Qz zKDMAVNsnjLI`*7!3=;*5%|}6y?QiOs@SXR?If-@Ho@Qxo;Ppl)&{@8mM=r7D&kgUB z^KyO1Kik}nOHU9fr6;UUis)1$X-f%Y?qKVrJ~zkGn=Bi{AYv!23z>568(yY|WK!bb zI}X5TkTo0Q^9Rg99$qErAwQio-rL(dNqa_FzkN)eSmP0jSPB8)$3ICz76k7nK5~>(Texp&cco+|zh1wcTg_^|rR#oT%@vTM*b&QajFHnbUF7=R ztWns@DK1WE^Gu7yy!%l-jTW}BafN)GpzV`3EHVn-bB3)&x?aO?cL03}yG&Wq)LS&%5sr?{R$pgVzs^!Df+=!AP7w1|=MA3WE@>SW#9B8e2hco=`yYnVY8Izh~$#0t3Wuis{v@u?{4;)v%c~d1-`5HcQp{HKUm@>{Hhp3+Zpbk0u zKGKvvPS1Q;;C(tdYcU$6v3^zlXFV`DVXOD@aaR_%nPq&r1x6?JhZCLoqwVL+X*>NC z(6FhSzdb%#`%wdsA^|TxTSMQ&t^~QDqatA-`b}u1UZZ0zdi$=MDcpXamTP4N{o`(x zW;M4-B#ytcv?`>ixOjSG>P!pOYHwQLzreM~^czSqo2&0Q$;~-B(nkA}o6S$YxyH%K z>aTc*N3NwyI-mFr`Nd@vrnecyIkB; zOZw51t9>let}iFc_~QuAxHJU?BMTm$RR-uCYl7r7EU-H@qry{at<6o)#9?kqM=PR4 zC0h$(>>-_YA^C`Q6yf@Gx^zdzgY5lHe*Db}(c#mZwuiqJHkJKYrv z;8XWs>}J@9U)yHA6*}u=F~UUqHF41Jc^D$wY`*l-e{XQ>$!?@W?gZ_tYmX1r5HXLi zS`u)yrdi+C9qcO@7I?@{S?F7K{?9k5#`1p@5JCH;WdH}(J>2?d1` z&xP%vnb^352-l6v!x9p_Y(LazFyP~EMY)C&T6@vi_Ga{NnIz|1$GvkOu8R)L3n>db zCd=b+R7xwdzAzWh8xN8waQh)XRP_Z}@^Bh?NrArz?%%DdN(RWalj}2(HT12&O3uLN zn+jx2yyn-M7A0NJ1Qbuyay=h7NAIF*XRZP692w&0?v3w#X_ofQdbA^EJaNo^|2sy^ zvhN%oo9DW_%@_Q|)C~=R#GUVZ{`(z~i2ApN8@Bx{1PRvLTYFQADQOoe>5P3pXx zdu-}1x~$y1l%uCC#C`1}^8=xof!s?05_zW0F82(JpC4hjK~~}(91WJxur!zjn&p`r zy;N+1rLA<}AHNr$_B~V4f=%ADt-PBV**KDN_wH0D2B&&9-`EqgR`y1W&PA=2ihC_= zzxQk#XEPD3ZYgOs{HZtVb>KPCr(GzyRv0l(A8eh?ata%V!Ad-{@WKX3q-93K!U_ewf=mV0Ed5f1u}b0gQu4=LU=nW zV`dN%^T#%rrl=4G)C(|}r}Tai3Pnl?;yh2sR2r}+i$=6SMAqg&x{lX6Mrc}Z8eK{x zvb+i5*q!Uhr3tvunScWA2HX9i4i!fwN-FHkbehJQ;IUl}j+1Lz-6zTrf|%~H;UvbT>(+O03o zX}ulY`BQE%9cSLJ)?|_Y_)^PDi%HV%UYUXO`g*P=h!&zGC9{%Q?%qb{VQt7e2%gGv zvyVzH3)4)c*SYriJ6UMMbg8c;Mit3eb@;Lkc9;sK%&F}rYNxzMji*yxMBrL!!>$(s zJ``F>SS#xof7`L~G^J~Y(#r1jAUqrH%sgwr5yRIXyaB6i-a=}t8lfJB+ zTOROo4MTYs8mu2U!cMHU-DZWA%fbX9$q>pDhR@QnGdHa!NV;wuQX_nD0JoPL zOn=Huu8^VAmuho9wLGw|Q01&A=mmmna2?K8hC>C{a~8zMh^2z>_eL0PCu$l(z>))t z+A#dJ8D=$*Lg7ThOO&LLwvv>Qj1F;&^j2 z+lH;&n-_>g>BqXci~*2t6}i}7pBufuof~}l>B``vP}WiQW%K4(lou7!EyoAcEe;=? z2N}?j8gKDFnz4~GFMe`sW@aQI0F@|SQXUJ2<44LN25D+O8y~y6F3>wg=Vz*{e(?;2 ztD@HY zZdMf-;>w&cF!}j6NIQXd3k$KfgaAoqQvKm)_}FjlI~EM&R-ij{HwM@*RT;q@sT72I zNJSS+Xn+b|dl)EFS}(VJlyyeLvu3_`vNL?|hbV$5NK|uHY=t@Ut*YdGF-49YAl)o1 z_AY;R)z32WzdJh*d*R7b!mJaZfC~l80);;fS+!^+HB91L9OiUHV27o6Hg`bYg*31s z-PF!Ef4U7GDO&;e-JHh_Xi;{xUsLDOc}dRA;$%|3Jgz^H$pveMJNf=2DuD) zxzUy9<2Bx3*K(*l_oOLLvUDprt{Y=#O%4EEAgE zjPA#+qQiowO0f6sg&w@p3Yws6{t~4Q3fX5>c`W22Bhr-3tgHeQa)yfeJt>B)zh{^~ zrM>_k z=)QPbM>k)$y(vPgD$puOvOIGY!&>5*S$^}2CXN7*M?NP4$!q_E?$|TY$~?4f&swvt35J0nqpyX zp{24*SyX`@)2%%lFz|_pzI?#knTACgy9NT&tXqr2_G%hr^szf-h zlAnG0f7j_gubG(KT|qfg>V1jbJ!*$mS$K?gw)MY05pZ{en5IT>_VX<+aY=?sH6QT% zgaRg={wjLBF8neXmvePHn4DYni>aXg?>`W$73CSpgpoC!-xx~^WDNeXO98DB$mY^k z80OF;QnwuCR|Sz4MPB4GqdPEG4hlB`fG`=_N!w6ZH2>1V7upZ&T_Cs~pYLSo%7jXY zsp6R*2V`46UXn4AKdPox&cU&wYkW?U+S3C1(=&u1`^JDfcsMq45w*qxMnlqk?imtq zDsZ1j4{W4@Cs;m77K&$x>YR_Zx5Pdg-=#y@kumA&(toLu!3EfH%jb+0X?MLr5te&uf36%!w`%!ZO4yE`Gd)izVu|gck}$ zmnT+>K*ItKY|AXfx&uranL$}->DVV3x5HTVJM*!UUbOA=Jt&73Bbm=bf1z_-$rOh3 zW*dK(AZ;+6ekpi0Invs)QNnI=)BpMny<830;MFd+7Pj?D275T<#elHHP=maGMp8%+ zY8{%H%w*txOYiK&K)BM$H*Nl^)YNofDYj{OcXU+`xEmDui35knvywV?<5!;;UmcUM zOE;dkMPkZfq@%#Sk$)(SYTqmQ2S>HTriW+4NUljSK?N^w~miIc3YcKPX^D(SPxE5EJDuSgO|G3QI?Z#RNVnZC8WhbU3sa} zdFD2hKAQ^-vK`)NHh+tq_}8{Zolv3x=!!buNCVrwseA@Hfc_n9x#Ojj>YWO_5Da&i zTxp7&MHBq=BXIK)0OiE~S~J#Q5`R5bq4Thq`}Mx5Tgtpi{%KeP1PBQwXPcT&LpaF> zq&Rp`Ei2(Or^fA4Ei@|yY~5Jq5;BpQ*Y;$&vM5CQvoPSjbIx9W4h@|}7mzI%ne904 zu8jU|?+UCr&4oAhNJX6}aLN}#n!@gQiNrlon-3F+`av-i`9vmz}uPoa4qOQXcu@U)@gCpIW4q5;+F zggWRg@tWU{!~{~=Lx!yqn&1n=aoUR_Yw#`CSAI5u>Dt=+`ui(L?iuXsbPY$B@Mv9R zW^D%%D7TX}R+7LlEHpQvlewu2-Qb-%Teaz_Gl+E3Naj_?Qjkuf0{!pX&m3C58eQIdeSAVgli za6iu^M7A1dkCKDV(t#N)6@bVkb!A=Sa%LuO{-=xEUJzq9qXUe-p&6 { + test( + "captures a tall element completely at full resolution", + { timeout: 30000 }, + async () => { + const frame = document.createElement("div"); + frame.style.width = "600px"; + frame.style.background = "white"; + for (let i = 0; i < 40; i++) { + const stripe = document.createElement("div"); + stripe.textContent = `stripe ${i} - starts at y = ${i * 50}px`; + stripe.style.height = "50px"; + stripe.style.font = "20px sans-serif"; + stripe.style.background = i % 2 ? "#e3f2fd" : "#fff3e0"; + frame.append(stripe); + } + document.body.append(frame); + try { + await screenshotFull(frame, "screenshot-full-tall-element"); + } finally { + frame.remove(); + } + }, + ); +}); diff --git a/tests/src/end-to-end/shadcn/__screenshots__/shadcn.test.tsx/shadcn-image-toolbar-chromium-linux.png b/tests/src/end-to-end/shadcn/__screenshots__/shadcn.test.tsx/shadcn-image-toolbar-chromium-linux.png index 88b6f539a0507fee85fd7e9d0d8fb65fbdc922b2..711909236c716cacc5ad8a58dee828beb5ec58d4 100644 GIT binary patch literal 15214 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 WWO;^WBi#Way>Mmq8%2r_Ui=Hk2rs(; literal 18029 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 literal 17506 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 diff --git a/tests/src/end-to-end/static/static.test.tsx b/tests/src/end-to-end/static/static.test.tsx index a9d20e5db6..544b0c2fa4 100644 --- a/tests/src/end-to-end/static/static.test.tsx +++ b/tests/src/end-to-end/static/static.test.tsx @@ -47,6 +47,10 @@ describe("Check static rendering", () => { "static-rendering-equality", { comparatorOptions: { allowedMismatchedPixels: 200 }, + // scale: "css" is load-bearing: with the harness's fit-to-window + // transform on the tester iframe, Playwright's css/device capture + // paths rasterize slightly differently, and dropping it pushes + // the diff past the pixel budget (empirically, chromium). screenshotOptions: { scale: "css", mask: masks() }, }, ); diff --git a/tests/src/end-to-end/theming/__screenshots__/theming.test.tsx/dark-image-toolbar-chromium-linux.png b/tests/src/end-to-end/theming/__screenshots__/theming.test.tsx/dark-image-toolbar-chromium-linux.png index 41c579ae20bf3fdce6744304eb91361e47f08a99..995dbe861bdfbe849c740903e200771f3281db18 100644 GIT binary patch literal 14800 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 diff --git a/tests/src/end-to-end/theming/__screenshots__/theming.test.tsx/dark-image-toolbar-firefox-linux.png b/tests/src/end-to-end/theming/__screenshots__/theming.test.tsx/dark-image-toolbar-firefox-linux.png index 8d8dc56fa7db162a54d6c563b43c67f67db4ebe3..73f546158936def76fb5d627aa25196b52017ed9 100644 GIT binary patch literal 14838 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 literal 16226 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%0A@&a2~?JX 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 BGm`)S diff --git a/tests/src/end-to-end/theming/__screenshots__/theming.test.tsx/dark-image-toolbar-webkit-linux.png b/tests/src/end-to-end/theming/__screenshots__/theming.test.tsx/dark-image-toolbar-webkit-linux.png index bde04467aeeb4645b725aa73af179691037ef2a0..f2af988f99cc4e824aad0ec49bf70b8232e5fe44 100644 GIT binary patch literal 14484 zcmeHtcT|+;x9*t4XfSBh5DW?)k%(deMZ} zz=kv_%28BM>M)UxC}of)P5OQIH)yi%I(M!6``x?FA7{y$1vB4#-}~-&*JnSQQ`)N$v)GIdg*>~+^liMRS zi=Q4#Z9Syi!Craqr;r^76l9M2ZkqWYFIY`-MPBv1iI?qREh-ig5-TtL)ELs$aU}`%rh4<{r@>HwxCCWYjIhWtwJ{N2GPM8`Q zg_=JPiP?L{ylvKa!>qOTbsMMT?btb$wYaq;YD;FL|9q$3=ZedV9jD;__x;1e!+j-N zX0=6~kSI&b>0jy9eQaR`*U&U+Md25$#fwB(XaDHzv@>>pbH(G`Q)v>pAuXsSBWEBr zrEPqqi}&tLA(zYjfwf+T!`gqm#%r*a?$cimuZv)>hQG8^gsr+W zOl*DL{?t*|lm6^=>Gp-(TG#rd9T}|sUmO{!t~XGN|84h= zV?JL&(t;e_-4muVp(jgh(`uJM#8s?$Q)+8#Wulu`+kVDk<=skg*9d)P+1vd5GvCEm zgjn11nxBX2Z&PQNI`n5>m`+Rh|5~;{LCR{Y*JJ#7777^~-SPs|! zMFaldSsrF?h<7VAs=M~p+$F6$-qvOr4%T_5(8eq`&OVlJ^e+#Of2E{zX^G|>=Hhlq zdSbX)F_#ncD!a=|a4Vg96DQnj;H5{GXMN(SxzhYct*xyk8|sI4k12_Zi+i+esON|t zelS(kvgg$!sD;J4|4wHL%j8f?glF=LA6phEzk9N{>gIuC+jJ}};@)lKS;d9NT10vo z$esw_;F@5PGJ~G!eg=;+IRuTw3R#35^50hWzNd*>Ss5!le_i~YJG!z#&qEb$+AEX( z-r;;^hGUD2WZ#p;7g~pYt4ZH;$D+8h>4IwV#fq0NIkj1?HcgMuDYb+-Iz9YK+H$b7 zR?M!sC|GIa?Hz7e*|mrW3ES#>nkPbkbc}tWGV)vM-MjH|aoel!*_Nl=aqIa-T*+w% zwkt0RmRC6V`0M_@zSgtyFSONKMRVW#MR*PD4R@_`7gMwg8|bV}Ots-9kJ zva=>bsqOlu%ds2}50ATcwMzYigNX+opZ%Uhsld+0SuR%Pv6}33hbV*OeVn7gZDEct zN^k7FbJ;AI79Q)1Q{_e|donQ}tuDjL+oRyxx$k+f{B}QfQY_+0+-_{RpPlQSy{+o5 zRe42iZBkU!qA|Wat zD4`Uu4jbpzl0{wvvb=}QTPT! z$Cek|9ai@CygyeTyz4dMA`;=jUl#7c=d6)e2y?F7%kS*03|whcQD2`j=_F#EH}1U9 zL1^Fm?d7%cac|qY`+JSj?6~&PCMh=g{=(0C_h~8jU;gsTFYh|H8^A#ANN!d4-R~^f z9TxB3<<;exIWa!Mt*%a_hv8b6q_qt4_gaLDH)qCJwlAU%Iw*gxfV(%#>4tAc!1$YawRGOEwNs@yZmds;cU{6FH`l z-%*vii}ZL#K~C;!Qh;6FP}%Mn)<=tUQ2}wq2 z)*}NQGWW;(Qw)yk0EVmT=(d!erAerlyhn{!BKT z-B%=E9De}L%J1k9Asw7uvWk_ry!rJdt;*68_$`u^H6o%a*C%(Nt3G9HWH1r7oE>%k z{7exE&$p|eM<^SSG5)%BP{FZT!`aEnGQB{;Q-iWnUt76?%iEuyhyAFFl&Qpq_vpi! z{U4tfPvq#vQK*V_-YSqNfBW)|bCp$`)!V;rk*Q;~B9r~0$#e4+`J=tXyi?K<@wW~Z z@R5m15Io3_OGs44zji*Vb$+%i&Jw9XX)&J%k>$>Rw~~E5Hg-uzeXePuVM=APan{FV zwu$rFJ^9LVL%ts}-nM+(s=Ml;>uk#$s?+Rw4)iWoGjweY?9{)x^2Xk1f6dT!lr6>V zxC#1Vb_M6ft8N`UA%;UZ@r+%q(pMVYvrI>L$9p5&TT~}9NIU!2 z?wZQVJ7iADzqd%fA9%&8KF7=2#-{womau5?4K7rwS=|#rIeCYg;U^W8Xe>)5Q}5lg zwzS+~bnmy)V($TYf;_BoQx1~UR(t!DB^rNTU3|;6%cOAvZoTfezpkQI36^S)`HZzd z1PSi~J;HK}VFbau%YjU_W3e__{r|j#?e1Uou-&1~-m_(m)p=~>@Rq~#|AOV_4JV!< zb|hH~*VYdRtMH^*dA(F>O9sxV&c?;_Ue$`@YAoNDAR$)wQ5V(z_{%LyZ;Je^CFFln zXES#Q_gDS#Wn?>dpg^LcQ~bgVR`)3KnRim{1_>VX8O!)KUHlhM2ALZaPfni#WOga| zE0(XRG{Wx0sp-lK<$*=luTwiNG&`!XNQ1@t8lw45ESFpx7HpM%@*Dc{&tU&E(?ujV zPo;bP^jN-oWF;&1n_Hipt{h2sxS9PKEO=aacGOAj2Ss17=G8*zZK?D@@8oo0(b?8= zu&D3BEo$)(ioT^!Sa0?sEV#c9o-i+!R@Yr5S@F&6HS)M!M(sFZz8@riHOJc`4fEKO z+G{fni&z36!@I)S!{`H}^> zRn^r~S=*nX`MQddyIw`$7bNzt=Fr%i1LkXB40sz>n_h6???$MV&!2PN6xZn-7npC; z{{A+-uWZ*9Ggucz?rdeHfw9X=vkx5%0HhOF->_|l>HDL;jXA^I6#hW9J@0~d-(rO@ zbOD)fZx=dsr1JQR?j1I!iM;Gi=i$WM;pOM6{{ee*Js@cN;~!f2r|kPa1w^m~*XgRh9<93-6&qQ|m{kMfhD^yvF7i;faN^ zx%&`1Fmo+jb8N!Z?Jq&oH2r*lLI8xRO_t#u9(LM18}G29mw82DYs%RAet z_Vv6vV>)`R^M3E{>_%aG?d{u7NO-g^s&%QhW#9WP*t|F*Dcf_9|9HNA1u%Vu!_b=` z8#GFYq~RB?InjiK{C37%Qyq?0EkpH(UDnyv#M>WfnlH9sf!+ZC{LELUms8)M>^Wcw z2nfT=&T{45HY@Cl^BIoY8KB0Jo1+8ov9`7@lU5y4CoxI@!8ueGwKnz~N0a`=sFJAZ zky|Q*8O3dYy2EHOlFSMN+ej>j@bK{AUeyW5u{WmUG3)H>ZUoC)@a@N&?fd%5wQSH4 zv2Xu+%DctYdwb+~UmRggLRy8US2Mh;)L%Xssha(CY6)&T1LJkt~u!&bMR ztlW{T;a8%$@yKRx3WM4&MUGylJClCCwb{_bJ*KWd*|jY;)J`V~9+xuzmVhtv9h*c_F3fw--$ zZHR(Rp!th1j%!YDc!;8X1Z%%k%xAvQ`|Iwz)5q>-r;s*~gn*mzLO&C=<;2?c>*Ig_ zeF{POyx%{sO0$oI4l8)Pxc20%-6_ZQ6AcJK$lTbMp~ExrOv-t8CB-s5W>=6kdJAeJ zgb2uFI=A;_^0IfQ)p;aVrkJKs>+t#KpUb=jYA4_YPm#HD8W~feLp27; zYSR$vP{Y#G(=)RC9bMnJCpXTN*ck7R-Y-#yV+kZHX7}npPgUKqxZq!%<(jg4V~?5$ z-En4B=8hTPtXEQ;6RrGK}-V}uj zV1M+}Q6?#-)?eX*w@|2|&(xiH4tDA{I!2C! zVSA_ax;m3=zJ5xX1BeNRZ)*yg0V1X~PIZj4D(C$#nvp8TS9WeiJbF}D*ToVTPj|iF zByMeMs~;eh`8r^i)5O>yfKUzfnnS%UHlP(`H1HHSsB(~Jahoaqc=hc8T@fz_MDFb3 zlF;3qKg*`}e`!?k8})| zoKU%*i{he#m_&Pj*L%$4-1qX^jvYIeIX>L({7A&ma{vBK^sy^v#Oc*3Y5vcvt;(d5 z*r_}7(I4{BzT|ovDb_k&dacfG|GhjC7Wx^IFQBSNhDvBG#rhD#h**i6$xZVkhyDRFSVM z^74Gq+d0EiJF3&P;KN{6%bj_~aVQwsVRqU5242nbk)_y~a6r+6W7C|UEAZkGY4BAs zRqy+c&&`iRhnJ9=s{j1?bEI^gKr^Ix^?)a}W~la4SkDSR62Cw`-9nyVVPr|NywXN$ zr}3lBUL|&n7F1r>Xb*lk7!I z!f;XwvbhPKJ!3kFuVu7)KXr2g%5(S!32rPUlhLm)}mwREef75dwd zb+#eimuyn94VD|+DA^Grci^Z&5<6zsstmRKAJnfAgGVgvay)&RQGPT#qNOVRP_#>D z%`&>EC4=Ah--36FqGEfm+OGW7qchHk4Qphh;VNEEESN&^&Z9F{m6!z?#|{j**w$w1 zlOPg4qlZL@8YD0z9qtr>H90=xEk2d9-aRu!>IUwmwb|NxhRzgMy1t<^eM_;lZbQ!w+V8UnQvzK0aFt+JPYt5yr#Ayxe4<3=a6)S*oKq?a~{+L?I$({Tp zS#xD-fr4Z-A~x<_IPzD)T979U1&W;P+~_CDH}3KX5~4!pS=TF}`KR1Z;LL^}E9OLj zNQJRki-{2TH7p9PA2m-xMXnzoNb9G<8)V|andyq+#!pC0F1u%2?UXO9xKvYj?2+lH z9|amEBxD~-2>nCFJ|?Kn!|w}JlOGb}QQ$LLK)SWd9dj{0((}mU7NH2Qk%6}J8#+tC zGbQJax93(4=1zD~nmZ#ZTRGGcneuSE%DdU%Yj&HCz7kCZ{mYC*h`f5JZ)hA-uBB?6 zR_hW<+MOYLUt5^S?&O?dYvqBz4rT%gtv&GY3$IsmBdPtt*+ApN4_BkkOe7P_OvETd zwh~X@NVFaJ4q2a}LPComB_NasQ9FaRu94&2vnI6F11ypIt5R)(h~?G{S*xDn{@g|{ z$-o)Ppah!b+Eodv#65c+Ds5)Ry=pzTrup^pAXZu_@!?75o=2iYg@OO1ipx; zm9u!UKm_%Y3!$j$iV=Y6@9%GOfEpP_jm>uIZukk_9)A-gk+EB&AK_?~@tzCqs3s*p z1ns*9=NXgf!$UQW#rnWOVBMUE!;`{Ot!O&ZsAANjeuRK543srZe)#+6)AasaV|H3B zRwMYDKU#u#2efO;Bwu%)o(>Jr^itq6+iKvyKCRD|r&NgMbWc?t?ars}?C8`PeN77| zeg-eA3-BXk?@=Cl7d8xcDpM!MktP!PV?3X+pjDZzlE%(l{o&FJ-q#6*cywm8^yPg% z%kpW!4>B5|>on&s(I^S6>sz8QilC`%H=XeC8f{w0LtyuL<_>y_sjCOX%b7j<_BlBG zpnZo=i4DAc8I1-^$KJirh(H;s8(cV;0D}~hBwp@#zsF!!eG>fK8hfyB?*Cl{9f1w( zPoDB4<2C8T&JUmPc|UFI@w(AwMVsNiw#<>vto|5TFZFyX{-P#sQ4|>5L_?c5&#ox# z!yLfwe$O`2DX9Y-w@PntvE{`07?ZiM9Up5(*7ZgVw&qTZM6 zSo*#?cg%?LZ#~pb_wnvGD-1u9^+u&+-M^1o4Px|xref`N>MR#896BkvndZ#T73&Eq z3hrnyO9OkH4XB_WtUT6NK3rs>vY5WT{a+W;1-~@bS@oZw)9 z0s=m|DLgX}A`LOb;O@fY4QN29bCoM@pZ7hOuVP32M16f3%#piw2&()5@Zjf>os3$@ zkX%nz%i~)C5=bC2kq*8_J~$W@Ptsb=E3q8HGx;Acf;B_Undi*3KP>ItAgAbFTn0Fs zr$F4`m-3f_pW=bTuAnxWBANHJBBmb<*#xY17HkyV#@Ua(Ci%Me7I=czno3_Vw52#P zPxA5##9l3-RcqgLPOh3&i1z|H!N(m##SoBD2h72B6=^^NLCh^^$qm6&u@?A9ZpPFj zkhyr+mFeGNj}imv0Uj^LoF4n;fYcjffT?MWwF$y)*;B{Wt>MuNxpmI;%16T*Z*YJEpRhDtt6E zeSxl6Qx}tw6@?WD4-{t1gIj^Mv_Vr5uYyps#vB^uq#zI!iY4e1O6;Kd6wHg}DJUu? zayaUH1D7$2NU6Vuoyiv%g_45dhB3t4!WZbOD+Yb=WRSImYv8}=o;mEK1iUchM8|Dy zXU7blz-4SXG1CgPZYo<7FD4+i62*+bm0KfNA1(nmFI%gxt9uEo1Z4sgI*@~ZxBb+N z#OUlnKf>(!q5qdJcOVkrM+Da82>2}Ho&v+01!Jj?@Ev@*E2v&TaBv7>Vq!X&Rsy9* zv@o16k(9`cUo#4&lQT=`bM*8$dKEP_H&FOV6!b+aSFW_Svf3jM^n>LYk4&V1S(-}` z{D5&O#(Usr<$7qVKO7wl1xQ)O6F|Hn2Ov3ctrc(?DPd!=2zYG7>_u{Jdj4V-m#M@t>k>EJn}~lMDuT-uLE+QbF7^-UXGwgC}=JzePeJ@k6bk6`2-ChOEPQsvr%) zHb(eIf_O?bB8;OJJ7OtFO+@s5Bpqg9tSacG5Ms!!Of1l#U{a9vYZyVGS_%XNW}q3f zTLRn`o0Ef(MnXc!{r}bo;`gvCqXe+*e+Z#JB^v%1PNcsBjTW)jOKG-25;M*`>B$C( z9D_tmjbRyqS+*X>)CabyKObzh{-dL0WWjA2zuFrJJ}@3H$OD55UjKVM`OCvJ&w#71 z_7!OeQ*31+EzlV$=fW@GcqXWbX<7|Sw?s`q#!;8znL>49FZaia}EH+b0x5f*_+LAxMvc;f=P3z^yn9oq_=!5+u{nGwU-> zq>q1#AU!UUT)U4ch~G2Wi$s0hDU;4b%w)|Jtc_HEiF|D?>nhDWx6#;(2762t(Mk_$ znK&hdft#k7rhvj^hnW^W`Dfk67J@q8nS7LiR{toTa!NGI6T<=ipzS_vvX!`wh!!kH zD{rQSQ9QN>k#?98&zO+`5R4`$O%!1cN>erzi|ErdP?VDwwqVA6uq9TuOg~wI0UI?o z!ND^v%rW00Cm|Qa<5-KCi*5@dyA=q=W(XN(%me`zNjeEeuu4T5n87iqgdTf9CHuoD zb0^K#kX4kzf;rzz4ne!$$;o51i()}w39=bdJ~F3~Ew;ubG0Dw{M$F;g$;)HRhIc|Z z!u#AJ4OuBV1mgZ6K^)(D{J#iGmLLay97Ycj?!?d1mH$MCpDsZI3{L)}iT@r=yjSgb zFok^bv#YHWt=`9}6?aHvoYPK$jF6Y~CH+a~(r;Fp82xTA_?-UKSkrG`BVqdU>7h@G z_~a3vLgQ18_>?R^RSguxPv!FyB=`ggK0$*2(U3rFjVo{SBVO5IY5~-@?p90Qy#MI` E0s&?_rT_o{ literal 15857 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 aV4TJMz1o9K6**MJsVZx1PugaF{Qm%jFV&O) diff --git a/tests/src/end-to-end/y-prosemirror/__screenshots__/propChanges.test.tsx/prop-change-image-source-chromium-linux.png b/tests/src/end-to-end/y-prosemirror/__screenshots__/propChanges.test.tsx/prop-change-image-source-chromium-linux.png index 33ea5ad713724e74586a4fd86ec3156c6ba14b06..7dc690ad9ea8b50044752f086b2f357a3a753dde 100644 GIT binary patch literal 11451 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 literal 11401 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 Q#rT|ptcpy&l;P|D1F)l4D*ylh diff --git a/tests/src/end-to-end/y-prosemirror/__screenshots__/propChanges.test.tsx/prop-change-image-source-firefox-linux.png b/tests/src/end-to-end/y-prosemirror/__screenshots__/propChanges.test.tsx/prop-change-image-source-firefox-linux.png index 85c0a441c1e814219925f8d0cff724cce9d40b16..57717574e29812eab9cd94abcc3ae1f29c115a2b 100644 GIT binary patch literal 12027 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 literal 12470 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 diff --git a/tests/src/end-to-end/y-prosemirror/__screenshots__/propChanges.test.tsx/prop-change-image-source-webkit-linux.png b/tests/src/end-to-end/y-prosemirror/__screenshots__/propChanges.test.tsx/prop-change-image-source-webkit-linux.png index c85c2e84719c6d5bebae5cf62908413b24dc63ff..18dfb205e8c88b5946c524c3e02c72a66c13ba89 100644 GIT binary patch literal 12461 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 literal 12851 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 diff --git a/tests/src/end-to-end/y-prosemirror/__screenshots__/propChanges.test.tsx/prop-change-image-width-chromium-linux.png b/tests/src/end-to-end/y-prosemirror/__screenshots__/propChanges.test.tsx/prop-change-image-width-chromium-linux.png index 7a85f711342a6a29aeb7e072a659b6e9e9c13233..71dbb3fe3343658c4373c7f34a638c42aa522b37 100644 GIT binary patch literal 13014 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 literal 12922 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 diff --git a/tests/src/end-to-end/y-prosemirror/__screenshots__/propChanges.test.tsx/prop-change-image-width-webkit-linux.png b/tests/src/end-to-end/y-prosemirror/__screenshots__/propChanges.test.tsx/prop-change-image-width-webkit-linux.png index 29be5e0a4a868980ccaea513eada9894b724cc6b..b6c5e220929f0988c964ece51652f8d1847c8937 100644 GIT binary patch literal 13853 zcmeHucUY6z_HNXfqmH8-$AS$Q0S60$5CxHTtcWO#Vnn2=U>KF6M2MlqGKvaH6Cni1 z*g&F!5-Fht3pIg^A|j9gB1r@xKq4iS{@G=lQHB zlE5%6Y2z5Fu4C%dAH1$#C^&KHiu$jsW}Nu$`avW2j<9R{-aa^f?`p-pEm!ky=kA@c zslw&KorW13R_<6-_V$lQPk)>%>YjZe=g`0f-E9Y*kC=tDs+7hgVqK4xX!VFNEG=VH zH4`>2`~5on8@F391O4*qKln?n#J*r$#+6^x8vofYPZ-o_L`_+mPJ<_zs z+ovlURihr>Ex!4+afV@CcFs?aZXaq5=@Yp56%SO5PqeARg5DpAun-$XS6g-oNc`II z@z9|be~y6QSMcF-XqTNw%|stn)$_DcbIQ5e+ED55A8(i&=%t-KdaEU<#aI3%!`f0W z^~}BlS+0w5=NO`bk2kni_0p2;3`^EW2fw|W(>sv#`Wcz8aK7ue{QNa9QxVJkjgV=Y6m48Y5CF7%DT5@eXy;V1tvlW1}0{t#qW^P~6g{ z3|gqJ&dNNQU1Fl{dTO(YpI{O0Fqc(Oki<3QSa>L9iSl^HxGw$B!Gl%h>K-X4v)I3I z!zAWy)yW%9<~(^4(-$f+SBy4t(ioy=_4eF2eBDMJJHNuN^heIDUrxSzR9$g>Dap=& z-5D3E;Cj^YwyV3{1OtuHod0FT{7&Y>tQvLBNV#j+V1u)?+95n(&c^n0ycDWZ;mjiL zdH2XUe#6OkUbV>^*zFf)<#7+U{y%rzVo_EYLTq< zr`X-t*l`7ibGfVKYOTxiOkhns*y_hxWw8TPnDZe<6o*-TR3@y1rpOn zUg?S7Iy%%c2@hq7R7E1Cp5A(MtD5C{$vl81g!EL!=kwNVIArvd)1=2V)aUzuc#&#@ZNcHruB= z`D7MmfVQ!cHm*yn?AEd~e{QC<%F`14!{v1Lmp67Sh-fhieH2h?;r$nBX0j?Bc?NYf zgQfsWr{))n)|w3qNO*ijRka=?1^E?Cao2kEZt<9~ukN~OYZ5IrsCkuM%Bd{}vfWcT z3Oc9yLxfh^!|c*ccn3HRsXH@+2oX2sTv1JxTlI>@&VOy3CT=(z1wkE5JqZ(FOsZpx7 z%I>I_tXy;8QB{Q1m)j|)Ud&WLs7HQ-+J$ zQdNT-rPD2a0|TO1M@zA@&Pg~j}{bT_hagD|zFqt~Ar;y%c95+N@w z4E!AM<+Y9XV0Qxzc@wE-RYqsAypFrT$u*XSRBG0KZkp_EhSdg#voGe!KG|4rqBnzS z@NybI^p`~U;Nxk^FBy_chM`B&WH&RsAZyxaQoQmYSy_O2>!d|}X~P`V1ZAwHElr_N z2$F3qI_4@^)?+MQ@o-6BE$C6Dr=_T}kyY7P8MmpF!z86bBFW(zaHmXP7DF!i?A8SK zlRb&B)IZsnRjVB9V?-L3ZUnP5q9?t@8hvMNf|`yc`jia5qlobg8jEjbj^Oj%W0%Cc z(N>!tI%U`Ko=?|GakMvEAxR~>qnv{)b30;1K99^t>A$Fzved6&Ib*z2PySpje4T$t zOH07py*9`CN`~vS#-D3-Hu1xQOnlzQtgwavmoMcEENu!K7GmnU>1bbVHP#c4xPn>F zlb5o=Y^o(<0>={FZe5(SX(jhDBq?0k7XpD;v8d_oA|1TVveVnbCFF2Dzz}&3a3m30 zKU_6TwSIWuag7t?DBdzkXKd43h<{dR|4TJKUxr{n!k~uFG3$&$Sr@R^jaawo^P_QT zpVH4S8UZX#0WZhVbfPVc>4%DfeCJq?_lLsqczbO$60DUUt?L{aqi-=c*U=ofB8Wpr zrij*f&>rWvZqfp$HI^r2hps@Lk7p=&KHc39v+E%L#ksH=-9wI5+ne{^q*)FN@Obmy zXO2X~#(KbCC}q<$V^Cf~9#Lp+7Y=E_JG*44hBr{D#mKM_tuhlQc^b?AjIdho%?Jx3 z-ms8W`JCu&&PDz;6-U0L5PXl~)uMZEbPaEL#IiV)O0neHf7!INY?>Oc!O0^P;R>a> zKJAtUSzrWI?I02HMAzW1`(~dXv9Q2qj0q$%V0UKde*(q_D!s*~;U7&gH)n?kKf6!C zrTf!;^Qw7>rRkIF_n3+R(jAEI^5n+ORSuM0N|~X`I3p!sm;I)$dnuu^YDJH?H68ea zml$mD8}c>%d=Rbk)jS6t?}oWFi6MH#s;l9lq|2(?w8pLu{6TQ`<8^0tz%jqbkhZbb zrr^(y@vI{+FY`hHC2NsJMMLjBqXppbd@^TDh(a2oz$%U(KEzV+yshF9GegOcm5H3# z$t{r3I{Gf32&}G_cX{^G9LTZ~fY-AoxhPZSE%Nko^o-Ka2Tlh(OgCa#z)oPlG$+nz zgJRG_HRyWw!zF}9c=@vo%eBaQtphj6ohW+p+QP@iyBNyjX`^p5#BP1TPDHEG*U?18 zk^(|{p4#Brvy2%2!><0i|p5%@^hbh-yLs3+m>j_5c3p;8Sh1oTsKdsThcA9R#-)?r^i_=${cpv5afT zN6}6LM%YPj8z-j8QzV_{Z3=s3r-M=#S&zgss_aBKhKLzT%$VXzhFi@u7~#PS7cRuM z7MJve`J)^YI`UGh&i6FR5)Ic8ip&^D#9s5Jp$sN$vd z_)Gn!kiHUJc`?1%7@f!i>1_V-$uV(*Vr=;=BPT-J!&hAdwLV7o2)IJCnIA z@a^6vsKi*ogWawaQG%JAhbQ&sHj173!3VNRhMKW@0*NDndMOEka+kFD%YDOI_0s-J zJRdM41>htRWmhgjEYBNezo>hJo<^}F-jGe%BNmGToC@0}q=_^XlGY>7)pEed#j1%u zJ`a2g92C`7P*oCvJMu57yC{MpYQ9Ru}@6oQm7s2IV&cg?cu1;xh?3<&h)HNhFe@Y`Rqp6gY->gzG3b z6%Ri4uXSk~eaBlC{OL9Y>T5=Cew!8g+Fcfx*qNIh=1bHZdJ-W*AqI_sTTw;AJX7;A0}fNIHF zEwp`_9QL;|mlk+x!V$g2qo1?+2!ZwW^}X7{hHHV+<_J)^V@OqS+2C9ZMCYgAOsrMF zQ&Uil8zNz?AQqr&tu~tNm(ouoy3iU5yS~(2|T#ktm%)ZNVqoYm( zu-_6^=EJPQ)otTqQ!v0-Clrk2TScGlM56N_Lqec>ho)!QWlN*ex#_48@W>_K099G6 zOs+wZKB_}e2gfJ3;efLgQlfh)G%mbRB1Z79ujo+cBmt}eJB+SErJT_{c0$Z)I=DCLdUTTeKq0lD!Oqf)c6 zbSSrnElG3EJwYIrf{G-l69Fx%b|eoQ4wBR2S0p+e9pZ|4rmug93v;z;>se2%0z!#? z47lm|kiRMjYX|(Rw!X(ncQvRSaJcq4@1Gpmin1vnnt>u4>LhXaaFGWh_$j9=79)g_ zlc~dG%A5GK`M8nobTu4Ku-U~om!JeoVc8xltE&+|;EY6as^ZhW+{2X#k67Vwr}T=U zUa5QNG0{B^JiG>|A?cfkIHDSs8ww&AJOLki1c;A2<*;Z9H2abY=EA?vU0wQr^^3yi zL-=TkmZ;gTG-0;2(l+?%G{?Pn1G2{i=EK6zx0`|!2~*nB2I~7JRyMlJ9{Y?8IJ}9} zz)8b5tR61pmyp^@G?O2bofqWomN#8^T+}HGop>vs>Nq6ia4bTss4AcQM$IYh(p+gA zS3c;-pM~QrD;*n7^yW+Y7`;QyIzE&gd54`Cq|Jv(rv{T}O)C@jb(0Kc;5e>X?xZ8{ zjcdJU1=RN>~L6y=v5eWK&voL^ONTCis6Ndx@S@L~g;V8X9ZdRcdkF`iQpvmlJL zV-rqL;0+6)((Rc{)hY&!_cWDx2?`J2)+1;#zNg zroPX?A8};P^`$1ikk%NJ+UV324byRwIAl32meo8ug&kf#)U|)1iT>ra_5bnK>VL3n z``@MiqfPPus`tO@{eQi8sg0mM4G*X5zpMIGUN&E_KHu2(djNDVE0-q=TC#W!{ya{> z5kI?vDVy$BDz(5xbo&3*zb%v_BZrZQ`G6Ydw`9SP2Fgqciu1(#nNYC;mG z!e;P~v~Kse_udHEIuGSm>P6%tzx}+cj><{nSe|r_SJc+%E zCnV6AyI@1uFN^utj{Hy)M{GM9+ApK1Uf3l?z0;2s*Sngh7NP)}{ zo~Q5;Lr132T$oy3UVes*E`neQAI`)Oy9kxB_-`G0mwnh9enqjhzaquke-#$qfkLI$ zq@`1u2jx4q1QN%GSu_oH5SYlDq5{dF^Fs5;$jHgVL4Q{+m$UWIsoF79Gv51|)DKzH>l3|B)E~Yt?s=xJF`q%d0 zJgdNG;7~{%urO#Ao!E~ayY?TGOJlN#)82uwnBCypvR>1i#b^~wUbK-ol(SsGu*?@JRT}<;(a|cS|j!J>+R~tu*x2F$jq7O!FuqyfAb@i zzm?0CZ%)9*yF&}pTdW2RZaEz;C)hfZjx`6QJXIOxGo{d+-Yp$B{xm83KUJ}~8-0SQ zqR^c4BlZ^ZX6(fl2%ZKZy9Dc9p=&iMD!P?GTuog3O9F3f>V5z{$~kPyLUW{zRQwCy zp%?0<>pY`e1FBazV`aLQ@`F|Y^wqG-P>t6}3-By1zpaW02ZNx5*d01M_|PL26@-Ys zVx1|}?~6lsN+Tbm`Dr0i8V$82oLoYa;!Y6LW1*eiq@@L{_Y zujLnyTJVY%&P0n~;bi2ZPa9@Iq2?OcKwz&$cg%>IWB6nx|8T&v_qf9>c)g!{(hE;O zVViT0DdYZu{)1pmV5B4X2v9P)+R)ObEd)aN;{BKy=H6a-1Z)IR;&uWcGOj?r!(=NV z0m2C2YCi!2jpXpvx0zUI0vJuM8l>ZL4v^v);KKE#rsA|G5Riac51IN-lOZUqB4VQK zBYa(n1@{*MA&PVC{t*HlUT06@WefNU+5iI|z?~*2LQwA;B152oF4R%K1MXpW!uDTf zgROXzr*JW0teyM<3sDe6aHf6_y0wL}(%9OX;qg0KCsbaGK7*zOG&PJXCf{)W1{eyT zib=c$^kc%eWbde0EQ0+?6=Ku~MPY;xNLr_{7dsLFCbm%3A{|14(GE;MyC$_5CT4;D zP~f19fDjy{M#8~8UmONufQ|4K3M9$9{RF@2MLM2QQAS8AKv0Ch-;N1JIoCq8qO+O1 zQ2LqFCiLL|ug$ed`EiC!KTDW{aD==J59J2=c0!*+m z62xf7S8;sz5MtxfxZG?%`7K)rsS{Dar%wXntA|01Ov6?JjAfVn(?Pyj4^;Y9 zBSa<)Dd5U{@r+tmOfzg~m>`3pRD#kRfEmdJWP!Bw)lx{s=%m=MV54KUnDIswU_2%m z51vDr6iY@JGGj;z%7(~H5TS^|JouYUVEc3Cepd9SlZHaM6H^X6_D=~=V#g#vFJpcI zX8RVXg^=bZJqD>E05UlwX+TBuJLr)~`+{2mi-3PH#np!9;gI6KQiOkXIkbWe0Sm~< zSH6a2k-}&BH@8F%1wI2QCX*?cq%bay2o8=penkr!f8jj{NAL-tC5{C4210^46B7+- zTLaHn3wi_PW-@DplPpSLCPxT^)TA+K6StFAb-$3v{{)wjS^)GPW);QgvKr`v$xem_S1+w_(U7 z0_(((tHOp|HE`iIBp)ePo53a*%Pgu7k~s+AbF?*Za) zo3i#y+@+NB%N=PYR*{BCVWp8h@*fDNb*q<<_YoGYqC zdlH1HB8&k89N_3sY5`h&O=LOu08gfb4~VDX%J>ba>H&4%tUb5N$N1?^f6^n%h#yIT_&F`UMvFV9J?uGu=8c)&=Ou3n z_a3{T_QShpE=h9^c$G(FuIyc65;OBOY1NjDRTuK|@8F%Ah$UONRVU)dtz;pms7F=D zmn0UEe66z+w=&rG4SbKYp6Kc?bObq8+mh{cJl-9E^R*gFoUGSEF=| zvl`>w|+PI`>UE{f%4H9*rHE`y`$qiVo=zjJfFqAy}ck(O!}(h$=Wk*L8QgDUb;vA+Vi5WIPP~{-R1DrQ6lkj zUY?2eRM!1Pix(d`bt)!!6fX2%m&31blEOpzspTC|Cjz~OUJ(CE3g0^G&M|N0Ol$^3D@Y)XZ!0!2t^!0mU zL9`>p>#>K?b1ECq%6{8ByMBt>SwElkur}uy_qS(aF)_;&I|B%mlybBCsl|kD%=$e*sZDCX$kq zJ36c5dAR|iU7O6!Gjl&yM#rbGnq?dJJ4_rpqWct&gY1A6Z~=NJ?S_VV1^g7eg*k^; zaG|iFy9?gky=TwUZ*PZMIe2^PMV|if;(Pm)jprx&KsY45_Eg(#-w_Xln0-~{-W8al z`YJm+btfh!cnyt>m1SkP+%FxGhG@*=O8HrsTY&3|kO#ReZ@vshcIf*uUrB{UnHl+Q z;q)6f=KSq%e|xa$Z2!+-xAfK_snCw?nx35|cF4w^|hNOuaqHf%Xk&i~>QCHP+G5fwlL+RWEq}ZgPG# zw4Ug4piB%lQsCZw1O_4b3b}*=qdvd+`rf~_W5rlx9i3cv=hIhqzbtr*_r*A}?e!tm-#80xKrvDXmIkRBrgo1g3m28pW@ zx$F03?!U8t_3NEsVPS8Rb#;xjFn`dR^atymcMi0MkNIxev}w_zML*ZSdslJ4u(0qf z+~ij;vkbmDFmU=r*O#t(7&4�XAlexQX#*RHa2rzP|*<(>4vaQLS@jHEXg@f#XR_ zhTU}sSd57%7!W>pXm!G_PC2C%u4IkYuYV=7fEh0VjBkAz8rrwUkTY(~85bE=@3yy( zqrk{8Eh*_|+n+Qkopa$VTOaT2fY!kx8XC0lN~Y7<_<%kI9sz3kyd#;IzNdrXIh*bY~_>q)lS z+EpMI*pUX^r+5fE*8aFFGvL0K`Xp>D2>Fgo#BF+Zd|n%jXH<>DNY#A~hXL9rsV0UU z?IP5)(lat5b~`wzS;LswSr}`85pVN?g#x%3EFNk;xy&jwi3zb2Fx2A=*Oz@yiM2~k ztkND4_Jvo@bFg@Rb)MdDettxLn&te+?NFr>hkBZ}t|hEqP*GWV{22uD(}VY3gLvgf zV}r2_F&O_Xu_$(STr|+$hzyYD`;kY(dj<8i?je!zLZNURrqVM&P#6~Khc1Yt9SrHs zsl1_a7d~UcC2WL_&5cu)8st+OmM&YSs}1)41HR#Xco~ri4yz8sFuHOWNDP1*)z>X8 zc8`nUg8139XHUp|?tUeM2aGK(EnSPx#%81iU$a&z_;0sB*t;6k|8{B1`7O8qad*KF z-~VuFDhiDxXU|Sd@oVB4mpe*+e$QP+@C_~T$%1hisH`(j(`0?YOCRPMIl)yxTcouN6 z>7^Mya^%GAhYurb>87kjFJHby&U=4}rX~?$r~Eyeq^F^wq2JKn{&ReMynY4v3vuZA zEljK3>G$tn0-Sgw6z(CyP*_hJhXL8078^SkfGP73C){#S23P90U_v3R{l;GgtBtFc`Q$UKv8XEVD zis%m;U?B@p8`cdbAON&w7)C+~mi?mj9P*XnzX4fVcl ze*Yd>R^RKl->w{5x^$`M*|SNPew;n~2vN%iL$gOmnwy(fE{xR$SJ#LB4=>M<$&RzYJ-rHxikx@a+0Dv51y~)+ zmpDg(I$#{>AQSzqhBIf*tYcigIuj-0s;U|0K|Me3aRdyi-1mQq+qw9n!b$A83}bjJ zT=INww<0Cy`7~|Oc?>ps{d(_08O%2CwSyVuN~D;*FdlD$ewK9IPjo+O^vf^5#B5u8 zlY6X2WPJU=%K0nj|FHfLB&=Uo9ws{FFGEBkXgg4$=}pfsPB+3ArA_jaV(kkG$oE92 zpXMexf7Hb|3w5pbI($*em7nJUbDfHRnEf3vNBo%D+~=V{WXpO^48lz1w~TPK@{&(JmJ} zyW1B=deL9SNbiRB=hVR<7`T#UI)q*OT+ZYD2)>J!)P8Vn2JcaLz$B~M{#{(vw(k&| z-dTS$GjmmQOUu<6yw+@B9&)}lA0~42>{BC9CHD0BJf){dlqrTCU5l>e`|mcW?VUoGWb7D&KF%_ClYp-@`sTpxswG zX7H774~2(8zZcC<`@Da0eg_-oi_p*0`?Rz);)xU2fQ)1E!^>0gC!;V+m}CQD5aw=% zJ#=j^=n}oX6)=B~PRqTuRwt1QB!0RrBn(jd%P(Kn+s4HJjorL0=ITEMn+$R8wHdl| z=ORtS>F(6F{Rt_xzP{eI;M5dEF@Vs~+?K*&;&i>@beGSA-L}N(Zu`zQ?(gstVea$$ d$iAu6X@uGZ?3jm}JyF-jcDwzytSyHx{4dcDcozTw literal 14310 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

    %w&3?!1=~YRhVhShfED;BSph-!%lnS ztoyc_Z_bE9GfzD}WQ0YCnfism^1@Mlbg#k+$0z464|SB1z|3_*CI?T#SmA|>7e_%! zSF5Uwb$vSPz=tihD&aa>i4dL+&uGJCd}R<|1B_+V6nle7UjLoJ$bwIF4#p_mIXgA{ z!MnXEl66(i7+v}ww6c;b9)s)e*PWfLs<7E7;Q5GQQvaKcnZcibf+0%A5n1pmu(7+V zzg-HRbo2P;A2$E+?b}p!K<=AySd4yfcx7uUFqpvHrKg8CHg1|6>Oj*QwGW)igJ4oX z1f#Qu3zUpQQ&^nJklZ~KvEf68c#m(D2(q8^i(8|BzHLrVU%=EzHN*@jU0;s5QE^ex zBM==-1RbZrFi+PA3(vkqp6-dr{jI6Vvc$XX+0WlCTjn?Teuuo*nKReH{pC-!K5zoy zqT4QBycqf!kG{Wp^=e9+j01+pd1*YJyJg0n12#4aQ~(mc?&?LV|1x#G77?NN-B60+8P6ZW4kS@2W?~pq2lT1UH zZ0iJJ{t$KGb8dF_Z!jVr5A#crw9!#Ngr_+ShKlK67bEK>?bsIZw8!5k9{$b#)2C0r z+iDhmucf8+_UAiC)@QL#ySGMQhJ0KvP50cX<{S%0%atqk=71k%W-71Y!gTBg;eEn< zBnD}k=680Koa+s?)|Ah^4}YOhNRfoYRNp4|5SS+t z!BoIA7y~*4E&(sVWY_5(0O+7wlP!sd0s7bEmX<2u%ftJ&LvlgCrl_Lg(Nz_8Y|Cme z*jVG4&1?01`d}Dp%gqs(DUR1)&|za^TVl`y^l2ST7TCFUOcBQG!NOYmTMK;(Ga{^`@^ef##YJkFoL zWxp0e2&h-|-SXw9+*Q0WD9%4=@8Iy0d=#q%@T{P~g^}qS+Pjv;hXG+j>cl{+wJgH2 z7m=$5IhAQ!`-g{lb#aKIqq0D*>(i%CQ>;iNeDQf01C3+z?XI7CTsJc@V3+SQ_fY}t z2cHa@i%}sojf`wJ2pm?ou$~lju@{2HnW9i*tH-wYUIQk-JhcK}Uc!|M%&z$CYKKyv zY>rRGs7Z;>hr?4phF8W&2|5Cxlb;GOL+PM8% zx0!CBjRoi0X@BR)??*O6Dp`UVL;!KcjB=xw>8#!>ZOczRwWB#C~~ zB+)49YZmK)x+KVWyEItw<#~)Hply7b z&Hn8U`@dgt&+~>l>%nS-RW}2eTBVPU!4vAdK$`3k4=f?Bfb7{b^;C&1;L#mUOTOK6 z7_4`rL2Fj~h%XGFX`nxOu-yVi8@C@e+`nYSULs276Qn?~8B6dXgI}>XH3vrQ-n6us z>_0IXo_Kg;CPhpZ!&p5D61X=zvyTIn(=RlPYv4}=6y0axFL$b;pUZ@inHu;@klbw0 z0wyFxVgm%$DD`;t4XW7A=)6Q}@vs^wfJ_{ozuC!slWhj`NCrhEC2t^cZkwIxk)x#C zT&q{;*K4wd3uB0U_^Op(NW&rHz5cc86>Kppe}^=YP6xy|b^w^#e@p$Fct}rr0PXdf zo10-YDB5vb1XXKUJTz5L1qY|*=Kcf}nXW`ztXd%B@7lrU2b8a&{nbrx?T=SS^#dIE zBxqE1Ay3Db8w2U;rgiG3KW|b!6#pyAh@~vjRIfmF;C|ddvS|9wt$p9?X#D{lBAn>~ M%l!|2K5^y00k;e@&Hw-a diff --git a/tests/src/unit/core/clipboard/copy/__snapshots__/text/html/basicBlocks.html b/tests/src/unit/core/clipboard/copy/__snapshots__/text/html/basicBlocks.html index b59aa81d46..0d6a42d952 100644 --- a/tests/src/unit/core/clipboard/copy/__snapshots__/text/html/basicBlocks.html +++ b/tests/src/unit/core/clipboard/copy/__snapshots__/text/html/basicBlocks.html @@ -22,7 +22,7 @@

    Heading 1

    -  console.log("Hello World");
    +  console.log("Hello World");
     
    diff --git a/tests/src/unit/core/clipboard/copy/__snapshots__/text/plain/basicBlocks.md b/tests/src/unit/core/clipboard/copy/__snapshots__/text/plain/basicBlocks.md index 59e94f2356..378193ad13 100644 --- a/tests/src/unit/core/clipboard/copy/__snapshots__/text/plain/basicBlocks.md +++ b/tests/src/unit/core/clipboard/copy/__snapshots__/text/plain/basicBlocks.md @@ -8,7 +8,7 @@ Paragraph 1 * [ ] Check List Item 1 * Toggle List Item 1 -```text +```javascript console.log("Hello World"); ``` diff --git a/tests/src/unit/core/createTestEditor.ts b/tests/src/unit/core/createTestEditor.ts index aa804ffdd6..26c9324f91 100644 --- a/tests/src/unit/core/createTestEditor.ts +++ b/tests/src/unit/core/createTestEditor.ts @@ -26,11 +26,16 @@ export const createTestEditor = < schema: schema.extend({ blockSpecs: { codeBlock: createCodeBlockSpec({ + defaultLanguage: "javascript", supportedLanguages: { javascript: { name: "JavaScript", aliases: ["js"], }, + typescript: { + name: "TypeScript", + aliases: ["ts"], + }, python: { name: "Python", aliases: ["py"], diff --git a/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/codeBlock/contains-newlines.html b/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/codeBlock/contains-newlines.html index bf789c1a7d..553b646dbc 100644 --- a/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/codeBlock/contains-newlines.html +++ b/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/codeBlock/contains-newlines.html @@ -1,14 +1,11 @@
    -
    +
    diff --git a/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/codeBlock/defaultLanguage.html b/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/codeBlock/defaultLanguage.html index 861d648003..b5b31e8062 100644 --- a/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/codeBlock/defaultLanguage.html +++ b/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/codeBlock/defaultLanguage.html @@ -5,6 +5,7 @@
    diff --git a/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/codeBlock/empty.html b/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/codeBlock/empty.html index ce97dbaaac..8aac992379 100644 --- a/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/codeBlock/empty.html +++ b/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/codeBlock/empty.html @@ -5,6 +5,7 @@
    diff --git a/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/codeBlock/python.html b/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/codeBlock/python.html index 1223a7d041..0d65939e44 100644 --- a/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/codeBlock/python.html +++ b/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/codeBlock/python.html @@ -9,6 +9,7 @@
    diff --git a/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/complex/document.html b/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/complex/document.html index 4376ebf7f1..b87505e81f 100644 --- a/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/complex/document.html +++ b/tests/src/unit/core/formatConversion/export/__snapshots__/blocknoteHTML/complex/document.html @@ -70,14 +70,11 @@

    Section 1

    -
    +
    diff --git a/tests/src/unit/core/formatConversion/export/__snapshots__/html/codeBlock/contains-newlines.html b/tests/src/unit/core/formatConversion/export/__snapshots__/html/codeBlock/contains-newlines.html index a7db81b06b..ea6a3e8a21 100644 --- a/tests/src/unit/core/formatConversion/export/__snapshots__/html/codeBlock/contains-newlines.html +++ b/tests/src/unit/core/formatConversion/export/__snapshots__/html/codeBlock/contains-newlines.html @@ -1,4 +1,4 @@ -
    +
       const hello = 'world';
     console.log(hello);
     
    diff --git a/tests/src/unit/core/formatConversion/export/__snapshots__/html/codeBlock/defaultLanguage.html b/tests/src/unit/core/formatConversion/export/__snapshots__/html/codeBlock/defaultLanguage.html
    index c5939c1b5e..d9a00bc084 100644
    --- a/tests/src/unit/core/formatConversion/export/__snapshots__/html/codeBlock/defaultLanguage.html
    +++ b/tests/src/unit/core/formatConversion/export/__snapshots__/html/codeBlock/defaultLanguage.html
    @@ -1,3 +1,3 @@
     
    -  console.log('Hello, world!');
    +  console.log('Hello, world!');
     
    \ No newline at end of file diff --git a/tests/src/unit/core/formatConversion/export/__snapshots__/html/codeBlock/empty.html b/tests/src/unit/core/formatConversion/export/__snapshots__/html/codeBlock/empty.html index 9bbe62c374..f2e39bcbc7 100644 --- a/tests/src/unit/core/formatConversion/export/__snapshots__/html/codeBlock/empty.html +++ b/tests/src/unit/core/formatConversion/export/__snapshots__/html/codeBlock/empty.html @@ -1,3 +1,3 @@
    -  
    +  
     
    \ No newline at end of file diff --git a/tests/src/unit/core/formatConversion/export/__snapshots__/html/complex/document.html b/tests/src/unit/core/formatConversion/export/__snapshots__/html/complex/document.html index 421d420c08..47caad18e7 100644 --- a/tests/src/unit/core/formatConversion/export/__snapshots__/html/complex/document.html +++ b/tests/src/unit/core/formatConversion/export/__snapshots__/html/complex/document.html @@ -25,6 +25,6 @@

    Section 1


    A notable quote
    -
    +
       const x = 42;
     
    \ No newline at end of file diff --git a/tests/src/unit/core/formatConversion/export/__snapshots__/markdown/codeBlock/defaultLanguage.md b/tests/src/unit/core/formatConversion/export/__snapshots__/markdown/codeBlock/defaultLanguage.md index f5b118ae95..eca2b94e33 100644 --- a/tests/src/unit/core/formatConversion/export/__snapshots__/markdown/codeBlock/defaultLanguage.md +++ b/tests/src/unit/core/formatConversion/export/__snapshots__/markdown/codeBlock/defaultLanguage.md @@ -1,3 +1,3 @@ -```text +```javascript console.log('Hello, world!'); ``` diff --git a/tests/src/unit/core/formatConversion/export/__snapshots__/markdown/codeBlock/empty.md b/tests/src/unit/core/formatConversion/export/__snapshots__/markdown/codeBlock/empty.md index b5c9416ec5..04144d877f 100644 --- a/tests/src/unit/core/formatConversion/export/__snapshots__/markdown/codeBlock/empty.md +++ b/tests/src/unit/core/formatConversion/export/__snapshots__/markdown/codeBlock/empty.md @@ -1,2 +1,2 @@ -```text +```javascript ``` diff --git a/tests/src/unit/core/formatConversion/export/__snapshots__/nodes/codeBlock/defaultLanguage.json b/tests/src/unit/core/formatConversion/export/__snapshots__/nodes/codeBlock/defaultLanguage.json index e25d8ad37a..cb4329b686 100644 --- a/tests/src/unit/core/formatConversion/export/__snapshots__/nodes/codeBlock/defaultLanguage.json +++ b/tests/src/unit/core/formatConversion/export/__snapshots__/nodes/codeBlock/defaultLanguage.json @@ -6,7 +6,7 @@ "content": [ { "attrs": { - "language": "text", + "language": "javascript", }, "content": [ { diff --git a/tests/src/unit/core/formatConversion/export/__snapshots__/nodes/codeBlock/empty.json b/tests/src/unit/core/formatConversion/export/__snapshots__/nodes/codeBlock/empty.json index fc526a8406..a278421822 100644 --- a/tests/src/unit/core/formatConversion/export/__snapshots__/nodes/codeBlock/empty.json +++ b/tests/src/unit/core/formatConversion/export/__snapshots__/nodes/codeBlock/empty.json @@ -6,7 +6,7 @@ "content": [ { "attrs": { - "language": "text", + "language": "javascript", }, "type": "codeBlock", }, diff --git a/tests/src/unit/core/formatConversion/exportParseEquality/__snapshots__/markdown/markdown/specialCharEscaping.json b/tests/src/unit/core/formatConversion/exportParseEquality/__snapshots__/markdown/markdown/specialCharEscaping.json index 0ede1c2000..aae0b9afdc 100644 --- a/tests/src/unit/core/formatConversion/exportParseEquality/__snapshots__/markdown/markdown/specialCharEscaping.json +++ b/tests/src/unit/core/formatConversion/exportParseEquality/__snapshots__/markdown/markdown/specialCharEscaping.json @@ -117,7 +117,7 @@ const y = '```triple backticks```';", ], "id": "5", "props": { - "language": "text", + "language": "javascript", }, "type": "codeBlock", }, diff --git a/tests/src/unit/core/formatConversion/parse/__snapshots__/html/codeBlocks.json b/tests/src/unit/core/formatConversion/parse/__snapshots__/html/codeBlocks.json index f9bd791440..f4a808da84 100644 --- a/tests/src/unit/core/formatConversion/parse/__snapshots__/html/codeBlocks.json +++ b/tests/src/unit/core/formatConversion/parse/__snapshots__/html/codeBlocks.json @@ -10,7 +10,7 @@ ], "id": "1", "props": { - "language": "text", + "language": "javascript", }, "type": "codeBlock", }, diff --git a/tests/src/unit/core/formatConversion/parse/__snapshots__/html/codeBlocksMultiLine.json b/tests/src/unit/core/formatConversion/parse/__snapshots__/html/codeBlocksMultiLine.json index 6cb94084f1..4d8c20bb1a 100644 --- a/tests/src/unit/core/formatConversion/parse/__snapshots__/html/codeBlocksMultiLine.json +++ b/tests/src/unit/core/formatConversion/parse/__snapshots__/html/codeBlocksMultiLine.json @@ -12,7 +12,7 @@ console.log("Third Line")", ], "id": "1", "props": { - "language": "text", + "language": "javascript", }, "type": "codeBlock", }, diff --git a/tests/src/unit/core/formatConversion/parse/__snapshots__/html/codeBlocksNestedHTML.json b/tests/src/unit/core/formatConversion/parse/__snapshots__/html/codeBlocksNestedHTML.json index e6480d3f5b..8a025ee12a 100644 --- a/tests/src/unit/core/formatConversion/parse/__snapshots__/html/codeBlocksNestedHTML.json +++ b/tests/src/unit/core/formatConversion/parse/__snapshots__/html/codeBlocksNestedHTML.json @@ -27,7 +27,7 @@ line two", ], "id": "2", "props": { - "language": "text", + "language": "javascript", }, "type": "codeBlock", }, diff --git a/tests/src/unit/core/formatConversion/parse/__snapshots__/markdown/codeBlockBasic.json b/tests/src/unit/core/formatConversion/parse/__snapshots__/markdown/codeBlockBasic.json index cf59869a6f..fc0a925232 100644 --- a/tests/src/unit/core/formatConversion/parse/__snapshots__/markdown/codeBlockBasic.json +++ b/tests/src/unit/core/formatConversion/parse/__snapshots__/markdown/codeBlockBasic.json @@ -10,7 +10,7 @@ ], "id": "1", "props": { - "language": "text", + "language": "javascript", }, "type": "codeBlock", }, diff --git a/tests/src/unit/core/formatConversion/parse/__snapshots__/markdown/codeBlockTildes.json b/tests/src/unit/core/formatConversion/parse/__snapshots__/markdown/codeBlockTildes.json index 1a656bd726..a3da1d66c6 100644 --- a/tests/src/unit/core/formatConversion/parse/__snapshots__/markdown/codeBlockTildes.json +++ b/tests/src/unit/core/formatConversion/parse/__snapshots__/markdown/codeBlockTildes.json @@ -10,7 +10,7 @@ ], "id": "1", "props": { - "language": "text", + "language": "javascript", }, "type": "codeBlock", }, diff --git a/tests/src/unit/core/schema/__snapshots__/blocks.json b/tests/src/unit/core/schema/__snapshots__/blocks.json index f0c513b02f..ee48987244 100644 --- a/tests/src/unit/core/schema/__snapshots__/blocks.json +++ b/tests/src/unit/core/schema/__snapshots__/blocks.json @@ -121,19 +121,19 @@ "content": "plain", "propSchema": { "language": { - "default": "text", + "default": "javascript", }, }, "type": "codeBlock", }, "extensions": [ [Function], - [Function], ], "implementation": { "meta": { "code": true, "defining": true, + "highlight": [Function], "isolating": false, }, "node": null, diff --git a/tests/src/unit/core/schema/__snapshots__/inlinecontent.json b/tests/src/unit/core/schema/__snapshots__/inlinecontent.json index c682709782..6013f4791c 100644 --- a/tests/src/unit/core/schema/__snapshots__/inlinecontent.json +++ b/tests/src/unit/core/schema/__snapshots__/inlinecontent.json @@ -13,6 +13,7 @@ }, "type": "mention", }, + "extensions": undefined, "implementation": { "node": null, "parse": [Function], @@ -26,6 +27,7 @@ "propSchema": {}, "type": "tag", }, + "extensions": undefined, "implementation": { "node": null, "parse": [Function], diff --git a/tests/src/unit/react/clipboard/copy/copyTestInstances.ts b/tests/src/unit/react/clipboard/copy/copyTestInstances.ts new file mode 100644 index 0000000000..5e086202d8 --- /dev/null +++ b/tests/src/unit/react/clipboard/copy/copyTestInstances.ts @@ -0,0 +1,71 @@ +import { NodeSelection, TextSelection } from "@tiptap/pm/state"; + +import { CopyTestCase } from "../../../shared/clipboard/copy/copyTestCase.js"; +import { testCopyHTML } from "../../../shared/clipboard/copy/copyTestExecutors.js"; +import { getPosOfTextNode } from "../../../shared/testUtil.js"; +import { TestInstance } from "../../../types.js"; +import { + TestBlockSchema, + TestInlineContentSchema, + TestStyleSchema, +} from "../../testSchema.js"; + +export const copyTestInstancesHTML: TestInstance< + CopyTestCase, + TestBlockSchema, + TestInlineContentSchema, + TestStyleSchema +>[] = [ + { + testCase: { + name: "mathBlock", + document: [ + { + type: "mathBlock", + content: "a^2 + b^2 = c^2", + }, + ], + getCopySelection: (doc) => { + let startPos: number | undefined = undefined; + + doc.descendants((node, pos) => { + if (node.type.name === "mathBlock") { + startPos = pos; + } + }); + + if (startPos === undefined) { + throw new Error("Math node not found."); + } + + return NodeSelection.create(doc, startPos); + }, + }, + executeTest: testCopyHTML, + }, + { + testCase: { + name: "math", + document: [ + { + type: "paragraph", + content: [ + "The identity ", + { + type: "math", + content: "e^{i\\pi} + 1 = 0", + } as const, + " is elegant.", + ], + }, + ], + getCopySelection: (doc) => { + const startPos = getPosOfTextNode(doc, "The identity "); + const endPos = getPosOfTextNode(doc, " is elegant.", true); + + return TextSelection.create(doc, startPos, endPos); + }, + }, + executeTest: testCopyHTML, + }, +]; diff --git a/tests/src/unit/react/clipboard/copy/runTests.test.ts b/tests/src/unit/react/clipboard/copy/runTests.test.ts new file mode 100644 index 0000000000..f26b0e61e3 --- /dev/null +++ b/tests/src/unit/react/clipboard/copy/runTests.test.ts @@ -0,0 +1,15 @@ +import { describe, it } from "vite-plus/test"; + +import { setupTestEditor } from "../../setupTestEditor.js"; +import { testSchema } from "../../testSchema.js"; +import { copyTestInstancesHTML } from "./copyTestInstances.js"; + +describe("React copy tests (HTML)", () => { + const getEditor = setupTestEditor(testSchema); + + for (const { testCase, executeTest } of copyTestInstancesHTML) { + it(`${testCase.name}`, async () => { + await executeTest(getEditor(), testCase); + }); + } +}); diff --git a/tests/src/unit/react/clipboard/copyPasteEquality/copyPasteEqualityTestInstances.ts b/tests/src/unit/react/clipboard/copyPasteEquality/copyPasteEqualityTestInstances.ts new file mode 100644 index 0000000000..8f9bc636ab --- /dev/null +++ b/tests/src/unit/react/clipboard/copyPasteEquality/copyPasteEqualityTestInstances.ts @@ -0,0 +1,34 @@ +import { CopyPasteEqualityTestCase } from "../../../shared/clipboard/copyPasteEquality/copyPasteEqualityTestCase.js"; +import { testCopyPasteEquality } from "../../../shared/clipboard/copyPasteEquality/copyPasteEqualityTestExecutors.js"; +import { TestInstance } from "../../../types.js"; +import { + TestBlockSchema, + TestInlineContentSchema, + TestStyleSchema, +} from "../../testSchema.js"; +import { copyTestInstancesHTML } from "../copy/copyTestInstances.js"; + +// NOTE: Only the block is covered in these tests. Inline `` is foreign (non-HTML) content, +// and ProseMirror's clipboard parser in the jsdom unit environment doesn't run the inline +// content's `parseContent` for it, so pasting the copied inline math doubles its source here. It +// round-trips correctly in a real browser and should be covered by the browser-mode e2e suite +// instead. +export const copyPasteEqualityTestInstances: TestInstance< + CopyPasteEqualityTestCase< + TestBlockSchema, + TestInlineContentSchema, + TestStyleSchema + >, + TestBlockSchema, + TestInlineContentSchema, + TestStyleSchema +>[] = copyTestInstancesHTML + .filter(({ testCase }) => testCase.name === "mathBlock") + .map(({ testCase }) => ({ + testCase: { + name: testCase.name, + document: testCase.document, + getCopyAndPasteSelection: testCase.getCopySelection, + }, + executeTest: testCopyPasteEquality, + })); diff --git a/tests/src/unit/react/clipboard/copyPasteEquality/runTests.test.ts b/tests/src/unit/react/clipboard/copyPasteEquality/runTests.test.ts new file mode 100644 index 0000000000..dfb3241a05 --- /dev/null +++ b/tests/src/unit/react/clipboard/copyPasteEquality/runTests.test.ts @@ -0,0 +1,15 @@ +import { describe, it } from "vite-plus/test"; + +import { setupTestEditor } from "../../setupTestEditor.js"; +import { testSchema } from "../../testSchema.js"; +import { copyPasteEqualityTestInstances } from "./copyPasteEqualityTestInstances.js"; + +describe("React copy/paste equality tests", () => { + const getEditor = setupTestEditor(testSchema); + + for (const { testCase, executeTest } of copyPasteEqualityTestInstances) { + it(`${testCase.name}`, async () => { + await executeTest(getEditor(), testCase); + }); + } +}); diff --git a/tests/src/unit/react/formatConversion/export/__snapshots__/markdown/codeBlock/nested.md b/tests/src/unit/react/formatConversion/export/__snapshots__/markdown/codeBlock/nested.md new file mode 100644 index 0000000000..75edc69f51 --- /dev/null +++ b/tests/src/unit/react/formatConversion/export/__snapshots__/markdown/codeBlock/nested.md @@ -0,0 +1,6 @@ +* The snippet: + ```javascript + const a = 1; + + const b = 2; + ``` diff --git a/tests/src/unit/react/formatConversion/export/exportTestInstances.ts b/tests/src/unit/react/formatConversion/export/exportTestInstances.ts index d822928fb6..8f3ab89bf9 100644 --- a/tests/src/unit/react/formatConversion/export/exportTestInstances.ts +++ b/tests/src/unit/react/formatConversion/export/exportTestInstances.ts @@ -2,6 +2,7 @@ import { ExportTestCase } from "../../../shared/formatConversion/export/exportTe import { testExportBlockNoteHTML, testExportHTML, + testExportMarkdown, } from "../../../shared/formatConversion/export/exportTestExecutors.js"; import { TestInstance } from "../../../types.js"; import { @@ -470,6 +471,49 @@ export const exportTestInstancesBlockNoteHTML: TestInstance< }, executeTest: testExportBlockNoteHTML, }, + { + testCase: { + name: "mathBlock/basic", + content: [ + { + type: "mathBlock", + content: "a^2 + b^2 = c^2", + }, + ], + }, + executeTest: testExportBlockNoteHTML, + }, + { + testCase: { + name: "math/basic", + content: [ + { + type: "paragraph", + content: [ + "The identity ", + { + type: "math", + content: "e^{i\\pi} + 1 = 0", + } as const, + " is elegant.", + ], + }, + ], + }, + executeTest: testExportBlockNoteHTML, + }, + { + testCase: { + name: "diagram/basic", + content: [ + { + type: "diagram", + content: "graph TD\n A[Start] --> B[End]", + }, + ], + }, + executeTest: testExportBlockNoteHTML, + }, ]; export const exportTestInstancesHTML: TestInstance< @@ -481,3 +525,99 @@ export const exportTestInstancesHTML: TestInstance< testCase, executeTest: testExportHTML, })); + +// Markdown export runs the external HTML through the markdown serializer: +// the diagram's fenced-code representation should come out as a ```mermaid +// fence, and math's MathML (via its LaTeX source annotation) as $$/$ spans. +export const exportTestInstancesMarkdown: TestInstance< + ExportTestCase, + TestBlockSchema, + TestInlineContentSchema, + TestStyleSchema +>[] = [ + { + testCase: { + name: "diagram/basic", + content: [ + { + type: "diagram", + content: "graph TD\n A[Start] --> B[End]", + }, + ], + }, + executeTest: testExportMarkdown, + }, + { + testCase: { + name: "math/basic", + content: [ + { + type: "mathBlock", + content: "a^2 + b^2 = c^2", + }, + ], + }, + executeTest: testExportMarkdown, + }, + { + // Nested multi-line blocks must indent every line (including the closing + // delimiter) - an unindented line would end the list item. Toggle items + // are the case where this occurs: external HTML flattens other list + // items' non-list children to siblings, but keeps toggle children + // nested. + testCase: { + name: "math/nested", + content: [ + { + type: "toggleListItem", + content: "The theorem:", + children: [ + { + type: "mathBlock", + content: "a^2 +\nb^2 = c^2", + }, + ], + }, + ], + }, + executeTest: testExportMarkdown, + }, + { + testCase: { + name: "codeBlock/nested", + content: [ + { + type: "toggleListItem", + content: "The snippet:", + children: [ + { + type: "codeBlock", + props: { language: "javascript" }, + content: "const a = 1;\n\nconst b = 2;", + }, + ], + }, + ], + }, + executeTest: testExportMarkdown, + }, + { + testCase: { + name: "inlineMath/basic", + content: [ + { + type: "paragraph", + content: [ + "The identity ", + { + type: "math", + content: "e^{i\\pi} + 1 = 0", + } as const, + " is elegant.", + ], + }, + ], + }, + executeTest: testExportMarkdown, + }, +]; diff --git a/tests/src/unit/react/formatConversion/export/runTests.test.ts b/tests/src/unit/react/formatConversion/export/runTests.test.ts index 514171d525..4a63a80858 100644 --- a/tests/src/unit/react/formatConversion/export/runTests.test.ts +++ b/tests/src/unit/react/formatConversion/export/runTests.test.ts @@ -5,6 +5,7 @@ import { testSchema } from "../../testSchema.js"; import { exportTestInstancesBlockNoteHTML, exportTestInstancesHTML, + exportTestInstancesMarkdown, } from "./exportTestInstances.js"; describe("React export tests (BlockNote HTML)", () => { @@ -26,3 +27,13 @@ describe("React export tests (HTML)", () => { }); } }); + +describe("React export tests (Markdown)", () => { + const getEditor = setupTestEditor(testSchema); + + for (const { testCase, executeTest } of exportTestInstancesMarkdown) { + it(`${testCase.name}`, async () => { + await executeTest(getEditor(), testCase); + }); + } +}); diff --git a/tests/src/unit/react/formatConversion/exportParseEquality/exportParseEqualityTestInstances.ts b/tests/src/unit/react/formatConversion/exportParseEquality/exportParseEqualityTestInstances.ts index 2deca013d9..29364b8dbe 100644 --- a/tests/src/unit/react/formatConversion/exportParseEquality/exportParseEqualityTestInstances.ts +++ b/tests/src/unit/react/formatConversion/exportParseEquality/exportParseEqualityTestInstances.ts @@ -20,10 +20,12 @@ export const exportParseEqualityTestInstancesBlockNoteHTML: TestInstance< TestBlockSchema, TestInlineContentSchema, TestStyleSchema ->[] = exportTestInstancesBlockNoteHTML.map(({ testCase }) => ({ - testCase, - executeTest: testExportParseEqualityBlockNoteHTML, -})); +>[] = exportTestInstancesBlockNoteHTML + .filter(({ testCase }) => testCase.name !== "math/basic") + .map(({ testCase }) => ({ + testCase, + executeTest: testExportParseEqualityBlockNoteHTML, + })); export const exportParseEqualityTestInstancesNodes: TestInstance< ExportParseEqualityTestCase< @@ -34,7 +36,7 @@ export const exportParseEqualityTestInstancesNodes: TestInstance< TestBlockSchema, TestInlineContentSchema, TestStyleSchema ->[] = exportParseEqualityTestInstancesBlockNoteHTML.map(({ testCase }) => ({ +>[] = exportTestInstancesBlockNoteHTML.map(({ testCase }) => ({ testCase, executeTest: testExportParseEqualityNodes, })); diff --git a/tests/src/unit/react/formatConversion/parse/parseTestInstances.ts b/tests/src/unit/react/formatConversion/parse/parseTestInstances.ts new file mode 100644 index 0000000000..4cfd6479d0 --- /dev/null +++ b/tests/src/unit/react/formatConversion/parse/parseTestInstances.ts @@ -0,0 +1,64 @@ +import { ParseTestCase } from "../../../shared/formatConversion/parse/parseTestCase.js"; +import { + testParseHTML, + testParseMarkdown, +} from "../../../shared/formatConversion/parse/parseTestExecutors.js"; +import { TestInstance } from "../../../types.js"; +import { + TestBlockSchema, + TestInlineContentSchema, + TestStyleSchema, +} from "../../testSchema.js"; + +// NOTE: Only the block is covered in these tests. Inline `` is foreign (non-HTML) content, +// and ProseMirror's clipboard parser in the jsdom unit environment doesn't run the inline +// content's `parseContent` for it, so pasting the copied inline math doubles its source here. It +// round-trips correctly in a real browser and should be covered by the browser-mode e2e suite +// instead. +export const parseTestInstancesHTML: TestInstance< + ParseTestCase, + TestBlockSchema, + TestInlineContentSchema, + TestStyleSchema +>[] = [ + { + testCase: { + name: "mathBlock", + content: `a2+b2=c2a^2 + b^2 = c^2`, + }, + executeTest: testParseHTML, + }, + { + testCase: { + name: "diagramBlock", + content: `
    graph TD\n  A[Start] --> B[End]
    `, + }, + executeTest: testParseHTML, + }, +]; + +// The diagram block's fenced-code representation should also round-trip from +// Markdown. +export const parseTestInstancesMarkdown: TestInstance< + ParseTestCase, + TestBlockSchema, + TestInlineContentSchema, + TestStyleSchema +>[] = [ + { + testCase: { + name: "diagramBlock", + content: "```mermaid\ngraph TD\n A[Start] --> B[End]\n```", + }, + executeTest: testParseMarkdown, + }, + // The reverse precedence check: with the diagram block registered, fences + // in other languages must still fall through to the code block. + { + testCase: { + name: "codeBlockNotDiagram", + content: "```javascript\nconsole.log('hi');\n```", + }, + executeTest: testParseMarkdown, + }, +]; diff --git a/tests/src/unit/react/formatConversion/parse/runTests.test.ts b/tests/src/unit/react/formatConversion/parse/runTests.test.ts new file mode 100644 index 0000000000..7f13214bea --- /dev/null +++ b/tests/src/unit/react/formatConversion/parse/runTests.test.ts @@ -0,0 +1,30 @@ +import { describe, it } from "vite-plus/test"; + +import { setupTestEditor } from "../../setupTestEditor.js"; +import { testSchema } from "../../testSchema.js"; +import { + parseTestInstancesHTML, + parseTestInstancesMarkdown, +} from "./parseTestInstances.js"; + +// Tests for verifying that the React math block and inline math implementations +// are correctly parsed from external HTML (MathML). +describe("React parse tests (HTML)", () => { + const getEditor = setupTestEditor(testSchema); + + for (const { testCase, executeTest } of parseTestInstancesHTML) { + it(`${testCase.name}`, async () => { + await executeTest(getEditor(), testCase); + }); + } +}); + +describe("React parse tests (Markdown)", () => { + const getEditor = setupTestEditor(testSchema); + + for (const { testCase, executeTest } of parseTestInstancesMarkdown) { + it(`${testCase.name}`, async () => { + await executeTest(getEditor(), testCase); + }); + } +}); diff --git a/tests/src/utils/screenshotFull.ts b/tests/src/utils/screenshotFull.ts new file mode 100644 index 0000000000..0078de75c3 --- /dev/null +++ b/tests/src/utils/screenshotFull.ts @@ -0,0 +1,42 @@ +import { page } from "./context.js"; +import { expectElement } from "./editor.js"; + +/** + * Screenshots an element that may be taller than the browser window, at full + * resolution. + * + * Plain element screenshots only contain what the tester iframe actually + * paints: anything below its ~720px fold comes out blank white, silently. + * Growing the iframe first (`page.viewport`) makes it paint everything, but + * the harness then scales the iframe down to fit the window via a CSS + * transform on its wrapper, and the capture shrinks with it (static.test.tsx + * documents accepting that trade-off). So this grows the iframe past the + * content and neutralizes the wrapper's scale transform (same origin) for + * the duration of the capture - Playwright captures beyond the window fine. + * + * This reaches into harness DOM internals, but it is exactly what upstream + * Vitest does since the fix for vitest-dev/vitest#9124 / #9363: during + * captures, PR vitest-dev/vitest#9745 (milestone 5.0.0) un-scales the + * iframe and resizes the headless viewport to the screenshot. Delete this + * util once vite-plus ships Vitest 5's browser mode. If an upgrade changes + * the wrapper DOM before then, captures come out downscaled and fail the + * baselines' dimension checks - loudly, not silently; + * screenshotFull.test.tsx isolates that breakage on synthetic content. + */ +export async function screenshotFull(element: HTMLElement, name: string) { + const height = Math.max( + 720, + Math.ceil(element.getBoundingClientRect().bottom) + 40, + ); + await page.viewport(1280, height); + (window.frameElement?.parentElement as HTMLElement | null)?.style.setProperty( + "transform", + "none", + ); + try { + await expectElement(element).toMatchScreenshot(name); + } finally { + // Re-lays-out the wrapper, including its transform. + await page.viewport(1280, 720); + } +} From 16bded2df6a4e3e63da8f1eba4341d4d826e1db5 Mon Sep 17 00:00:00 2001 From: Nick the Sick Date: Thu, 13 Aug 2026 16:26:33 +0200 Subject: [PATCH 3/5] feat: math block Add `@blocknote/math-block`: a LaTeX math block and inline math content type rendered with KaTeX, built on the source-with-preview primitives. Includes exporter mappings for HTML, markdown, docx, odt, pdf and email, an example, and documentation. --- docs/content/docs/features/blocks/math.mdx | 192 ++++++ .../09-math-block/.bnexample.json | 17 + .../06-custom-schema/09-math-block/README.md | 10 + .../06-custom-schema/09-math-block/index.html | 14 + .../06-custom-schema/09-math-block/main.tsx | 11 + .../09-math-block/package.json | 33 + .../09-math-block/src/App.tsx | 110 ++++ .../09-math-block/tsconfig.json | 32 + .../09-math-block/vite-env.d.ts | 1 + .../09-math-block/vite.config.ts | 35 + packages/math-block/.gitignore | 23 + packages/math-block/LICENSE | 373 +++++++++++ packages/math-block/package.json | 156 +++++ .../block/createReactMathBlockSpec.test.tsx | 373 +++++++++++ .../src/block/createReactMathBlockSpec.tsx | 40 ++ .../src/block/getMathBlockTypeSelectItems.ts | 23 + .../MathBlockInputRulesExtension.ts | 24 + .../src/block/helpers/extensions/index.ts | 1 + .../math-block/src/block/helpers/index.ts | 4 + .../src/block/helpers/parse/index.ts | 1 + .../helpers/parse/parseBlockMathMLElement.ts | 27 + .../render/MathBlockPreviewWithPopup.tsx | 50 ++ .../src/block/helpers/render/index.ts | 1 + .../toExternalHTML/BlockMathMLElement.tsx | 34 + .../src/block/helpers/toExternalHTML/index.ts | 1 + packages/math-block/src/block/index.ts | 3 + .../withMathMappings/document.xml | 102 +++ .../src/docx-exporter/docxExporter.test.ts | 151 +++++ .../math-block/src/docx-exporter/index.ts | 129 ++++ .../__snapshots__/emailExporter.test.tsx.snap | 3 + .../src/email-exporter/emailExporter.test.tsx | 131 ++++ .../math-block/src/email-exporter/index.tsx | 204 ++++++ .../src/exporterHelpers/latexToMathML.ts | 40 ++ .../renderMathToImage.browser.test.ts | 33 + .../exporterHelpers/renderMathToImage.test.ts | 67 ++ .../src/exporterHelpers/renderMathToImage.ts | 209 ++++++ .../math-block/src/getMathSlashMenuItems.tsx | 74 +++ packages/math-block/src/helpers/index.ts | 3 + .../src/helpers/latexToHTMLString.ts | 28 + .../math-block/src/helpers/render/index.ts | 1 + .../src/helpers/render/useLatexToMathML.ts | 14 + .../src/helpers/toExternalHTML/index.ts | 1 + .../toExternalHTML/latexToMathMLElement.ts | 16 + packages/math-block/src/i18n/dictionary.ts | 33 + packages/math-block/src/i18n/locales/ar.ts | 35 + packages/math-block/src/i18n/locales/de.ts | 34 + packages/math-block/src/i18n/locales/en.ts | 32 + packages/math-block/src/i18n/locales/es.ts | 34 + packages/math-block/src/i18n/locales/fa.ts | 35 + packages/math-block/src/i18n/locales/fr.ts | 34 + packages/math-block/src/i18n/locales/he.ts | 35 + packages/math-block/src/i18n/locales/hr.ts | 34 + packages/math-block/src/i18n/locales/index.ts | 23 + packages/math-block/src/i18n/locales/is.ts | 34 + packages/math-block/src/i18n/locales/it.ts | 34 + packages/math-block/src/i18n/locales/ja.ts | 34 + packages/math-block/src/i18n/locales/ko.ts | 34 + packages/math-block/src/i18n/locales/nl.ts | 34 + packages/math-block/src/i18n/locales/no.ts | 34 + packages/math-block/src/i18n/locales/pl.ts | 34 + packages/math-block/src/i18n/locales/pt.ts | 34 + packages/math-block/src/i18n/locales/ru.ts | 34 + packages/math-block/src/i18n/locales/sk.ts | 34 + packages/math-block/src/i18n/locales/uk.ts | 34 + packages/math-block/src/i18n/locales/uz.ts | 34 + packages/math-block/src/i18n/locales/vi.ts | 50 ++ packages/math-block/src/i18n/locales/zh-tw.ts | 34 + packages/math-block/src/i18n/locales/zh.ts | 34 + packages/math-block/src/index.ts | 8 + .../createReactMathInlineContentSpec.test.tsx | 261 ++++++++ .../createReactMathInlineContentSpec.tsx | 35 + .../MathInlineInputRulesExtension.ts | 42 ++ .../inlineContent/helpers/extensions/index.ts | 1 + .../src/inlineContent/helpers/index.ts | 4 + .../src/inlineContent/helpers/parse/index.ts | 1 + .../helpers/parse/parseInlineMathMLElement.ts | 28 + .../render/MathInlinePreviewWithPopup.tsx | 54 ++ .../src/inlineContent/helpers/render/index.ts | 1 + .../toExternalHTML/InlineMathMLElement.tsx | 36 ++ .../helpers/toExternalHTML/index.ts | 1 + .../math-block/src/inlineContent/index.ts | 2 + .../withMathMappings/content.xml | 41 ++ .../withMathMappings/objects.xml | 81 +++ .../__snapshots__/withMathMappings/styles.xml | 599 ++++++++++++++++++ packages/math-block/src/odt-exporter/index.ts | 180 ++++++ .../src/odt-exporter/odtExporter.test.ts | 124 ++++ .../__snapshots__/exampleWithMathMappings.jsx | 60 ++ .../math-block/src/pdf-exporter/index.tsx | 174 +++++ .../src/pdf-exporter/pdfExporter.test.tsx | 140 ++++ packages/math-block/src/vite-env.d.ts | 1 + packages/math-block/tsconfig.json | 33 + packages/math-block/vite.config.ts | 135 ++++ packages/math-block/vitestSetup.ts | 10 + .../copy/__snapshots__/text/html/math.html | 32 + .../__snapshots__/text/html/mathBlock.html | 25 + .../blocknoteHTML/math/basic.html | 124 ++++ .../blocknoteHTML/mathBlock/basic.html | 152 +++++ .../export/__snapshots__/html/math/basic.html | 34 + .../__snapshots__/html/mathBlock/basic.html | 25 + .../markdown/inlineMath/basic.md | 1 + .../__snapshots__/markdown/math/basic.md | 3 + .../__snapshots__/markdown/math/nested.md | 5 + .../parse/__snapshots__/html/mathBlock.json | 15 + 103 files changed, 6118 insertions(+) create mode 100644 docs/content/docs/features/blocks/math.mdx create mode 100644 examples/06-custom-schema/09-math-block/.bnexample.json create mode 100644 examples/06-custom-schema/09-math-block/README.md create mode 100644 examples/06-custom-schema/09-math-block/index.html create mode 100644 examples/06-custom-schema/09-math-block/main.tsx create mode 100644 examples/06-custom-schema/09-math-block/package.json create mode 100644 examples/06-custom-schema/09-math-block/src/App.tsx create mode 100644 examples/06-custom-schema/09-math-block/tsconfig.json create mode 100644 examples/06-custom-schema/09-math-block/vite-env.d.ts create mode 100644 examples/06-custom-schema/09-math-block/vite.config.ts create mode 100644 packages/math-block/.gitignore create mode 100644 packages/math-block/LICENSE create mode 100644 packages/math-block/package.json create mode 100644 packages/math-block/src/block/createReactMathBlockSpec.test.tsx create mode 100644 packages/math-block/src/block/createReactMathBlockSpec.tsx create mode 100644 packages/math-block/src/block/getMathBlockTypeSelectItems.ts create mode 100644 packages/math-block/src/block/helpers/extensions/MathBlockInputRulesExtension.ts create mode 100644 packages/math-block/src/block/helpers/extensions/index.ts create mode 100644 packages/math-block/src/block/helpers/index.ts create mode 100644 packages/math-block/src/block/helpers/parse/index.ts create mode 100644 packages/math-block/src/block/helpers/parse/parseBlockMathMLElement.ts create mode 100644 packages/math-block/src/block/helpers/render/MathBlockPreviewWithPopup.tsx create mode 100644 packages/math-block/src/block/helpers/render/index.ts create mode 100644 packages/math-block/src/block/helpers/toExternalHTML/BlockMathMLElement.tsx create mode 100644 packages/math-block/src/block/helpers/toExternalHTML/index.ts create mode 100644 packages/math-block/src/block/index.ts create mode 100644 packages/math-block/src/docx-exporter/__snapshots__/withMathMappings/document.xml create mode 100644 packages/math-block/src/docx-exporter/docxExporter.test.ts create mode 100644 packages/math-block/src/docx-exporter/index.ts create mode 100644 packages/math-block/src/email-exporter/__snapshots__/emailExporter.test.tsx.snap create mode 100644 packages/math-block/src/email-exporter/emailExporter.test.tsx create mode 100644 packages/math-block/src/email-exporter/index.tsx create mode 100644 packages/math-block/src/exporterHelpers/latexToMathML.ts create mode 100644 packages/math-block/src/exporterHelpers/renderMathToImage.browser.test.ts create mode 100644 packages/math-block/src/exporterHelpers/renderMathToImage.test.ts create mode 100644 packages/math-block/src/exporterHelpers/renderMathToImage.ts create mode 100644 packages/math-block/src/getMathSlashMenuItems.tsx create mode 100644 packages/math-block/src/helpers/index.ts create mode 100644 packages/math-block/src/helpers/latexToHTMLString.ts create mode 100644 packages/math-block/src/helpers/render/index.ts create mode 100644 packages/math-block/src/helpers/render/useLatexToMathML.ts create mode 100644 packages/math-block/src/helpers/toExternalHTML/index.ts create mode 100644 packages/math-block/src/helpers/toExternalHTML/latexToMathMLElement.ts create mode 100644 packages/math-block/src/i18n/dictionary.ts create mode 100644 packages/math-block/src/i18n/locales/ar.ts create mode 100644 packages/math-block/src/i18n/locales/de.ts create mode 100644 packages/math-block/src/i18n/locales/en.ts create mode 100644 packages/math-block/src/i18n/locales/es.ts create mode 100644 packages/math-block/src/i18n/locales/fa.ts create mode 100644 packages/math-block/src/i18n/locales/fr.ts create mode 100644 packages/math-block/src/i18n/locales/he.ts create mode 100644 packages/math-block/src/i18n/locales/hr.ts create mode 100644 packages/math-block/src/i18n/locales/index.ts create mode 100644 packages/math-block/src/i18n/locales/is.ts create mode 100644 packages/math-block/src/i18n/locales/it.ts create mode 100644 packages/math-block/src/i18n/locales/ja.ts create mode 100644 packages/math-block/src/i18n/locales/ko.ts create mode 100644 packages/math-block/src/i18n/locales/nl.ts create mode 100644 packages/math-block/src/i18n/locales/no.ts create mode 100644 packages/math-block/src/i18n/locales/pl.ts create mode 100644 packages/math-block/src/i18n/locales/pt.ts create mode 100644 packages/math-block/src/i18n/locales/ru.ts create mode 100644 packages/math-block/src/i18n/locales/sk.ts create mode 100644 packages/math-block/src/i18n/locales/uk.ts create mode 100644 packages/math-block/src/i18n/locales/uz.ts create mode 100644 packages/math-block/src/i18n/locales/vi.ts create mode 100644 packages/math-block/src/i18n/locales/zh-tw.ts create mode 100644 packages/math-block/src/i18n/locales/zh.ts create mode 100644 packages/math-block/src/index.ts create mode 100644 packages/math-block/src/inlineContent/createReactMathInlineContentSpec.test.tsx create mode 100644 packages/math-block/src/inlineContent/createReactMathInlineContentSpec.tsx create mode 100644 packages/math-block/src/inlineContent/helpers/extensions/MathInlineInputRulesExtension.ts create mode 100644 packages/math-block/src/inlineContent/helpers/extensions/index.ts create mode 100644 packages/math-block/src/inlineContent/helpers/index.ts create mode 100644 packages/math-block/src/inlineContent/helpers/parse/index.ts create mode 100644 packages/math-block/src/inlineContent/helpers/parse/parseInlineMathMLElement.ts create mode 100644 packages/math-block/src/inlineContent/helpers/render/MathInlinePreviewWithPopup.tsx create mode 100644 packages/math-block/src/inlineContent/helpers/render/index.ts create mode 100644 packages/math-block/src/inlineContent/helpers/toExternalHTML/InlineMathMLElement.tsx create mode 100644 packages/math-block/src/inlineContent/helpers/toExternalHTML/index.ts create mode 100644 packages/math-block/src/inlineContent/index.ts create mode 100644 packages/math-block/src/odt-exporter/__snapshots__/withMathMappings/content.xml create mode 100644 packages/math-block/src/odt-exporter/__snapshots__/withMathMappings/objects.xml create mode 100644 packages/math-block/src/odt-exporter/__snapshots__/withMathMappings/styles.xml create mode 100644 packages/math-block/src/odt-exporter/index.ts create mode 100644 packages/math-block/src/odt-exporter/odtExporter.test.ts create mode 100644 packages/math-block/src/pdf-exporter/__snapshots__/exampleWithMathMappings.jsx create mode 100644 packages/math-block/src/pdf-exporter/index.tsx create mode 100644 packages/math-block/src/pdf-exporter/pdfExporter.test.tsx create mode 100644 packages/math-block/src/vite-env.d.ts create mode 100644 packages/math-block/tsconfig.json create mode 100644 packages/math-block/vite.config.ts create mode 100644 packages/math-block/vitestSetup.ts create mode 100644 tests/src/unit/react/clipboard/copy/__snapshots__/text/html/math.html create mode 100644 tests/src/unit/react/clipboard/copy/__snapshots__/text/html/mathBlock.html create mode 100644 tests/src/unit/react/formatConversion/export/__snapshots__/blocknoteHTML/math/basic.html create mode 100644 tests/src/unit/react/formatConversion/export/__snapshots__/blocknoteHTML/mathBlock/basic.html create mode 100644 tests/src/unit/react/formatConversion/export/__snapshots__/html/math/basic.html create mode 100644 tests/src/unit/react/formatConversion/export/__snapshots__/html/mathBlock/basic.html create mode 100644 tests/src/unit/react/formatConversion/export/__snapshots__/markdown/inlineMath/basic.md create mode 100644 tests/src/unit/react/formatConversion/export/__snapshots__/markdown/math/basic.md create mode 100644 tests/src/unit/react/formatConversion/export/__snapshots__/markdown/math/nested.md create mode 100644 tests/src/unit/react/formatConversion/parse/__snapshots__/html/mathBlock.json diff --git a/docs/content/docs/features/blocks/math.mdx b/docs/content/docs/features/blocks/math.mdx new file mode 100644 index 0000000000..048686f2b8 --- /dev/null +++ b/docs/content/docs/features/blocks/math.mdx @@ -0,0 +1,192 @@ +--- +title: Math & Equations +description: LaTeX math blocks and inline math for BlockNote — rendered as formulas in the editor, and exportable to Markdown, PDF, DOCX, ODT, and email. +--- + +# Math & Equations + +The `@blocknote/math-block` package adds mathematical notation to your documents: a **math block** for standalone equations and **inline math** that flows with the surrounding text. Both are authored as LaTeX in a source popup and rendered as formulas — [KaTeX](https://katex.org/) converts the LaTeX to MathML, which browsers display natively. + + + This block is only available in React (`@blocknote/react`). + + +```bash +npm install @blocknote/math-block +``` + +## Adding to your editor + +The package exports `createReactMathBlockSpec` (the block) and `createReactInlineMathSpec` (the inline content). Add them to your schema's `blockSpecs` and `inlineContentSpecs` respectively: + +```tsx +import { BlockNoteSchema } from "@blocknote/core"; +import { + createReactMathBlockSpec, + createReactInlineMathSpec, +} from "@blocknote/math-block"; + +const schema = BlockNoteSchema.create().extend({ + blockSpecs: { + // Adds the Math block to the schema. + mathBlock: createReactMathBlockSpec(), + }, + inlineContentSpecs: { + // Adds the inline Math content to the schema. + math: createReactInlineMathSpec(), + }, +}); +``` + +To highlight the LaTeX source in the popup, add the [syntax highlighting](/docs/features/blocks/code-blocks#syntax-highlighting) extension to your editor. The math block and inline math already declare their source language (`latex`), so no per-block configuration is needed: + +```tsx +import { syntaxHighlighter } from "@blocknote/code-block"; + +const editor = useCreateBlockNote({ + schema, + extensions: [syntaxHighlighter], +}); +``` + +## Menu items & localization + +Because the math specs live in an optional package, their editor integrations are opt-in too — the package exports everything needed: + +```tsx +import { + getMathSlashMenuItems, // Slash Menu items for inserting math + getMathBlockTypeSelectItems, // Block Type Select item for the Formatting Toolbar + locales as mathLocales, // dictionary strings, merged under the `math` key +} from "@blocknote/math-block"; +``` + +- `getMathSlashMenuItems(editor)` returns [Slash Menu](/docs/react/components/suggestion-menus#slash-menu) items for inserting a math block or inline math — combine them with the default items via `combineByGroup`. +- `getMathBlockTypeSelectItems(editor)` returns a [Block Type Select](/docs/react/components/formatting-toolbar) item for turning a block into a math block, to spread alongside the defaults. +- `mathLocales` translates the math strings — merge a locale into the editor's `dictionary` under the `math` key (see [Localization](/docs/features/localization)); without one, the bundled English strings are used. + +The example below wires them all up. + +## Example + + + +## Exporting + +Math exports to every format BlockNote supports: + +- **HTML** works out of the box — the export produces a native MathML `` element (with the LaTeX embedded for lossless round-trips), and pasting MathML back in converts to LaTeX. +- **[Markdown](/docs/features/export/markdown)** also works out of the box — math blocks export as `$$` blocks and inline math as `$...$` spans, their common Markdown notations. +- **PDF, DOCX, ODT, and email** use exporter mappings, which live as subpaths of this package — spread them into the default mappings of the exporter you use, as shown per format below. Invalid LaTeX renders an error placeholder identifying the offending source, mirroring the editor. + +### DOCX + +With the [DOCX exporter](/docs/features/export/docx), math exports as native (editable) Word equations. Works server-side out of the box — the LaTeX is converted to OMML without rendering: + +```typescript +import { + DOCXExporter, + docxDefaultSchemaMappings, +} from "@blocknote/xl-docx-exporter"; +import { + inlineMathMapping, + mathBlockMapping, +} from "@blocknote/math-block/docx-exporter"; + +const exporter = new DOCXExporter(editor.schema, { + ...docxDefaultSchemaMappings, + blockMapping: { + ...docxDefaultSchemaMappings.blockMapping, + mathBlock: mathBlockMapping, + }, + inlineContentMapping: { + ...docxDefaultSchemaMappings.inlineContentMapping, + math: inlineMathMapping, + }, +}); +``` + +### ODT + +With the [ODT exporter](/docs/features/export/odt), math exports as native (editable) formula objects. Also works server-side out of the box (LaTeX is converted to MathML without rendering): + +```typescript +import { + inlineMathMapping, + mathBlockMapping, +} from "@blocknote/math-block/odt-exporter"; + +// Spread into the ODTExporter's mappings exactly as for DOCX above. +``` + +### PDF + +With the [PDF exporter](/docs/features/export/pdf), math blocks export as vector formulas — no rasterization, so they also work server-side out of the box. Inline math is rasterized to images that flow with the text: + +```typescript +import { + createInlineMathMapping, + mathBlockMapping, +} from "@blocknote/math-block/pdf-exporter"; + +// Spread into the PDFExporter's mappings as for DOCX above - note that +// inline math is a factory here: `math: createInlineMathMapping()`. +``` + +The inline math factory takes one option: + +```typescript +createInlineMathMapping(options?: { + /** + * Rasterizes the formula SVG to an image. Defaults to the built-in + * canvas rasterizer, which only works in the browser - when exporting + * server-side, pass one backed by e.g. `@resvg/resvg-js` or `sharp`; + * without it, a server-side export throws. The `RasterizeSVG` type is + * exported from the same subpath. + */ + rasterize?: RasterizeSVG; +}); +``` + +Math blocks require the `@react-pdf/math` package (a peer dependency of the PDF mapping). + +### Email + +With the [email exporter](/docs/features/export/email), math exports as images with the LaTeX source as the alt text: math blocks are rasterized to PNG in the browser (and embedded as SVG elsewhere), inline math is always embedded as SVG: + +```typescript +import { + createInlineMathMapping, + createMathBlockMapping, +} from "@blocknote/math-block/email-exporter"; + +// Spread into the ReactEmailExporter's mappings as for DOCX above - both +// are factories here: `mathBlock: createMathBlockMapping()` and +// `math: createInlineMathMapping()`. +``` + +Both factories take delivery-related options: + +```typescript +createMathBlockMapping(options?: { + /** + * Rasterizes the formula SVG to a raster image. Defaults to the built-in + * canvas rasterizer in the browser; elsewhere (e.g. server-side email + * rendering at send time), the formula is embedded as an SVG instead - + * pass a rasterizer (e.g. backed by `@resvg/resvg-js` or `sharp`) to get + * PNGs there, which more email clients display. + */ + rasterize?: RasterizeSVG; + /** + * How generated images get into the email: embedded as data URLs by + * default, or as inline `cid:` attachments - see the email exporter's + * image delivery docs. + */ + imageDelivery?: ReactEmailImageDelivery; +}); + +// `createInlineMathMapping` takes the same `imageDelivery` option (inline +// math is always SVG, so there's no `rasterize`). +``` + +Some email clients don't display data URL images — see [image delivery](/docs/features/export/email#math--diagram-blocks) on the email page for delivering the generated images as inline `cid:` attachments instead. diff --git a/examples/06-custom-schema/09-math-block/.bnexample.json b/examples/06-custom-schema/09-math-block/.bnexample.json new file mode 100644 index 0000000000..d7b46b399c --- /dev/null +++ b/examples/06-custom-schema/09-math-block/.bnexample.json @@ -0,0 +1,17 @@ +{ + "playground": true, + "docs": true, + "author": "matthewlipski", + "tags": [ + "Intermediate", + "Blocks", + "Custom Schemas", + "Suggestion Menus", + "Slash Menu" + ], + "dependencies": { + "@blocknote/code-block": "latest", + "@blocknote/math-block": "latest", + "react-icons": "^5.5.0" + } +} diff --git a/examples/06-custom-schema/09-math-block/README.md b/examples/06-custom-schema/09-math-block/README.md new file mode 100644 index 0000000000..9f2b15c570 --- /dev/null +++ b/examples/06-custom-schema/09-math-block/README.md @@ -0,0 +1,10 @@ +# Math Block + +In this example, we register the `@blocknote/math-block` block in a custom schema. The math block renders LaTeX as MathML (using Temml) for the browser to display natively, and reveals an editable LaTeX source popup when selected. Exporting to HTML produces a MathML `` element, and pasting MathML back in is converted to LaTeX. + +**Try it out:** Click a formula to edit its LaTeX! + +**Relevant Docs:** + +- [Custom Blocks](/docs/features/custom-schemas/custom-blocks) +- [Editor Setup](/docs/getting-started/editor-setup) diff --git a/examples/06-custom-schema/09-math-block/index.html b/examples/06-custom-schema/09-math-block/index.html new file mode 100644 index 0000000000..034154dbcf --- /dev/null +++ b/examples/06-custom-schema/09-math-block/index.html @@ -0,0 +1,14 @@ + + + + + Math Block + + + +
    + + + diff --git a/examples/06-custom-schema/09-math-block/main.tsx b/examples/06-custom-schema/09-math-block/main.tsx new file mode 100644 index 0000000000..1260513388 --- /dev/null +++ b/examples/06-custom-schema/09-math-block/main.tsx @@ -0,0 +1,11 @@ +// AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY +import React from "react"; +import { createRoot } from "react-dom/client"; +import App from "./src/App.jsx"; + +const root = createRoot(document.getElementById("root")!); +root.render( + + + , +); diff --git a/examples/06-custom-schema/09-math-block/package.json b/examples/06-custom-schema/09-math-block/package.json new file mode 100644 index 0000000000..e1390e5959 --- /dev/null +++ b/examples/06-custom-schema/09-math-block/package.json @@ -0,0 +1,33 @@ +{ + "name": "@blocknote/example-custom-schema-math-block", + "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", + "type": "module", + "private": true, + "version": "0.12.4", + "scripts": { + "start": "vite", + "dev": "vite", + "build:prod": "tsc && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@blocknote/ariakit": "latest", + "@blocknote/core": "latest", + "@blocknote/mantine": "latest", + "@blocknote/react": "latest", + "@blocknote/shadcn": "latest", + "@mantine/core": "^9.0.2", + "@mantine/hooks": "^9.0.2", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "@blocknote/code-block": "latest", + "@blocknote/math-block": "latest", + "react-icons": "^5.5.0" + }, + "devDependencies": { + "@types/react": "^19.2.3", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "vite": "^8.0.0" + } +} diff --git a/examples/06-custom-schema/09-math-block/src/App.tsx b/examples/06-custom-schema/09-math-block/src/App.tsx new file mode 100644 index 0000000000..554b3402bb --- /dev/null +++ b/examples/06-custom-schema/09-math-block/src/App.tsx @@ -0,0 +1,110 @@ +import "@blocknote/core/fonts/inter.css"; +import { BlockNoteSchema, combineByGroup } from "@blocknote/core"; +import { filterSuggestionItems } from "@blocknote/core/extensions"; +import * as locales from "@blocknote/core/locales"; +import { syntaxHighlighter } from "@blocknote/code-block"; +import { + createReactInlineMathSpec, + createReactMathBlockSpec, + getMathBlockTypeSelectItems, + getMathSlashMenuItems, + locales as mathLocales, +} from "@blocknote/math-block"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; +import { + blockTypeSelectItems, + FormattingToolbar, + FormattingToolbarController, + getDefaultReactSlashMenuItems, + SuggestionMenuController, + useCreateBlockNote, +} from "@blocknote/react"; + +// Our schema with block specs, which contain the configs and implementations for blocks +// that we want our editor to use. +const schema = BlockNoteSchema.create().extend({ + blockSpecs: { + // Creates an instance of the Math block and adds it to the schema. + mathBlock: createReactMathBlockSpec(), + }, + inlineContentSpecs: { + // Creates an instance of the inline Math content and adds it to the schema. + math: createReactInlineMathSpec(), + }, +}); + +export default function App() { + const editor = useCreateBlockNote({ + // The syntax highlighter extension highlights the LaTeX source of math + // blocks (they declare `highlight: () => "latex"`). Without it, they render + // as plain text. + extensions: [syntaxHighlighter], + schema, + // Merges the default dictionary with the math dictionary, under the `math` + // key the math block/inline content read their strings from. + dictionary: { + ...locales.en, + math: mathLocales.en, + }, + initialContent: [ + { + type: "paragraph", + content: "Click a formula to edit its LaTeX source:", + }, + { + type: "mathBlock", + content: "a^2 = \\sqrt{b^2 + c^2}", + }, + { + type: "mathBlock", + content: "\\int_0^\\infty e^{-x^2} dx = \\frac{\\sqrt{\\pi}}{2}", + }, + { + type: "paragraph", + content: [ + "Equations can also be inline, like ", + { type: "math", content: "e^{i\\pi} + 1 = 0" }, + ". Click one to edit its LaTeX source.", + ], + }, + { + type: "paragraph", + content: "Press the '/' key to open the Slash Menu and add another", + }, + ], + }); + + // Renders the editor instance using a React component. + return ( + + {/* Replaces the default Formatting Toolbar, adding the Math block to the + block type select so blocks can be converted to it. */} + ( + + )} + /> + {/* Replaces the default Slash Menu. */} + { + // Gets the default slash menu items and adds the Math items at the + // end of their group ("Advanced"). + const items = combineByGroup( + getDefaultReactSlashMenuItems(editor), + getMathSlashMenuItems(editor), + ); + + // Returns filtered items based on the query. + return filterSuggestionItems(items, query); + }} + /> + + ); +} diff --git a/examples/06-custom-schema/09-math-block/tsconfig.json b/examples/06-custom-schema/09-math-block/tsconfig.json new file mode 100644 index 0000000000..2aa62c56e6 --- /dev/null +++ b/examples/06-custom-schema/09-math-block/tsconfig.json @@ -0,0 +1,32 @@ +{ + "__comment": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": false, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } + }, + "include": ["."], + "__ADD_FOR_LOCAL_DEV_references": [ + { + "path": "../../../packages/core/" + }, + { + "path": "../../../packages/react/" + } + ] +} diff --git a/examples/06-custom-schema/09-math-block/vite-env.d.ts b/examples/06-custom-schema/09-math-block/vite-env.d.ts new file mode 100644 index 0000000000..11f02fe2a0 --- /dev/null +++ b/examples/06-custom-schema/09-math-block/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/examples/06-custom-schema/09-math-block/vite.config.ts b/examples/06-custom-schema/09-math-block/vite.config.ts new file mode 100644 index 0000000000..a96f1f04ff --- /dev/null +++ b/examples/06-custom-schema/09-math-block/vite.config.ts @@ -0,0 +1,35 @@ +// AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY +import react from "@vitejs/plugin-react"; +import * as fs from "fs"; +import * as path from "path"; +import { defineConfig } from "vite"; +// https://vitejs.dev/config/ +export default defineConfig(((conf: { command: string }) => ({ + plugins: [react()], + optimizeDeps: {}, + build: { + sourcemap: true, + }, + resolve: { + alias: + conf.command === "build" || + !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) + ? {} + : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), + // Comment out the lines below to load a built version of blocknote + // or, keep as is to load live from sources with live reload working + "@blocknote/core": path.resolve( + __dirname, + "../../packages/core/src/", + ), + "@blocknote/react": path.resolve( + __dirname, + "../../packages/react/src/", + ), + } as any), + }, +})) as Parameters[0]); diff --git a/packages/math-block/.gitignore b/packages/math-block/.gitignore new file mode 100644 index 0000000000..58f115c8dc --- /dev/null +++ b/packages/math-block/.gitignore @@ -0,0 +1,23 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-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/packages/math-block/LICENSE b/packages/math-block/LICENSE new file mode 100644 index 0000000000..fa0086a952 --- /dev/null +++ b/packages/math-block/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/packages/math-block/package.json b/packages/math-block/package.json new file mode 100644 index 0000000000..3745c49b42 --- /dev/null +++ b/packages/math-block/package.json @@ -0,0 +1,156 @@ +{ + "name": "@blocknote/math-block", + "homepage": "https://github.com/TypeCellOS/BlockNote", + "private": false, + "sideEffects": [ + "*.css" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/TypeCellOS/BlockNote.git", + "directory": "packages/math-block" + }, + "license": "MPL-2.0", + "version": "0.51.4", + "files": [ + "dist", + "types", + "src" + ], + "keywords": [ + "react", + "javascript", + "editor", + "typescript", + "prosemirror", + "wysiwyg", + "rich-text-editor", + "notion", + "yjs", + "block-based", + "tiptap", + "math", + "latex", + "mathml" + ], + "description": "A \"Notion-style\" block-based extensible text editor built on top of Prosemirror and Tiptap.", + "type": "module", + "source": "src/index.ts", + "types": "./types/src/index.d.ts", + "main": "./dist/blocknote-math-block.cjs", + "module": "./dist/blocknote-math-block.js", + "exports": { + ".": { + "types": "./types/src/index.d.ts", + "import": "./dist/blocknote-math-block.js", + "require": "./dist/blocknote-math-block.cjs" + }, + "./docx-exporter": { + "types": "./types/src/docx-exporter/index.d.ts", + "import": "./dist/docx-exporter.js", + "require": "./dist/docx-exporter.cjs" + }, + "./odt-exporter": { + "types": "./types/src/odt-exporter/index.d.ts", + "import": "./dist/odt-exporter.js", + "require": "./dist/odt-exporter.cjs" + }, + "./pdf-exporter": { + "types": "./types/src/pdf-exporter/index.d.ts", + "import": "./dist/pdf-exporter.js", + "require": "./dist/pdf-exporter.cjs" + }, + "./email-exporter": { + "types": "./types/src/email-exporter/index.d.ts", + "import": "./dist/email-exporter.js", + "require": "./dist/email-exporter.cjs" + } + }, + "scripts": { + "dev": "vp dev", + "lint": "vp lint src", + "test": "vp test --run", + "test-watch": "vp test watch", + "clean": "rimraf dist && rimraf types" + }, + "dependencies": { + "@blocknote/core": "workspace:^", + "@blocknote/react": "workspace:^", + "@handlewithcare/prosemirror-inputrules": "^0.1.4", + "katex": "^0.16.11", + "prosemirror-model": "^1.25.4", + "prosemirror-state": "^1.4.4" + }, + "devDependencies": { + "@blocknote/shared": "workspace:^", + "react-icons": "^5.5.0", + "@blocknote/xl-docx-exporter": "workspace:^", + "@blocknote/xl-email-exporter": "workspace:^", + "@blocknote/xl-odt-exporter": "workspace:^", + "@blocknote/xl-pdf-exporter": "workspace:^", + "@react-email/components": "^1.0.12", + "@react-pdf/math": "^2.0.1", + "@react-pdf/renderer": "^4.5.1", + "@types/katex": "^0.16.7", + "mathml2omml": "^0.5.0", + "@types/react": "^19.2.3", + "@types/react-dom": "^19.2.3", + "@zip.js/zip.js": "^2.8.8", + "docx": "^9.6.1", + "mathjax-full": "^3.2.2", + "react": "^19.2.5", + "react-dom": "^19.2.5", + "react-element-to-jsx-string": "^17.0.1", + "rimraf": "^5.0.10", + "rollup-plugin-webpack-stats": "^0.2.6", + "typescript": "^7.0.2", + "vite-plus": "catalog:", + "xml-formatter": "^3.6.7" + }, + "peerDependencies": { + "@blocknote/xl-docx-exporter": "workspace:^", + "@blocknote/xl-email-exporter": "workspace:^", + "@blocknote/xl-odt-exporter": "workspace:^", + "@blocknote/xl-pdf-exporter": "workspace:^", + "@react-email/components": "^1.0.12", + "@react-pdf/math": "^2.0.0", + "@react-pdf/renderer": "^4.5.1", + "docx": "^9.6.1", + "mathjax-full": "^3.2.2", + "mathml2omml": "^0.5.0", + "react": "^18.0 || ^19.0 || >= 19.0.0-rc", + "react-dom": "^18.0 || ^19.0 || >= 19.0.0-rc" + }, + "peerDependenciesMeta": { + "@blocknote/xl-docx-exporter": { + "optional": true + }, + "@blocknote/xl-email-exporter": { + "optional": true + }, + "@blocknote/xl-odt-exporter": { + "optional": true + }, + "@blocknote/xl-pdf-exporter": { + "optional": true + }, + "@react-email/components": { + "optional": true + }, + "@react-pdf/math": { + "optional": true + }, + "@react-pdf/renderer": { + "optional": true + }, + "docx": { + "optional": true + }, + "mathjax-full": { + "optional": true + }, + "mathml2omml": { + "optional": true + } + } +} diff --git a/packages/math-block/src/block/createReactMathBlockSpec.test.tsx b/packages/math-block/src/block/createReactMathBlockSpec.test.tsx new file mode 100644 index 0000000000..d2d2e31796 --- /dev/null +++ b/packages/math-block/src/block/createReactMathBlockSpec.test.tsx @@ -0,0 +1,373 @@ +import { BlockNoteEditor, BlockNoteSchema } from "@blocknote/core"; +import { BlockNoteViewRaw } from "@blocknote/react"; +import { flushSync } from "react-dom"; +import { createRoot, Root } from "react-dom/client"; +import { afterEach, beforeEach, describe, expect, it } from "vite-plus/test"; +import { createReactMathBlockSpec } from "./createReactMathBlockSpec.js"; + +/** + * @vitest-environment jsdom + */ + +// The math block isn't a default block, so register it in a custom schema. +const schema = BlockNoteSchema.create().extend({ + blockSpecs: { mathBlock: createReactMathBlockSpec() }, +}); + +describe("Math block source popup keyboard handling", () => { + let editor: BlockNoteEditor; + let div: HTMLDivElement; + let root: Root; + + beforeEach(() => { + // jsdom doesn't implement `elementFromPoint`, which ProseMirror's mousedown + // handler calls to map coordinates to a document position. The click tests + // dispatch mouse events, so stub it out (returning `null` makes ProseMirror + // bail gracefully) to avoid an uncaught error. + if (!document.elementFromPoint) { + document.elementFromPoint = () => null; + } + + // The keyboard handler listens on the editor DOM (capture phase), so the + // mount point must be in the document tree for dispatched keydowns to reach + // it - a detached element's events never propagate to `document`. + div = document.createElement("div"); + document.body.appendChild(div); + + editor = BlockNoteEditor.create({ schema }); + + // Rendered the same way as the inline math test: a `BlockNoteViewRaw` into a + // div, so the React node view mounts as it does in production. (The React + // block renders via a `ReactNodeViewRenderer` portal, so `editor.mount` + // isn't enough to get the preview into the DOM.) + root = createRoot(div); + flushSync(() => { + root.render(); + }); + }); + + afterEach(() => { + root.unmount(); + editor._tiptapEditor.destroy(); + editor = undefined as any; + div.remove(); + }); + + /** Yields to the event loop so store-driven React re-renders can flush. */ + function flush() { + return new Promise((resolve) => setTimeout(resolve, 0)); + } + + /** Replaces the document and waits for the React node views to render. */ + async function setup(blocks: any[]) { + editor.replaceBlocks(editor.document, blocks); + // The preview is rendered asynchronously by React, so wait for it before + // reading its DOM. + await flush(); + } + + /** The preview-with-source-popup root, which holds `data-open`. */ + function previewRoot(blockId: string): HTMLElement { + return div.querySelector( + `.bn-block[data-id="${blockId}"] .bn-preview-with-source-popup`, + ) as HTMLElement; + } + + /** Whether the source popup is open (the preview is being edited). */ + function isPopupOpen(blockId: string): boolean { + return previewRoot(blockId)?.getAttribute("data-open") === "true"; + } + + /** Dispatches a keydown as if the caret were in the block's (possibly + * hidden) source. Returns whether the default was prevented. + * + * Dispatched on the ProseMirror DOM rather than the preview element: + * ProseMirror ignores keydowns originating from the `contentEditable=false` + * preview region, so its keymap (Enter/Escape/arrows) wouldn't fire there. + * The handlers key off the selection (set via `setTextCursorPosition`), not + * the event target, so this matches a real caret in the source. */ + function pressKey(key: string, init: KeyboardEventInit = {}): boolean { + const event = new KeyboardEvent("keydown", { + key, + bubbles: true, + cancelable: true, + ...init, + }); + editor.prosemirrorView!.dom.dispatchEvent(event); + return event.defaultPrevented; + } + + describe("with adjacent paragraphs", () => { + beforeEach(async () => { + await setup([ + { id: "before", type: "paragraph", content: "before" }, + { id: "math", type: "mathBlock", content: "a^2" }, + { id: "after", type: "paragraph", content: "after" }, + ]); + editor.setTextCursorPosition("math", "start"); + }); + + it("Enter opens the source popup, keeping the caret in the source", async () => { + expect(isPopupOpen("math")).toBe(false); + + expect(pressKey("Enter")).toBe(true); + await flush(); + + expect(isPopupOpen("math")).toBe(true); + expect(editor.getTextCursorPosition().block.id).toBe("math"); + }); + + it("Enter again closes the source popup", async () => { + pressKey("Enter"); + await flush(); + expect(isPopupOpen("math")).toBe(true); + + expect(pressKey("Enter")).toBe(true); + await flush(); + + expect(isPopupOpen("math")).toBe(false); + expect(editor.getTextCursorPosition().block.id).toBe("math"); + }); + + it("Enter commits without inserting a line break", async () => { + pressKey("Enter"); + await flush(); + expect(isPopupOpen("math")).toBe(true); + + // Math uses `hardBreakShortcut: "shift+enter"`, so unlike the diagram + // block, a plain Enter closes the popup rather than extending the source + // with a newline (that needs Shift+Enter - see the next test). + pressKey("Enter"); + await flush(); + + expect(isPopupOpen("math")).toBe(false); + expect(editor.getBlock("math")!.content).toEqual([ + { type: "text", text: "a^2", styles: {} }, + ]); + }); + + it("Shift-Enter inserts a line break, keeping the popup open", async () => { + pressKey("Enter"); + await flush(); + expect(isPopupOpen("math")).toBe(true); + + // Shift+Enter extends the plain-text source with a literal newline + // (not a `hardBreak` node, which "plain" content can't hold) instead of + // committing, so multi-line LaTeX is possible. + pressKey("Enter", { shiftKey: true }); + await flush(); + + expect(isPopupOpen("math")).toBe(true); + expect(editor.getBlock("math")!.content).toEqual([ + { type: "text", text: "a^2\n", styles: {} }, + ]); + }); + + it("Escape closes the source popup while editing", async () => { + pressKey("Enter"); + await flush(); + expect(isPopupOpen("math")).toBe(true); + + expect(pressKey("Escape")).toBe(true); + await flush(); + + expect(isPopupOpen("math")).toBe(false); + }); + + it("Escape leaves an already-closed popup closed", async () => { + expect(isPopupOpen("math")).toBe(false); + + // Defers to the default; our handler doesn't touch the popup state. + pressKey("Escape"); + await flush(); + + expect(isPopupOpen("math")).toBe(false); + }); + + it("ArrowRight while the popup is hidden moves to the next block", () => { + expect(pressKey("ArrowRight")).toBe(true); + + expect(editor.getTextCursorPosition().block.id).toBe("after"); + }); + + it("ArrowLeft while the popup is hidden moves to the previous block", () => { + expect(pressKey("ArrowLeft")).toBe(true); + + expect(editor.getTextCursorPosition().block.id).toBe("before"); + }); + + it("ArrowRight with Ctrl/Cmd held defers to the default (no block jump)", () => { + // A modifier turns the arrow into a shortcut (e.g. word/line navigation), + // so we don't hijack it to move between blocks. + expect(pressKey("ArrowRight", { ctrlKey: true })).toBe(false); + expect(editor.getTextCursorPosition().block.id).toBe("math"); + + expect(pressKey("ArrowRight", { metaKey: true })).toBe(false); + expect(editor.getTextCursorPosition().block.id).toBe("math"); + }); + + it("ArrowRight while editing defers to the default (navigates the source)", async () => { + pressKey("Enter"); + await flush(); + expect(isPopupOpen("math")).toBe(true); + + // The arrow isn't hijacked: we stay in the math block with the popup open. + pressKey("ArrowRight"); + await flush(); + + expect(editor.getTextCursorPosition().block.id).toBe("math"); + expect(isPopupOpen("math")).toBe(true); + }); + + it("blocks character input while the popup is closed", () => { + expect(isPopupOpen("math")).toBe(false); + + // The source is hidden, so the keystroke is swallowed (prevented) rather + // than silently editing the source the user can't see. + expect(pressKey("a")).toBe(true); + }); + + it("defers character input to the default while the popup is open", async () => { + pressKey("Enter"); + await flush(); + expect(isPopupOpen("math")).toBe(true); + + // The source is visible, so we don't swallow the key - ProseMirror gets to + // handle it as normal text input. + expect(pressKey("a")).toBe(false); + }); + + it("Backspace deletes the whole block while the popup is closed", () => { + expect(isPopupOpen("math")).toBe(false); + + // The source is hidden, so Backspace removes the whole block rather than + // editing the source the user can't see. + expect(pressKey("Backspace")).toBe(true); + expect(editor.document.some((block) => block.id === "math")).toBe(false); + }); + + it("Delete deletes the whole block while the popup is closed", () => { + expect(isPopupOpen("math")).toBe(false); + + expect(pressKey("Delete")).toBe(true); + expect(editor.document.some((block) => block.id === "math")).toBe(false); + }); + + it("blocks indent keys while the popup is closed", () => { + expect(isPopupOpen("math")).toBe(false); + + // Tab edits the hidden source, so it's swallowed. + expect(pressKey("Tab")).toBe(true); + }); + + it("defers Ctrl/Cmd shortcuts to the default while the popup is closed", () => { + expect(isPopupOpen("math")).toBe(false); + + // Single-character keys are only blocked when no Ctrl/Cmd is held, so + // shortcuts pass through - keeping copy/select-all/find working. + // (Cut/paste also pass through; that's a known limitation.) + expect(pressKey("c", { ctrlKey: true })).toBe(false); + expect(pressKey("a", { ctrlKey: true })).toBe(false); + expect(pressKey("f", { ctrlKey: true })).toBe(false); + expect(pressKey("v", { metaKey: true })).toBe(false); + }); + + it("defers deletion keys to the default while the popup is open", async () => { + pressKey("Enter"); + await flush(); + expect(isPopupOpen("math")).toBe(true); + + // The source is visible, so deletion is allowed through to ProseMirror. + expect(pressKey("Backspace")).toBe(false); + }); + }); + + describe("at the document edges", () => { + it("ArrowLeft with no previous block defers to the default", async () => { + await setup([ + { id: "math", type: "mathBlock", content: "a^2" }, + { id: "after", type: "paragraph", content: "after" }, + ]); + editor.setTextCursorPosition("math", "start"); + + // No previous block to jump to, so the arrow isn't hijacked. + pressKey("ArrowLeft"); + expect(editor.getTextCursorPosition().block.id).toBe("math"); + }); + + it("ArrowRight with no next block defers to the default", async () => { + await setup([ + { id: "before", type: "paragraph", content: "before" }, + { id: "math", type: "mathBlock", content: "a^2" }, + ]); + editor.setTextCursorPosition("math", "start"); + + // No next block to jump to, so the arrow isn't hijacked. + pressKey("ArrowRight"); + expect(editor.getTextCursorPosition().block.id).toBe("math"); + }); + }); + + describe("clicking the preview", () => { + beforeEach(async () => { + await setup([ + { id: "before", type: "paragraph", content: "before" }, + { id: "math", type: "mathBlock", content: "a^2" }, + ]); + editor.setTextCursorPosition("before", "start"); + }); + + it("opens the popup and places the cursor at the source end", async () => { + const preview = div.querySelector( + `.bn-block[data-id="math"] .bn-preview-container`, + ) as HTMLElement; + + // The popup opens on the click; the mousedown is dispatched too for a + // realistic event sequence. + preview.dispatchEvent( + new MouseEvent("mousedown", { bubbles: true, cancelable: true }), + ); + preview.dispatchEvent( + new MouseEvent("click", { bubbles: true, cancelable: true }), + ); + await flush(); + + expect(isPopupOpen("math")).toBe(true); + expect(editor.getTextCursorPosition().block.id).toBe("math"); + // The cursor lands at the end of the source (after "a^2"). + expect(editor.prosemirrorView!.state.selection.$from.parentOffset).toBe( + 3, + ); + }); + }); + + describe("clicking the OK button", () => { + beforeEach(async () => { + await setup([ + { id: "before", type: "paragraph", content: "before" }, + { id: "math", type: "mathBlock", content: "a^2" }, + ]); + editor.setTextCursorPosition("math", "start"); + // Open the popup so the OK button has something to close. + pressKey("Enter"); + await flush(); + expect(isPopupOpen("math")).toBe(true); + }); + + it("closes the popup", async () => { + const okButton = div.querySelector( + `.bn-block[data-id="math"] .bn-code-block-source-popup-ok-button`, + ) as HTMLElement; + + okButton.dispatchEvent( + new MouseEvent("mousedown", { bubbles: true, cancelable: true }), + ); + okButton.dispatchEvent( + new MouseEvent("click", { bubbles: true, cancelable: true }), + ); + await flush(); + + expect(isPopupOpen("math")).toBe(false); + }); + }); +}); diff --git a/packages/math-block/src/block/createReactMathBlockSpec.tsx b/packages/math-block/src/block/createReactMathBlockSpec.tsx new file mode 100644 index 0000000000..c8cb18c33d --- /dev/null +++ b/packages/math-block/src/block/createReactMathBlockSpec.tsx @@ -0,0 +1,40 @@ +import { createBlockConfig } from "@blocknote/core"; +import { createReactBlockSpec } from "@blocknote/react"; + +import { MathBlockInputRulesExtension } from "./helpers/extensions/MathBlockInputRulesExtension.js"; +import { + parseBlockMathMLElement, + parseBlockMathMLContent, +} from "./helpers/parse/parseBlockMathMLElement.js"; +import { MathBlockPreviewWithPopup } from "./helpers/render/MathBlockPreviewWithPopup.js"; +import { BlockMathMLElement } from "./helpers/toExternalHTML/BlockMathMLElement.js"; + +export const createMathBlockConfig = createBlockConfig( + () => + ({ + type: "mathBlock" as const, + propSchema: {}, + content: "plain" as const, + }) as const, +); + +export type MathBlockConfig = ReturnType; + +export const createReactMathBlockSpec = createReactBlockSpec( + createMathBlockConfig, + { + meta: { + code: true, + defining: true, + isolating: false, + highlight: () => "latex", + hasPreview: true, + hardBreakShortcut: "shift+enter", + }, + parse: parseBlockMathMLElement, + parseContent: parseBlockMathMLContent, + render: MathBlockPreviewWithPopup, + toExternalHTML: BlockMathMLElement, + }, + [MathBlockInputRulesExtension], +); diff --git a/packages/math-block/src/block/getMathBlockTypeSelectItems.ts b/packages/math-block/src/block/getMathBlockTypeSelectItems.ts new file mode 100644 index 0000000000..1d3578215d --- /dev/null +++ b/packages/math-block/src/block/getMathBlockTypeSelectItems.ts @@ -0,0 +1,23 @@ +import { BlockNoteEditor } from "@blocknote/core"; +import { BlockTypeSelectItem } from "@blocknote/react"; +import { TbMathFunction } from "react-icons/tb"; + +import { getMathDictionary } from "../i18n/dictionary.js"; + +/** + * Block type select item for the Math block, for use with the formatting + * toolbar's `BlockTypeSelect` (spread into its `items` alongside the defaults). + * The Math block lives in an optional package, so it isn't part of the default + * items - this lets consumers opt it in. The name comes from the editor's + * math dictionary, like the default items' names come from its main + * dictionary. + */ +export const getMathBlockTypeSelectItems = ( + editor: BlockNoteEditor, +): BlockTypeSelectItem[] => [ + { + name: getMathDictionary(editor).block_type_select.name, + type: "mathBlock", + icon: TbMathFunction, + }, +]; diff --git a/packages/math-block/src/block/helpers/extensions/MathBlockInputRulesExtension.ts b/packages/math-block/src/block/helpers/extensions/MathBlockInputRulesExtension.ts new file mode 100644 index 0000000000..fe1efec88c --- /dev/null +++ b/packages/math-block/src/block/helpers/extensions/MathBlockInputRulesExtension.ts @@ -0,0 +1,24 @@ +import { createExtension } from "@blocknote/core"; + +/** + * Converts the current block into a math block when a LaTeX display-math + * delimiter is typed at its start: + * - `$$ ` (TeX display math) + * - `\[ ` (LaTeX display math) + * + * The matched delimiter is removed and the block is replaced with an empty + * math block, ready for the LaTeX source to be typed in. + */ +export const MathBlockInputRulesExtension = createExtension({ + key: "math-block-input-rules", + inputRules: [ + { + find: /^\$\$\s$/, + replace: () => ({ type: "mathBlock", props: {}, content: [] }), + }, + { + find: /^\\\[\s$/, + replace: () => ({ type: "mathBlock", props: {}, content: [] }), + }, + ], +}); diff --git a/packages/math-block/src/block/helpers/extensions/index.ts b/packages/math-block/src/block/helpers/extensions/index.ts new file mode 100644 index 0000000000..84c9f71ba3 --- /dev/null +++ b/packages/math-block/src/block/helpers/extensions/index.ts @@ -0,0 +1 @@ +export * from "./MathBlockInputRulesExtension.js"; diff --git a/packages/math-block/src/block/helpers/index.ts b/packages/math-block/src/block/helpers/index.ts new file mode 100644 index 0000000000..03c47b6db5 --- /dev/null +++ b/packages/math-block/src/block/helpers/index.ts @@ -0,0 +1,4 @@ +export * from "./extensions/index.js"; +export * from "./parse/index.js"; +export * from "./render/index.js"; +export * from "./toExternalHTML/index.js"; diff --git a/packages/math-block/src/block/helpers/parse/index.ts b/packages/math-block/src/block/helpers/parse/index.ts new file mode 100644 index 0000000000..257168fb3e --- /dev/null +++ b/packages/math-block/src/block/helpers/parse/index.ts @@ -0,0 +1 @@ +export * from "./parseBlockMathMLElement.js"; diff --git a/packages/math-block/src/block/helpers/parse/parseBlockMathMLElement.ts b/packages/math-block/src/block/helpers/parse/parseBlockMathMLElement.ts new file mode 100644 index 0000000000..4bc4b51ac2 --- /dev/null +++ b/packages/math-block/src/block/helpers/parse/parseBlockMathMLElement.ts @@ -0,0 +1,27 @@ +import { Fragment, type Schema } from "prosemirror-model"; + +export const parseBlockMathMLElement = (el: HTMLElement) => + el.nodeName.toLowerCase() === "math" && el.getAttribute("display") === "block" + ? {} + : undefined; + +export const parseBlockMathMLContent = ({ + el, + schema, +}: { + el: HTMLElement; + schema: Schema; +}) => { + const annotations = Array.from(el.getElementsByTagName("annotation")); + const texAnnotation = annotations.find( + (annotation) => annotation.getAttribute("encoding") === "application/x-tex", + ); + + const latex = texAnnotation?.textContent?.trim(); + + if (!latex) { + return undefined; + } + + return Fragment.from(schema.text(latex)); +}; diff --git a/packages/math-block/src/block/helpers/render/MathBlockPreviewWithPopup.tsx b/packages/math-block/src/block/helpers/render/MathBlockPreviewWithPopup.tsx new file mode 100644 index 0000000000..4b932b392b --- /dev/null +++ b/packages/math-block/src/block/helpers/render/MathBlockPreviewWithPopup.tsx @@ -0,0 +1,50 @@ +import { + PreviewPlaceholder, + ReactCustomBlockRenderProps, + SourceBlockWithPreview, +} from "@blocknote/react"; +import { TbMathFunction } from "react-icons/tb"; + +import { MathBlockConfig } from "../../createReactMathBlockSpec.js"; +import { plainContentToString } from "@blocknote/core"; +import { useLatexToMathMLString } from "../../../helpers/render/useLatexToMathML.js"; +import { getMathDictionary } from "../../../i18n/dictionary.js"; + +export const MathBlockPreviewWithPopup = ( + props: ReactCustomBlockRenderProps, +) => { + const source = plainContentToString(props.block.content).trim(); + const { mathMLString, error } = useLatexToMathMLString(source); + const dict = getMathDictionary(props.editor).block; + + return ( + + ) : undefined + } + error={error} + errorPreview={ + } + text={dict.preview_error_text} + /> + } + emptySourcePlaceholder={ + } + text={dict.add_source_text} + /> + } + sourcePlaceholder={dict.input_placeholder} + /> + ); +}; diff --git a/packages/math-block/src/block/helpers/render/index.ts b/packages/math-block/src/block/helpers/render/index.ts new file mode 100644 index 0000000000..9ace70ae91 --- /dev/null +++ b/packages/math-block/src/block/helpers/render/index.ts @@ -0,0 +1 @@ +export * from "./MathBlockPreviewWithPopup.js"; diff --git a/packages/math-block/src/block/helpers/toExternalHTML/BlockMathMLElement.tsx b/packages/math-block/src/block/helpers/toExternalHTML/BlockMathMLElement.tsx new file mode 100644 index 0000000000..b421550441 --- /dev/null +++ b/packages/math-block/src/block/helpers/toExternalHTML/BlockMathMLElement.tsx @@ -0,0 +1,34 @@ +import { ReactCustomBlockRenderProps } from "@blocknote/react"; +import type { ComponentType } from "react"; + +import { plainContentToString } from "@blocknote/core"; +import { latexToMathMLElement } from "../../../helpers/toExternalHTML/latexToMathMLElement.js"; +import { MathBlockConfig } from "../../createReactMathBlockSpec.js"; + +export const BlockMathMLElement = ({ + block, +}: ReactCustomBlockRenderProps) => { + const source = plainContentToString(block.content); + const { mathMLElement } = latexToMathMLElement(source); + if (!mathMLElement) { + return null; + } + + // `math` isn't part of React's built-in JSX types, so we alias it to a + // component type to render it as a JSX element. + const Math = "math" as unknown as ComponentType<{ + xmlns: string; + display: string; + alttext: string; + dangerouslySetInnerHTML: { __html: string }; + }>; + + return ( + + ); +}; diff --git a/packages/math-block/src/block/helpers/toExternalHTML/index.ts b/packages/math-block/src/block/helpers/toExternalHTML/index.ts new file mode 100644 index 0000000000..c7f50ed3fd --- /dev/null +++ b/packages/math-block/src/block/helpers/toExternalHTML/index.ts @@ -0,0 +1 @@ +export * from "./BlockMathMLElement.js"; diff --git a/packages/math-block/src/block/index.ts b/packages/math-block/src/block/index.ts new file mode 100644 index 0000000000..0db4fcfac2 --- /dev/null +++ b/packages/math-block/src/block/index.ts @@ -0,0 +1,3 @@ +export * from "./createReactMathBlockSpec.js"; +export * from "./getMathBlockTypeSelectItems.js"; +export * from "./helpers/index.js"; diff --git a/packages/math-block/src/docx-exporter/__snapshots__/withMathMappings/document.xml b/packages/math-block/src/docx-exporter/__snapshots__/withMathMappings/document.xml new file mode 100644 index 0000000000..a5b026caeb --- /dev/null +++ b/packages/math-block/src/docx-exporter/__snapshots__/withMathMappings/document.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + a + + + + + 2 + + + + + = + + + + + + + + + + + + + + b + + + + + 2 + + + + + + + + + + + + + + c + + + + + 2 + + + + + + + + + + Inline math: + + + + + + + + + e + + + + + + + + + + +1=0 + + + + + + + + + + + \ No newline at end of file diff --git a/packages/math-block/src/docx-exporter/docxExporter.test.ts b/packages/math-block/src/docx-exporter/docxExporter.test.ts new file mode 100644 index 0000000000..4994311ab6 --- /dev/null +++ b/packages/math-block/src/docx-exporter/docxExporter.test.ts @@ -0,0 +1,151 @@ +import { + BlockNoteSchema, + createPageBreakBlockSpec, + defaultBlockSpecs, +} from "@blocknote/core"; +import { + DOCXExporter, + docxDefaultSchemaMappings, +} from "@blocknote/xl-docx-exporter"; +import { testDocumentWithSourceBlocks } from "@shared/testDocument.js"; +import { testResolveFileUrl } from "@shared/util/testFileResolver.js"; +import { + BlobReader, + Entry, + FileEntry, + TextWriter, + ZipReader, +} from "@zip.js/zip.js"; +import { Packer } from "docx"; +import { describe, expect, it } from "vite-plus/test"; +import xmlFormat from "xml-formatter"; + +import { inlineMathMapping, mathBlockMapping } from "./index.js"; + +const getZIPEntryContent = (entries: Entry[], fileName: string) => { + const entry = entries.find((entry) => { + return entry.filename === fileName && !entry.directory; + }) as FileEntry | undefined; + + if (!entry) { + return ""; + } + + return entry.getData!(new TextWriter()); +}; + +const prettify = (sourceXml: string) => { + // Replace random ids like r:id="rIdll8_ocxarmodcwrnsavfb" + return xmlFormat(sourceXml) + .replace(/r:id="[a-zA-Z0-9_-]*"/g, 'r:id="FAKE-ID"') + .replace(/ Id="[a-zA-Z0-9_-]*"/g, ' Id="FAKE-ID"'); +}; + +describe("docx exporter mappings", () => { + it("should export math as native equations", { timeout: 10000 }, async () => { + // Assembled outside the constructor call as the schema doesn't include + // the math specs - like the default mappings, the math entries just + // map the block JSON. + const mappings = { + ...docxDefaultSchemaMappings, + blockMapping: { + ...docxDefaultSchemaMappings.blockMapping, + mathBlock: mathBlockMapping, + }, + inlineContentMapping: { + ...docxDefaultSchemaMappings.inlineContentMapping, + math: inlineMathMapping, + }, + }; + const exporter = new DOCXExporter( + BlockNoteSchema.create({ + blockSpecs: { + ...defaultBlockSpecs, + pageBreak: createPageBreakBlockSpec(), + }, + }), + mappings, + { resolveFileUrl: testResolveFileUrl }, + ); + + // The math block & inline math paragraph from the shared test document. + const doc = await exporter.toDocxJsDocument( + testDocumentWithSourceBlocks.filter((block) => + ["math-block", "paragraph-with-inline-math"].includes(block.id), + ), + { sectionOptions: {}, documentOptions: {}, locale: "en-US" }, + ); + + const blob = await Packer.toBlob(doc); + const zip = new ZipReader(new BlobReader(blob)); + const entries = await zip.getEntries(); + + await expect( + prettify(await getZIPEntryContent(entries, "word/document.xml")), + ).toMatchFileSnapshot("__snapshots__/withMathMappings/document.xml"); + }); + + it("should render error placeholders for invalid LaTeX", async () => { + // Assembled outside the constructor call as the schema doesn't include + // the math specs - like the default mappings, the math entries just map + // the block JSON. + const mappings = { + ...docxDefaultSchemaMappings, + blockMapping: { + ...docxDefaultSchemaMappings.blockMapping, + mathBlock: mathBlockMapping, + }, + inlineContentMapping: { + ...docxDefaultSchemaMappings.inlineContentMapping, + math: inlineMathMapping, + }, + }; + const exporter = new DOCXExporter( + BlockNoteSchema.create({ + blockSpecs: { + ...defaultBlockSpecs, + pageBreak: createPageBreakBlockSpec(), + }, + }), + mappings, + { resolveFileUrl: testResolveFileUrl }, + ); + + const doc = await exporter.toDocxJsDocument( + [ + { + id: "1", + type: "mathBlock", + props: {}, + content: [{ type: "text", text: "\\invalidcommand{", styles: {} }], + children: [], + }, + { + id: "2", + type: "paragraph", + props: {}, + content: [ + { type: "text", text: "Broken: ", styles: {} }, + { type: "math", props: {}, content: "\\invalidcommand{" }, + ], + children: [], + }, + ] as any, + { + sectionOptions: {}, + documentOptions: {}, + locale: "en-US", + }, + ); + + const blob = await Packer.toBlob(doc); + const zip = new ZipReader(new BlobReader(blob)); + const entries = await zip.getEntries(); + const documentXML = await getZIPEntryContent(entries, "word/document.xml"); + + // Mirrors the editor's error placeholder rather than dumping the LaTeX + // source on readers - once for the block, once for the inline math. + expect(documentXML.match(/Invalid formula/g)).toHaveLength(2); + expect(documentXML).not.toContain("m:oMath"); + }); +}); diff --git a/packages/math-block/src/docx-exporter/index.ts b/packages/math-block/src/docx-exporter/index.ts new file mode 100644 index 0000000000..291ca88690 --- /dev/null +++ b/packages/math-block/src/docx-exporter/index.ts @@ -0,0 +1,129 @@ +import type { + BlockConfig, + BlockFromConfigNoChildren, + Exporter, +} from "@blocknote/core"; +import { plainContentToString } from "@blocknote/core"; +import { AlignmentType, ImportedXmlComponent, Paragraph, TextRun } from "docx"; +import { mml2omml } from "mathml2omml"; + +import { latexToMathML } from "../exporterHelpers/latexToMathML.js"; +import { getMathExporterDictionary } from "../i18n/dictionary.js"; + +type MathBlock = BlockFromConfigNoChildren< + BlockConfig<"mathBlock", {}, "plain">, + any, + any +>; + +type InlineMath = { type: "math"; content: string }; + +// Converts LaTeX to a native Word equation (OMML): KaTeX renders the LaTeX +// to MathML, which is then converted to OMML. Invalid LaTeX comes back as a +// typed error, for the mappings to render as a placeholder. +function latexToDocxEquation( + latex: string, + inline: boolean, +): { error?: undefined; equation: ImportedXmlComponent } | { error: string } { + const mathML = latexToMathML(latex, inline); + if (mathML.error !== undefined) { + return { error: mathML.error }; + } + + // `fromXmlString` parses the XML *document*, returning a nameless wrapper + // component around the `m:oMath` root element - unwrap it, or it would + // serialize as an (invalid) `` element. + const imported = ImportedXmlComponent.fromXmlString( + mml2omml(mathML.mathML), + ) as any; + return { equation: imported.root[0] as ImportedXmlComponent }; +} + +// Mirrors the editor, which shows the error state in the preview +// placeholder, identifying the formula by its source. The parser's message +// is deliberately NOT rendered: it's authoring detail (and untranslated +// English) - the editor is where the author sees and fixes it. +function errorText( + exporter: Exporter, + source: string, +) { + return new TextRun({ + text: getMathExporterDictionary(exporter).invalid_formula(source), + italics: true, + color: "999999", + }); +} + +/** + * DOCX block mapping for `@blocknote/math-block` that renders math blocks as + * native (editable) Word equations. Invalid LaTeX renders an error + * placeholder (mirroring the editor): + * + * ```ts + * import { mathBlockMapping } from "@blocknote/math-block/docx-exporter"; + * + * new DOCXExporter(schema, { + * ...docxDefaultSchemaMappings, + * blockMapping: { + * ...docxDefaultSchemaMappings.blockMapping, + * mathBlock: mathBlockMapping, + * }, + * }); + * ``` + */ +export function mathBlockMapping( + block: MathBlock, + exporter: Exporter, +) { + const source = plainContentToString(block.content); + if (!source.trim()) { + return new Paragraph({}); + } + + const result = latexToDocxEquation(source, false); + if (result.error !== undefined) { + return new Paragraph({ + alignment: AlignmentType.CENTER, + children: [errorText(exporter, source)], + }); + } + + return new Paragraph({ + alignment: AlignmentType.CENTER, + children: [result.equation as any], + }); +} + +/** + * DOCX inline content mapping for `@blocknote/math-block` that renders + * inline math as native (editable) Word equations. Invalid LaTeX renders an + * error placeholder (mirroring the editor): + * + * ```ts + * import { inlineMathMapping } from "@blocknote/math-block/docx-exporter"; + * + * new DOCXExporter(schema, { + * ...docxDefaultSchemaMappings, + * inlineContentMapping: { + * ...docxDefaultSchemaMappings.inlineContentMapping, + * math: inlineMathMapping, + * }, + * }); + * ``` + */ +export function inlineMathMapping( + inlineContent: InlineMath, + exporter: Exporter, +) { + const source = inlineContent.content; + if (!source.trim()) { + return new TextRun({ text: "" }); + } + + const result = latexToDocxEquation(source, true); + if (result.error !== undefined) { + return errorText(exporter, source); + } + + return result.equation as any; +} diff --git a/packages/math-block/src/email-exporter/__snapshots__/emailExporter.test.tsx.snap b/packages/math-block/src/email-exporter/__snapshots__/emailExporter.test.tsx.snap new file mode 100644 index 0000000000..d94f85f3be --- /dev/null +++ b/packages/math-block/src/email-exporter/__snapshots__/emailExporter.test.tsx.snap @@ -0,0 +1,3 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`email exporter mappings > should export math as SVG images outside the browser > __snapshots__/emailWithMathMappings 1`] = `"
    a^2 = \\sqrt{b^2 + c^2}

    Inline math: e^{i\\pi} + 1 = 0

    "`; diff --git a/packages/math-block/src/email-exporter/emailExporter.test.tsx b/packages/math-block/src/email-exporter/emailExporter.test.tsx new file mode 100644 index 0000000000..766e1563e7 --- /dev/null +++ b/packages/math-block/src/email-exporter/emailExporter.test.tsx @@ -0,0 +1,131 @@ +import { + BlockNoteSchema, + createPageBreakBlockSpec, + defaultBlockSpecs, +} from "@blocknote/core"; +import { + createCIDImageDelivery, + ReactEmailExporter, + reactEmailDefaultSchemaMappings, +} from "@blocknote/xl-email-exporter"; +import { testDocumentWithSourceBlocks } from "@shared/testDocument.js"; +import { describe, expect, it } from "vite-plus/test"; + +import { + createInlineMathMapping, + createMathBlockMapping, + inlineMathMapping, + mathBlockMapping, +} from "./index.js"; + +const mathTestDocument = testDocumentWithSourceBlocks.filter((block) => + ["math-block", "paragraph-with-inline-math"].includes(block.id), +); + +const createExporter = (mappings: { + math: typeof mathBlockMapping; + inlineMath: typeof inlineMathMapping; +}) => + new ReactEmailExporter( + BlockNoteSchema.create({ + blockSpecs: { + ...defaultBlockSpecs, + pageBreak: createPageBreakBlockSpec(), + }, + }), + { + ...reactEmailDefaultSchemaMappings, + blockMapping: { + ...reactEmailDefaultSchemaMappings.blockMapping, + mathBlock: mappings.math, + }, + inlineContentMapping: { + ...reactEmailDefaultSchemaMappings.inlineContentMapping, + math: mappings.inlineMath, + }, + } as any, + ); + +describe("email exporter mappings", () => { + it("should export math as SVG images outside the browser", async () => { + const exporter = createExporter({ + math: mathBlockMapping, + inlineMath: inlineMathMapping, + }); + + // Without a browser (or a plugged-in rasterizer), formulas are embedded + // as SVG data URLs - MathJax's SVG output is environment-independent. + const html = await exporter.toReactEmailDocument(mathTestDocument as any); + expect(html).toContain("data:image/svg+xml;base64,"); + expect(html).toMatchSnapshot("__snapshots__/emailWithMathMappings"); + }); + + it("should render error placeholders for invalid LaTeX", async () => { + const exporter = createExporter({ + math: mathBlockMapping, + inlineMath: inlineMathMapping, + }); + + const html = await exporter.toReactEmailDocument([ + { + id: "1", + type: "mathBlock", + props: {}, + content: [{ type: "text", text: "\\invalidcommand{", styles: {} }], + children: [], + }, + { + id: "2", + type: "paragraph", + props: {}, + content: [ + { type: "text", text: "Broken: ", styles: {} }, + { type: "math", props: {}, content: "\\invalidcommand{" }, + ], + children: [], + }, + ] as any); + + // Mirrors the editor's error placeholder rather than dumping the LaTeX + // source on readers - once for the block, once for the inline math. + expect(html.match(/Invalid formula/g)).toHaveLength(2); + expect(html).not.toContain(" { + const imageDelivery = createCIDImageDelivery(); + const exporter = createExporter({ + math: createMathBlockMapping({ + imageDelivery, + // A stub rasterizer, standing in for e.g. @resvg/resvg-js on a + // server. + rasterize: async (svg) => ({ + mimeType: "image/png", + data: new Uint8Array([0, 0, 0]), + width: svg.width, + height: svg.height, + }), + }), + inlineMath: createInlineMathMapping({ imageDelivery }), + }); + + const html = await exporter.toReactEmailDocument(mathTestDocument as any); + + // The body references the attachments by CID; the image contents are + // collected for the caller to attach at send time - the rasterized + // block math as PNG, the inline math as SVG. + expect(html).toContain('src="cid:math-1@blocknote"'); + expect(html).toContain('src="cid:math-2@blocknote"'); + expect(imageDelivery.attachments).toHaveLength(2); + expect(imageDelivery.attachments[0]).toEqual({ + cid: "math-1@blocknote", + filename: "math-1.png", + content: "AAAA", + encoding: "base64", + contentType: "image/png", + contentDisposition: "inline", + }); + expect(imageDelivery.attachments[1].contentType).toBe("image/svg+xml"); + expect(imageDelivery.attachments[1].filename).toBe("math-2.svg"); + }); +}); diff --git a/packages/math-block/src/email-exporter/index.tsx b/packages/math-block/src/email-exporter/index.tsx new file mode 100644 index 0000000000..63b8f19b5c --- /dev/null +++ b/packages/math-block/src/email-exporter/index.tsx @@ -0,0 +1,204 @@ +import type { + BlockConfig, + BlockFromConfigNoChildren, + Exporter, +} from "@blocknote/core"; +import { plainContentToString } from "@blocknote/core"; +import { + dataURLImageDelivery, + ReactEmailImageDelivery, +} from "@blocknote/xl-email-exporter"; +import { Img, Text } from "@react-email/components"; + +import { + latexToMathSVG, + RasterizeSVG, + rasterizeSVGInBrowser, +} from "../exporterHelpers/renderMathToImage.js"; + +type MathBlock = BlockFromConfigNoChildren< + BlockConfig<"mathBlock", {}, "plain">, + any, + any +>; + +type InlineMath = { type: "math"; content: string }; + +export { + latexToMathSVG, + rasterizeSVGInBrowser, +} from "../exporterHelpers/renderMathToImage.js"; +export type { + RasterizeSVG, + SVGExportImage, +} from "../exporterHelpers/renderMathToImage.js"; +import { getMathExporterDictionary } from "../i18n/dictionary.js"; + +type MathImageOptions = { + /** + * Rasterizes the formula SVG to a raster image. Defaults to the built-in + * canvas rasterizer in the browser; elsewhere (e.g. server-side email + * rendering), the formula is embedded as an SVG instead - pass a + * rasterizer (e.g. backed by `@resvg/resvg-js` or `sharp`) to get PNGs + * there, which more email clients display. + */ + rasterize?: RasterizeSVG; + /** + * How generated images get into the email: embedded as data URLs + * (default), or e.g. as inline `cid:` attachments via + * `createCIDImageDelivery` from `@blocknote/xl-email-exporter` - the most + * widely supported option (Gmail and Outlook block data URLs). + */ + imageDelivery?: ReactEmailImageDelivery; +}; + +// Emails render body text at 16px. +const FONT_SIZE_PIXELS = 16; + +// Mirrors the editor, which shows the error state in the preview +// placeholder, identifying the formula by its source. The parser's message +// is deliberately NOT rendered: it's authoring detail (and untranslated +// English) - the editor is where the author sees and fixes it. +function errorText( + exporter: Exporter, + source: string, +): string { + return getMathExporterDictionary(exporter).invalid_formula(source); +} + +/** + * Creates an email block mapping for `@blocknote/math-block` that renders + * math blocks as images, with the LaTeX source as the alt text. Invalid + * LaTeX renders an error placeholder (mirroring the editor). See + * {@link MathImageOptions} for how images are generated and delivered: + * + * ```ts + * import { createMathBlockMapping } from "@blocknote/math-block/email-exporter"; + * + * new ReactEmailExporter(schema, { + * ...reactEmailDefaultSchemaMappings, + * blockMapping: { + * ...reactEmailDefaultSchemaMappings.blockMapping, + * mathBlock: createMathBlockMapping({ imageDelivery }), + * }, + * }); + * ``` + */ +export function createMathBlockMapping(options?: MathImageOptions) { + return async ( + block: MathBlock, + exporter: Exporter, + ) => { + const source = plainContentToString(block.content); + if (!source.trim()) { + return ; + } + + // Rasterized when possible (see `MathImageOptions.rasterize`), embedded + // as SVG otherwise. Rasterization and delivery failures are unexpected + // and propagate (failing the export) rather than being rendered to + // readers. + const rasterize = + options?.rasterize ?? + (typeof document !== "undefined" ? rasterizeSVGInBrowser : undefined); + + const result = latexToMathSVG(source, { + inline: false, + fontSize: FONT_SIZE_PIXELS, + }); + if (result.error !== undefined) { + return ( + + {errorText(exporter, source)} + + ); + } + + const image = rasterize ? await rasterize(result.image) : result.image; + const src = (options?.imageDelivery ?? dataURLImageDelivery).deliver({ + ...image, + name: "math", + }); + + return ( + {source} + ); + }; +} + +/** + * Creates an email inline content mapping for `@blocknote/math-block` that + * renders inline math as images flowing with the text, with the LaTeX + * source as the alt text. Inline content renders synchronously, so the + * formula is always embedded as an SVG (never rasterized) - email clients + * that don't render SVG show the alt text. Invalid LaTeX renders an error + * placeholder (mirroring the editor): + * + * ```ts + * import { createInlineMathMapping } from "@blocknote/math-block/email-exporter"; + * + * new ReactEmailExporter(schema, { + * ...reactEmailDefaultSchemaMappings, + * inlineContentMapping: { + * ...reactEmailDefaultSchemaMappings.inlineContentMapping, + * math: createInlineMathMapping({ imageDelivery }), + * }, + * }); + * ``` + */ +export function createInlineMathMapping( + options?: Pick, +) { + return ( + inlineContent: InlineMath, + exporter: Exporter, + ) => { + const source = inlineContent.content; + if (!source.trim()) { + return ; + } + + const result = latexToMathSVG(source, { + inline: true, + fontSize: FONT_SIZE_PIXELS, + }); + if (result.error !== undefined) { + return ( + {errorText(exporter, source)} + ); + } + + const src = (options?.imageDelivery ?? dataURLImageDelivery).deliver({ + ...result.image, + name: "math", + }); + + return ( + {source} + ); + }; +} + +/** + * Email block mapping for `@blocknote/math-block` with the default options - + * see {@link createMathBlockMapping}. + */ +export const mathBlockMapping = createMathBlockMapping(); + +/** + * Email inline content mapping for `@blocknote/math-block` with the default + * options - see {@link createInlineMathMapping}. + */ +export const inlineMathMapping = createInlineMathMapping(); diff --git a/packages/math-block/src/exporterHelpers/latexToMathML.ts b/packages/math-block/src/exporterHelpers/latexToMathML.ts new file mode 100644 index 0000000000..d8ee60774f --- /dev/null +++ b/packages/math-block/src/exporterHelpers/latexToMathML.ts @@ -0,0 +1,40 @@ +import katex from "katex"; + +// Converts LaTeX to MathML (via KaTeX). The DOCX exporter mapping converts +// it further to OMML, the ODT mapping embeds it directly as a formula +// object. Invalid LaTeX is expected (the source is user input), so it's +// returned as a typed error - with a message safe to show to readers - +// rather than thrown. +export function latexToMathML( + latex: string, + inline: boolean, +): { error?: undefined; mathML: string } | { error: string } { + let katexOutput: string; + try { + katexOutput = katex.renderToString(latex, { + displayMode: !inline, + output: "mathml", + throwOnError: true, + }); + } catch (error) { + // The boundary that converts KaTeX's parse throw into the typed result. + // Only `ParseError`s are expected (invalid user LaTeX) - their messages + // are safe to show to readers. Anything else is a bug and propagates. + // `ParseError` is read off the same `katex` object whose + // `renderToString` just ran, so unlike a separate class import it can't + // diverge under bundler interop. + if (!(error instanceof katex.ParseError)) { + throw error; + } + return { error: error.message }; + } + + // KaTeX wraps the MathML in a `span`; callers only need the `math` + // element itself. + const mathML = katexOutput.match(//)?.[0]; + if (!mathML) { + throw new Error("No MathML found in KaTeX output"); + } + + return { mathML }; +} diff --git a/packages/math-block/src/exporterHelpers/renderMathToImage.browser.test.ts b/packages/math-block/src/exporterHelpers/renderMathToImage.browser.test.ts new file mode 100644 index 0000000000..a46fefb6de --- /dev/null +++ b/packages/math-block/src/exporterHelpers/renderMathToImage.browser.test.ts @@ -0,0 +1,33 @@ +import { exportImageToDataURL } from "@blocknote/core"; +import { decodeAndSample } from "@shared/util/browserImageTestUtil.js"; +import { describe, expect, test } from "vite-plus/test"; + +import { latexToMathSVG, rasterizeSVGInBrowser } from "./renderMathToImage.js"; + +// Browser unit tests for the browser-only rasterizer - the `RasterizeSVG` +// implementation that the (node) unit suites replace with stubs. Runs in the +// tests package's browser suite. +describe("rasterizeSVGInBrowser", () => { + test("rasterizes at the requested scale", async () => { + const result = latexToMathSVG("a^2 = \\sqrt{b^2 + c^2}", { + inline: false, + fontSize: 16, + }); + if (result.error !== undefined) { + throw new Error(`Expected a successful conversion: ${result.error}`); + } + + const raster = await rasterizeSVGInBrowser(result.image, 3); + + expect(raster.mimeType).toBe("image/png"); + // The raster keeps the display dimensions; the pixel data is scaled. + expect(raster.width).toBe(result.image.width); + expect(raster.height).toBe(result.image.height); + const { width, height, inkedPixels } = await decodeAndSample( + exportImageToDataURL(raster), + ); + expect(width).toBeGreaterThanOrEqual(Math.floor(raster.width * 3)); + expect(height).toBeGreaterThanOrEqual(Math.floor(raster.height * 3)); + expect(inkedPixels).toBeGreaterThan(0); + }); +}); diff --git a/packages/math-block/src/exporterHelpers/renderMathToImage.test.ts b/packages/math-block/src/exporterHelpers/renderMathToImage.test.ts new file mode 100644 index 0000000000..73661f8214 --- /dev/null +++ b/packages/math-block/src/exporterHelpers/renderMathToImage.test.ts @@ -0,0 +1,67 @@ +import { exportImageToDataURL } from "@blocknote/core"; +import { describe, expect, it } from "vite-plus/test"; + +import { latexToMathSVG } from "./renderMathToImage.js"; + +describe("latexToMathSVG", () => { + it("converts LaTeX to a sized SVG image", () => { + const result = latexToMathSVG("e^{i\\pi} + 1 = 0", { + inline: true, + fontSize: 16, + }); + + if (result.error !== undefined) { + throw new Error(`Expected a successful conversion: ${result.error}`); + } + expect(result.image.mimeType).toBe("image/svg+xml"); + expect(result.image.width).toBeGreaterThan(0); + expect(result.image.height).toBeGreaterThan(0); + expect(new TextDecoder().decode(result.image.data)).toMatch(/^ { + const result = latexToMathSVG("\\invalidcommand{", { + inline: true, + fontSize: 16, + }); + + expect(result.error).toBeDefined(); + }); + + it("sets the SVG's intrinsic dimensions to the display size", () => { + const result = latexToMathSVG("e^{i\\pi} + 1 = 0", { + inline: true, + fontSize: 16, + }); + + if (result.error !== undefined) { + throw new Error(`Expected a successful conversion: ${result.error}`); + } + const svg = new TextDecoder().decode(result.image.data); + // MathJax's `ex`-based dimensions must be replaced with explicit ones, + // or renderers fall back to a default size. + expect(svg).toContain(`width="${Math.ceil(result.image.width)}"`); + expect(svg).toContain(`height="${Math.ceil(result.image.height)}"`); + expect(svg).not.toMatch(/width="[\d.]+ex"/); + expect(svg).not.toMatch(/height="[\d.]+ex"/); + }); + + it("round-trips through exportImageToDataURL", () => { + const result = latexToMathSVG("e^{i\\pi} + 1 = 0", { + inline: true, + fontSize: 16, + }); + + if (result.error !== undefined) { + throw new Error(`Expected a successful conversion: ${result.error}`); + } + const dataURL = exportImageToDataURL(result.image); + expect(dataURL).toMatch(/^data:image\/svg\+xml;base64,/); + const bytes = Uint8Array.from(atob(dataURL.split(",")[1]), (char) => + char.charCodeAt(0), + ); + expect(new TextDecoder().decode(bytes)).toBe( + new TextDecoder().decode(result.image.data), + ); + }); +}); diff --git a/packages/math-block/src/exporterHelpers/renderMathToImage.ts b/packages/math-block/src/exporterHelpers/renderMathToImage.ts new file mode 100644 index 0000000000..bd24f76e08 --- /dev/null +++ b/packages/math-block/src/exporterHelpers/renderMathToImage.ts @@ -0,0 +1,209 @@ +import type { ExportImage } from "@blocknote/core"; +import { liteAdaptor } from "mathjax-full/js/adaptors/liteAdaptor.js"; +import { RegisterHTMLHandler } from "mathjax-full/js/handlers/html.js"; +import { TeX } from "mathjax-full/js/input/tex.js"; +import TexError from "mathjax-full/js/input/tex/TexError.js"; +import { mathjax } from "mathjax-full/js/mathjax.js"; + +// `mathjax-full` ships CommonJS, and depending on the consumer's bundler +// interop the default import above is either the class itself or a +// `{ default: class }` namespace object (observed with Vite serving the +// package from source). Resolve whichever is the constructor - using the +// namespace directly makes `instanceof` throw "Right-hand side of +// 'instanceof' is not callable" on the first invalid formula. +function isTexError(error: unknown): error is InstanceType { + const texErrorClass: unknown = (TexError as any).default ?? TexError; + return typeof texErrorClass === "function" && error instanceof texErrorClass; +} +import { SVG } from "mathjax-full/js/output/svg.js"; + +// Registers the TeX packages listed in `TEX_PACKAGES` below - a curated set +// with roughly KaTeX's coverage (what the editor itself renders), rather +// than `AllPackages`, which would pull every package (mhchem, physics, +// bussproofs, ...) into the bundle. +import "mathjax-full/js/input/tex/ams/AmsConfiguration.js"; +import "mathjax-full/js/input/tex/boldsymbol/BoldsymbolConfiguration.js"; +import "mathjax-full/js/input/tex/braket/BraketConfiguration.js"; +import "mathjax-full/js/input/tex/cancel/CancelConfiguration.js"; +import "mathjax-full/js/input/tex/color/ColorConfiguration.js"; +import "mathjax-full/js/input/tex/mathtools/MathtoolsConfiguration.js"; +import "mathjax-full/js/input/tex/newcommand/NewcommandConfiguration.js"; +import "mathjax-full/js/input/tex/noundefined/NoUndefinedConfiguration.js"; +import "mathjax-full/js/input/tex/textmacros/TextMacrosConfiguration.js"; +import "mathjax-full/js/input/tex/unicode/UnicodeConfiguration.js"; + +const TEX_PACKAGES = [ + "base", + "ams", + "boldsymbol", + "braket", + "cancel", + "color", + "mathtools", + "newcommand", + "noundefined", + "textmacros", + "unicode", +]; + +// MathJax (rather than KaTeX, which the math block itself renders with) is +// used for image-based export: its SVG output is self-contained paths, so it +// rasterizes without needing the KaTeX webfonts. `mathjax-full` is an +// optional peer dependency - when exporting math to PDF it's already +// installed transitively via `@react-pdf/math`. +let mathDocument: ReturnType | undefined; +let documentAdaptor: ReturnType | undefined; + +function getMathDocument() { + if (!mathDocument || !documentAdaptor) { + documentAdaptor = liteAdaptor(); + RegisterHTMLHandler(documentAdaptor); + mathDocument = mathjax.document("", { + InputJax: new TeX({ + packages: TEX_PACKAGES, + // MathJax renders TeX errors as error text by default - throw + // instead, so the conversion boundary in `latexToMathSVG` can return + // them as typed errors. + formatError: (_jax: unknown, err: TexError) => { + throw err; + }, + }), + OutputJax: new SVG({ fontCache: "none" }), + }); + } + return { mathDocument, documentAdaptor }; +} + +/** + * An {@link ExportImage} known to hold SVG markup - what + * {@link latexToMathSVG} produces and rasterizers consume, so passing a + * raster image to a rasterizer is a compile-time error. + */ +export type SVGExportImage = ExportImage & { mimeType: "image/svg+xml" }; + +// The ex height (x-height) of MathJax's font, as a fraction of its em size - +// MathJax sizes its SVG output in `ex` units, and this converts them to the +// target's units via the surrounding font size. +const EX_PER_EM = 0.442; + +/** + * Converts LaTeX to a self-contained {@link SVGExportImage} (via MathJax). + * Synchronous and environment-independent. Invalid LaTeX is expected (the + * source is user input), so it's returned as a typed error - with a message + * safe to show to readers - rather than thrown. + * + * The image's `width`/`height` are display dimensions, derived from + * `fontSize` - the surrounding font's size in the target's units (points, + * CSS pixels, ...) - and also set as the SVG's intrinsic dimensions, so + * renderers display it at the right size. + */ +export function latexToMathSVG( + latex: string, + options: { inline: boolean; fontSize: number }, +): { error?: undefined; image: SVGExportImage } | { error: string } { + const { mathDocument, documentAdaptor } = getMathDocument(); + + let node: unknown; + try { + node = mathDocument.convert(latex, { display: !options.inline }); + } catch (error) { + // The boundary that converts MathJax's TeX-error throw (see + // `formatError` above) into the typed result. Only `TexError`s are + // expected (invalid user LaTeX) - anything else is a bug and propagates. + if (!isTexError(error)) { + throw error; + } + return { error: error.message }; + } + + // The conversion returns an `mjx-container` wrapper; only the `svg` + // element itself is needed. + const svgNode = documentAdaptor.firstChild(node as any) as any; + const widthEx = parseFloat(documentAdaptor.getAttribute(svgNode, "width")); + const heightEx = parseFloat(documentAdaptor.getAttribute(svgNode, "height")); + if ( + documentAdaptor.kind(svgNode) !== "svg" || + isNaN(widthEx) || + isNaN(heightEx) + ) { + throw new Error("No SVG found in MathJax output"); + } + + // MathJax sizes the SVG in `ex` units; replace them with explicit pixel + // dimensions, or renderers fall back to a default size. + const width = widthEx * options.fontSize * EX_PER_EM; + const height = heightEx * options.fontSize * EX_PER_EM; + documentAdaptor.setAttribute(svgNode, "width", Math.ceil(width)); + documentAdaptor.setAttribute(svgNode, "height", Math.ceil(height)); + + return { + image: { + mimeType: "image/svg+xml", + data: new TextEncoder().encode(documentAdaptor.outerHTML(svgNode)), + width, + height, + }, + }; +} + +/** + * Rasterizes an {@link SVGExportImage} (from {@link latexToMathSVG}) to a + * raster image - rendered above its display size so it stays sharp in the + * exported document, at a scale of the implementation's choosing; the + * returned image keeps the display dimensions. The default implementation + * ({@link rasterizeSVGInBrowser}) needs a browser; exporters running + * elsewhere plug in their own (e.g. backed by `@resvg/resvg-js`'s `fitTo` + * zoom or `sharp`'s density). + */ +export type RasterizeSVG = (svg: SVGExportImage) => Promise; + +const DEFAULT_RASTER_SCALE = 2; + +/** + * Rasterizes an {@link SVGExportImage} to a PNG via a canvas, at `scale` + * times its display size. The screen's device pixel ratio is deliberately + * not consulted for the scale, since the output goes into documents, not + * onto the current screen. Browser-only. + */ +export async function rasterizeSVGInBrowser( + svg: SVGExportImage, + scale: number = DEFAULT_RASTER_SCALE, +): Promise { + const width = Math.max(1, Math.ceil(svg.width * scale)); + const height = Math.max(1, Math.ceil(svg.height * scale)); + + // The scale goes into the SVG's intrinsic dimensions (rather than only + // the canvas): browsers rasterize an SVG image at its intrinsic size and + // upscale the bitmap when drawn larger, which would blur the output. + const svgElement = new DOMParser().parseFromString( + new TextDecoder().decode(svg.data), + "image/svg+xml", + ).documentElement; + svgElement.setAttribute("width", String(width)); + svgElement.setAttribute("height", String(height)); + + const image = new Image(); + image.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent( + new XMLSerializer().serializeToString(svgElement), + )}`; + await image.decode(); + + const canvas = document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + canvas.getContext("2d")!.drawImage(image, 0, 0, canvas.width, canvas.height); + + const blob = await new Promise((resolve) => + canvas.toBlob(resolve, "image/png"), + ); + if (!blob) { + throw new Error("Canvas produced no PNG data"); + } + + return { + mimeType: "image/png", + data: new Uint8Array(await blob.arrayBuffer()), + width: svg.width, + height: svg.height, + }; +} diff --git a/packages/math-block/src/getMathSlashMenuItems.tsx b/packages/math-block/src/getMathSlashMenuItems.tsx new file mode 100644 index 0000000000..21992b794b --- /dev/null +++ b/packages/math-block/src/getMathSlashMenuItems.tsx @@ -0,0 +1,74 @@ +import { + BlockNoteEditor, + SourceBlockWithPreviewExtension, +} from "@blocknote/core"; +import { insertOrUpdateBlockForSlashMenu } from "@blocknote/core/extensions"; +import { DefaultReactSuggestionItem } from "@blocknote/react"; +import { TextSelection } from "prosemirror-state"; +import { TbMathFunction } from "react-icons/tb"; + +import { getMathDictionary } from "./i18n/dictionary.js"; + +/** + * Slash menu items for the Math block and inline Math content, for use with + * the suggestion menu (combine with the default items via `combineByGroup`). + * The Math specs live in an optional package, so the items aren't part of the + * defaults - this lets consumers opt them in. Only items whose spec is + * actually in the editor's schema are returned. + */ +export function getMathSlashMenuItems( + editor: BlockNoteEditor, +): Omit[] { + const items: Omit[] = []; + + if ("mathBlock" in editor.schema.blockSchema) { + items.push({ + ...getMathDictionary(editor).slash_menu.math_block, + icon: , + onItemClick: () => { + const block = insertOrUpdateBlockForSlashMenu(editor, { + type: "mathBlock", + }); + // Opens the new block's source popup so the equation can be typed + // right away. + editor + .getExtension(SourceBlockWithPreviewExtension) + ?.store.setState((state) => ({ ...state, popupOpen: block.id })); + requestAnimationFrame(() => { + editor.setTextCursorPosition(block.id, "end"); + editor.focus(); + }); + }, + }); + } + + if ("math" in editor.schema.inlineContentSchema) { + items.push({ + ...getMathDictionary(editor).slash_menu.inline_math, + icon: , + onItemClick: () => { + const view = editor.prosemirrorView!; + const insertPos = view.state.selection.from; + + editor.insertInlineContent([ + { type: "math", content: "" }, + // Adds a trailing space so the cursor can leave the equation. + " ", + ]); + // Moves the cursor into the (empty) equation, which opens its source + // popup so it can be typed right away. + requestAnimationFrame(() => { + const view = editor.prosemirrorView!; + view.dispatch( + view.state.tr.setSelection( + TextSelection.create(view.state.doc, insertPos + 1), + ), + ); + editor.focus(); + }); + }, + }); + } + + return items; +} diff --git a/packages/math-block/src/helpers/index.ts b/packages/math-block/src/helpers/index.ts new file mode 100644 index 0000000000..782657090d --- /dev/null +++ b/packages/math-block/src/helpers/index.ts @@ -0,0 +1,3 @@ +export * from "./latexToHTMLString.js"; +export * from "./render/index.js"; +export * from "./toExternalHTML/index.js"; diff --git a/packages/math-block/src/helpers/latexToHTMLString.ts b/packages/math-block/src/helpers/latexToHTMLString.ts new file mode 100644 index 0000000000..c87575d51d --- /dev/null +++ b/packages/math-block/src/helpers/latexToHTMLString.ts @@ -0,0 +1,28 @@ +import katex from "katex"; +import "katex/dist/katex.min.css"; + +export const latexToHTMLString = ( + latex: string, + inline = false, + external = false, +) => { + try { + return { + htmlString: katex.renderToString(latex, { + throwOnError: true, + displayMode: !inline, + output: external ? "mathml" : "htmlAndMathml", + }), + error: undefined, + }; + } catch (error) { + return { + htmlString: katex.renderToString(latex, { + throwOnError: false, + displayMode: !inline, + output: external ? "mathml" : "htmlAndMathml", + }), + error: error instanceof Error ? error.message : String(error), + }; + } +}; diff --git a/packages/math-block/src/helpers/render/index.ts b/packages/math-block/src/helpers/render/index.ts new file mode 100644 index 0000000000..ff76ef360b --- /dev/null +++ b/packages/math-block/src/helpers/render/index.ts @@ -0,0 +1 @@ +export * from "./useLatexToMathML.js"; diff --git a/packages/math-block/src/helpers/render/useLatexToMathML.ts b/packages/math-block/src/helpers/render/useLatexToMathML.ts new file mode 100644 index 0000000000..3fd97a7496 --- /dev/null +++ b/packages/math-block/src/helpers/render/useLatexToMathML.ts @@ -0,0 +1,14 @@ +import { useRef } from "react"; + +import { latexToHTMLString } from "../latexToHTMLString.js"; + +export const useLatexToMathMLString = (latex: string, inline = false) => { + const lastValidMathMLStringRef = useRef(""); + + const { htmlString: mathMLString, error } = latexToHTMLString(latex, inline); + if (!error || lastValidMathMLStringRef.current === "") { + lastValidMathMLStringRef.current = mathMLString; + } + + return { mathMLString: lastValidMathMLStringRef.current, error }; +}; diff --git a/packages/math-block/src/helpers/toExternalHTML/index.ts b/packages/math-block/src/helpers/toExternalHTML/index.ts new file mode 100644 index 0000000000..da198d5f83 --- /dev/null +++ b/packages/math-block/src/helpers/toExternalHTML/index.ts @@ -0,0 +1 @@ +export * from "./latexToMathMLElement.js"; diff --git a/packages/math-block/src/helpers/toExternalHTML/latexToMathMLElement.ts b/packages/math-block/src/helpers/toExternalHTML/latexToMathMLElement.ts new file mode 100644 index 0000000000..0b72fe2159 --- /dev/null +++ b/packages/math-block/src/helpers/toExternalHTML/latexToMathMLElement.ts @@ -0,0 +1,16 @@ +import { latexToHTMLString } from "../latexToHTMLString.js"; + +export const latexToMathMLElement = (latex: string, inline = false) => { + const { htmlString: mathMLString, error } = latexToHTMLString( + latex, + inline, + true, + ); + + // Katex wraps the `math` element in a `span`, which we don't need. + const wrapper = document.createElement("div"); + wrapper.innerHTML = mathMLString; + const mathMLElement = wrapper.querySelector("math") as MathMLElement; + + return { mathMLElement, error }; +}; diff --git a/packages/math-block/src/i18n/dictionary.ts b/packages/math-block/src/i18n/dictionary.ts new file mode 100644 index 0000000000..88ec5dace1 --- /dev/null +++ b/packages/math-block/src/i18n/dictionary.ts @@ -0,0 +1,33 @@ +import { BlockNoteEditor, Exporter } from "@blocknote/core"; + +import { en } from "./locales/en.js"; + +export type MathDictionary = typeof en; + +/** + * Returns the Math dictionary for the editor. The Math block/inline content are + * localized by merging a `math` dictionary into the editor's dictionary (see + * the exported `locales`); when the host hasn't provided one, the bundled + * English strings are used, so the blocks work without extra setup. + */ +export function getMathDictionary( + editor: BlockNoteEditor, +): MathDictionary { + return ((editor.dictionary as any).math as MathDictionary | undefined) ?? en; +} + +/** + * Returns the Math exporter strings. Exporters are localized independently + * of an editor: the host passes a dictionary to the exporter's options + * (see `ExporterOptions.dictionary`), and the math strings are read from + * its `math` section - the same shape merged into editor dictionaries - + * falling back to the bundled English strings. + */ +export function getMathExporterDictionary( + exporter: Exporter, +): MathDictionary["exporter"] { + return ( + ((exporter.options.dictionary as any)?.math as MathDictionary | undefined) + ?.exporter ?? en.exporter + ); +} diff --git a/packages/math-block/src/i18n/locales/ar.ts b/packages/math-block/src/i18n/locales/ar.ts new file mode 100644 index 0000000000..3cf96a16bb --- /dev/null +++ b/packages/math-block/src/i18n/locales/ar.ts @@ -0,0 +1,35 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const ar: MathDictionary = { + block: { + add_source_text: "إضافة معادلة LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "معادلة غير صالحة (انقر للتعديل)", + }, + inline: { + add_source_text: "إضافة معادلة LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "معادلة غير صالحة (انقر للتعديل)", + }, + slash_menu: { + math_block: { + title: "معادلة مستقلة", + subtext: "كتلة معادلة رياضية مستقلة", + aliases: ["رياضيات", "معادلة", "صيغة", "latex"], + group: "متقدم", + }, + inline_math: { + title: "معادلة ضمن السطر", + subtext: "رموز رياضية داخل النص", + aliases: ["رياضيات", "معادلة", "صيغة", "latex"], + group: "متقدم", + }, + }, + block_type_select: { + name: "معادلة", + }, + exporter: { + invalid_formula: (source: string) => + `صيغة غير صالحة "\u2068${source}\u2069"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/de.ts b/packages/math-block/src/i18n/locales/de.ts new file mode 100644 index 0000000000..319d2679ce --- /dev/null +++ b/packages/math-block/src/i18n/locales/de.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const de: MathDictionary = { + block: { + add_source_text: "LaTeX-Gleichung hinzufügen", + input_placeholder: "E = mc^2", + preview_error_text: "Ungültige Gleichung (zum Bearbeiten klicken)", + }, + inline: { + add_source_text: "LaTeX-Gleichung hinzufügen", + input_placeholder: "E = mc^2", + preview_error_text: "Ungültige Gleichung (zum Bearbeiten klicken)", + }, + slash_menu: { + math_block: { + title: "Blockgleichung", + subtext: "Eigenständiger Gleichungsblock", + aliases: ["mathe", "latex", "formel", "gleichung"], + group: "Erweitert", + }, + inline_math: { + title: "Inline-Gleichung", + subtext: "Mathematische Symbole im Text", + aliases: ["mathe", "latex", "formel", "gleichung"], + group: "Erweitert", + }, + }, + block_type_select: { + name: "Gleichung", + }, + exporter: { + invalid_formula: (source: string) => `Ungültige Formel "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/en.ts b/packages/math-block/src/i18n/locales/en.ts new file mode 100644 index 0000000000..44f42f5a00 --- /dev/null +++ b/packages/math-block/src/i18n/locales/en.ts @@ -0,0 +1,32 @@ +export const en = { + block: { + add_source_text: "Add a LaTeX equation", + input_placeholder: "E = mc^2", + preview_error_text: "Invalid equation (click to edit)", + }, + inline: { + add_source_text: "Add a LaTeX equation", + input_placeholder: "E = mc^2", + preview_error_text: "Invalid equation (click to edit)", + }, + slash_menu: { + math_block: { + title: "Block Equation", + subtext: "Standalone math equation block", + aliases: ["math", "latex", "formula", "equation"], + group: "Advanced", + }, + inline_math: { + title: "Inline Equation", + subtext: "Math symbols in text", + aliases: ["math", "latex", "formula", "equation"], + group: "Advanced", + }, + }, + block_type_select: { + name: "Equation", + }, + exporter: { + invalid_formula: (source: string) => `Invalid formula "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/es.ts b/packages/math-block/src/i18n/locales/es.ts new file mode 100644 index 0000000000..cdaacfbbdc --- /dev/null +++ b/packages/math-block/src/i18n/locales/es.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const es: MathDictionary = { + block: { + add_source_text: "Agregar ecuación LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Ecuación no válida (haz clic para editar)", + }, + inline: { + add_source_text: "Agregar ecuación LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Ecuación no válida (haz clic para editar)", + }, + slash_menu: { + math_block: { + title: "Bloque de Ecuación", + subtext: "Bloque de ecuación matemática independiente", + aliases: ["matemáticas", "latex", "fórmula", "ecuación"], + group: "Avanzado", + }, + inline_math: { + title: "Ecuación en línea", + subtext: "Símbolos matemáticos en el texto", + aliases: ["matemáticas", "latex", "fórmula", "ecuación"], + group: "Avanzado", + }, + }, + block_type_select: { + name: "Ecuación", + }, + exporter: { + invalid_formula: (source: string) => `Fórmula no válida "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/fa.ts b/packages/math-block/src/i18n/locales/fa.ts new file mode 100644 index 0000000000..309896aa75 --- /dev/null +++ b/packages/math-block/src/i18n/locales/fa.ts @@ -0,0 +1,35 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const fa: MathDictionary = { + block: { + add_source_text: "افزودن معادله LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "معادله نامعتبر (برای ویرایش کلیک کنید)", + }, + inline: { + add_source_text: "افزودن معادله LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "معادله نامعتبر (برای ویرایش کلیک کنید)", + }, + slash_menu: { + math_block: { + title: "بلوک معادله", + subtext: "بلوک معادله ریاضی مستقل", + aliases: ["ریاضی", "فرمول", "معادله", "latex"], + group: "پیشرفته", + }, + inline_math: { + title: "معادله درون‌خطی", + subtext: "نمادهای ریاضی درون متن", + aliases: ["ریاضی", "فرمول", "معادله", "latex"], + group: "پیشرفته", + }, + }, + block_type_select: { + name: "معادله", + }, + exporter: { + invalid_formula: (source: string) => + `فرمول نامعتبر "\u2068${source}\u2069"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/fr.ts b/packages/math-block/src/i18n/locales/fr.ts new file mode 100644 index 0000000000..005eaf3d6b --- /dev/null +++ b/packages/math-block/src/i18n/locales/fr.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const fr: MathDictionary = { + block: { + add_source_text: "Ajouter une équation LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Équation non valide (cliquez pour modifier)", + }, + inline: { + add_source_text: "Ajouter une équation LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Équation non valide (cliquez pour modifier)", + }, + slash_menu: { + math_block: { + title: "Bloc d'équation", + subtext: "Bloc d'équation mathématique autonome", + aliases: ["maths", "latex", "formule", "équation"], + group: "Avancé", + }, + inline_math: { + title: "Équation en ligne", + subtext: "Symboles mathématiques dans le texte", + aliases: ["maths", "latex", "formule", "équation"], + group: "Avancé", + }, + }, + block_type_select: { + name: "Équation", + }, + exporter: { + invalid_formula: (source: string) => `Formule non valide "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/he.ts b/packages/math-block/src/i18n/locales/he.ts new file mode 100644 index 0000000000..efa5b5cb8c --- /dev/null +++ b/packages/math-block/src/i18n/locales/he.ts @@ -0,0 +1,35 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const he: MathDictionary = { + block: { + add_source_text: "הוסף משוואת LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "משוואה לא תקינה (לחץ לעריכה)", + }, + inline: { + add_source_text: "הוסף משוואת LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "משוואה לא תקינה (לחץ לעריכה)", + }, + slash_menu: { + math_block: { + title: "בלוק משוואה", + subtext: "בלוק משוואה מתמטית עצמאי", + aliases: ["מתמטיקה", "נוסחה", "משוואה", "latex"], + group: "מתקדם", + }, + inline_math: { + title: "משוואה בתוך השורה", + subtext: "סמלים מתמטיים בתוך הטקסט", + aliases: ["מתמטיקה", "נוסחה", "משוואה", "latex"], + group: "מתקדם", + }, + }, + block_type_select: { + name: "משוואה", + }, + exporter: { + invalid_formula: (source: string) => + `נוסחה לא חוקית "\u2068${source}\u2069"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/hr.ts b/packages/math-block/src/i18n/locales/hr.ts new file mode 100644 index 0000000000..26234cb776 --- /dev/null +++ b/packages/math-block/src/i18n/locales/hr.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const hr: MathDictionary = { + block: { + add_source_text: "Dodaj LaTeX jednadžbu", + input_placeholder: "E = mc^2", + preview_error_text: "Neispravna jednadžba (klikni za uređivanje)", + }, + inline: { + add_source_text: "Dodaj LaTeX jednadžbu", + input_placeholder: "E = mc^2", + preview_error_text: "Neispravna jednadžba (klikni za uređivanje)", + }, + slash_menu: { + math_block: { + title: "Jednadžba u bloku", + subtext: "Samostalni blok matematičke jednadžbe", + aliases: ["matematika", "formula", "jednadžba", "latex"], + group: "Napredno", + }, + inline_math: { + title: "Jednadžba u retku", + subtext: "Matematički simboli u tekstu", + aliases: ["matematika", "formula", "jednadžba", "latex"], + group: "Napredno", + }, + }, + block_type_select: { + name: "Jednadžba", + }, + exporter: { + invalid_formula: (source: string) => `Neispravna formula "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/index.ts b/packages/math-block/src/i18n/locales/index.ts new file mode 100644 index 0000000000..f92fca4228 --- /dev/null +++ b/packages/math-block/src/i18n/locales/index.ts @@ -0,0 +1,23 @@ +export * from "./ar.js"; +export * from "./de.js"; +export * from "./en.js"; +export * from "./es.js"; +export * from "./fa.js"; +export * from "./fr.js"; +export * from "./he.js"; +export * from "./hr.js"; +export * from "./is.js"; +export * from "./it.js"; +export * from "./ja.js"; +export * from "./ko.js"; +export * from "./nl.js"; +export * from "./no.js"; +export * from "./pl.js"; +export * from "./pt.js"; +export * from "./ru.js"; +export * from "./sk.js"; +export * from "./uk.js"; +export * from "./vi.js"; +export * from "./zh.js"; +export * from "./zh-tw.js"; +export * from "./uz.js"; diff --git a/packages/math-block/src/i18n/locales/is.ts b/packages/math-block/src/i18n/locales/is.ts new file mode 100644 index 0000000000..fe4595bad3 --- /dev/null +++ b/packages/math-block/src/i18n/locales/is.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const is: MathDictionary = { + block: { + add_source_text: "Bæta við LaTeX-jöfnu", + input_placeholder: "E = mc^2", + preview_error_text: "Ógild jafna (smelltu til að breyta)", + }, + inline: { + add_source_text: "Bæta við LaTeX-jöfnu", + input_placeholder: "E = mc^2", + preview_error_text: "Ógild jafna (smelltu til að breyta)", + }, + slash_menu: { + math_block: { + title: "Jöfnublokk", + subtext: "Sjálfstæð jöfnublokk", + aliases: ["stærðfræði", "formúla", "jafna", "latex"], + group: "Ítarlegt", + }, + inline_math: { + title: "Innfelld jafna", + subtext: "Stærðfræðitákn í texta", + aliases: ["stærðfræði", "formúla", "jafna", "latex"], + group: "Ítarlegt", + }, + }, + block_type_select: { + name: "Jafna", + }, + exporter: { + invalid_formula: (source: string) => `Ógild formúla "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/it.ts b/packages/math-block/src/i18n/locales/it.ts new file mode 100644 index 0000000000..7e3e8766f4 --- /dev/null +++ b/packages/math-block/src/i18n/locales/it.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const it: MathDictionary = { + block: { + add_source_text: "Aggiungi equazione LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Equazione non valida (clicca per modificare)", + }, + inline: { + add_source_text: "Aggiungi equazione LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Equazione non valida (clicca per modificare)", + }, + slash_menu: { + math_block: { + title: "Blocco Equazione", + subtext: "Blocco di equazione matematica indipendente", + aliases: ["matematica", "formula", "equazione", "latex"], + group: "Avanzato", + }, + inline_math: { + title: "Equazione in linea", + subtext: "Simboli matematici nel testo", + aliases: ["matematica", "formula", "equazione", "latex"], + group: "Avanzato", + }, + }, + block_type_select: { + name: "Equazione", + }, + exporter: { + invalid_formula: (source: string) => `Formula non valida "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/ja.ts b/packages/math-block/src/i18n/locales/ja.ts new file mode 100644 index 0000000000..fb45f14689 --- /dev/null +++ b/packages/math-block/src/i18n/locales/ja.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const ja: MathDictionary = { + block: { + add_source_text: "LaTeX数式を追加", + input_placeholder: "E = mc^2", + preview_error_text: "無効な数式(クリックして編集)", + }, + inline: { + add_source_text: "LaTeX数式を追加", + input_placeholder: "E = mc^2", + preview_error_text: "無効な数式(クリックして編集)", + }, + slash_menu: { + math_block: { + title: "数式ブロック", + subtext: "独立した数式ブロック", + aliases: ["数式", "すうしき", "math", "latex"], + group: "高度なブロック", + }, + inline_math: { + title: "インライン数式", + subtext: "テキスト内の数学記号", + aliases: ["数式", "すうしき", "math", "latex"], + group: "高度なブロック", + }, + }, + block_type_select: { + name: "数式", + }, + exporter: { + invalid_formula: (source: string) => `無効な数式 "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/ko.ts b/packages/math-block/src/i18n/locales/ko.ts new file mode 100644 index 0000000000..4ea265326c --- /dev/null +++ b/packages/math-block/src/i18n/locales/ko.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const ko: MathDictionary = { + block: { + add_source_text: "LaTeX 수식 추가", + input_placeholder: "E = mc^2", + preview_error_text: "잘못된 수식(클릭하여 편집)", + }, + inline: { + add_source_text: "LaTeX 수식 추가", + input_placeholder: "E = mc^2", + preview_error_text: "잘못된 수식(클릭하여 편집)", + }, + slash_menu: { + math_block: { + title: "수식 블록", + subtext: "독립된 수식 블록", + aliases: ["수식", "공식", "math", "latex"], + group: "고급", + }, + inline_math: { + title: "인라인 수식", + subtext: "텍스트 속 수학 기호", + aliases: ["수식", "공식", "math", "latex"], + group: "고급", + }, + }, + block_type_select: { + name: "수식", + }, + exporter: { + invalid_formula: (source: string) => `잘못된 수식 "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/nl.ts b/packages/math-block/src/i18n/locales/nl.ts new file mode 100644 index 0000000000..ad547a75e2 --- /dev/null +++ b/packages/math-block/src/i18n/locales/nl.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const nl: MathDictionary = { + block: { + add_source_text: "LaTeX-formule toevoegen", + input_placeholder: "E = mc^2", + preview_error_text: "Ongeldige formule (klik om te bewerken)", + }, + inline: { + add_source_text: "LaTeX-formule toevoegen", + input_placeholder: "E = mc^2", + preview_error_text: "Ongeldige formule (klik om te bewerken)", + }, + slash_menu: { + math_block: { + title: "Formuleblok", + subtext: "Losstaande wiskundige formule", + aliases: ["wiskunde", "formule", "vergelijking", "latex"], + group: "Geavanceerd", + }, + inline_math: { + title: "Inline formule", + subtext: "Wiskundige symbolen in de tekst", + aliases: ["wiskunde", "formule", "vergelijking", "latex"], + group: "Geavanceerd", + }, + }, + block_type_select: { + name: "Formule", + }, + exporter: { + invalid_formula: (source: string) => `Ongeldige formule "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/no.ts b/packages/math-block/src/i18n/locales/no.ts new file mode 100644 index 0000000000..3abc349e2d --- /dev/null +++ b/packages/math-block/src/i18n/locales/no.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const no: MathDictionary = { + block: { + add_source_text: "Legg til LaTeX-ligning", + input_placeholder: "E = mc^2", + preview_error_text: "Ugyldig ligning (klikk for å redigere)", + }, + inline: { + add_source_text: "Legg til LaTeX-ligning", + input_placeholder: "E = mc^2", + preview_error_text: "Ugyldig ligning (klikk for å redigere)", + }, + slash_menu: { + math_block: { + title: "Blokkligning", + subtext: "Frittstående ligningsblokk", + aliases: ["matte", "formel", "ligning", "latex"], + group: "Avansert", + }, + inline_math: { + title: "Innebygd ligning", + subtext: "Matematiske symboler i tekst", + aliases: ["matte", "formel", "ligning", "latex"], + group: "Avansert", + }, + }, + block_type_select: { + name: "Ligning", + }, + exporter: { + invalid_formula: (source: string) => `Ugyldig formel "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/pl.ts b/packages/math-block/src/i18n/locales/pl.ts new file mode 100644 index 0000000000..1222219735 --- /dev/null +++ b/packages/math-block/src/i18n/locales/pl.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const pl: MathDictionary = { + block: { + add_source_text: "Dodaj równanie LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Nieprawidłowe równanie (kliknij, aby edytować)", + }, + inline: { + add_source_text: "Dodaj równanie LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Nieprawidłowe równanie (kliknij, aby edytować)", + }, + slash_menu: { + math_block: { + title: "Równanie blokowe", + subtext: "Samodzielny blok równania matematycznego", + aliases: ["matematyka", "formuła", "równanie", "latex"], + group: "Zaawansowane", + }, + inline_math: { + title: "Równanie w tekście", + subtext: "Symbole matematyczne w tekście", + aliases: ["matematyka", "formuła", "równanie", "latex"], + group: "Zaawansowane", + }, + }, + block_type_select: { + name: "Równanie", + }, + exporter: { + invalid_formula: (source: string) => `Nieprawidłowa formuła "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/pt.ts b/packages/math-block/src/i18n/locales/pt.ts new file mode 100644 index 0000000000..0c693cd7e4 --- /dev/null +++ b/packages/math-block/src/i18n/locales/pt.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const pt: MathDictionary = { + block: { + add_source_text: "Adicionar equação LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Equação inválida (clique para editar)", + }, + inline: { + add_source_text: "Adicionar equação LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Equação inválida (clique para editar)", + }, + slash_menu: { + math_block: { + title: "Bloco de Equação", + subtext: "Bloco de equação matemática independente", + aliases: ["matemática", "fórmula", "equação", "latex"], + group: "Avançado", + }, + inline_math: { + title: "Equação em linha", + subtext: "Símbolos matemáticos no texto", + aliases: ["matemática", "fórmula", "equação", "latex"], + group: "Avançado", + }, + }, + block_type_select: { + name: "Equação", + }, + exporter: { + invalid_formula: (source: string) => `Fórmula inválida "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/ru.ts b/packages/math-block/src/i18n/locales/ru.ts new file mode 100644 index 0000000000..9ae7f6bfc8 --- /dev/null +++ b/packages/math-block/src/i18n/locales/ru.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const ru: MathDictionary = { + block: { + add_source_text: "Добавить формулу LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Некорректная формула (нажмите, чтобы изменить)", + }, + inline: { + add_source_text: "Добавить формулу LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Некорректная формула (нажмите, чтобы изменить)", + }, + slash_menu: { + math_block: { + title: "Блочная формула", + subtext: "Отдельный блок с математической формулой", + aliases: ["математика", "формула", "уравнение", "latex"], + group: "Продвинутый", + }, + inline_math: { + title: "Встроенная формула", + subtext: "Математические символы в тексте", + aliases: ["математика", "формула", "уравнение", "latex"], + group: "Продвинутый", + }, + }, + block_type_select: { + name: "Формула", + }, + exporter: { + invalid_formula: (source: string) => `Недопустимая формула "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/sk.ts b/packages/math-block/src/i18n/locales/sk.ts new file mode 100644 index 0000000000..3356fe2f62 --- /dev/null +++ b/packages/math-block/src/i18n/locales/sk.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const sk: MathDictionary = { + block: { + add_source_text: "Pridať rovnicu LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Neplatná rovnica (kliknutím upravíte)", + }, + inline: { + add_source_text: "Pridať rovnicu LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Neplatná rovnica (kliknutím upravíte)", + }, + slash_menu: { + math_block: { + title: "Bloková rovnica", + subtext: "Samostatný blok matematickej rovnice", + aliases: ["matematika", "vzorec", "rovnica", "latex"], + group: "Pokročilé", + }, + inline_math: { + title: "Rovnica v texte", + subtext: "Matematické symboly v texte", + aliases: ["matematika", "vzorec", "rovnica", "latex"], + group: "Pokročilé", + }, + }, + block_type_select: { + name: "Rovnica", + }, + exporter: { + invalid_formula: (source: string) => `Neplatný vzorec "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/uk.ts b/packages/math-block/src/i18n/locales/uk.ts new file mode 100644 index 0000000000..4ef1fe3b5e --- /dev/null +++ b/packages/math-block/src/i18n/locales/uk.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const uk: MathDictionary = { + block: { + add_source_text: "Додати формулу LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Некоректна формула (натисніть, щоб редагувати)", + }, + inline: { + add_source_text: "Додати формулу LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Некоректна формула (натисніть, щоб редагувати)", + }, + slash_menu: { + math_block: { + title: "Блокова формула", + subtext: "Окремий блок з математичною формулою", + aliases: ["математика", "формула", "рівняння", "latex"], + group: "Розширені", + }, + inline_math: { + title: "Вбудована формула", + subtext: "Математичні символи в тексті", + aliases: ["математика", "формула", "рівняння", "latex"], + group: "Розширені", + }, + }, + block_type_select: { + name: "Формула", + }, + exporter: { + invalid_formula: (source: string) => `Недійсна формула "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/uz.ts b/packages/math-block/src/i18n/locales/uz.ts new file mode 100644 index 0000000000..2da22e130f --- /dev/null +++ b/packages/math-block/src/i18n/locales/uz.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const uz: MathDictionary = { + block: { + add_source_text: "LaTeX tenglamasini qo‘shish", + input_placeholder: "E = mc^2", + preview_error_text: "Yaroqsiz tenglama (tahrirlash uchun bosing)", + }, + inline: { + add_source_text: "LaTeX tenglamasini qo‘shish", + input_placeholder: "E = mc^2", + preview_error_text: "Yaroqsiz tenglama (tahrirlash uchun bosing)", + }, + slash_menu: { + math_block: { + title: "Tenglama bloki", + subtext: "Mustaqil matematik tenglama bloki", + aliases: ["matematika", "formula", "tenglama", "latex"], + group: "Kengaytirilgan", + }, + inline_math: { + title: "Matn ichidagi tenglama", + subtext: "Matn ichidagi matematik belgilar", + aliases: ["matematika", "formula", "tenglama", "latex"], + group: "Kengaytirilgan", + }, + }, + block_type_select: { + name: "Tenglama", + }, + exporter: { + invalid_formula: (source: string) => `Yaroqsiz formula "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/vi.ts b/packages/math-block/src/i18n/locales/vi.ts new file mode 100644 index 0000000000..cbce3e0fa2 --- /dev/null +++ b/packages/math-block/src/i18n/locales/vi.ts @@ -0,0 +1,50 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const vi: MathDictionary = { + block: { + add_source_text: "Thêm phương trình LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Phương trình không hợp lệ (nhấp để chỉnh sửa)", + }, + inline: { + add_source_text: "Thêm phương trình LaTeX", + input_placeholder: "E = mc^2", + preview_error_text: "Phương trình không hợp lệ (nhấp để chỉnh sửa)", + }, + slash_menu: { + math_block: { + title: "Phương trình dạng khối", + subtext: "Khối phương trình toán học độc lập", + aliases: [ + "toán", + "công thức", + "phương trình", + "latex", + "toan", + "cong thuc", + "phuong trinh", + ], + group: "Nâng cao", + }, + inline_math: { + title: "Phương trình nội dòng", + subtext: "Ký hiệu toán học trong văn bản", + aliases: [ + "toán", + "công thức", + "phương trình", + "latex", + "toan", + "cong thuc", + "phuong trinh", + ], + group: "Nâng cao", + }, + }, + block_type_select: { + name: "Phương trình", + }, + exporter: { + invalid_formula: (source: string) => `Công thức không hợp lệ "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/zh-tw.ts b/packages/math-block/src/i18n/locales/zh-tw.ts new file mode 100644 index 0000000000..de5deb445f --- /dev/null +++ b/packages/math-block/src/i18n/locales/zh-tw.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const zhTW: MathDictionary = { + block: { + add_source_text: "新增 LaTeX 方程式", + input_placeholder: "E = mc^2", + preview_error_text: "無效的方程式(點擊編輯)", + }, + inline: { + add_source_text: "新增 LaTeX 方程式", + input_placeholder: "E = mc^2", + preview_error_text: "無效的方程式(點擊編輯)", + }, + slash_menu: { + math_block: { + title: "方程式區塊", + subtext: "獨立的數學方程式區塊", + aliases: ["數學", "公式", "方程式", "latex"], + group: "進階功能", + }, + inline_math: { + title: "行內方程式", + subtext: "文字中的數學符號", + aliases: ["數學", "公式", "方程式", "latex"], + group: "進階功能", + }, + }, + block_type_select: { + name: "方程式", + }, + exporter: { + invalid_formula: (source: string) => `無效的公式 "${source}"`, + }, +}; diff --git a/packages/math-block/src/i18n/locales/zh.ts b/packages/math-block/src/i18n/locales/zh.ts new file mode 100644 index 0000000000..912829eded --- /dev/null +++ b/packages/math-block/src/i18n/locales/zh.ts @@ -0,0 +1,34 @@ +import type { MathDictionary } from "../dictionary.js"; + +export const zh: MathDictionary = { + block: { + add_source_text: "添加 LaTeX 公式", + input_placeholder: "E = mc^2", + preview_error_text: "无效的公式(点击编辑)", + }, + inline: { + add_source_text: "添加 LaTeX 公式", + input_placeholder: "E = mc^2", + preview_error_text: "无效的公式(点击编辑)", + }, + slash_menu: { + math_block: { + title: "块级公式", + subtext: "独立的数学公式块", + aliases: ["数学", "公式", "方程", "latex"], + group: "高级功能", + }, + inline_math: { + title: "行内公式", + subtext: "文本中的数学符号", + aliases: ["数学", "公式", "方程", "latex"], + group: "高级功能", + }, + }, + block_type_select: { + name: "公式", + }, + exporter: { + invalid_formula: (source: string) => `无效的公式 "${source}"`, + }, +}; diff --git a/packages/math-block/src/index.ts b/packages/math-block/src/index.ts new file mode 100644 index 0000000000..cc56a711f3 --- /dev/null +++ b/packages/math-block/src/index.ts @@ -0,0 +1,8 @@ +import * as locales from "./i18n/locales/index.js"; + +export { locales }; +export * from "./i18n/dictionary.js"; +export * from "./block/index.js"; +export * from "./inlineContent/index.js"; +export * from "./helpers/index.js"; +export * from "./getMathSlashMenuItems.js"; diff --git a/packages/math-block/src/inlineContent/createReactMathInlineContentSpec.test.tsx b/packages/math-block/src/inlineContent/createReactMathInlineContentSpec.test.tsx new file mode 100644 index 0000000000..5284d2ca51 --- /dev/null +++ b/packages/math-block/src/inlineContent/createReactMathInlineContentSpec.test.tsx @@ -0,0 +1,261 @@ +import { BlockNoteEditor, BlockNoteSchema } from "@blocknote/core"; +import { BlockNoteViewRaw } from "@blocknote/react"; +import { Node } from "prosemirror-model"; +import { TextSelection } from "prosemirror-state"; +import { flushSync } from "react-dom"; +import { createRoot, Root } from "react-dom/client"; +import { afterEach, beforeEach, describe, expect, it } from "vite-plus/test"; +import { createReactInlineMathSpec } from "./createReactMathInlineContentSpec.js"; + +// TODO: migrate to react, and depreacte jsdom (use vitest browser test?) +/** + * @vitest-environment jsdom + */ + +// Inline math isn't default inline content, so register it in a custom schema. +const schema = BlockNoteSchema.create().extend({ + inlineContentSpecs: { math: createReactInlineMathSpec() }, +}); + +describe.skip("Inline math source popup", () => { + let editor: BlockNoteEditor; + let div: HTMLDivElement; + let root: Root; + + beforeEach(async () => { + // Rendered the same way as `setupTestEditor`: a `BlockNoteViewRaw` into a + // detached div, so the React node view mounts as it does in production. + div = document.createElement("div"); + + editor = BlockNoteEditor.create({ + schema, + trailingBlock: false, + initialContent: [ + { + id: "para", + type: "paragraph", + content: ["before ", { type: "math", content: "a^2" }, " after"], + }, + ], + }); + + root = createRoot(div); + flushSync(() => { + root.render(); + }); + // Let the React node view render before assertions read its DOM. + await flush(); + }); + + afterEach(() => { + root.unmount(); + editor._tiptapEditor.destroy(); + editor = undefined as any; + }); + + /** Yields to the event loop so store-driven React re-renders can flush. */ + function flush() { + return new Promise((resolve) => setTimeout(resolve, 0)); + } + + /** The inline math node and its position in the document. */ + function inlineMath(): { node: Node; pos: number } { + let result: { node: Node; pos: number } | undefined; + editor.prosemirrorState.doc.descendants((node, pos) => { + if (node.type.name === "math") { + result = { node, pos }; + return false; + } + return true; + }); + return result!; + } + + /** The preview-with-source-popup root, which holds `data-open`. */ + function previewRoot(): HTMLElement { + return div.querySelector(".bn-preview-with-source-popup") as HTMLElement; + } + + /** + * Whether the source popup is open. Unlike the block, there's no toggle flag: + * the popup is open exactly when the selection sits inside the inline math. + */ + function isPopupOpen(): boolean { + return previewRoot()?.getAttribute("data-open") === "true"; + } + + /** Places the selection at the given document position. */ + function setSelection(pos: number) { + const view = editor.prosemirrorView!; + view.dispatch( + view.state.tr.setSelection(TextSelection.create(view.state.doc, pos)), + ); + } + + /** Moves the caret to the end of the inline math source (opening the popup). */ + function selectSource() { + const { node, pos } = inlineMath(); + setSelection(pos + node.nodeSize - 1); + } + + /** Dispatches a keydown on the editor DOM, running the ProseMirror keymap. */ + function pressKey(key: string, init: KeyboardEventInit = {}): boolean { + const event = new KeyboardEvent("keydown", { + key, + bubbles: true, + cancelable: true, + ...init, + }); + editor.prosemirrorView!.dom.dispatchEvent(event); + return event.defaultPrevented; + } + + /** The name of the node the selection currently sits in. */ + function selectedNodeType(): string { + return editor.prosemirrorState.selection.$from.node().type.name; + } + + it("renders a MathML preview for the inline math source", () => { + // The source is non-empty, so the preview shows the rendered formula rather + // than the "add source" placeholder button. + expect(previewRoot()).not.toBeNull(); + expect(previewRoot().querySelector("math")).not.toBeNull(); + }); + + it("keeps the popup closed while the cursor is outside the inline math", () => { + editor.setTextCursorPosition("para", "start"); + + expect(isPopupOpen()).toBe(false); + }); + + it("opens the popup when the cursor moves into the source", async () => { + expect(isPopupOpen()).toBe(false); + + selectSource(); + await flush(); + + expect(isPopupOpen()).toBe(true); + // The whole inline content is highlighted while its source is being edited. + expect(previewRoot().classList.contains("ProseMirror-selectednode")).toBe( + true, + ); + }); + + it("closes the popup when the cursor moves back out", async () => { + selectSource(); + await flush(); + expect(isPopupOpen()).toBe(true); + + // Move the caret into the trailing paragraph text, outside the inline math. + editor.setTextCursorPosition("para", "end"); + await flush(); + + expect(isPopupOpen()).toBe(false); + }); + + describe("committing the source", () => { + beforeEach(async () => { + selectSource(); + await flush(); + expect(isPopupOpen()).toBe(true); + }); + + it("Enter moves the selection out of the source and closes the popup", async () => { + pressKey("Enter"); + await flush(); + + expect(isPopupOpen()).toBe(false); + // The caret lands just after the inline math, back in the paragraph. + expect(selectedNodeType()).not.toBe("math"); + }); + + it("Escape moves the selection out of the source and closes the popup", async () => { + pressKey("Escape"); + await flush(); + + expect(isPopupOpen()).toBe(false); + expect(selectedNodeType()).not.toBe("math"); + }); + + it("ArrowUp moves the selection just before the inline content", async () => { + const { pos } = inlineMath(); + + pressKey("ArrowUp"); + await flush(); + + expect(isPopupOpen()).toBe(false); + expect(selectedNodeType()).not.toBe("math"); + // The caret lands just before the inline math (at its start position). + expect(editor.prosemirrorState.selection.from).toBe(pos); + }); + + it("ArrowDown moves the selection just after the inline content", async () => { + const { node, pos } = inlineMath(); + + pressKey("ArrowDown"); + await flush(); + + expect(isPopupOpen()).toBe(false); + expect(selectedNodeType()).not.toBe("math"); + // The caret lands just after the inline math. + expect(editor.prosemirrorState.selection.from).toBe(pos + node.nodeSize); + }); + }); + + describe("clicking the preview", () => { + beforeEach(() => { + editor.setTextCursorPosition("para", "start"); + }); + + it("opens the popup and places the cursor at the source end", async () => { + const container = div.querySelector( + ".bn-preview-container", + ) as HTMLElement; + + // The popup opens on the click; the mousedown is dispatched too for a + // realistic event sequence. + container.dispatchEvent( + new MouseEvent("mousedown", { bubbles: true, cancelable: true }), + ); + container.dispatchEvent( + new MouseEvent("click", { bubbles: true, cancelable: true }), + ); + await flush(); + + expect(isPopupOpen()).toBe(true); + expect(selectedNodeType()).toBe("math"); + // The cursor lands at the end of the source (after "a^2"). + expect(editor.prosemirrorState.selection.$from.parentOffset).toBe(3); + }); + }); + + describe("clicking the OK button", () => { + beforeEach(async () => { + // Open the popup so the OK button has something to close. + selectSource(); + await flush(); + expect(isPopupOpen()).toBe(true); + }); + + it("closes the popup and moves the selection just after the inline content", async () => { + const { node, pos } = inlineMath(); + + const okButton = div.querySelector( + ".bn-code-block-source-popup-ok-button", + ) as HTMLElement; + + okButton.dispatchEvent( + new MouseEvent("mousedown", { bubbles: true, cancelable: true }), + ); + okButton.dispatchEvent( + new MouseEvent("click", { bubbles: true, cancelable: true }), + ); + await flush(); + + expect(isPopupOpen()).toBe(false); + expect(selectedNodeType()).not.toBe("math"); + // The caret lands just after the inline math. + expect(editor.prosemirrorState.selection.from).toBe(pos + node.nodeSize); + }); + }); +}); diff --git a/packages/math-block/src/inlineContent/createReactMathInlineContentSpec.tsx b/packages/math-block/src/inlineContent/createReactMathInlineContentSpec.tsx new file mode 100644 index 0000000000..1ec22d2fe3 --- /dev/null +++ b/packages/math-block/src/inlineContent/createReactMathInlineContentSpec.tsx @@ -0,0 +1,35 @@ +import { CustomInlineContentConfig } from "@blocknote/core"; +import { createReactInlineContentSpec } from "@blocknote/react"; + +import { MathInlineInputRulesExtension } from "./helpers/extensions/MathInlineInputRulesExtension.js"; +import { + parseInlineMathMLContent, + parseInlineMathMLElement, +} from "./helpers/parse/parseInlineMathMLElement.js"; +import { MathInlinePreviewWithPopup } from "./helpers/render/MathInlinePreviewWithPopup.js"; +import { InlineMathMLElement } from "./helpers/toExternalHTML/InlineMathMLElement.js"; + +export const mathInlineContentConfig = { + type: "math" as const, + propSchema: {}, + content: "plain" as const, +} satisfies CustomInlineContentConfig; + +export type MathInlineContentConfig = typeof mathInlineContentConfig; + +export const createReactInlineMathSpec = () => + createReactInlineContentSpec( + mathInlineContentConfig, + { + meta: { + code: true, + highlight: () => "latex", + hasPreview: true, + }, + parse: parseInlineMathMLElement, + parseContent: parseInlineMathMLContent, + render: MathInlinePreviewWithPopup, + toExternalHTML: InlineMathMLElement, + }, + [MathInlineInputRulesExtension], + ); diff --git a/packages/math-block/src/inlineContent/helpers/extensions/MathInlineInputRulesExtension.ts b/packages/math-block/src/inlineContent/helpers/extensions/MathInlineInputRulesExtension.ts new file mode 100644 index 0000000000..c93f200549 --- /dev/null +++ b/packages/math-block/src/inlineContent/helpers/extensions/MathInlineInputRulesExtension.ts @@ -0,0 +1,42 @@ +import { createExtension } from "@blocknote/core"; +import { + InputRule, + inputRules as inputRulesPlugin, +} from "@handlewithcare/prosemirror-inputrules"; + +import { mathInlineContentConfig } from "../../createReactMathInlineContentSpec.js"; + +/** + * Converts text wrapped in LaTeX inline-math delimiters into inline math + * content as it's typed: + * - `$...$` (TeX inline math) + * - `\(...\)` (LaTeX inline math) + * + * The delimiters are removed and the enclosed source becomes the inline math's + * content. + */ +export const MathInlineInputRulesExtension = createExtension({ + key: "math-inline-input-rules", + // Cannot use the `inputRules` field as it only allows for converting matched + // content to blocks. + prosemirrorPlugins: [ + inputRulesPlugin({ + rules: [/\$([^$]+)\$$/, /\\\((.+?)\\\)$/].map( + (find) => + new InputRule(find, (state, match, start, end) => { + const source = match[1]?.trim(); + const nodeType = state.schema.nodes[mathInlineContentConfig.type]; + if (!source || !nodeType) { + return null; + } + + return state.tr.replaceRangeWith( + start, + end, + nodeType.create(null, state.schema.text(source)), + ); + }), + ), + }), + ], +}); diff --git a/packages/math-block/src/inlineContent/helpers/extensions/index.ts b/packages/math-block/src/inlineContent/helpers/extensions/index.ts new file mode 100644 index 0000000000..cc91f3d80f --- /dev/null +++ b/packages/math-block/src/inlineContent/helpers/extensions/index.ts @@ -0,0 +1 @@ +export * from "./MathInlineInputRulesExtension.js"; diff --git a/packages/math-block/src/inlineContent/helpers/index.ts b/packages/math-block/src/inlineContent/helpers/index.ts new file mode 100644 index 0000000000..03c47b6db5 --- /dev/null +++ b/packages/math-block/src/inlineContent/helpers/index.ts @@ -0,0 +1,4 @@ +export * from "./extensions/index.js"; +export * from "./parse/index.js"; +export * from "./render/index.js"; +export * from "./toExternalHTML/index.js"; diff --git a/packages/math-block/src/inlineContent/helpers/parse/index.ts b/packages/math-block/src/inlineContent/helpers/parse/index.ts new file mode 100644 index 0000000000..0dc4eea7c7 --- /dev/null +++ b/packages/math-block/src/inlineContent/helpers/parse/index.ts @@ -0,0 +1 @@ +export * from "./parseInlineMathMLElement.js"; diff --git a/packages/math-block/src/inlineContent/helpers/parse/parseInlineMathMLElement.ts b/packages/math-block/src/inlineContent/helpers/parse/parseInlineMathMLElement.ts new file mode 100644 index 0000000000..bcfb874363 --- /dev/null +++ b/packages/math-block/src/inlineContent/helpers/parse/parseInlineMathMLElement.ts @@ -0,0 +1,28 @@ +import { Fragment, type Schema } from "prosemirror-model"; + +export const parseInlineMathMLElement = (el: HTMLElement) => + el.nodeName.toLowerCase() === "math" && + el.getAttribute("display") === "inline" + ? {} + : undefined; + +export const parseInlineMathMLContent = ({ + el, + schema, +}: { + el: HTMLElement; + schema: Schema; +}) => { + const annotations = Array.from(el.getElementsByTagName("annotation")); + const texAnnotation = annotations.find( + (annotation) => annotation.getAttribute("encoding") === "application/x-tex", + ); + + const latex = texAnnotation?.textContent?.trim(); + + if (!latex) { + return undefined; + } + + return Fragment.from(schema.text(latex)); +}; diff --git a/packages/math-block/src/inlineContent/helpers/render/MathInlinePreviewWithPopup.tsx b/packages/math-block/src/inlineContent/helpers/render/MathInlinePreviewWithPopup.tsx new file mode 100644 index 0000000000..c036f5e8b6 --- /dev/null +++ b/packages/math-block/src/inlineContent/helpers/render/MathInlinePreviewWithPopup.tsx @@ -0,0 +1,54 @@ +import { StyleSchema } from "@blocknote/core"; +import { + PreviewPlaceholder, + ReactCustomInlineContentRenderProps, + SourceInlineContentWithPreview, +} from "@blocknote/react"; +import { TbMathFunction } from "react-icons/tb"; + +import { useLatexToMathMLString } from "../../../helpers/render/useLatexToMathML.js"; +import { getMathDictionary } from "../../../i18n/dictionary.js"; +import { MathInlineContentConfig } from "../../createReactMathInlineContentSpec.js"; + +export const MathInlinePreviewWithPopup = ( + props: ReactCustomInlineContentRenderProps< + MathInlineContentConfig, + StyleSchema + >, +) => { + const source = props.inlineContent.content.trim(); + const { mathMLString, error } = useLatexToMathMLString(source, true); + const dict = getMathDictionary(props.editor).inline; + + return ( + + ) : undefined + } + error={error} + errorPreview={ + } + text={dict.preview_error_text} + /> + } + emptySourcePlaceholder={ + } + text={dict.add_source_text} + /> + } + sourcePlaceholder={dict.input_placeholder} + /> + ); +}; diff --git a/packages/math-block/src/inlineContent/helpers/render/index.ts b/packages/math-block/src/inlineContent/helpers/render/index.ts new file mode 100644 index 0000000000..36d99003c7 --- /dev/null +++ b/packages/math-block/src/inlineContent/helpers/render/index.ts @@ -0,0 +1 @@ +export * from "./MathInlinePreviewWithPopup.js"; diff --git a/packages/math-block/src/inlineContent/helpers/toExternalHTML/InlineMathMLElement.tsx b/packages/math-block/src/inlineContent/helpers/toExternalHTML/InlineMathMLElement.tsx new file mode 100644 index 0000000000..a313d8a1ae --- /dev/null +++ b/packages/math-block/src/inlineContent/helpers/toExternalHTML/InlineMathMLElement.tsx @@ -0,0 +1,36 @@ +import { StyleSchema } from "@blocknote/core"; +import { ReactCustomInlineContentRenderProps } from "@blocknote/react"; +import type { ComponentType } from "react"; + +import { latexToMathMLElement } from "../../../helpers/toExternalHTML/latexToMathMLElement.js"; +import { MathInlineContentConfig } from "../../createReactMathInlineContentSpec.js"; + +export const InlineMathMLElement = ({ + inlineContent, +}: ReactCustomInlineContentRenderProps< + MathInlineContentConfig, + StyleSchema +>) => { + const { mathMLElement } = latexToMathMLElement(inlineContent.content, true); + if (!mathMLElement) { + return null; + } + + // `math` isn't part of React's built-in JSX types, so we alias it to a + // component type to render it as a JSX element. + const Math = "math" as unknown as ComponentType<{ + xmlns: string; + display: string; + alttext: string; + dangerouslySetInnerHTML: { __html: string }; + }>; + + return ( + + ); +}; diff --git a/packages/math-block/src/inlineContent/helpers/toExternalHTML/index.ts b/packages/math-block/src/inlineContent/helpers/toExternalHTML/index.ts new file mode 100644 index 0000000000..91edfdaa0d --- /dev/null +++ b/packages/math-block/src/inlineContent/helpers/toExternalHTML/index.ts @@ -0,0 +1 @@ +export * from "./InlineMathMLElement.js"; diff --git a/packages/math-block/src/inlineContent/index.ts b/packages/math-block/src/inlineContent/index.ts new file mode 100644 index 0000000000..a3c09ffd17 --- /dev/null +++ b/packages/math-block/src/inlineContent/index.ts @@ -0,0 +1,2 @@ +export * from "./createReactMathInlineContentSpec.js"; +export * from "./helpers/index.js"; diff --git a/packages/math-block/src/odt-exporter/__snapshots__/withMathMappings/content.xml b/packages/math-block/src/odt-exporter/__snapshots__/withMathMappings/content.xml new file mode 100644 index 0000000000..aefe0cdde9 --- /dev/null +++ b/packages/math-block/src/odt-exporter/__snapshots__/withMathMappings/content.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Inline math: + + + + + + + \ No newline at end of file diff --git a/packages/math-block/src/odt-exporter/__snapshots__/withMathMappings/objects.xml b/packages/math-block/src/odt-exporter/__snapshots__/withMathMappings/objects.xml new file mode 100644 index 0000000000..db9967e38b --- /dev/null +++ b/packages/math-block/src/odt-exporter/__snapshots__/withMathMappings/objects.xml @@ -0,0 +1,81 @@ + + + + + + + + a + + + 2 + + + + = + + + + + + b + + + 2 + + + + + + + + + c + + + 2 + + + + + + + a^2 = \sqrt{b^2 + c^2} + + + + + + + + + + + e + + + + i + + + π + + + + + + + + + 1 + + + = + + + 0 + + + + e^{i\pi} + 1 = 0 + + + \ No newline at end of file diff --git a/packages/math-block/src/odt-exporter/__snapshots__/withMathMappings/styles.xml b/packages/math-block/src/odt-exporter/__snapshots__/withMathMappings/styles.xml new file mode 100644 index 0000000000..9a53dac929 --- /dev/null +++ b/packages/math-block/src/odt-exporter/__snapshots__/withMathMappings/styles.xml @@ -0,0 +1,599 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/math-block/src/odt-exporter/index.ts b/packages/math-block/src/odt-exporter/index.ts new file mode 100644 index 0000000000..07ada74686 --- /dev/null +++ b/packages/math-block/src/odt-exporter/index.ts @@ -0,0 +1,180 @@ +import type { + BlockConfig, + BlockFromConfigNoChildren, + Exporter, +} from "@blocknote/core"; +import { plainContentToString } from "@blocknote/core"; +import { ODTExporter } from "@blocknote/xl-odt-exporter"; +import { createElement } from "react"; + +import { latexToMathML } from "../exporterHelpers/latexToMathML.js"; +import { getMathExporterDictionary } from "../i18n/dictionary.js"; + +// The ODT elements are created with `createElement` string tags rather than +// JSX: the ODT exporter's namespaced tags (`text:p`, `draw:frame`, ...) need +// JSX runtime module augmentation plus a transform that allows namespaces, +// neither of which this package sets up for its React sources. + +type MathBlock = BlockFromConfigNoChildren< + BlockConfig<"mathBlock", {}, "plain">, + any, + any +>; + +type InlineMath = { type: "math"; content: string }; + +// A formula object, anchored as a character so it can sit inline among text. +// The MathML goes into an object sub-document (rather than inline into the +// frame) and the frame gets no explicit size, with a graphic style derived +// from the built-in "Formula" style - this exact combination makes +// LibreOffice load the formula as a real formula object and compute its +// natural size (sized frames get the formula scaled-to-fit instead, and +// inline MathML renders at zero size). +function formulaFrame(exporter: ODTExporter, mathML: string) { + const objectPath = exporter.registerObject( + '\n' + mathML, + ); + const styleName = exporter.registerStyle((name) => + createElement( + "style:style", + { + "style:family": "graphic", + "style:name": name, + "style:parent-style-name": "Formula", + }, + createElement("style:graphic-properties", { + "style:vertical-pos": "middle", + "style:vertical-rel": "text", + }), + ), + ); + + return createElement( + "draw:frame", + { "draw:style-name": styleName, "text:anchor-type": "as-char" }, + createElement("draw:object", { + "xlink:href": objectPath, + "xlink:type": "simple", + "xlink:show": "embed", + "xlink:actuate": "onLoad", + }), + ); +} + +// Mirrors the editor, which shows the error state in the preview +// placeholder, identifying the formula by its source. The parser's message +// is deliberately NOT rendered: it's authoring detail (and untranslated +// English) - the editor is where the author sees and fixes it. Styled muted like the other +// exporters' placeholders. +function errorText(source: string, exporter: ODTExporter) { + const styleName = exporter.registerStyle((name) => + createElement( + "style:style", + { "style:family": "text", "style:name": name }, + createElement("style:text-properties", { + "fo:font-style": "italic", + "fo:color": "#999999", + }), + ), + ); + + return createElement( + "text:span", + { "text:style-name": styleName }, + getMathExporterDictionary(exporter).invalid_formula(source), + ); +} + +/** + * ODT block mapping for `@blocknote/math-block` that renders math blocks as + * native (editable) formula objects. Invalid LaTeX renders an error + * placeholder (mirroring the editor): + * + * ```ts + * import { mathBlockMapping } from "@blocknote/math-block/odt-exporter"; + * + * new ODTExporter(schema, { + * ...odtDefaultSchemaMappings, + * blockMapping: { + * ...odtDefaultSchemaMappings.blockMapping, + * mathBlock: mathBlockMapping, + * }, + * }); + * ``` + */ +export function mathBlockMapping( + block: MathBlock, + exporter: Exporter, +) { + // Only the ODTExporter invokes ODT mappings, but mapping signatures are + // contravariant in the exporter parameter, so requiring the subclass here + // wouldn't satisfy the mapping type - hence the base type + cast. + const odtExporter = exporter as ODTExporter; + const source = plainContentToString(block.content); + if (!source.trim()) { + return createElement("text:p"); + } + + const mathML = latexToMathML(source, false); + if (mathML.error !== undefined) { + return createElement("text:p", null, errorText(source, odtExporter)); + } + + const styleName = odtExporter.registerStyle((name) => + createElement( + "style:style", + { + "style:family": "paragraph", + "style:name": name, + "style:parent-style-name": "Standard", + }, + createElement("style:paragraph-properties", { + "fo:text-align": "center", + }), + ), + ); + + return createElement( + "text:p", + { "text:style-name": styleName }, + formulaFrame(odtExporter, mathML.mathML), + ); +} + +/** + * ODT inline content mapping for `@blocknote/math-block` that renders inline + * math as native (editable) formula objects. Invalid LaTeX renders an error + * placeholder (mirroring the editor): + * + * ```ts + * import { inlineMathMapping } from "@blocknote/math-block/odt-exporter"; + * + * new ODTExporter(schema, { + * ...odtDefaultSchemaMappings, + * inlineContentMapping: { + * ...odtDefaultSchemaMappings.inlineContentMapping, + * math: inlineMathMapping, + * }, + * }); + * ``` + */ +export function inlineMathMapping( + inlineContent: InlineMath, + exporter: Exporter, +) { + // Only the ODTExporter invokes ODT mappings, but mapping signatures are + // contravariant in the exporter parameter, so requiring the subclass here + // wouldn't satisfy the mapping type - hence the base type + cast. + const odtExporter = exporter as ODTExporter; + const source = inlineContent.content; + if (!source.trim()) { + return createElement("text:span"); + } + + const mathML = latexToMathML(source, true); + if (mathML.error !== undefined) { + return errorText(source, odtExporter); + } + + return formulaFrame(odtExporter, mathML.mathML); +} diff --git a/packages/math-block/src/odt-exporter/odtExporter.test.ts b/packages/math-block/src/odt-exporter/odtExporter.test.ts new file mode 100644 index 0000000000..8fa245c29e --- /dev/null +++ b/packages/math-block/src/odt-exporter/odtExporter.test.ts @@ -0,0 +1,124 @@ +import { + BlockNoteSchema, + createPageBreakBlockSpec, + defaultBlockSpecs, +} from "@blocknote/core"; +import { + ODTExporter, + odtDefaultSchemaMappings, +} from "@blocknote/xl-odt-exporter"; +import { testODTDocumentAgainstSnapshot } from "@shared/util/odtTestUtil.js"; +import { testDocumentWithSourceBlocks } from "@shared/testDocument.js"; +import { testResolveFileUrl } from "@shared/util/testFileResolver.js"; +import { BlobReader, FileEntry, TextWriter, ZipReader } from "@zip.js/zip.js"; +import { beforeAll, describe, expect, it } from "vite-plus/test"; + +import { inlineMathMapping, mathBlockMapping } from "./index.js"; + +beforeAll(async () => { + // @ts-expect-error - Blob polyfill for Node test environment + globalThis.Blob = (await import("node:buffer")).Blob; +}); + +describe("odt exporter mappings", () => { + it("should render error placeholders for invalid LaTeX", async () => { + // Assembled outside the constructor call as the schema doesn't include + // the math specs - like the default mappings, the math entries just map + // the block JSON. + const mappings = { + ...odtDefaultSchemaMappings, + blockMapping: { + ...odtDefaultSchemaMappings.blockMapping, + mathBlock: mathBlockMapping, + }, + inlineContentMapping: { + ...odtDefaultSchemaMappings.inlineContentMapping, + math: inlineMathMapping, + }, + }; + const exporter = new ODTExporter( + BlockNoteSchema.create({ + blockSpecs: { + ...defaultBlockSpecs, + pageBreak: createPageBreakBlockSpec(), + }, + }), + mappings, + { resolveFileUrl: testResolveFileUrl }, + ); + + const odt = await exporter.toODTDocument([ + { + id: "1", + type: "mathBlock", + props: {}, + content: [{ type: "text", text: "\\invalidcommand{", styles: {} }], + children: [], + }, + { + id: "2", + type: "paragraph", + props: {}, + content: [ + { type: "text", text: "Broken: ", styles: {} }, + { type: "math", props: {}, content: "\\invalidcommand{" }, + ], + children: [], + }, + ] as any); + const zipReader = new ZipReader(new BlobReader(odt)); + const entries = await zipReader.getEntries(); + const contentXML = entries.find( + (entry) => entry.filename === "content.xml", + ) as FileEntry; + const content = await contentXML.getData(new TextWriter()); + + // Mirrors the editor's error placeholder rather than dumping the LaTeX + // source on readers - once for the block, once for the inline math. + expect(content.match(/Invalid formula/g)).toHaveLength(2); + expect(content).not.toContain("draw:object"); + }); + + it("should export math as native formulas", { timeout: 10000 }, async () => { + // Assembled outside the constructor call as the schema doesn't include + // the math specs - like the default mappings, the math entries just + // map the block JSON. + const mappings = { + ...odtDefaultSchemaMappings, + blockMapping: { + ...odtDefaultSchemaMappings.blockMapping, + mathBlock: mathBlockMapping, + }, + inlineContentMapping: { + ...odtDefaultSchemaMappings.inlineContentMapping, + math: inlineMathMapping, + }, + }; + const exporter = new ODTExporter( + BlockNoteSchema.create({ + blockSpecs: { + ...defaultBlockSpecs, + pageBreak: createPageBreakBlockSpec(), + }, + }), + mappings, + { resolveFileUrl: testResolveFileUrl }, + ); + + // The math block & inline math paragraph from the shared test document. + const odt = await exporter.toODTDocument( + testDocumentWithSourceBlocks.filter((block) => + ["math-block", "paragraph-with-inline-math"].includes(block.id), + ), + ); + // The math block & the inline math each embed one formula object. + await testODTDocumentAgainstSnapshot(odt, { + styles: "__snapshots__/withMathMappings/styles.xml", + content: "__snapshots__/withMathMappings/content.xml", + objects: { + snapshot: "__snapshots__/withMathMappings/objects.xml", + expectedCount: 2, + }, + }); + }); +}); diff --git a/packages/math-block/src/pdf-exporter/__snapshots__/exampleWithMathMappings.jsx b/packages/math-block/src/pdf-exporter/__snapshots__/exampleWithMathMappings.jsx new file mode 100644 index 0000000000..cd3a3b0a49 --- /dev/null +++ b/packages/math-block/src/pdf-exporter/__snapshots__/exampleWithMathMappings.jsx @@ -0,0 +1,60 @@ + + + + + + + {`a^2 = \sqrt{b^2 + c^2}`} + + + + + + + + + Inline math:{' '} + + + + + + + \ No newline at end of file diff --git a/packages/math-block/src/pdf-exporter/index.tsx b/packages/math-block/src/pdf-exporter/index.tsx new file mode 100644 index 0000000000..32b5ca5087 --- /dev/null +++ b/packages/math-block/src/pdf-exporter/index.tsx @@ -0,0 +1,174 @@ +import type { + BlockConfig, + BlockFromConfigNoChildren, + Exporter, +} from "@blocknote/core"; +import { exportImageToDataURL, plainContentToString } from "@blocknote/core"; +import { Math } from "@react-pdf/math"; +import { Image, Text, View } from "@react-pdf/renderer"; + +import { + latexToMathSVG, + RasterizeSVG, + rasterizeSVGInBrowser, +} from "../exporterHelpers/renderMathToImage.js"; +import { getMathExporterDictionary } from "../i18n/dictionary.js"; + +type MathBlock = BlockFromConfigNoChildren< + BlockConfig<"mathBlock", {}, "plain">, + any, + any +>; + +type InlineMath = { type: "math"; content: string }; + +export { + latexToMathSVG, + rasterizeSVGInBrowser, +} from "../exporterHelpers/renderMathToImage.js"; +export type { + RasterizeSVG, + SVGExportImage, +} from "../exporterHelpers/renderMathToImage.js"; + +// The PDF exporter's body text is 12pt (16px at 0.75 pixels per point). +const FONT_SIZE_POINTS = 16 * 0.75; + +// Mirrors the editor, which shows the error state in the preview +// placeholder, identifying the formula by its source. The parser's message +// is deliberately NOT rendered: it's authoring detail (and untranslated +// English) - the editor is where the author sees and fixes it. +function errorText( + exporter: Exporter, + source: string, + key: string, +) { + return ( + + {getMathExporterDictionary(exporter).invalid_formula(source)} + + ); +} + +/** + * PDF block mapping for `@blocknote/math-block` that renders math blocks as + * actual formulas (via `@react-pdf/math`, which converts the LaTeX to SVG + * paths with MathJax). Invalid LaTeX renders an error placeholder + * (mirroring the editor): + * + * ```ts + * import { mathBlockMapping } from "@blocknote/math-block/pdf-exporter"; + * + * new PDFExporter(schema, { + * ...pdfDefaultSchemaMappings, + * blockMapping: { + * ...pdfDefaultSchemaMappings.blockMapping, + * mathBlock: mathBlockMapping, + * }, + * }); + * ``` + */ +export function mathBlockMapping( + block: MathBlock, + exporter: Exporter, +) { + const source = plainContentToString(block.content); + if (!source.trim()) { + return ; + } + + // `Math` renders MathJax's own error output for invalid LaTeX; validate + // up front to render the editor-style error placeholder instead. + const validation = latexToMathSVG(source, { + inline: false, + fontSize: FONT_SIZE_POINTS, + }); + if (validation.error !== undefined) { + return ( + + {errorText(exporter, source, "math-error")} + + ); + } + + return ( + + {source} + + ); +} + +/** + * Creates a PDF inline content mapping for `@blocknote/math-block` that + * renders inline math as formulas, rasterized to images that flow inline + * with the text (react-pdf drops SVG elements inside `Text`, so the vector + * output used for math blocks isn't an option here). Note that the image + * sits on the text baseline, so expressions with depth (fractions, + * subscripts) render slightly raised - and it's sized for the exporter's + * 12pt body text (mappings get no font context from react-pdf), so inline + * math inside headings renders at body-text size. + * + * Rasterization runs in the browser by default; when exporting elsewhere + * (e.g. server-side), pass a `rasterize` function backed by an SVG + * rasterizer such as `@resvg/resvg-js` or `sharp`. Invalid LaTeX renders an + * error placeholder (mirroring the editor): + * + * ```ts + * import { createInlineMathMapping } from "@blocknote/math-block/pdf-exporter"; + * + * new PDFExporter(schema, { + * ...pdfDefaultSchemaMappings, + * inlineContentMapping: { + * ...pdfDefaultSchemaMappings.inlineContentMapping, + * math: createInlineMathMapping({ rasterize }), + * }, + * }); + * ``` + */ +export function createInlineMathMapping(options?: { + rasterize?: RasterizeSVG; +}) { + return ( + inlineContent: InlineMath, + exporter: Exporter, + ) => { + const source = inlineContent.content; + if (!source.trim()) { + return ; + } + + const rasterize = options?.rasterize ?? rasterizeSVGInBrowser; + if (!options?.rasterize && typeof document === "undefined") { + throw new Error( + "Rendering inline math requires rasterizing SVGs, which the built-in rasterizer can only do in the browser. When exporting elsewhere, pass a `rasterize` function to `createInlineMathMapping` (e.g. backed by @resvg/resvg-js or sharp).", + ); + } + + // The metrics are needed synchronously for react-pdf's text layout; only + // the rasterization itself is deferred, via react-pdf's support for + // async `src` functions (resolved before layout). Rasterization failures + // are unexpected and propagate - react-pdf skips the image and warns. + const result = latexToMathSVG(source, { + inline: true, + fontSize: FONT_SIZE_POINTS, + }); + if (result.error !== undefined) { + return errorText(exporter, source, "inlineMath"); + } + + return ( + rasterize(result.image).then(exportImageToDataURL)} + style={{ width: result.image.width, height: result.image.height }} + /> + ); + }; +} + +/** + * PDF inline content mapping for `@blocknote/math-block` with the default + * options - see {@link createInlineMathMapping}. Browser-only; when + * exporting elsewhere, use the factory to pass a `rasterize` function. + */ +export const inlineMathMapping = createInlineMathMapping(); diff --git a/packages/math-block/src/pdf-exporter/pdfExporter.test.tsx b/packages/math-block/src/pdf-exporter/pdfExporter.test.tsx new file mode 100644 index 0000000000..46dde732f7 --- /dev/null +++ b/packages/math-block/src/pdf-exporter/pdfExporter.test.tsx @@ -0,0 +1,140 @@ +import { + BlockNoteSchema, + createPageBreakBlockSpec, + defaultBlockSpecs, + ExportImage, +} from "@blocknote/core"; +import { + PDFExporter, + pdfDefaultSchemaMappings, +} from "@blocknote/xl-pdf-exporter"; +import { testDocumentWithSourceBlocks } from "@shared/testDocument.js"; +import reactElementToJSXString from "react-element-to-jsx-string"; +import { describe, expect, it } from "vite-plus/test"; + +import { + createInlineMathMapping, + inlineMathMapping, + mathBlockMapping, +} from "./index.js"; + +// A stub rasterizer, standing in for e.g. @resvg/resvg-js on a server - the +// real (browser-only) rasterization is covered by the browser test suite. +const rasterize = async (svg: ExportImage) => ({ + mimeType: "image/png", + data: new Uint8Array([0, 0, 0]), + width: svg.width, + height: svg.height, +}); + +function createExporter( + inlineMath: ReturnType, +) { + // Assembled outside the constructor call as the schema doesn't include + // the math specs - like the default mappings, the math entries just map + // the block JSON. + const mappings = { + ...pdfDefaultSchemaMappings, + blockMapping: { + ...pdfDefaultSchemaMappings.blockMapping, + mathBlock: mathBlockMapping, + }, + inlineContentMapping: { + ...pdfDefaultSchemaMappings.inlineContentMapping, + math: inlineMath, + }, + }; + + return new PDFExporter( + BlockNoteSchema.create({ + blockSpecs: { + ...defaultBlockSpecs, + pageBreak: createPageBreakBlockSpec(), + }, + }), + mappings, + ); +} + +describe("pdf exporter mappings", () => { + it("should export math as formulas and inline math as images", async () => { + const exporter = createExporter(createInlineMathMapping({ rasterize })); + + // The math block & inline math paragraph from the shared test document. + const transformed = await exporter.toReactPDFDocument( + testDocumentWithSourceBlocks.filter((block) => + ["math-block", "paragraph-with-inline-math"].includes(block.id), + ), + ); + const str = reactElementToJSXString(transformed); + + await expect(str).toMatchFileSnapshot( + "__snapshots__/exampleWithMathMappings.jsx", + ); + }); + + it("should render error placeholders for invalid LaTeX", async () => { + const exporter = createExporter(createInlineMathMapping({ rasterize })); + + const transformed = await exporter.toReactPDFDocument([ + { + id: "1", + type: "mathBlock", + props: {}, + content: [{ type: "text", text: "\\invalidcommand{", styles: {} }], + children: [], + }, + { + id: "2", + type: "paragraph", + props: {}, + content: [ + { type: "text", text: "Broken: ", styles: {} }, + { type: "math", props: {}, content: "\\invalidcommand{" }, + ], + children: [], + }, + ] as any); + const str = reactElementToJSXString(transformed); + + // Mirrors the editor's error placeholder rather than dumping the LaTeX + // source on readers - once for the block, once for the inline math. + expect(str.match(/Invalid formula/g)).toHaveLength(2); + }); + + it("should render empty math as nothing", async () => { + // Empty source isn't an error - there's just nothing to render (and no + // rasterizer is needed). + const exporter = createExporter(inlineMathMapping); + + const transformed = await exporter.toReactPDFDocument([ + { id: "1", type: "mathBlock", props: {}, content: [], children: [] }, + { + id: "2", + type: "paragraph", + props: {}, + content: [{ type: "math", props: {}, content: "" }], + children: [], + }, + ] as any); + const str = reactElementToJSXString(transformed); + + expect(str).not.toContain("Invalid formula"); + expect(str).not.toContain("Math"); + }); + + it("should throw a descriptive error without a rasterizer outside the browser", async () => { + // The default mapping's built-in rasterizer only works in the browser, + // and silently degrading is worse than failing loudly - the error names + // the `rasterize` option to pass. + const exporter = createExporter(inlineMathMapping); + + await expect( + exporter.toReactPDFDocument( + testDocumentWithSourceBlocks.filter( + (block) => block.id === "paragraph-with-inline-math", + ), + ), + ).rejects.toThrow("pass a `rasterize` function"); + }); +}); diff --git a/packages/math-block/src/vite-env.d.ts b/packages/math-block/src/vite-env.d.ts new file mode 100644 index 0000000000..bc2d8a36f3 --- /dev/null +++ b/packages/math-block/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/math-block/tsconfig.json b/packages/math-block/tsconfig.json new file mode 100644 index 0000000000..2d8bcd4a25 --- /dev/null +++ b/packages/math-block/tsconfig.json @@ -0,0 +1,33 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ESNext", "DOM"], + "moduleResolution": "bundler", + "jsx": "react-jsx", + "strict": true, + "sourceMap": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "noEmit": false, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "outDir": "dist", + "declaration": true, + "declarationDir": "types", + "composite": true, + "skipLibCheck": true, + "emitDeclarationOnly": true, + "paths": { + "@shared/*": ["../../shared/*"] + } + }, + "include": ["src"], + "references": [ + { + "path": "../../shared" + } + ] +} diff --git a/packages/math-block/vite.config.ts b/packages/math-block/vite.config.ts new file mode 100644 index 0000000000..e9d8aafbfa --- /dev/null +++ b/packages/math-block/vite.config.ts @@ -0,0 +1,135 @@ +import * as path from "path"; +import { webpackStats } from "rollup-plugin-webpack-stats"; +import { configDefaults, defineConfig, type UserConfig } from "vite-plus"; +import pkg from "./package.json"; + +// https://vitejs.dev/config/ +export default defineConfig( + (conf) => + ({ + run: { + tasks: { + build: { + command: "tsc && vp build", + input: [ + { auto: true }, + { pattern: "!**/*.tsbuildinfo", base: "workspace" }, + ], + output: ["dist/**", "!dist/*.tsbuildinfo"], + }, + }, + }, + test: { + setupFiles: ["./vitestSetup.ts"], + // `.browser.test` files need a real browser; the tests package's + // browser suite runs them. + exclude: [...configDefaults.exclude, "**/*.browser.test.*"], + }, + // The ODT exporter sources (loaded via the test aliases) use JSX + // namespace tags (e.g. ), which Vite's oxc rejects by default. + oxc: { + jsx: { + throwIfNamespace: false, + }, + }, + plugins: [webpackStats() as any], + // used so that vitest resolves the core package from the sources instead of the built version + resolve: { + alias: + conf.command === "build" + ? ({} as Record) + : ({ + "@shared": path.resolve(__dirname, "../../shared/"), + // load live from sources with live reload working + "@blocknote/core": path.resolve(__dirname, "../core/src/"), + "@blocknote/react": path.resolve(__dirname, "../react/src/"), + "@blocknote/xl-docx-exporter": path.resolve( + __dirname, + "../xl-docx-exporter/src/", + ), + "@blocknote/xl-email-exporter": path.resolve( + __dirname, + "../xl-email-exporter/src/", + ), + "@blocknote/xl-multi-column": path.resolve( + __dirname, + "../xl-multi-column/src/", + ), + "@blocknote/xl-odt-exporter": path.resolve( + __dirname, + "../xl-odt-exporter/src/", + ), + "@blocknote/xl-pdf-exporter": path.resolve( + __dirname, + "../xl-pdf-exporter/src/", + ), + } as Record), + }, + build: { + sourcemap: true, + lib: { + entry: { + "blocknote-math-block": path.resolve(__dirname, "src/index.ts"), + "docx-exporter": path.resolve( + __dirname, + "src/docx-exporter/index.ts", + ), + "odt-exporter": path.resolve( + __dirname, + "src/odt-exporter/index.ts", + ), + "pdf-exporter": path.resolve( + __dirname, + "src/pdf-exporter/index.tsx", + ), + "email-exporter": path.resolve( + __dirname, + "src/email-exporter/index.tsx", + ), + }, + name: "blocknote-math-block", + formats: ["es", "cjs"], + fileName: (format, entryName) => + format === "es" ? `${entryName}.js` : `${entryName}.cjs`, + }, + rollupOptions: { + // make sure to externalize deps that shouldn't be bundled + // into your library + external: (source) => { + // Bundle react-icons into the output (tree-shaken) so consumers + // don't need to install it as a peer/runtime dependency. + const bundledDeps = ["react-icons"]; + if ( + bundledDeps.some( + (dep) => source === dep || source.startsWith(dep + "/"), + ) + ) { + return false; + } + if ( + Object.keys({ + ...pkg.dependencies, + ...((pkg as any).peerDependencies || {}), + ...pkg.devDependencies, + }).some((dep) => source === dep || source.startsWith(dep + "/")) + ) { + return true; + } + return ( + source.startsWith("react/") || + source.startsWith("react-dom/") || + source.startsWith("prosemirror-") || + source.startsWith("@tiptap/") || + source.startsWith("@blocknote/") || + source.startsWith("node:") + ); + }, + output: { + // Provide global variables to use in the UMD build + // for externalized deps + globals: {}, + }, + }, + }, + }) as UserConfig, +); diff --git a/packages/math-block/vitestSetup.ts b/packages/math-block/vitestSetup.ts new file mode 100644 index 0000000000..dbcf3eb39c --- /dev/null +++ b/packages/math-block/vitestSetup.ts @@ -0,0 +1,10 @@ +import { afterEach, beforeEach } from "vite-plus/test"; + +beforeEach(() => { + globalThis.window = globalThis.window || ({} as any); + (window as Window & { __TEST_OPTIONS?: any }).__TEST_OPTIONS = {}; +}); + +afterEach(() => { + delete (window as Window & { __TEST_OPTIONS?: any }).__TEST_OPTIONS; +}); diff --git a/tests/src/unit/react/clipboard/copy/__snapshots__/text/html/math.html b/tests/src/unit/react/clipboard/copy/__snapshots__/text/html/math.html new file mode 100644 index 0000000000..369ffd1dd8 --- /dev/null +++ b/tests/src/unit/react/clipboard/copy/__snapshots__/text/html/math.html @@ -0,0 +1,32 @@ +The identity + + + + + + e + + i + π + + + + + 1 + = + 0 + + e^{i\pi} + 1 = 0 + + + +is elegant. \ No newline at end of file diff --git a/tests/src/unit/react/clipboard/copy/__snapshots__/text/html/mathBlock.html b/tests/src/unit/react/clipboard/copy/__snapshots__/text/html/mathBlock.html new file mode 100644 index 0000000000..3453e9a620 --- /dev/null +++ b/tests/src/unit/react/clipboard/copy/__snapshots__/text/html/mathBlock.html @@ -0,0 +1,25 @@ + + + + + a + 2 + + + + + b + 2 + + = + + c + 2 + + + a^2 + b^2 = c^2 + + \ No newline at end of file diff --git a/tests/src/unit/react/formatConversion/export/__snapshots__/blocknoteHTML/math/basic.html b/tests/src/unit/react/formatConversion/export/__snapshots__/blocknoteHTML/math/basic.html new file mode 100644 index 0000000000..a514081671 --- /dev/null +++ b/tests/src/unit/react/formatConversion/export/__snapshots__/blocknoteHTML/math/basic.html @@ -0,0 +1,124 @@ +
    +
    +
    +
    +

    + The identity + + + + + + + + + + + e + + i + π + + + + + 1 + = + 0 + + e^{i\pi} + 1 = 0 + + + + + + + +

    +
    + +
    + +
    +
    + +
    + + + is elegant. +

    +
    +
    +
    +
    \ No newline at end of file diff --git a/tests/src/unit/react/formatConversion/export/__snapshots__/blocknoteHTML/mathBlock/basic.html b/tests/src/unit/react/formatConversion/export/__snapshots__/blocknoteHTML/mathBlock/basic.html new file mode 100644 index 0000000000..e59cc316e6 --- /dev/null +++ b/tests/src/unit/react/formatConversion/export/__snapshots__/blocknoteHTML/mathBlock/basic.html @@ -0,0 +1,152 @@ +
    +
    +
    +
    +
    +
    + + + + + + + + + a + 2 + + + + + b + 2 + + = + + c + 2 + + + a^2 + b^2 = c^2 + + + + + + + +
    +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/tests/src/unit/react/formatConversion/export/__snapshots__/html/math/basic.html b/tests/src/unit/react/formatConversion/export/__snapshots__/html/math/basic.html new file mode 100644 index 0000000000..7e939f980c --- /dev/null +++ b/tests/src/unit/react/formatConversion/export/__snapshots__/html/math/basic.html @@ -0,0 +1,34 @@ +

    + The identity + + + + + + e + + i + π + + + + + 1 + = + 0 + + e^{i\pi} + 1 = 0 + + + + is elegant. +

    \ No newline at end of file diff --git a/tests/src/unit/react/formatConversion/export/__snapshots__/html/mathBlock/basic.html b/tests/src/unit/react/formatConversion/export/__snapshots__/html/mathBlock/basic.html new file mode 100644 index 0000000000..3453e9a620 --- /dev/null +++ b/tests/src/unit/react/formatConversion/export/__snapshots__/html/mathBlock/basic.html @@ -0,0 +1,25 @@ + + + + + a + 2 + + + + + b + 2 + + = + + c + 2 + + + a^2 + b^2 = c^2 + + \ No newline at end of file diff --git a/tests/src/unit/react/formatConversion/export/__snapshots__/markdown/inlineMath/basic.md b/tests/src/unit/react/formatConversion/export/__snapshots__/markdown/inlineMath/basic.md new file mode 100644 index 0000000000..af6c63b601 --- /dev/null +++ b/tests/src/unit/react/formatConversion/export/__snapshots__/markdown/inlineMath/basic.md @@ -0,0 +1 @@ +The identity $e^{i\pi} + 1 = 0$ is elegant. diff --git a/tests/src/unit/react/formatConversion/export/__snapshots__/markdown/math/basic.md b/tests/src/unit/react/formatConversion/export/__snapshots__/markdown/math/basic.md new file mode 100644 index 0000000000..d029e7e869 --- /dev/null +++ b/tests/src/unit/react/formatConversion/export/__snapshots__/markdown/math/basic.md @@ -0,0 +1,3 @@ +$$ +a^2 + b^2 = c^2 +$$ diff --git a/tests/src/unit/react/formatConversion/export/__snapshots__/markdown/math/nested.md b/tests/src/unit/react/formatConversion/export/__snapshots__/markdown/math/nested.md new file mode 100644 index 0000000000..5b85d724fe --- /dev/null +++ b/tests/src/unit/react/formatConversion/export/__snapshots__/markdown/math/nested.md @@ -0,0 +1,5 @@ +* The theorem: + $$ + a^2 + + b^2 = c^2 + $$ diff --git a/tests/src/unit/react/formatConversion/parse/__snapshots__/html/mathBlock.json b/tests/src/unit/react/formatConversion/parse/__snapshots__/html/mathBlock.json new file mode 100644 index 0000000000..7b1b5a816d --- /dev/null +++ b/tests/src/unit/react/formatConversion/parse/__snapshots__/html/mathBlock.json @@ -0,0 +1,15 @@ +[ + { + "children": [], + "content": [ + { + "styles": {}, + "text": "a^2 + b^2 = c^2", + "type": "text", + }, + ], + "id": "1", + "props": {}, + "type": "mathBlock", + }, +] \ No newline at end of file From 2b82074a34e4703cbd4a0235cc7c0433a43eacb7 Mon Sep 17 00:00:00 2001 From: Nick the Sick Date: Thu, 13 Aug 2026 16:26:33 +0200 Subject: [PATCH 4/5] feat: diagram block Add `@blocknote/diagram-block`: a Mermaid diagram block built on the source-with-preview primitives. Includes exporter mappings for HTML, markdown, docx, odt, pdf and email, an example, and documentation. --- .../content/docs/features/blocks/diagrams.mdx | 127 ++++++ .../10-diagram-block/.bnexample.json | 17 + .../10-diagram-block/README.md | 10 + .../10-diagram-block/index.html | 14 + .../10-diagram-block/main.tsx | 11 + .../10-diagram-block/package.json | 33 ++ .../10-diagram-block/src/App.tsx | 96 +++++ .../10-diagram-block/tsconfig.json | 32 ++ .../10-diagram-block/vite-env.d.ts | 1 + .../10-diagram-block/vite.config.ts | 35 ++ packages/diagram-block/.gitignore | 23 ++ packages/diagram-block/LICENSE | 373 ++++++++++++++++++ packages/diagram-block/package.json | 136 +++++++ .../createReactDiagramBlockSpec.test.tsx | 281 +++++++++++++ .../src/block/createReactDiagramBlockSpec.tsx | 60 +++ .../block/getDiagramBlockTypeSelectItems.ts | 23 ++ .../diagram-block/src/block/helpers/index.ts | 2 + .../src/block/helpers/parse/index.ts | 1 + .../helpers/parse/parseDiagramCodeElement.ts | 30 ++ .../render/DiagramBlockPreviewWithPopup.tsx | 109 +++++ .../src/block/helpers/render/index.ts | 1 + packages/diagram-block/src/block/index.ts | 3 + .../src/docx-exporter/docxExporter.test.ts | 216 ++++++++++ .../diagram-block/src/docx-exporter/index.ts | 139 +++++++ .../src/email-exporter/emailExporter.test.tsx | 78 ++++ .../src/email-exporter/index.tsx | 117 ++++++ .../diagram-block/src/exporterTestUtil.ts | 51 +++ .../src/getDiagramSlashMenuItems.tsx | 36 ++ packages/diagram-block/src/helpers/index.ts | 3 + .../src/helpers/initializeMermaid.ts | 18 + .../renderDiagramToImage.browser.test.ts | 48 +++ .../src/helpers/renderDiagramToImage.ts | 108 +++++ .../src/helpers/trimDiagramSVG.ts | 58 +++ packages/diagram-block/src/i18n/dictionary.ts | 38 ++ packages/diagram-block/src/i18n/locales/ar.ts | 25 ++ packages/diagram-block/src/i18n/locales/de.ts | 24 ++ packages/diagram-block/src/i18n/locales/en.ts | 22 ++ packages/diagram-block/src/i18n/locales/es.ts | 24 ++ packages/diagram-block/src/i18n/locales/fa.ts | 25 ++ packages/diagram-block/src/i18n/locales/fr.ts | 24 ++ packages/diagram-block/src/i18n/locales/he.ts | 25 ++ packages/diagram-block/src/i18n/locales/hr.ts | 24 ++ .../diagram-block/src/i18n/locales/index.ts | 23 ++ packages/diagram-block/src/i18n/locales/is.ts | 24 ++ packages/diagram-block/src/i18n/locales/it.ts | 24 ++ packages/diagram-block/src/i18n/locales/ja.ts | 24 ++ packages/diagram-block/src/i18n/locales/ko.ts | 24 ++ packages/diagram-block/src/i18n/locales/nl.ts | 24 ++ packages/diagram-block/src/i18n/locales/no.ts | 24 ++ packages/diagram-block/src/i18n/locales/pl.ts | 24 ++ packages/diagram-block/src/i18n/locales/pt.ts | 24 ++ packages/diagram-block/src/i18n/locales/ru.ts | 24 ++ packages/diagram-block/src/i18n/locales/sk.ts | 24 ++ packages/diagram-block/src/i18n/locales/uk.ts | 24 ++ packages/diagram-block/src/i18n/locales/uz.ts | 24 ++ packages/diagram-block/src/i18n/locales/vi.ts | 32 ++ .../diagram-block/src/i18n/locales/zh-tw.ts | 24 ++ packages/diagram-block/src/i18n/locales/zh.ts | 24 ++ packages/diagram-block/src/index.ts | 7 + .../diagram-block/src/odt-exporter/index.ts | 134 +++++++ .../src/odt-exporter/odtExporter.test.ts | 77 ++++ .../diagram-block/src/pdf-exporter/index.tsx | 112 ++++++ .../src/pdf-exporter/pdfExporter.test.tsx | 68 ++++ packages/diagram-block/src/vite-env.d.ts | 1 + packages/diagram-block/tsconfig.json | 33 ++ packages/diagram-block/vite.config.ts | 135 +++++++ packages/diagram-block/vitestSetup.ts | 10 + shared/testDocument.ts | 65 ++- .../blocknoteHTML/diagram/basic.html | 39 ++ .../__snapshots__/html/diagram/basic.html | 4 + .../__snapshots__/markdown/diagram/basic.md | 4 + .../__snapshots__/html/diagramBlock.json | 16 + .../markdown/codeBlockNotDiagram.json | 17 + .../__snapshots__/markdown/diagramBlock.json | 16 + tests/src/unit/react/testSchema.tsx | 8 + 75 files changed, 3657 insertions(+), 1 deletion(-) create mode 100644 docs/content/docs/features/blocks/diagrams.mdx create mode 100644 examples/06-custom-schema/10-diagram-block/.bnexample.json create mode 100644 examples/06-custom-schema/10-diagram-block/README.md create mode 100644 examples/06-custom-schema/10-diagram-block/index.html create mode 100644 examples/06-custom-schema/10-diagram-block/main.tsx create mode 100644 examples/06-custom-schema/10-diagram-block/package.json create mode 100644 examples/06-custom-schema/10-diagram-block/src/App.tsx create mode 100644 examples/06-custom-schema/10-diagram-block/tsconfig.json create mode 100644 examples/06-custom-schema/10-diagram-block/vite-env.d.ts create mode 100644 examples/06-custom-schema/10-diagram-block/vite.config.ts create mode 100644 packages/diagram-block/.gitignore create mode 100644 packages/diagram-block/LICENSE create mode 100644 packages/diagram-block/package.json create mode 100644 packages/diagram-block/src/block/createReactDiagramBlockSpec.test.tsx create mode 100644 packages/diagram-block/src/block/createReactDiagramBlockSpec.tsx create mode 100644 packages/diagram-block/src/block/getDiagramBlockTypeSelectItems.ts create mode 100644 packages/diagram-block/src/block/helpers/index.ts create mode 100644 packages/diagram-block/src/block/helpers/parse/index.ts create mode 100644 packages/diagram-block/src/block/helpers/parse/parseDiagramCodeElement.ts create mode 100644 packages/diagram-block/src/block/helpers/render/DiagramBlockPreviewWithPopup.tsx create mode 100644 packages/diagram-block/src/block/helpers/render/index.ts create mode 100644 packages/diagram-block/src/block/index.ts create mode 100644 packages/diagram-block/src/docx-exporter/docxExporter.test.ts create mode 100644 packages/diagram-block/src/docx-exporter/index.ts create mode 100644 packages/diagram-block/src/email-exporter/emailExporter.test.tsx create mode 100644 packages/diagram-block/src/email-exporter/index.tsx create mode 100644 packages/diagram-block/src/exporterTestUtil.ts create mode 100644 packages/diagram-block/src/getDiagramSlashMenuItems.tsx create mode 100644 packages/diagram-block/src/helpers/index.ts create mode 100644 packages/diagram-block/src/helpers/initializeMermaid.ts create mode 100644 packages/diagram-block/src/helpers/renderDiagramToImage.browser.test.ts create mode 100644 packages/diagram-block/src/helpers/renderDiagramToImage.ts create mode 100644 packages/diagram-block/src/helpers/trimDiagramSVG.ts create mode 100644 packages/diagram-block/src/i18n/dictionary.ts create mode 100644 packages/diagram-block/src/i18n/locales/ar.ts create mode 100644 packages/diagram-block/src/i18n/locales/de.ts create mode 100644 packages/diagram-block/src/i18n/locales/en.ts create mode 100644 packages/diagram-block/src/i18n/locales/es.ts create mode 100644 packages/diagram-block/src/i18n/locales/fa.ts create mode 100644 packages/diagram-block/src/i18n/locales/fr.ts create mode 100644 packages/diagram-block/src/i18n/locales/he.ts create mode 100644 packages/diagram-block/src/i18n/locales/hr.ts create mode 100644 packages/diagram-block/src/i18n/locales/index.ts create mode 100644 packages/diagram-block/src/i18n/locales/is.ts create mode 100644 packages/diagram-block/src/i18n/locales/it.ts create mode 100644 packages/diagram-block/src/i18n/locales/ja.ts create mode 100644 packages/diagram-block/src/i18n/locales/ko.ts create mode 100644 packages/diagram-block/src/i18n/locales/nl.ts create mode 100644 packages/diagram-block/src/i18n/locales/no.ts create mode 100644 packages/diagram-block/src/i18n/locales/pl.ts create mode 100644 packages/diagram-block/src/i18n/locales/pt.ts create mode 100644 packages/diagram-block/src/i18n/locales/ru.ts create mode 100644 packages/diagram-block/src/i18n/locales/sk.ts create mode 100644 packages/diagram-block/src/i18n/locales/uk.ts create mode 100644 packages/diagram-block/src/i18n/locales/uz.ts create mode 100644 packages/diagram-block/src/i18n/locales/vi.ts create mode 100644 packages/diagram-block/src/i18n/locales/zh-tw.ts create mode 100644 packages/diagram-block/src/i18n/locales/zh.ts create mode 100644 packages/diagram-block/src/index.ts create mode 100644 packages/diagram-block/src/odt-exporter/index.ts create mode 100644 packages/diagram-block/src/odt-exporter/odtExporter.test.ts create mode 100644 packages/diagram-block/src/pdf-exporter/index.tsx create mode 100644 packages/diagram-block/src/pdf-exporter/pdfExporter.test.tsx create mode 100644 packages/diagram-block/src/vite-env.d.ts create mode 100644 packages/diagram-block/tsconfig.json create mode 100644 packages/diagram-block/vite.config.ts create mode 100644 packages/diagram-block/vitestSetup.ts create mode 100644 tests/src/unit/react/formatConversion/export/__snapshots__/blocknoteHTML/diagram/basic.html create mode 100644 tests/src/unit/react/formatConversion/export/__snapshots__/html/diagram/basic.html create mode 100644 tests/src/unit/react/formatConversion/export/__snapshots__/markdown/diagram/basic.md create mode 100644 tests/src/unit/react/formatConversion/parse/__snapshots__/html/diagramBlock.json create mode 100644 tests/src/unit/react/formatConversion/parse/__snapshots__/markdown/codeBlockNotDiagram.json create mode 100644 tests/src/unit/react/formatConversion/parse/__snapshots__/markdown/diagramBlock.json diff --git a/docs/content/docs/features/blocks/diagrams.mdx b/docs/content/docs/features/blocks/diagrams.mdx new file mode 100644 index 0000000000..e06f57455e --- /dev/null +++ b/docs/content/docs/features/blocks/diagrams.mdx @@ -0,0 +1,127 @@ +--- +title: Diagrams +description: Mermaid diagram blocks for BlockNote — rendered as diagrams in the editor, and exportable to Markdown, PDF, DOCX, ODT, and email. +--- + +# Diagrams + +The `@blocknote/diagram-block` package adds a **diagram block**: authored as [Mermaid](https://mermaid.js.org/) source in a source popup, rendered as the diagram it describes — flowcharts, sequence diagrams, Gantt charts, and everything else Mermaid supports. + + + This block is only available in React (`@blocknote/react`). + + +```bash +npm install @blocknote/diagram-block +``` + +## Adding to your editor + +The package exports `createReactDiagramBlockSpec`. Add it to your schema's `blockSpecs`: + +```tsx +import { BlockNoteSchema } from "@blocknote/core"; +import { createReactDiagramBlockSpec } from "@blocknote/diagram-block"; + +const schema = BlockNoteSchema.create().extend({ + blockSpecs: { + // Adds the Diagram block to the schema. + diagram: createReactDiagramBlockSpec(), + }, +}); +``` + +To highlight the Mermaid source in the popup, add the [syntax highlighting](/docs/features/blocks/code-blocks#syntax-highlighting) extension to your editor. The diagram block already declares its source language (`mermaid`), so no per-block configuration is needed: + +```tsx +import { syntaxHighlighter } from "@blocknote/code-block"; + +const editor = useCreateBlockNote({ + schema, + extensions: [syntaxHighlighter], +}); +``` + +## Menu items & localization + +Because the diagram spec lives in an optional package, its editor integrations are opt-in too — the package exports everything needed: + +```tsx +import { + getDiagramSlashMenuItems, // Slash Menu item for inserting a diagram + getDiagramBlockTypeSelectItems, // Block Type Select item for the Formatting Toolbar + locales as diagramLocales, // dictionary strings, merged under the `diagram` key +} from "@blocknote/diagram-block"; +``` + +- `getDiagramSlashMenuItems(editor)` returns a [Slash Menu](/docs/react/components/suggestion-menus#slash-menu) item for inserting a diagram — combine it with the default items via `combineByGroup`. +- `getDiagramBlockTypeSelectItems(editor)` returns a [Block Type Select](/docs/react/components/formatting-toolbar) item for turning a block into a diagram, to spread alongside the defaults. +- `diagramLocales` translates the diagram strings — merge a locale into the editor's `dictionary` under the `diagram` key (see [Localization](/docs/features/localization)); without one, the bundled English strings are used. + +The example below wires them all up. + +## Example + + + +## Exporting + +Diagrams export to every format BlockNote supports. [Markdown](/docs/features/export/markdown) works out of the box — diagrams export as ` ```mermaid ` fenced code blocks, their common Markdown notation. + +The [PDF](/docs/features/export/pdf), [DOCX](/docs/features/export/docx), [ODT](/docs/features/export/odt), and [email](/docs/features/export/email) exporters embed the diagram as an image via their mappings — they live as subpaths of this package, and each exports a `createDiagramBlockMapping` factory to spread into the exporter's default mappings. The [DOCX exporter](/docs/features/export/docx) shown here; the [PDF](/docs/features/export/pdf), [ODT](/docs/features/export/odt), and [email](/docs/features/export/email) exporters work the same way with their respective subpaths: + +```typescript +import { + DOCXExporter, + docxDefaultSchemaMappings, +} from "@blocknote/xl-docx-exporter"; +import { createDiagramBlockMapping } from "@blocknote/diagram-block/docx-exporter"; +// ...or "@blocknote/diagram-block/pdf-exporter", +// "@blocknote/diagram-block/odt-exporter", +// "@blocknote/diagram-block/email-exporter" + +const exporter = new DOCXExporter(editor.schema, { + ...docxDefaultSchemaMappings, + blockMapping: { + ...docxDefaultSchemaMappings.blockMapping, + diagram: createDiagramBlockMapping(), + }, +}); +``` + +The factory takes one option: + +```typescript +createDiagramBlockMapping(options?: { + /** + * Renders the Mermaid source to an image. Defaults to the built-in + * Mermaid renderer, which only works in the browser - see "Exporting + * server-side" below. + */ + renderDiagram?: RenderDiagram; +}); +``` + +Invalid Mermaid sources render an error placeholder identifying the offending source, mirroring the editor. + +The email subpath's factory additionally takes an `imageDelivery` option: some email clients don't display the default data URL images, and the generated images can be delivered as inline `cid:` attachments instead — see [image delivery](/docs/features/export/email#math--diagram-blocks) on the email page. + +### Exporting server-side + +Rendering Mermaid source to an image requires a browser, so the built-in renderer only works for client-side exports. When exporting server-side, pass a `renderDiagram` function to `createDiagramBlockMapping` — without one, a server-side export throws: + +```typescript +import { createDiagramBlockMapping } from "@blocknote/diagram-block/docx-exporter"; +import type { RenderDiagram } from "@blocknote/diagram-block/docx-exporter"; + +const renderDiagram: RenderDiagram = async (source) => { + // Render the Mermaid source to an image with your renderer of choice. + return { + image: { data: pngBytes, mimeType: "image/png", width, height }, + }; +}; + +createDiagramBlockMapping({ renderDiagram }); +``` + +Common choices for the server-side renderer are [`@mermaid-js/mermaid-cli`](https://github.com/mermaid-js/mermaid-cli) (renders in a headless browser) or a [Kroki](https://kroki.io) server. Invalid Mermaid source is an expected failure — return it as `{ error }` rather than throwing, and the export renders the error placeholder for that block instead of failing. diff --git a/examples/06-custom-schema/10-diagram-block/.bnexample.json b/examples/06-custom-schema/10-diagram-block/.bnexample.json new file mode 100644 index 0000000000..915c0c3db7 --- /dev/null +++ b/examples/06-custom-schema/10-diagram-block/.bnexample.json @@ -0,0 +1,17 @@ +{ + "playground": true, + "docs": true, + "author": "yousefed", + "tags": [ + "Intermediate", + "Blocks", + "Custom Schemas", + "Suggestion Menus", + "Slash Menu" + ], + "dependencies": { + "@blocknote/code-block": "latest", + "@blocknote/diagram-block": "latest", + "react-icons": "^5.5.0" + } +} diff --git a/examples/06-custom-schema/10-diagram-block/README.md b/examples/06-custom-schema/10-diagram-block/README.md new file mode 100644 index 0000000000..5e8ad1523b --- /dev/null +++ b/examples/06-custom-schema/10-diagram-block/README.md @@ -0,0 +1,10 @@ +# Diagram Block + +In this example, we register the `@blocknote/diagram-block` block in a custom schema. The block renders diagrams from [Mermaid](https://mermaid.js.org/) source code, showing the rendered diagram in place of the source and revealing an editable source popup when selected - built from the same `SourceBlockWithPreview` component the math block uses, so the block itself is only a few dozen lines. + +**Try it out:** Click a diagram to edit its Mermaid source! + +**Relevant Docs:** + +- [Custom Blocks](/docs/features/custom-schemas/custom-blocks) +- [Editor Setup](/docs/getting-started/editor-setup) diff --git a/examples/06-custom-schema/10-diagram-block/index.html b/examples/06-custom-schema/10-diagram-block/index.html new file mode 100644 index 0000000000..2a2ca2d29b --- /dev/null +++ b/examples/06-custom-schema/10-diagram-block/index.html @@ -0,0 +1,14 @@ + + + + + Diagram Block + + + +
    + + + diff --git a/examples/06-custom-schema/10-diagram-block/main.tsx b/examples/06-custom-schema/10-diagram-block/main.tsx new file mode 100644 index 0000000000..1260513388 --- /dev/null +++ b/examples/06-custom-schema/10-diagram-block/main.tsx @@ -0,0 +1,11 @@ +// AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY +import React from "react"; +import { createRoot } from "react-dom/client"; +import App from "./src/App.jsx"; + +const root = createRoot(document.getElementById("root")!); +root.render( + + + , +); diff --git a/examples/06-custom-schema/10-diagram-block/package.json b/examples/06-custom-schema/10-diagram-block/package.json new file mode 100644 index 0000000000..1e52cdd52c --- /dev/null +++ b/examples/06-custom-schema/10-diagram-block/package.json @@ -0,0 +1,33 @@ +{ + "name": "@blocknote/example-custom-schema-diagram-block", + "description": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", + "type": "module", + "private": true, + "version": "0.12.4", + "scripts": { + "start": "vite", + "dev": "vite", + "build:prod": "tsc && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@blocknote/ariakit": "latest", + "@blocknote/core": "latest", + "@blocknote/mantine": "latest", + "@blocknote/react": "latest", + "@blocknote/shadcn": "latest", + "@mantine/core": "^9.0.2", + "@mantine/hooks": "^9.0.2", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "@blocknote/code-block": "latest", + "@blocknote/diagram-block": "latest", + "react-icons": "^5.5.0" + }, + "devDependencies": { + "@types/react": "^19.2.3", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "vite": "^8.0.0" + } +} diff --git a/examples/06-custom-schema/10-diagram-block/src/App.tsx b/examples/06-custom-schema/10-diagram-block/src/App.tsx new file mode 100644 index 0000000000..c96af84261 --- /dev/null +++ b/examples/06-custom-schema/10-diagram-block/src/App.tsx @@ -0,0 +1,96 @@ +import { syntaxHighlighter } from "@blocknote/code-block"; +import { BlockNoteSchema, combineByGroup } from "@blocknote/core"; +import { filterSuggestionItems } from "@blocknote/core/extensions"; +import * as locales from "@blocknote/core/locales"; +import "@blocknote/core/fonts/inter.css"; +import { BlockNoteView } from "@blocknote/mantine"; +import "@blocknote/mantine/style.css"; +import { + createReactDiagramBlockSpec, + getDiagramBlockTypeSelectItems, + getDiagramSlashMenuItems, + locales as diagramLocales, +} from "@blocknote/diagram-block"; +import { + blockTypeSelectItems, + FormattingToolbar, + FormattingToolbarController, + getDefaultReactSlashMenuItems, + SuggestionMenuController, + useCreateBlockNote, +} from "@blocknote/react"; + +// Our schema with block specs, which contain the configs and implementations +// for blocks that we want our editor to use. +const schema = BlockNoteSchema.create().extend({ + blockSpecs: { + // Creates an instance of the Diagram block and adds it to the schema. + diagram: createReactDiagramBlockSpec(), + }, +}); + +export default function App() { + const editor = useCreateBlockNote({ + // The syntax highlighter extension highlights the Diagram block's Mermaid + // source in its popup (the block declares `highlight: () => "mermaid"`). + extensions: [syntaxHighlighter], + schema, + // Merges the default dictionary with the diagram dictionary, under the + // `diagram` key the diagram block reads its strings from. + dictionary: { + ...locales.en, + diagram: diagramLocales.en, + }, + initialContent: [ + { + type: "paragraph", + content: "Click a diagram to edit its Mermaid source:", + }, + { + type: "diagram", + content: `graph TD + A[Write docs] --> B{Diagram needed?} + B -->|Yes| C[Type /diagram] + B -->|No| D[Keep writing] + C --> D`, + }, + { + type: "paragraph", + content: "Press the '/' key to open the Slash Menu and add another", + }, + ], + }); + + // Renders the editor instance using a React component. + return ( + + {/* Replaces the default Formatting Toolbar, adding the Diagram block to + the block type select so blocks can be converted to it. */} + ( + + )} + /> + {/* Replaces the default Slash Menu. */} + { + // Gets the default slash menu items and adds the Diagram item at + // the end of its group ("Advanced"). + const items = combineByGroup( + getDefaultReactSlashMenuItems(editor), + getDiagramSlashMenuItems(editor), + ); + + // Returns filtered items based on the query. + return filterSuggestionItems(items, query); + }} + /> + + ); +} diff --git a/examples/06-custom-schema/10-diagram-block/tsconfig.json b/examples/06-custom-schema/10-diagram-block/tsconfig.json new file mode 100644 index 0000000000..2aa62c56e6 --- /dev/null +++ b/examples/06-custom-schema/10-diagram-block/tsconfig.json @@ -0,0 +1,32 @@ +{ + "__comment": "AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY", + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": false, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "composite": true, + "paths": { + "@shared/*": ["../../../shared/*"] + } + }, + "include": ["."], + "__ADD_FOR_LOCAL_DEV_references": [ + { + "path": "../../../packages/core/" + }, + { + "path": "../../../packages/react/" + } + ] +} diff --git a/examples/06-custom-schema/10-diagram-block/vite-env.d.ts b/examples/06-custom-schema/10-diagram-block/vite-env.d.ts new file mode 100644 index 0000000000..11f02fe2a0 --- /dev/null +++ b/examples/06-custom-schema/10-diagram-block/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/examples/06-custom-schema/10-diagram-block/vite.config.ts b/examples/06-custom-schema/10-diagram-block/vite.config.ts new file mode 100644 index 0000000000..a96f1f04ff --- /dev/null +++ b/examples/06-custom-schema/10-diagram-block/vite.config.ts @@ -0,0 +1,35 @@ +// AUTO-GENERATED FILE, DO NOT EDIT DIRECTLY +import react from "@vitejs/plugin-react"; +import * as fs from "fs"; +import * as path from "path"; +import { defineConfig } from "vite"; +// https://vitejs.dev/config/ +export default defineConfig(((conf: { command: string }) => ({ + plugins: [react()], + optimizeDeps: {}, + build: { + sourcemap: true, + }, + resolve: { + alias: + conf.command === "build" || + !fs.existsSync(path.resolve(__dirname, "../../packages/core/src")) + ? {} + : ({ + // The repo-wide alias for the shared test-utils directory (private, + // so it only resolves inside the monorepo). Harmless for examples + // that don't use it. + "@shared": path.resolve(__dirname, "../../../shared/"), + // Comment out the lines below to load a built version of blocknote + // or, keep as is to load live from sources with live reload working + "@blocknote/core": path.resolve( + __dirname, + "../../packages/core/src/", + ), + "@blocknote/react": path.resolve( + __dirname, + "../../packages/react/src/", + ), + } as any), + }, +})) as Parameters[0]); diff --git a/packages/diagram-block/.gitignore b/packages/diagram-block/.gitignore new file mode 100644 index 0000000000..58f115c8dc --- /dev/null +++ b/packages/diagram-block/.gitignore @@ -0,0 +1,23 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-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/packages/diagram-block/LICENSE b/packages/diagram-block/LICENSE new file mode 100644 index 0000000000..fa0086a952 --- /dev/null +++ b/packages/diagram-block/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/packages/diagram-block/package.json b/packages/diagram-block/package.json new file mode 100644 index 0000000000..8ba05fb129 --- /dev/null +++ b/packages/diagram-block/package.json @@ -0,0 +1,136 @@ +{ + "name": "@blocknote/diagram-block", + "homepage": "https://github.com/TypeCellOS/BlockNote", + "private": false, + "sideEffects": [ + "*.css" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/TypeCellOS/BlockNote.git", + "directory": "packages/diagram-block" + }, + "license": "MPL-2.0", + "version": "0.51.4", + "files": [ + "dist", + "types", + "src" + ], + "keywords": [ + "react", + "javascript", + "editor", + "typescript", + "prosemirror", + "wysiwyg", + "rich-text-editor", + "notion", + "yjs", + "block-based", + "tiptap", + "mermaid", + "diagram", + "flowchart" + ], + "description": "A \"Notion-style\" block-based extensible text editor built on top of Prosemirror and Tiptap.", + "type": "module", + "source": "src/index.ts", + "types": "./types/src/index.d.ts", + "main": "./dist/blocknote-diagram-block.cjs", + "module": "./dist/blocknote-diagram-block.js", + "exports": { + ".": { + "types": "./types/src/index.d.ts", + "import": "./dist/blocknote-diagram-block.js", + "require": "./dist/blocknote-diagram-block.cjs" + }, + "./docx-exporter": { + "types": "./types/src/docx-exporter/index.d.ts", + "import": "./dist/docx-exporter.js", + "require": "./dist/docx-exporter.cjs" + }, + "./odt-exporter": { + "types": "./types/src/odt-exporter/index.d.ts", + "import": "./dist/odt-exporter.js", + "require": "./dist/odt-exporter.cjs" + }, + "./pdf-exporter": { + "types": "./types/src/pdf-exporter/index.d.ts", + "import": "./dist/pdf-exporter.js", + "require": "./dist/pdf-exporter.cjs" + }, + "./email-exporter": { + "types": "./types/src/email-exporter/index.d.ts", + "import": "./dist/email-exporter.js", + "require": "./dist/email-exporter.cjs" + } + }, + "scripts": { + "dev": "vp dev", + "lint": "vp lint src", + "test": "vp test --run", + "test-watch": "vp test watch", + "clean": "rimraf dist && rimraf types" + }, + "dependencies": { + "@blocknote/core": "workspace:^", + "@blocknote/react": "workspace:^", + "mermaid": "^11.0.0" + }, + "devDependencies": { + "@blocknote/shared": "workspace:^", + "react-icons": "^5.5.0", + "@blocknote/xl-docx-exporter": "workspace:^", + "@blocknote/xl-email-exporter": "workspace:^", + "@blocknote/xl-odt-exporter": "workspace:^", + "@blocknote/xl-pdf-exporter": "workspace:^", + "@react-email/components": "^1.0.12", + "@react-pdf/renderer": "^4.5.1", + "@types/react": "^19.2.3", + "@zip.js/zip.js": "^2.8.8", + "@types/react-dom": "^19.2.3", + "docx": "^9.6.1", + "react": "^19.2.5", + "react-dom": "^19.2.5", + "react-element-to-jsx-string": "^17.0.1", + "rimraf": "^5.0.10", + "rollup-plugin-webpack-stats": "^0.2.6", + "typescript": "^7.0.2", + "vite-plus": "catalog:" + }, + "peerDependencies": { + "@blocknote/xl-docx-exporter": "workspace:^", + "@blocknote/xl-email-exporter": "workspace:^", + "@blocknote/xl-odt-exporter": "workspace:^", + "@blocknote/xl-pdf-exporter": "workspace:^", + "@react-email/components": "^1.0.12", + "@react-pdf/renderer": "^4.5.1", + "docx": "^9.6.1", + "react": "^18.0 || ^19.0 || >= 19.0.0-rc", + "react-dom": "^18.0 || ^19.0 || >= 19.0.0-rc" + }, + "peerDependenciesMeta": { + "@blocknote/xl-docx-exporter": { + "optional": true + }, + "@blocknote/xl-email-exporter": { + "optional": true + }, + "@blocknote/xl-odt-exporter": { + "optional": true + }, + "@blocknote/xl-pdf-exporter": { + "optional": true + }, + "@react-email/components": { + "optional": true + }, + "@react-pdf/renderer": { + "optional": true + }, + "docx": { + "optional": true + } + } +} diff --git a/packages/diagram-block/src/block/createReactDiagramBlockSpec.test.tsx b/packages/diagram-block/src/block/createReactDiagramBlockSpec.test.tsx new file mode 100644 index 0000000000..9880c30d6d --- /dev/null +++ b/packages/diagram-block/src/block/createReactDiagramBlockSpec.test.tsx @@ -0,0 +1,281 @@ +import { BlockNoteEditor, BlockNoteSchema } from "@blocknote/core"; +import { BlockNoteViewRaw } from "@blocknote/react"; +import { flushSync } from "react-dom"; +import { createRoot, Root } from "react-dom/client"; +import { + afterEach, + beforeEach, + describe, + expect, + it, + vi, +} from "vite-plus/test"; +import { createReactDiagramBlockSpec } from "./createReactDiagramBlockSpec.js"; + +// TODO: deprecate jsdom, use vitest browser test? +/** + * @vitest-environment jsdom + */ + +// Mermaid needs a real browser to render, so the tests mock it - the specs +// under test cover the block's editing behavior, not Mermaid itself. Sources +// containing "INVALID" fail to parse, for testing the error states. +vi.mock("mermaid", () => ({ + default: { + initialize: vi.fn(), + parse: vi.fn(async (source: string) => { + if (source.includes("INVALID")) { + throw new Error("mock parse error"); + } + return true; + }), + render: vi.fn(async () => ({ + svg: '', + })), + }, +})); + +// The diagram block isn't a default block, so register it in a custom schema. +const schema = BlockNoteSchema.create().extend({ + blockSpecs: { diagram: createReactDiagramBlockSpec() }, +}); + +describe("Diagram block source popup", () => { + let editor: BlockNoteEditor; + let div: HTMLDivElement; + let root: Root; + + beforeEach(async () => { + // Mounted in the document tree so capture-phase handlers on ancestors see + // dispatched events. + div = document.createElement("div"); + document.body.appendChild(div); + + editor = BlockNoteEditor.create({ + schema, + trailingBlock: false, + initialContent: [ + { id: "para", type: "paragraph", content: "before" }, + { id: "diagram", type: "diagram", content: "graph TD\n A --> B" }, + ], + }); + + root = createRoot(div); + flushSync(() => { + root.render(); + }); + // Let the React node view render (and the mocked Mermaid "render") before + // assertions read its DOM. + await flush(); + + editor.setTextCursorPosition("diagram", "start"); + }); + + afterEach(() => { + root.unmount(); + editor._tiptapEditor.destroy(); + editor = undefined as any; + div.remove(); + }); + + /** Yields to the event loop so async renders & store updates can flush. */ + function flush() { + return new Promise((resolve) => setTimeout(resolve, 0)); + } + + /** The preview-with-source-popup root, which holds `data-open`. */ + function previewRoot(): HTMLElement { + return div.querySelector(".bn-preview-with-source-popup") as HTMLElement; + } + + /** Whether the source popup is open (the source is being edited). */ + function isPopupOpen(): boolean { + return previewRoot()?.getAttribute("data-open") === "true"; + } + + /** The diagram block's source as plain text. */ + function source(): string { + const block = editor.getBlock("diagram")!; + return (block.content as { text: string }[]) + .map((node) => node.text ?? "") + .join(""); + } + + /** Dispatches a keydown on the editor DOM, running the ProseMirror keymap. + * Returns whether the default was prevented. */ + function pressKey(key: string, init: KeyboardEventInit = {}): boolean { + const event = new KeyboardEvent("keydown", { + key, + bubbles: true, + cancelable: true, + ...init, + }); + editor.prosemirrorView!.dom.dispatchEvent(event); + return event.defaultPrevented; + } + + it("renders the (mocked) diagram preview", () => { + expect( + previewRoot().querySelector( + '.bn-preview-container [data-mermaid-mock="true"]', + ), + ).not.toBeNull(); + }); + + it("Enter opens the source popup", async () => { + expect(isPopupOpen()).toBe(false); + + expect(pressKey("Enter")).toBe(true); + await flush(); + + expect(isPopupOpen()).toBe(true); + }); + + it("Enter inserts a line break while the popup is open (newline enter behaviour)", async () => { + pressKey("Enter"); + await flush(); + expect(isPopupOpen()).toBe(true); + const sourceBefore = source(); + + // Unlike the (single-line) math block, Enter extends the source instead + // of closing the popup. + expect(pressKey("Enter")).toBe(true); + await flush(); + + expect(isPopupOpen()).toBe(true); + expect(source()).toBe(sourceBefore + "\n"); + }); + + it("Mod+A selects only the source while the popup is open", async () => { + pressKey("Enter"); + await flush(); + expect(isPopupOpen()).toBe(true); + + // jsdom isn't detected as macOS, so "Mod" resolves to Ctrl. + expect(pressKey("a", { ctrlKey: true })).toBe(true); + await flush(); + + // The selection spans exactly the block's source, not the document. + // Newlines are hard break nodes in the ProseMirror doc, so extract them as + // "\n" to match the block's source (where `getBlock` renders them as such). + const selection = editor.prosemirrorState.selection; + expect( + editor.prosemirrorState.doc.textBetween( + selection.from, + selection.to, + undefined, + (leafNode) => (leafNode.type.name === "hardBreak" ? "\n" : ""), + ), + ).toBe(source()); + expect(isPopupOpen()).toBe(true); + }); + + it("Escape closes the source popup", async () => { + pressKey("Enter"); + await flush(); + expect(isPopupOpen()).toBe(true); + + expect(pressKey("Escape")).toBe(true); + await flush(); + + expect(isPopupOpen()).toBe(false); + }); + + it("blocks character input while the popup is closed", () => { + expect(isPopupOpen()).toBe(false); + + // The source is hidden, so the keystroke is swallowed rather than + // silently editing the source the user can't see. + expect(pressKey("a")).toBe(true); + }); + + /** The mocked rendered diagram, if currently shown as the preview. */ + function renderedDiagram(): Element | null { + return previewRoot().querySelector( + '.bn-preview-container [data-mermaid-mock="true"]', + ); + } + + /** The compact error state, if currently shown as the preview. */ + function errorState(): Element | null { + return previewRoot().querySelector( + ".bn-preview-container .bn-preview-placeholder-error", + ); + } + + it("keeps the last preview while editing an erroneous source", async () => { + pressKey("Enter"); + await flush(); + expect(isPopupOpen()).toBe(true); + + editor.updateBlock("diagram", { content: "graph INVALID" }); + await flush(); + + // The last valid diagram stays up instead of the error state. + expect(renderedDiagram()).not.toBeNull(); + expect(errorState()).toBeNull(); + }); + + it("shows the error state once an erroneous source is committed", async () => { + pressKey("Enter"); + await flush(); + editor.updateBlock("diagram", { content: "graph INVALID" }); + await flush(); + + pressKey("Escape"); + await flush(); + expect(isPopupOpen()).toBe(false); + + // Committed with an error, so the (stale) preview is replaced by the + // error state. + expect(renderedDiagram()).toBeNull(); + expect(errorState()).not.toBeNull(); + }); + + it("keeps showing the error state when reopening a committed error", async () => { + pressKey("Enter"); + await flush(); + editor.updateBlock("diagram", { content: "graph INVALID" }); + await flush(); + pressKey("Escape"); + await flush(); + expect(errorState()).not.toBeNull(); + + pressKey("Enter"); + await flush(); + expect(isPopupOpen()).toBe(true); + + // The error was committed, so reopening doesn't bring the stale preview + // back - the error state stays until the source renders successfully. + expect(renderedDiagram()).toBeNull(); + expect(errorState()).not.toBeNull(); + }); + + it("shows the error state while editing when there's no last preview", async () => { + // A fresh block whose source never rendered successfully. + editor.removeBlocks(["diagram"]); + editor.insertBlocks( + [{ id: "broken", type: "diagram", content: "graph INVALID" }], + "para", + "after", + ); + await flush(); + + expect(renderedDiagram()).toBeNull(); + expect(errorState()).not.toBeNull(); + }); + + it("shows the placeholder for an empty source", async () => { + editor.removeBlocks(["diagram"]); + editor.insertBlocks( + [{ id: "empty", type: "diagram", content: "" }], + "para", + "after", + ); + await flush(); + + expect( + previewRoot().querySelector(".bn-preview-placeholder-text")?.textContent, + ).toBe("Add a Mermaid diagram"); + }); +}); diff --git a/packages/diagram-block/src/block/createReactDiagramBlockSpec.tsx b/packages/diagram-block/src/block/createReactDiagramBlockSpec.tsx new file mode 100644 index 0000000000..a7fd54101e --- /dev/null +++ b/packages/diagram-block/src/block/createReactDiagramBlockSpec.tsx @@ -0,0 +1,60 @@ +import { createBlockConfig } from "@blocknote/core"; +import { createReactBlockSpec } from "@blocknote/react"; + +import { + parseDiagramCodeContent, + parseDiagramCodeElement, +} from "./helpers/parse/parseDiagramCodeElement.js"; +import { DiagramBlockPreviewWithPopup } from "./helpers/render/DiagramBlockPreviewWithPopup.js"; + +export const createDiagramBlockConfig = createBlockConfig( + () => + ({ + type: "diagram" as const, + // The block is semantically a diagram; Mermaid is its (only, for now) + // rendering engine. An `engine` prop with a "mermaid" default can be + // added later without breaking stored documents. + propSchema: {}, + content: "plain" as const, + }) as const, +); + +export type DiagramBlockConfig = ReturnType; + +export const createReactDiagramBlockSpec = createReactBlockSpec( + createDiagramBlockConfig, + { + meta: { + code: true, + defining: true, + isolating: false, + // Diagram source is Mermaid, so highlight it as such when the syntax + // highlighting extension is present. + // + // NOTE: this currently has no visible effect. Shiki's Mermaid grammar is + // a Markdown injection (`injectionSelector: "L:text.html.markdown"`) that + // only tokenizes inside a ```` ```mermaid ```` fence, so it produces no + // tokens for bare Mermaid source. See + // https://github.com/shikijs/shiki/issues/973 - once that's resolved + // upstream, highlighting should start working with no change here. + highlight: () => "mermaid", + hasPreview: true, + hardBreakShortcut: "enter", + }, + parse: parseDiagramCodeElement, + parseContent: parseDiagramCodeContent, + // The code block also parses `
    ` elements, so the diagram's
    +    // rule must be tried first to claim the `language-mermaid` ones.
    +    runsBefore: ["codeBlock"],
    +    render: DiagramBlockPreviewWithPopup,
    +    toExternalHTML: (props) => (
    +      
    +        
    +      
    + ), + }, +); diff --git a/packages/diagram-block/src/block/getDiagramBlockTypeSelectItems.ts b/packages/diagram-block/src/block/getDiagramBlockTypeSelectItems.ts new file mode 100644 index 0000000000..ddb8718cda --- /dev/null +++ b/packages/diagram-block/src/block/getDiagramBlockTypeSelectItems.ts @@ -0,0 +1,23 @@ +import { BlockNoteEditor } from "@blocknote/core"; +import { BlockTypeSelectItem } from "@blocknote/react"; +import { TbSitemap } from "react-icons/tb"; + +import { getDiagramDictionary } from "../i18n/dictionary.js"; + +/** + * Block type select item for the Diagram block, for use with the formatting + * toolbar's `BlockTypeSelect` (spread into its `items` alongside the defaults). + * The Diagram block lives in an optional package, so it isn't part of the + * default items - this lets consumers opt it in. The name comes from the + * editor's diagram dictionary, like the default items' names come from its + * main dictionary. + */ +export const getDiagramBlockTypeSelectItems = ( + editor: BlockNoteEditor, +): BlockTypeSelectItem[] => [ + { + name: getDiagramDictionary(editor).block_type_select.name, + type: "diagram", + icon: TbSitemap, + }, +]; diff --git a/packages/diagram-block/src/block/helpers/index.ts b/packages/diagram-block/src/block/helpers/index.ts new file mode 100644 index 0000000000..b7d92c8b36 --- /dev/null +++ b/packages/diagram-block/src/block/helpers/index.ts @@ -0,0 +1,2 @@ +export * from "./parse/index.js"; +export * from "./render/index.js"; diff --git a/packages/diagram-block/src/block/helpers/parse/index.ts b/packages/diagram-block/src/block/helpers/parse/index.ts new file mode 100644 index 0000000000..1acfba2d07 --- /dev/null +++ b/packages/diagram-block/src/block/helpers/parse/index.ts @@ -0,0 +1 @@ +export * from "./parseDiagramCodeElement.js"; diff --git a/packages/diagram-block/src/block/helpers/parse/parseDiagramCodeElement.ts b/packages/diagram-block/src/block/helpers/parse/parseDiagramCodeElement.ts new file mode 100644 index 0000000000..ae30b454bd --- /dev/null +++ b/packages/diagram-block/src/block/helpers/parse/parseDiagramCodeElement.ts @@ -0,0 +1,30 @@ +import { parsePreCodeContent } from "@blocknote/core"; + +// Parses `
    ` elements - the fenced code
    +// block representation used by Markdown & other editors - into diagram
    +// blocks.
    +export const parseDiagramCodeElement = (el: HTMLElement) => {
    +  if (el.tagName !== "PRE") {
    +    return undefined;
    +  }
    +
    +  const code = el.firstElementChild;
    +  if (el.childElementCount !== 1 || code?.tagName !== "CODE") {
    +    return undefined;
    +  }
    +
    +  const language =
    +    code.getAttribute("data-language") ||
    +    code.className
    +      .split(" ")
    +      .find((name) => name.startsWith("language-"))
    +      ?.replace("language-", "");
    +
    +  return language === "mermaid" ? {} : undefined;
    +};
    +
    +// Parses the code element's text as the diagram block's source, preserving
    +// line breaks.
    +export const parseDiagramCodeContent = (
    +  options: Parameters[0],
    +) => parsePreCodeContent(options, "diagram");
    diff --git a/packages/diagram-block/src/block/helpers/render/DiagramBlockPreviewWithPopup.tsx b/packages/diagram-block/src/block/helpers/render/DiagramBlockPreviewWithPopup.tsx
    new file mode 100644
    index 0000000000..713aaa8618
    --- /dev/null
    +++ b/packages/diagram-block/src/block/helpers/render/DiagramBlockPreviewWithPopup.tsx
    @@ -0,0 +1,109 @@
    +import {
    +  PreviewPlaceholder,
    +  ReactCustomBlockRenderProps,
    +  SourceBlockWithPreview,
    +} from "@blocknote/react";
    +import mermaid from "mermaid";
    +import { useEffect, useState } from "react";
    +import { SiMermaid } from "react-icons/si";
    +
    +import { plainContentToString } from "@blocknote/core";
    +import { initializeMermaid } from "../../../helpers/initializeMermaid.js";
    +import { trimDiagramSVG } from "../../../helpers/trimDiagramSVG.js";
    +import { getDiagramDictionary } from "../../../i18n/dictionary.js";
    +import { DiagramBlockConfig } from "../../createReactDiagramBlockSpec.js";
    +
    +// Each render call needs its own element ID.
    +let mermaidElementId = 0;
    +
    +/**
    + * Renders the Mermaid source to an SVG string. The current diagram (or the
    + * last valid one, when the source has an error) stays up until the new one
    + * has fully rendered, and swapping inline SVG commits in a single frame - so
    + * the preview never flashes.
    + */
    +export const useMermaidSVG = (source: string) => {
    +  const [svg, setSVG] = useState("");
    +  const [error, setError] = useState(undefined);
    +
    +  useEffect(() => {
    +    if (!source.trim()) {
    +      setSVG("");
    +      setError(undefined);
    +
    +      return;
    +    }
    +
    +    initializeMermaid();
    +
    +    // Rendering is asynchronous, so bail out if the source changed (or the
    +    // block was removed) before it finished.
    +    let stale = false;
    +    void (async () => {
    +      // The rendered SVG carries the given ID into the document, and Mermaid
    +      // removes any existing element with that ID when rendering. So each
    +      // render gets a fresh ID - reusing one makes Mermaid yank the displayed
    +      // diagram out of the page mid-render.
    +      const id = `mermaid-preview-${mermaidElementId++}`;
    +      try {
    +        await mermaid.parse(source);
    +        const { svg } = await mermaid.render(id, source);
    +        if (!stale) {
    +          setSVG(trimDiagramSVG(svg));
    +          setError(undefined);
    +        }
    +      } catch (err) {
    +        if (!stale) {
    +          setError(err instanceof Error ? err.message : String(err));
    +        }
    +      }
    +    })();
    +
    +    return () => {
    +      stale = true;
    +    };
    +  }, [source]);
    +
    +  return { svg, error };
    +};
    +export const DiagramBlockPreviewWithPopup = (
    +  props: ReactCustomBlockRenderProps,
    +) => {
    +  const source = plainContentToString(props.block.content).trim();
    +  const { svg, error } = useMermaidSVG(source);
    +  const dict = getDiagramDictionary(props.editor).block;
    +
    +  return (
    +    
    +        ) : undefined
    +      }
    +      error={error}
    +      errorPreview={
    +        }
    +          text={dict.preview_error_text}
    +        />
    +      }
    +      emptySourcePlaceholder={
    +        } text={dict.add_source_text} />
    +      }
    +      sourcePlaceholder={dict.input_placeholder}
    +    />
    +  );
    +};
    diff --git a/packages/diagram-block/src/block/helpers/render/index.ts b/packages/diagram-block/src/block/helpers/render/index.ts
    new file mode 100644
    index 0000000000..5ac7393214
    --- /dev/null
    +++ b/packages/diagram-block/src/block/helpers/render/index.ts
    @@ -0,0 +1 @@
    +export * from "./DiagramBlockPreviewWithPopup.js";
    diff --git a/packages/diagram-block/src/block/index.ts b/packages/diagram-block/src/block/index.ts
    new file mode 100644
    index 0000000000..cf5493bee0
    --- /dev/null
    +++ b/packages/diagram-block/src/block/index.ts
    @@ -0,0 +1,3 @@
    +export * from "./createReactDiagramBlockSpec.js";
    +export * from "./getDiagramBlockTypeSelectItems.js";
    +export * from "./helpers/index.js";
    diff --git a/packages/diagram-block/src/docx-exporter/docxExporter.test.ts b/packages/diagram-block/src/docx-exporter/docxExporter.test.ts
    new file mode 100644
    index 0000000000..3c293f60ba
    --- /dev/null
    +++ b/packages/diagram-block/src/docx-exporter/docxExporter.test.ts
    @@ -0,0 +1,216 @@
    +import { BlockNoteSchema, defaultBlockSpecs } from "@blocknote/core";
    +import { en } from "@blocknote/core/locales";
    +import {
    +  DOCXExporter,
    +  docxDefaultSchemaMappings,
    +} from "@blocknote/xl-docx-exporter";
    +import { BlobReader, ZipReader } from "@zip.js/zip.js";
    +import { Packer } from "docx";
    +import { beforeAll, describe, expect, it } from "vite-plus/test";
    +
    +import {
    +  diagramDocument,
    +  renderInvalidDiagram,
    +  zipEntryContent,
    +} from "../exporterTestUtil.js";
    +import { createDiagramBlockMapping, diagramBlockMapping } from "./index.js";
    +
    +beforeAll(async () => {
    +  // @ts-expect-error - Blob polyfill for Node test environment
    +  globalThis.Blob = (await import("node:buffer")).Blob;
    +});
    +
    +function createExporter(
    +  diagram: ReturnType,
    +  options?: ConstructorParameters[2],
    +) {
    +  return new DOCXExporter(
    +    BlockNoteSchema.create({ blockSpecs: defaultBlockSpecs }),
    +    {
    +      ...docxDefaultSchemaMappings,
    +      blockMapping: {
    +        ...docxDefaultSchemaMappings.blockMapping,
    +        diagram,
    +      },
    +    } as any,
    +    options,
    +  );
    +}
    +
    +const documentOptions = {
    +  sectionOptions: {},
    +  documentOptions: {},
    +  locale: "en-US",
    +} as any;
    +
    +describe("docx exporter mappings", () => {
    +  it("should render an error placeholder for invalid sources", async () => {
    +    // The renderer returns invalid sources as a typed error, and the
    +    // mapping renders the error placeholder, identifying the diagram by the
    +    // source's first line.
    +    const exporter = createExporter(
    +      createDiagramBlockMapping({ renderDiagram: renderInvalidDiagram }),
    +    );
    +
    +    const doc = await exporter.toDocxJsDocument(
    +      diagramDocument,
    +      documentOptions,
    +    );
    +    const documentXML = await zipEntryContent(
    +      await Packer.toBlob(doc),
    +      "word/document.xml",
    +    );
    +
    +    expect(documentXML).toContain("Invalid diagram");
    +    expect(documentXML).toContain("graph TD");
    +    expect(documentXML).not.toContain("w:drawing");
    +  });
    +
    +  it("should throw a descriptive error without a renderer outside the browser", async () => {
    +    // The built-in Mermaid renderer can't work here, and silently degrading
    +    // is worse than failing loudly - the error names the `renderDiagram`
    +    // option to pass.
    +    const exporter = createExporter(diagramBlockMapping);
    +
    +    await expect(
    +      exporter.toDocxJsDocument(diagramDocument, documentOptions),
    +    ).rejects.toThrow("pass a `renderDiagram` function");
    +  });
    +
    +  it("should render empty diagrams as an empty paragraph", async () => {
    +    // Empty source isn't an error - there's just nothing to render (and the
    +    // renderer is never invoked, so no browser is needed).
    +    const exporter = createExporter(diagramBlockMapping);
    +
    +    const doc = await exporter.toDocxJsDocument(
    +      [
    +        {
    +          id: "1",
    +          type: "diagram",
    +          props: {},
    +          content: [],
    +          children: [],
    +        },
    +      ] as any,
    +      documentOptions,
    +    );
    +    const documentXML = await zipEntryContent(
    +      await Packer.toBlob(doc),
    +      "word/document.xml",
    +    );
    +
    +    expect(documentXML).not.toContain("Invalid diagram");
    +    expect(documentXML).not.toContain("w:drawing");
    +  });
    +
    +  it("should embed the image with the renderer's actual format", async () => {
    +    // Renderers aren't required to produce PNGs - the embed must carry the
    +    // format the image declares.
    +    const exporter = createExporter(
    +      createDiagramBlockMapping({
    +        renderDiagram: async () => ({
    +          image: {
    +            mimeType: "image/jpeg",
    +            data: new Uint8Array([0, 0, 0]),
    +            width: 100,
    +            height: 50,
    +          },
    +        }),
    +      }),
    +    );
    +
    +    const doc = await exporter.toDocxJsDocument(
    +      diagramDocument,
    +      documentOptions,
    +    );
    +    const entries = await new ZipReader(
    +      new BlobReader(await Packer.toBlob(doc)),
    +    ).getEntries();
    +
    +    expect(
    +      entries.some((entry) => /media\/.*\.jpe?g$/.test(entry.filename)),
    +    ).toBe(true);
    +  });
    +
    +  it("should throw when the renderer produces a format DOCX can't embed", async () => {
    +    // An unknown format is a renderer contract violation - mislabeling the
    +    // bytes would corrupt the document, so it fails loudly instead.
    +    const exporter = createExporter(
    +      createDiagramBlockMapping({
    +        renderDiagram: async () => ({
    +          image: {
    +            mimeType: "image/webp",
    +            data: new Uint8Array([0, 0, 0]),
    +            width: 100,
    +            height: 50,
    +          },
    +        }),
    +      }),
    +    );
    +
    +    await expect(
    +      exporter.toDocxJsDocument(diagramDocument, documentOptions),
    +    ).rejects.toThrow('renderer produced "image/webp"');
    +  });
    +
    +  it("should scale wide diagrams down to the page width", async () => {
    +    // Word clips images wider than the body area at the right margin, so
    +    // the display size is clamped (1200x600 -> 600x300; EMU = px * 9525).
    +    const exporter = createExporter(
    +      createDiagramBlockMapping({
    +        renderDiagram: async () => ({
    +          image: {
    +            mimeType: "image/png",
    +            data: new Uint8Array([0, 0, 0]),
    +            width: 1200,
    +            height: 600,
    +          },
    +        }),
    +      }),
    +    );
    +
    +    const doc = await exporter.toDocxJsDocument(
    +      diagramDocument,
    +      documentOptions,
    +    );
    +    const documentXML = await zipEntryContent(
    +      await Packer.toBlob(doc),
    +      "word/document.xml",
    +    );
    +
    +    expect(documentXML).toContain('cx="5715000"');
    +    expect(documentXML).toContain('cy="2857500"');
    +  });
    +
    +  it("should render placeholders from the configured dictionary", async () => {
    +    // Exporter strings are never hardcoded: the placeholder comes from the
    +    // `diagram` section of the exporter's dictionary, exactly as it would
    +    // from an editor dictionary (bundled English when not configured).
    +    const exporter = createExporter(
    +      createDiagramBlockMapping({ renderDiagram: renderInvalidDiagram }),
    +      {
    +        dictionary: {
    +          ...en,
    +          diagram: {
    +            exporter: {
    +              invalid_diagram: (source: string) =>
    +                `Ungültiges Diagramm „${source}"`,
    +            },
    +          },
    +        },
    +      },
    +    );
    +
    +    const doc = await exporter.toDocxJsDocument(
    +      diagramDocument,
    +      documentOptions,
    +    );
    +    const documentXML = await zipEntryContent(
    +      await Packer.toBlob(doc),
    +      "word/document.xml",
    +    );
    +
    +    expect(documentXML).toContain("Ungültiges Diagramm");
    +    expect(documentXML).not.toContain("Invalid diagram");
    +  });
    +});
    diff --git a/packages/diagram-block/src/docx-exporter/index.ts b/packages/diagram-block/src/docx-exporter/index.ts
    new file mode 100644
    index 0000000000..6775ad09a4
    --- /dev/null
    +++ b/packages/diagram-block/src/docx-exporter/index.ts
    @@ -0,0 +1,139 @@
    +import type {
    +  BlockConfig,
    +  BlockFromConfigNoChildren,
    +  Exporter,
    +} from "@blocknote/core";
    +import { plainContentToString } from "@blocknote/core";
    +import { AlignmentType, ImageRun, Paragraph, TextRun } from "docx";
    +
    +import {
    +  RenderDiagram,
    +  renderDiagramToImage,
    +} from "../helpers/renderDiagramToImage.js";
    +import { getDiagramExporterDictionary } from "../i18n/dictionary.js";
    +
    +export type { RenderDiagram } from "../helpers/renderDiagramToImage.js";
    +
    +const MAX_WIDTH_PIXELS = 600;
    +
    +type DiagramBlock = BlockFromConfigNoChildren<
    +  BlockConfig<"diagram", {}, "plain">,
    +  any,
    +  any
    +>;
    +
    +// Mirrors the editor, which shows the error state in the preview
    +// placeholder, identifying the diagram by the (first line of the) source.
    +// The parser's message is deliberately NOT rendered: it's authoring detail
    +// (and untranslated English) - the editor is where the author sees and
    +// fixes it.
    +function errorParagraph(
    +  exporter: Exporter,
    +  source: string,
    +) {
    +  return new Paragraph({
    +    alignment: AlignmentType.CENTER,
    +    children: [
    +      new TextRun({
    +        text: getDiagramExporterDictionary(exporter).invalid_diagram(
    +          source.split("\n")[0],
    +        ),
    +        italics: true,
    +        color: "999999",
    +      }),
    +    ],
    +  });
    +}
    +
    +/**
    + * Creates a DOCX block mapping for `@blocknote/diagram-block` that embeds
    + * diagrams as images. Rendering runs in the browser by default (Mermaid
    + * can't render outside of it); when exporting elsewhere (e.g. server-side),
    + * pass a `renderDiagram` function backed by e.g. `@mermaid-js/mermaid-cli`
    + * or a Kroki server. Invalid sources render an error placeholder (mirroring
    + * the editor):
    + *
    + * ```ts
    + * import { createDiagramBlockMapping } from "@blocknote/diagram-block/docx-exporter";
    + *
    + * new DOCXExporter(schema, {
    + *   ...docxDefaultSchemaMappings,
    + *   blockMapping: {
    + *     ...docxDefaultSchemaMappings.blockMapping,
    + *     diagram: createDiagramBlockMapping({ renderDiagram }),
    + *   },
    + * });
    + * ```
    + */
    +export function createDiagramBlockMapping(options?: {
    +  renderDiagram?: RenderDiagram;
    +}) {
    +  return async (
    +    block: DiagramBlock,
    +    exporter: Exporter,
    +  ) => {
    +    const source = plainContentToString(block.content);
    +    if (!source.trim()) {
    +      return new Paragraph({});
    +    }
    +
    +    const renderDiagram =
    +      options?.renderDiagram ??
    +      (typeof document !== "undefined" ? renderDiagramToImage : undefined);
    +    if (!renderDiagram) {
    +      throw new Error(
    +        "Rendering diagrams to images requires a browser. When exporting elsewhere, pass a `renderDiagram` function to `createDiagramBlockMapping` (e.g. backed by @mermaid-js/mermaid-cli or a Kroki server).",
    +      );
    +    }
    +
    +    const result = await renderDiagram(source);
    +    if (result.error !== undefined) {
    +      return errorParagraph(exporter, source);
    +    }
    +
    +    // Plugged-in renderers aren't required to produce PNGs; embed with the
    +    // raster format the image declares. An unknown format is a renderer
    +    // contract violation - mislabeling the bytes would corrupt the document,
    +    // so it propagates as an error instead.
    +    const imageTypes = {
    +      "image/png": "png",
    +      "image/jpeg": "jpg",
    +      "image/gif": "gif",
    +      "image/bmp": "bmp",
    +    } as const;
    +    const imageType =
    +      imageTypes[result.image.mimeType as keyof typeof imageTypes];
    +    if (!imageType) {
    +      throw new Error(
    +        `DOCX embeds support png/jpeg/gif/bmp diagram images, but the renderer produced "${result.image.mimeType}".`,
    +      );
    +    }
    +
    +    // A DOCX body is ~624px wide with default margins; Word clips wider
    +    // images at the right margin, so scale the display size down to fit
    +    // (the image data keeps its full resolution).
    +    const displayWidth = Math.min(result.image.width, MAX_WIDTH_PIXELS);
    +    return new Paragraph({
    +      alignment: AlignmentType.CENTER,
    +      children: [
    +        new ImageRun({
    +          data: result.image.data,
    +          type: imageType,
    +          transformation: {
    +            width: displayWidth,
    +            height: Math.round(
    +              (displayWidth / result.image.width) * result.image.height,
    +            ),
    +          },
    +        }),
    +      ],
    +    });
    +  };
    +}
    +
    +/**
    + * DOCX block mapping for `@blocknote/diagram-block` with the default options
    + * - see {@link createDiagramBlockMapping}. Browser-only; when exporting
    + * elsewhere, use the factory to pass a `renderDiagram` function.
    + */
    +export const diagramBlockMapping = createDiagramBlockMapping();
    diff --git a/packages/diagram-block/src/email-exporter/emailExporter.test.tsx b/packages/diagram-block/src/email-exporter/emailExporter.test.tsx
    new file mode 100644
    index 0000000000..9676f6944c
    --- /dev/null
    +++ b/packages/diagram-block/src/email-exporter/emailExporter.test.tsx
    @@ -0,0 +1,78 @@
    +import { BlockNoteSchema, defaultBlockSpecs } from "@blocknote/core";
    +import {
    +  createCIDImageDelivery,
    +  ReactEmailExporter,
    +  reactEmailDefaultSchemaMappings,
    +} from "@blocknote/xl-email-exporter";
    +import { describe, expect, it } from "vite-plus/test";
    +
    +import {
    +  diagramDocument,
    +  renderDiagram,
    +  renderInvalidDiagram,
    +} from "../exporterTestUtil.js";
    +import { createDiagramBlockMapping, diagramBlockMapping } from "./index.js";
    +
    +function createExporter(diagram: ReturnType) {
    +  return new ReactEmailExporter(
    +    BlockNoteSchema.create({ blockSpecs: defaultBlockSpecs }),
    +    {
    +      ...reactEmailDefaultSchemaMappings,
    +      blockMapping: {
    +        ...reactEmailDefaultSchemaMappings.blockMapping,
    +        diagram,
    +      },
    +    } as any,
    +  );
    +}
    +
    +describe("email exporter mappings", () => {
    +  it("should embed the rendered diagram as a data URL image", async () => {
    +    const exporter = createExporter(
    +      createDiagramBlockMapping({ renderDiagram }),
    +    );
    +
    +    const html = await exporter.toReactEmailDocument(diagramDocument);
    +
    +    expect(html).toContain('src="data:image/png;base64,');
    +    // The Mermaid source stays available as the alt text.
    +    expect(html).toContain('alt="graph TD');
    +  });
    +
    +  it("should throw a descriptive error without a renderer outside the browser", async () => {
    +    const exporter = createExporter(diagramBlockMapping);
    +
    +    await expect(
    +      exporter.toReactEmailDocument(diagramDocument),
    +    ).rejects.toThrow("pass a `renderDiagram` function");
    +  });
    +
    +  it("should render an error placeholder for invalid sources", async () => {
    +    // The renderer returns invalid sources as a typed error, and the
    +    // mapping renders the error placeholder - never the raw source.
    +    const exporter = createExporter(
    +      createDiagramBlockMapping({ renderDiagram: renderInvalidDiagram }),
    +    );
    +
    +    const html = await exporter.toReactEmailDocument(diagramDocument);
    +
    +    expect(html).toContain("Invalid diagram");
    +    expect(html).toContain("graph TD");
    +    expect(html).not.toContain(" {
    +    const imageDelivery = createCIDImageDelivery();
    +    const exporter = createExporter(
    +      createDiagramBlockMapping({ renderDiagram, imageDelivery }),
    +    );
    +
    +    const html = await exporter.toReactEmailDocument(diagramDocument);
    +
    +    expect(html).toContain('src="cid:diagram-1@blocknote"');
    +    // The Mermaid source stays available as the alt text.
    +    expect(html).toContain('alt="graph TD');
    +    expect(imageDelivery.attachments).toHaveLength(1);
    +    expect(imageDelivery.attachments[0].contentType).toBe("image/png");
    +  });
    +});
    diff --git a/packages/diagram-block/src/email-exporter/index.tsx b/packages/diagram-block/src/email-exporter/index.tsx
    new file mode 100644
    index 0000000000..4d99388b40
    --- /dev/null
    +++ b/packages/diagram-block/src/email-exporter/index.tsx
    @@ -0,0 +1,117 @@
    +import type {
    +  BlockConfig,
    +  BlockFromConfigNoChildren,
    +  Exporter,
    +} from "@blocknote/core";
    +import { plainContentToString } from "@blocknote/core";
    +import {
    +  dataURLImageDelivery,
    +  ReactEmailImageDelivery,
    +} from "@blocknote/xl-email-exporter";
    +import { Img, Text } from "@react-email/components";
    +
    +import {
    +  RenderDiagram,
    +  renderDiagramToImage,
    +} from "../helpers/renderDiagramToImage.js";
    +import { getDiagramExporterDictionary } from "../i18n/dictionary.js";
    +
    +export type { RenderDiagram } from "../helpers/renderDiagramToImage.js";
    +
    +type DiagramBlock = BlockFromConfigNoChildren<
    +  BlockConfig<"diagram", {}, "plain">,
    +  any,
    +  any
    +>;
    +
    +// Emails render in containers around 600px wide.
    +const MAX_WIDTH_PIXELS = 600;
    +
    +/**
    + * Creates an email block mapping for `@blocknote/diagram-block` that embeds
    + * diagrams as images, with the Mermaid source as the alt text. Rendering
    + * runs in the browser by default (Mermaid can't render outside of it); when
    + * exporting elsewhere (e.g. server-side email rendering), pass a
    + * `renderDiagram` function backed by e.g. `@mermaid-js/mermaid-cli` or a
    + * Kroki server. Images are embedded as data URLs by default; pass an
    + * `imageDelivery` (e.g. `createCIDImageDelivery` from
    + * `@blocknote/xl-email-exporter`) to deliver them as inline `cid:`
    + * attachments instead, which more email clients display. Invalid sources
    + * render an error placeholder (mirroring the editor):
    + *
    + * ```ts
    + * import { createDiagramBlockMapping } from "@blocknote/diagram-block/email-exporter";
    + *
    + * new ReactEmailExporter(schema, {
    + *   ...reactEmailDefaultSchemaMappings,
    + *   blockMapping: {
    + *     ...reactEmailDefaultSchemaMappings.blockMapping,
    + *     diagram: createDiagramBlockMapping({ renderDiagram, imageDelivery }),
    + *   },
    + * });
    + * ```
    + */
    +export function createDiagramBlockMapping(options?: {
    +  renderDiagram?: RenderDiagram;
    +  imageDelivery?: ReactEmailImageDelivery;
    +}) {
    +  return async (
    +    block: DiagramBlock,
    +    exporter: Exporter,
    +  ) => {
    +    const source = plainContentToString(block.content);
    +    if (!source.trim()) {
    +      return ;
    +    }
    +
    +    const renderDiagram =
    +      options?.renderDiagram ??
    +      (typeof document !== "undefined" ? renderDiagramToImage : undefined);
    +    if (!renderDiagram) {
    +      throw new Error(
    +        "Rendering diagrams to images requires a browser. When exporting elsewhere, pass a `renderDiagram` function to `createDiagramBlockMapping` (e.g. backed by @mermaid-js/mermaid-cli or a Kroki server).",
    +      );
    +    }
    +
    +    const result = await renderDiagram(source);
    +    if (result.error !== undefined) {
    +      // Mirrors the editor, which shows the error state in the preview
    +      // placeholder, identifying the diagram by the (first line of the)
    +      // source. The parser's message is deliberately NOT rendered: it's
    +      // authoring detail (and untranslated English) - the editor is where
    +      // the author sees and fixes it.
    +      return (
    +        
    +          {getDiagramExporterDictionary(exporter).invalid_diagram(
    +            source.split("\n")[0],
    +          )}
    +        
    +      );
    +    }
    +
    +    const displayWidth = Math.min(result.image.width, MAX_WIDTH_PIXELS);
    +    const src = (options?.imageDelivery ?? dataURLImageDelivery).deliver({
    +      ...result.image,
    +      name: "diagram",
    +    });
    +
    +    return (
    +      {source}
    +    );
    +  };
    +}
    +
    +/**
    + * Email block mapping for `@blocknote/diagram-block` with the default
    + * options - see {@link createDiagramBlockMapping}. Browser-only; when
    + * exporting elsewhere, use the factory to pass a `renderDiagram` function.
    + */
    +export const diagramBlockMapping = createDiagramBlockMapping();
    diff --git a/packages/diagram-block/src/exporterTestUtil.ts b/packages/diagram-block/src/exporterTestUtil.ts
    new file mode 100644
    index 0000000000..347050d440
    --- /dev/null
    +++ b/packages/diagram-block/src/exporterTestUtil.ts
    @@ -0,0 +1,51 @@
    +import { BlobReader, FileEntry, TextWriter, ZipReader } from "@zip.js/zip.js";
    +
    +import type { RenderDiagram } from "./helpers/renderDiagramToImage.js";
    +
    +export const diagramDocument = [
    +  {
    +    id: "1",
    +    type: "diagram",
    +    props: {},
    +    content: [
    +      { type: "text", text: "graph TD\n  A[Start] --> B[End]", styles: {} },
    +    ],
    +    children: [],
    +  },
    +] as any;
    +
    +// A real (1x1 transparent) PNG: some export paths probe the image bytes for
    +// metadata, so stub images must be actual PNGs.
    +const pngBytes = Uint8Array.from(
    +  atob(
    +    "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==",
    +  ),
    +  (char) => char.charCodeAt(0),
    +);
    +
    +// A stub renderer, standing in for e.g. mermaid-cli on a server - the real
    +// (browser-only) Mermaid rendering is covered by its `.browser.test`.
    +export const renderDiagram: RenderDiagram = async () => ({
    +  image: {
    +    mimeType: "image/png",
    +    data: pngBytes,
    +    width: 100,
    +    height: 50,
    +  },
    +});
    +
    +// A renderer reporting the expected failure: invalid Mermaid source.
    +export const renderInvalidDiagram: RenderDiagram = async () => ({
    +  error: "No diagram type detected",
    +});
    +
    +export async function zipEntryContent(
    +  zip: globalThis.Blob,
    +  filename: string,
    +): Promise {
    +  const entries = await new ZipReader(new BlobReader(zip)).getEntries();
    +  const entry = entries.find((e) => e.filename === filename && !e.directory) as
    +    | FileEntry
    +    | undefined;
    +  return entry ? await entry.getData(new TextWriter()) : "";
    +}
    diff --git a/packages/diagram-block/src/getDiagramSlashMenuItems.tsx b/packages/diagram-block/src/getDiagramSlashMenuItems.tsx
    new file mode 100644
    index 0000000000..d004ecb47e
    --- /dev/null
    +++ b/packages/diagram-block/src/getDiagramSlashMenuItems.tsx
    @@ -0,0 +1,36 @@
    +import { BlockNoteEditor } from "@blocknote/core";
    +import { insertOrUpdateBlockForSlashMenu } from "@blocknote/core/extensions";
    +import { DefaultReactSuggestionItem } from "@blocknote/react";
    +import { TbSitemap } from "react-icons/tb";
    +
    +import { getDiagramDictionary } from "./i18n/dictionary.js";
    +
    +/**
    + * Slash menu item for the Diagram block, for use with the suggestion menu
    + * (combine with the default items via `combineByGroup`). The Diagram block
    + * lives in an optional package, so the item isn't part of the defaults - this
    + * lets consumers opt it in. Only returned when the block is actually in the
    + * editor's schema.
    + */
    +export function getDiagramSlashMenuItems(
    +  editor: BlockNoteEditor,
    +): Omit[] {
    +  const items: Omit[] = [];
    +
    +  if ("diagram" in editor.schema.blockSchema) {
    +    items.push({
    +      ...getDiagramDictionary(editor).slash_menu.diagram,
    +      icon: ,
    +      // Inserts a starter diagram (rather than an empty source) so the
    +      // preview shows something to click and edit.
    +      onItemClick: () => {
    +        insertOrUpdateBlockForSlashMenu(editor, {
    +          type: "diagram",
    +          content: "graph TD\n    A[Start] --> B[Stop]",
    +        });
    +      },
    +    });
    +  }
    +
    +  return items;
    +}
    diff --git a/packages/diagram-block/src/helpers/index.ts b/packages/diagram-block/src/helpers/index.ts
    new file mode 100644
    index 0000000000..b50f640471
    --- /dev/null
    +++ b/packages/diagram-block/src/helpers/index.ts
    @@ -0,0 +1,3 @@
    +export * from "./initializeMermaid.js";
    +export * from "./renderDiagramToImage.js";
    +export * from "./trimDiagramSVG.js";
    diff --git a/packages/diagram-block/src/helpers/initializeMermaid.ts b/packages/diagram-block/src/helpers/initializeMermaid.ts
    new file mode 100644
    index 0000000000..11537104f7
    --- /dev/null
    +++ b/packages/diagram-block/src/helpers/initializeMermaid.ts
    @@ -0,0 +1,18 @@
    +import mermaid from "mermaid";
    +
    +// The diagrams are rendered manually whenever a block's source changes.
    +let initialized = false;
    +
    +export const initializeMermaid = () => {
    +  if (!initialized) {
    +    initialized = true;
    +    mermaid.initialize({
    +      startOnLoad: false,
    +      // On render errors, makes Mermaid throw right away - instead of
    +      // rendering its own error graphic AND leaving its temporary render
    +      // element behind in the document (it only cleans the element up with
    +      // this option set). The block renders its own error UI.
    +      suppressErrorRendering: true,
    +    });
    +  }
    +};
    diff --git a/packages/diagram-block/src/helpers/renderDiagramToImage.browser.test.ts b/packages/diagram-block/src/helpers/renderDiagramToImage.browser.test.ts
    new file mode 100644
    index 0000000000..8727efb465
    --- /dev/null
    +++ b/packages/diagram-block/src/helpers/renderDiagramToImage.browser.test.ts
    @@ -0,0 +1,48 @@
    +import { exportImageToDataURL } from "@blocknote/core";
    +import { decodeAndSample } from "@shared/util/browserImageTestUtil.js";
    +import { describe, expect, test } from "vite-plus/test";
    +
    +import { renderDiagramToImage } from "./renderDiagramToImage.js";
    +
    +// Browser unit tests for the browser-only Mermaid renderer - the
    +// `RenderDiagram` implementation that the (node) unit suites replace with
    +// stubs. Runs in the tests package's browser suite.
    +describe("renderDiagramToImage", () => {
    +  test(
    +    "renders Mermaid source to a non-blank PNG",
    +    { timeout: 15000 },
    +    async () => {
    +      const result = await renderDiagramToImage(
    +        "graph TD\n  A[Start] --> B[End]",
    +      );
    +      if (result.error !== undefined) {
    +        throw new Error(`Expected a successful render: ${result.error}`);
    +      }
    +
    +      expect(result.image.mimeType).toBe("image/png");
    +      expect(result.image.width).toBeGreaterThan(0);
    +      const { inkedPixels, inkedFractionX, inkedFractionY } =
    +        await decodeAndSample(exportImageToDataURL(result.image));
    +      expect(inkedPixels).toBeGreaterThan(0);
    +      // The diagram must fill the image, not sit letterboxed in a fraction
    +      // of it - Mermaid crops the view box to the content bar ~8px padding,
    +      // so a healthy render inks ~0.85+ of the canvas. (WebKit regression
    +      // check: it lets Mermaid's inline max-width style shrink the
    +      // rasterization to ~half if the renderer doesn't strip it.)
    +      expect(inkedFractionX).toBeGreaterThan(0.75);
    +      expect(inkedFractionY).toBeGreaterThan(0.75);
    +    },
    +  );
    +
    +  test(
    +    "returns invalid Mermaid source as a typed error",
    +    { timeout: 15000 },
    +    async () => {
    +      // The real Mermaid parse boundary: invalid source is expected (it's
    +      // user input), so it comes back as a typed error rather than a throw.
    +      const result = await renderDiagramToImage("not a valid diagram !!");
    +
    +      expect(result.error).toBeDefined();
    +    },
    +  );
    +});
    diff --git a/packages/diagram-block/src/helpers/renderDiagramToImage.ts b/packages/diagram-block/src/helpers/renderDiagramToImage.ts
    new file mode 100644
    index 0000000000..b3965d88b3
    --- /dev/null
    +++ b/packages/diagram-block/src/helpers/renderDiagramToImage.ts
    @@ -0,0 +1,108 @@
    +import type { ExportImage } from "@blocknote/core";
    +import mermaid from "mermaid";
    +
    +import { initializeMermaid } from "./initializeMermaid.js";
    +
    +/**
    + * Renders Mermaid source to an {@link ExportImage} (with the diagram's
    + * natural dimensions in pixels). Invalid sources are expected (they're user
    + * input), so they're returned as a typed error - with a message safe to show
    + * to readers - rather than thrown; unexpected failures (environment,
    + * renderer infrastructure) throw. The default implementation
    + * ({@link renderDiagramToImage}) needs a browser - Mermaid can't render
    + * outside of it; exporters running elsewhere plug in their own (e.g. backed
    + * by `@mermaid-js/mermaid-cli` or a Kroki server).
    + */
    +export type RenderDiagram = (
    +  source: string,
    +) => Promise<{ error?: undefined; image: ExportImage } | { error: string }>;
    +
    +// Each render call needs its own element ID (Mermaid removes any existing
    +// document element with the given ID when rendering).
    +let exportElementId = 0;
    +
    +// Wrap the renderer to trade sharpness for size:
    +// `(source) => renderDiagramToImage(source, 4)`.
    +const DEFAULT_RASTER_SCALE = 2;
    +
    +/**
    + * Renders the Mermaid source to a PNG {@link ExportImage} (with the
    + * diagram's natural dimensions in pixels), rasterized at `scale` times that
    + * size so it stays sharp in the exported document - e.g. to embed diagrams
    + * as images when exporting documents to PDF/DOCX/ODT. Invalid sources are
    + * returned as a typed error. Browser-only - Mermaid can't render outside of
    + * it.
    + */
    +export async function renderDiagramToImage(
    +  source: string,
    +  scale: number = DEFAULT_RASTER_SCALE,
    +): ReturnType {
    +  initializeMermaid();
    +
    +  try {
    +    await mermaid.parse(source);
    +  } catch (error) {
    +    // The boundary that converts Mermaid's parse throw into the typed
    +    // result.
    +    return { error: error instanceof Error ? error.message : String(error) };
    +  }
    +
    +  const { svg } = await mermaid.render(
    +    `diagram-export-${exportElementId++}`,
    +    source,
    +  );
    +
    +  // Mermaid sizes the SVG relatively (`width: 100%`), so it needs explicit
    +  // pixel dimensions before rasterizing. These must be set on the SVG itself,
    +  // not the `Image` element: the element's width/height only affect layout,
    +  // while canvas rasterization uses the SVG's intrinsic size - without one,
    +  // Safari falls back to a default size (and older Firefox refuses to draw
    +  // the image to a canvas at all). The view box is also the only reliable
    +  // source for the diagram's pixel dimensions, which the exporters need for
    +  // layout.
    +  const svgElement = new DOMParser().parseFromString(
    +    svg,
    +    "image/svg+xml",
    +  ).documentElement;
    +  const viewBox = svgElement.getAttribute("viewBox")?.split(/\s+/).map(Number);
    +  const width = Math.ceil(viewBox?.[2] || 800);
    +  const height = Math.ceil(viewBox?.[3] || 600);
    +  // The scale goes into the SVG's dimensions (rather than only the canvas),
    +  // so browsers rasterize the vector at the full canvas resolution instead
    +  // of upscaling a 1x raster.
    +  svgElement.setAttribute("width", String(width * scale));
    +  svgElement.setAttribute("height", String(height * scale));
    +  // Mermaid also caps the root with an inline `max-width` style (for
    +  // responsive display in the editor). CSS wins over presentation attributes
    +  // when computing the SVG's intrinsic size, and WebKit honors it during
    +  // canvas rasterization - leaving it in renders the diagram letterboxed at
    +  // a fraction of the canvas. The explicit dimensions above are the ones
    +  // that must be authoritative here.
    +  svgElement.removeAttribute("style");
    +  const sizedSVG = new XMLSerializer().serializeToString(svgElement);
    +
    +  const image = new Image();
    +  image.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(sizedSVG)}`;
    +  await image.decode();
    +
    +  const canvas = document.createElement("canvas");
    +  canvas.width = width * scale;
    +  canvas.height = height * scale;
    +  canvas.getContext("2d")!.drawImage(image, 0, 0, canvas.width, canvas.height);
    +
    +  const blob = await new Promise((resolve) =>
    +    canvas.toBlob(resolve, "image/png"),
    +  );
    +  if (!blob) {
    +    throw new Error("Canvas produced no PNG data");
    +  }
    +
    +  return {
    +    image: {
    +      mimeType: "image/png",
    +      data: new Uint8Array(await blob.arrayBuffer()),
    +      width,
    +      height,
    +    },
    +  };
    +}
    diff --git a/packages/diagram-block/src/helpers/trimDiagramSVG.ts b/packages/diagram-block/src/helpers/trimDiagramSVG.ts
    new file mode 100644
    index 0000000000..7695782f1a
    --- /dev/null
    +++ b/packages/diagram-block/src/helpers/trimDiagramSVG.ts
    @@ -0,0 +1,58 @@
    +/**
    + * Trims excess vertical whitespace from a rendered Mermaid SVG. Some diagram
    + * types (e.g. `journey`) reserve far more vertical space than their content
    + * actually uses, leaving a large empty gap below the diagram. This measures
    + * the real content bounds and shrinks the SVG's `viewBox` to fit.
    + *
    + * Only the bottom is trimmed - the horizontal extent and top edge are left
    + * untouched, so nothing (arrowhead markers, titles) can get clipped. Browser-
    + * only, since measuring requires the SVG to be laid out in the document.
    + */
    +export const trimDiagramSVG = (svg: string): string => {
    +  // Measured offscreen - the SVG must be in the document for `getBBox`, but it
    +  // shouldn't flash on screen while measuring.
    +  const container = document.createElement("div");
    +  container.style.position = "absolute";
    +  container.style.visibility = "hidden";
    +  container.style.pointerEvents = "none";
    +  container.innerHTML = svg;
    +
    +  const svgElement = container.querySelector("svg");
    +  const viewBox = svgElement?.getAttribute("viewBox")?.split(/\s+/).map(Number);
    +  if (!svgElement || viewBox?.length !== 4 || viewBox.some(isNaN)) {
    +    return svg;
    +  }
    +
    +  document.body.appendChild(container);
    +  try {
    +    const [vbX, vbY, vbWidth, vbHeight] = viewBox;
    +    const bbox = svgElement.getBBox();
    +    const contentBottom = bbox.y + bbox.height;
    +    // A little padding so the content doesn't sit flush against the edge.
    +    const trimmedHeight = contentBottom - vbY + 8;
    +
    +    let changed = false;
    +    if (trimmedHeight < vbHeight) {
    +      svgElement.setAttribute(
    +        "viewBox",
    +        `${vbX} ${vbY} ${vbWidth} ${trimmedHeight}`,
    +      );
    +      changed = true;
    +    }
    +
    +    // Mermaid renders most diagrams responsively (width `100%`, height derived
    +    // from the view box's aspect ratio), but pins an explicit pixel height on
    +    // `journey` diagrams. That fixed height makes the SVG letterbox - it stays
    +    // that many pixels tall even when scaled down to fit a narrower container,
    +    // leaving empty space below. Dropping it lets the height follow the view
    +    // box, so the box always hugs the content.
    +    if (svgElement.hasAttribute("height")) {
    +      svgElement.removeAttribute("height");
    +      changed = true;
    +    }
    +
    +    return changed ? svgElement.outerHTML : svg;
    +  } finally {
    +    document.body.removeChild(container);
    +  }
    +};
    diff --git a/packages/diagram-block/src/i18n/dictionary.ts b/packages/diagram-block/src/i18n/dictionary.ts
    new file mode 100644
    index 0000000000..b32e94f4f7
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/dictionary.ts
    @@ -0,0 +1,38 @@
    +import { BlockNoteEditor, Exporter } from "@blocknote/core";
    +
    +import { en } from "./locales/en.js";
    +
    +export type DiagramDictionary = typeof en;
    +
    +/**
    + * Returns the Diagram dictionary for the editor. The Diagram block is localized
    + * by merging a `diagram` dictionary into the editor's dictionary (see the
    + * exported `locales`); when the host hasn't provided one, the bundled English
    + * strings are used, so the block works without extra setup.
    + */
    +export function getDiagramDictionary(
    +  editor: BlockNoteEditor,
    +): DiagramDictionary {
    +  return (
    +    ((editor.dictionary as any).diagram as DiagramDictionary | undefined) ?? en
    +  );
    +}
    +
    +/**
    + * Returns the Diagram exporter strings. Exporters are localized independently
    + * of an editor: the host passes a dictionary to the exporter's options
    + * (see `ExporterOptions.dictionary`), and the diagram strings are read from
    + * its `diagram` section - the same shape merged into editor dictionaries -
    + * falling back to the bundled English strings.
    + */
    +export function getDiagramExporterDictionary(
    +  exporter: Exporter,
    +): DiagramDictionary["exporter"] {
    +  return (
    +    (
    +      (exporter.options.dictionary as any)?.diagram as
    +        | DiagramDictionary
    +        | undefined
    +    )?.exporter ?? en.exporter
    +  );
    +}
    diff --git a/packages/diagram-block/src/i18n/locales/ar.ts b/packages/diagram-block/src/i18n/locales/ar.ts
    new file mode 100644
    index 0000000000..f6620d1a00
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/ar.ts
    @@ -0,0 +1,25 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const ar: DiagramDictionary = {
    +  block: {
    +    add_source_text: "إضافة مخطط Mermaid",
    +    input_placeholder: "أدخل كود المخطط",
    +    preview_error_text: "مخطط غير صالح (انقر للتعديل)",
    +    preview_label: "مخطط Mermaid",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "مخطط",
    +      subtext: "مخطط مرسوم من مصدر Mermaid",
    +      aliases: ["مخطط", "رسم بياني", "مخطط انسيابي", "mermaid", "flowchart"],
    +      group: "متقدم",
    +    },
    +  },
    +  block_type_select: {
    +    name: "مخطط",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) =>
    +      `مخطط غير صالح "\u2068${source}\u2069"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/de.ts b/packages/diagram-block/src/i18n/locales/de.ts
    new file mode 100644
    index 0000000000..45d76b9255
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/de.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const de: DiagramDictionary = {
    +  block: {
    +    add_source_text: "Mermaid-Diagramm hinzufügen",
    +    input_placeholder: "Diagrammcode eingeben",
    +    preview_error_text: "Ungültiges Diagramm (zum Bearbeiten klicken)",
    +    preview_label: "Mermaid-Diagramm",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "Diagramm",
    +      subtext: "Aus Mermaid-Quelltext gerendertes Diagramm",
    +      aliases: ["mermaid", "diagramm", "flussdiagramm", "graph"],
    +      group: "Erweitert",
    +    },
    +  },
    +  block_type_select: {
    +    name: "Diagramm",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `Ungültiges Diagramm "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/en.ts b/packages/diagram-block/src/i18n/locales/en.ts
    new file mode 100644
    index 0000000000..2ac6631897
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/en.ts
    @@ -0,0 +1,22 @@
    +export const en = {
    +  block: {
    +    add_source_text: "Add a Mermaid diagram",
    +    input_placeholder: "Enter diagram code",
    +    preview_error_text: "Invalid diagram (click to edit)",
    +    preview_label: "Mermaid diagram",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "Diagram",
    +      subtext: "Diagram rendered from Mermaid source",
    +      aliases: ["mermaid", "diagram", "flowchart", "chart", "graph"],
    +      group: "Advanced",
    +    },
    +  },
    +  block_type_select: {
    +    name: "Diagram",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `Invalid diagram "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/es.ts b/packages/diagram-block/src/i18n/locales/es.ts
    new file mode 100644
    index 0000000000..0ab6270aa3
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/es.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const es: DiagramDictionary = {
    +  block: {
    +    add_source_text: "Agregar diagrama Mermaid",
    +    input_placeholder: "Introduce el código del diagrama",
    +    preview_error_text: "Diagrama no válido (haz clic para editar)",
    +    preview_label: "Diagrama Mermaid",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "Diagrama",
    +      subtext: "Diagrama renderizado a partir de código Mermaid",
    +      aliases: ["mermaid", "diagrama", "diagrama de flujo", "gráfico"],
    +      group: "Avanzado",
    +    },
    +  },
    +  block_type_select: {
    +    name: "Diagrama",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `Diagrama no válido "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/fa.ts b/packages/diagram-block/src/i18n/locales/fa.ts
    new file mode 100644
    index 0000000000..31909ee3da
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/fa.ts
    @@ -0,0 +1,25 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const fa: DiagramDictionary = {
    +  block: {
    +    add_source_text: "افزودن نمودار Mermaid",
    +    input_placeholder: "کد نمودار را وارد کنید",
    +    preview_error_text: "نمودار نامعتبر (برای ویرایش کلیک کنید)",
    +    preview_label: "نمودار Mermaid",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "نمودار",
    +      subtext: "نمودار رسم‌شده از کد Mermaid",
    +      aliases: ["نمودار", "فلوچارت", "mermaid", "چارت"],
    +      group: "پیشرفته",
    +    },
    +  },
    +  block_type_select: {
    +    name: "نمودار",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) =>
    +      `نمودار نامعتبر "\u2068${source}\u2069"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/fr.ts b/packages/diagram-block/src/i18n/locales/fr.ts
    new file mode 100644
    index 0000000000..ff1e34eec5
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/fr.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const fr: DiagramDictionary = {
    +  block: {
    +    add_source_text: "Ajouter un diagramme Mermaid",
    +    input_placeholder: "Saisir le code du diagramme",
    +    preview_error_text: "Diagramme non valide (cliquez pour modifier)",
    +    preview_label: "Diagramme Mermaid",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "Diagramme",
    +      subtext: "Diagramme généré à partir du code Mermaid",
    +      aliases: ["mermaid", "diagramme", "organigramme", "graphique"],
    +      group: "Avancé",
    +    },
    +  },
    +  block_type_select: {
    +    name: "Diagramme",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `Diagramme non valide "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/he.ts b/packages/diagram-block/src/i18n/locales/he.ts
    new file mode 100644
    index 0000000000..836d11277a
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/he.ts
    @@ -0,0 +1,25 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const he: DiagramDictionary = {
    +  block: {
    +    add_source_text: "הוסף תרשים Mermaid",
    +    input_placeholder: "הזן קוד תרשים",
    +    preview_error_text: "תרשים לא תקין (לחץ לעריכה)",
    +    preview_label: "תרשים Mermaid",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "תרשים",
    +      subtext: "תרשים שנוצר מקוד Mermaid",
    +      aliases: ["תרשים", "תרשים זרימה", "mermaid", "גרף"],
    +      group: "מתקדם",
    +    },
    +  },
    +  block_type_select: {
    +    name: "תרשים",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) =>
    +      `תרשים לא חוקי "\u2068${source}\u2069"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/hr.ts b/packages/diagram-block/src/i18n/locales/hr.ts
    new file mode 100644
    index 0000000000..18bc215220
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/hr.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const hr: DiagramDictionary = {
    +  block: {
    +    add_source_text: "Dodaj Mermaid dijagram",
    +    input_placeholder: "Unesi kod dijagrama",
    +    preview_error_text: "Neispravan dijagram (klikni za uređivanje)",
    +    preview_label: "Mermaid dijagram",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "Dijagram",
    +      subtext: "Dijagram iscrtan iz Mermaid koda",
    +      aliases: ["mermaid", "dijagram", "dijagram toka", "graf"],
    +      group: "Napredno",
    +    },
    +  },
    +  block_type_select: {
    +    name: "Dijagram",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `Neispravan dijagram "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/index.ts b/packages/diagram-block/src/i18n/locales/index.ts
    new file mode 100644
    index 0000000000..f92fca4228
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/index.ts
    @@ -0,0 +1,23 @@
    +export * from "./ar.js";
    +export * from "./de.js";
    +export * from "./en.js";
    +export * from "./es.js";
    +export * from "./fa.js";
    +export * from "./fr.js";
    +export * from "./he.js";
    +export * from "./hr.js";
    +export * from "./is.js";
    +export * from "./it.js";
    +export * from "./ja.js";
    +export * from "./ko.js";
    +export * from "./nl.js";
    +export * from "./no.js";
    +export * from "./pl.js";
    +export * from "./pt.js";
    +export * from "./ru.js";
    +export * from "./sk.js";
    +export * from "./uk.js";
    +export * from "./vi.js";
    +export * from "./zh.js";
    +export * from "./zh-tw.js";
    +export * from "./uz.js";
    diff --git a/packages/diagram-block/src/i18n/locales/is.ts b/packages/diagram-block/src/i18n/locales/is.ts
    new file mode 100644
    index 0000000000..8f3c1f862f
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/is.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const is: DiagramDictionary = {
    +  block: {
    +    add_source_text: "Bæta við Mermaid-skýringarmynd",
    +    input_placeholder: "Sláðu inn kóða skýringarmyndar",
    +    preview_error_text: "Ógild skýringarmynd (smelltu til að breyta)",
    +    preview_label: "Mermaid-skýringarmynd",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "Skýringarmynd",
    +      subtext: "Skýringarmynd teiknuð úr Mermaid-kóða",
    +      aliases: ["mermaid", "skýringarmynd", "flæðirit", "graf"],
    +      group: "Ítarlegt",
    +    },
    +  },
    +  block_type_select: {
    +    name: "Skýringarmynd",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `Ógild skýringarmynd "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/it.ts b/packages/diagram-block/src/i18n/locales/it.ts
    new file mode 100644
    index 0000000000..19c25d464e
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/it.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const it: DiagramDictionary = {
    +  block: {
    +    add_source_text: "Aggiungi diagramma Mermaid",
    +    input_placeholder: "Inserisci il codice del diagramma",
    +    preview_error_text: "Diagramma non valido (clicca per modificare)",
    +    preview_label: "Diagramma Mermaid",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "Diagramma",
    +      subtext: "Diagramma generato da codice Mermaid",
    +      aliases: ["mermaid", "diagramma", "diagramma di flusso", "grafico"],
    +      group: "Avanzato",
    +    },
    +  },
    +  block_type_select: {
    +    name: "Diagramma",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `Diagramma non valido "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/ja.ts b/packages/diagram-block/src/i18n/locales/ja.ts
    new file mode 100644
    index 0000000000..83225960c3
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/ja.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const ja: DiagramDictionary = {
    +  block: {
    +    add_source_text: "Mermaidダイアグラムを追加",
    +    input_placeholder: "ダイアグラムのコードを入力",
    +    preview_error_text: "無効なダイアグラム(クリックして編集)",
    +    preview_label: "Mermaidダイアグラム",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "ダイアグラム",
    +      subtext: "Mermaidソースから描画されるダイアグラム",
    +      aliases: ["ダイアグラム", "図", "フローチャート", "mermaid"],
    +      group: "高度なブロック",
    +    },
    +  },
    +  block_type_select: {
    +    name: "ダイアグラム",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `無効な図 "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/ko.ts b/packages/diagram-block/src/i18n/locales/ko.ts
    new file mode 100644
    index 0000000000..42116b64a5
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/ko.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const ko: DiagramDictionary = {
    +  block: {
    +    add_source_text: "Mermaid 다이어그램 추가",
    +    input_placeholder: "다이어그램 코드 입력",
    +    preview_error_text: "잘못된 다이어그램(클릭하여 편집)",
    +    preview_label: "Mermaid 다이어그램",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "다이어그램",
    +      subtext: "Mermaid 소스로 렌더링되는 다이어그램",
    +      aliases: ["다이어그램", "순서도", "mermaid", "차트"],
    +      group: "고급",
    +    },
    +  },
    +  block_type_select: {
    +    name: "다이어그램",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `잘못된 다이어그램 "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/nl.ts b/packages/diagram-block/src/i18n/locales/nl.ts
    new file mode 100644
    index 0000000000..e772a6a1cf
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/nl.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const nl: DiagramDictionary = {
    +  block: {
    +    add_source_text: "Mermaid-diagram toevoegen",
    +    input_placeholder: "Voer diagramcode in",
    +    preview_error_text: "Ongeldig diagram (klik om te bewerken)",
    +    preview_label: "Mermaid-diagram",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "Diagram",
    +      subtext: "Diagram op basis van Mermaid-code",
    +      aliases: ["mermaid", "diagram", "stroomdiagram", "grafiek"],
    +      group: "Geavanceerd",
    +    },
    +  },
    +  block_type_select: {
    +    name: "Diagram",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `Ongeldig diagram "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/no.ts b/packages/diagram-block/src/i18n/locales/no.ts
    new file mode 100644
    index 0000000000..bcdd41a01a
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/no.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const no: DiagramDictionary = {
    +  block: {
    +    add_source_text: "Legg til Mermaid-diagram",
    +    input_placeholder: "Skriv inn diagramkode",
    +    preview_error_text: "Ugyldig diagram (klikk for å redigere)",
    +    preview_label: "Mermaid-diagram",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "Diagram",
    +      subtext: "Diagram generert fra Mermaid-kode",
    +      aliases: ["mermaid", "diagram", "flytskjema", "graf"],
    +      group: "Avansert",
    +    },
    +  },
    +  block_type_select: {
    +    name: "Diagram",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `Ugyldig diagram "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/pl.ts b/packages/diagram-block/src/i18n/locales/pl.ts
    new file mode 100644
    index 0000000000..6af355cc6c
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/pl.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const pl: DiagramDictionary = {
    +  block: {
    +    add_source_text: "Dodaj diagram Mermaid",
    +    input_placeholder: "Wprowadź kod diagramu",
    +    preview_error_text: "Nieprawidłowy diagram (kliknij, aby edytować)",
    +    preview_label: "Diagram Mermaid",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "Diagram",
    +      subtext: "Diagram renderowany z kodu Mermaid",
    +      aliases: ["mermaid", "diagram", "schemat blokowy", "wykres"],
    +      group: "Zaawansowane",
    +    },
    +  },
    +  block_type_select: {
    +    name: "Diagram",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `Nieprawidłowy diagram "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/pt.ts b/packages/diagram-block/src/i18n/locales/pt.ts
    new file mode 100644
    index 0000000000..3f5ea3786e
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/pt.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const pt: DiagramDictionary = {
    +  block: {
    +    add_source_text: "Adicionar diagrama Mermaid",
    +    input_placeholder: "Insira o código do diagrama",
    +    preview_error_text: "Diagrama inválido (clique para editar)",
    +    preview_label: "Diagrama Mermaid",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "Diagrama",
    +      subtext: "Diagrama renderizado a partir de código Mermaid",
    +      aliases: ["mermaid", "diagrama", "fluxograma", "gráfico"],
    +      group: "Avançado",
    +    },
    +  },
    +  block_type_select: {
    +    name: "Diagrama",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `Diagrama inválido "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/ru.ts b/packages/diagram-block/src/i18n/locales/ru.ts
    new file mode 100644
    index 0000000000..ca396afd6f
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/ru.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const ru: DiagramDictionary = {
    +  block: {
    +    add_source_text: "Добавить диаграмму Mermaid",
    +    input_placeholder: "Введите код диаграммы",
    +    preview_error_text: "Некорректная диаграмма (нажмите, чтобы изменить)",
    +    preview_label: "Диаграмма Mermaid",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "Диаграмма",
    +      subtext: "Диаграмма, отрисованная из кода Mermaid",
    +      aliases: ["mermaid", "диаграмма", "блок-схема", "график"],
    +      group: "Продвинутый",
    +    },
    +  },
    +  block_type_select: {
    +    name: "Диаграмма",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `Недопустимая диаграмма "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/sk.ts b/packages/diagram-block/src/i18n/locales/sk.ts
    new file mode 100644
    index 0000000000..80e2b4194e
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/sk.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const sk: DiagramDictionary = {
    +  block: {
    +    add_source_text: "Pridať diagram Mermaid",
    +    input_placeholder: "Zadajte kód diagramu",
    +    preview_error_text: "Neplatný diagram (kliknutím upravíte)",
    +    preview_label: "Diagram Mermaid",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "Diagram",
    +      subtext: "Diagram vykreslený z kódu Mermaid",
    +      aliases: ["mermaid", "diagram", "vývojový diagram", "graf"],
    +      group: "Pokročilé",
    +    },
    +  },
    +  block_type_select: {
    +    name: "Diagram",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `Neplatný diagram "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/uk.ts b/packages/diagram-block/src/i18n/locales/uk.ts
    new file mode 100644
    index 0000000000..cc781734e8
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/uk.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const uk: DiagramDictionary = {
    +  block: {
    +    add_source_text: "Додати діаграму Mermaid",
    +    input_placeholder: "Введіть код діаграми",
    +    preview_error_text: "Некоректна діаграма (натисніть, щоб редагувати)",
    +    preview_label: "Діаграма Mermaid",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "Діаграма",
    +      subtext: "Діаграма, згенерована з коду Mermaid",
    +      aliases: ["mermaid", "діаграма", "блок-схема", "графік"],
    +      group: "Розширені",
    +    },
    +  },
    +  block_type_select: {
    +    name: "Діаграма",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `Недійсна діаграма "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/uz.ts b/packages/diagram-block/src/i18n/locales/uz.ts
    new file mode 100644
    index 0000000000..d519da8ab4
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/uz.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const uz: DiagramDictionary = {
    +  block: {
    +    add_source_text: "Mermaid diagrammasini qo‘shish",
    +    input_placeholder: "Diagramma kodini kiriting",
    +    preview_error_text: "Yaroqsiz diagramma (tahrirlash uchun bosing)",
    +    preview_label: "Mermaid diagrammasi",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "Diagramma",
    +      subtext: "Mermaid kodidan chizilgan diagramma",
    +      aliases: ["mermaid", "diagramma", "blok-sxema", "grafik"],
    +      group: "Kengaytirilgan",
    +    },
    +  },
    +  block_type_select: {
    +    name: "Diagramma",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `Yaroqsiz diagramma "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/vi.ts b/packages/diagram-block/src/i18n/locales/vi.ts
    new file mode 100644
    index 0000000000..8f2ee8d671
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/vi.ts
    @@ -0,0 +1,32 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const vi: DiagramDictionary = {
    +  block: {
    +    add_source_text: "Thêm sơ đồ Mermaid",
    +    input_placeholder: "Nhập mã sơ đồ",
    +    preview_error_text: "Sơ đồ không hợp lệ (nhấp để chỉnh sửa)",
    +    preview_label: "Sơ đồ Mermaid",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "Sơ đồ",
    +      subtext: "Sơ đồ được tạo từ mã Mermaid",
    +      aliases: [
    +        "mermaid",
    +        "sơ đồ",
    +        "lưu đồ",
    +        "biểu đồ",
    +        "so do",
    +        "luu do",
    +        "bieu do",
    +      ],
    +      group: "Nâng cao",
    +    },
    +  },
    +  block_type_select: {
    +    name: "Sơ đồ",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `Sơ đồ không hợp lệ "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/zh-tw.ts b/packages/diagram-block/src/i18n/locales/zh-tw.ts
    new file mode 100644
    index 0000000000..e903761f92
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/zh-tw.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const zhTW: DiagramDictionary = {
    +  block: {
    +    add_source_text: "新增 Mermaid 圖表",
    +    input_placeholder: "輸入圖表原始碼",
    +    preview_error_text: "無效的圖表(點擊編輯)",
    +    preview_label: "Mermaid 圖表",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "圖表",
    +      subtext: "以 Mermaid 原始碼繪製的圖表",
    +      aliases: ["mermaid", "圖表", "流程圖", "示意圖"],
    +      group: "進階功能",
    +    },
    +  },
    +  block_type_select: {
    +    name: "圖表",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `無效的圖表 "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/i18n/locales/zh.ts b/packages/diagram-block/src/i18n/locales/zh.ts
    new file mode 100644
    index 0000000000..b1b5fecb38
    --- /dev/null
    +++ b/packages/diagram-block/src/i18n/locales/zh.ts
    @@ -0,0 +1,24 @@
    +import type { DiagramDictionary } from "../dictionary.js";
    +
    +export const zh: DiagramDictionary = {
    +  block: {
    +    add_source_text: "添加 Mermaid 图表",
    +    input_placeholder: "输入图表代码",
    +    preview_error_text: "无效的图表(点击编辑)",
    +    preview_label: "Mermaid 图表",
    +  },
    +  slash_menu: {
    +    diagram: {
    +      title: "图表",
    +      subtext: "由 Mermaid 源码渲染的图表",
    +      aliases: ["mermaid", "图表", "流程图", "示意图"],
    +      group: "高级功能",
    +    },
    +  },
    +  block_type_select: {
    +    name: "图表",
    +  },
    +  exporter: {
    +    invalid_diagram: (source: string) => `无效的图表 "${source}"`,
    +  },
    +};
    diff --git a/packages/diagram-block/src/index.ts b/packages/diagram-block/src/index.ts
    new file mode 100644
    index 0000000000..a40dad61ff
    --- /dev/null
    +++ b/packages/diagram-block/src/index.ts
    @@ -0,0 +1,7 @@
    +import * as locales from "./i18n/locales/index.js";
    +
    +export { locales };
    +export * from "./i18n/dictionary.js";
    +export * from "./block/index.js";
    +export * from "./helpers/index.js";
    +export * from "./getDiagramSlashMenuItems.js";
    diff --git a/packages/diagram-block/src/odt-exporter/index.ts b/packages/diagram-block/src/odt-exporter/index.ts
    new file mode 100644
    index 0000000000..8be789895e
    --- /dev/null
    +++ b/packages/diagram-block/src/odt-exporter/index.ts
    @@ -0,0 +1,134 @@
    +import type {
    +  BlockConfig,
    +  BlockFromConfigNoChildren,
    +  Exporter,
    +} from "@blocknote/core";
    +import { exportImageToDataURL, plainContentToString } from "@blocknote/core";
    +import {
    +  createODTImageParagraph,
    +  ODTExporter,
    +} from "@blocknote/xl-odt-exporter";
    +import { createElement } from "react";
    +
    +import {
    +  RenderDiagram,
    +  renderDiagramToImage,
    +} from "../helpers/renderDiagramToImage.js";
    +import { getDiagramExporterDictionary } from "../i18n/dictionary.js";
    +
    +export type { RenderDiagram } from "../helpers/renderDiagramToImage.js";
    +
    +type DiagramBlock = BlockFromConfigNoChildren<
    +  BlockConfig<"diagram", {}, "plain">,
    +  any,
    +  any
    +>;
    +
    +// Mirrors the editor, which shows the error state in the preview
    +// placeholder, identifying the diagram by the (first line of the) source.
    +// The parser's message is deliberately NOT rendered: it's authoring detail
    +// (and untranslated English) - the editor is where the author sees and
    +// fixes it. Styled muted like the
    +// other exporters' placeholders.
    +function errorMessage(
    +  exporter: ODTExporter,
    +  source: string,
    +): string {
    +  return getDiagramExporterDictionary(exporter).invalid_diagram(
    +    source.split("\n")[0],
    +  );
    +}
    +
    +function errorParagraph(source: string, exporter: ODTExporter) {
    +  const styleName = exporter.registerStyle((name) =>
    +    createElement(
    +      "style:style",
    +      { "style:family": "text", "style:name": name },
    +      createElement("style:text-properties", {
    +        "fo:font-style": "italic",
    +        "fo:color": "#999999",
    +      }),
    +    ),
    +  );
    +
    +  return createElement(
    +    "text:p",
    +    null,
    +    createElement(
    +      "text:span",
    +      { "text:style-name": styleName },
    +      errorMessage(exporter, source),
    +    ),
    +  );
    +}
    +
    +/**
    + * Creates an ODT block mapping for `@blocknote/diagram-block` that embeds
    + * diagrams as images. Rendering runs in the browser by default (Mermaid
    + * can't render outside of it); when exporting elsewhere (e.g. server-side),
    + * pass a `renderDiagram` function backed by e.g. `@mermaid-js/mermaid-cli`
    + * or a Kroki server. Invalid sources render an error placeholder (mirroring
    + * the editor):
    + *
    + * ```ts
    + * import { createDiagramBlockMapping } from "@blocknote/diagram-block/odt-exporter";
    + *
    + * new ODTExporter(schema, {
    + *   ...odtDefaultSchemaMappings,
    + *   blockMapping: {
    + *     ...odtDefaultSchemaMappings.blockMapping,
    + *     diagram: createDiagramBlockMapping({ renderDiagram }),
    + *   },
    + * });
    + * ```
    + */
    +export function createDiagramBlockMapping(options?: {
    +  renderDiagram?: RenderDiagram;
    +}) {
    +  return async (
    +    block: DiagramBlock,
    +    exporter: Exporter,
    +  ) => {
    +    // Only the ODTExporter invokes ODT mappings, but mapping signatures are
    +    // contravariant in the exporter parameter, so requiring the subclass here
    +    // wouldn't satisfy the mapping type - hence the base type + cast.
    +    const odtExporter = exporter as ODTExporter;
    +    const source = plainContentToString(block.content);
    +    if (!source.trim()) {
    +      return createElement("text:p");
    +    }
    +
    +    const renderDiagram =
    +      options?.renderDiagram ??
    +      (typeof document !== "undefined" ? renderDiagramToImage : undefined);
    +    if (!renderDiagram) {
    +      throw new Error(
    +        "Rendering diagrams to images requires a browser. When exporting elsewhere, pass a `renderDiagram` function to `createDiagramBlockMapping` (e.g. backed by @mermaid-js/mermaid-cli or a Kroki server).",
    +      );
    +    }
    +
    +    const result = await renderDiagram(source);
    +    if (result.error !== undefined) {
    +      return errorParagraph(source, odtExporter);
    +    }
    +
    +    // The image may be rendered above its display size for sharpness, so
    +    // pass the diagram's display dimensions rather than the picture's own.
    +    return await createODTImageParagraph(
    +      odtExporter,
    +      exportImageToDataURL(result.image),
    +      {
    +        width: result.image.width,
    +        height: result.image.height,
    +        align: "center",
    +      },
    +    );
    +  };
    +}
    +
    +/**
    + * ODT block mapping for `@blocknote/diagram-block` with the default options
    + * - see {@link createDiagramBlockMapping}. Browser-only; when exporting
    + * elsewhere, use the factory to pass a `renderDiagram` function.
    + */
    +export const diagramBlockMapping = createDiagramBlockMapping();
    diff --git a/packages/diagram-block/src/odt-exporter/odtExporter.test.ts b/packages/diagram-block/src/odt-exporter/odtExporter.test.ts
    new file mode 100644
    index 0000000000..9c5ee00c50
    --- /dev/null
    +++ b/packages/diagram-block/src/odt-exporter/odtExporter.test.ts
    @@ -0,0 +1,77 @@
    +import { BlockNoteSchema, defaultBlockSpecs } from "@blocknote/core";
    +import {
    +  ODTExporter,
    +  odtDefaultSchemaMappings,
    +} from "@blocknote/xl-odt-exporter";
    +import { BlobReader, ZipReader } from "@zip.js/zip.js";
    +import { beforeAll, describe, expect, it } from "vite-plus/test";
    +
    +import {
    +  diagramDocument,
    +  renderDiagram,
    +  renderInvalidDiagram,
    +  zipEntryContent,
    +} from "../exporterTestUtil.js";
    +import { createDiagramBlockMapping, diagramBlockMapping } from "./index.js";
    +
    +beforeAll(async () => {
    +  // @ts-expect-error - Blob polyfill for Node test environment
    +  globalThis.Blob = (await import("node:buffer")).Blob;
    +});
    +
    +function createExporter(diagram: ReturnType) {
    +  const mappings = {
    +    ...odtDefaultSchemaMappings,
    +    blockMapping: {
    +      ...odtDefaultSchemaMappings.blockMapping,
    +      diagram,
    +    },
    +  };
    +  return new ODTExporter(
    +    BlockNoteSchema.create({ blockSpecs: defaultBlockSpecs }),
    +    mappings as any,
    +  );
    +}
    +
    +describe("odt exporter mappings", () => {
    +  it("should embed the rendered diagram as an image", async () => {
    +    const exporter = createExporter(
    +      createDiagramBlockMapping({ renderDiagram }),
    +    );
    +
    +    const odt = await exporter.toODTDocument(diagramDocument);
    +    const contentXML = await zipEntryContent(odt, "content.xml");
    +
    +    expect(contentXML).toContain("draw:image");
    +    // The picture bytes are stored as their own zip entry.
    +    const entries = await new ZipReader(new BlobReader(odt)).getEntries();
    +    expect(
    +      entries.some((entry) => entry.filename.startsWith("Pictures/")),
    +    ).toBe(true);
    +  });
    +
    +  it("should render an error placeholder for invalid sources", async () => {
    +    // The renderer returns invalid sources as a typed error, and the
    +    // mapping renders the error placeholder - never the raw source.
    +    const exporter = createExporter(
    +      createDiagramBlockMapping({ renderDiagram: renderInvalidDiagram }),
    +    );
    +
    +    const contentXML = await zipEntryContent(
    +      await exporter.toODTDocument(diagramDocument),
    +      "content.xml",
    +    );
    +
    +    expect(contentXML).toContain("Invalid diagram");
    +    expect(contentXML).toContain("graph TD");
    +    expect(contentXML).not.toContain("draw:image");
    +  });
    +
    +  it("should throw a descriptive error without a renderer outside the browser", async () => {
    +    const exporter = createExporter(diagramBlockMapping);
    +
    +    await expect(exporter.toODTDocument(diagramDocument)).rejects.toThrow(
    +      "pass a `renderDiagram` function",
    +    );
    +  });
    +});
    diff --git a/packages/diagram-block/src/pdf-exporter/index.tsx b/packages/diagram-block/src/pdf-exporter/index.tsx
    new file mode 100644
    index 0000000000..6853ac7a96
    --- /dev/null
    +++ b/packages/diagram-block/src/pdf-exporter/index.tsx
    @@ -0,0 +1,112 @@
    +import type {
    +  BlockConfig,
    +  BlockFromConfigNoChildren,
    +  Exporter,
    +} from "@blocknote/core";
    +import { exportImageToDataURL, plainContentToString } from "@blocknote/core";
    +import { Image, Text, View } from "@react-pdf/renderer";
    +
    +import {
    +  RenderDiagram,
    +  renderDiagramToImage,
    +} from "../helpers/renderDiagramToImage.js";
    +import { getDiagramExporterDictionary } from "../i18n/dictionary.js";
    +
    +export type { RenderDiagram } from "../helpers/renderDiagramToImage.js";
    +
    +type DiagramBlock = BlockFromConfigNoChildren<
    +  BlockConfig<"diagram", {}, "plain">,
    +  any,
    +  any
    +>;
    +
    +const PIXELS_PER_POINT = 0.75;
    +const MAX_WIDTH_POINTS = 400;
    +
    +// Mirrors the editor, which shows the error state in the preview
    +// placeholder, identifying the diagram by the (first line of the) source.
    +// The parser's message is deliberately NOT rendered: it's authoring detail
    +// (and untranslated English) - the editor is where the author sees and
    +// fixes it.
    +function errorText(
    +  exporter: Exporter,
    +  source: string,
    +) {
    +  return (
    +    
    +      
    +        {getDiagramExporterDictionary(exporter).invalid_diagram(
    +          source.split("\n")[0],
    +        )}
    +      
    +    
    +  );
    +}
    +
    +/**
    + * Creates a PDF block mapping for `@blocknote/diagram-block` that embeds
    + * diagrams as images. Rendering runs in the browser by default (Mermaid
    + * can't render outside of it); when exporting elsewhere (e.g. server-side),
    + * pass a `renderDiagram` function backed by e.g. `@mermaid-js/mermaid-cli`
    + * or a Kroki server. Invalid sources render an error placeholder (mirroring
    + * the editor):
    + *
    + * ```ts
    + * import { createDiagramBlockMapping } from "@blocknote/diagram-block/pdf-exporter";
    + *
    + * new PDFExporter(schema, {
    + *   ...pdfDefaultSchemaMappings,
    + *   blockMapping: {
    + *     ...pdfDefaultSchemaMappings.blockMapping,
    + *     diagram: createDiagramBlockMapping({ renderDiagram }),
    + *   },
    + * });
    + * ```
    + */
    +export function createDiagramBlockMapping(options?: {
    +  renderDiagram?: RenderDiagram;
    +}) {
    +  return async (
    +    block: DiagramBlock,
    +    exporter: Exporter,
    +  ) => {
    +    const source = plainContentToString(block.content);
    +    if (!source.trim()) {
    +      return ;
    +    }
    +
    +    const renderDiagram =
    +      options?.renderDiagram ??
    +      (typeof document !== "undefined" ? renderDiagramToImage : undefined);
    +    if (!renderDiagram) {
    +      throw new Error(
    +        "Rendering diagrams to images requires a browser. When exporting elsewhere, pass a `renderDiagram` function to `createDiagramBlockMapping` (e.g. backed by @mermaid-js/mermaid-cli or a Kroki server).",
    +      );
    +    }
    +
    +    const result = await renderDiagram(source);
    +    if (result.error !== undefined) {
    +      return errorText(exporter, source);
    +    }
    +
    +    return (
    +      
    +    );
    +  };
    +}
    +
    +/**
    + * PDF block mapping for `@blocknote/diagram-block` with the default options
    + * - see {@link createDiagramBlockMapping}. Browser-only; when exporting
    + * elsewhere, use the factory to pass a `renderDiagram` function.
    + */
    +export const diagramBlockMapping = createDiagramBlockMapping();
    diff --git a/packages/diagram-block/src/pdf-exporter/pdfExporter.test.tsx b/packages/diagram-block/src/pdf-exporter/pdfExporter.test.tsx
    new file mode 100644
    index 0000000000..ee7f6d1f74
    --- /dev/null
    +++ b/packages/diagram-block/src/pdf-exporter/pdfExporter.test.tsx
    @@ -0,0 +1,68 @@
    +import { BlockNoteSchema, defaultBlockSpecs } from "@blocknote/core";
    +import {
    +  PDFExporter,
    +  pdfDefaultSchemaMappings,
    +} from "@blocknote/xl-pdf-exporter";
    +import reactElementToJSXString from "react-element-to-jsx-string";
    +import { describe, expect, it } from "vite-plus/test";
    +
    +import {
    +  diagramDocument,
    +  renderDiagram,
    +  renderInvalidDiagram,
    +} from "../exporterTestUtil.js";
    +import { createDiagramBlockMapping, diagramBlockMapping } from "./index.js";
    +
    +function createExporter(diagram: ReturnType) {
    +  const mappings = {
    +    ...pdfDefaultSchemaMappings,
    +    blockMapping: {
    +      ...pdfDefaultSchemaMappings.blockMapping,
    +      diagram,
    +    },
    +  };
    +  return new PDFExporter(
    +    BlockNoteSchema.create({ blockSpecs: defaultBlockSpecs }),
    +    mappings as any,
    +  );
    +}
    +
    +describe("pdf exporter mappings", () => {
    +  it("should embed the rendered diagram as an image", async () => {
    +    const exporter = createExporter(
    +      createDiagramBlockMapping({ renderDiagram }),
    +    );
    +
    +    const str = reactElementToJSXString(
    +      await exporter.toReactPDFDocument(diagramDocument),
    +    );
    +
    +    expect(str).toContain("data:image/png;base64,");
    +    // 100px wide at 0.75 points per pixel.
    +    expect(str).toContain("width: 75");
    +  });
    +
    +  it("should throw a descriptive error without a renderer outside the browser", async () => {
    +    const exporter = createExporter(diagramBlockMapping);
    +
    +    await expect(exporter.toReactPDFDocument(diagramDocument)).rejects.toThrow(
    +      "pass a `renderDiagram` function",
    +    );
    +  });
    +
    +  it("should render an error placeholder for invalid sources", async () => {
    +    // The renderer returns invalid sources as a typed error, and the
    +    // mapping renders the error placeholder - never the raw source.
    +    const exporter = createExporter(
    +      createDiagramBlockMapping({ renderDiagram: renderInvalidDiagram }),
    +    );
    +
    +    const str = reactElementToJSXString(
    +      await exporter.toReactPDFDocument(diagramDocument),
    +    );
    +
    +    expect(str).toContain("Invalid diagram");
    +    expect(str).toContain("graph TD");
    +    expect(str).not.toContain("data:image");
    +  });
    +});
    diff --git a/packages/diagram-block/src/vite-env.d.ts b/packages/diagram-block/src/vite-env.d.ts
    new file mode 100644
    index 0000000000..bc2d8a36f3
    --- /dev/null
    +++ b/packages/diagram-block/src/vite-env.d.ts
    @@ -0,0 +1 @@
    +/// 
    diff --git a/packages/diagram-block/tsconfig.json b/packages/diagram-block/tsconfig.json
    new file mode 100644
    index 0000000000..2d8bcd4a25
    --- /dev/null
    +++ b/packages/diagram-block/tsconfig.json
    @@ -0,0 +1,33 @@
    +{
    +  "compilerOptions": {
    +    "target": "ESNext",
    +    "useDefineForClassFields": true,
    +    "module": "ESNext",
    +    "lib": ["ESNext", "DOM"],
    +    "moduleResolution": "bundler",
    +    "jsx": "react-jsx",
    +    "strict": true,
    +    "sourceMap": true,
    +    "resolveJsonModule": true,
    +    "esModuleInterop": true,
    +    "noEmit": false,
    +    "noUnusedLocals": true,
    +    "noUnusedParameters": true,
    +    "noImplicitReturns": true,
    +    "outDir": "dist",
    +    "declaration": true,
    +    "declarationDir": "types",
    +    "composite": true,
    +    "skipLibCheck": true,
    +    "emitDeclarationOnly": true,
    +    "paths": {
    +      "@shared/*": ["../../shared/*"]
    +    }
    +  },
    +  "include": ["src"],
    +  "references": [
    +    {
    +      "path": "../../shared"
    +    }
    +  ]
    +}
    diff --git a/packages/diagram-block/vite.config.ts b/packages/diagram-block/vite.config.ts
    new file mode 100644
    index 0000000000..698c340d58
    --- /dev/null
    +++ b/packages/diagram-block/vite.config.ts
    @@ -0,0 +1,135 @@
    +import * as path from "path";
    +import { webpackStats } from "rollup-plugin-webpack-stats";
    +import { configDefaults, defineConfig, type UserConfig } from "vite-plus";
    +import pkg from "./package.json";
    +
    +// https://vitejs.dev/config/
    +export default defineConfig(
    +  (conf) =>
    +    ({
    +      run: {
    +        tasks: {
    +          build: {
    +            command: "tsc && vp build",
    +            input: [
    +              { auto: true },
    +              { pattern: "!**/*.tsbuildinfo", base: "workspace" },
    +            ],
    +            output: ["dist/**", "!dist/*.tsbuildinfo"],
    +          },
    +        },
    +      },
    +      test: {
    +        setupFiles: ["./vitestSetup.ts"],
    +        // `.browser.test` files need a real browser; the tests package's
    +        // browser suite runs them.
    +        exclude: [...configDefaults.exclude, "**/*.browser.test.*"],
    +      },
    +      // The ODT exporter sources (loaded via the test aliases) use JSX
    +      // namespace tags (e.g. ), which Vite's oxc rejects by default.
    +      oxc: {
    +        jsx: {
    +          throwIfNamespace: false,
    +        },
    +      },
    +      plugins: [webpackStats() as any],
    +      // used so that vitest resolves the core package from the sources instead of the built version
    +      resolve: {
    +        alias:
    +          conf.command === "build"
    +            ? ({} as Record)
    +            : ({
    +                "@shared": path.resolve(__dirname, "../../shared/"),
    +                // load live from sources with live reload working
    +                "@blocknote/core": path.resolve(__dirname, "../core/src/"),
    +                "@blocknote/react": path.resolve(__dirname, "../react/src/"),
    +                "@blocknote/xl-docx-exporter": path.resolve(
    +                  __dirname,
    +                  "../xl-docx-exporter/src/",
    +                ),
    +                "@blocknote/xl-email-exporter": path.resolve(
    +                  __dirname,
    +                  "../xl-email-exporter/src/",
    +                ),
    +                "@blocknote/xl-multi-column": path.resolve(
    +                  __dirname,
    +                  "../xl-multi-column/src/",
    +                ),
    +                "@blocknote/xl-odt-exporter": path.resolve(
    +                  __dirname,
    +                  "../xl-odt-exporter/src/",
    +                ),
    +                "@blocknote/xl-pdf-exporter": path.resolve(
    +                  __dirname,
    +                  "../xl-pdf-exporter/src/",
    +                ),
    +              } as Record),
    +      },
    +      build: {
    +        sourcemap: true,
    +        lib: {
    +          entry: {
    +            "blocknote-diagram-block": path.resolve(__dirname, "src/index.ts"),
    +            "docx-exporter": path.resolve(
    +              __dirname,
    +              "src/docx-exporter/index.ts",
    +            ),
    +            "odt-exporter": path.resolve(
    +              __dirname,
    +              "src/odt-exporter/index.ts",
    +            ),
    +            "pdf-exporter": path.resolve(
    +              __dirname,
    +              "src/pdf-exporter/index.tsx",
    +            ),
    +            "email-exporter": path.resolve(
    +              __dirname,
    +              "src/email-exporter/index.tsx",
    +            ),
    +          },
    +          name: "blocknote-diagram-block",
    +          formats: ["es", "cjs"],
    +          fileName: (format, entryName) =>
    +            format === "es" ? `${entryName}.js` : `${entryName}.cjs`,
    +        },
    +        rollupOptions: {
    +          // make sure to externalize deps that shouldn't be bundled
    +          // into your library
    +          external: (source) => {
    +            // Bundle react-icons into the output (tree-shaken) so consumers
    +            // don't need to install it as a peer/runtime dependency.
    +            const bundledDeps = ["react-icons"];
    +            if (
    +              bundledDeps.some(
    +                (dep) => source === dep || source.startsWith(dep + "/"),
    +              )
    +            ) {
    +              return false;
    +            }
    +            if (
    +              Object.keys({
    +                ...pkg.dependencies,
    +                ...((pkg as any).peerDependencies || {}),
    +                ...pkg.devDependencies,
    +              }).some((dep) => source === dep || source.startsWith(dep + "/"))
    +            ) {
    +              return true;
    +            }
    +            return (
    +              source.startsWith("react/") ||
    +              source.startsWith("react-dom/") ||
    +              source.startsWith("prosemirror-") ||
    +              source.startsWith("@tiptap/") ||
    +              source.startsWith("@blocknote/") ||
    +              source.startsWith("node:")
    +            );
    +          },
    +          output: {
    +            // Provide global variables to use in the UMD build
    +            // for externalized deps
    +            globals: {},
    +          },
    +        },
    +      },
    +    }) as UserConfig,
    +);
    diff --git a/packages/diagram-block/vitestSetup.ts b/packages/diagram-block/vitestSetup.ts
    new file mode 100644
    index 0000000000..dbcf3eb39c
    --- /dev/null
    +++ b/packages/diagram-block/vitestSetup.ts
    @@ -0,0 +1,10 @@
    +import { afterEach, beforeEach } from "vite-plus/test";
    +
    +beforeEach(() => {
    +  globalThis.window = globalThis.window || ({} as any);
    +  (window as Window & { __TEST_OPTIONS?: any }).__TEST_OPTIONS = {};
    +});
    +
    +afterEach(() => {
    +  delete (window as Window & { __TEST_OPTIONS?: any }).__TEST_OPTIONS;
    +});
    diff --git a/shared/testDocument.ts b/shared/testDocument.ts
    index 754665a59e..1ff87e73d0 100644
    --- a/shared/testDocument.ts
    +++ b/shared/testDocument.ts
    @@ -1,7 +1,7 @@
     import {
       BlockNoteSchema,
    -  defaultBlockSpecs,
       createPageBreakBlockSpec,
    +  defaultBlockSpecs,
     } from "@blocknote/core";
     
     import { partialBlocksToBlocksForTesting } from "./formatConversionTestUtil.js";
    @@ -303,3 +303,66 @@ export const testDocument = partialBlocksToBlocksForTesting(
         },
       ],
     );
    +
    +// Math, inline math & diagram blocks. Their specs live in separate packages
    +// (`@blocknote/math-block`, `@blocknote/diagram-block`) that `shared` doesn't
    +// depend on, so they're hand-built (rather than via
    +// `partialBlocksToBlocksForTesting`) — the exporters only need the block JSON.
    +//
    +// These are kept OUT of the base `testDocument` and exposed via
    +// `testDocumentWithSourceBlocks` below, because `testDocument` is also consumed
    +// by the suggestion-gallery example / e2e tests, whose editor schema does NOT
    +// register these block types — seeding them there throws "schema.nodes[...] is
    +// undefined". Only the exporters (which map the raw block JSON and don't need
    +// the runtime specs) opt in to the extended document.
    +const sourceBlocksForTesting = [
    +  {
    +    id: "math-block",
    +    type: "mathBlock",
    +    props: {},
    +    content: [{ type: "text", text: "a^2 = \\sqrt{b^2 + c^2}", styles: {} }],
    +    children: [],
    +  },
    +  {
    +    id: "paragraph-with-inline-math",
    +    type: "paragraph",
    +    props: {
    +      backgroundColor: "default",
    +      textColor: "default",
    +      textAlignment: "left",
    +    },
    +    content: [
    +      { type: "text", text: "Inline math: ", styles: {} },
    +      {
    +        type: "math",
    +        props: {},
    +        content: "e^{i\\pi} + 1 = 0",
    +      },
    +    ],
    +    children: [],
    +  },
    +  {
    +    id: "diagram-block",
    +    type: "diagram",
    +    props: {},
    +    content: [
    +      {
    +        type: "text",
    +        text: "graph TD\n  A[Start] --> B[End]",
    +        styles: {},
    +      },
    +    ],
    +    children: [],
    +  },
    +] as unknown as typeof testDocument;
    +
    +/**
    + * `testDocument` plus the math / inline-math / diagram blocks whose specs live
    + * in separate packages. Used by the exporter tests (which serialize raw block
    + * JSON via their default mappings and so don't need the runtime specs). The
    + * source blocks are appended at the end, so exporter snapshots are unaffected.
    + */
    +export const testDocumentWithSourceBlocks = [
    +  ...testDocument,
    +  ...sourceBlocksForTesting,
    +] as typeof testDocument;
    diff --git a/tests/src/unit/react/formatConversion/export/__snapshots__/blocknoteHTML/diagram/basic.html b/tests/src/unit/react/formatConversion/export/__snapshots__/blocknoteHTML/diagram/basic.html
    new file mode 100644
    index 0000000000..dc83c065d9
    --- /dev/null
    +++ b/tests/src/unit/react/formatConversion/export/__snapshots__/blocknoteHTML/diagram/basic.html
    @@ -0,0 +1,39 @@
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/tests/src/unit/react/formatConversion/export/__snapshots__/html/diagram/basic.html b/tests/src/unit/react/formatConversion/export/__snapshots__/html/diagram/basic.html new file mode 100644 index 0000000000..eb3b214fd7 --- /dev/null +++ b/tests/src/unit/react/formatConversion/export/__snapshots__/html/diagram/basic.html @@ -0,0 +1,4 @@ +
    +  graph TD
    +  A[Start] --> B[End]
    +
    \ No newline at end of file diff --git a/tests/src/unit/react/formatConversion/export/__snapshots__/markdown/diagram/basic.md b/tests/src/unit/react/formatConversion/export/__snapshots__/markdown/diagram/basic.md new file mode 100644 index 0000000000..0c7bf63597 --- /dev/null +++ b/tests/src/unit/react/formatConversion/export/__snapshots__/markdown/diagram/basic.md @@ -0,0 +1,4 @@ +```mermaid +graph TD + A[Start] --> B[End] +``` diff --git a/tests/src/unit/react/formatConversion/parse/__snapshots__/html/diagramBlock.json b/tests/src/unit/react/formatConversion/parse/__snapshots__/html/diagramBlock.json new file mode 100644 index 0000000000..4c8f430455 --- /dev/null +++ b/tests/src/unit/react/formatConversion/parse/__snapshots__/html/diagramBlock.json @@ -0,0 +1,16 @@ +[ + { + "children": [], + "content": [ + { + "styles": {}, + "text": "graph TD + A[Start] --> B[End]", + "type": "text", + }, + ], + "id": "1", + "props": {}, + "type": "diagram", + }, +] \ No newline at end of file diff --git a/tests/src/unit/react/formatConversion/parse/__snapshots__/markdown/codeBlockNotDiagram.json b/tests/src/unit/react/formatConversion/parse/__snapshots__/markdown/codeBlockNotDiagram.json new file mode 100644 index 0000000000..d48d7ebb30 --- /dev/null +++ b/tests/src/unit/react/formatConversion/parse/__snapshots__/markdown/codeBlockNotDiagram.json @@ -0,0 +1,17 @@ +[ + { + "children": [], + "content": [ + { + "styles": {}, + "text": "console.log('hi');", + "type": "text", + }, + ], + "id": "1", + "props": { + "language": "javascript", + }, + "type": "codeBlock", + }, +] \ No newline at end of file diff --git a/tests/src/unit/react/formatConversion/parse/__snapshots__/markdown/diagramBlock.json b/tests/src/unit/react/formatConversion/parse/__snapshots__/markdown/diagramBlock.json new file mode 100644 index 0000000000..4c8f430455 --- /dev/null +++ b/tests/src/unit/react/formatConversion/parse/__snapshots__/markdown/diagramBlock.json @@ -0,0 +1,16 @@ +[ + { + "children": [], + "content": [ + { + "styles": {}, + "text": "graph TD + A[Start] --> B[End]", + "type": "text", + }, + ], + "id": "1", + "props": {}, + "type": "diagram", + }, +] \ No newline at end of file diff --git a/tests/src/unit/react/testSchema.tsx b/tests/src/unit/react/testSchema.tsx index aa6ebff0f8..a095917a13 100644 --- a/tests/src/unit/react/testSchema.tsx +++ b/tests/src/unit/react/testSchema.tsx @@ -3,6 +3,11 @@ import { createPageBreakBlockSpec, defaultProps, } from "@blocknote/core"; +import { createReactDiagramBlockSpec } from "@blocknote/diagram-block"; +import { + createReactInlineMathSpec, + createReactMathBlockSpec, +} from "@blocknote/math-block"; import { createReactBlockSpec, createReactInlineContentSpec, @@ -168,10 +173,13 @@ export const testSchema = BlockNoteSchema.create().extend({ customParagraph: createCustomParagraph(), simpleCustomParagraph: createSimpleCustomParagraph(), contextParagraph: createContextParagraph(), + mathBlock: createReactMathBlockSpec(), + diagram: createReactDiagramBlockSpec(), }, inlineContentSpecs: { mention: Mention, tag: Tag, + math: createReactInlineMathSpec(), }, styleSpecs: { small: Small, From f4c747e918e8e2f29d53d6e805323d4c37127d6a Mon Sep 17 00:00:00 2001 From: Nick the Sick Date: Thu, 13 Aug 2026 16:26:33 +0200 Subject: [PATCH 5/5] docs: give blocks, custom schemas and export their own pages Restructure the docs around the new blocks: document source-with-preview as a custom schema pattern, refresh the code block and export pages, and make `validate-links` work from any cwd. --- .../docs/features/blocks/code-blocks.mdx | 124 +++++++++++------- docs/content/docs/features/blocks/meta.json | 2 + .../features/custom-schemas/custom-blocks.mdx | 25 +++- .../custom-schemas/custom-inline-content.mdx | 10 +- .../custom-schemas/source-with-preview.mdx | 108 +++++++++++++++ docs/content/docs/features/export/docx.mdx | 8 ++ docs/content/docs/features/export/email.mdx | 44 +++++++ docs/content/docs/features/export/odt.mdx | 8 ++ docs/content/docs/features/export/pdf.mdx | 8 ++ .../docs/foundations/document-structure.mdx | 28 +++- docs/validate-links.mjs | 22 ++-- 11 files changed, 318 insertions(+), 69 deletions(-) create mode 100644 docs/content/docs/features/custom-schemas/source-with-preview.mdx diff --git a/docs/content/docs/features/blocks/code-blocks.mdx b/docs/content/docs/features/blocks/code-blocks.mdx index 8f5d1816b3..32f341e5d8 100644 --- a/docs/content/docs/features/blocks/code-blocks.mdx +++ b/docs/content/docs/features/blocks/code-blocks.mdx @@ -1,13 +1,11 @@ --- title: Code Blocks -description: How to add syntax highlighting to code blocks. +description: How to use code blocks, and how to add syntax highlighting to them. --- # Code Blocks -Code blocks are a simple way to display formatted code with syntax highlighting. - -Code blocks by default are a simple way to display code. But, BlockNote also supports more advanced features like: +Code blocks are a simple way to display formatted code. By default they're kept deliberately simple, but BlockNote also supports more advanced features: - Syntax highlighting - Custom themes @@ -34,7 +32,6 @@ type CodeBlockOptions = { aliases?: string[]; } >; - createHighlighter?: () => Promise>; }; ``` @@ -42,20 +39,7 @@ type CodeBlockOptions = { `defaultLanguage:` The syntax highlighting default language for code blocks which are created/inserted without a set language, which is `text` by default (no syntax highlighting). -`supportedLanguages:` The syntax highlighting languages supported by the code block, which is an empty array by default. - -`createHighlighter:` The [Shiki highliter](https://shiki.style/guide/load-theme) to use for syntax highlighting. - -BlockNote also provides a generic set of options for syntax highlighting in the `@blocknote/code-block` package, which support a wide range of languages: - -```ts -import { createCodeBlockSpec } from "@blocknote/core"; -import { codeBlockOptions } from "@blocknote/code-block"; - -const codeBlock = createCodeBlockSpec(codeBlockOptions); -``` - -See [this example](/examples/theming/code-block) to see it in action. +`supportedLanguages:` The syntax highlighting languages supported by the code block. Empty by default. **Type & Props** @@ -66,57 +50,97 @@ type CodeBlock = { props: { language: string; }; - content: InlineContent[]; + content: StyledText[]; children: Block[]; }; ``` `language:` The syntax highlighting language to use. Defaults to `text`, which has no highlighting. +Unlike most blocks, the code block's `content` is [plain text](/docs/foundations/document-structure#plain-text-content). + +## Syntax Highlighting + +The easiest way to enable syntax highlighting is the `@blocknote/code-block` package. It ships a ready-to-use highlighter supporting a wide range of languages: + +```bash +npm install @blocknote/code-block +``` + +Add its `syntaxHighlighter` extension to your editor, and pass the matching `codeBlockOptions` (the supported language list) to the code block spec: + +```ts +import { createCodeBlockSpec } from "@blocknote/core"; +import { codeBlockOptions, syntaxHighlighter } from "@blocknote/code-block"; + +const editor = useCreateBlockNote({ + extensions: [syntaxHighlighter], + schema: BlockNoteSchema.create().extend({ + blockSpecs: { + codeBlock: createCodeBlockSpec(codeBlockOptions), + }, + }), +}); +``` + +That's all — see it in action in [this example](/examples/theming/code-block). + + + The same extension also highlights other source-authored blocks, like the + [math](/docs/features/blocks/math) and + [diagram](/docs/features/blocks/diagrams) blocks' source popups. + + ## Custom Syntax Highlighting -To create your own syntax highlighter, you can use the [shiki-codegen](https://shiki.style/packages/codegen) CLI for generating the code to create one for your chosen languages and themes. +Under the hood, highlighting is split into two parts, which you can also wire up yourself for full control over the bundle: + +- The `SyntaxHighlightingExtension` (from `@blocknote/core`) provides the highlighter — a [Shiki](https://shiki.style) instance with your choice of languages, themes, and engine: + + ```ts + type SyntaxHighlightingOptions = { + createHighlighter: () => Promise>; + }; + + const syntaxHighlighter = SyntaxHighlightingExtension(options); + ``` + + `createHighlighter:` Creates the [Shiki highlighter](https://shiki.style/guide/load-theme) to use for syntax highlighting. + +- Each block decides if and how its text is highlighted, via the `highlight` callback in the block spec's `meta`: + + ```ts + // In the block spec's `meta`: + highlight?: (block: Block) => string | undefined; + ``` + + It runs for each instance of the block and returns the language to highlight the block's text with (one of the languages supported by the highlighter), or `undefined` for no highlighting. The default code block already implements it, returning its `language` prop — while `codeBlockOptions` supplies the matching set of supported languages for the bundled highlighter. -For example, to create a syntax highlighter using the optimized javascript engine, javascript, typescript, vue, with light and dark themes, you can run the following command: +To create your own highlighter, the [shiki-codegen](https://shiki.style/packages/codegen) CLI generates the code for your chosen languages and themes. For example, for a highlighter using the optimized JavaScript engine with javascript, typescript, and vue, plus light and dark themes: ```bash npx shiki-codegen --langs javascript,typescript,vue --themes light-plus,dark-plus --engine javascript --precompiled ./shiki.bundle.ts ``` -This will generate a `shiki.bundle.ts` file that you can use to create a syntax highlighter for your editor. - -Like this: +This generates a `shiki.bundle.ts` file that you use to create the extension — added to the editor exactly like the pre-configured one above, alongside a `createCodeBlockSpec` configured with your matching languages: ```ts +import { SyntaxHighlightingExtension } from "@blocknote/core"; import { createHighlighter } from "./shiki.bundle.js"; -export default function App() { - const editor = useCreateBlockNote({ - schema: BlockNoteSchema.create().extend({ - blockSpecs: { - codeBlock: createCodeBlockSpec({ - indentLineWithTab: true, - defaultLanguage: "typescript", - supportedLanguages: { - typescript: { - name: "TypeScript", - aliases: ["ts"], - }, - }, - createHighlighter: () => - createHighlighter({ - themes: ["light-plus", "dark-plus"], - langs: [], - }), - }), - }, +const syntaxHighlighter = SyntaxHighlightingExtension({ + createHighlighter: () => + createHighlighter({ + themes: ["light-plus", "dark-plus"], + langs: [], }), - }); - - return ; -} +}); ``` -See the custom code block example for a more detailed example. +The example below shows the complete setup: + +## Related + +Looking for blocks that are *authored* as code but *rendered* as what the code produces? See the [math](/docs/features/blocks/math) and [diagram](/docs/features/blocks/diagrams) blocks, or [build your own](/docs/features/custom-schemas/source-with-preview). diff --git a/docs/content/docs/features/blocks/meta.json b/docs/content/docs/features/blocks/meta.json index cf603446fc..3ce8d80a91 100644 --- a/docs/content/docs/features/blocks/meta.json +++ b/docs/content/docs/features/blocks/meta.json @@ -6,6 +6,8 @@ "tables", "embeds", "code-blocks", + "math", + "diagrams", "inline-content", "custom", "..." diff --git a/docs/content/docs/features/custom-schemas/custom-blocks.mdx b/docs/content/docs/features/custom-schemas/custom-blocks.mdx index 60bacafe68..ff25cf838c 100644 --- a/docs/content/docs/features/custom-schemas/custom-blocks.mdx +++ b/docs/content/docs/features/custom-schemas/custom-blocks.mdx @@ -54,18 +54,22 @@ The Block Config describes the shape of your custom blocks. Use it to specify th ```typescript type BlockConfig = { type: string; - content: "inline" | "none"; + content: "inline" | "plain" | "none"; readonly propSchema: PropSchema; }; ``` `type:` Defines the identifier of the custom block. -`content:` `inline` if your custom block should support rich text content, `none` if not. +`content:` Defines what kind of editable content the block holds: + +- `"inline"` for rich text content, i.e. [inline content](/docs/foundations/document-structure#inline-content-objects) such as styled text and links. +- `"plain"` for unstyled plain text, like a code block's source. Plain content can't hold formatting marks (bold, italic, etc.) or other inline content, and it's the only content type that supports [syntax highlighting](/docs/features/blocks/code-blocks#syntax-highlighting). +- `"none"` if the block holds no editable content. - _In the alert demo, we want the user to be able to type text in our alert, so - we set `content` to `"inline"`._ + _In the alert demo, we want the user to be able to type rich text in our + alert, so we set `content` to `"inline"`._ `propSchema:` The `PropSchema` specifies the props that the block supports. Block props (properties) are data stored with your Block in the document, and can be used to customize its appearance or behavior. @@ -124,6 +128,10 @@ type ReactCustomBlockImplementation = { contest: { nestingLevel: number }; }>; parse?: (element: HTMLElement) => PartialBlock["props"] | undefined; + parseContent?: (options: { + el: HTMLElement; + schema: Schema; + }) => Fragment | undefined; runsBefore?: string[]; meta?: { hardBreakShortcut?: "shift+enter" | "enter" | "none"; @@ -132,6 +140,7 @@ type ReactCustomBlockImplementation = { code?: boolean; defining?: boolean; isolating?: boolean; + highlight?: (block: Block) => string | undefined; }; }; ``` @@ -142,7 +151,7 @@ type ReactCustomBlockImplementation = { - `editor:` The BlockNote editor instance that the block is in. -- `contentRef:` A React `ref` you can use to mark which element in your block is editable, this is only available if your block config contains `content: "inline"`. +- `contentRef:` A React `ref` you can use to mark which element in your block is editable. This is only available if your block config contains `content: "inline"` or `content: "plain"`. `toExternalHTML?:` This component is used whenever the block is being exported to HTML for use outside BlockNote, for example when copying it to the clipboard. If it's not defined, BlockNote will just use `render` for the HTML conversion. Takes the same props as `render` and an additional `context` prop, which is. an object with the following attributes: @@ -158,11 +167,13 @@ type ReactCustomBlockImplementation = { - `element`: The HTML element that's being parsed. +`parseContent?:` An advanced option used in conjunction with `parse` that allows for more control when converting HTML into blocks. Runs when `parse` returns non-undefined and corresponds to [getContent](https://prosemirror.net/docs/ref/#model.TagParseRule.getContent) in the ProseMirror API. + `runsBefore?:` If this block has parsing or extensions that need to be given priority over any other blocks, you can pass their `type`s in an array here. `meta?:` An object for setting various generic properties of the block. -- `hardBreakShortcut?:` Defines which keyboard shortcut should be used to insert a hard break into the block's inline content. Defaults to `"shift+enter"`. +- `hardBreakShortcut?:` Defines which keyboard shortcut should be used to insert a hard break into the block's inline content. Defaults to `"shift+enter"`. For `content: "plain"` blocks (which can't hold hard break nodes), the shortcut inserts a literal newline (`"\n"`) instead. - `selectable?:` Can be set to false in order to make the block non-selectable, both using the mouse and keyboard. This also helps with being able to select non-editable content within the block. Should only be set to false when `content` is `none` and defaults to true. @@ -174,6 +185,8 @@ type ReactCustomBlockImplementation = { - `isolating?:` Whether this block is [isolating](https://prosemirror.net/docs/ref/#model.NodeSpec.isolating). +- `highlight?:` A callback that returns the language the block's text should be syntax-highlighted as (or `undefined` for no highlighting). Highlighting only takes effect when the [syntax highlighting extension](/docs/features/blocks/code-blocks#syntax-highlighting) is added to the editor. + ### Block Extensions While the example on this page doesn't use it, `createReactBlockSpec` takes a third, optional argument `extensions`. This is for adding editor `extensions` that are specific to the block, which you can find out more about [here](/docs/features/extensions). diff --git a/docs/content/docs/features/custom-schemas/custom-inline-content.mdx b/docs/content/docs/features/custom-schemas/custom-inline-content.mdx index efc8c424ae..5c97fcae72 100644 --- a/docs/content/docs/features/custom-schemas/custom-inline-content.mdx +++ b/docs/content/docs/features/custom-schemas/custom-inline-content.mdx @@ -50,14 +50,18 @@ The Inline Content Config describes the shape of your custom inline content. Use ```typescript type CustomInlineContentConfig = { type: string; - content: "styled" | "none"; + content: "styled" | "plain" | "none"; readonly propSchema: PropSchema; }; ``` `type:` Defines the identifier of the custom inline content. -`content:` `styled` if your custom inline content should contain [`StyledText`](/docs/foundations/document-structure#inline-content-objects), `none` if not. +`content:` Defines what kind of editable content the inline content holds: + +- `"styled"` for rich text, i.e. [`StyledText`](/docs/foundations/document-structure#inline-content-objects). +- `"plain"` for unstyled plain text, like an inline code or inline math source. Plain content can't hold formatting marks (bold, italic, etc.), and it's the only content type that supports [syntax highlighting](/docs/features/blocks/code-blocks#syntax-highlighting). +- `"none"` if the inline content holds no editable content. _In the mentions demo, we want each mention to be a single, non-editable @@ -130,7 +134,7 @@ type ReactCustomInlineContentImplementation = { - `inlineContent:` The inline content that should be rendered. Its type and props will match the type and PropSchema defined in the Inline Content Config. -- `contentRef:` A React `ref` you can use to mark which element in your inline content is editable, this is only available if your inline content config contains `content: "styled"`. +- `contentRef:` A React `ref` you can use to mark which element in your inline content is editable, this is only available if your inline content config contains `content: "styled"` or `content: "plain"`. - `draggable:` Specifies whether the inline content can be dragged within the editor. If set to `true`, the inline content will be draggable. Defaults to `false` if not specified. If this is true, you should add `data-drag-handle` to the DOM element that should function as the drag handle. diff --git a/docs/content/docs/features/custom-schemas/source-with-preview.mdx b/docs/content/docs/features/custom-schemas/source-with-preview.mdx new file mode 100644 index 0000000000..03dd18c51e --- /dev/null +++ b/docs/content/docs/features/custom-schemas/source-with-preview.mdx @@ -0,0 +1,108 @@ +--- +title: Source with Preview Blocks +description: Build custom blocks and inline content that are authored as source code but rendered as a preview — like BlockNote's math and diagram blocks. +--- + +# Source with Preview Blocks + +Some blocks are authored as source code but are more useful shown as the thing that code produces — a LaTeX formula rendered as a formula, or Mermaid source rendered as a diagram. Unlike a [code block](/docs/features/blocks/code-blocks), these blocks show the rendered preview in place, while the source is edited in a popup. + + + The components on this page are only available in React + (`@blocknote/react`). + + +BlockNote's [math](/docs/features/blocks/math) and [diagram](/docs/features/blocks/diagrams) blocks are built on this pattern, and the same building blocks are available to create your own: + +- `SourceBlockWithPreview` (from `@blocknote/react`) — for [custom blocks](/docs/features/custom-schemas/custom-blocks). +- `SourceInlineContentWithPreview` (from `@blocknote/react`) — for [custom inline content](/docs/features/custom-schemas/custom-inline-content). + +Both render the preview you give them in place of the block/inline content, and manage the editable source popup for you. The popup behavior itself is driven by editor-wide extensions that BlockNote registers by default — a spec opts in simply by setting `hasPreview: true` in its `meta`. + +## Custom Block + +Three pieces make a source-with-preview block — the [example below](#example) implements them all: + +**1. A block config with [`"plain"` content](/docs/features/custom-schemas/custom-blocks)** — the source is stored as the block's plain text content: + +```tsx +const createMyBlockConfig = createBlockConfig( + () => + ({ + type: "myBlock" as const, + propSchema: {}, + content: "plain" as const, + }) as const, +); +``` + +**2. A render component** that reads the source, renders it however you like, and hands the result to `SourceBlockWithPreview`: + +```tsx +// The block's content as plain text, i.e. the source to render. +const source = plainContentToString(props.block.content).trim(); +// Your own rendering, returning a preview element or an error for invalid +// source - the example below renders CSV to a table. +const { preview, error } = renderMySource(source); + +return ( + +); +``` + +A few more props customize the states: `errorPreview` for the compact error state shown in place of the preview, `emptySourcePlaceholder` for when the source is empty (a string customizes the default placeholder's text, an element — e.g. the exported `PreviewPlaceholder` with your own icon — replaces it entirely), and `sourcePlaceholder` for the popup input's placeholder. See the `SourceWithPreviewProps` type for the full list. + +**3. The spec's `meta`**, opting into the popup: + +```tsx +const createMyBlockSpec = createReactBlockSpec(createMyBlockConfig, { + meta: { + code: true, + // Marks the block as rendering a preview with an editable source popup. + hasPreview: true, + // What Enter does while the popup is open: "enter" inserts a newline + // (multiline sources, like diagrams), "shift+enter" closes the popup + // (single-line sources, like math). + hardBreakShortcut: "enter", + }, + render: MyBlockPreview, +}); +``` + +Because the block uses `"plain"` content, you can also syntax-highlight the source in the popup (as the math and diagram blocks do): add a `highlight` callback to the `meta` that returns the source language, then add the [syntax highlighting](/docs/features/blocks/code-blocks#syntax-highlighting) extension to your editor. + +## Custom Inline Content + +Inline content works the same way, with two differences: the component takes the inline-content render props (`node`, `getPos`), and for `"plain"` inline content the source is already a plain string: + +```tsx + +``` + +The spec is created with `createReactInlineContentSpec`, opting in via `meta: { code: true, hasPreview: true }`. Unlike blocks — which toggle the popup on click — inline content opens its popup exactly while the selection is inside its source, so it's always shown when selected. + +## Example + +A complete implementation of both — a CSV table block and a color chip inline content: + + + +The `@blocknote/math-block` and `@blocknote/diagram-block` packages are production implementations of the same pattern. diff --git a/docs/content/docs/features/export/docx.mdx b/docs/content/docs/features/export/docx.mdx index 2536daa6bb..aede75175d 100644 --- a/docs/content/docs/features/export/docx.mdx +++ b/docs/content/docs/features/export/docx.mdx @@ -110,6 +110,10 @@ new DOCXExporter(schema, { }); ``` +### Math & diagram blocks + +The [math](/docs/features/blocks/math) and [diagram](/docs/features/blocks/diagrams) blocks ship their own DOCX mappings — math exports as native (editable) Word equations, diagrams as embedded images. See [exporting math](/docs/features/blocks/math#docx) and [exporting diagrams](/docs/features/blocks/diagrams#exporting) for the setup. + ### Exporter options The `DOCXExporter` constructor takes an optional `options` parameter. @@ -120,6 +124,10 @@ const defaultOptions = { // a function to resolve external resources in order to avoid CORS issues // by default, this calls a BlockNote hosted server-side proxy to resolve files resolveFileUrl: corsProxyResolveFileUrl, + // the strings rendered into the exported document (file link texts, error + // placeholders); pass a locale from @blocknote/core/locales (or your + // editor's dictionary) to export in another language + dictionary: locales.en, // the colors to use in the Docx for things like highlighting, background colors and font colors. colors: COLORS_DEFAULT, // defaults from @blocknote/core }; diff --git a/docs/content/docs/features/export/email.mdx b/docs/content/docs/features/export/email.mdx index b36f7ccd58..0c8f18ccc1 100644 --- a/docs/content/docs/features/export/email.mdx +++ b/docs/content/docs/features/export/email.mdx @@ -126,6 +126,10 @@ const defaultOptions = { // a function to resolve external resources in order to avoid CORS issues // by default, this calls a BlockNote hosted server-side proxy to resolve files resolveFileUrl: corsProxyResolveFileUrl, + // the strings rendered into the exported document (file link texts, error + // placeholders); pass a locale from @blocknote/core/locales (or your + // editor's dictionary) to export in another language + dictionary: locales.en, // the colors to use in the email for things like highlighting, background colors and font colors. colors: COLORS_DEFAULT, // defaults from @blocknote/core }; @@ -168,3 +172,43 @@ new ReactEmailExporter(schema, { styleMapping, }); ``` + +### Math & diagram blocks + +The [math](/docs/features/blocks/math) and [diagram](/docs/features/blocks/diagrams) blocks ship their own email mappings, exporting as images with the LaTeX/Mermaid source as the alt text. See [exporting math](/docs/features/blocks/math#email) and [exporting diagrams](/docs/features/blocks/diagrams#exporting) for the setup. + +**Image delivery.** By default the images are embedded as data URLs — self-contained, but some email clients (notably Gmail and Outlook for Windows) don't display data URL images and show the alt text instead. For those, deliver the images as inline `cid:` attachments (the most widely supported way to embed generated images) and pass the collected attachments to your mailer at send time: + +```typescript +import { + ReactEmailExporter, + reactEmailDefaultSchemaMappings, + createCIDImageDelivery, +} from "@blocknote/xl-email-exporter"; +import { + createInlineMathMapping, + createMathBlockMapping, +} from "@blocknote/math-block/email-exporter"; +import { createDiagramBlockMapping } from "@blocknote/diagram-block/email-exporter"; + +const imageDelivery = createCIDImageDelivery(); +const exporter = new ReactEmailExporter(editor.schema, { + ...reactEmailDefaultSchemaMappings, + blockMapping: { + ...reactEmailDefaultSchemaMappings.blockMapping, + mathBlock: createMathBlockMapping({ imageDelivery }), + diagram: createDiagramBlockMapping({ imageDelivery }), + }, + inlineContentMapping: { + ...reactEmailDefaultSchemaMappings.inlineContentMapping, + math: createInlineMathMapping({ imageDelivery }), + }, +}); + +const html = await exporter.toReactEmailDocument(editor.document); + +// e.g. with nodemailer (works the same with other mailers): +await transporter.sendMail({ html, attachments: imageDelivery.attachments }); +``` + +**Server-side rendering.** Emails are usually rendered server-side at send time — see [exporting math](/docs/features/blocks/math#email) and [exporting diagrams server-side](/docs/features/blocks/diagrams#exporting-server-side) for what that needs. diff --git a/docs/content/docs/features/export/odt.mdx b/docs/content/docs/features/export/odt.mdx index 3f5248a875..b5c35fc243 100644 --- a/docs/content/docs/features/export/odt.mdx +++ b/docs/content/docs/features/export/odt.mdx @@ -85,6 +85,10 @@ new ODTExporter(schema, { }); ``` +### Math & diagram blocks + +The [math](/docs/features/blocks/math) and [diagram](/docs/features/blocks/diagrams) blocks ship their own ODT mappings — math exports as native (editable) formula objects, diagrams as embedded images. See [exporting math](/docs/features/blocks/math#odt) and [exporting diagrams](/docs/features/blocks/diagrams#exporting) for the setup. + ### Exporter options The `ODTExporter` constructor takes an optional `options` parameter. @@ -95,6 +99,10 @@ const defaultOptions = { // a function to resolve external resources in order to avoid CORS issues // by default, this calls a BlockNote hosted server-side proxy to resolve files resolveFileUrl: corsProxyResolveFileUrl, + // the strings rendered into the exported document (file link texts, error + // placeholders); pass a locale from @blocknote/core/locales (or your + // editor's dictionary) to export in another language + dictionary: locales.en, // the colors to use in the ODT for things like highlighting, background colors and font colors. colors: COLORS_DEFAULT, // defaults from @blocknote/core }; diff --git a/docs/content/docs/features/export/pdf.mdx b/docs/content/docs/features/export/pdf.mdx index 08594cf96f..ffea275c0f 100644 --- a/docs/content/docs/features/export/pdf.mdx +++ b/docs/content/docs/features/export/pdf.mdx @@ -83,6 +83,10 @@ new PDFExporter(schema, { }); ``` +### Math & diagram blocks + +The [math](/docs/features/blocks/math) and [diagram](/docs/features/blocks/diagrams) blocks ship their own PDF mappings — math blocks export as vector formulas, inline math as images flowing with the text, diagrams as embedded images. See [exporting math](/docs/features/blocks/math#pdf) and [exporting diagrams](/docs/features/blocks/diagrams#exporting) for the setup. + ### Exporter options The `PDFExporter` constructor takes an optional `options` parameter. @@ -99,6 +103,10 @@ const defaultOptions = { // a function to resolve external resources in order to avoid CORS issues // by default, this calls a BlockNote hosted server-side proxy to resolve files resolveFileUrl: corsProxyResolveFileUrl, + // the strings rendered into the exported document (file link texts, error + // placeholders); pass a locale from @blocknote/core/locales (or your + // editor's dictionary) to export in another language + dictionary: locales.en, // the colors to use in the PDF for things like highlighting, background colors and font colors. colors: COLORS_DEFAULT, // defaults from @blocknote/core }; diff --git a/docs/content/docs/foundations/document-structure.mdx b/docs/content/docs/foundations/document-structure.mdx index 736671dae3..e63e4c05ef 100644 --- a/docs/content/docs/foundations/document-structure.mdx +++ b/docs/content/docs/foundations/document-structure.mdx @@ -68,7 +68,7 @@ type StyledText = { type CustomInlineContent = { type: string; - content: StyledText[] | undefined; + content: StyledText[] | string | undefined; props: Record; }; @@ -91,7 +91,31 @@ The demo below shows the editor contents (document) in JSON. It's an array of `B ## Special Cases -While most blocks use an array of `InlineContent` objects to describe their content (e.g.: paragraphs, headings, list items), some blocks, like [images](/docs/features/blocks/embeds#image), don't contain any rich text content, so their `content` fields will be `undefined`. +While most blocks use an array of `InlineContent` objects to describe their content (e.g.: paragraphs, headings, list items), some blocks, like [images](/docs/features/blocks/embeds#image), don't contain any rich text content, so their `content` fields will be `undefined`. There are a few other cases where `content` will not contain `InlineContent`. + +### Plain Text Content + +Some blocks, like [code blocks](/docs/features/blocks/code-blocks), store their content as plain text rather than rich text. Their `content` is still an array of `StyledText` objects, but the text is always unstyled (its `styles` is an empty object) and can't contain links or other inline content: + +```typescript +type PlainContent = { + type: "text"; + text: string; + styles: {}; +}[]; +``` + +To read a plain block's text, use `plainContentToString`: + +```typescript +import { plainContentToString } from "@blocknote/core"; + +const text = plainContentToString(block.content); +``` + +[Custom inline content](/docs/features/custom-schemas/custom-inline-content) can hold plain text too, but there it's represented directly as a `string` rather than an array. + +Custom blocks and inline content opt into plain text content by setting `content: "plain"` - see [Custom Blocks](/docs/features/custom-schemas/custom-blocks) and [Custom Inline Content](/docs/features/custom-schemas/custom-inline-content). ### Column Blocks diff --git a/docs/validate-links.mjs b/docs/validate-links.mjs index d9a45f69b2..15dcf00113 100644 --- a/docs/validate-links.mjs +++ b/docs/validate-links.mjs @@ -1,12 +1,18 @@ -import { getTableOfContents } from "fumadocs-core/content/toc"; -import { getSlugs } from "fumadocs-core/source"; -import { - printErrors, - readFiles, - scanURLs, - validateFiles, -} from "next-validate-link"; import path from "node:path"; +import { fileURLToPath } from "node:url"; + +// The content globs below are cwd-relative, and the glob library captures +// `process.cwd()` when it is first imported - so pin the cwd to this +// script's directory *before* loading it (via dynamic imports; static +// imports would hoist above the chdir). Run from any other directory +// without this, the globs silently match zero files and report success. +process.chdir(path.dirname(fileURLToPath(import.meta.url))); + +const { getTableOfContents } = await import("fumadocs-core/content/toc"); +const { getSlugs } = await import("fumadocs-core/source"); +const { printErrors, readFiles, scanURLs, validateFiles } = + await import("next-validate-link"); + async function checkLinks() { const docsFiles = await readFiles("content/docs/**/*.{md,mdx}"); const pagesFiles = await readFiles("content/pages/**/*.{md,mdx}");

dv@{K`+{G%3F0EqYNOsJ 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 |kcpasg3u(gNa1R|t|X zgJ6zvrWy_*29+nqcy$c*sr|mEF8dVDnuZ2G!yQWGnB9N;ZgklE?y{7rv0-0)Di)lF z%K^TUUR)M!Kv?uS&#uQi;wiYPA5e_&)In6}QG{^-61CcL24qwhK;I$s=dS3t-H3x= zCUEhPUy{6@;M>*P?!^F9j=%!!SU0n4)zrXK&8`z+AskG`TC||bUIQFg`gcnGnb=^F zri)HNy_I|G@8ppr9*-!h=ly(R=sbGN`{8zo$NI1IU;BU6ary z=u@Fe8Hyu2&8U}<>p#IsU>cb*&R=IG3PR3^u-F_d0Q_ZsIx>&*m<*)As^YS&3k?R? zQd?mAo&5jVLSE+m@9SlLv0tzCBgWmV_kv zn4@1;Rqan8soQFR)PnO^4n?iE$Q88rvkq`iG}Xz!jUvhY)YoeezB1}y03W3eSGpOh zAzttc8)_=LKx4pa2sN)L{9$ouRBUtmBNhVYu40P*LeM9**2w#&efxH()TW6ulbke1w-$V7L~aDF7ny&MjOYs)wi z=rsx8h2A$+M*p^L9?_Sa12}2IRwMEV)&Ym6sXh$AE}%a3NjPOM>elD?&Rk*t(i@;| zOm-#d*q^+$&@!(Nrs-l@*;0Y-;Yr*;Jq?%=L5Z+?&mNJFX2>td+?G(HNqLXq)CJ(J zP|h#M<(GyyC$T#<_EL?+NT%8Ih3)DSHKRoX}66$}yCVS&AarC8`pK z3rF{8k1~Z3cqu5C+prsHZG@wt1rA=T6_(yy2XnDCIf{l1uAdXaQ110(ai5=!Y**Mc z*&p;He@AaJIrE$B?ZyJ{+sP~>v$D?g^PDevb!dNj!rVF30mb?JMhNa8G&NYrx# z?HhH_ZM>o+BIBaP?xQ(*M(JOWI(4A8gmOXC(qKqP4%9;q6-e8${72aHO6B-8(tW{& zX<{$QX6f)dTS}WBC^i3s0L3Hf$Tw~r3800~zk0f46eJ|rUkebCocrI)q#ZnhYCQS! z)3KWtaEolZ5wMZYNb!z9dtf3Gh{#exCKPSk?hmL{2^C-4{bd%sNOgpu(o_kdeW4L4 zqP_Vcy_TFA_Su6fYXfqm_Ma4h!ho3+N zUh&VHJyT=(6y^W?I`9r6+lqgF-gX3+)Zc%>gezr>NJ@Zq)b3ig0#TCA?1-`idEBsh zOTTZ%Tu4CB7o)i>G=B!}SZ11@!{ z6kXqUP0=xtYZo83toRpG;`i@Ac{DS$T6FK;WPjOQO$kC8L_o4_GrIH>$Q{}_U>ZwW zZzWCRj6JxY!s{Q5l4wMNrqV;V+~GEu!@S_xb!0Y;CCrxi-@ncE&HcQmPgl~Ja&ScP zRdllz|C(j2Oo6nhWQ3HS z#^a-GpJr)%{WZm3p^N-+^`BIE;SEF3<;s@T_wfXpJM;F390m0jNPf310rUPa{V6lYeR zBQ9{1Dv%8L6%4&H0Kz%BU?@z*&YPS_84?qXU=CvEy`CwlDC8grpghfqvO|~^c?ToB z^KB2G?gK?CMv9ltu~PFx0j!kfZm0;bZv5oN{!cV^1wX&!Zn!FnVnh%KiDTr^2J8t;el!q- zij}MFL(Ny#IA(cC@vd8TqneUT0I&|S8H3a-WR(;>3Ve#u^eGvWf`5;Mx5nUv?wi-rM4^hRDYy+@iKk>kio)i5<(&Q~~(6?#M z4p)Kn4#tnTbfAJ&c2I9~rA(lI70**MDsj165QC4P5|Gpu<03f@(WQ%CXE+|}Q1mh< ziW=4;e(uZ9)JQ7-ZIDIv2Jk_2dS#EQ3xmW{?Uf`q5*Dk|YA}W`ud2b3Mg6Dp#`SN9 z4#{qbx~FQqdpcj{NFoq({J4W&t{fW}VhSt-w9lV|9N5V;N@Ln(&d60PS_w{vuK2fW zMlnO~RYrn-}4X<1Ng4t*0%IRwhSDV;f=_tsw$(_k6iI~hr$w$l$ z{#^X*l^WA}!OlgHR+ZrHG4bcvM4VWE6pRKxsDqrNKxX z(Nf3?{Zq7Z!8e9&N)0oh40=dWV$;3*QJ;*KfFCkOLU#s-6iePDr+!%v z$b?K|-#A{LcmZ-krQ+q7t2d5Le za5$7#BYW;Zg)ndvqG$%JkUDCK??D zWt)ryNJ`R3(qP{U2uzw5$&(wQm)-CyPNUe5!a;9`>c?#KW5}8H{ERH0sZ+f;Ya&s> zoj+heAUELUh`m_#RYzh#k?{mNnuBYPzM&g7dwW>^*SbV`Oeh8pvuO@b<(pUxB7$;&cEUC=Z( z;R6$gR1+6UfI)_q2L89whO0%AE1ccb=l1-2spyag5@%y*32udTiTV*h9|I!<1FG?# zYgukeaxElJrz`|coyZB}N*1snQU+WbtN-L-?_ae)Re!uXvuWc-Iiq5LK zGtC-<>_3x~wT5?~UEcr>avZA+vWZit+yG_zdE-X?qtwKOj25CfK1Hx10#b!Z-t$8+ z4NV!QSY-IgQjl=jMNpeI?K!U@WC?5?nho%x7_M^4G$?dehRsLSAM6?=@ry4Je zU#WU7pB^0wBW{&P40Ol^98j3Uv3A7%sDtcN45{UG2+57+M^o{wqOzcz{&@6#uXBqBFA ze#9saFWkT+N~4Gy&*()u50gO{Tz<5mr6h3>7`huU%g1#aUt%aA6bZ*rlmfbi%Iv;R(c7I-1hJ+dcQ zPyU6@>-DOtD+DP%>*(IZl8vt0NE!^WoH;_*ljyR;pjvp4IdXRSRUi+N339#DAY`Y; z8~6w|_8w|rUf@w83{f-aJ<5|h&~N|`*qoBIeuBKV+)*tU0DvReTu%JdVMrGC{D-KC zvjJ}0yZjSZ1;Ih_-v`!&~g~OHGFoP&$nL(pI051FmiAhZ~26U#cEns{M(M&Fv8VG=oGDrkB zoj6oNIcilWz6T(MZ2T^b`}y*NE7xufBm*S+=3{yqb%t08)ynGeF91pp2*$R;_(g@& z3Qg013RL0@uvyN@Jwq%gG&qAO2KX1-^gq)^JsbLmj*U})`j@*?${pgxmRdJf4iDCK z0f8_cma^p|&A*&a%A?+Q>Gq&FbV1Uf*b)yrH1Mgyvt(kcEQdN&t*wYQqu--7>j>_T zT9We_#UmIP+iu~|f($y$Rm=dZpvrBCYatPCBC1$XisXkyEQ=prrm{ap7zf`*b|MKH z2Q0>#&L|~`T*T}f<_dJ6(||P6&>={j=VQjKHAi`&35D!I%5?{QBZ7C1-IAqCx&2bX zh!%L!hN8!**k^1MGlZ9K{i$|yV{yreVnslrrcZRVTkwgHzDG^HkTXjV4Qoyib9@xM z$SagRlFB!<8uve_>_j&?m6kl}rBa@FE%7?o7PW&VLl%Z}fZ$=!kE}oj6k0Xa+A>v9LfUh3nVB+DN?NBlxV>ElX z7QK8KO)P~KgnovX7#$_R$U9QnZy54-ZN_Ktmn->< z(opgGs07yIl0bRp0?QRs@WT&RxJY9PkdlQWjLnR6tewi%MiYRZo~x#g6j4z0Z~wv` zWNjTPU2ZHCdgGZqT1{?W#C*7N=`+jeE*kjFfMXl3=?8G4CGAVDrwm*Vv9OD@kR&k` z5(Wax1x0rBP^KCI&Q-J}bU-V!+QznmI3#Hr2`a9PhgyJ>({e)!{wljMnQ@Uyh-aL} z*YA`^BPC?HD2n*b`zL3MWF--<3;84a7Mb)6wa}z1ULEBfl;VXV&ywDs7T8cYL8j2o>OeEr#Cs(=y@whps937avrCKGuRhfGmBOzSy`E>!c#{ep%@(F8K~q z{`)IPYSq)Ref##=Zji|GOGdX#QNIY?3g-}}C(9V$C}<=5q321$>Pn&#iWAjP81;mc z@OTchE(XT;6KM{2}#NkzKS!V8%+BuiXlPJNPLh=NvKBC9ad81Ft0d zSkunwG+J6XQgONjTe1SW@c1}=P-F0o^9Pa5F{4b03E&2S0XoJEOp+ItVa)IO#f|=W zhQ%)mNygG=EGaICkdr;k)0XH~Qhz2|Z( za+&n1fCXZYAHM*dj*W>WW83Zqv#Sv0S#3a^_h%bItAfj=D_X5B|Djw9?ycDtc+UiZ zMB!n%#0xVECz7IIGID$roktTabDi0irA3<);G=}kdrKX+D-FRR0xJoREbm~7HUf=E zLP42l?ezSJLv@qaCA=#1i}U`UbsH;t+1oYkP-*Gy2J15GjLy7lYI&=3l69qz2iN;* z;Lsx`r#pFGsXXn*4c{I!ue_Q3#`1XTht5qMPA?c>)Xm$_Ywi7)#mTnD#aos)zB~0) z!kaU@27}sh_SH=XZbJl6q69msEc_Pre(zv2u9Mi2sL1;q91$t;Ke{tM4vq_|wg9B| zP!Uq?;|KZKXEyxtxr-d<$c(^9K8xEq{(V%4S}H;Nl80ht6r&CgZdEgsbWlDTl44ea zQ{pwM6+an^8DmFT4~!v_(RKR3L;MNUG9baSGz}?hQ@eI;Gv^5T+8|o9AkRwA0d9>% zXzlhCc$Y%j3Mh4|{BaIHc=ANoWrI~!oP&L__u}?(Jvf3pJVv(+L`Ik@C*T6aqkTgr z)I;x8FrA3|3m;k&8mM$Z5|f8=@oOjTfqo&Dk+XY2I;?6!r6s8Q8D_$c)MV; zrq~DZAxG@559&Xai;IG+B!mifz1a$=g&%L+ycxkC39<&6xV?YhzC^~aMAF%mG=`P< zh<=40HLB5eCN-p5wJ3(`eDcY1o>LGF%c=f^-<`}Za2c@6xVCCvp4x?ZeoF|aUC3bQ zkN9Z+jmtAI;0a_bk7t){v9FnN8yh`hKRw^)&?(Zf9KV@65ErOGrP-jN4j~h`+>#HQ zU+KvFVgSUC<`SAMh;jTxWF1WzyQ|g*peqr+fO2yTkzuhPdk{6(;MM2VQCFYXCt#{$ zOU#@}CH(;0>9MMKWQvI+mI&L{ob#~`-n8k08ggj_#>31L$%TcPvvO#36?D*5xTBHR z22E&0GW1-Tv1XPK&6tijcMC*YgH=mU#kw8T+sq-YI78_d7UOoXq|T_2x25jwws<&& zGwinNaW}bAk}fuZe{t#jzrVxQk^sT*b&BKLOjVIr7&IgmHmRZNNfk_3+&~H-?g(gNOgu zkIvZ_Xf{p*<`eZs%6*$_Q~ud%QxgL~$tX-;ZNZ3EYz;<*Jh^wKJN&)cEKueP2qg>E zXgq30?t0^8ccyxSV<;a8Q7<~D9?63*ip}p{<<%5y*MkjlWAX&73)up4d4pAYDeg%9 zs>q?=nxV-U$%3rKZyATemyTU#KrOMlN!PV}9*mW#Fs2~ra+Er#^!3$%BVfw#4U5Jc7C5PZ zhQ{lRLGzv*^Yb)d0iER$>4XYE>6kdzSqsvDBp6-~fUhqAS2s9Ub{m4Z4H$cXIj$rt z(D_7_37Z5ZF&v>>%#-L#(aToP>(z( z9N=`h;3)7k$Wm350@hg%stw7>7z%2FzJh`PawQF!g*qysxy1w8?&Zho$$_Nh*9V+P zIg*L@5{FmQ;U99tX*Pp+KhRxYkZj8CA#_Mc`zgx`GxqPd^IVhwm zK5L>zZy;r|LylGU5dqDVPRk1O8d*S4vI!`x7M1mcV?!rL-BlO*5Gx_k&hGs8HA{SR z>Bs<}cny9*!bjAzf-TT20Impj9`W0+7Y9M@+}gvGXSCPCT_o?sWf5C%-VxH*SK!l% z`ti+yoz;H}2@_9EEc+n&<&as9g-DnK&+r-w{S{UR$YcxPRb&Zlm0yTDet7r5ke>EV*AH2tK=*#~eLX$&UXAIf}DDPqMSDd9pXfXC#X>_T`J8V~Y7 zjhjQNEsRW7hos>`D`e&<=9c|LZX@|f7jRzTqJ!}i1jWGVIR&c%*>9*qIb!KK_~BPHZR;@}JgC+prOMQO8WbBqkKo*b)wg&)$V&LScspMsZBvp6}VOX8~Jky+p zBld3so)j*)f)7anpyA30+SDhRiVd}Z(YlQr_lFv*;Jq@jk_0jyh(N*nXd_37y=2-= zDMbR93;9H!B}EfV=yts|t{BjwQMjiNA}f7ZRa(4y{3~-D$H#y55&9g?ih7!!@Z+pL@crW^)WkYcOf7aTgqpJ z#`AIxjuJhHn#;*IXmb~YPNgdwN}xeK7=^?IU_afG=+I7UzS7Uvhik$h?c8EMKmxH} ze%pFEvpwjayq-9+s+qW;I7xC>INkJ=8jA7DtYz79X}Wp9wf^G zWHefwv&bAL1N3J}>nDVQB5VNP=dsD{@EMYG0QBxk{=66kpX^LXW&sb)5ybHK#t;%s zA?rPn7)ry*>;#Qkl&23!;Ub!vX|22<86L`oQOA5VbKvx^PxqIKvM(Cs5bC|NAMkrxO-LFSqAb#itNXU$|KNy@De@o%_8 z$mY|4sAF9%OG;lROhhpt;m$U7Q*#k(Mkvvq#M%@MI2@fvmu>Nzc?W`qWs*uSzf>TA zKq0CcFxLasMsih$^2#QE4;=qhpp$vtf$a&uD9J)=~z4!n8pV!mtcGJV*_xlc?&;IPa z_F8M>&CS+}mcowyZ+2})YkpW~Wz*0Aw8C6m?GBZ2ehy2VD*O3%)Wy2kmXuJx{?DBk z*dPA<;A_MN|*zy7^z=NvlC&+~sX$Cdt1>w*U^ zXjAr21HVR&oj+ReSiQgg()j=7FZCaXmdD)`6WBK{JZ)UT@HHL|hIiRVPp#jlx;!js zD0oRB#LlRxAQpxBX2)>`4#c9<2qH^&8M;E0l5-nP&wQ7muvBERMjJ6kq#MuXw*asG!bSO5yk;U!y?~GM5k%8EF%baC3dpjY+BGl6me{bvM zou*yot&}~)_uDOOZN(%COWq=i2+7;pm%Vn0wE(x;JObpir6?c={&;!Giw?cnCMg+9*M|DH%HJm5kgDXA5MD=UU4`>w1~STAW!$P`rLk{Z-GDLDuoQC+WN{#^dj#e>M$GQEzeZk@xdPKaI80$4o zOL0ZlCDHFyw?iezq-IXFb~;vb8wEkW+EXdry}ElTI}VAMnd}aEY@YI&AA8xOE?2uZ zvcf}IXg>rB9<3Vw(}2^fRR&LgMc3~oj+D49 zjYDFL!rm|o2WN&<~kbJ&(nuO?&bERAk1Uvf2h*l^HcWlyE&HOiWX zj;MY9n^;+^{QSa&V|2f3*SKcBFe~Y!!(zcEgL03>|u^M(D+cBIZ6A2Ki*dr z4a%zMz8TWq*N#89_ra2fpL;IOyqR`{=1N%}aezjCMg+>u9pilfs$qh~K(XCFRDRb9 zEHaEX&igr$fIiWcT>g$Fy{6(6%Jh27qVEU~18X+?Q1;3?s7ve$w5KT6m$*t9bh|m6 z_TKsNhu<%YO4V1in0UrjRU+oP^w~-%cTxfv6Uy^{ERonisxr9JT3=&+P*%8MaHsrb z{Z+G^+%aoShk+9XNn+@D!Q!sJK1oXQ8{hq^0#=HQ=em(~cl%9RA9%GL%Q8z{Ryj(9 zUd0#wn@mJ$^)7h|Bccq!Rx0FRPaQ4l**VGDrn%lBRCe#I3CU4ITb39*AY%^?&1N{r~Wjwg!VK8efmm z&>hn=&qVE2edv%OoDK)}X?$W}D^0WrE?eNOZim~o_|evJMbSWyQBAdndyJ78;*Ty` zgANqwQx^aV0m^Y>4)3}#xQHYO3)kSEo-aEdQ*+p#nsk5a%8}Ev?dNnG_&chN>M*a& zsH=;WV?PcWY_fpP#;tW>csk7k4GUU?95L{B5L|txyQVW{$js5|_<@@k;7nI?4nK6D zUv&poJQb^Jj75f4edKMWZ)(hXvR#3;s!9N3wK4ex@Ecp_FCP+>Q9+!0H>%P-my09=7!ES2>3=U zz>XAx#}~;e=Kb*PYDFH&bP#)ySh7t2xd=w49kc0CJeK8i@0#wrdq35E&bx+FSkGfz z7#8osIPN#`m3M zhi`fm{6f`NvB;_EXxU_B)EH;xmPZw-Y(ckBV2+kcYu^<_fL6+>#)`Wjhx5N0DEp^edam=*1 z_J$i~it#O)R=XS2TBQh-FT>yXsL6duSDPPIY!TaR;%a{tZ>>Q883VsXn>Ipd*|ib^j|7zVsI*$CRGMM=coe zf1DKmf4Fo1|GK7YzrTO}{^KrWtt9i~%(dE5J7AR2I!1^nM{|d5C>!@SoZil~Tct`IzX{jR?9c)ysgI&`DmweId!Tt7_MMYkjnXjib zVJu}dachjG`Cb3<<3E@u#f(3vK^YfCoB;{6IrewXBzs_Y_-8XRw;e(6L;@H2&cQ16 z4jmUcgT%^V-5WHOSwHT(R5E!Li9-}vmv2GS-Re|)WJWyn;+#`pbLRFJ4CM{pS-T!N zq5S+OY#p`UH)X`l5C7egZ~yflF3&g$-<|h6%-Q9LdUrL;$Q7l5 z%i7s?G5yPJVWz{Ui0Iu+J z2xG~AYNcFq?|~-}7@N^A-ZrXV(@EL3#IEHwaW2s3m>unNT5mIz%ccKN@&`LJ$@xPd zLCz%{hEQ*Ithy>q*GDb01~WR73hv|#zcQT>1a^AnDi z^#%{_$qGK>NI>i_X{M|O@(-atIS`f|smC7j1sTYB+)cq8di}|v{;4>txm23-s2OZX zxF~+n!Hw4rzd6nW20$2v9 zV9cTn)P@#7ekzan_{|Mj4`fSmK~_V=A1{+TM7;cg3x;3Lfhsbg8uUoQxDN`*3CDzN z_tLG1)$tOQZdHh-YOhBbFR=L!*59_GPaVi>a#OwvR&;ERX54q#!tFr2D}rPhER+6S zhw&$>!0@qZF> zCu7JeGA(tpbUbxwIs{=;;EZctj8X1nvKLC1{_F84oUnv$IoOL(q02s=$K{GXQNuMP zm$^WjhC$_maau(Ht4u-&D^*W^CuKu;9$8OGq z7<_2&_FDOnu@A|`aUWX;ya;@o*c;S9qfA--?xcQGdcq{mA8&cYnLZu|PT#e^zW%Dr z-Ufg?(fz45AdiLUEefjkHu~teHbAu^3#{yXpE083 zkd|4Grjr=G_J$qmW0@AS3>q=ipze!&Ot~c*1??E8vTfQ5Z7z%q?`qPcn>*x7*}#>ARn*ay!q<3drSR#PcOwc#E0ioPJI83;Ovoj0U2+2en_c+m?T?4SPeS#!)1-x^Zyvr= z;T!vJinUqw>YW7a@KYsh;f^5@umg&iCc_Ubv^X4^o4w_SLSJllM9TBW7h;4>B-p|H zd+R0rr|fNFY@=+xxP<>-W(~mo=Sjj&4(HxN1 z=Gfab+_m|*>_c5mzSSK`_x4e91Ry@J`Oed1bdSiPM4H=tBQ*5oT6_OPDNG`l*rtK? zKvB)1w~a#Nxd?uT=@dS{+E^=K%dus+6NG}GuhpLAb%QOzosK^G=rW%3#yzO4jO)T)<<5weUZW3M7x*Q z9Xp!>#t$$a9+Gs*q}TM{I%~uyU-vIddd-PeBc~{am8u}N8xn=^OA*~(epS~=6ob|9 zcnXl{$Xx~sLsg!JL1}>=y(E4l4<7pS$zfC0u@9k8O^5BfIsMVF zKBL}Gnm|k&6K#3#yxaa4-?MRfkH#4p4-#AV%%HlOf3bdzww00Gzq|Do>rFQksWV#% zq#HRE`9}`fH+&9OQZ}!RB=#(GADGuKtg&*i1?$nrI{J{7(uoE}B`mJHvsCf*cMIW$ zyaU6W?yPc39V55BtN;{!E(yZd@bJSqZ~%<>B^6|{urPOnv%!WoIZ4t^10mBBtc;e| zMu}E;#DSHUH@^QRIY5;D9$cjLR%KeX4kf_b00fJ~z`2bgI&QQw#uDMs`;f~1S=D(mC?_YWOpmKhsmsCj#NWE4W_PiR$Q<-gz0 z`wo$sRyOGb^b`Yj(K{f&m*P;-m{L*eDc*KS4BlDts%GcUy9cubB$)LE$7m{jMlu?D zBH8K5==Jh!xm4D90-)4#(IvD7cp8zMqwD1*I!{am>4#!qIckIk6V|94c)Q|X0G1X^ zRqHCsn>p0F{-Rr^lRnWE%C9dAxInTwP~WLXOlk<`EethLMUssnD~QHwtHJNTHA$AX z@q-UmJ8ox(4~L^X{D zOszmR@FsL-fWUQUeritvhAr-G7zpg44(Lc3fftp)h=a|@YT?@n`#B=@L&443OSZ23 zstqdB(J*W~H1a^bB6P^=_^p1x@)%OWJMWv$1h=wmT%(n8*{Qqs?bD*T^EZc8?mb?4 zs5M|?H`-8y5?Kz7UuZ5gnPNkO^*RDvX3G%C(8_Gkzdr^sJ~E{D-g*!Z7es_*yM^CybCS zW6vGaXl1M2i;s6VyZqa<2stovDcbJU>B)NL2S4=vXWzXj*62%MViC>Y77LZ%!p3l} zUlh<=4?=dhgE=d>y&g>*Xsq_irVyuw@=yoz!XAxdP2+f2#Id^wHkLV0o}=!^^eE&v zA!)LyJ7t@}tziHmxT|B}P1l|ovQ$)~hzIeRAuV(uM$nZhqFuiG-DS=P#KHRdW$+AY zvS*Pvzx=}uzl~;tye7-vxz62Tf$U+>!>`9PJ%hvw3eMAUalj<8PZ)?Dky1d-8G$G^ zRe9_rdF5Ld%09u5OAUZ`t6^Mt0H(thhR|J#Wsf*C)cJJSt?1)7BoG-g{;D>CP$Hj; zbPbp=FhokE$Az$cUf#v3-B){Fo*>?>`-u8E$n4%9}+At(tDK_R-beV8K zMAwjmhdW-{&NtypviP1jq+ER1%U`E@pWSbDP3DU$qbTGylH-O$N4^3&@<8iHMkWj# zT3vGB+;y5i@pG464!vk{%j@glLyZI~dJ_5dxOJF7vsQ*W{0Uc(iGdE%=A{sHCU743 zuG+WF#K8)kE_gKIja`oH{!&8Ha z{0XN-vD+nPC{C~Oj%>2A%(#2}_r1)MuL|PFYg`AN1IDlR7H!9O?W{x~Vesk<3Gsgi zZ~o0$m|41VETMbMvbJ=<#qe84jVf1x@k~KTzu`}$43(oeFq&ft1$9Hd(QoJ_#R~o9 z*$1i6(23@J(O{+sb+n-8e3`Vn(MpVzcz^goibc+X?J`B^H@`VM?>DnK!Ws(qx{Ejx z5W4hT`*+yClQd(Xo=d+anNWLri{S@b{LB5d z{ksP65l4jC@}c@;71mG&kzA(XAqS~2x{S3gk9pxTGFz$NMoq8`-@0nWJcP6p#xN>* zc~P9siAQF!k58h4hc(4J*>hFZyW4}+G(MM1dE@G(dXyth&`co-Qv7(#b2aO{f6@eW zvYP!AQBo-N;GO3@`Nmy>=RQYM{#$Y-_B={@y$-bL zqxl&VY@b;jq}TmLjg4UvjD|dE#7GpQF7kZLOVC#)jQZNrtuQk2l5{*~OW`SsE#AzrU0`)HTeS!~Iq z8=WLfJl1+T<71&zR^xhYUPaBwFK^IIdRC%zw0n5o^_44x=9$-- zt#arD4+r$ea3|tTD@_wG<7P2G|MjBV{q04)wGuwrMGqxWAq(U0$qD`L88B5cDg-2fxl}UZ=T@!d#x0F-FNm;4AtBFSC`k zoT4_@r`-L)BmXKpx$ZP0Z`xgPMX74H3mEahcd_voUFMpPCU2>1FcUf>&cH%(CF_O* zfo%oIl!G5LMhQN!IjX)}86yFh!_>=K^v>0~>q7SE`uL!&=8f0u!0e*;EH?FqSZ{9~ zA43}t&#PgX<3MtIG|oK_`K$0RER@nPmxn$46n#wfsH(mN7yPX~|2zFit74W`QYfAL zt!8&@;@1-TGpu5I*T+-o)UA7DkrsZ#GF^|})|F?B&a|Na+&OwWjIq~K-3Q!(>rnG| z&|{3*T25ij!cvKh$-+@49KPLWA7thEC*p{Q1jCI#%nDOHV)I3Drhd%WI)Tk8_^=M9 z7Mb_e-Db*$+?Ramq<_4%%a@Rg*z0&z&)j&RseEJA{b!C9uK(!@H`7AeUtQQdf0%!k z>o+5iJ_6~=2wR#algGAUzBo>bw+?=wWH%EH7*ANPoU zq$;iZw9ll4tb4Ni6D>MI0KKBc4WxwNc&L{S?V_buKDFm6l%ZRdZ5q?BFpYSsyR_cj zW{-|Ivs5u+R{4p;oE@cK(NTezdfO%|`(2tB@U}={%^v*v_o46}@6}MVn1f*aXU0-< zhezy7F1a_SVK!+3jbiGJzfo2ok2F<_+KcoS*r}&3eFrZS(pqi|WtXfCF57cf_%PVt zGc4l_F2`O3BwFehp=3(ppZPL8`fXwUU)3aM5HKKAAY#R*u9P`rwY4FjnBC9P`D*E% z{&(7#)*Wk5Uui|92Nn>6UY8=Fir?N&rSABtU9Nbn%cT1X2ftK#)=kAFXt5xgR@=Y6;e0bLUX7BFW^WC+tt$+KSclUO&BW&4;lP2LC zez!1M$uEC7x~LUU@o4#f@Pi*rbdD8zjj1^`wk$;v!$LD&!g0h1`wnj)rs>SVXJOZz z{CkoHBT3wa-5Xs5!% zQQ`uZvhG*EYCe4brgEKP5&+T5*694=!i7haD_1VPk73a(cLAvtS(!xH;$zuGHfz?* zo_=wQ_IImadeq6YJ2{5;;}$VDNmLc}xk6^PuLemh8wiyILC(Pgz-v9}Zk4DY7kV;D8yymDG_{m4tV_)l& z_0&@-X7y39O%b>Dy&*qA77m$Qm6dTnc^+!n!Gpn% zqDG>GhQ@E!ub)|-3X@P*VFMX4$YxqH7|PM_Sm*FRy)1NUYtkMSa87UDe9yek^UpVh zUdJs48wweMuFr8o>=Z?=9-V|Ly&Bo7va{Qs9>~Ua(4K7LZ6|H{h z{+>kL`|Y8RuCkmp^5VqXqGij?W=IqfgBKGQ_@u%0${%3^mG+Ik{cU!MtAGcYTw%R? z_VT9rOXK+8zkgbhmp(USoQn{&u)RW2$wb|01ZAq$Y4Rlvz9A>-d0EMd_3&=(CO_mG zyg<*mcH7%ke=o{B1h43}z<&N_0FyyG5z&!B?t$D!>IGRyKQ*=f={zlTTD$%B#v7OKZCy1n?xi{GB$=e)QGiKDs?A;C<3kj3FL8tv0 zAt5pwVU;s#X!wrbT)q2W_vV{>8-Duw*s;ShjGa+bESSs@pHWfRQh7z_O*oJsG*2e& zPgT508G2y5u8LM5hU*y%woSJ%GcsclP*hc;5Wg{;Jov%ItUu_dQ1fkk4+V zF-F$Ph_GAJh6LZkKxs2$>!3YT=MS&XI>~G_Xgts96|uRuol+JthSLoAQWsI4^=r`4 zgg-IG3(hpZE|-n?d_{e!KrRVzQEedF0yYu9Pa z))xT38yonWxuQOtTi5w zJzSw$GOjpDg66OhJL=h0;2rtia{ewF?(4t8WJPa17N%I~kcqRfFGvzUo7#<+yk3F`Y-`emqmxLT&hfVN9KmU1>T2H~?j~u!{&U+?L4oN{I z=TjB|iyb$O_@Mx3o5^n%Ki0>)4<*IsoYFv9=nJV2Q1CZz-C78Vu##y_YZ>GhRu5x4 z$tp-6QZNd%sd>Ek*2AK>Ol*Rp@{D1UR|(QJAv&)oo_NCJ4dc!%_Ovi%x;c@@!74>l z+weFTi*WT`e;iI5Z8yG2BvA4YspVEN)Wyuz^BI1em}zfjh z00?2^NIfMjzvgBtj~0^QQc!%4x?GS>Gy6G8!nY!mJv!czuz2hMx#wR^ehG-17x zoFn~HJsgQ2lf-C1O&s#7@#A>Wj6o9g(Ty``5CZ-#&2da#(alHU2gG;AxSMsedm>L& z)JieqXKcqA7pHfwpBS)G;maXvk6p4C|HM=8P{yZqHx*Sewt_Y^@eW&;7Z!!hqp>@; z$ATlYlw|ci^q^VF6~&m)ST2{D`rTk<=b;9}k#daBe1Zqg2=FbB0WM1dc)z}+Ra?Y4 z4Ys$rHJgnz{zO@{`IEv}M7s$yqvOB4Ed20j2Cul{idM^E(HXmj8v{W9;&sW7~ z(Q&JYEA&4OY^np7wFzn&0a#`-%$r!Xq+F#tZWHeSTWM@oT5*~KFnGSNsW;+Se^a>^ zhQgumS3UL%erpaRa5l7aL7`#kd@w+Zf&DVcaI>x?^p$~s`eJ?9U{Br*{AFue8ktP<|qDO{LBk(FZ~A>^Vs;>fBn^;|8IWv z;8&{Q3+dvN6w;Le4Rfm{XLuSamiuP5WB<9PKaIuKp8jAo1*>v+ji#)=NUIk^^hPKu zc`PVe*T=UF+O~BoCf>4=6XNZFE7R(icrH+=dk+4#>{r_T#0*dwV#yfiwi?b^ekxt=PjLYXkx=~-KMYCEKmP^ z>=jyx!vC&$EUUx&W9l=OH^6AmbNDq-q&kYf5wA%S0rhRtMa{U}^AGL!Jz7r(D;i^Y zhep@%3aC!$aTIOaxbZw<6zO@ZUpf#S2@B^RdGm<2%DIE%m_O`&a8;@Qb`3sOdr#*( zVm$khDTTzXB}b!vv^viJJ9x5Mf@L1R!TC{)9y;DK6{*CrwtM~?-lC*lA7n7- zxlK8ZhK)EO$Iph5FMQxT9{T;2E9e)U1PpXEX3_(1lD<(K$*gb?b|yqXi5kR$!~BX` zfSsvrM_ntM7R{28WUK?sQtFc|YL*4Y}RHlgaJpXp<+%$Kb`3Ma4d+ z?r1==8935kJ8lajKUBq7z+uCv+i*CS&NPRlZkE_( z+yQz*n+6kV{~C@a8!%4i2vb-+89z6dL?Kv2p=+Zk^%ybGs%|G#5P+H(-x#*lFf6p> zG|sg;Un5FlXQDwK?MKXcn>Ab1M~=!OAj5T6`1;HmfX-&3Mwn-E5$VkW$CR*?ll zU_k$@+a24_0Wb~MJPmtIw^$uHCP<@GPti*%EpdR-#%y)hf*xEY##5XI#U3*z9n_GG zR5(?j)5WpyMr2hc&X}GO;rQdDCqs0v%X!}EwEi~?ZGCbKj_p(Z>xDSoLEbA|XKsv) z6~y(z`t?7H=u{jCNq+}&<`o)RDLV)a5vq(l9JOyfP^3!on!TgNQ6p3c-5^+9)dGG)@ATybJZM#ib{R()|v z_HszruJg^t^1k31Mc@SUj8kaVlP|t(*v>O>LT@t>_0M{!aU%!jILT6fN;@;Jd{O#u zl9;IbwC(cz9%wNRoK%xQW|XYQAKbk|LanKjW{eCh>A#dLW&zb(4E&EI=~nml&LciL zzJY@rVnOYF_oF&3B${!!f(;Dhw~kHoBN%B6&s!>a;4#tbV}`*-W!y-qc) zSc%0(-+v=l0hk=Z35>y=5bNc~Dq3SsE1~3zKCtrE(wWWeYW>byLbPd#&LYZv@LE4X@ ziYUs7jAH?e=cWUDpC9-%y*1BI;To@B`l}rK5?|s}qk~PWoC4q2V+MNd(PPFu!pj+$ z7IT$oqG2>|82CYUYE$a;b|`a>--zrQ=n(iV^BMZHqlWj(R%ki6ICMcw&-AloFMKKE z>v6D}k|Se~bRV^<76JFp@6_pGxB!i#QL1)@((hXGvY5_^a!CbZ;((SHPyWpE5zp0z zomo(ew-fKbKLczWYr$na`)=R+UNYKDk;n{}Ol@8^b|wxGY_?`!t2d#OJw_#6vrGq6 zJceC_--r+O6SiLf+zbM+-VU+=+5&9)gdQP;}Whtdo$ zFD>O(M%HXU>-FFuVw3c$9Ivo`h`xZM-Q*M*=M<*`HKy-PkhPE&8VQ9bHda43)ZLt9 z_$Bj~CJAc)5h>}LBCC+%q9$PpMLC;HC8u|g2mMKo>&0K3JYsD|#a#KT5 z10EAroRIla*q#_OF_U=q*-0Lt;w_Z`*F9-Zi20eOe(SAAR)}>mSnI8`jOgA{{Pe)X?ws=^-G z$zE3Ragx|A%i&nk0oDUz*8He6&V;Rg{hFc6#{Wodqz>}cr$kTc&uHAk(O~&<-uJ%u z6%<-5<}bhrayB}xfDHaN4(-dg`rjw5KyZK5#b_Ch4G{-S)Sjqji9qm8Nv@t*+`#1H z)0K`oX~>uS_K!<~LpzgQWl|N)1az4>E9y}tXz)XcW!#Ct5*s;`Vu8hw2ie)me`QLo z^2NDCUqFlNH3nAMx9DM}{5VYsan->94zyo-9p<-Aq&=gHK zIzttCo}pMW|IlA%6+2N!U3zMKZldM(E(MKe?N7ADVlMhV)LG5id29-sKPKHVpHmRT zfis_GyFPJYWR4(J$$Z8mX-s|N(Ei?sS#&jOU^ry>18W_Gj}k> zTE#cTLHYUlixD*AY6q*(ozM=+oCc>zysL%qPWLyz+pf^dv}c?)xBR#FuVOl^2R2j; z$FGGUe!2l6kRqXkKZD;IKP9RArqlIT{aXZuC7*mfLY`hJ5hS=89UAe(e+fzhan+L{?xeAva= zA3*bBQXy~l6{D8F^;UK97bh&#Dl;*tw;NNqDN;nb%vFd0M|gE04*5wY5K^9o^C<=A zKINRf-5NI$G?uw;bE4ol7kS(vNVCbNy*!jE^4T2a0m!Qes!R(;zkV={wJ zGO1-0O;HAEn!*NA-31gOq#HGAR5@Ju*x`UA)2XW20FRF+3Bk~<3OzM0=I9_&jNvO> z<$mzpL}->yOW-ELs2)H3;mZ?7-yM3*Dc%Va$u_pCo?8;|4Yw$&)EtU4jy@2~NFtvVzVkje9ykC}I=d#+2|>M=_{e0AwWFkZG*S#|s5AZ&Rj8iOlg-TBp@ zUSJhZ6ExIntIzqc`c9?FSPafOzg8-F%o4!fdvN`BKOEM1t5&T5$rI&}0a=|r@iVI9 zwKHpNVEQx&c$oje{SCQhq7bhp0sFUQSag@QaPPhMPULO7Sp=6H^j|H?rs?s`VR`{l zp+beW(-qCR=Oh$Hq)A}p;pOg1le8oFL z-P%WR<4dfs4VMeyT^d7KI- zIo$wspUL~QV*m1&zZ56XIqA3|Zc|~Xu6kc96xV#j1Z!BK7mIi_F@?wFDNqU}jY|p} zOb7y!PV)q`&VT&EjhD{=0b52nw1-LN3p2DjB;x$t8Ry6d1^=;mv)TrWol`Qu9$wb7 zED9_1maWT+kvhC?|5EXdH{Yy#<$wX3q+7_!Yu>@nUFPUKP+u^~(!KfzKS&*D$&FXr z>~1Ke=EsF@?cY46q1}%fUL=nw)*S$hEm~|)r<%L7@!7}`~V~#ndrQZF)uZJoD)5&4lXMg1|Txj0w>(`IA^ee<kzrRm?= z*e24yR-Js2Y+qf0^arW6V)1V6( zjZ-MyD3=7NPV0gp)yZU}PIFC8qE6bu4xrlcp7oTUc!TFSYbPkD(^Ud|?K-%3wY?X) z3C>Spp2J_?)!4RH%M{+<9S+~_)}DWN?^_2{+Ml;rm_t;lHu!hIyOsdB>C;{2`erI4 z&Xbm(Kn{A#TErZj%zbDGo;1@ml-&4Jcyc0UVXKar8o0=p3pUu)>@)1 ze{D=%14-E6-=UU%kdkJ^QYiH`mIQRHlI%`?YL(l)NKg-pY0^d@Nx+7_wt4n7Wf z4%Y^9MFmiLjmN|53I&d^-o_ogrs?p|SU-zV^vxpA!z$6%XpoG}c8r9>QS|V|k0pzN zJfTe7cKOOOa!|}thMjwG*O89n;$-MUcGs~jCn`y9UlvEF_nb&n%(g@s-$@!0NEW%g zMrGj{>R$)8bigCCYUYJ&Ii#^&3ryyHa@#$rK3KF-o@pZ>V2SKqe28OMZaNFj_jZh<+WHX!!;O=ndVgK^d`c5Exp(jhqcOQoa?Mt*RQ`oAay=vNyR@b z$MA}6*XqQ|G-o^?g~5RheGZNhf-s@$ll}9t9G$`xHmp8Kccnr`auCY`PZjj&N}2Mr z)AXzCmrxIRtg1cYSuB^|b=7fd20Z=%iIh#m_pm6Wt%>A!)40EC`?MvW#K+m{Z^ee8 zqg7(rA7*ELHf89x5x2|PJo?a(4OY+m9QjpM+3GZwsjrxH#>bS;Y&@^v1wJ<2wtIOF zc{GB1EPJ8#QF6_g@p)xH%O3%m4(xmLnm3FQhx0mXO0#qwyiX@p*)3XfL27aI6wBql zRDELy={AT39F%<^JOPixBO5XiWF5pRKG5QhmmMlTv52KUv^xU0#J!IKJp4ehJQ`>) zO1z0YAyI4#Mzwi%1`45&NkpJ6TRKD+$fYO6Q6yL(4%<9LYl#D9>3ho&;YHz?azK|u z<<=zfW(Tr@O5c3CNsPN4_Zf{CF5jR*O|*iOqV03dEf9`)laQCOMbAOI_}_ortqr}B zl8EwwfpjsuFyP!~l_EOOO=&iaO5|N0`9?}Y1_!#dYXwjk|}6gn$P8tgjz&QE7Y z)O074A(%QEss+VpD)IsZdbyYIovs#ORa396*x`}&2KC2)@?iH{YTcvDD18s6jDVmX zGUQ`1c~5~ZcChjk>dwnCszRkb8s$+TnSh?2Bp7n*rsTc=Bu73+R*B@VB7iE~!~5?0 za>*}TRA_K+e+W3%HdXD{z1H|-SfU`(j88}>Rr|@BJvSvQ((Tu%n>+*5JRcK5a1R)F8cwTn~ zfw&o7k8Igh>OtOxCIWV^c=tb(zqWQ!M!l?uR{oe{7AZx9tXI(ic zR4)WMOL4E{DzLWGZL8WEk;+`XmNoa((QGf3>Fpxt|-^rZx8ly|-2`W^A@_Y(a*$gW;&kUZ;EGG-`!N zJz7bvYp~Rb0MreB6jPhfIE|76M0@+S>?rKPUD_6LIq}xcJ+!~>*sn8AL(B0ct>Ne% z`WDU5?N~6qv1rha0_F|-@4sN^Ptu4s`<#593Gx zjgLzNbr}WQEMT-y5`?Jv4dZSuHB^{8EZx-{5R3?00Bw(MA7UzYbNzO za+Q+_wIR$0UkUcbYM}&KuL=?@lOs#O^l8L-cgP>H2<8>g;I2IQ#x+=P>A=oOr4*{e%%k@IubD@m%4b@7(me>f)7M0zbW%HeU8=jSeUrioYc|lCM^ZH?fKrg-Q~9a7ZvDWm)NVL(Hwd^Qyp!Ax(7KIuk;^o-!Q)Hf0xN2+c_Ug?xG;dDCH@S z9A+4;#f*v4vd++pj~H>DR~kF?b1T{2hmIGg_BJF+XkDS=3sOq&rlj4HuKZMzufItmxtqUHzTT_cQP8{Jq0Jue4%< z5}4Ur4V#_VvHvx?u%X2{Uqun@7hG6LP`CrAE_ewQClG;TbV1JV%tdhE=p`jL03=D= z%TsKck|oxOsA>I5XhP!Uux@x@A?jZ0}nC6GB8LIWS@|=FV)wSO5IiMjM3ua zu6nUylUa}(ER`~+(;klwIc&_4DXEzjDnzI-^ov2g~86ew~&8!8o_F zi#!a#sT8o?h*$OwNWjG>OujbqsA{zZigX??mYde zr%q6VI36{h`#J&Tx3yk;>7~Bl(HotSfm@OiAm|!q{j#iilGGwoA-EJzAloi5*cvsk z;Djnw#&g3L*J44IM*pNqyYtQs?G0&V zc*+f20iX}aKZGTefc3Bqi{zAUMWOv8k?ZxtA7+-Ww)E1i zYvAUg6%)^FXK443QdZg-mtzEnA@_VHzim%PMRw*6YYrvrlebLaUvE_6UH?Odo2FX= zDu)s{yY5C9QUNFM=p3aZ$*zL+DbUmXnBM;G&4X$%9CJb8*lTt1Tx%7E*c)$DJ>GO& z)e_ocn1ubN487gSmt&_><^yS%+VfZ%dyQNxu>0Lv!6`DqOn%e9$^if%c^302^fNZn zYfxOK0dk+A5i}9^a!*^tx(@%rZ#kbp{&U51Kl$_V zo@ZYi3XI{NP4yvZ41{rMN>FDvbl6@H3D`u_SK(8C?t6b!h++_ zheCK_F@i zu;Oc9{qe7wPilW-wGYQ!GW^Eob+>dKb#eb{bt_h>eeTRA*H3(=QQhladj3ztC$9gf z@$TKY6aC#aK1-pPKL8{p^Rs-&y_cbP$KU(Si>nQoOuYD#yU> zu93CMV_}#!u)={5b0Q+Cz9OAiI9?l747X=$(-FU%h7AIQxit^Cod*EU;rFERSr04_ zE3j~8u{JP&F8c0wi=^#iVa_&VMzO5^#>aOd4?eV}e>b$sDvm1j*8=7?c3fx;8GvJe z_mgh~+%7ZH%(%)B(=nX@E>l6F5_JY8D=dSvbg9!lDmaQp&K365+fV*o)$At{vI@Xa z6=SHRTFrGCL>?SZ6Qxyz&(W*o&?iYN{U9=uLaQ@17*#*jKgR*3eL=NqFAAImGk`M& zL+M$i>umysLTj%sYLA|9g4_MZ}4wTcI>iB-J+%gk81x6nJUGxpSd!bL{FU>HOuWE9nk6FsVuw8tT#p6$u?%O8P& zxe)*m|3g&ObZit#ao`-g=jr*M+?|;%Kls5*c@8o#(m!+LN8^TRf>Wf21M7&d{Sj4V z8(3%pyZPQ!I3}FNnL|O5kOJ0reIWOWPbpAL!+PqezHY+>v5+iMR7y#=4T{{wgfR>_ ztFH$2Q8^ei&hRu3nz&@8%>FD$r9&Z4A7itTtANzH+ZefK>YD?mJ^akB-KypP99tC> z%k<06FE~oOG(eUVFt));qNWm6#4+5~-WG%>U;xP2M>R+l{LD5|6)He`v$_dJGe4}H zM2*y_){rDQ&0jlm{cmW!lDim)As0ZtPlq~lg`d%t>D*>%v&yJ1oL+RKy5*56=%SDF zX3~;&3T{Kve<(Jgxag!UqTYbjSP=FWfI4&@{GRPLQmYs3vFrt0LK48n$mUuUkg%E0 zBW_?&d9X%Aj>6kngL34=A$;uV2GFlAVocQ!cuT>-h_~(IzYk*I;|`nx^3^PLP;QYa zX%>i>afs=t9nZMrr$2S-m%>+H%3y@C+*+&``Bn^?a!v;j zeB_&xUyO5Y>@)GGq4`qB-n#)^12qPI&cUAJC}Q;_~#T zKV98Oj}Iz_;gOMou4&fmd(Ag!f`(<_+6$i9kas8FkT+N3EQHj#o+!fqn$LLfMd{UQ zl~apT@?ZSe!_y@mc`wids+ho3jH;DZ81~%&pT}3Mcr%@>S~^o7F6C2R@>PwbG8pO( z6E(}|QQ;JlbXQT*Gb-(Q)m3*gX_22yf8vR|6*(vmi^y&U4ICKZZ5QJSy;zwmgPfa) z6k-mP2`UC*)o*F>A^pMW1O-AX6ZD>@IwVo=&bRbu3fpXoX8e6Yz7gKmM^pJ+DzRz z;G)OAUH%sTgwUZ?`JO$^JhY?y7II>-HAPLV`HdTwqih@)mdVI^rh<7UVrvW`#>VFA z>DhDVPSYMm8a>MH>65@WA6)0Rd(7NSj`H_1m((JaT)OPUQ&;ff``nphbpH10AAX)I<5=x%S-@zJ zu;(7q-9eyx+?r3Wz3bTP1wmW!I?WJCK*1;5P8(6XapM9fwkJFm!I>6!-n*FVQjs!^ zSs`!NdFIrr8s6>V#8wAy6e;N*dPo}5dJY>(gzBbqr|#Uzc}D1b?-#mSTS&1lJyptw zCH6G#)_Da-*?18^XcVFP9q)UGcMvoTWjLmahGQ3N;+9$$b?v&;6v57A6d3IT`S~d8 z8P%CGC3(4tX1$g6E-`-b{*kHT?<)5v-(} zay=D%p@8EL8(H$|@O}PA(phZd%1?+*PB;d^H2McLleWs0QU#MB9QNMJ#J=<@x12Wr z;CKzy9;a8E6LU0mem784@1EkH)@NB46eTY`fC1NF%@zOhvgb#OTGRA#dS7$R>gf(F zhz_5-IC&=S>j8nAMkL^uzM7B=p8fP+T0I`KL+KH90`c@3HCj8}=@F};?-CisSnq5T zk97V|6>o(0*&}s+&ie+oH6~+EX_3AEW9W-x;j5egmA5@zI7}NhC@eTSWRpSpWot?d zJElzYr5tD@xc!xhC0kPR_Q>fp9cNm5UWagDxJZ)5S|8~Ec=O5s!Z}0WJd7U|YR+c` zm$J0t&6&}{K?+bQSPC&Bdu57Az#7e6bj?wB*zc~H;y6|?77mub3fE4~ZqYaI^XB4A zhm>>-e8Qqk?CjiTW7T2mxzyz{LS1PPcjgM#0UD>!1miWb!KQ(*9K!`#m@Thj6dr#t zWl@epZDVP6Z3{HSq0nDiHogC)!S|Y$io2e5Grt{=z;*Omk?$J42AkTvbLWLBC&8fA z7-Ev_;WYhUy27vT3`eZ#iN{)ex*MK`lWy*SwGA|^;hME|S2B_Gz!|!vs2S5ufLXF7 z(p@AX6z-m;4pls7$gclzwl?&;f>NdkhORlbXwss}{;~yS2J; ze}Rd6uB5{gmp%V8k}`g%3jj&QZKn3n#Bv3%R{fU??1q>&Wd=Y~nw$14krOw)Sc*V{ z)9nqfYH%Odb4K&#+N(pOatkYs z$m|shmcjZbpMJW?ke%7FOBm$2LmCyl0?8Y|9PJv^{?wYMf#dSE@1fI}{&ojfSZ@cH zY!mH1CcRpu)z{NTfiwjimXFG5t-vtys>&a<)z*w-S@pC`X2vh7JE~zDUpwL54}a7pi?bijiv*qkul8thhSl!@m;%HB%)X}V;$cG-uhar zxqWU>{22W3x4-t@@~fNY8*(GBFxhYaJ4`t)wfKsDGyVgXNhqsRE|@Xx94i*Fy+%G~ z-MZxy3Wh9YVVN-mnXI~L(WqjzVu9{WpD|(|O(mq%0A<$jq`Yt|FPn<3`dH7n8LY9L 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