diff --git a/.github/workflows/shared-component-storybook-publish.yaml b/.github/workflows/shared-component-storybook-publish.yaml
new file mode 100644
index 0000000000..620f7a48e8
--- /dev/null
+++ b/.github/workflows/shared-component-storybook-publish.yaml
@@ -0,0 +1,41 @@
+name: Publish shared component storybook
+on:
+ workflow_dispatch: {}
+ push:
+ branches:
+ - "develop"
+ paths:
+ - "packages/shared-components/**/*"
+
+permissions: {}
+
+jobs:
+ doc:
+ name: Publish storybook
+ runs-on: ubuntu-latest
+ environment: SharedComponents
+ steps:
+ - name: 🧮 Checkout code
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
+
+ - name: 🔧 Yarn cache
+ uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6
+ with:
+ cache: "yarn"
+ node-version-file: package.json
+
+ - name: 🔨 Install dependencies
+ working-directory: packages/shared-components
+ run: "yarn install --pure-lockfile"
+
+ - name: 📖 Build Storybook
+ working-directory: packages/shared-components
+ run: yarn build:storybook
+
+ - name: 🚀 Deploy to Cloudflare Pages
+ uses: cloudflare/wrangler-action@9681c2997648301493e78cacbfb790a9f19c833f # v3
+ with:
+ apiToken: ${{ secrets.CF_PAGES_TOKEN }}
+ accountId: ${{ secrets.CF_PAGES_ACCOUNT_ID }}
+ workingDirectory: "packages/shared-components"
+ command: pages deploy storybook-static --project-name=shared-components-storybook
diff --git a/packages/shared-components/.gitignore b/packages/shared-components/.gitignore
index b1f29b1f0f..1ec1623885 100644
--- a/packages/shared-components/.gitignore
+++ b/packages/shared-components/.gitignore
@@ -8,3 +8,5 @@
# Ignore coverage report
/coverage/
+# Ignore generated docs
+typedoc
diff --git a/packages/shared-components/README.md b/packages/shared-components/README.md
index d41eb0ec3a..0c3afa99d8 100644
--- a/packages/shared-components/README.md
+++ b/packages/shared-components/README.md
@@ -255,6 +255,53 @@ export default {
The Figma design will appear in the "Design" tab in Storybook.
+#### Non-UI Utility Stories
+
+For utility functions, helpers, and other non-UI exports, create documentation stories using TSX format with TypeDoc-generated markdown.
+
+`src/utils/humanize.stories.tsx`
+
+```tsx
+import React from "react";
+import { Markdown } from "@storybook/addon-docs/blocks";
+
+import type { Meta } from "@storybook/react-vite";
+import humanizeTimeDoc from "../../typedoc/functions/humanizeTime.md?raw";
+
+const meta = {
+ title: "utils/humanize",
+ parameters: {
+ docs: {
+ page: () => (
+ <>
+
humanize
+ {humanizeTimeDoc}
+ >
+ ),
+ },
+ },
+ tags: ["autodocs", "skip-test"],
+} satisfies Meta;
+
+export default meta;
+
+// Docs-only story - renders nothing but triggers autodocs
+export const Docs = {
+ render: () => null,
+};
+```
+
+> [!NOTE]
+> Be sure to include the `skip-test` tag in your utility stories to prevent them from running as visual tests.
+
+**Workflow:**
+
+1. Write TsDoc in your utility function
+2. Export the function from `src/index.ts`
+3. Run `yarn build:doc` to generate TypeDoc markdown
+4. Create a `.stories.tsx` file importing the generated markdown
+5. The documentation appears automatically in Storybook
+
### Tests
Two types of tests are available: unit tests and visual regression tests.
@@ -288,7 +335,7 @@ Screenshots are located in `packages/shared-components/__vis__/`.
### Translations
-First see our [translation guide](../../docs/translation.md) and [translation dev guide](../../docs/translation-dev.md).
+First see our [translation guide](../../docs/translating.md) and [translation dev guide](../../docs/translating-dev.md).
To generate translation strings for this package, run:
```bash
diff --git a/packages/shared-components/package.json b/packages/shared-components/package.json
index fc54d2769b..7854197b6e 100644
--- a/packages/shared-components/package.json
+++ b/packages/shared-components/package.json
@@ -39,11 +39,12 @@
"i18n:sort": "matrix-sort-i18n src/i18n/strings/en_EN.json",
"i18n:lint": "matrix-i18n-lint && prettier --log-level=silent --write src/i18n/strings/ --ignore-path /dev/null",
"test:unit": "vitest --project=unit",
- "test:storybook": "vitest --project=storybook",
+ "test:storybook": "yarn build:doc && vitest --project=storybook",
"test:storybook:update": "playwright-screenshots --entrypoint /work/scripts/storybook-screenshot-update.sh --with-node-modules",
"prepare": "patch-package && vite build",
"storybook": "storybook dev -p 6007",
- "build-storybook": "storybook build",
+ "build:storybook": "yarn build:doc && storybook build && node scripts/storybook-build-i18n.ts",
+ "build:doc": "typedoc",
"lint": "yarn lint:types && yarn lint:js",
"lint:js": "eslint --max-warnings 0 src && prettier --check .",
"lint:types": "tsc --noEmit && tsc --noEmit -p tsconfig.node.json"
@@ -99,10 +100,14 @@
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-storybook": "^10.0.7",
"eslint-plugin-unicorn": "^56.0.0",
+ "expect": "^30.2.0",
"patch-package": "^8.0.1",
"prettier": "^3.6.2",
"storybook": "^10.0.7",
"storybook-addon-vis": "^3.1.2",
+ "typedoc": "^0.28.16",
+ "typedoc-plugin-markdown": "^4.9.0",
+ "typedoc-plugin-missing-exports": "^4.1.2",
"typescript": "^5.9.3",
"vite": "^7.3.1",
"vite-plugin-dts": "^4.5.4",
diff --git a/packages/shared-components/scripts/storybook-build-i18n.ts b/packages/shared-components/scripts/storybook-build-i18n.ts
new file mode 100644
index 0000000000..e0f6dbfb38
--- /dev/null
+++ b/packages/shared-components/scripts/storybook-build-i18n.ts
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2026 Element Creations Ltd.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
+ */
+
+/**
+ * Script to generate i18n files for Storybook build.
+ */
+
+import * as fs from "node:fs";
+import { createHash } from "node:crypto";
+
+// Base path for i18n strings
+const I18N_BASE_PATH = "./src/i18n/strings/";
+// Destination path for generated i18n files
+const I18N_DEST = "storybook-static/i18n/";
+
+// List of languages to include
+const INCLUDE_LANGS = [...new Set([...fs.readdirSync(I18N_BASE_PATH)])]
+ .filter((fn) => fn.endsWith(".json"))
+ .map((f) => f.slice(0, -5));
+
+// Check if dist exists
+if (!fs.existsSync("dist")) {
+ fs.mkdirSync("dist");
+}
+// Check if i18n exists
+if (!fs.existsSync(I18N_DEST)) {
+ fs.mkdirSync(I18N_DEST);
+}
+
+// Type mapping language codes to filenames
+type LangFileMap = Record;
+
+/**
+ * Prepare language files by creating hashed filenames and writing them to the destination.
+ * @returns Mapping of language codes to filenames
+ */
+function prepareLangFiles(): LangFileMap {
+ return INCLUDE_LANGS.reduce>((fileMap, lang) => {
+ const [filename, json] = createHashFromFile(lang);
+ fs.writeFileSync(`${I18N_DEST}${filename}`, json);
+ fileMap[lang] = filename;
+ return fileMap;
+ }, {});
+}
+
+/**
+ * Create a hash from the contents of the language file.
+ * @param lang - Language code
+ * @returns Tuple of filename and JSON content
+ */
+function createHashFromFile(lang: string): [filename: string, json: string] {
+ const translationsPath = `${I18N_BASE_PATH}${lang}.json`;
+
+ const json = JSON.stringify(fs.readFileSync(translationsPath).toString(), null, 4);
+ const jsonBuffer = Buffer.from(json);
+ const digest = createHash("sha256").update(jsonBuffer).digest("hex").slice(0, 7);
+ const filename = `${lang}.${digest}.json`;
+
+ return [filename, json];
+}
+
+/**
+ * Generate the languages.json file mapping language codes to filenames.
+ * @param langFileMap
+ */
+function genLangList(langFileMap: LangFileMap): void {
+ const languages: Record = {};
+ INCLUDE_LANGS.forEach(function (lang) {
+ const normalizedLanguage = lang.toLowerCase().replace("_", "-");
+ const languageParts = normalizedLanguage.split("-");
+ if (languageParts.length == 2 && languageParts[0] == languageParts[1]) {
+ languages[languageParts[0]] = langFileMap[lang];
+ } else {
+ languages[normalizedLanguage] = langFileMap[lang];
+ }
+ });
+ fs.writeFileSync(`${I18N_DEST}/languages.json`, JSON.stringify(languages, null, 4));
+}
+
+const langFileMap = prepareLangFiles();
+genLangList(langFileMap);
diff --git a/packages/shared-components/src/@types/global.d.ts b/packages/shared-components/src/@types/global.d.ts
index 1334c41737..5e8049628c 100644
--- a/packages/shared-components/src/@types/global.d.ts
+++ b/packages/shared-components/src/@types/global.d.ts
@@ -6,3 +6,9 @@ Please see LICENSE files in the repository root for full details.
*/
declare module "*.css";
+
+// For importing markdown files into storybook stories
+declare module "*.md?raw" {
+ const content: string;
+ export default content;
+}
diff --git a/packages/shared-components/src/utils/FormattingUtils.stories.tsx b/packages/shared-components/src/utils/FormattingUtils.stories.tsx
new file mode 100644
index 0000000000..e3bd0040e3
--- /dev/null
+++ b/packages/shared-components/src/utils/FormattingUtils.stories.tsx
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2026 Element Creations Ltd.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
+ */
+
+import React from "react";
+import { Markdown } from "@storybook/addon-docs/blocks";
+
+import type { Meta } from "@storybook/react-vite";
+import formatBytesDoc from "../../typedoc/functions/formatBytes.md?raw";
+import formatSecondsDoc from "../../typedoc/functions/formatSeconds.md?raw";
+
+const meta = {
+ title: "utils/FormattingUtils",
+ parameters: {
+ docs: {
+ page: () => (
+ <>
+ Formatting Utilities
+ A collection of utility functions for formatting data into human-readable strings.
+
+
+ formatBytes
+ {formatBytesDoc}
+
+
+ formatSeconds
+ {formatSecondsDoc}
+ >
+ ),
+ },
+ },
+ tags: ["autodocs", "skip-test"],
+} satisfies Meta;
+
+export default meta;
+
+// Docs-only story - renders nothing but triggers autodocs
+export const Docs = {
+ render: () => null,
+};
diff --git a/packages/shared-components/src/utils/humanize.stories.tsx b/packages/shared-components/src/utils/humanize.stories.tsx
new file mode 100644
index 0000000000..6d5ba65440
--- /dev/null
+++ b/packages/shared-components/src/utils/humanize.stories.tsx
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2026 Element Creations Ltd.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
+ */
+
+import React from "react";
+import { Markdown } from "@storybook/addon-docs/blocks";
+
+import type { Meta } from "@storybook/react-vite";
+import humanizeTimeDoc from "../../typedoc/functions/humanizeTime.md?raw";
+
+const meta = {
+ title: "utils/humanize",
+ parameters: {
+ docs: {
+ page: () => (
+ <>
+ humanize
+ {humanizeTimeDoc}
+ >
+ ),
+ },
+ },
+ tags: ["autodocs", "skip-test"],
+} satisfies Meta;
+
+export default meta;
+
+// Docs-only story - renders nothing but triggers autodocs
+export const Docs = {
+ render: () => null,
+};
diff --git a/packages/shared-components/src/utils/numbers.stories.tsx b/packages/shared-components/src/utils/numbers.stories.tsx
new file mode 100644
index 0000000000..638f8fe4ed
--- /dev/null
+++ b/packages/shared-components/src/utils/numbers.stories.tsx
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2026 Element Creations Ltd.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
+ */
+
+import React from "react";
+import { Markdown } from "@storybook/addon-docs/blocks";
+
+import type { Meta } from "@storybook/react-vite";
+import clampDoc from "../../typedoc/functions/clamp.md?raw";
+import defaultNumberDoc from "../../typedoc/functions/defaultNumber.md?raw";
+import percentageOfDoc from "../../typedoc/functions/percentageOf.md?raw";
+import percentageWithinDoc from "../../typedoc/functions/percentageWithin.md?raw";
+import sumDoc from "../../typedoc/functions/sum.md?raw";
+
+const meta = {
+ title: "utils/numbers",
+ parameters: {
+ docs: {
+ page: () => (
+ <>
+ Number Utilities
+
+ A collection of utility functions for working with numbers, including validation, clamping, and
+ percentage calculations.
+
+
+
+ defaultNumber
+ {defaultNumberDoc}
+
+
+ clamp
+ {clampDoc}
+
+
+ sum
+ {sumDoc}
+
+
+ percentageWithin
+ {percentageWithinDoc}
+
+
+ percentageOf
+ {percentageOfDoc}
+ >
+ ),
+ },
+ },
+ tags: ["autodocs", "skip-test"],
+} satisfies Meta;
+
+export default meta;
+
+// Docs-only story - renders nothing but triggers autodocs
+export const Docs = {
+ render: () => null,
+};
diff --git a/packages/shared-components/typedoc.json b/packages/shared-components/typedoc.json
new file mode 100644
index 0000000000..2f4402584a
--- /dev/null
+++ b/packages/shared-components/typedoc.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://typedoc.org/schema.json",
+ "entryPoints": ["src/index.ts"],
+ "plugin": ["typedoc-plugin-markdown", "typedoc-plugin-missing-exports"],
+ "out": "typedoc",
+ "hidePageHeader": true,
+ "hidePageTitle": true,
+ "hideBreadcrumbs": true,
+ "useCodeBlocks": true,
+ "parametersFormat": "table",
+ "propertiesFormat": "table",
+ "enumMembersFormat": "table",
+ "typeDeclarationFormat": "table",
+ "indexFormat": "table",
+ "publicPath": "https://github.com/element-hq/element-web/blob/develop/packages/shared-components/",
+ "sourceLinkTemplate": "https://github.com/element-hq/element-web/blob/develop/{path}#L{line}",
+ "name": "@element-hq/web-shared-components",
+ "categorizeByGroup": true,
+ "externalSymbolLinkMappings": {
+ "@types/react": {
+ "*": "https://react.dev/"
+ },
+ "react-virtuoso": {
+ "*": "https://virtuoso.dev/"
+ }
+ }
+}
diff --git a/packages/shared-components/vitest.config.ts b/packages/shared-components/vitest.config.ts
index 975ced5ae3..23cc026304 100644
--- a/packages/shared-components/vitest.config.ts
+++ b/packages/shared-components/vitest.config.ts
@@ -94,6 +94,9 @@ export default defineConfig({
storybookTest({
configDir: path.join(dirname, ".storybook"),
storybookScript: "storybook --ci",
+ tags: {
+ exclude: ["skip-test"],
+ },
}),
storybookVis({
// 3px of difference allowed before marking as failed
diff --git a/packages/shared-components/yarn.lock b/packages/shared-components/yarn.lock
index ebd9a069c7..f6100b462d 100644
--- a/packages/shared-components/yarn.lock
+++ b/packages/shared-components/yarn.lock
@@ -579,6 +579,17 @@
resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.10.tgz#a2a1e3812d14525f725d011a73eceb41fef5bc1c"
integrity sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==
+"@gerrit0/mini-shiki@^3.17.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@gerrit0/mini-shiki/-/mini-shiki-3.21.0.tgz#377938e63f29f9f698b00c35dcdebc0c104c1a15"
+ integrity sha512-9PrsT5DjZA+w3lur/aOIx3FlDeHdyCEFlv9U+fmsVyjPZh61G5SYURQ/1ebe2U63KbDmI2V8IhIUegWb8hjOyg==
+ dependencies:
+ "@shikijs/engine-oniguruma" "^3.21.0"
+ "@shikijs/langs" "^3.21.0"
+ "@shikijs/themes" "^3.21.0"
+ "@shikijs/types" "^3.21.0"
+ "@shikijs/vscode-textmate" "^10.0.2"
+
"@grpc/grpc-js@^1.11.1":
version "1.14.3"
resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.14.3.tgz#4c9b817a900ae4020ddc28515ae4b52c78cfb8da"
@@ -650,6 +661,51 @@
wrap-ansi "^8.1.0"
wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+"@jest/diff-sequences@30.0.1":
+ version "30.0.1"
+ resolved "https://registry.yarnpkg.com/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz#0ededeae4d071f5c8ffe3678d15f3a1be09156be"
+ integrity sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==
+
+"@jest/expect-utils@30.2.0":
+ version "30.2.0"
+ resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-30.2.0.tgz#4f95413d4748454fdb17404bf1141827d15e6011"
+ integrity sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==
+ dependencies:
+ "@jest/get-type" "30.1.0"
+
+"@jest/get-type@30.1.0":
+ version "30.1.0"
+ resolved "https://registry.yarnpkg.com/@jest/get-type/-/get-type-30.1.0.tgz#4fcb4dc2ebcf0811be1c04fd1cb79c2dba431cbc"
+ integrity sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==
+
+"@jest/pattern@30.0.1":
+ version "30.0.1"
+ resolved "https://registry.yarnpkg.com/@jest/pattern/-/pattern-30.0.1.tgz#d5304147f49a052900b4b853dedb111d080e199f"
+ integrity sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==
+ dependencies:
+ "@types/node" "*"
+ jest-regex-util "30.0.1"
+
+"@jest/schemas@30.0.5":
+ version "30.0.5"
+ resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-30.0.5.tgz#7bdf69fc5a368a5abdb49fd91036c55225846473"
+ integrity sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==
+ dependencies:
+ "@sinclair/typebox" "^0.34.0"
+
+"@jest/types@30.2.0":
+ version "30.2.0"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-30.2.0.tgz#1c678a7924b8f59eafd4c77d56b6d0ba976d62b8"
+ integrity sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==
+ 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" "*"
+ "@types/yargs" "^17.0.33"
+ chalk "^4.1.2"
+
"@joshwooding/vite-plugin-react-docgen-typescript@^0.6.3":
version "0.6.3"
resolved "https://registry.yarnpkg.com/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.6.3.tgz#cc371b00b0c4f5a74e20da5c125a3529d379983b"
@@ -1364,6 +1420,46 @@
argparse "~1.0.9"
string-argv "~0.3.1"
+"@shikijs/engine-oniguruma@^3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-3.21.0.tgz#0e666454a03fd85d6c634d9dbe70a63f007a6323"
+ integrity sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ==
+ dependencies:
+ "@shikijs/types" "3.21.0"
+ "@shikijs/vscode-textmate" "^10.0.2"
+
+"@shikijs/langs@^3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@shikijs/langs/-/langs-3.21.0.tgz#da33400a85c7cba75fc9f4a6b9feb69a6c39c800"
+ integrity sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA==
+ dependencies:
+ "@shikijs/types" "3.21.0"
+
+"@shikijs/themes@^3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@shikijs/themes/-/themes-3.21.0.tgz#1955d642ea37d70d1137e6cf47da7dc9c34ff4c0"
+ integrity sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw==
+ dependencies:
+ "@shikijs/types" "3.21.0"
+
+"@shikijs/types@3.21.0", "@shikijs/types@^3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-3.21.0.tgz#510d6ddbea65add27980a6ca36cc7bdabc7afe90"
+ integrity sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA==
+ dependencies:
+ "@shikijs/vscode-textmate" "^10.0.2"
+ "@types/hast" "^3.0.4"
+
+"@shikijs/vscode-textmate@^10.0.2":
+ version "10.0.2"
+ resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz#a90ab31d0cc1dfb54c66a69e515bf624fa7b2224"
+ integrity sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==
+
+"@sinclair/typebox@^0.34.0":
+ version "0.34.48"
+ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.48.tgz#75b0ead87e59e1adbd6dccdc42bad4fddee73b59"
+ integrity sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==
+
"@standard-schema/spec@^1.0.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.1.0.tgz#a79b55dbaf8604812f52d140b2c9ab41bc150bb8"
@@ -1609,6 +1705,32 @@
resolved "https://registry.yarnpkg.com/@types/glob-to-regexp/-/glob-to-regexp-0.4.4.tgz#409e71290253203185b1ea8a3d6ea406a4bdc902"
integrity sha512-nDKoaKJYbnn1MZxUY0cA1bPmmgZbg0cTq7Rh13d0KWYNOiKbqoR+2d89SnRPszGh7ROzSwZ/GOjZ4jPbmmZ6Eg==
+"@types/hast@^3.0.4":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa"
+ integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==
+ dependencies:
+ "@types/unist" "*"
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.6":
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7"
+ integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==
+
+"@types/istanbul-lib-report@*":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf"
+ integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^3.0.4":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54"
+ integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==
+ dependencies:
+ "@types/istanbul-lib-report" "*"
+
"@types/json5@^0.0.29":
version "0.0.29"
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
@@ -1682,6 +1804,28 @@
"@types/node" "*"
"@types/ssh2-streams" "*"
+"@types/stack-utils@^2.0.3":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8"
+ integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==
+
+"@types/unist@*":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c"
+ integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==
+
+"@types/yargs-parser@*":
+ version "21.0.3"
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15"
+ integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==
+
+"@types/yargs@^17.0.33":
+ version "17.0.35"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.35.tgz#07013e46aa4d7d7d50a49e15604c1c5340d4eb24"
+ integrity sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==
+ dependencies:
+ "@types/yargs-parser" "*"
+
"@typescript-eslint/eslint-plugin@^8.53.1":
version "8.54.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.54.0.tgz#d8899e5c2eccf5c4a20d01c036a193753748454d"
@@ -2122,7 +2266,7 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
dependencies:
color-convert "^2.0.1"
-ansi-styles@^5.0.0:
+ansi-styles@^5.0.0, ansi-styles@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
@@ -2707,7 +2851,7 @@ ci-info@^3.7.0:
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4"
integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
-ci-info@^4.0.0, ci-info@^4.1.0:
+ci-info@^4.0.0, ci-info@^4.1.0, ci-info@^4.2.0:
version "4.3.1"
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.3.1.tgz#355ad571920810b5623e11d40232f443f16f1daa"
integrity sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==
@@ -3176,7 +3320,7 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1:
dependencies:
once "^1.4.0"
-entities@^4.5.0:
+entities@^4.4.0, entities@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
@@ -3360,6 +3504,11 @@ escape-string-regexp@^1.0.5:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+escape-string-regexp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
+ integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+
escape-string-regexp@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
@@ -3688,6 +3837,18 @@ expect-type@^1.2.2:
resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.3.0.tgz#0d58ed361877a31bbc4dd6cf71bbfef7faf6bd68"
integrity sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==
+expect@^30.2.0:
+ version "30.2.0"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-30.2.0.tgz#d4013bed267013c14bc1199cec8aa57cee9b5869"
+ integrity sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==
+ dependencies:
+ "@jest/expect-utils" "30.2.0"
+ "@jest/get-type" "30.1.0"
+ jest-matcher-utils "30.2.0"
+ jest-message-util "30.2.0"
+ jest-mock "30.2.0"
+ jest-util "30.2.0"
+
exsolve@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.7.tgz#3b74e4c7ca5c5f9a19c3626ca857309fa99f9e9e"
@@ -4037,7 +4198,7 @@ gopd@^1.0.1, gopd@^1.2.0:
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
-graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
+graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4:
version "4.2.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
@@ -4561,6 +4722,67 @@ jackspeak@^4.1.1:
dependencies:
"@isaacs/cliui" "^8.0.2"
+jest-diff@30.2.0:
+ version "30.2.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-30.2.0.tgz#e3ec3a6ea5c5747f605c9e874f83d756cba36825"
+ integrity sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==
+ dependencies:
+ "@jest/diff-sequences" "30.0.1"
+ "@jest/get-type" "30.1.0"
+ chalk "^4.1.2"
+ pretty-format "30.2.0"
+
+jest-matcher-utils@30.2.0:
+ version "30.2.0"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz#69a0d4c271066559ec8b0d8174829adc3f23a783"
+ integrity sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==
+ dependencies:
+ "@jest/get-type" "30.1.0"
+ chalk "^4.1.2"
+ jest-diff "30.2.0"
+ pretty-format "30.2.0"
+
+jest-message-util@30.2.0:
+ version "30.2.0"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-30.2.0.tgz#fc97bf90d11f118b31e6131e2b67fc4f39f92152"
+ integrity sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==
+ dependencies:
+ "@babel/code-frame" "^7.27.1"
+ "@jest/types" "30.2.0"
+ "@types/stack-utils" "^2.0.3"
+ chalk "^4.1.2"
+ graceful-fs "^4.2.11"
+ micromatch "^4.0.8"
+ pretty-format "30.2.0"
+ slash "^3.0.0"
+ stack-utils "^2.0.6"
+
+jest-mock@30.2.0:
+ version "30.2.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-30.2.0.tgz#69f991614eeb4060189459d3584f710845bff45e"
+ integrity sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==
+ dependencies:
+ "@jest/types" "30.2.0"
+ "@types/node" "*"
+ jest-util "30.2.0"
+
+jest-regex-util@30.0.1:
+ version "30.0.1"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-30.0.1.tgz#f17c1de3958b67dfe485354f5a10093298f2a49b"
+ integrity sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==
+
+jest-util@30.2.0:
+ version "30.2.0"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-30.2.0.tgz#5142adbcad6f4e53c2776c067a4db3c14f913705"
+ integrity sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==
+ dependencies:
+ "@jest/types" "30.2.0"
+ "@types/node" "*"
+ chalk "^4.1.2"
+ ci-info "^4.2.0"
+ graceful-fs "^4.2.11"
+ picomatch "^4.0.2"
+
jju@~1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a"
@@ -4716,6 +4938,13 @@ lines-and-columns@^1.1.6:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+linkify-it@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421"
+ integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==
+ dependencies:
+ uc.micro "^2.0.0"
+
local-pkg@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-1.1.2.tgz#c03d208787126445303f8161619dc701afa4abb5"
@@ -4800,6 +5029,11 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
+lunr@^2.3.9:
+ version "2.3.9"
+ resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1"
+ integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==
+
lz-string@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941"
@@ -4842,6 +5076,18 @@ make-dir@^4.0.0:
dependencies:
semver "^7.5.3"
+markdown-it@^14.1.0:
+ version "14.1.0"
+ resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45"
+ integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==
+ dependencies:
+ argparse "^2.0.1"
+ entities "^4.4.0"
+ linkify-it "^5.0.0"
+ mdurl "^2.0.0"
+ punycode.js "^2.3.1"
+ uc.micro "^2.1.0"
+
math-intrinsics@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
@@ -4867,6 +5113,11 @@ md5.js@^1.3.4:
inherits "^2.0.1"
safe-buffer "^5.1.2"
+mdurl@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0"
+ integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==
+
memoize@^10.1.0:
version "10.2.0"
resolved "https://registry.yarnpkg.com/memoize/-/memoize-10.2.0.tgz#593f8066b922b791390d05e278dbeff163dad956"
@@ -4874,7 +5125,7 @@ memoize@^10.1.0:
dependencies:
mimic-function "^5.0.1"
-micromatch@^4.0.2:
+micromatch@^4.0.2, micromatch@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
@@ -5459,6 +5710,15 @@ prettier@^3.6.2:
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.8.1.tgz#edf48977cf991558f4fcbd8a3ba6015ba2a3a173"
integrity sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==
+pretty-format@30.2.0:
+ version "30.2.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-30.2.0.tgz#2d44fe6134529aed18506f6d11509d8a62775ebe"
+ integrity sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==
+ dependencies:
+ "@jest/schemas" "30.0.5"
+ ansi-styles "^5.2.0"
+ react-is "^18.3.1"
+
pretty-format@^27.0.2:
version "27.5.1"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e"
@@ -5546,6 +5806,11 @@ pump@^3.0.0:
end-of-stream "^1.1.0"
once "^1.3.1"
+punycode.js@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7"
+ integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==
+
punycode@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
@@ -5631,6 +5896,11 @@ react-is@^17.0.1:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
+react-is@^18.3.1:
+ version "18.3.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e"
+ integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
+
react-merge-refs@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/react-merge-refs/-/react-merge-refs-3.0.2.tgz#483b4e8029f89d805c4e55c8d22e9b8f77e3b58e"
@@ -6116,6 +6386,11 @@ slash@^2.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
source-map-js@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
@@ -6191,6 +6466,13 @@ ssim.js@^3.5.0:
resolved "https://registry.yarnpkg.com/ssim.js/-/ssim.js-3.5.0.tgz#d7276b9ee99b57a5ff0db34035f02f35197e62df"
integrity sha512-Aj6Jl2z6oDmgYFFbQqK7fght19bXdOxY7Tj03nF+03M9gCBAjeIiO8/PlEGMfKDwYpw4q6iBqVq2YuREorGg/g==
+stack-utils@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f"
+ integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==
+ dependencies:
+ escape-string-regexp "^2.0.0"
+
stackback@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b"
@@ -6733,6 +7015,27 @@ typed-array-length@^1.0.7:
possible-typed-array-names "^1.0.0"
reflect.getprototypeof "^1.0.6"
+typedoc-plugin-markdown@^4.9.0:
+ version "4.9.0"
+ resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.9.0.tgz#88f37ba2417fc8b93951d457a3a557682ce5e01e"
+ integrity sha512-9Uu4WR9L7ZBgAl60N/h+jqmPxxvnC9nQAlnnO/OujtG2ubjnKTVUFY1XDhcMY+pCqlX3N2HsQM2QTYZIU9tJuw==
+
+typedoc-plugin-missing-exports@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-4.1.2.tgz#a125a679782082caad123e8b086b4ac9b28d08da"
+ integrity sha512-WNoeWX9+8X3E3riuYPduilUTFefl1K+Z+5bmYqNeH5qcWjtnTRMbRzGdEQ4XXn1WEO4WCIlU0vf46Ca2y/mspg==
+
+typedoc@^0.28.16:
+ version "0.28.16"
+ resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.28.16.tgz#3901672c48746587fa24390077d07317a1fd180f"
+ integrity sha512-x4xW77QC3i5DUFMBp0qjukOTnr/sSg+oEs86nB3LjDslvAmwe/PUGDWbe3GrIqt59oTqoXK5GRK9tAa0sYMiog==
+ dependencies:
+ "@gerrit0/mini-shiki" "^3.17.0"
+ lunr "^2.3.9"
+ markdown-it "^14.1.0"
+ minimatch "^9.0.5"
+ yaml "^2.8.1"
+
typescript@5.8.2:
version "5.8.2"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.2.tgz#8170b3702f74b79db2e5a96207c15e65807999e4"
@@ -6743,6 +7046,11 @@ typescript@^5.9.3:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f"
integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==
+uc.micro@^2.0.0, uc.micro@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee"
+ integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==
+
ufo@^1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.1.tgz#ac2db1d54614d1b22c1d603e3aef44a85d8f146b"
@@ -7133,7 +7441,7 @@ yallist@^4.0.0:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-yaml@^2.2.2, yaml@^2.7.0:
+yaml@^2.2.2, yaml@^2.7.0, yaml@^2.8.1:
version "2.8.2"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.2.tgz#5694f25eca0ce9c3e7a9d9e00ce0ddabbd9e35c5"
integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==