diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index d5507ed49..466c65778 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -19,15 +19,15 @@ jobs:
with:
node-version: '>=24.13.0'
cache: yarn
- - name: Install dependencies and build website
+ - name: Install dependencies
+ run: yarn install
+ - name: Build Site
env:
APP_URL: ${{ secrets.APP_URL }}
BACKEND_URL: ${{ secrets.BACKEND_URL }}
GH_OAUTH_CLIENT_ID: ${{ vars.GH_OAUTH_CLIENT_ID}}
SITE_CONFIG_PATH: ${{ vars.SITE_CONFIG_PATH }}
- run: |
- yarn install
- yarn build
+ run: yarn build
working-directory: .
- name: Upload Build Artifact
uses: actions/upload-pages-artifact@v3
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index 85aa880a9..29c9c051b 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -32,6 +32,7 @@ import {
socketIoNoDepWarningsPluginConfig,
aliasConfigurationPlugin
} from './src/siteConfig/pluginConfigs';
+import pageIndexPlugin from './packages/tdev/page-index/plugin';
import { useTdevContentPath } from './src/siteConfig/helpers';
import path from 'path';
import {
@@ -383,7 +384,8 @@ const docusaurusConfig = withSiteConfig().then(async (siteConfig) => {
...(siteConfig.pages || {})
}
],
- ...((siteConfig.plugins as Config['plugins']) || [])
+ ...((siteConfig.plugins as Config['plugins']) || []),
+ pageIndexPlugin
],
themes: [
'@docusaurus/theme-mermaid',
@@ -405,4 +407,4 @@ const docusaurusConfig = withSiteConfig().then(async (siteConfig) => {
return config;
});
-export default docusaurusConfig;
+export default docusaurusConfig;
\ No newline at end of file
diff --git a/package.json b/package.json
index 35ed55ab6..0bb7a6d2a 100644
--- a/package.json
+++ b/package.json
@@ -115,9 +115,6 @@
"vfile": "^6.0.3",
"vitest": "^2.0.5"
},
- "resolutions": {
- "@rspack/core": "1.6.5"
- },
"peerDependencies": {
"react-hook-form": "*"
},
diff --git a/packages/tdev/brython-code/README.mdx b/packages/tdev/brython-code/README.mdx
index 790c0e0df..d78517320 100644
--- a/packages/tdev/brython-code/README.mdx
+++ b/packages/tdev/brython-code/README.mdx
@@ -1,5 +1,5 @@
---
-page_id: e7bde0ab-c0fe-4225-8325-e4ebc22d414b
+page_id: 0f9fe018-9c46-4ec0-be50-c2ae69a6a005
tags:
- '@tdev/'
- python
diff --git a/packages/tdev/page-index/README.mdx b/packages/tdev/page-index/README.mdx
new file mode 100644
index 000000000..7f6c93007
--- /dev/null
+++ b/packages/tdev/page-index/README.mdx
@@ -0,0 +1,204 @@
+---
+page_id: cfbd9607-c2d5-4c2a-82e0-9f39c5756747
+tags:
+ - '@tdev/'
+---
+
+import { useStore } from '@tdev-hooks/useStore'
+import { observer } from 'mobx-react-lite';
+import CodeBlock from '@theme/CodeBlock';
+import JsObjectViewer from '@tdev-components/shared/JsObject/Viewer';
+
+# page-index
+
+Dieses Plugin ermöglicht eine Übersicht über alle speicherbaren Dokumente. So kann bspw. der Bearbeitungsstand in der Seitenleiste angezeigt werden.
+
+Standardmässig wird in der Seitenleiste der Bearbeitungsstand in zwei Fällen angezeigt:
+1. Auf einer Seite sind *Statusdokument* vorhanden, deren Fortschritt bestimmt werden kann (sog. `TaskableDocuments`, bspw. `task_state` oder `progress_state`).
+2. In einer Kategorie befinden sich direkt untergeordnete Seiten mit *Statusdokumenten*.
+
+
+
+Dieses Verhalten kann über das *Frontmatter* der Seite angepasst werden:
+
+:::cards{flexBasis="300px"}
+```yaml
+---
+sidebar_custom_props:
+ taskable_state: 'show'
+---
+```
+Bearbeitungsstand anzeigen, auch wenn keine Statusdokumente in den direkt untergeordneten Seiten vorhanden sind.
+::br
+```yaml
+---
+sidebar_custom_props:
+ taskable_state: 'hide'
+---
+```
+Bearbeitungsstand nicht anzeigen, auch wenn Statusdokumente vorhanden sind.
+:::
+
+## Page index
+
+Der Seitenindex ist ein Baum aller speicherbaren Dokumente in der aktuellen Seite.
+
+Im `dev`-Modus wird er automatisch aktualisiert, wenn sich die Seite ändert.
+
+:::details[Page Index]
+
+export const Comp = observer(() => {
+ const pageStore = useStore('pageStore')
+
+ return (
+
+ {JSON.stringify(pageStore._pageIndex, null, 2)}
+
+ );
+});
+
+
+:::
+
+## Für Plugin-Autoren
+
+Wenn ein Plugin ein weiteres *Statusdokument* implementiert, das im Seitenindex erfasst werden soll, müssen folgende Schritte durchgeführt werden:
+1. In der `siteConfig` die neue Komponente für das `remark`-Plugin registrieren:
+ ```ts title="siteConfig.ts"
+ import { PageIndexPluginDefaultOptions } from './src/siteConfig/markdownPluginConfigs';
+ const indexPluginOptions = {
+ ...PageIndexPluginDefaultOptions,
+ components: [
+ ...PageIndexPluginDefaultOptions.components,
+ {
+ name: 'MyNewTaskableDocument',
+ docTypeExtractor: (node: MdxJsxFlowElement) => 'my_new_taskable_document'
+ }
+ ]
+ };
+ export const pageIndexPluginConfig = [pageIndexPlugin, indexPluginOptions];
+ ```
+2. Im `index.ts` des neuen Plugins den neuen Dokumenttyp importieren:
+ ```ts title="packages///index.ts"
+ declare module '@tdev-api/document' {
+ export interface TaskableDocumentMapping {
+ ['my_new_taskable_document']: MyNewTaskableData;
+ }
+ export interface TypeModelMapping {
+ ['my_new_taskable_document']: MyNewTaskableDocument;
+ }
+ }
+ ```
+ :::warning[iTaskableDocument]
+ Das neue `MyNewTaskableDocument`-Modell muss das Interface `iTaskableDocument<'my_new_taskable_document'>` implementieren, damit es im Seitenindex als *Statusdokument* erkannt wird.
+ :::
+3. Im `apiDocumentProviders` den neuen Dokumenttyp registrieren:
+ ```ts title="siteConfig.ts"
+ const getSiteConfig = () => {
+ apiDocumentProviders: {
+ ...,
+ require.resolve('@scope/new-plugin/register')
+ }
+ }
+ ```
+ und den neuen Dokumenttyp im `ComponentStore` registrieren:
+ ```ts title="packages///register.ts"
+ const register = () => {
+ rootStore.componentStore.registerTaskableDocumentType('my_new_taskable_document');
+ };
+ ```
+
+## Installation
+
+:::info[`docusaurus.config.ts`]
+```ts
+import pageIndexPlugin from './packages/tdev/page-index/plugin';
+
+export default {
+ // ...
+ plugins: [
+ // ...
+ pageIndexPlugin
+ ]
+};
+
+```
+:::
+
+:::info[swizzle `theme/DocSidebarItem/index.tsx`]
+See the swizzled component of this page. This should be synced with the `updateTdev.config.yaml` by default.
+:::
+
+
+:::details[remark config]
+```ts
+import pageProgressStatePlugin from '@tdev/page-index/remark-plugin';
+
+export const PageIndexPluginDefaultOptions: PageIndexPluginOptions = {
+ components: [
+ {
+ name: 'Answer',
+ docTypeExtractor: (node) => {
+ return (
+ getAnswerDocumentType(
+ node.attributes.find((a) => a.type === 'mdxJsxAttribute' && a.name === 'type')
+ ?.value as string
+ ) || 'unknown'
+ );
+ }
+ },
+ {
+ name: 'ProgressState',
+ docTypeExtractor: () => 'progress_state'
+ },
+ {
+ name: 'TaskState',
+ docTypeExtractor: () => 'task_state'
+ },
+ {
+ name: 'QuillV2',
+ docTypeExtractor: () => 'quill_v2'
+ },
+ {
+ name: 'String',
+ docTypeExtractor: () => 'string'
+ },
+ {
+ name: 'CmsText',
+ docTypeExtractor: () => 'cms_text'
+ },
+ {
+ name: 'CmsCode',
+ docTypeExtractor: () => 'cms_text'
+ },
+ {
+ name: 'Restricted',
+ docTypeExtractor: () => 'restricted'
+ },
+ {
+ name: 'DynamicDocumentRoots',
+ docTypeExtractor: () => 'dynamic_document_roots'
+ }
+ ],
+ persistedCodeType: (node: Code) => {
+ if (node.lang === 'html') {
+ return 'script';
+ }
+ const liveLangMatch = /(live_[a-zA-Z0-9-_]+)/.exec(node.meta || '');
+ const liveCode = liveLangMatch ? liveLangMatch[1] : null;
+
+ switch (liveCode) {
+ case 'live_py':
+ case 'live_bry':
+ // legacy name, TODO. should be 'brython_code'?
+ return 'script';
+ case 'live_pyo':
+ return 'pyodide_code';
+ default:
+ return 'code';
+ }
+ }
+};
+export const pageIndexPluginConfig = [pageIndexPlugin, PageIndexPluginDefaultOptions];
+```
+:::
\ No newline at end of file
diff --git a/packages/tdev/page-index/components/TaskableState/index.tsx b/packages/tdev/page-index/components/TaskableState/index.tsx
new file mode 100644
index 000000000..3133b4d04
--- /dev/null
+++ b/packages/tdev/page-index/components/TaskableState/index.tsx
@@ -0,0 +1,51 @@
+import React from 'react';
+import clsx from 'clsx';
+import styles from './styles.module.scss';
+import { observer } from 'mobx-react-lite';
+import Page from '@tdev-models/Page';
+import Icon from '@mdi/react';
+import useIsBrowser from '@docusaurus/useIsBrowser';
+
+interface Props {
+ page?: Page;
+ className?: string;
+ forcedAction?: 'show' | 'hide';
+}
+
+const TaskableState = observer((props: Props) => {
+ const { page } = props;
+ const isBrowser = useIsBrowser();
+ const forceHide = props.forcedAction === 'hide';
+ if (forceHide) {
+ return null;
+ }
+
+ if (!isBrowser || !page) {
+ return null;
+ }
+ const forceShow = props.forcedAction === 'show';
+
+ if (!forceShow && page.stepsOnPage === 0 && page.stepsOnDirectSubPages === 0) {
+ return null;
+ }
+
+ return (
+ {
+ const thisElement = e.currentTarget;
+ thisElement.parentElement?.querySelector('a')?.click();
+ }}
+ >
+
+
+ );
+});
+
+export default TaskableState;
diff --git a/packages/tdev/page-index/components/TaskableState/styles.module.scss b/packages/tdev/page-index/components/TaskableState/styles.module.scss
new file mode 100644
index 000000000..8bd004f2f
--- /dev/null
+++ b/packages/tdev/page-index/components/TaskableState/styles.module.scss
@@ -0,0 +1,12 @@
+.taskableState {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 2em;
+ width: 2em;
+ cursor: pointer;
+ border-radius: 1em;
+ &:hover {
+ background-color: var(--ifm-hover-overlay);
+ }
+}
diff --git a/packages/tdev/page-index/images/taskable-sidebar.png b/packages/tdev/page-index/images/taskable-sidebar.png
new file mode 100644
index 000000000..c04c2bd0f
Binary files /dev/null and b/packages/tdev/page-index/images/taskable-sidebar.png differ
diff --git a/packages/tdev/page-index/images/taskable-sidebar.png.excalidraw b/packages/tdev/page-index/images/taskable-sidebar.png.excalidraw
new file mode 100644
index 000000000..6b3d53eb2
--- /dev/null
+++ b/packages/tdev/page-index/images/taskable-sidebar.png.excalidraw
@@ -0,0 +1,611 @@
+{
+ "type": "excalidraw",
+ "version": 2,
+ "elements": [
+ {
+ "id": "TDEV-BACKGROUND-IMAGE",
+ "type": "image",
+ "x": 0,
+ "y": 0,
+ "width": 445,
+ "height": 559,
+ "roughness": 0,
+ "opacity": 100,
+ "isDeleted": false,
+ "fileId": "TDEV-BACKGROUND--FILE",
+ "scale": [
+ 1,
+ 1
+ ],
+ "locked": true,
+ "customData": {
+ "exportFormatMimeType": "image/png",
+ "exportPadding": 4
+ },
+ "version": 2,
+ "versionNonce": 573287145,
+ "index": "a0",
+ "fillStyle": "solid",
+ "strokeWidth": 2,
+ "strokeStyle": "solid",
+ "angle": 0,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "seed": 1,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1770247548661,
+ "link": null,
+ "status": "pending",
+ "crop": null
+ },
+ {
+ "id": "TDEV-IMAGE--RECTANGLE",
+ "type": "rectangle",
+ "x": 0,
+ "y": 0,
+ "width": 445,
+ "height": 559,
+ "strokeColor": "#1e1e1e",
+ "backgroundColor": "transparent",
+ "fillStyle": "solid",
+ "strokeWidth": 1,
+ "strokeStyle": "dotted",
+ "roughness": 0,
+ "opacity": 100,
+ "locked": true,
+ "version": 2,
+ "versionNonce": 573287144,
+ "index": "a1",
+ "isDeleted": false,
+ "angle": 0,
+ "seed": 1,
+ "groupIds": [],
+ "frameId": null,
+ "roundness": null,
+ "boundElements": [],
+ "updated": 1770247548661,
+ "link": null
+ },
+ {
+ "id": "8-8yrCtx4PU0QPmyP2kGs",
+ "type": "text",
+ "x": 623.0766065968326,
+ "y": 357.47268348297536,
+ "width": 496.22381591796875,
+ "height": 48.6,
+ "angle": 0,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "fillStyle": "solid",
+ "strokeWidth": 4,
+ "strokeStyle": "solid",
+ "roughness": 0,
+ "opacity": 100,
+ "groupIds": [],
+ "frameId": null,
+ "index": "a2",
+ "roundness": null,
+ "seed": 814616999,
+ "version": 154,
+ "versionNonce": 714376617,
+ "isDeleted": false,
+ "boundElements": [],
+ "updated": 1770247741661,
+ "link": null,
+ "locked": false,
+ "text": "Enthalten TaskableDocuments",
+ "fontSize": 36,
+ "fontFamily": 6,
+ "textAlign": "left",
+ "verticalAlign": "top",
+ "containerId": null,
+ "originalText": "Enthalten TaskableDocuments",
+ "autoResize": true,
+ "lineHeight": 1.35
+ },
+ {
+ "id": "FgnNFsNzNRYBXy_J8pJXS",
+ "type": "line",
+ "x": 608.32582,
+ "y": 357.47268302254025,
+ "width": 0,
+ "height": 55.16401372086386,
+ "angle": 0,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "fillStyle": "solid",
+ "strokeWidth": 4,
+ "strokeStyle": "solid",
+ "roughness": 0,
+ "opacity": 100,
+ "groupIds": [],
+ "frameId": null,
+ "index": "a3",
+ "roundness": {
+ "type": 2
+ },
+ "seed": 1020752199,
+ "version": 92,
+ "versionNonce": 2059866985,
+ "isDeleted": false,
+ "boundElements": [],
+ "updated": 1770247593910,
+ "link": null,
+ "locked": false,
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 55.16401372086386
+ ]
+ ],
+ "lastCommittedPoint": null,
+ "startBinding": null,
+ "endBinding": null,
+ "startArrowhead": null,
+ "endArrowhead": null
+ },
+ {
+ "id": "GGdpT5dFNrLKK0yKAY-Rc",
+ "type": "arrow",
+ "x": 608.3258196765732,
+ "y": 356.04437637292256,
+ "width": 163.28548039029647,
+ "height": 130.18707220307417,
+ "angle": 0,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "fillStyle": "solid",
+ "strokeWidth": 4,
+ "strokeStyle": "solid",
+ "roughness": 0,
+ "opacity": 100,
+ "groupIds": [],
+ "frameId": null,
+ "index": "a4",
+ "roundness": {
+ "type": 2
+ },
+ "seed": 1268936137,
+ "version": 77,
+ "versionNonce": 741454343,
+ "isDeleted": false,
+ "boundElements": [],
+ "updated": 1770247604539,
+ "link": null,
+ "locked": false,
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ -163.28548039029647,
+ -130.18707220307417
+ ]
+ ],
+ "lastCommittedPoint": null,
+ "startBinding": null,
+ "endBinding": null,
+ "startArrowhead": null,
+ "endArrowhead": "triangle",
+ "elbowed": false
+ },
+ {
+ "id": "DVSREq4Ef0ofOh63yTXLL",
+ "type": "arrow",
+ "x": 608.3258196765732,
+ "y": 413.4149505641078,
+ "width": 163.28548039029647,
+ "height": 105.17936357087831,
+ "angle": 0,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "fillStyle": "solid",
+ "strokeWidth": 4,
+ "strokeStyle": "solid",
+ "roughness": 0,
+ "opacity": 100,
+ "groupIds": [],
+ "frameId": null,
+ "index": "a5",
+ "roundness": {
+ "type": 2
+ },
+ "seed": 727439655,
+ "version": 39,
+ "versionNonce": 707815273,
+ "isDeleted": false,
+ "boundElements": [],
+ "updated": 1770247612246,
+ "link": null,
+ "locked": false,
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ -163.28548039029647,
+ 105.17936357087831
+ ]
+ ],
+ "lastCommittedPoint": null,
+ "startBinding": null,
+ "endBinding": null,
+ "startArrowhead": null,
+ "endArrowhead": "triangle",
+ "elbowed": false
+ },
+ {
+ "id": "p1ooWVetebSkJ2n7rnlaf",
+ "type": "arrow",
+ "x": 606.8548690978753,
+ "y": 395.7624661975892,
+ "width": 161.8145298115985,
+ "height": 26.478726549777775,
+ "angle": 0,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "fillStyle": "solid",
+ "strokeWidth": 4,
+ "strokeStyle": "solid",
+ "roughness": 0,
+ "opacity": 100,
+ "groupIds": [],
+ "frameId": null,
+ "index": "a6",
+ "roundness": {
+ "type": 2
+ },
+ "seed": 1818333769,
+ "version": 40,
+ "versionNonce": 1865184201,
+ "isDeleted": false,
+ "boundElements": [],
+ "updated": 1770247615149,
+ "link": null,
+ "locked": false,
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ -161.8145298115985,
+ 26.478726549777775
+ ]
+ ],
+ "lastCommittedPoint": null,
+ "startBinding": null,
+ "endBinding": null,
+ "startArrowhead": null,
+ "endArrowhead": "triangle",
+ "elbowed": false
+ },
+ {
+ "id": "0PzJFjvP0z7ovn-ZlJn_6",
+ "type": "arrow",
+ "x": 607.5903443872244,
+ "y": 374.43233602879013,
+ "width": 163.28548039029647,
+ "height": 93.41101821357131,
+ "angle": 0,
+ "strokeColor": "#1971c2",
+ "backgroundColor": "transparent",
+ "fillStyle": "solid",
+ "strokeWidth": 4,
+ "strokeStyle": "solid",
+ "roughness": 0,
+ "opacity": 100,
+ "groupIds": [],
+ "frameId": null,
+ "index": "a7",
+ "roundness": {
+ "type": 2
+ },
+ "seed": 1658655401,
+ "version": 47,
+ "versionNonce": 1527276615,
+ "isDeleted": false,
+ "boundElements": [],
+ "updated": 1770247619837,
+ "link": null,
+ "locked": false,
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ -163.28548039029647,
+ -93.41101821357131
+ ]
+ ],
+ "lastCommittedPoint": null,
+ "startBinding": null,
+ "endBinding": null,
+ "startArrowhead": null,
+ "endArrowhead": "triangle",
+ "elbowed": false
+ },
+ {
+ "id": "Uq3G12utv_3iauKXWmGEQ",
+ "type": "arrow",
+ "x": 607.5903440978752,
+ "y": 168.48672863056774,
+ "width": 162.55000481159846,
+ "height": 0,
+ "angle": 0,
+ "strokeColor": "#f08c00",
+ "backgroundColor": "transparent",
+ "fillStyle": "solid",
+ "strokeWidth": 4,
+ "strokeStyle": "solid",
+ "roughness": 0,
+ "opacity": 100,
+ "groupIds": [],
+ "frameId": null,
+ "index": "a8",
+ "roundness": {
+ "type": 2
+ },
+ "seed": 597904009,
+ "version": 98,
+ "versionNonce": 1875424937,
+ "isDeleted": false,
+ "boundElements": [],
+ "updated": 1770247754982,
+ "link": null,
+ "locked": false,
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ -162.55000481159846,
+ 0
+ ]
+ ],
+ "lastCommittedPoint": null,
+ "startBinding": {
+ "elementId": "8NlUihPEosJeJVHpTNSNb",
+ "focus": -0.12298231980817184,
+ "gap": 15.486262678253752
+ },
+ "endBinding": null,
+ "startArrowhead": null,
+ "endArrowhead": "triangle",
+ "elbowed": false
+ },
+ {
+ "id": "nXpLQrCOAwx4mauafchMY",
+ "type": "line",
+ "x": 608.3258198598327,
+ "y": 105.23193257222115,
+ "width": 0,
+ "height": 114.74118205181236,
+ "angle": 0,
+ "strokeColor": "#f08c00",
+ "backgroundColor": "transparent",
+ "fillStyle": "solid",
+ "strokeWidth": 4,
+ "strokeStyle": "solid",
+ "roughness": 0,
+ "opacity": 100,
+ "groupIds": [],
+ "frameId": null,
+ "index": "a9",
+ "roundness": {
+ "type": 2
+ },
+ "seed": 1710221159,
+ "version": 103,
+ "versionNonce": 1439527625,
+ "isDeleted": false,
+ "boundElements": [],
+ "updated": 1770247723177,
+ "link": null,
+ "locked": false,
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 114.74118205181236
+ ]
+ ],
+ "lastCommittedPoint": null,
+ "startBinding": null,
+ "endBinding": null,
+ "startArrowhead": null,
+ "endArrowhead": null
+ },
+ {
+ "id": "8NlUihPEosJeJVHpTNSNb",
+ "type": "text",
+ "x": 623.076606776129,
+ "y": 86.62131751655198,
+ "width": 602.02783203125,
+ "height": 145.8,
+ "angle": 0,
+ "strokeColor": "#f08c00",
+ "backgroundColor": "transparent",
+ "fillStyle": "solid",
+ "strokeWidth": 4,
+ "strokeStyle": "solid",
+ "roughness": 0,
+ "opacity": 100,
+ "groupIds": [],
+ "frameId": null,
+ "index": "aA",
+ "roundness": null,
+ "seed": 1935552041,
+ "version": 186,
+ "versionNonce": 1353578889,
+ "isDeleted": false,
+ "boundElements": [
+ {
+ "id": "Uq3G12utv_3iauKXWmGEQ",
+ "type": "arrow"
+ }
+ ],
+ "updated": 1770247754982,
+ "link": null,
+ "locked": false,
+ "text": "Kategorie mit direkt untergeordneten\nSeiten, die TaskableDocuments \nenthalten",
+ "fontSize": 36,
+ "fontFamily": 6,
+ "textAlign": "left",
+ "verticalAlign": "top",
+ "containerId": null,
+ "originalText": "Kategorie mit direkt untergeordneten\nSeiten, die TaskableDocuments \nenthalten",
+ "autoResize": true,
+ "lineHeight": 1.35
+ },
+ {
+ "id": "FxcdmPEaKJ4_IWQDA4lKc",
+ "type": "arrow",
+ "x": 608.3258196765732,
+ "y": 16.969560995299833,
+ "width": 163.28548095057124,
+ "height": 0,
+ "angle": 0,
+ "strokeColor": "#e03131",
+ "backgroundColor": "transparent",
+ "fillStyle": "solid",
+ "strokeWidth": 4,
+ "strokeStyle": "solid",
+ "roughness": 0,
+ "opacity": 100,
+ "groupIds": [],
+ "frameId": null,
+ "index": "aB",
+ "roundness": {
+ "type": 2
+ },
+ "seed": 1963716457,
+ "version": 73,
+ "versionNonce": 878699401,
+ "isDeleted": false,
+ "boundElements": [],
+ "updated": 1770247765552,
+ "link": null,
+ "locked": false,
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ -163.28548095057124,
+ 0
+ ]
+ ],
+ "lastCommittedPoint": null,
+ "startBinding": null,
+ "endBinding": null,
+ "startArrowhead": null,
+ "endArrowhead": "triangle",
+ "elbowed": false
+ },
+ {
+ "id": "oYKPgOpkt7MKfcGRduSD2",
+ "type": "line",
+ "x": 608.3258198414095,
+ "y": -19.806459043829165,
+ "width": 0,
+ "height": 69.87439483784124,
+ "angle": 0,
+ "strokeColor": "#e03131",
+ "backgroundColor": "transparent",
+ "fillStyle": "solid",
+ "strokeWidth": 4,
+ "strokeStyle": "solid",
+ "roughness": 0,
+ "opacity": 100,
+ "groupIds": [],
+ "frameId": null,
+ "index": "aC",
+ "roundness": {
+ "type": 2
+ },
+ "seed": 1234400935,
+ "version": 59,
+ "versionNonce": 1490561863,
+ "isDeleted": false,
+ "boundElements": [],
+ "updated": 1770247805410,
+ "link": null,
+ "locked": false,
+ "points": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 69.87439483784124
+ ]
+ ],
+ "lastCommittedPoint": null,
+ "startBinding": null,
+ "endBinding": null,
+ "startArrowhead": null,
+ "endArrowhead": null
+ },
+ {
+ "id": "U5nrzQGZ2JNHrhPZK_EfS",
+ "type": "text",
+ "x": 623.0766072283326,
+ "y": -31.63043921391389,
+ "width": 642.52783203125,
+ "height": 97.2,
+ "angle": 0,
+ "strokeColor": "#e03131",
+ "backgroundColor": "transparent",
+ "fillStyle": "solid",
+ "strokeWidth": 4,
+ "strokeStyle": "solid",
+ "roughness": 0,
+ "opacity": 100,
+ "groupIds": [],
+ "frameId": null,
+ "index": "aD",
+ "roundness": null,
+ "seed": 522207175,
+ "version": 91,
+ "versionNonce": 609424231,
+ "isDeleted": false,
+ "boundElements": [],
+ "updated": 1770247826306,
+ "link": null,
+ "locked": false,
+ "text": "Übergeordnete Kategorie ohne Anzeige\ndes Bearbeitungsstandes",
+ "fontSize": 36,
+ "fontFamily": 6,
+ "textAlign": "left",
+ "verticalAlign": "top",
+ "containerId": null,
+ "originalText": "Übergeordnete Kategorie ohne Anzeige\ndes Bearbeitungsstandes",
+ "autoResize": true,
+ "lineHeight": 1.35
+ }
+ ],
+ "files": {
+ "TDEV-BACKGROUND--FILE": {
+ "id": "TDEV-BACKGROUND--FILE",
+ "mimeType": "image/png",
+ "dataURL": "data:image/png;base64,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"
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/tdev/page-index/index.ts b/packages/tdev/page-index/index.ts
new file mode 100644
index 000000000..143bd11a8
--- /dev/null
+++ b/packages/tdev/page-index/index.ts
@@ -0,0 +1,21 @@
+import { DocumentType } from '@tdev-api/document';
+
+export interface PageIndex {
+ /**
+ * the document root id
+ */
+ id: string;
+ type: DocumentType;
+ /**
+ * the page_id in the frontmatter of each md/mdx file
+ */
+ page_id: string;
+ /**
+ * The resolved path to the file - should be the same
+ * as docusaurus `path` field in the sidebar index.
+ */
+ path: string;
+ position: number;
+}
+
+export const PluginName = 'page-progress-state';
diff --git a/packages/tdev/page-index/package.json b/packages/tdev/page-index/package.json
new file mode 100644
index 000000000..7f66b6b3c
--- /dev/null
+++ b/packages/tdev/page-index/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "@tdev/page-index",
+ "version": "1.0.0",
+ "main": "index.ts",
+ "types": "index.ts",
+ "dependencies": {},
+ "devDependencies": {
+ "@docusaurus/core": "*",
+ "@docusaurus/module-type-aliases": "*",
+ "@types/better-sqlite3": "^7.6.13",
+ "better-sqlite3": "^12.6.2"
+ },
+ "peerDependencies": {
+ "@tdev/core": "1.0.0"
+ }
+}
diff --git a/packages/tdev/page-index/plugin.ts b/packages/tdev/page-index/plugin.ts
new file mode 100644
index 000000000..6715a7a26
--- /dev/null
+++ b/packages/tdev/page-index/plugin.ts
@@ -0,0 +1,35 @@
+import { LoadContext, Plugin, PluginModule } from '@docusaurus/types';
+import { exportDB } from './utils/exportDb';
+import path from 'path';
+import { promises as fs } from 'fs';
+import { PluginName } from '.';
+import { pageIndexPath } from './utils/options';
+
+const isDev = process.env.NODE_ENV !== 'production';
+
+const pageIndexPlugin: PluginModule = (context: LoadContext) => {
+ const config: Plugin<{}> = {
+ name: PluginName,
+ async allContentLoaded() {
+ if (isDev) {
+ try {
+ await fs.access(path.dirname(pageIndexPath));
+ } catch {
+ await fs.mkdir(path.dirname(pageIndexPath), { recursive: true });
+ }
+ }
+ },
+ async postBuild() {
+ try {
+ await fs.access(path.dirname(pageIndexPath));
+ } catch {
+ await fs.mkdir(path.dirname(pageIndexPath), { recursive: true });
+ }
+
+ await exportDB();
+ }
+ };
+ return config as Plugin;
+};
+
+export default pageIndexPlugin;
diff --git a/packages/tdev/page-index/remark-plugin/index.ts b/packages/tdev/page-index/remark-plugin/index.ts
new file mode 100644
index 000000000..8dea02649
--- /dev/null
+++ b/packages/tdev/page-index/remark-plugin/index.ts
@@ -0,0 +1,147 @@
+import type { Plugin, Transformer } from 'unified';
+import type { Code, Root } from 'mdast';
+import type { MdxJsxFlowElement, MdxJsxTextElement } from 'mdast-util-mdx';
+import path from 'path';
+import db from '../utils/db';
+import { exportDB } from '../utils/exportDb';
+import { debounce } from 'es-toolkit/function';
+import { tdevRoot } from '../utils/options';
+import { TypeModelMapping } from '@tdev-api/document';
+
+const TdevRoot = `${tdevRoot === '' ? '' : '/'}${tdevRoot}`;
+const TdevRootRegex = new RegExp(`^${TdevRoot}`);
+const projectRoot = process.cwd();
+const isDev = process.env.NODE_ENV !== 'production';
+
+const insertDocRoot = db.prepare(
+ `INSERT INTO document_roots (
+ id,
+ type,
+ page_id,
+ path,
+ position
+ ) VALUES (
+ @id,
+ @type,
+ @page_id,
+ @path,
+ @position
+ ) ON CONFLICT(id, path) DO NOTHING`
+);
+
+const cleanupPage = db.prepare(
+ `DELETE FROM document_roots
+ WHERE path = ? AND page_id = ?;`
+);
+
+interface JsxConfig {
+ /**
+ * Component Name
+ */
+ name: string;
+ /**
+ * @default id
+ */
+ attributeName?: string;
+ docTypeExtractor: (node: MdxJsxFlowElement | MdxJsxTextElement) => keyof TypeModelMapping | string;
+}
+
+export interface PluginOptions {
+ components: JsxConfig[];
+ persistedCodeType?: (code: Code) => string;
+}
+
+const slugCountMap = new Map();
+
+const scheduleExportDb = debounce(
+ async () => {
+ await exportDB();
+ },
+ 250,
+ { edges: ['trailing'] }
+);
+
+/**
+ * This plugin transforms inline code and code blocks in MDX files to use
+ * custom MDX components by converting the code content into attributes.
+ */
+const remarkPlugin: Plugin = function plugin(
+ options = { components: [], persistedCodeType: () => 'code' }
+): Transformer {
+ const { components } = options;
+ const mdxJsxComponents = new Map(components.map((c) => [c.name, c]));
+ return async (root, file) => {
+ const { page_id } = (file.data?.frontMatter || {}) as { page_id?: string };
+ if (components.length < 1 || !page_id) {
+ return;
+ }
+ const { visit, CONTINUE } = await import('unist-util-visit');
+ const filePath = `/${path.relative(projectRoot, file.path)}`
+ .replace(/\/(index|README)\.mdx?$/i, '/')
+ .replace(/\.mdx?$/i, '/')
+ .replace(TdevRootRegex, '')
+ .replace(/^\/versioned_docs\/version-/, '/');
+ slugCountMap.set(filePath, 1);
+
+ insertDocRoot.run({
+ id: page_id,
+ type: '',
+ page_id: page_id,
+ path: filePath,
+ position: 0
+ });
+ cleanupPage.run(filePath, page_id);
+ visit(root, (node, index, parent) => {
+ if (node.type === 'code') {
+ const idMatch = /id=([a-zA-Z0-9-_]+)/.exec(node.meta || '');
+ if (!idMatch) {
+ return CONTINUE;
+ }
+ const docId = idMatch[1];
+ const docType = options.persistedCodeType?.(node) ?? 'code';
+ const res = insertDocRoot.run({
+ id: docId,
+ type: docType,
+ page_id: page_id,
+ path: filePath,
+ position: slugCountMap.get(filePath)!
+ });
+ if (res.changes > 0) {
+ slugCountMap.set(filePath, slugCountMap.get(filePath)! + 1);
+ }
+ return CONTINUE;
+ }
+ if (
+ (node.type !== 'mdxJsxFlowElement' && node.type !== 'mdxJsxTextElement') ||
+ !mdxJsxComponents.has(node.name as string)
+ ) {
+ return CONTINUE;
+ }
+ const config = mdxJsxComponents.get(node.name!)!;
+ const attr = node.attributes.find(
+ (a) => a.type === 'mdxJsxAttribute' && a.name === (config.attributeName || 'id')
+ );
+ if (!attr || attr.type !== 'mdxJsxAttribute' || typeof attr.value !== 'string') {
+ return CONTINUE;
+ }
+ const docId = attr.value;
+ const docType = config.docTypeExtractor(node);
+ const res = insertDocRoot.run({
+ id: docId,
+ type: docType,
+ page_id: page_id,
+ path: filePath,
+ position: slugCountMap.get(filePath)!
+ });
+ if (res.changes > 0) {
+ slugCountMap.set(filePath, slugCountMap.get(filePath)! + 1);
+ }
+ return CONTINUE;
+ });
+ if (isDev) {
+ scheduleExportDb();
+ }
+ };
+};
+
+export default remarkPlugin;
diff --git a/packages/tdev/page-index/tsconfig.json b/packages/tdev/page-index/tsconfig.json
new file mode 100644
index 000000000..ea56794f8
--- /dev/null
+++ b/packages/tdev/page-index/tsconfig.json
@@ -0,0 +1,3 @@
+{
+ "extends": "../../../tsconfig.json"
+}
diff --git a/packages/tdev/page-index/utils/db.ts b/packages/tdev/page-index/utils/db.ts
new file mode 100644
index 000000000..e5c7d6da8
--- /dev/null
+++ b/packages/tdev/page-index/utils/db.ts
@@ -0,0 +1,27 @@
+import path from 'path';
+import Database from 'better-sqlite3';
+import { accessSync, mkdirSync } from 'fs';
+import { dbPath } from './options';
+
+try {
+ accessSync(path.dirname(dbPath));
+} catch {
+ mkdirSync(path.dirname(dbPath), { recursive: true });
+}
+
+const db = new Database(dbPath, { fileMustExist: false });
+db.pragma('journal_mode = WAL');
+
+const createDocRoots = db.prepare(
+ `CREATE TABLE IF NOT EXISTS document_roots (
+ id TEXT NOT NULL,
+ type TEXT NOT NULL,
+ page_id TEXT NOT NULL,
+ path TEXT NOT NULL,
+ position INTEGER NOT NULL,
+ UNIQUE(id, path)
+ )`
+);
+createDocRoots.run();
+
+export default db;
diff --git a/packages/tdev/page-index/utils/exportDb.ts b/packages/tdev/page-index/utils/exportDb.ts
new file mode 100644
index 000000000..985c41aec
--- /dev/null
+++ b/packages/tdev/page-index/utils/exportDb.ts
@@ -0,0 +1,15 @@
+import db from './db';
+import { promises as fs } from 'fs';
+import { pageIndexPath } from './options';
+import { PageIndex } from '..';
+
+const getDocumentRoots = db.prepare('SELECT * FROM document_roots ORDER BY path ASC, position ASC');
+
+export const getContent = () => {
+ const documentRoots = getDocumentRoots.all() as PageIndex[];
+ return { documentRoots };
+};
+
+export const exportDB = async () => {
+ await fs.writeFile(pageIndexPath, JSON.stringify(getContent(), null, 2));
+};
diff --git a/packages/tdev/page-index/utils/options.ts b/packages/tdev/page-index/utils/options.ts
new file mode 100644
index 000000000..61acd8b13
--- /dev/null
+++ b/packages/tdev/page-index/utils/options.ts
@@ -0,0 +1,25 @@
+require('dotenv').config();
+import path from 'path';
+import { PluginName } from '..';
+const cwd = process.cwd();
+export const tdevRoot = path
+ .relative(cwd, process.env.SITE_CONFIG_PATH ?? './siteConfig')
+ .split(path.sep)
+ .slice(0, -1)
+ .join(path.sep);
+
+// current file's directory:
+export const pluginRootDir = path.dirname(new URL(import.meta.url).pathname);
+export const assetDir = path.join(pluginRootDir, 'assets');
+
+const projectRoot = process.cwd();
+const isDev = process.env.NODE_ENV !== 'production';
+
+export const generatedDbDir = path.join(projectRoot, '.docusaurus', PluginName, 'default');
+
+export const generatedDataDir = isDev
+ ? path.join(projectRoot, 'static/tdev-artifacts', PluginName)
+ : path.join(projectRoot, 'build/tdev-artifacts', PluginName);
+
+export const dbPath = path.join(generatedDbDir, 'index.db');
+export const pageIndexPath = path.join(generatedDataDir, 'pageIndex.json');
diff --git a/packages/tdev/pyodide-code/index.ts b/packages/tdev/pyodide-code/index.ts
index 21a02e9ff..880670449 100644
--- a/packages/tdev/pyodide-code/index.ts
+++ b/packages/tdev/pyodide-code/index.ts
@@ -1,4 +1,3 @@
-import type { CurrentBundler, PluginConfig, PluginModule } from '@docusaurus/types';
import type PyodideStore from './stores/PyodideStore';
import PyodideCode from './models/PyodideCode';
export interface PyodideData {
@@ -13,6 +12,6 @@ declare module '@tdev-api/document' {
['pyodide_code']: PyodideCode;
}
export interface ViewStoreTypeMapping {
- ['pyodideStore']: PyodideStore; // placeholder to avoid empty interface error
+ ['pyodideStore']: PyodideStore;
}
}
diff --git a/src/api/OfflineApi/index.ts b/src/api/OfflineApi/index.ts
index d9690c8b0..1c743fe54 100644
--- a/src/api/OfflineApi/index.ts
+++ b/src/api/OfflineApi/index.ts
@@ -239,6 +239,7 @@ export default class OfflineApi {
) || []
};
}) as unknown as T;
+ log('-> get', url, documenRoots);
return resolveResponse(documenRoots);
}
return resolveResponse([OfflineUser] as unknown as T);
diff --git a/src/api/document.ts b/src/api/document.ts
index b38a01558..5172792f6 100644
--- a/src/api/document.ts
+++ b/src/api/document.ts
@@ -18,6 +18,7 @@ import type DocumentStore from '@tdev-stores/DocumentStore';
import iDocumentContainer from '@tdev-models/iDocumentContainer';
import iViewStore from '@tdev-stores/ViewStores/iViewStore';
import Code from '@tdev-models/documents/Code';
+import { iTaskableDocument } from '@tdev-models/iTaskableDocument';
export enum Access {
RO_DocumentRoot = 'RO_DocumentRoot',
@@ -85,6 +86,7 @@ export interface TaskStateData {
}
export interface ProgressStateData {
progress: number;
+ totalSteps: number;
}
export interface MdxCommentData {
@@ -112,9 +114,12 @@ export interface ContainerTypeDataMapping {
['_container_placeholder_']: { name: string }; // placeholder to avoid empty interface error
}
-export interface TypeDataMapping extends ContainerTypeDataMapping {
+export interface TaskableDocumentMapping {
['task_state']: TaskStateData;
['progress_state']: ProgressStateData;
+}
+
+export interface TypeDataMapping extends TaskableDocumentMapping, ContainerTypeDataMapping {
['code']: CodeData;
// TODO: rename to `code_version`?
['script_version']: ScriptVersionData;
@@ -130,6 +135,7 @@ export interface TypeDataMapping extends ContainerTypeDataMapping {
// Add more mappings as needed
}
export type ContainerType = keyof ContainerTypeDataMapping;
+export type TaskableType = keyof TaskableDocumentMapping;
type KeysWithCode = {
[K in keyof T]: 'code' extends keyof T[K] ? K : never;
@@ -141,9 +147,15 @@ export interface ContainerTypeModelMapping {
['_container_placeholder_']: iDocumentContainer; // placeholder to avoid empty interface error
}
-export interface TypeModelMapping extends ContainerTypeModelMapping {
+export interface TaskableTypeModelMapping {
['task_state']: TaskState;
['progress_state']: ProgressState;
+}
+// enforce all TaskableTypeMpdels to extend iTaskableDocument:
+type EnsureAllTaskable }> = T;
+null as unknown as EnsureAllTaskable;
+
+export interface TypeModelMapping extends TaskableTypeModelMapping, ContainerTypeModelMapping {
['code']: Code;
// TODO: rename to `code_version`?
['script_version']: ScriptVersion;
@@ -165,6 +177,7 @@ export interface TypeModelMapping extends ContainerTypeModelMapping {
}
export type ContainerModelType = ContainerTypeModelMapping[ContainerType];
+export type TaskableModelType = TaskableTypeModelMapping[TaskableType];
export type DocumentType = keyof TypeModelMapping;
export type DocumentModelType = TypeModelMapping[DocumentType];
diff --git a/src/components/Admin/EditUser/index.tsx b/src/components/Admin/EditUser/index.tsx
index 34b072411..361d772ca 100644
--- a/src/components/Admin/EditUser/index.tsx
+++ b/src/components/Admin/EditUser/index.tsx
@@ -285,7 +285,7 @@ const EditUser = observer((props: Props) => {
setSpinState('deleting');
authClient.admin.removeUser({ userId: user.id }).then(
action((res) => {
- if (res.data?.success) {
+ if (res?.data?.success) {
userStore.removeFromStore(user.id);
props.close();
}
diff --git a/src/components/Answer/helper.answer.ts b/src/components/Answer/helper.answer.ts
new file mode 100644
index 000000000..e1f66dd5c
--- /dev/null
+++ b/src/components/Answer/helper.answer.ts
@@ -0,0 +1,16 @@
+import { DocumentType } from '@tdev-api/document';
+
+export const getAnswerDocumentType = (type: string): DocumentType => {
+ switch (type) {
+ case 'text':
+ return 'quill_v2';
+ case 'string':
+ return 'string';
+ case 'state':
+ return 'task_state';
+ case 'progress':
+ return 'progress_state';
+ default:
+ return type as DocumentType;
+ }
+};
diff --git a/src/components/Answer/index.tsx b/src/components/Answer/index.tsx
index db1c4bdf7..bc05d3d7a 100644
--- a/src/components/Answer/index.tsx
+++ b/src/components/Answer/index.tsx
@@ -5,6 +5,7 @@ import String from '@tdev-components/documents/String';
import TaskState from '@tdev-components/documents/TaskState';
import ProgressState from '@tdev-components/documents/ProgressState';
import { DocumentType } from '@tdev-api/document';
+import { getAnswerDocumentType } from './helper.answer';
interface Props {
id: string;
@@ -21,8 +22,7 @@ type AnswerProps = Props &
);
const Answer = observer((props: AnswerProps) => {
- switch (props.type) {
- case 'text':
+ switch (getAnswerDocumentType(props.type)) {
case 'quill_v2':
return )} />;
case 'string':
@@ -34,10 +34,8 @@ const Answer = observer((props: AnswerProps) => {
}
/>
);
- case 'progress':
case 'progress_state':
return )} />;
- case 'state':
case 'task_state':
return ;
}
diff --git a/src/components/DynamicValues/TemplateCode/index.tsx b/src/components/DynamicValues/TemplateCode/index.tsx
index 0cee3e95d..7a188ee31 100644
--- a/src/components/DynamicValues/TemplateCode/index.tsx
+++ b/src/components/DynamicValues/TemplateCode/index.tsx
@@ -17,8 +17,8 @@ const TemplateCode = observer((props: Props) => {
if (!current) {
return null;
}
- const code = templateReplacer(props.code, pageStore.current?.dynamicValues);
- const metastring = templateReplacer(props.codeAttributes?.meta, pageStore.current?.dynamicValues);
+ const code = templateReplacer(props.code, current.dynamicValues);
+ const metastring = templateReplacer(props.codeAttributes?.meta, current.dynamicValues);
return (
{code}
diff --git a/src/components/DynamicValues/Val/index.tsx b/src/components/DynamicValues/Val/index.tsx
index ee0bdbbdd..77d769026 100644
--- a/src/components/DynamicValues/Val/index.tsx
+++ b/src/components/DynamicValues/Val/index.tsx
@@ -23,7 +23,7 @@ const Val = observer((props: Props) => {
}
let value = '';
if ('code' in props) {
- value = templateReplacer(props.code, pageStore.current?.dynamicValues);
+ value = templateReplacer(props.code, current.dynamicValues);
} else if ('name' in props) {
value = current.dynamicValues.get(props.name) || `<${props.name}>`;
}
diff --git a/src/components/EditingOverview/EditingStateList.tsx b/src/components/EditingOverview/EditingStateList.tsx
index 8ce024e16..1d1135dd6 100644
--- a/src/components/EditingOverview/EditingStateList.tsx
+++ b/src/components/EditingOverview/EditingStateList.tsx
@@ -6,9 +6,10 @@ import { useStore } from '@tdev-hooks/useStore';
import Icon from '@mdi/react';
import TaskState from '@tdev-models/documents/TaskState';
import ProgressState from '@tdev-models/documents/ProgressState';
+import type { iTaskableDocument } from '@tdev-models/iTaskableDocument';
interface Props {
- editingStatus: (TaskState | ProgressState)[];
+ editingStatus: iTaskableDocument[];
}
const EditingStateList = observer((props: Props) => {
diff --git a/src/components/EditingOverview/index.tsx b/src/components/EditingOverview/index.tsx
index 71c20f324..bfdfff1b5 100644
--- a/src/components/EditingOverview/index.tsx
+++ b/src/components/EditingOverview/index.tsx
@@ -62,7 +62,7 @@ const EditingOverview = observer(() => {
if (!isBrowser || !currentUser || !currentPage) {
return null;
}
- const taskStates = currentPage.editingState.filter((ts) => RWAccess.has(ts.root?.permission)) || [];
+ const taskStates = currentPage.taskableDocuments.filter((ts) => RWAccess.has(ts.root?.permission)) || [];
if (taskStates.length === 0) {
return null;
}
@@ -78,7 +78,7 @@ const EditingOverview = observer(() => {
}
onOpen={() => {
- currentPage.loadLinkedDocumentRoots();
+ currentPage.loadLinkedDocumentRoots(true);
}}
contentStyle={{
position: 'fixed'
diff --git a/src/components/MdxPage/index.tsx b/src/components/MdxPage/index.tsx
index 80442f9f8..76051be13 100644
--- a/src/components/MdxPage/index.tsx
+++ b/src/components/MdxPage/index.tsx
@@ -40,7 +40,7 @@ const MdxPage = observer((props: Props) => {
if (!current || !userStore.current?.hasElevatedAccess) {
return;
}
- if (userStore.viewedUserId && userStore.viewedUserId !== userStore.current?.id) {
+ if (userStore.isUserSwitched) {
current.loadLinkedDocumentRoots();
}
}, [pageStore.current, userStore.viewedUserId]);
diff --git a/src/components/documents/ProgressState/index.tsx b/src/components/documents/ProgressState/index.tsx
index babbd11b1..40f724ffb 100644
--- a/src/components/documents/ProgressState/index.tsx
+++ b/src/components/documents/ProgressState/index.tsx
@@ -74,7 +74,7 @@ const ProgressState = observer((props: Props) => {
React.useEffect(() => {
if (doc?.root && pageStore.current && !doc.root.isDummy) {
- pageStore.current.addDocumentRoot(doc);
+ pageStore.current.assertDocumentRoot(doc);
}
}, [doc, pageStore.current]);
diff --git a/src/components/documents/TaskState/index.tsx b/src/components/documents/TaskState/index.tsx
index 3db082718..1f53dcb3f 100644
--- a/src/components/documents/TaskState/index.tsx
+++ b/src/components/documents/TaskState/index.tsx
@@ -94,7 +94,7 @@ export const TaskStateComponent = observer((props: ComponentProps) => {
React.useEffect(() => {
if (doc.root && pageStore.current && !doc.root.isDummy) {
- pageStore.current.addDocumentRoot(doc);
+ pageStore.current.assertDocumentRoot(doc);
}
}, [doc, pageStore.current]);
diff --git a/src/hooks/useDocumentRoot.ts b/src/hooks/useDocumentRoot.ts
index 4fedb5830..bbc534076 100644
--- a/src/hooks/useDocumentRoot.ts
+++ b/src/hooks/useDocumentRoot.ts
@@ -87,7 +87,7 @@ export const useDocumentRoot = (
}
if (userStore.isUserSwitched) {
documentRootStore.loadInNextBatch(id, meta, {
- documentRoot: false,
+ documentRoot: 'addIfMissing',
skipCreate: true
});
} else {
diff --git a/src/models/DocumentRoot.ts b/src/models/DocumentRoot.ts
index 27f1f67ad..60630ff41 100644
--- a/src/models/DocumentRoot.ts
+++ b/src/models/DocumentRoot.ts
@@ -4,6 +4,7 @@ import { DocumentRootStore } from '@tdev-stores/DocumentRootStore';
import { Access, DocumentType, TypeDataMapping, TypeModelMapping } from '@tdev-api/document';
import { highestAccess, NoneAccess, ROAccess, RWAccess } from './helpers/accessPolicy';
import { isDummyId } from '@tdev-hooks/useDummyId';
+import { orderBy } from 'es-toolkit/array';
export abstract class TypeMeta {
readonly pagePosition: number;
@@ -101,6 +102,21 @@ class DocumentRoot {
return this.store.root.permissionStore.groupPermissionsByDocumentRoot(this.id);
}
+ @computed
+ get pages() {
+ return this.store.root.pageStore.pages.filter((p) => p.documentRootConfigs.has(this.id));
+ }
+
+ /**
+ * Map of page paths to their position in this document root
+ */
+ @computed
+ get pagePositions() {
+ return new Map(
+ this.pages.map((p) => [p.path, p.documentRootConfigs.get(this.id)!.position])
+ );
+ }
+
@computed
get permissions() {
return [...this.store.currentUsersPermissions(this.id)];
@@ -165,9 +181,11 @@ class DocumentRoot {
*/
@computed
get mainDocuments(): TypeModelMapping[T][] {
- const docs = this.documents
- .filter((d) => d.isMain)
- .sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime()) as TypeModelMapping[T][];
+ const docs = orderBy(
+ this.documents.filter((d) => d.isMain),
+ ['createdAt', 'id'],
+ ['asc', 'asc']
+ ) as TypeModelMapping[T][];
if (this.isDummy) {
return docs;
}
diff --git a/src/models/Page.ts b/src/models/Page.ts
index 0bf48ce1e..c72527a3d 100644
--- a/src/models/Page.ts
+++ b/src/models/Page.ts
@@ -2,29 +2,72 @@
* A Markdown or MDX Page
*/
-import { action, computed, observable, ObservableSet } from 'mobx';
-import { PageStore } from '@tdev-stores/PageStore';
-import TaskState from '@tdev-models/documents/TaskState';
+import { action, computed, observable, ObservableMap } from 'mobx';
+import { AUTO_GENERATED_PAGE_PREFIX, PageStore } from '@tdev-stores/PageStore';
import _ from 'es-toolkit/compat';
import iDocument from '@tdev-models/iDocument';
import StudentGroup from '@tdev-models/StudentGroup';
-import ProgressState from './documents/ProgressState';
+import { DocumentType } from '@tdev-api/document';
+import { iTaskableDocument } from './iTaskableDocument';
+import { mdiCheckCircleOutline, mdiSpeedometer, mdiSpeedometerMedium, mdiSpeedometerSlow } from '@mdi/js';
+import { IfmColors } from '@tdev-components/shared/Colors';
+interface PageConfig {
+ type: DocumentType;
+ position: number;
+}
export default class Page {
readonly store: PageStore;
readonly id: string;
- refetchTimestamps: number[] = [];
+ readonly path: string;
+ initialLoadComplete = false;
@observable.ref accessor _primaryStudentGroupName: string | undefined = undefined;
@observable.ref accessor _activeStudentGroup: StudentGroup | undefined = undefined;
- documentRootIds: ObservableSet;
+ documentRootConfigs: ObservableMap;
dynamicValues = observable.map();
- constructor(id: string, store: PageStore) {
+ constructor(id: string, path: string, store: PageStore) {
this.id = id;
+ this.path = path;
this.store = store;
- this.documentRootIds = observable.set([id]);
+ this.documentRootConfigs = observable.map(
+ this.isAutoGenerated ? [] : [[id, { type: 'mdx_comment', position: 0 }]],
+ { deep: false }
+ );
+ }
+
+ @computed
+ get isAutoGenerated() {
+ return this.id.startsWith(AUTO_GENERATED_PAGE_PREFIX);
+ }
+
+ @computed
+ get isLandingpage() {
+ return this.store.sidebarVersions.some((version) => version.rootPaths.includes(this.path));
+ }
+
+ @computed
+ get parentPath() {
+ const parts = this.path.split('/').slice(0, -2);
+ while (parts.length > 1) {
+ const parentPath = `${parts.join('/')}/`;
+ const parentPage = this.store.pages.find((p) => p.path === parentPath);
+ if (parentPage) {
+ return parentPage.path;
+ }
+ if (this.store.sidebarVersions.some((v) => v.versionPath === parentPath)) {
+ return parentPath;
+ }
+ parts.splice(-1, 1);
+ }
+ return '/';
+ }
+
+ @computed
+ get subPages() {
+ return this.store.pages.filter((page) => page.parentPath === this.path);
}
@action
@@ -37,32 +80,35 @@ export default class Page {
}
@action
- addDocumentRoot(doc: iDocument) {
- this.documentRootIds.add(doc.documentRootId);
+ assertDocumentRoot(doc: iDocument) {
+ if (process.env.NODE_ENV === 'production') {
+ return;
+ }
+ if (!this.documentRootConfigs.has(doc.documentRootId)) {
+ this.store.loadPageIndex(true);
+ }
}
- @computed
- get documentRoots() {
- return this.store.root.documentRootStore.documentRoots.filter(
- (doc) => this.documentRootIds.has(doc.id) && !doc.isDummy
- );
+ @action
+ addDocumentRootConfig(id: string, config: PageConfig) {
+ this.documentRootConfigs.set(id, { type: config.type, position: config.position });
}
@computed
- get documents() {
- return this.documentRoots
- .flatMap((doc) => doc.firstMainDocument)
- .filter((d) => d?.root?.meta.pagePosition)
- .sort((a, b) => a!.root!.meta!.pagePosition - b!.root!.meta.pagePosition);
+ get documentRoots() {
+ return this.store.root.documentRootStore.documentRoots
+ .filter((doc) => this.documentRootConfigs.has(doc.id) && !doc.isDummy)
+ .sort((a, b) => {
+ const pA = this.documentRootConfigs.get(a.id)!.position;
+ const pB = this.documentRootConfigs.get(b.id)!.position;
+ return pA - pB;
+ });
}
@computed
- get editingState(): (TaskState | ProgressState)[] {
+ get documents() {
return this.documentRoots
.flatMap((doc) => doc.firstMainDocument)
- .filter(
- (d): d is TaskState | ProgressState => d instanceof TaskState || d instanceof ProgressState
- )
.filter((d) => d?.root?.meta.pagePosition)
.sort((a, b) => a!.root!.meta!.pagePosition - b!.root!.meta.pagePosition);
}
@@ -100,18 +146,95 @@ export default class Page {
* loads all linked document roots (added by #addDocumentRoot)
*/
@action
- loadLinkedDocumentRoots() {
- this.refetchTimestamps.push(Date.now());
- return this.store.loadAllDocuments(this).catch((err) => {
- const now = Date.now();
- const ts = this.refetchTimestamps.filter((ts) => now - ts < 10_000);
- if (ts.length < 5) {
- setTimeout(() => this.loadLinkedDocumentRoots(), 500);
- }
- console.warn('Failed to load linked document roots for page', this, err);
+ loadLinkedDocumentRoots(force = false) {
+ if (!force && !this.store.root.userStore.isUserSwitched) {
+ return;
+ }
+ if (!force && this.initialLoadComplete) {
+ return;
+ }
+ this.initialLoadComplete = true;
+ return this.store.loadAllDocuments(this);
+ }
+
+ get TaskableDocuments() {
+ return this.store.root.componentStore.taskableDocuments;
+ }
+
+ @computed
+ get taskableDocumentRootIds() {
+ return [...this.documentRootConfigs.keys()].filter((id) => {
+ const config = this.documentRootConfigs.get(id)!;
+ return this.TaskableDocuments.has(config.type);
+ });
+ }
+
+ @computed
+ get taskableDocuments(): iTaskableDocument[] {
+ const uid = this.store.root.userStore.viewedUserId;
+ if (!uid) {
+ return [];
+ }
+ return this.taskableDocumentRootIds.flatMap((rid) => {
+ return this.store.root.documentStore
+ .findByDocumentRoot(rid)
+ .filter(
+ (doc) => doc.authorId === uid && this.TaskableDocuments.has(doc.type)
+ ) as iTaskableDocument[];
});
}
+ @computed
+ get stepsOnPage(): number {
+ return this.taskableDocuments.length;
+ }
+
+ @computed
+ get stepsOnDirectSubPages(): number {
+ return this.subPages.reduce((sum, page) => sum + page.stepsOnPage, 0);
+ }
+
+ @computed
+ get totalSteps(): number {
+ return this.stepsOnPage + this.subPages.reduce((sum, page) => sum + page.totalSteps, 0);
+ }
+
+ @computed
+ get progress(): number {
+ return (
+ this.taskableDocuments.filter((d) => d.isDone).length +
+ this.subPages.reduce((sum, page) => sum + page.progress, 0)
+ );
+ }
+
+ @computed
+ get isDone(): boolean {
+ return this.progress > 0 && this.progress >= this.totalSteps;
+ }
+
+ @computed
+ get editingIconState() {
+ if (this.isDone) {
+ return { path: mdiCheckCircleOutline, color: IfmColors.green };
+ }
+ const level = this.progress / this.totalSteps;
+ if (this.progress === 0) {
+ return { path: mdiSpeedometerSlow, color: IfmColors.gray };
+ }
+ if (level < 1 / 3) {
+ return { path: mdiSpeedometerSlow, color: IfmColors.red };
+ }
+ if (level < 2 / 3) {
+ return { path: mdiSpeedometerMedium, color: IfmColors.orange };
+ }
+ return { path: mdiSpeedometer, color: IfmColors.lightGreen };
+ }
+
+ @computed
+ get editingState(): iTaskableDocument[] {
+ return this.taskableDocuments;
+ }
+
@action
toggleActiveStudentGroup(studentGroup: StudentGroup) {
if (this._activeStudentGroup && this._activeStudentGroup.id === studentGroup.id) {
@@ -141,17 +264,15 @@ export default class Page {
@computed
get editingStateByUsers() {
return _.groupBy(
- this.documentRoots
- .flatMap((dr) => dr.allDocuments)
- .filter(
- (d): d is TaskState | ProgressState =>
- d instanceof TaskState || d instanceof ProgressState
- )
- .filter((doc) => doc.isMain && doc.root?.meta.pagePosition)
+ this.taskableDocumentRootIds
+ .flatMap((rid) => {
+ return this.store.root.documentStore
+ .findByDocumentRoot(rid)
+ .filter((doc) => this.TaskableDocuments.has(doc.type)) as iTaskableDocument[];
+ })
.filter((doc) =>
this.activeStudentGroup ? this.activeStudentGroup.userIds.has(doc.authorId) : true
- )
- .sort((a, b) => a.root!.meta.pagePosition - b.root!.meta.pagePosition),
+ ),
(doc) => doc.authorId
);
}
diff --git a/src/models/documents/DynamicDocumentRoots/index.ts b/src/models/documents/DynamicDocumentRoots/index.ts
index a56cee11f..da808568c 100644
--- a/src/models/documents/DynamicDocumentRoots/index.ts
+++ b/src/models/documents/DynamicDocumentRoots/index.ts
@@ -70,7 +70,7 @@ class DynamicDocumentRoots extends iDocument<'dynami
addedIds.forEach((id) => {
this.store.root.documentRootStore.loadInNextBatch(id, this.defaultContainerMeta, {
documentType: this.containerType,
- documentRoot: true
+ documentRoot: 'replace'
});
});
}
@@ -191,7 +191,7 @@ class DynamicDocumentRoots extends iDocument<'dynami
return [...this.documentRootIds].map((id) => {
this.store.root.documentRootStore.loadInNextBatch(id, this.defaultContainerMeta, {
documentType: this.containerType,
- documentRoot: true
+ documentRoot: 'replace'
});
});
}
diff --git a/src/models/documents/ProgressState/index.ts b/src/models/documents/ProgressState/index.ts
index 00c8ec12e..294713c9b 100644
--- a/src/models/documents/ProgressState/index.ts
+++ b/src/models/documents/ProgressState/index.ts
@@ -7,6 +7,7 @@ import { RWAccess } from '@tdev-models/helpers/accessPolicy';
import { mdiCheckCircleOutline, mdiSpeedometer, mdiSpeedometerMedium, mdiSpeedometerSlow } from '@mdi/js';
import { IfmColors } from '@tdev-components/shared/Colors';
import Step from './Step';
+import type { iTaskableDocument } from '@tdev-models/iTaskableDocument';
export interface MetaInit {
readonly?: boolean;
@@ -52,13 +53,15 @@ export class ModelMeta extends TypeMeta<'progress_state'> {
get defaultData(): TypeDataMapping['progress_state'] {
return {
- progress: this.default
+ progress: this.default,
+ totalSteps: Math.max(this.default, 1)
};
}
}
-class ProgressState extends iDocument<'progress_state'> {
+class ProgressState extends iDocument<'progress_state'> implements iTaskableDocument<'progress_state'> {
@observable accessor _progress: number = 0;
+ @observable accessor _totalSteps: number = 0;
@observable accessor _viewedIndex: number | undefined = undefined;
@observable accessor scrollTo: boolean = false;
@observable accessor hoveredIndex: number | undefined = undefined;
@@ -69,6 +72,7 @@ class ProgressState extends iDocument<'progress_state'> {
constructor(props: DocumentProps<'progress_state'>, store: DocumentStore) {
super(props, store);
this._progress = props.data?.progress ?? 0;
+ this.setTotalSteps(Math.max(props.data?.totalSteps ?? 1, props.data?.progress ?? 0, 1), true);
}
get canStepBack(): boolean {
@@ -91,19 +95,19 @@ class ProgressState extends iDocument<'progress_state'> {
}
@action
- setData(data: TypeDataMapping['progress_state'], from: Source, updatedAt?: Date): void {
+ setData(data: Partial, from: Source, updatedAt?: Date): void {
if (!RWAccess.has(this.root?.permission)) {
return;
}
- const { progress } = data;
+ const { progress, totalSteps } = data;
if (progress && !this.steps[progress]?.canToggleContent && this.progress + 1 !== progress) {
return;
}
- if (!this.canStepBack && progress < this.progress) {
- return;
+ if (progress !== undefined && (this.canStepBack || progress > this.progress)) {
+ this._progress = progress;
}
- if (data.progress !== undefined) {
- this._progress = data.progress;
+ if (totalSteps !== undefined) {
+ this.setTotalSteps(totalSteps, true);
}
if (from === Source.LOCAL) {
@@ -116,7 +120,8 @@ class ProgressState extends iDocument<'progress_state'> {
get data(): TypeDataMapping['progress_state'] {
return {
- progress: this._progress
+ progress: this._progress,
+ totalSteps: this._totalSteps
};
}
@@ -150,21 +155,19 @@ class ProgressState extends iDocument<'progress_state'> {
@computed
get totalSteps(): number {
- return (
- this.steps.length ||
- (
- (this.root?.documents || []).find(
- (ps) => ps.type === 'progress_state' && ps?.steps.length > 0
- ) as ProgressState | undefined
- )?.steps?.length ||
- 0
- );
+ return Math.max(this._totalSteps, 1, this.progress);
}
@action
- setTotalSteps(totalSteps: number) {
- if (this.totalSteps !== totalSteps && totalSteps > 0) {
- this.steps.replace(Array.from({ length: totalSteps }, (_, i) => new Step(i, this)));
+ setTotalSteps(totalSteps: number, skipSave: boolean = false) {
+ const skip = this._totalSteps !== 0 && this.totalSteps === totalSteps;
+ if (totalSteps < 1 || skip) {
+ return;
+ }
+ this._totalSteps = totalSteps;
+ this.steps.replace(Array.from({ length: totalSteps }, (_, i) => new Step(i, this)));
+ if (!skipSave) {
+ this.saveNow();
}
}
@@ -175,6 +178,9 @@ class ProgressState extends iDocument<'progress_state'> {
@computed
get isDone(): boolean {
+ if (!this.totalSteps) {
+ return false;
+ }
return this.progress > 0 && this.progress >= this.totalSteps;
}
@@ -219,7 +225,7 @@ class ProgressState extends iDocument<'progress_state'> {
@computed
get progress(): number {
- return this.derivedData.progress ?? this.meta.default;
+ return this._progress ?? this.meta.default;
}
@computed
diff --git a/src/models/documents/TaskState.ts b/src/models/documents/TaskState.ts
index c2a306e9f..ed3530112 100644
--- a/src/models/documents/TaskState.ts
+++ b/src/models/documents/TaskState.ts
@@ -12,6 +12,7 @@ import { TypeMeta } from '@tdev-models/DocumentRoot';
import { RWAccess } from '@tdev-models/helpers/accessPolicy';
import { mdiIcon } from '@tdev-components/documents/TaskState';
import { mdiColor } from '@tdev-components/EditingOverview';
+import type { iTaskableDocument } from '@tdev-models/iTaskableDocument';
export interface MetaInit {
readonly?: boolean;
@@ -39,7 +40,7 @@ export class TaskMeta extends TypeMeta<'task_state'> {
}
}
-class TaskState extends iDocument<'task_state'> {
+class TaskState extends iDocument<'task_state'> implements iTaskableDocument<'task_state'> {
@observable accessor _taskState: StateType;
@observable accessor scrollTo: boolean = false;
constructor(props: DocumentProps<'task_state'>, store: DocumentStore) {
@@ -78,6 +79,16 @@ class TaskState extends iDocument<'task_state'> {
return this.taskState === 'checked';
}
+ @computed
+ get progress(): number {
+ return this.isDone ? 1 : 0;
+ }
+
+ @computed
+ get totalSteps(): number {
+ return 1;
+ }
+
@computed
get editingIconState() {
return {
diff --git a/src/models/iDocumentContainer.ts b/src/models/iDocumentContainer.ts
index 8e3d2a3fd..bbb4c3dbc 100644
--- a/src/models/iDocumentContainer.ts
+++ b/src/models/iDocumentContainer.ts
@@ -80,9 +80,9 @@ abstract class iDocumentContainer extends iDocument<
this.documentRootId,
undefined /* meta is only needed when you want to create a "default" document */,
{
- userPermissions: false /* already present from this container */,
- groupPermissions: false /* already present from this container */,
- documentRoot: false /* already present from this container */,
+ userPermissions: false /* already present for this container */,
+ groupPermissions: false /* already present for this container */,
+ documentRoot: false /* already present for this container */,
skipCreate: true,
documents: true
}
diff --git a/src/models/iTaskableDocument.ts b/src/models/iTaskableDocument.ts
new file mode 100644
index 000000000..189e56a77
--- /dev/null
+++ b/src/models/iTaskableDocument.ts
@@ -0,0 +1,10 @@
+import type { TaskableType } from '@tdev-api/document';
+import iDocument from './iDocument';
+
+export interface iTaskableDocument extends iDocument {
+ isDone: boolean;
+ editingIconState: { path: string; color: string };
+ progress: number;
+ totalSteps: number;
+ setScrollTo(scroll: boolean): void;
+}
diff --git a/src/plugins/remark-page/plugin.ts b/src/plugins/remark-page/plugin.ts
index 709756319..18d797035 100644
--- a/src/plugins/remark-page/plugin.ts
+++ b/src/plugins/remark-page/plugin.ts
@@ -15,7 +15,7 @@ const plugin: Plugin = function plugin(): Transformer {
if (!page_id) {
return;
}
- visit(root, (node, index, parent) => {
+ visit(root, (node, idx, parent) => {
/** add the MdxPage exactly once at the top of the document and exit */
if (root === node && !parent) {
const loaderNode: MdxJsxFlowElement = {
diff --git a/src/siteConfig/markdownPluginConfigs.ts b/src/siteConfig/markdownPluginConfigs.ts
index 2c62430f8..f219e8a39 100644
--- a/src/siteConfig/markdownPluginConfigs.ts
+++ b/src/siteConfig/markdownPluginConfigs.ts
@@ -1,5 +1,6 @@
-import type { Node } from 'mdast';
+import type { Code, Node } from 'mdast';
import type { LeafDirective } from 'mdast-util-directive';
+import type { MdxJsxFlowElement } from 'mdast-util-mdx';
import strongPlugin, { transformer as captionVisitor } from '../plugins/remark-strong/plugin';
import deflistPlugin from '../plugins/remark-deflist/plugin';
import mdiPlugin from '../plugins/remark-mdi/plugin';
@@ -13,11 +14,15 @@ import linkAnnotationPlugin from '../plugins/remark-link-annotation/plugin';
import mediaPlugin from '../plugins/remark-media/plugin';
import detailsPlugin from '../plugins/remark-details/plugin';
import pagePlugin from '../plugins/remark-page/plugin';
+import pageIndexPlugin, {
+ type PluginOptions as PageIndexPluginOptions
+} from '@tdev/page-index/remark-plugin';
import graphvizPlugin from '@tdev/remark-graphviz/remark-plugin';
import pdfPlugin from '@tdev/remark-pdf/remark-plugin';
import codeAsAttributePlugin from '../plugins/remark-code-as-attribute/plugin';
import commentPlugin from '../plugins/remark-comments/plugin';
import enumerateAnswersPlugin from '../plugins/remark-enumerate-components/plugin';
+import { getAnswerDocumentType } from '../components/Answer/helper.answer';
export const flexCardsPluginConfig = [
flexCardsPlugin,
@@ -133,7 +138,75 @@ export const enumerateAnswersPluginConfig = [
export const pdfPluginConfig = pdfPlugin;
-export const pagePluginConfig = pagePlugin;
+export const pagePluginConfig = [pagePlugin, {}];
+
+export const PageIndexPluginDefaultOptions: PageIndexPluginOptions = {
+ components: [
+ {
+ name: 'Answer',
+ docTypeExtractor: (node) => {
+ return (
+ getAnswerDocumentType(
+ node.attributes.find((a) => a.type === 'mdxJsxAttribute' && a.name === 'type')
+ ?.value as string
+ ) || 'unknown'
+ );
+ }
+ },
+ {
+ name: 'ProgressState',
+ docTypeExtractor: () => 'progress_state'
+ },
+ {
+ name: 'TaskState',
+ docTypeExtractor: () => 'task_state'
+ },
+ {
+ name: 'QuillV2',
+ docTypeExtractor: () => 'quill_v2'
+ },
+ {
+ name: 'String',
+ docTypeExtractor: () => 'string'
+ },
+ {
+ name: 'CmsText',
+ docTypeExtractor: () => 'cms_text'
+ },
+ {
+ name: 'CmsCode',
+ docTypeExtractor: () => 'cms_text'
+ },
+ {
+ name: 'Restricted',
+ docTypeExtractor: () => 'restricted'
+ },
+ {
+ name: 'DynamicDocumentRoots',
+ docTypeExtractor: () => 'dynamic_document_roots'
+ }
+ ],
+ persistedCodeType: (node: Code) => {
+ if (node.lang === 'html') {
+ return 'script';
+ }
+ const liveLangMatch = /(live_[a-zA-Z0-9-_]+)/.exec(node.meta || '');
+ const liveCode = liveLangMatch ? liveLangMatch[1] : null;
+
+ switch (liveCode) {
+ case 'live_py':
+ case 'live_bry':
+ // legacy name, TODO. should be 'brython_code'?
+ return 'script';
+ case 'live_pyo':
+ return 'pyodide_code';
+ default:
+ return 'code';
+ }
+ }
+};
+export const pageIndexPluginConfig = [pageIndexPlugin, PageIndexPluginDefaultOptions];
+
export const graphvizPluginConfig = graphvizPlugin;
export const commentPluginConfig = [
@@ -173,6 +246,7 @@ export const recommendedRemarkPlugins = [
enumerateAnswersPluginConfig,
pdfPluginConfig,
pagePluginConfig,
+ pageIndexPluginConfig,
commentPluginConfig,
linkAnnotationPluginConfig,
codeAsAttributePluginConfig
diff --git a/src/stores/ComponentStore.ts b/src/stores/ComponentStore.ts
index 590702442..8a4729b88 100644
--- a/src/stores/ComponentStore.ts
+++ b/src/stores/ComponentStore.ts
@@ -2,9 +2,11 @@ import { CodeMeta } from '@tdev-models/documents/Code';
import { RootStore } from './rootStore';
import {
type CodeType,
+ type DocumentType,
TypeModelMapping,
type ContainerType,
- type ContainerTypeModelMapping
+ type ContainerTypeModelMapping,
+ TaskableType
} from '@tdev-api/document';
import { ContainerMeta } from '@tdev-models/documents/DynamicDocumentRoots/ContainerMeta';
import iCodeMeta, { MetaInit } from '@tdev-models/documents/iCode/iCodeMeta';
@@ -49,6 +51,7 @@ class ComponentStore {
readonly root: RootStore;
components = new Map();
editorComponents = new Map();
+ taskableDocuments = new Set(['task_state', 'progress_state']);
constructor(root: RootStore) {
this.root = root;
@@ -62,6 +65,18 @@ class ComponentStore {
this.components.set(type, component as ContainerComponent);
}
+ registerTaskableDocumentType(type: TaskableType) {
+ this.taskableDocuments.add(type);
+ }
+
+ @computed
+ get defaultMeta() {
+ return [
+ ...[...this.components.values()].map((comp) => comp.defaultMeta),
+ ...[...this.editorComponents.values()].map((comp) => comp.createModelMeta({}))
+ ];
+ }
+
@computed
get registeredContainerTypes(): ContainerType[] {
return [...this.components.keys()];
diff --git a/src/stores/DocumentRootStore.ts b/src/stores/DocumentRootStore.ts
index 1dca366b4..1c5a38daa 100644
--- a/src/stores/DocumentRootStore.ts
+++ b/src/stores/DocumentRootStore.ts
@@ -18,6 +18,15 @@ import { DocumentType } from '@tdev-api/document';
import _ from 'es-toolkit/compat';
import User from '@tdev-models/User';
import { NoneAccess } from '@tdev-models/helpers/accessPolicy';
+import { ModelMeta as ProgressStateMeta } from '@tdev-models/documents/ProgressState';
+import { CodeMeta } from '@tdev-models/documents/Code';
+import { ModelMeta as MdxCommentMeta } from '@tdev-models/documents/MdxComment';
+import { ModelMeta as RestrictedMeta } from '@tdev-models/documents/Restricted';
+import { ModelMeta as SolutionMeta } from '@tdev-models/documents/Solution';
+import { ModelMeta as StringMeta } from '@tdev-models/documents/String';
+import { TaskMeta as TaskStateMeta } from '@tdev-models/documents/TaskState';
+
+import { CmsTextMeta } from '@tdev-models/documents/CmsText';
type LoadConfig = {
/** if true, user permissions will be loaded
@@ -30,11 +39,14 @@ type LoadConfig = {
*/
groupPermissions?: boolean;
/**
- * if true, the document root will be created and when already exists,
- * it will replace the existing one
- * @default true
+ * @option 'replace': the document root will be created and when already exists,
+ * it will replace the existing one.
+ * @option 'addIfMissing': when the document root does not exist in the mobx store, it will
+ * be added. But no new document root will be created on the api.
+ * @option false: the document root will not be loaded.
+ * @default 'replace'
*/
- documentRoot?: boolean;
+ documentRoot?: 'replace' | 'addIfMissing' | boolean;
/**
* if a document root should not be created when it is not found,
* set `skipCreate` to true
@@ -59,6 +71,17 @@ type BatchedMeta = {
access: Partial;
};
+const DefaultMeta: TypeMeta[] = [
+ new CodeMeta({}),
+ new MdxCommentMeta({}),
+ new RestrictedMeta({}),
+ new SolutionMeta({}),
+ new StringMeta({}),
+ new TaskStateMeta({}),
+ new ProgressStateMeta({}),
+ new CmsTextMeta({})
+];
+
export class DocumentRootStore extends iStore {
readonly root: RootStore;
documentRoots = observable.array>([]);
@@ -75,6 +98,11 @@ export class DocumentRootStore extends iStore {
return this.root.sessionStore.isLoggedIn;
}
+ @computed
+ get defaultMetas(): TypeMeta[] {
+ return [...DefaultMeta, ...this.root.componentStore.defaultMeta];
+ }
+
@action
addDocumentRoot(
documentRoot: DocumentRoot,
@@ -123,7 +151,7 @@ export class DocumentRootStore extends iStore {
this.queued.set(id, {
meta: meta,
load: {
- documentRoot: true,
+ documentRoot: 'replace',
groupPermissions: true,
userPermissions: true,
skipCreate: false,
@@ -170,13 +198,13 @@ export class DocumentRootStore extends iStore {
this.loadQueued();
console.log('Postponing', postponed.length, 'document roots for next batch');
}
- const current = new Map(batch);
+ const currentBatch = new Map(batch);
/**
* if the user is not logged in, we can't load the documents
* so we just mark all queued documents as loaded
*/
if (!this.root.sessionStore.isLoggedIn) {
- [...current.keys()].forEach((id) => {
+ [...currentBatch.keys()].forEach((id) => {
const dummyModel = this.find(id);
if (dummyModel && dummyModel.isDummy) {
dummyModel.setLoaded();
@@ -188,16 +216,16 @@ export class DocumentRootStore extends iStore {
/**
* load all queued documents
*/
- const rootIds = [...current.keys()].sort();
+ const rootIds = [...currentBatch.keys()].sort();
const idConfigs: [DocumentType | undefined, string[]][] = [];
- const rootIdsWithDocs = rootIds.filter((id) => !current.get(id)!.load.documentType);
+ const rootIdsWithDocs = rootIds.filter((id) => !currentBatch.get(id)!.load.documentType);
if (rootIdsWithDocs.length > 0) {
idConfigs.push([undefined, rootIdsWithDocs]);
}
rootIds
- .filter((id) => current.get(id)!.load.documentType)
+ .filter((id) => currentBatch.get(id)!.load.documentType)
.reduce((acc, id) => {
- const type = current.get(id)!.load.documentType;
+ const type = currentBatch.get(id)!.load.documentType;
const idx = acc.findIndex((item) => item[0] === type);
if (idx < 0) {
acc.push([type, [id]]);
@@ -220,21 +248,21 @@ export class DocumentRootStore extends iStore {
).then((results) => results.flatMap((r) => r.data));
runInAction(() => {
models.forEach((data) => {
- const config = current.get(data.id);
+ const config = currentBatch.get(data.id);
if (!config) {
return;
}
this.addApiResultToStore(data, config);
- current.delete(data.id);
+ currentBatch.delete(data.id);
});
});
if (!isUserSwitched) {
// create all missing root documents
const created = await Promise.all(
- [...current.keys()]
- .filter((id) => !this.find(id)?.isLoaded && !current.get(id)!.load.skipCreate)
+ [...currentBatch.keys()]
+ .filter((id) => !this.find(id)?.isLoaded && !currentBatch.get(id)!.load.skipCreate)
.map((id) => {
- const config = current.get(id);
+ const config = currentBatch.get(id);
if (config && config.meta) {
return this.create(id, config.meta, config.access).catch(() => {
// queue it up for loading later - the model was probably generated in the mean time?
@@ -258,12 +286,12 @@ export class DocumentRootStore extends iStore {
created
.filter((docRoot) => !!docRoot)
.forEach((docRoot) => {
- current.delete(docRoot.id);
+ currentBatch.delete(docRoot.id);
});
}
// mark all remaining roots as loaded
runInAction(() => {
- [...current.keys()].forEach((id) => {
+ [...currentBatch.keys()].forEach((id) => {
const dummyModel = this.find(id);
if (dummyModel && dummyModel.isDummy) {
dummyModel.setLoaded();
@@ -275,17 +303,27 @@ export class DocumentRootStore extends iStore {
@action
addApiResultToStore(data: ApiDocumentRoot, config: Omit) {
- if (config.load.documentRoot && !config.meta) {
+ if (config.load.documentRoot === 'replace' && !config.meta) {
return;
}
- const documentRoot = config.load.documentRoot
- ? new DocumentRoot(data, config.meta!, this)
- : this.find(data.id);
+ const defaultType = data.documents[0]?.type;
+ const meta =
+ config.meta ||
+ (this.find(data.id)?.meta as TypeMeta) ||
+ (defaultType ? this.defaultMetas.find((m) => m.type === defaultType) : undefined);
+ const documentRoot =
+ config.load.documentRoot && meta ? new DocumentRoot(data, meta, this) : this.find(data.id);
if (!documentRoot) {
return;
}
if (config.load.documentRoot) {
- this.addDocumentRoot(documentRoot, { cleanup: true, deep: false });
+ if (config.load.documentRoot === 'addIfMissing') {
+ if (!this.find(data.id)) {
+ this.addDocumentRoot(documentRoot);
+ }
+ } else {
+ this.addDocumentRoot(documentRoot, { cleanup: true, deep: false });
+ }
}
if (config.load.groupPermissions) {
data.groupPermissions.forEach((gp) => {
@@ -391,7 +429,7 @@ export class DocumentRootStore extends iStore {
@action
reload(documentRoot: DocumentRoot) {
this.loadInNextBatch(documentRoot.id, documentRoot.meta, {
- documentRoot: true,
+ documentRoot: 'replace',
documents: true,
groupPermissions: true,
userPermissions: true
diff --git a/src/stores/PageStore.ts b/src/stores/PageStore.ts
index 9ea2e63c5..18e50e2ab 100644
--- a/src/stores/PageStore.ts
+++ b/src/stores/PageStore.ts
@@ -4,6 +4,41 @@ import { RootStore } from '@tdev-stores/rootStore';
import Page from '@tdev-models/Page';
import { computedFn } from 'mobx-utils';
import { allDocuments as apiAllDocuments, DocumentType } from '@tdev-api/document';
+import type { GlobalPluginData } from '@docusaurus/plugin-content-docs/client';
+import siteConfig from '@generated/docusaurus.config';
+import { PageIndex } from '@tdev/page-index';
+import { groupBy } from 'es-toolkit/array';
+import globalData from '@generated/globalData';
+const ensureTrailingSlash = (str: string) => {
+ return str.endsWith('/') ? str : `${str}/`;
+};
+export const AUTO_GENERATED_PAGE_PREFIX = '__auto_generated__';
+export const SidebarVersions = (
+ globalData['docusaurus-plugin-content-docs'].default as GlobalPluginData
+).versions.map((version) => {
+ const versionPath = ensureTrailingSlash(version.path);
+ const slashCount = version.path.split('/').length + 1;
+ const rdocs = version.docs.filter(
+ (doc) =>
+ doc.path.startsWith(version.path) && doc.path.replace(/\/$/, '').split('/').length === slashCount
+ );
+ return {
+ name: version.name,
+ rootPaths: rdocs.map((doc) => ensureTrailingSlash(doc.path)),
+ versionPath: versionPath
+ };
+});
+
+const getPathTree = (pagePath: string) => {
+ const parts = pagePath.split('/').filter((p) => p.length > 0);
+ return parts.map((_, idx) => {
+ return `/${parts.slice(0, idx + 1).join('/')}/`;
+ });
+};
+
+interface PagesIndex {
+ documentRoots: PageIndex[];
+}
export class PageStore extends iStore {
readonly root: RootStore;
@@ -13,11 +48,73 @@ export class PageStore extends iStore {
@observable accessor currentPageId: string | undefined = undefined;
@observable accessor runningTurtleScriptId: string | undefined = undefined;
+ @observable.ref accessor _pageIndex: PageIndex[] = [];
+
constructor(store: RootStore) {
super();
this.root = store;
}
+ get sidebarVersions() {
+ return SidebarVersions;
+ }
+
+ @computed
+ get landingPages() {
+ return this.pages.filter((page) => page.isLandingpage);
+ }
+
+ @action
+ loadPageIndex(force: boolean = false) {
+ if (!force && this._pageIndex.length > 0) {
+ return Promise.resolve();
+ }
+ return fetch(`${siteConfig.baseUrl}tdev-artifacts/page-progress-state/pageIndex.json`)
+ .then((res) => {
+ return res.json() as Promise;
+ })
+ .then(
+ action((data) => {
+ const grouped = groupBy(data.documentRoots, (dr) => `${dr.path}::${dr.page_id}`);
+ const pages = Object.values(grouped).map((docRootDescriptors) => {
+ const doc = docRootDescriptors[0]!;
+ const page = new Page(doc.page_id, doc.path, this);
+ docRootDescriptors
+ .filter((doc) => doc.position > 0)
+ .forEach((d) => page.addDocumentRootConfig(d.id, d));
+ return page;
+ });
+ const addedPaths = new Set(pages.map((p) => p.path));
+ const fullTree = new Set(pages.flatMap((p) => getPathTree(p.path)));
+ const missingPaths = Array.from(fullTree).filter((p) => !addedPaths.has(p));
+ missingPaths.forEach((path) => {
+ const page = new Page(`${AUTO_GENERATED_PAGE_PREFIX}${path}`, path, this);
+ pages.push(page);
+ });
+ this.pages.replace(pages);
+ this._pageIndex = data.documentRoots;
+ })
+ )
+ .then(() => {
+ this.loadTaskableDocuments();
+ })
+ .catch((err) => {
+ console.error('Failed to load page index', err);
+ });
+ }
+
+ @action
+ loadTaskableDocuments() {
+ this.pages.forEach((page) => {
+ page.taskableDocumentRootIds.forEach((id) => {
+ this.root.documentRootStore.loadInNextBatch(id, undefined, {
+ skipCreate: true,
+ documentRoot: 'addIfMissing'
+ });
+ });
+ });
+ }
+
find = computedFn(
function (this: PageStore, id?: string): Page | undefined {
if (!id) {
@@ -33,19 +130,13 @@ export class PageStore extends iStore {
return this.find(this.currentPageId);
}
- @action
- addToStore(page: Page) {
- const old = this.find(page.id);
- if (old) {
- this.pages.remove(old);
- }
- this.pages.push(page);
- }
-
@action
addIfNotPresent(id: string, makeCurrent?: boolean) {
if (!this.find(id)) {
- const page = new Page(id, this);
+ if (process.env.NODE_ENV !== 'production') {
+ this.loadPageIndex(true);
+ }
+ const page = new Page(id, window.location.pathname, this);
this.pages.push(page);
}
if (makeCurrent) {
@@ -61,7 +152,7 @@ export class PageStore extends iStore {
@action
loadAllDocuments(page: Page) {
return this.withAbortController(`load-all-${page.id}`, (sig) => {
- return apiAllDocuments([...page.documentRootIds], sig.signal).then(({ data }) => {
+ return apiAllDocuments([...page.documentRootConfigs.keys()], sig.signal).then(({ data }) => {
return transaction(() => {
return data.map((doc) => {
return this.root.documentStore.addToStore(doc);
diff --git a/src/stores/SocketDataStore.ts b/src/stores/SocketDataStore.ts
index dd61f4ea6..f7371789b 100644
--- a/src/stores/SocketDataStore.ts
+++ b/src/stores/SocketDataStore.ts
@@ -260,7 +260,7 @@ export class SocketDataStore extends iStore<'ping'> {
this.root.documentRootStore.addApiResultToStore(docRoot, {
meta: current.meta,
load: {
- documentRoot: true,
+ documentRoot: 'replace',
documents: NoneAccess.has(
current.permission
) /** only load the documents, when the current permission is None */,
diff --git a/src/stores/rootStore.ts b/src/stores/rootStore.ts
index c44cf01c7..821a873f9 100644
--- a/src/stores/rootStore.ts
+++ b/src/stores/rootStore.ts
@@ -51,6 +51,7 @@ export class RootStore {
@action
load(userId: string) {
+ this.pageStore.loadPageIndex();
this.sessionStore.setCurrentUserId(userId);
this.sessionStore.setIsLoggedIn(!!userId);
this.userStore.loadCurrent().then((user) => {
@@ -60,6 +61,7 @@ export class RootStore {
/**
* load stores
*/
+
this.userStore.load();
this.studentGroupStore.load();
this.cmsStore.initialize();
diff --git a/src/theme/DocItem/Content/index.tsx b/src/theme/DocItem/Content/index.tsx
index 12295d8d1..b8cb753cb 100644
--- a/src/theme/DocItem/Content/index.tsx
+++ b/src/theme/DocItem/Content/index.tsx
@@ -21,11 +21,7 @@ const ContentWrapper = observer((props: Props): React.ReactNode => {
};
}, [pageStore.current, location.pathname]);
- return (
- <>
-
- >
- );
+ return ;
});
export default ContentWrapper;
diff --git a/src/theme/DocSidebarItem/index.tsx b/src/theme/DocSidebarItem/index.tsx
new file mode 100644
index 000000000..29c85cbe5
--- /dev/null
+++ b/src/theme/DocSidebarItem/index.tsx
@@ -0,0 +1,34 @@
+import React, { type ReactNode } from 'react';
+import DocSidebarItem from '@theme-original/DocSidebarItem';
+import type DocSidebarItemType from '@theme/DocSidebarItem';
+import type { WrapperProps } from '@docusaurus/types';
+import { observer } from 'mobx-react-lite';
+import { useStore } from '@tdev-hooks/useStore';
+import clsx from 'clsx';
+import styles from './styles.module.scss';
+import TaskableState from '@tdev/page-index/components/TaskableState';
+const ensureTrailingSlash = (path?: string) => {
+ if (!path) {
+ return '';
+ }
+ return path.endsWith('/') ? path : path + '/';
+};
+
+type Props = WrapperProps;
+const DocSidebarItemWrapper = observer((props: Props): ReactNode => {
+ const pageStore = useStore('pageStore');
+ const path = props.item.type !== 'html' ? ensureTrailingSlash(props.item.href) : undefined;
+ const page = pageStore.pages.find((p) => p.path === path);
+ return (
+
+
+
+
+ );
+});
+
+export default DocSidebarItemWrapper;
diff --git a/src/theme/DocSidebarItem/styles.module.scss b/src/theme/DocSidebarItem/styles.module.scss
new file mode 100644
index 000000000..2df830a7a
--- /dev/null
+++ b/src/theme/DocSidebarItem/styles.module.scss
@@ -0,0 +1,20 @@
+.item {
+ position: relative;
+ .icon {
+ position: absolute;
+ right: 0.5em;
+ top: 0;
+ z-index: 0;
+ &.category {
+ right: 3em;
+ }
+ }
+ &:has(> .icon:hover) {
+ > li:has(+ .icon:hover) {
+ > a,
+ > div {
+ background: var(--ifm-menu-color-background-hover);
+ }
+ }
+ }
+}
diff --git a/src/theme/Root.tsx b/src/theme/Root.tsx
index c7be59b4f..3fba443d5 100644
--- a/src/theme/Root.tsx
+++ b/src/theme/Root.tsx
@@ -11,6 +11,10 @@ import LoggedOutOverlay from '@tdev-components/LoggedOutOverlay';
import { authClient } from '@tdev/auth-client';
import { getOfflineUser } from '@tdev-api/OfflineApi';
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
+import type { GlobalPluginData } from '@docusaurus/plugin-content-docs/client';
+import { usePluginData } from '@docusaurus/useGlobalData';
+import { Hashery } from 'hashery';
+const hasher = new Hashery();
const { OFFLINE_API, SENTRY_DSN } = siteConfig.customFields as {
SENTRY_DSN?: string;
OFFLINE_API?: boolean | 'memory' | 'indexedDB';
@@ -175,6 +179,45 @@ const FullscreenHandler = observer(() => {
}, []);
return null;
});
+let devHash: string | null = null;
+const DevGlobalDataTracker = observer(() => {
+ if (process.env.NODE_ENV === 'production') {
+ return null;
+ }
+ const pageStore = useStore('pageStore');
+ const global = usePluginData('docusaurus-plugin-content-docs', 'default') as GlobalPluginData;
+ React.useEffect(() => {
+ const controller = new AbortController();
+ const check = async () => {
+ const pIndex = await fetch(
+ `${siteConfig.baseUrl}tdev-artifacts/page-progress-state/pageIndex.json`,
+ { signal: controller.signal }
+ )
+ .then((res) => res.json())
+ .catch(() => null);
+ if (controller.signal.aborted || !pIndex) {
+ return;
+ }
+ const hash = await hasher.toHash(pIndex);
+ if (controller.signal.aborted) {
+ return;
+ }
+ if (!devHash) {
+ devHash = hash;
+ return;
+ }
+ if (devHash !== hash) {
+ devHash = hash;
+ pageStore.loadPageIndex(true);
+ }
+ };
+ check();
+ return () => {
+ controller.abort();
+ };
+ }, [global]);
+ return null;
+});
function Root({ children }: { children: React.ReactNode }) {
const { siteConfig } = useDocusaurusContext();
@@ -202,6 +245,7 @@ function Root({ children }: { children: React.ReactNode }) {
)}
{SENTRY_DSN && }
+
{children}
>
diff --git a/static/tdev-artifacts/.gitignore b/static/tdev-artifacts/.gitignore
new file mode 100644
index 000000000..94a2dd146
--- /dev/null
+++ b/static/tdev-artifacts/.gitignore
@@ -0,0 +1 @@
+*.json
\ No newline at end of file
diff --git a/tdev-website/docs/gallery/persistable-documents/answer/progress-state/index.mdx b/tdev-website/docs/gallery/persistable-documents/answer/progress-state/index.mdx
index 6b4d7091a..0d66574c1 100644
--- a/tdev-website/docs/gallery/persistable-documents/answer/progress-state/index.mdx
+++ b/tdev-website/docs/gallery/persistable-documents/answer/progress-state/index.mdx
@@ -51,7 +51,7 @@ Mit der Option `confirm` müssen die einzelnen Schritte bestätigt werden.
````md
import ProgressState from '@tdev-components/documents/ProgressState';
-
+
1. Hello Bello and Bella
2. World **bla** __foo__
@@ -63,7 +63,7 @@ import ProgressState from '@tdev-components/documents/ProgressState';
````
-
+
1. Hello Bello and Bella
2. World **bla** __foo__
@@ -83,7 +83,7 @@ Mit `float='right'` fährt der Bestätigungs-Button nach Rechts aus. Praktisch,
````md
import ProgressState from '@tdev-components/documents/ProgressState';
-
+
1. Hello Bello and Bella
2. World **bla** __foo__
@@ -95,7 +95,7 @@ import ProgressState from '@tdev-components/documents/ProgressState';
````
-
+
1. Hello Bello and Bella
2. World **bla** __foo__
diff --git a/tdev-website/docs/gallery/persistable-documents/answer/task-state/index.mdx b/tdev-website/docs/gallery/persistable-documents/answer/task-state/index.mdx
index 87a07e9d3..32bcab97f 100644
--- a/tdev-website/docs/gallery/persistable-documents/answer/task-state/index.mdx
+++ b/tdev-website/docs/gallery/persistable-documents/answer/task-state/index.mdx
@@ -69,7 +69,8 @@ TaskState kann nicht verändert werden, wenn `readonly` gesetzt wurde.
```md
```
-
-
+
+
diff --git a/updateSync/packageDocsSync/actions.ts b/updateSync/packageDocsSync/actions.ts
index b477d973c..e0c1182e0 100644
--- a/updateSync/packageDocsSync/actions.ts
+++ b/updateSync/packageDocsSync/actions.ts
@@ -27,6 +27,9 @@ const DEFAULT_README_CONFIG: Omit
'README.mdx',
'_category_.yml',
'_category_.json',
+ 'assets/',
+ 'images/',
+ 'img/',
'assets/**',
'images/**',
'img/**'
diff --git a/yarn.lock b/yarn.lock
index 372f5d1db..b4e17c3cd 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -157,34 +157,34 @@
"@babel/highlight" "^7.25.7"
picocolors "^1.0.0"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.28.6":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.28.6.tgz#72499312ec58b1e2245ba4a4f550c132be4982f7"
- integrity sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0":
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c"
+ integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==
dependencies:
"@babel/helper-validator-identifier" "^7.28.5"
js-tokens "^4.0.0"
picocolors "^1.1.1"
-"@babel/compat-data@^7.28.6":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.6.tgz#103f466803fa0f059e82ccac271475470570d74c"
- integrity sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==
+"@babel/compat-data@^7.28.6", "@babel/compat-data@^7.29.0":
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.0.tgz#00d03e8c0ac24dd9be942c5370990cbe1f17d88d"
+ integrity sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==
"@babel/core@^7.18.5", "@babel/core@^7.21.3", "@babel/core@^7.25.9":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.6.tgz#531bf883a1126e53501ba46eb3bb414047af507f"
- integrity sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.29.0.tgz#5286ad785df7f79d656e88ce86e650d16ca5f322"
+ integrity sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==
dependencies:
- "@babel/code-frame" "^7.28.6"
- "@babel/generator" "^7.28.6"
+ "@babel/code-frame" "^7.29.0"
+ "@babel/generator" "^7.29.0"
"@babel/helper-compilation-targets" "^7.28.6"
"@babel/helper-module-transforms" "^7.28.6"
"@babel/helpers" "^7.28.6"
- "@babel/parser" "^7.28.6"
+ "@babel/parser" "^7.29.0"
"@babel/template" "^7.28.6"
- "@babel/traverse" "^7.28.6"
- "@babel/types" "^7.28.6"
+ "@babel/traverse" "^7.29.0"
+ "@babel/types" "^7.29.0"
"@jridgewell/remapping" "^2.3.5"
convert-source-map "^2.0.0"
debug "^4.1.0"
@@ -192,13 +192,13 @@
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/generator@^7.25.9", "@babel/generator@^7.28.6":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.6.tgz#48dcc65d98fcc8626a48f72b62e263d25fc3c3f1"
- integrity sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==
+"@babel/generator@^7.25.9", "@babel/generator@^7.29.0":
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.0.tgz#4cba5a76b3c71d8be31761b03329d5dc7768447f"
+ integrity sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ==
dependencies:
- "@babel/parser" "^7.28.6"
- "@babel/types" "^7.28.6"
+ "@babel/parser" "^7.29.0"
+ "@babel/types" "^7.29.0"
"@jridgewell/gen-mapping" "^0.3.12"
"@jridgewell/trace-mapping" "^0.3.28"
jsesc "^3.0.2"
@@ -267,7 +267,7 @@
"@babel/traverse" "^7.28.5"
"@babel/types" "^7.28.5"
-"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.27.1", "@babel/helper-module-imports@^7.28.6":
+"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.28.6":
version "7.28.6"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz#60632cbd6ffb70b22823187201116762a03e2d5c"
integrity sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==
@@ -275,7 +275,7 @@
"@babel/traverse" "^7.28.6"
"@babel/types" "^7.28.6"
-"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3", "@babel/helper-module-transforms@^7.28.6":
+"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.6":
version "7.28.6"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz#9312d9d9e56edc35aeb6e95c25d4106b50b9eb1e"
integrity sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==
@@ -364,12 +364,12 @@
js-tokens "^4.0.0"
picocolors "^1.0.0"
-"@babel/parser@^7.25.4", "@babel/parser@^7.28.6":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.6.tgz#f01a8885b7fa1e56dd8a155130226cd698ef13fd"
- integrity sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==
+"@babel/parser@^7.25.4", "@babel/parser@^7.28.6", "@babel/parser@^7.29.0":
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.0.tgz#669ef345add7d057e92b7ed15f0bac07611831b6"
+ integrity sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==
dependencies:
- "@babel/types" "^7.28.6"
+ "@babel/types" "^7.29.0"
"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.28.5":
version "7.28.5"
@@ -465,14 +465,14 @@
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-async-generator-functions@^7.28.6":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.6.tgz#80cb86d3eaa2102e18ae90dd05ab87bdcad3877d"
- integrity sha512-9knsChgsMzBV5Yh3kkhrZNxH3oCYAfMBkNNaVN4cP2RVlFPe8wYdwwcnOsAbkdDoV9UjFtOXWrWB52M8W4jNeA==
+"@babel/plugin-transform-async-generator-functions@^7.29.0":
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz#63ed829820298f0bf143d5a4a68fb8c06ffd742f"
+ integrity sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==
dependencies:
"@babel/helper-plugin-utils" "^7.28.6"
"@babel/helper-remap-async-to-generator" "^7.27.1"
- "@babel/traverse" "^7.28.6"
+ "@babel/traverse" "^7.29.0"
"@babel/plugin-transform-async-to-generator@^7.28.6":
version "7.28.6"
@@ -556,10 +556,10 @@
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.28.6":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.28.6.tgz#e0c59ba54f1655dd682f2edf5f101b5910a8f6f3"
- integrity sha512-5suVoXjC14lUN6ZL9OLKIHCNVWCrqGqlmEp/ixdXjvgnEl/kauLvvMO/Xw9NyMc95Joj1AeLVPVMvibBgSoFlA==
+"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.29.0":
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz#8014b8a6cfd0e7b92762724443bf0d2400f26df1"
+ integrity sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==
dependencies:
"@babel/helper-create-regexp-features-plugin" "^7.28.5"
"@babel/helper-plugin-utils" "^7.28.6"
@@ -654,15 +654,15 @@
"@babel/helper-module-transforms" "^7.28.6"
"@babel/helper-plugin-utils" "^7.28.6"
-"@babel/plugin-transform-modules-systemjs@^7.28.5":
- version "7.28.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz#7439e592a92d7670dfcb95d0cbc04bd3e64801d2"
- integrity sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==
+"@babel/plugin-transform-modules-systemjs@^7.29.0":
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz#e458a95a17807c415924106a3ff188a3b8dee964"
+ integrity sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==
dependencies:
- "@babel/helper-module-transforms" "^7.28.3"
- "@babel/helper-plugin-utils" "^7.27.1"
+ "@babel/helper-module-transforms" "^7.28.6"
+ "@babel/helper-plugin-utils" "^7.28.6"
"@babel/helper-validator-identifier" "^7.28.5"
- "@babel/traverse" "^7.28.5"
+ "@babel/traverse" "^7.29.0"
"@babel/plugin-transform-modules-umd@^7.27.1":
version "7.27.1"
@@ -672,13 +672,13 @@
"@babel/helper-module-transforms" "^7.27.1"
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-named-capturing-groups-regex@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz#f32b8f7818d8fc0cc46ee20a8ef75f071af976e1"
- integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==
+"@babel/plugin-transform-named-capturing-groups-regex@^7.29.0":
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz#a26cd51e09c4718588fc4cce1c5d1c0152102d6a"
+ integrity sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
+ "@babel/helper-create-regexp-features-plugin" "^7.28.5"
+ "@babel/helper-plugin-utils" "^7.28.6"
"@babel/plugin-transform-new-target@^7.27.1":
version "7.27.1"
@@ -806,10 +806,10 @@
"@babel/helper-annotate-as-pure" "^7.27.1"
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-regenerator@^7.28.6":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.6.tgz#6ca2ed5b76cff87980f96eaacfc2ce833e8e7a1b"
- integrity sha512-eZhoEZHYQLL5uc1gS5e9/oTknS0sSSAtd5TkKMUp3J+S/CaUjagc0kOUPsEbDmMeva0nC3WWl4SxVY6+OBuxfw==
+"@babel/plugin-transform-regenerator@^7.29.0":
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz#dec237cec1b93330876d6da9992c4abd42c9d18b"
+ integrity sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==
dependencies:
"@babel/helper-plugin-utils" "^7.28.6"
@@ -829,12 +829,12 @@
"@babel/helper-plugin-utils" "^7.27.1"
"@babel/plugin-transform-runtime@^7.25.9":
- version "7.28.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz#ae3e21fbefe2831ebac04dfa6b463691696afe17"
- integrity sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz#a5fded13cc656700804bfd6e5ebd7fffd5266803"
+ integrity sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==
dependencies:
- "@babel/helper-module-imports" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
+ "@babel/helper-module-imports" "^7.28.6"
+ "@babel/helper-plugin-utils" "^7.28.6"
babel-plugin-polyfill-corejs2 "^0.4.14"
babel-plugin-polyfill-corejs3 "^0.13.0"
babel-plugin-polyfill-regenerator "^0.6.5"
@@ -919,11 +919,11 @@
"@babel/helper-plugin-utils" "^7.28.6"
"@babel/preset-env@^7.20.2", "@babel/preset-env@^7.25.9":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.6.tgz#b4586bb59d8c61be6c58997f4912e7ea6bd17178"
- integrity sha512-GaTI4nXDrs7l0qaJ6Rg06dtOXTBCG6TMDB44zbqofCIC4PqC7SEvmFFtpxzCDw9W5aJ7RKVshgXTLvLdBFV/qw==
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.29.0.tgz#c55db400c515a303662faaefd2d87e796efa08d0"
+ integrity sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==
dependencies:
- "@babel/compat-data" "^7.28.6"
+ "@babel/compat-data" "^7.29.0"
"@babel/helper-compilation-targets" "^7.28.6"
"@babel/helper-plugin-utils" "^7.28.6"
"@babel/helper-validator-option" "^7.27.1"
@@ -937,7 +937,7 @@
"@babel/plugin-syntax-import-attributes" "^7.28.6"
"@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
"@babel/plugin-transform-arrow-functions" "^7.27.1"
- "@babel/plugin-transform-async-generator-functions" "^7.28.6"
+ "@babel/plugin-transform-async-generator-functions" "^7.29.0"
"@babel/plugin-transform-async-to-generator" "^7.28.6"
"@babel/plugin-transform-block-scoped-functions" "^7.27.1"
"@babel/plugin-transform-block-scoping" "^7.28.6"
@@ -948,7 +948,7 @@
"@babel/plugin-transform-destructuring" "^7.28.5"
"@babel/plugin-transform-dotall-regex" "^7.28.6"
"@babel/plugin-transform-duplicate-keys" "^7.27.1"
- "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.28.6"
+ "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.29.0"
"@babel/plugin-transform-dynamic-import" "^7.27.1"
"@babel/plugin-transform-explicit-resource-management" "^7.28.6"
"@babel/plugin-transform-exponentiation-operator" "^7.28.6"
@@ -961,9 +961,9 @@
"@babel/plugin-transform-member-expression-literals" "^7.27.1"
"@babel/plugin-transform-modules-amd" "^7.27.1"
"@babel/plugin-transform-modules-commonjs" "^7.28.6"
- "@babel/plugin-transform-modules-systemjs" "^7.28.5"
+ "@babel/plugin-transform-modules-systemjs" "^7.29.0"
"@babel/plugin-transform-modules-umd" "^7.27.1"
- "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.29.0"
"@babel/plugin-transform-new-target" "^7.27.1"
"@babel/plugin-transform-nullish-coalescing-operator" "^7.28.6"
"@babel/plugin-transform-numeric-separator" "^7.28.6"
@@ -975,7 +975,7 @@
"@babel/plugin-transform-private-methods" "^7.28.6"
"@babel/plugin-transform-private-property-in-object" "^7.28.6"
"@babel/plugin-transform-property-literals" "^7.27.1"
- "@babel/plugin-transform-regenerator" "^7.28.6"
+ "@babel/plugin-transform-regenerator" "^7.29.0"
"@babel/plugin-transform-regexp-modifiers" "^7.28.6"
"@babel/plugin-transform-reserved-words" "^7.27.1"
"@babel/plugin-transform-shorthand-properties" "^7.27.1"
@@ -988,10 +988,10 @@
"@babel/plugin-transform-unicode-regex" "^7.27.1"
"@babel/plugin-transform-unicode-sets-regex" "^7.28.6"
"@babel/preset-modules" "0.1.6-no-external-plugins"
- babel-plugin-polyfill-corejs2 "^0.4.14"
- babel-plugin-polyfill-corejs3 "^0.13.0"
- babel-plugin-polyfill-regenerator "^0.6.5"
- core-js-compat "^3.43.0"
+ babel-plugin-polyfill-corejs2 "^0.4.15"
+ babel-plugin-polyfill-corejs3 "^0.14.0"
+ babel-plugin-polyfill-regenerator "^0.6.6"
+ core-js-compat "^3.48.0"
semver "^6.3.1"
"@babel/preset-modules@0.1.6-no-external-plugins":
@@ -1027,11 +1027,11 @@
"@babel/plugin-transform-typescript" "^7.28.5"
"@babel/runtime-corejs3@^7.25.9":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.28.6.tgz#f1e4a0da50f4856ceec1bb51c83f8ed0b202ed12"
- integrity sha512-kz2fAQ5UzjV7X7D3ySxmj3vRq89dTpqOZWv76Z6pNPztkwb/0Yj1Mtx1xFrYj6mbIHysxtBot8J4o0JLCblcFw==
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.29.0.tgz#56cd28ec515364482afeb880b476936a702461b9"
+ integrity sha512-TgUkdp71C9pIbBcHudc+gXZnihEDOjUAmXO1VO4HHGES7QLZcShR0stfKIxLSNIYx2fqhmJChOjm/wkF8wv4gA==
dependencies:
- core-js-pure "^3.43.0"
+ core-js-pure "^3.48.0"
"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.25.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7":
version "7.28.6"
@@ -1047,23 +1047,23 @@
"@babel/parser" "^7.28.6"
"@babel/types" "^7.28.6"
-"@babel/traverse@^7.25.9", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.5", "@babel/traverse@^7.28.6":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.6.tgz#871ddc79a80599a5030c53b1cc48cbe3a5583c2e"
- integrity sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==
+"@babel/traverse@^7.25.9", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.5", "@babel/traverse@^7.28.6", "@babel/traverse@^7.29.0":
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.0.tgz#f323d05001440253eead3c9c858adbe00b90310a"
+ integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==
dependencies:
- "@babel/code-frame" "^7.28.6"
- "@babel/generator" "^7.28.6"
+ "@babel/code-frame" "^7.29.0"
+ "@babel/generator" "^7.29.0"
"@babel/helper-globals" "^7.28.0"
- "@babel/parser" "^7.28.6"
+ "@babel/parser" "^7.29.0"
"@babel/template" "^7.28.6"
- "@babel/types" "^7.28.6"
+ "@babel/types" "^7.29.0"
debug "^4.3.1"
-"@babel/types@^7.21.3", "@babel/types@^7.25.4", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.5", "@babel/types@^7.28.6", "@babel/types@^7.4.4":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.6.tgz#c3e9377f1b155005bcc4c46020e7e394e13089df"
- integrity sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==
+"@babel/types@^7.21.3", "@babel/types@^7.25.4", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.5", "@babel/types@^7.28.6", "@babel/types@^7.29.0", "@babel/types@^7.4.4":
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7"
+ integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==
dependencies:
"@babel/helper-string-parser" "^7.27.1"
"@babel/helper-validator-identifier" "^7.28.5"
@@ -1073,27 +1073,32 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
-"@better-auth/core@1.4.17":
- version "1.4.17"
- resolved "https://registry.yarnpkg.com/@better-auth/core/-/core-1.4.17.tgz#975fd8cb2029835f50958cde28154d8fa62dc367"
- integrity sha512-WSaEQDdUO6B1CzAmissN6j0lx9fM9lcslEYzlApB5UzFaBeAOHNUONTdglSyUs6/idiZBoRvt0t/qMXCgIU8ug==
+"@better-auth/core@1.4.18":
+ version "1.4.18"
+ resolved "https://registry.yarnpkg.com/@better-auth/core/-/core-1.4.18.tgz#d424ccbf2e7754b7a7581c841dd64811b2700dd4"
+ integrity sha512-q+awYgC7nkLEBdx2sW0iJjkzgSHlIxGnOpsN1r/O1+a4m7osJNHtfK2mKJSL1I+GfNyIlxJF8WvD/NLuYMpmcg==
dependencies:
"@standard-schema/spec" "^1.0.0"
zod "^4.3.5"
-"@better-auth/telemetry@1.4.17":
- version "1.4.17"
- resolved "https://registry.yarnpkg.com/@better-auth/telemetry/-/telemetry-1.4.17.tgz#1929f103807fb9010342cbcaf32e73a45a267830"
- integrity sha512-R1BC4e/bNjQbXu7lG6ubpgmsPj7IMqky5DvMlzAtnAJWJhh99pMh/n6w5gOHa0cqDZgEAuj75IPTxv+q3YiInA==
+"@better-auth/telemetry@1.4.18":
+ version "1.4.18"
+ resolved "https://registry.yarnpkg.com/@better-auth/telemetry/-/telemetry-1.4.18.tgz#9290df1b20c5376cb6820ae6704f682d7c676a4e"
+ integrity sha512-e5rDF8S4j3Um/0LIVATL2in9dL4lfO2fr2v1Wio4qTMRbfxqnUDTa+6SZtwdeJrbc4O+a3c+IyIpjG9Q/6GpfQ==
dependencies:
"@better-auth/utils" "0.3.0"
"@better-fetch/fetch" "1.1.21"
-"@better-auth/utils@0.3.0", "@better-auth/utils@^0.3.0":
+"@better-auth/utils@0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@better-auth/utils/-/utils-0.3.0.tgz#066c5ce82bf393421547dd887b14a6899310003d"
integrity sha512-W+Adw6ZA6mgvnSnhOki270rwJ42t4XzSK6YWGF//BbVXL6SwCLWfyzBc1lN2m/4RM28KubdBKQ4X5VMoLRNPQw==
+"@better-auth/utils@^0.3.0":
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/@better-auth/utils/-/utils-0.3.1.tgz#ffa4de03b9aef33df536fd19f36a24fa9c9942c0"
+ integrity sha512-+CGp4UmZSUrHHnpHhLPYu6cV+wSUSvVbZbNykxhUDocpVNTo9uFFxw/NqJlh1iC4wQ9HKKWGCKuZ5wUgS0v6Kg==
+
"@better-fetch/fetch@1.1.21", "@better-fetch/fetch@^1.1.4":
version "1.1.21"
resolved "https://registry.yarnpkg.com/@better-fetch/fetch/-/fetch-1.1.21.tgz#2b4990e73c46b0ae5e66b247083610ff8c37bddc"
@@ -1110,9 +1115,9 @@
integrity sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==
"@braintree/sanitize-url@^7.1.1":
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-7.1.1.tgz#15e19737d946559289b915e5dad3b4c28407735e"
- integrity sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz#ca2035b0fefe956a8676ff0c69af73e605fcd81f"
+ integrity sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==
"@chevrotain/cst-dts-gen@11.0.3":
version "11.0.3"
@@ -1450,9 +1455,9 @@
"@codemirror/language" "^6.0.0"
"@codemirror/lint@^6.0.0":
- version "6.9.2"
- resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.9.2.tgz#09ed0aedec13381c9e36e1ac5d126027740c3ef4"
- integrity sha512-sv3DylBiIyi+xKwRCJAAsBZZZWo82shJ/RTMymLabAdtbkV5cSKwWDeCgtUq3v8flTaXS2y1kKkICuRYtUswyQ==
+ version "6.9.3"
+ resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.9.3.tgz#eee48c9d60ea63582eee1ebd6b4ae65102eb8782"
+ integrity sha512-y3YkYhdnhjDBAe0VIA0c4wVoFOvnp8CnAvfLqi0TqotIv92wIlAAP7HELOpLBsKwjAX6W92rSflA6an/2zBvXw==
dependencies:
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.35.0"
@@ -1486,9 +1491,9 @@
"@marijn/find-cluster-break" "^1.0.0"
"@codemirror/view@^6.0.0", "@codemirror/view@^6.17.0", "@codemirror/view@^6.23.0", "@codemirror/view@^6.27.0", "@codemirror/view@^6.35.0", "@codemirror/view@^6.37.0", "@codemirror/view@^6.7.1":
- version "6.39.11"
- resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.39.11.tgz#200aebef2074bfbbb7a3d5f0644c1b560d876b39"
- integrity sha512-bWdeR8gWM87l4DB/kYSF9A+dVackzDb/V56Tq7QVrQ7rn86W0rgZFtlL3g3pem6AeGcb9NQNoy3ao4WpW4h5tQ==
+ version "6.39.12"
+ resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.39.12.tgz#c61961d7107b44bd233647fc9e33d96309d627c9"
+ integrity sha512-f+/VsHVn/kOA9lltk/GFzuYwVVAKmOnNjxbrhkk3tPHntFqjWeI2TbIXx006YkBkqC10wZ4NsnWXCQiFPeAISQ==
dependencies:
"@codemirror/state" "^6.5.0"
crelt "^1.0.6"
@@ -2936,34 +2941,34 @@
lodash.isundefined "^3.0.1"
lodash.uniq "^4.5.0"
-"@floating-ui/core@^1.7.3":
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.3.tgz#462d722f001e23e46d86fd2bd0d21b7693ccb8b7"
- integrity sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==
+"@floating-ui/core@^1.7.4":
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.4.tgz#4a006a6e01565c0f87ba222c317b056a2cffd2f4"
+ integrity sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==
dependencies:
"@floating-ui/utils" "^0.2.10"
-"@floating-ui/dom@^1.0.1", "@floating-ui/dom@^1.7.4":
- version "1.7.4"
- resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.4.tgz#ee667549998745c9c3e3e84683b909c31d6c9a77"
- integrity sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==
+"@floating-ui/dom@^1.0.1", "@floating-ui/dom@^1.7.5":
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.5.tgz#60bfc83a4d1275b2a90db76bf42ca2a5f2c231c2"
+ integrity sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==
dependencies:
- "@floating-ui/core" "^1.7.3"
+ "@floating-ui/core" "^1.7.4"
"@floating-ui/utils" "^0.2.10"
-"@floating-ui/react-dom@^2.0.0", "@floating-ui/react-dom@^2.1.6":
- version "2.1.6"
- resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.6.tgz#189f681043c1400561f62972f461b93f01bf2231"
- integrity sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==
+"@floating-ui/react-dom@^2.0.0", "@floating-ui/react-dom@^2.1.7":
+ version "2.1.7"
+ resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.7.tgz#529475cc16ee4976ba3387968117e773d9aa703e"
+ integrity sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg==
dependencies:
- "@floating-ui/dom" "^1.7.4"
+ "@floating-ui/dom" "^1.7.5"
"@floating-ui/react@^0.27.8":
- version "0.27.16"
- resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.27.16.tgz#6e485b5270b7a3296fdc4d0faf2ac9abf955a2f7"
- integrity sha512-9O8N4SeG2z++TSM8QA/KTeKFBVCNEz/AGS7gWPJf6KFRzmRWixFRnCnkPHRDwSVZW6QPDO6uT0P2SpWNKCc9/g==
+ version "0.27.17"
+ resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.27.17.tgz#f1d74e01cf10016825a4167b3b0139a4d5af118a"
+ integrity sha512-LGVZKHwmWGg6MRHjLLgsfyaX2y2aCNgnD1zT/E6B+/h+vxg+nIJUqHPAlTzsHDyqdgEpJ1Np5kxWuFEErXzoGg==
dependencies:
- "@floating-ui/react-dom" "^2.1.6"
+ "@floating-ui/react-dom" "^2.1.7"
"@floating-ui/utils" "^0.2.10"
tabbable "^6.0.0"
@@ -2985,9 +2990,9 @@
"@hapi/hoek" "^9.0.0"
"@hpcc-js/wasm-graphviz@^1.7.0":
- version "1.20.0"
- resolved "https://registry.yarnpkg.com/@hpcc-js/wasm-graphviz/-/wasm-graphviz-1.20.0.tgz#26fcdc5742ef9331b81caa3c59df7a8c02bd2294"
- integrity sha512-29nwKSkoKoXBHPqvimS2OmWUTojU148CFMszANgWvVOh76jbRFh1ZxXAiSzVWbtQcYFcb39T8tDEAXtUjyVlMA==
+ version "1.21.0"
+ resolved "https://registry.yarnpkg.com/@hpcc-js/wasm-graphviz/-/wasm-graphviz-1.21.0.tgz#1b7dd35aae704cf063a0b2089ea5b63efc5b798a"
+ integrity sha512-BQ06v/foSTxtwUyIdJYRz+S++/fHQuPVsFmX+pI3G66cANi1mQvsgToaN5deZ6ALEDUHsfHVMYlowNiimoET5g==
"@iconify/types@^2.0.0":
version "2.0.0"
@@ -3457,9 +3462,9 @@
lexical "0.35.0"
"@lezer/common@^1.0.0", "@lezer/common@^1.0.2", "@lezer/common@^1.1.0", "@lezer/common@^1.2.0", "@lezer/common@^1.2.1", "@lezer/common@^1.3.0", "@lezer/common@^1.5.0":
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.5.0.tgz#db227b596260189b67ba286387d9dc81fb07c70b"
- integrity sha512-PNGcolp9hr4PJdXR4ix7XtixDrClScvtSCYW3rQG106oVMOOI+jFb+0+J3mbeL/53g1Zd6s0kJzaw6Ri68GmAA==
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.5.1.tgz#6e8c114ff5d36a41148e146a253734d3bb8807d3"
+ integrity sha512-6YRVG9vBkaY7p1IVxL4s44n5nUnaNnGM2/AckNgYOnxTG2kWh1vR8BMxPseWPjRNpb5VtXnMpeYAEAADoRV1Iw==
"@lezer/cpp@^1.0.0":
version "1.1.5"
@@ -3532,9 +3537,9 @@
"@lezer/lr" "^1.0.0"
"@lezer/lr@^1.0.0", "@lezer/lr@^1.1.0", "@lezer/lr@^1.3.0", "@lezer/lr@^1.3.1", "@lezer/lr@^1.3.3", "@lezer/lr@^1.4.0":
- version "1.4.7"
- resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.4.7.tgz#01a38556652bf73ffbf3af4a88b91e4c056cc6ee"
- integrity sha512-wNIFWdSUfX9Jc6ePMzxSPVgTVB4EOfDIwLQLWASyiUdHKaMsiilj9bYiGkGQCKVodd0x6bgQCV207PILGFCF9Q==
+ version "1.4.8"
+ resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.4.8.tgz#333de9bc9346057323ff09beb4cda47ccc38a498"
+ integrity sha512-bPWa0Pgx69ylNlMlPvBPryqeLYQjyJjqPx+Aupm5zydLIF3NE+6MMLT8Yi23Bd9cif9VS00aUebn+6fDIGBcDA==
dependencies:
"@lezer/common" "^1.0.0"
@@ -3592,9 +3597,9 @@
"@lezer/lr" "^1.0.0"
"@lezer/yaml@^1.0.0":
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/@lezer/yaml/-/yaml-1.0.3.tgz#b23770ab42b390056da6b187d861b998fd60b1ff"
- integrity sha512-GuBLekbw9jDBDhGur82nuwkxKQ+a3W5H0GfaAthDXcAu+XdpS43VlnxA9E9hllkpSP5ellRDKjLLj7Lu9Wr6xA==
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@lezer/yaml/-/yaml-1.0.4.tgz#66a622188f1984a71d34506759b5807699043589"
+ integrity sha512-2lrrHqxalACEbxIbsjhqGpSW8kWpUKuY6RHgnSAFZa6qK62wvnPxA8hGOwOoDbwHcOFs5M4o27mjGu+P7TvBmw==
dependencies:
"@lezer/common" "^1.2.0"
"@lezer/highlight" "^1.0.0"
@@ -3737,48 +3742,48 @@
dependencies:
langium "3.3.1"
-"@module-federation/error-codes@0.21.4":
- version "0.21.4"
- resolved "https://registry.yarnpkg.com/@module-federation/error-codes/-/error-codes-0.21.4.tgz#037c15c641e67c2c5465d2d3f442724395691f55"
- integrity sha512-ClpL5MereWNXh+EgDjz7w4RrC1JlisQTvXDa1gLxpviHafzNDfdViVmuhi9xXVuj+EYo8KU70Y999KHhk9424Q==
+"@module-federation/error-codes@0.22.0":
+ version "0.22.0"
+ resolved "https://registry.yarnpkg.com/@module-federation/error-codes/-/error-codes-0.22.0.tgz#31ccc990dc240d73912ba7bd001f7e35ac751992"
+ integrity sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==
-"@module-federation/runtime-core@0.21.4":
- version "0.21.4"
- resolved "https://registry.yarnpkg.com/@module-federation/runtime-core/-/runtime-core-0.21.4.tgz#3254ee1be28255f9b115fe02d462672ae0f66584"
- integrity sha512-SGpmoOLGNxZofpTOk6Lxb2ewaoz5wMi93AFYuuJB04HTVcngEK+baNeUZ2D/xewrqNIJoMY6f5maUjVfIIBPUA==
+"@module-federation/runtime-core@0.22.0":
+ version "0.22.0"
+ resolved "https://registry.yarnpkg.com/@module-federation/runtime-core/-/runtime-core-0.22.0.tgz#7321ec792bb7d1d22bee6162ec43564b769d2a3c"
+ integrity sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==
dependencies:
- "@module-federation/error-codes" "0.21.4"
- "@module-federation/sdk" "0.21.4"
+ "@module-federation/error-codes" "0.22.0"
+ "@module-federation/sdk" "0.22.0"
-"@module-federation/runtime-tools@0.21.4":
- version "0.21.4"
- resolved "https://registry.yarnpkg.com/@module-federation/runtime-tools/-/runtime-tools-0.21.4.tgz#dbaf6d0a21ee72fc343f0d9dc50eeabb5fd9f5ba"
- integrity sha512-RzFKaL0DIjSmkn76KZRfzfB6dD07cvID84950jlNQgdyoQFUGkqD80L6rIpVCJTY/R7LzR3aQjHnoqmq4JPo3w==
+"@module-federation/runtime-tools@0.22.0":
+ version "0.22.0"
+ resolved "https://registry.yarnpkg.com/@module-federation/runtime-tools/-/runtime-tools-0.22.0.tgz#36f2a7cb267af208a9d1a237fe9a71b4bf31431e"
+ integrity sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==
dependencies:
- "@module-federation/runtime" "0.21.4"
- "@module-federation/webpack-bundler-runtime" "0.21.4"
+ "@module-federation/runtime" "0.22.0"
+ "@module-federation/webpack-bundler-runtime" "0.22.0"
-"@module-federation/runtime@0.21.4":
- version "0.21.4"
- resolved "https://registry.yarnpkg.com/@module-federation/runtime/-/runtime-0.21.4.tgz#f07cc2dd9786b26d3af5440793693b953a818b97"
- integrity sha512-wgvGqryurVEvkicufJmTG0ZehynCeNLklv8kIk5BLIsWYSddZAE+xe4xov1kgH5fIJQAoQNkRauFFjVNlHoAkA==
+"@module-federation/runtime@0.22.0":
+ version "0.22.0"
+ resolved "https://registry.yarnpkg.com/@module-federation/runtime/-/runtime-0.22.0.tgz#f789c9ef40d846d110711c8221ecc0ad938d43d8"
+ integrity sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==
dependencies:
- "@module-federation/error-codes" "0.21.4"
- "@module-federation/runtime-core" "0.21.4"
- "@module-federation/sdk" "0.21.4"
+ "@module-federation/error-codes" "0.22.0"
+ "@module-federation/runtime-core" "0.22.0"
+ "@module-federation/sdk" "0.22.0"
-"@module-federation/sdk@0.21.4":
- version "0.21.4"
- resolved "https://registry.yarnpkg.com/@module-federation/sdk/-/sdk-0.21.4.tgz#4b4757b527d9a2758d01c5aadec7963348f43385"
- integrity sha512-tzvhOh/oAfX++6zCDDxuvioHY4Jurf8vcfoCbKFxusjmyKr32GPbwFDazUP+OPhYCc3dvaa9oWU6X/qpUBLfJw==
+"@module-federation/sdk@0.22.0":
+ version "0.22.0"
+ resolved "https://registry.yarnpkg.com/@module-federation/sdk/-/sdk-0.22.0.tgz#6ad4c1de85a900c3c80ff26cb87cce253e3a2770"
+ integrity sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==
-"@module-federation/webpack-bundler-runtime@0.21.4":
- version "0.21.4"
- resolved "https://registry.yarnpkg.com/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.21.4.tgz#d8651c5bb8e7bc999300f32f0e11358a6acd0501"
- integrity sha512-dusmR3uPnQh9u9ChQo3M+GLOuGFthfvnh7WitF/a1eoeTfRmXqnMFsXtZCUK+f/uXf+64874Zj/bhAgbBcVHZA==
+"@module-federation/webpack-bundler-runtime@0.22.0":
+ version "0.22.0"
+ resolved "https://registry.yarnpkg.com/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.22.0.tgz#dcbe8f972d722fe278e6a7c21988d4bee53d401d"
+ integrity sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==
dependencies:
- "@module-federation/runtime" "0.21.4"
- "@module-federation/sdk" "0.21.4"
+ "@module-federation/runtime" "0.22.0"
+ "@module-federation/sdk" "0.22.0"
"@napi-rs/wasm-runtime@1.0.7":
version "1.0.7"
@@ -4817,130 +4822,130 @@
resolved "https://registry.yarnpkg.com/@react-hook/passive-layout-effect/-/passive-layout-effect-1.2.1.tgz#c06dac2d011f36d61259aa1c6df4f0d5e28bc55e"
integrity sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg==
-"@rollup/rollup-android-arm-eabi@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.56.0.tgz#067cfcd81f1c1bfd92aefe3ad5ef1523549d5052"
- integrity sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==
-
-"@rollup/rollup-android-arm64@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.56.0.tgz#85e39a44034d7d4e4fee2a1616f0bddb85a80517"
- integrity sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==
-
-"@rollup/rollup-darwin-arm64@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.56.0.tgz#17d92fe98f2cc277b91101eb1528b7c0b6c00c54"
- integrity sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==
-
-"@rollup/rollup-darwin-x64@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.56.0.tgz#89ae6c66b1451609bd1f297da9384463f628437d"
- integrity sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==
-
-"@rollup/rollup-freebsd-arm64@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.56.0.tgz#cdbdb9947b26e76c188a31238c10639347413628"
- integrity sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==
-
-"@rollup/rollup-freebsd-x64@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.56.0.tgz#9b1458d07b6e040be16ee36d308a2c9520f7f7cc"
- integrity sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==
-
-"@rollup/rollup-linux-arm-gnueabihf@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.56.0.tgz#1d50ded7c965d5f125f5832c971ad5b287befef7"
- integrity sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==
-
-"@rollup/rollup-linux-arm-musleabihf@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.56.0.tgz#53597e319b7e65990d3bc2a5048097384814c179"
- integrity sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==
-
-"@rollup/rollup-linux-arm64-gnu@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.56.0.tgz#597002909dec198ca4bdccb25f043d32db3d6283"
- integrity sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==
-
-"@rollup/rollup-linux-arm64-musl@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.56.0.tgz#286f0e0f799545ce288bdc5a7c777261fcba3d54"
- integrity sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==
-
-"@rollup/rollup-linux-loong64-gnu@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.56.0.tgz#1fab07fa1a4f8d3697735b996517f1bae0ba101b"
- integrity sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==
-
-"@rollup/rollup-linux-loong64-musl@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.56.0.tgz#efc2cb143d6c067f95205482afb177f78ed9ea3d"
- integrity sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==
-
-"@rollup/rollup-linux-ppc64-gnu@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.56.0.tgz#e8de8bd3463f96b92b7dfb7f151fd80ffe8a937c"
- integrity sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==
-
-"@rollup/rollup-linux-ppc64-musl@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.56.0.tgz#8c508fe28a239da83b3a9da75bcf093186e064b4"
- integrity sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==
-
-"@rollup/rollup-linux-riscv64-gnu@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.56.0.tgz#ff6d51976e0830732880770a9e18553136b8d92b"
- integrity sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==
-
-"@rollup/rollup-linux-riscv64-musl@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.56.0.tgz#325fb35eefc7e81d75478318f0deee1e4a111493"
- integrity sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==
-
-"@rollup/rollup-linux-s390x-gnu@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.56.0.tgz#37410fabb5d3ba4ad34abcfbe9ba9b6288413f30"
- integrity sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==
-
-"@rollup/rollup-linux-x64-gnu@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.56.0.tgz#8ef907a53b2042068fc03fcc6a641e2b02276eca"
- integrity sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==
-
-"@rollup/rollup-linux-x64-musl@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.56.0.tgz#61b9ba09ea219e0174b3f35a6ad2afc94bdd5662"
- integrity sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==
-
-"@rollup/rollup-openbsd-x64@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.56.0.tgz#fc4e54133134c1787d0b016ffdd5aeb22a5effd3"
- integrity sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==
-
-"@rollup/rollup-openharmony-arm64@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.56.0.tgz#959ae225b1eeea0cc5b7c9f88e4834330fb6cd09"
- integrity sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==
-
-"@rollup/rollup-win32-arm64-msvc@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.56.0.tgz#842acd38869fa1cbdbc240c76c67a86f93444c27"
- integrity sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==
-
-"@rollup/rollup-win32-ia32-msvc@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.56.0.tgz#7ab654def4042df44cb29f8ed9d5044e850c66d5"
- integrity sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==
-
-"@rollup/rollup-win32-x64-gnu@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.56.0.tgz#7426cdec1b01d2382ffd5cda83cbdd1c8efb3ca6"
- integrity sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==
-
-"@rollup/rollup-win32-x64-msvc@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.56.0.tgz#9eec0212732a432c71bde0350bc40b673d15b2db"
- integrity sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==
+"@rollup/rollup-android-arm-eabi@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz#add5e608d4e7be55bc3ca3d962490b8b1890e088"
+ integrity sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==
+
+"@rollup/rollup-android-arm64@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz#10bd0382b73592beee6e9800a69401a29da625c4"
+ integrity sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==
+
+"@rollup/rollup-darwin-arm64@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz#1e99ab04c0b8c619dd7bbde725ba2b87b55bfd81"
+ integrity sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==
+
+"@rollup/rollup-darwin-x64@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz#69e741aeb2839d2e8f0da2ce7a33d8bd23632423"
+ integrity sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==
+
+"@rollup/rollup-freebsd-arm64@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz#3736c232a999c7bef7131355d83ebdf9651a0839"
+ integrity sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==
+
+"@rollup/rollup-freebsd-x64@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz#227dcb8f466684070169942bd3998901c9bfc065"
+ integrity sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==
+
+"@rollup/rollup-linux-arm-gnueabihf@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz#ba004b30df31b724f99ce66e7128248bea17cb0c"
+ integrity sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==
+
+"@rollup/rollup-linux-arm-musleabihf@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz#6929f3e07be6b6da5991f63c6b68b3e473d0a65a"
+ integrity sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==
+
+"@rollup/rollup-linux-arm64-gnu@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz#06e89fd4a25d21fe5575d60b6f913c0e65297bfa"
+ integrity sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==
+
+"@rollup/rollup-linux-arm64-musl@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz#fddabf395b90990d5194038e6cd8c00156ed8ac0"
+ integrity sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==
+
+"@rollup/rollup-linux-loong64-gnu@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz#04c10bb764bbf09a3c1bd90432e92f58d6603c36"
+ integrity sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==
+
+"@rollup/rollup-linux-loong64-musl@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz#f2450361790de80581d8687ea19142d8a4de5c0f"
+ integrity sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==
+
+"@rollup/rollup-linux-ppc64-gnu@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz#0474f4667259e407eee1a6d38e29041b708f6a30"
+ integrity sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==
+
+"@rollup/rollup-linux-ppc64-musl@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz#9f32074819eeb1ddbe51f50ea9dcd61a6745ec33"
+ integrity sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==
+
+"@rollup/rollup-linux-riscv64-gnu@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz#3fdb9d4b1e29fb6b6a6da9f15654d42eb77b99b2"
+ integrity sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==
+
+"@rollup/rollup-linux-riscv64-musl@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz#1de780d64e6be0e3e8762035c22e0d8ea68df8ed"
+ integrity sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==
+
+"@rollup/rollup-linux-s390x-gnu@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz#1da022ffd2d9e9f0fd8344ea49e113001fbcac64"
+ integrity sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==
+
+"@rollup/rollup-linux-x64-gnu@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz#78c16eef9520bd10e1ea7a112593bb58e2842622"
+ integrity sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==
+
+"@rollup/rollup-linux-x64-musl@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz#a7598591b4d9af96cb3167b50a5bf1e02dfea06c"
+ integrity sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==
+
+"@rollup/rollup-openbsd-x64@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz#c51d48c07cd6c466560e5bed934aec688ce02614"
+ integrity sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==
+
+"@rollup/rollup-openharmony-arm64@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz#f09921d0b2a0b60afbf3586d2a7a7f208ba6df17"
+ integrity sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==
+
+"@rollup/rollup-win32-arm64-msvc@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz#08d491717135376e4a99529821c94ecd433d5b36"
+ integrity sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==
+
+"@rollup/rollup-win32-ia32-msvc@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz#b0c12aac1104a8b8f26a5e0098e5facbb3e3964a"
+ integrity sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==
+
+"@rollup/rollup-win32-x64-gnu@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz#b9cccef26f5e6fdc013bf3c0911a3c77428509d0"
+ integrity sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==
+
+"@rollup/rollup-win32-x64-msvc@4.57.1":
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz#a03348e7b559c792b6277cc58874b89ef46e1e72"
+ integrity sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==
"@rsdoctor/client@0.4.13":
version "0.4.13"
@@ -5057,81 +5062,81 @@
fs-extra "^11.1.1"
lodash "^4.17.21"
-"@rspack/binding-darwin-arm64@1.6.5":
- version "1.6.5"
- resolved "https://registry.yarnpkg.com/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.6.5.tgz#c038886401ec0ef3128e3b4a9ddb7efee063c469"
- integrity sha512-DaAJTlaenqZIqFqIYcitn0SzjJ7WpC9234JpiSDZdRyXii9qJJiToVwxSPY/CmkrP0201+aC4pzN4tI9T0Ummw==
-
-"@rspack/binding-darwin-x64@1.6.5":
- version "1.6.5"
- resolved "https://registry.yarnpkg.com/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.6.5.tgz#a1527e656ac9cdace2f42bbec40a70d266e40d27"
- integrity sha512-fPVfp7W/GMbHayb5hbefiMI30JxlsqPexOItHGtufHmTCrNne1aHmApspyUZIUUxG36oDRHuGPnfh+IQbHR6+g==
-
-"@rspack/binding-linux-arm64-gnu@1.6.5":
- version "1.6.5"
- resolved "https://registry.yarnpkg.com/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.6.5.tgz#c0fb16502861ec85d8faac5a9a44e5e738d294a9"
- integrity sha512-K68YDoV2e4s+nlrKZxgF0HehiiRwOAGgZFUwJNRMZ7MUrTGMNlPTJlM+bNdaCjDb6GFxBVFcNwIa1sU+0tF1zg==
-
-"@rspack/binding-linux-arm64-musl@1.6.5":
- version "1.6.5"
- resolved "https://registry.yarnpkg.com/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.6.5.tgz#3d0104855c63be4092e39c523f008c94533411f9"
- integrity sha512-JPtxFBOq7RRmBIwpdGIStf8iyCILehDsjQtEB0Kkhtm7TsAkVGwtC41GLcNuPxcQBKqNDmD8cy3yLYhXadH2CQ==
-
-"@rspack/binding-linux-x64-gnu@1.6.5":
- version "1.6.5"
- resolved "https://registry.yarnpkg.com/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.6.5.tgz#635f6fb87d3aa79dbe356a3fb33f6e046e7e25ed"
- integrity sha512-oh4ZNo2HtizZ/E6UK3BEONu20h8VVBw9GAXuWmo1u22cJSihzg+WfRNCMjRDil82LqSsyAgBwnU+dEjEYGKyAA==
-
-"@rspack/binding-linux-x64-musl@1.6.5":
- version "1.6.5"
- resolved "https://registry.yarnpkg.com/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.6.5.tgz#fa085de6b6446866f151944c8082b23dbcf178c8"
- integrity sha512-8Xebp5bvPJqjifpkFEAX5nUvoU2JvbMU3gwAkEovRRuvooCXnVT2tqkUBjkR3AhivAGgAxAr9hRzUUz/6QWt3Q==
-
-"@rspack/binding-wasm32-wasi@1.6.5":
- version "1.6.5"
- resolved "https://registry.yarnpkg.com/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.6.5.tgz#501ce81b09de2720c725fc87c3a87edfa0e370ad"
- integrity sha512-oINZNqzTxM+9dSUOjAORodHXYoJYzXvpaHI2U6ecEmoWaBCs+x3V3Po8DhpNFBwotB+jGlcoVhEHjpg5uaO6pw==
+"@rspack/binding-darwin-arm64@1.7.5":
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.5.tgz#5adad9b17d4a29c62d239bfac653b71e7d755b61"
+ integrity sha512-dg2/IrF+g498NUt654N8LFWfIiUsHlTankWieE1S3GWEQM6jweeRbNuu1Py1nWIUsjR2yQtv7ziia7c9Q8UTaQ==
+
+"@rspack/binding-darwin-x64@1.7.5":
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.5.tgz#bfa31b9bdcea5238babf0914289ad4227a4eabdb"
+ integrity sha512-RQJX4boQJUu3lo1yiN344+y8W6iSO08ARXIZqFPg66coOgfX1lhsXQSRJGQEQG4PAcYuC0GmrYFzErliifbc1Q==
+
+"@rspack/binding-linux-arm64-gnu@1.7.5":
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.5.tgz#2f3705a444911602619f48c2aac7a92205b9de8a"
+ integrity sha512-R7CO1crkJQLIQpJQzf+6DMHjvcvH/VxsatS5CG897IIT2aAfBeQuQAO+ERJko/UwSZam2K8Rxjuopcu5A2jsTQ==
+
+"@rspack/binding-linux-arm64-musl@1.7.5":
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.5.tgz#ac94268f78ffd818465a2ee1d626f5d349190f39"
+ integrity sha512-moDVFD06ISZi+wCIjJLzQSr8WO8paViacSHk+rOKQxwKI96cPoC4JFkz0+ibT2uks4i2ecs4Op48orsoguiXxw==
+
+"@rspack/binding-linux-x64-gnu@1.7.5":
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.5.tgz#69414ac99b79240d0148331bfd6579c3c669b85e"
+ integrity sha512-LGtdsdhtA5IxdMptj2NDVEbuZF4aqM99BVn3saHp92A4Fn20mW9UtQ+19PtaOFdbQBUN1GcP+cosrJ1wY56hOg==
+
+"@rspack/binding-linux-x64-musl@1.7.5":
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.5.tgz#a5b14a9a90e2400b85b2d13e83f379974356bd83"
+ integrity sha512-V1HTvuj0XF/e4Xnixqf7FrxdCtTkYqn26EKwH7ExUFuVBh4SsLGr29EK5SOXBG0xdy5TSEUokMup7cuONPb3Hw==
+
+"@rspack/binding-wasm32-wasi@1.7.5":
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.5.tgz#4addba33fbc8ba100cf7c963e804c9659dd87618"
+ integrity sha512-rGNHrk2QuLFfwOTib91skuLh2aMYeTP4lgM4zanDhtt95DLDlwioETFY7FzY1WmS+Z3qnEyrgQIRp8osy0NKTw==
dependencies:
"@napi-rs/wasm-runtime" "1.0.7"
-"@rspack/binding-win32-arm64-msvc@1.6.5":
- version "1.6.5"
- resolved "https://registry.yarnpkg.com/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.6.5.tgz#f78c90691d5da8628da02de6e972cc8de517ae60"
- integrity sha512-UUmep2ayuZxWPdrzkrzAFxVgYUWTB82pa9bkAGyeDO9SNkz8vTpdtbDaTvAzjFb8Pn+ErktDEDBKT57FLjxwxQ==
-
-"@rspack/binding-win32-ia32-msvc@1.6.5":
- version "1.6.5"
- resolved "https://registry.yarnpkg.com/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.6.5.tgz#4666a868eca3d24d00405e64baa708f2c8a556b2"
- integrity sha512-7nx+mMimpmCMstcW7nsyToXy5TK7N+YGPu2W/oioX7qv9ZCuJGTddjzLS84wN8DVrNIirg4mcxpBsmOQMZeHQA==
-
-"@rspack/binding-win32-x64-msvc@1.6.5":
- version "1.6.5"
- resolved "https://registry.yarnpkg.com/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.6.5.tgz#98a4196c38e9d220cde9a5047f99cf503ca46d6e"
- integrity sha512-pzO7rYFu6f6stgSccolZHiXGTTwKrIGHHNV1ALY1xPRmQEdbHcbMwadeaG99JL2lRLve9iNI+Z9Pr3oDVRN46g==
-
-"@rspack/binding@1.6.5":
- version "1.6.5"
- resolved "https://registry.yarnpkg.com/@rspack/binding/-/binding-1.6.5.tgz#78afbe3c9303edc39d96b57d32f33dca6a3fd75a"
- integrity sha512-FzYsr5vdjaVQIlDTxZFlISOQGxl/4grpF2BeiNy60Fpw9eeADeXk55DVacbXPqpiz7Doj6cyhEyMszQOvihrqQ==
+"@rspack/binding-win32-arm64-msvc@1.7.5":
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.5.tgz#a2bac95fa670738dd2850bac0f56fc490a2b6aad"
+ integrity sha512-eLyD9URS9M2pYa7sPICu9S0OuDAMnnGfuqrZYlrtgnEOEgimaG39gX6ENLwHvlNulaVMMFTNbDnS/2MELZ7r7g==
+
+"@rspack/binding-win32-ia32-msvc@1.7.5":
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.5.tgz#7256001750794aa3b14815cc460c43d621ac4bdb"
+ integrity sha512-ZT4eC8hHWzweA6S4Tl2c/z/fvhbU7Wnh+l76z+qmDy8wuA8uNrHgIb1mHLPli/wsqcjmIy8rDO9gkIBitg5I+w==
+
+"@rspack/binding-win32-x64-msvc@1.7.5":
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.5.tgz#eb8bafd9011139478ce79bd4924e3c0e481a2faa"
+ integrity sha512-a2j10QS3dZvW+gdu+FXteAkChxsK2g9BRUOmpt13w22LkiGrdmOkMQyDWRgJNxUGJTlqIUqtXxs72nTTlzo2Sw==
+
+"@rspack/binding@1.7.5":
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/@rspack/binding/-/binding-1.7.5.tgz#33efebda1596936193a6a9a8cdfb289b03c4cbba"
+ integrity sha512-tlZfDHfGu765FBL3hIyjrr8slJZztv7rCM+KIczZS7UlJQDl1+WsDKUe/+E1Fw9SlmorLWK40+y3rLTHmMrN2A==
optionalDependencies:
- "@rspack/binding-darwin-arm64" "1.6.5"
- "@rspack/binding-darwin-x64" "1.6.5"
- "@rspack/binding-linux-arm64-gnu" "1.6.5"
- "@rspack/binding-linux-arm64-musl" "1.6.5"
- "@rspack/binding-linux-x64-gnu" "1.6.5"
- "@rspack/binding-linux-x64-musl" "1.6.5"
- "@rspack/binding-wasm32-wasi" "1.6.5"
- "@rspack/binding-win32-arm64-msvc" "1.6.5"
- "@rspack/binding-win32-ia32-msvc" "1.6.5"
- "@rspack/binding-win32-x64-msvc" "1.6.5"
-
-"@rspack/core@1.6.5", "@rspack/core@^1.5.0":
- version "1.6.5"
- resolved "https://registry.yarnpkg.com/@rspack/core/-/core-1.6.5.tgz#8e06a917dfbc556156d5c544cbf985b4da89dbd7"
- integrity sha512-AqaOMA6MTNhqMYYwrhvPA+2uS662SkAi8Rb7B/IFOzh/Z5ooyczL4lUX+qyhAO3ymn50iwM4jikQCf9XfBiaQA==
- dependencies:
- "@module-federation/runtime-tools" "0.21.4"
- "@rspack/binding" "1.6.5"
+ "@rspack/binding-darwin-arm64" "1.7.5"
+ "@rspack/binding-darwin-x64" "1.7.5"
+ "@rspack/binding-linux-arm64-gnu" "1.7.5"
+ "@rspack/binding-linux-arm64-musl" "1.7.5"
+ "@rspack/binding-linux-x64-gnu" "1.7.5"
+ "@rspack/binding-linux-x64-musl" "1.7.5"
+ "@rspack/binding-wasm32-wasi" "1.7.5"
+ "@rspack/binding-win32-arm64-msvc" "1.7.5"
+ "@rspack/binding-win32-ia32-msvc" "1.7.5"
+ "@rspack/binding-win32-x64-msvc" "1.7.5"
+
+"@rspack/core@^1.5.0":
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/@rspack/core/-/core-1.7.5.tgz#d19295b5c2f137d4458701cf6dc3cbd3f73708b7"
+ integrity sha512-W1ChLhjBxGg6y4AHjEVjhcww/FZJ2O9obR0EOlYcfrfQGojCAUMeQjbmaF2sse5g5m0vSCaPtNYkycZ0qVRk1A==
+ dependencies:
+ "@module-federation/runtime-tools" "0.22.0"
+ "@rspack/binding" "1.7.5"
"@rspack/lite-tapable" "1.1.0"
"@rspack/lite-tapable@1.1.0":
@@ -5300,9 +5305,9 @@
integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==
"@sinclair/typebox@^0.27.8":
- version "0.27.8"
- resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
- integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==
+ version "0.27.10"
+ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.10.tgz#beefe675f1853f73676aecc915b2bd2ac98c4fc6"
+ integrity sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==
"@sindresorhus/is@^4.6.0":
version "4.6.0"
@@ -5444,147 +5449,147 @@
"@svgr/plugin-jsx" "8.1.0"
"@svgr/plugin-svgo" "8.1.0"
-"@swc/core-darwin-arm64@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.10.tgz#fb76ac44fa1d30696299d45c84f35b62f9ea2bac"
- integrity sha512-U72pGqmJYbjrLhMndIemZ7u9Q9owcJczGxwtfJlz/WwMaGYAV/g4nkGiUVk/+QSX8sFCAjanovcU1IUsP2YulA==
+"@swc/core-darwin-arm64@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.11.tgz#6f177125831b765e5dacdd1d8c07de576962ad16"
+ integrity sha512-QoIupRWVH8AF1TgxYyeA5nS18dtqMuxNwchjBIwJo3RdwLEFiJq6onOx9JAxHtuPwUkIVuU2Xbp+jCJ7Vzmgtg==
-"@swc/core-darwin-x64@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.15.10.tgz#b00fdc59022152cc4998e8478a9250ca8382a7d7"
- integrity sha512-NZpDXtwHH083L40xdyj1sY31MIwLgOxKfZEAGCI8xHXdHa+GWvEiVdGiu4qhkJctoHFzAEc7ZX3GN5phuJcPuQ==
+"@swc/core-darwin-x64@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.15.11.tgz#31381b6560bbd8b8ca6a0755262df321e28c039d"
+ integrity sha512-S52Gu1QtPSfBYDiejlcfp9GlN+NjTZBRRNsz8PNwBgSE626/FUf2PcllVUix7jqkoMC+t0rS8t+2/aSWlMuQtA==
-"@swc/core-linux-arm-gnueabihf@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.10.tgz#d39405a2ddcf6604db684fcbbcc9c807810b5d41"
- integrity sha512-ioieF5iuRziUF1HkH1gg1r93e055dAdeBAPGAk40VjqpL5/igPJ/WxFHGvc6WMLhUubSJI4S0AiZAAhEAp1jDg==
+"@swc/core-linux-arm-gnueabihf@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.11.tgz#ea7831776f7d8a548db4a8a5f38ef37faf5c0c66"
+ integrity sha512-lXJs8oXo6Z4yCpimpQ8vPeCjkgoHu5NoMvmJZ8qxDyU99KVdg6KwU9H79vzrmB+HfH+dCZ7JGMqMF//f8Cfvdg==
-"@swc/core-linux-arm64-gnu@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.10.tgz#5f59553f7d1d3e0af02eb9544b6f88c05a7bb372"
- integrity sha512-tD6BClOrxSsNus9cJL7Gxdv7z7Y2hlyvZd9l0NQz+YXzmTWqnfzLpg16ovEI7gknH2AgDBB5ywOsqu8hUgSeEQ==
+"@swc/core-linux-arm64-gnu@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.11.tgz#c99a5843115ef57cbefd40b93c99cb130d6db12f"
+ integrity sha512-chRsz1K52/vj8Mfq/QOugVphlKPWlMh10V99qfH41hbGvwAU6xSPd681upO4bKiOr9+mRIZZW+EfJqY42ZzRyA==
-"@swc/core-linux-arm64-musl@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.10.tgz#eb833e49df2a706d2ccf8e4474c111e7a1b784a5"
- integrity sha512-4uAHO3nbfbrTcmO/9YcVweTQdx5fN3l7ewwl5AEK4yoC4wXmoBTEPHAVdKNe4r9+xrTgd4BgyPsy0409OjjlMw==
+"@swc/core-linux-arm64-musl@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.11.tgz#9a7831f558b2ff504d3d6eaaf6a4c84e5232284b"
+ integrity sha512-PYftgsTaGnfDK4m6/dty9ryK1FbLk+LosDJ/RJR2nkXGc8rd+WenXIlvHjWULiBVnS1RsjHHOXmTS4nDhe0v0w==
-"@swc/core-linux-x64-gnu@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.10.tgz#5d0b6f36e9d9d49fc0a2170fec2b6de2c9c0e76a"
- integrity sha512-W0h9ONNw1pVIA0cN7wtboOSTl4Jk3tHq+w2cMPQudu9/+3xoCxpFb9ZdehwCAk29IsvdWzGzY6P7dDVTyFwoqg==
+"@swc/core-linux-x64-gnu@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.11.tgz#4a1fce9b9abedde04459fefe5da9dd9e405a2ae8"
+ integrity sha512-DKtnJKIHiZdARyTKiX7zdRjiDS1KihkQWatQiCHMv+zc2sfwb4Glrodx2VLOX4rsa92NLR0Sw8WLcPEMFY1szQ==
-"@swc/core-linux-x64-musl@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.10.tgz#0788cf24330f8efec0379cce594c727f3bc0a7c8"
- integrity sha512-XQNZlLZB62S8nAbw7pqoqwy91Ldy2RpaMRqdRN3T+tAg6Xg6FywXRKCsLh6IQOadr4p1+lGnqM/Wn35z5a/0Vw==
+"@swc/core-linux-x64-musl@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.11.tgz#0865f23b1cc532d9d77e743a83279e074edbee25"
+ integrity sha512-mUjjntHj4+8WBaiDe5UwRNHuEzLjIWBTSGTw0JT9+C9/Yyuh4KQqlcEQ3ro6GkHmBGXBFpGIj/o5VMyRWfVfWw==
-"@swc/core-win32-arm64-msvc@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.10.tgz#1555dc561606268ff84805568cd9a60b5de42543"
- integrity sha512-qnAGrRv5Nj/DATxAmCnJQRXXQqnJwR0trxLndhoHoxGci9MuguNIjWahS0gw8YZFjgTinbTxOwzatkoySihnmw==
+"@swc/core-win32-arm64-msvc@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.11.tgz#73eda8b54c94046728f5983e5516223ad1009c59"
+ integrity sha512-ZkNNG5zL49YpaFzfl6fskNOSxtcZ5uOYmWBkY4wVAvgbSAQzLRVBp+xArGWh2oXlY/WgL99zQSGTv7RI5E6nzA==
-"@swc/core-win32-ia32-msvc@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.10.tgz#e51f79e4e257f9b1a8c90437b20fc5a9b5b13119"
- integrity sha512-i4X/q8QSvzVlaRtv1xfnfl+hVKpCfiJ+9th484rh937fiEZKxZGf51C+uO0lfKDP1FfnT6C1yBYwHy7FLBVXFw==
+"@swc/core-win32-ia32-msvc@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.11.tgz#0df41547974ba9f26ba3e903e803ff523c15650b"
+ integrity sha512-6XnzORkZCQzvTQ6cPrU7iaT9+i145oLwnin8JrfsLG41wl26+5cNQ2XV3zcbrnFEV6esjOceom9YO1w9mGJByw==
-"@swc/core-win32-x64-msvc@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.10.tgz#9c2a11ac3321ebea8fc24940a1cd4b4cc9249fe2"
- integrity sha512-HvY8XUFuoTXn6lSccDLYFlXv1SU/PzYi4PyUqGT++WfTnbw/68N/7BdUZqglGRwiSqr0qhYt/EhmBpULj0J9rA==
+"@swc/core-win32-x64-msvc@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.11.tgz#f6f97500472c0ea4ab756c383c5d97896075f95c"
+ integrity sha512-IQ2n6af7XKLL6P1gIeZACskSxK8jWtoKpJWLZmdXTDj1MGzktUy4i+FvpdtxFmJWNavRWH1VmTr6kAubRDHeKw==
"@swc/core@^1.7.39":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.15.10.tgz#8487c006be73f4b4bee52d431f2b29881ae70ea4"
- integrity sha512-udNofxftduMUEv7nqahl2nvodCiCDQ4Ge0ebzsEm6P8s0RC2tBM0Hqx0nNF5J/6t9uagFJyWIDjXy3IIWMHDJw==
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.15.11.tgz#8f52ab37b4d874b9cc1b1ae809778620b42dbf9f"
+ integrity sha512-iLmLTodbYxU39HhMPaMUooPwO/zqJWvsqkrXv1ZI38rMb048p6N7qtAtTp37sw9NzSrvH6oli8EdDygo09IZ/w==
dependencies:
"@swc/counter" "^0.1.3"
"@swc/types" "^0.1.25"
optionalDependencies:
- "@swc/core-darwin-arm64" "1.15.10"
- "@swc/core-darwin-x64" "1.15.10"
- "@swc/core-linux-arm-gnueabihf" "1.15.10"
- "@swc/core-linux-arm64-gnu" "1.15.10"
- "@swc/core-linux-arm64-musl" "1.15.10"
- "@swc/core-linux-x64-gnu" "1.15.10"
- "@swc/core-linux-x64-musl" "1.15.10"
- "@swc/core-win32-arm64-msvc" "1.15.10"
- "@swc/core-win32-ia32-msvc" "1.15.10"
- "@swc/core-win32-x64-msvc" "1.15.10"
+ "@swc/core-darwin-arm64" "1.15.11"
+ "@swc/core-darwin-x64" "1.15.11"
+ "@swc/core-linux-arm-gnueabihf" "1.15.11"
+ "@swc/core-linux-arm64-gnu" "1.15.11"
+ "@swc/core-linux-arm64-musl" "1.15.11"
+ "@swc/core-linux-x64-gnu" "1.15.11"
+ "@swc/core-linux-x64-musl" "1.15.11"
+ "@swc/core-win32-arm64-msvc" "1.15.11"
+ "@swc/core-win32-ia32-msvc" "1.15.11"
+ "@swc/core-win32-x64-msvc" "1.15.11"
"@swc/counter@^0.1.3":
version "0.1.3"
resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9"
integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==
-"@swc/html-darwin-arm64@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/html-darwin-arm64/-/html-darwin-arm64-1.15.10.tgz#98c95d79b6713906fadb0618a9fc18ef4068231e"
- integrity sha512-WmQiAZe3TSbIvdPKljsFUwGqj3j53CSNxNcJcLhbTPVCU8Z0QQ9cEpeyktkqGNrQWOGp5r5EorWi+nvFu4HfqQ==
+"@swc/html-darwin-arm64@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/html-darwin-arm64/-/html-darwin-arm64-1.15.11.tgz#209c1591bb8c3cff87f104ae44ec75c8e9c9ecfc"
+ integrity sha512-FTa0ypbMbUXiwXIIT76HMFQYewEdTsPKOQGDqI6/kUTzU+lCIqIJequdoh6gqQvMq2BtBu/15dkTYYIlp4JoJw==
-"@swc/html-darwin-x64@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/html-darwin-x64/-/html-darwin-x64-1.15.10.tgz#f93e63c582b93598ffdb79b2ccc1f318a52ecdc7"
- integrity sha512-EQaa43uKUn48dOaXyY7JpA2DChFYTwdfyfFvqz+sN3LoEM1OV1QxocWoF+qHPTKEzvLUzIYH5Tm09GzJz9hWIA==
+"@swc/html-darwin-x64@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/html-darwin-x64/-/html-darwin-x64-1.15.11.tgz#411b53362105385132ffdf9bf556217d71283cfd"
+ integrity sha512-U+WFUFqbqS2WsLVCt40MuBGJ7mxDJi/T8RocBvQkoRwU3juOmeM2V/Od/QLBZxTFZTLQ3RCHJTkLXSDnxUWUuw==
-"@swc/html-linux-arm-gnueabihf@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/html-linux-arm-gnueabihf/-/html-linux-arm-gnueabihf-1.15.10.tgz#dcad09c8e9bea3fe6d2d230700c786695d723c40"
- integrity sha512-UymYHc37ejcKubESPGP5LlGqmx6vJnVs5CYCUbdpblar1XN1oW0SkxKOZVjURYCVAaB3XxfCTCptEol04uvhiw==
+"@swc/html-linux-arm-gnueabihf@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/html-linux-arm-gnueabihf/-/html-linux-arm-gnueabihf-1.15.11.tgz#12a9e6a0fbb62f68fe0f003f2c43a9232c66d1ea"
+ integrity sha512-Cid64465sEkAiTh8KLFCbQbsIbgDzPeGdA5ZYB8w5AXmYAGPJ0xbeRHEFq3iq469Dj2rxYvExrLCXNhn8rHbww==
-"@swc/html-linux-arm64-gnu@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/html-linux-arm64-gnu/-/html-linux-arm64-gnu-1.15.10.tgz#db770640cd8e14837209cb3f3fbeddd8977b0460"
- integrity sha512-o9FzVmnpyD0Z4fzUbIrFz+1JZ72ZFaij+tZ4ZPtIWgA0ymyqlplPOHAbRsbt5/YoLoAx0wo2FN/sYsMdPv3mcA==
+"@swc/html-linux-arm64-gnu@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/html-linux-arm64-gnu/-/html-linux-arm64-gnu-1.15.11.tgz#35b7395c3db2c702a4e2db7bac9e2805d3d0453f"
+ integrity sha512-sxKdt0QJIR2x/6pAmDPK0tjfGVwsSZsfeY1BM8ODTm7h18ApE7KVNN+ZtsDbl4n5ejfXG7fOWNmMPUvj8qSMSA==
-"@swc/html-linux-arm64-musl@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/html-linux-arm64-musl/-/html-linux-arm64-musl-1.15.10.tgz#08e7a223944006121d94b6883f0189f396723f3a"
- integrity sha512-3bBKC6VbOCFH4zJECWmp6jpuoOTcRIaC33zXLJta/GL9bT4AL3PAP0TdSvjNJ4fCAnOJFmbhawlCIOJJ5mTl/g==
+"@swc/html-linux-arm64-musl@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/html-linux-arm64-musl/-/html-linux-arm64-musl-1.15.11.tgz#c21b62f3027720aeac30039fcc85487893d1523c"
+ integrity sha512-aNACh2/HPy52VbKPqHieVRDeKzkO66DQdlhiVUi+fggdn8khvllni6Xr52INeAMjYFASrTTth/3vKXMv215t3A==
-"@swc/html-linux-x64-gnu@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/html-linux-x64-gnu/-/html-linux-x64-gnu-1.15.10.tgz#6811a3f9de97a1377715d3176163931462fec63e"
- integrity sha512-4Bb77cpu8fZ38+PqfctHzO3JuJ74B8HKG3/NaqGUlJbwQOiHy0RSAowAp9njyMZ1EzbEkpC9XXju75RLI1KdLA==
+"@swc/html-linux-x64-gnu@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/html-linux-x64-gnu/-/html-linux-x64-gnu-1.15.11.tgz#c0bb4430a406f5fdd171b4ba1d6157320dbbe3c7"
+ integrity sha512-8YOar0XeRLBzA+UMMW5smGpsQamoZLtaQ5RKGfap21FxOUUXqkPhkDTRr+kBVCYb47yz3NokjTPaDGTWOYNyww==
-"@swc/html-linux-x64-musl@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/html-linux-x64-musl/-/html-linux-x64-musl-1.15.10.tgz#170a25071cc42c02740eb3a5f6d9b51faab50cfc"
- integrity sha512-amYNWp667VbuV+4cAJB0RWYwsBPyh+7WtV0CDpD0ATgB4UvkOWuencFqUYXKC9xczFriani6OqdMa1d2Bffbog==
+"@swc/html-linux-x64-musl@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/html-linux-x64-musl/-/html-linux-x64-musl-1.15.11.tgz#2b3ea8fb8937966fac39bf5d36c07dd99b6d34c0"
+ integrity sha512-em2Ur0uGFA/nw2JbMclXu9mLuUC7q/1J06i8FZTRHqZzNGt9Q0UMdgH9T8HkGLT5e7dZ6ROJoq1H4st6B8N3uw==
-"@swc/html-win32-arm64-msvc@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/html-win32-arm64-msvc/-/html-win32-arm64-msvc-1.15.10.tgz#2c67ce17b84c7bf5bdf82e80bc0ca12ce95dc4d6"
- integrity sha512-FRtTz1akAUfS1PH1WsILwBuRAgy/4E/d++il+dZAGkaAP5UaNUXPduNfLaJhT/mR3rVJaIqfAmAJEc1ts0u0lA==
+"@swc/html-win32-arm64-msvc@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/html-win32-arm64-msvc/-/html-win32-arm64-msvc-1.15.11.tgz#3503c7ecddb773bd90ee09f31fb30e230edcecda"
+ integrity sha512-Xf9Vd4UsYTs4ejBwS+j9zShkyp3KQ+qfn/ZKVMKDygWjuOjU6FFXWYm93/PdTmS5qD0c58FhmoqTv+uFEZ4nxQ==
-"@swc/html-win32-ia32-msvc@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/html-win32-ia32-msvc/-/html-win32-ia32-msvc-1.15.10.tgz#6b320b474bb42a590bb38ac584ff19b2e53df78e"
- integrity sha512-eRscB+1U3WvxKyKrbh7aBioxNB/G3t+NP/RoTEAfSmKfIMuRTR3YX6FrPSU/7SFjv2lgswjRt5MGX7Ygjh5xuw==
+"@swc/html-win32-ia32-msvc@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/html-win32-ia32-msvc/-/html-win32-ia32-msvc-1.15.11.tgz#41ce66ac169bb7d4b3fa061f0a5be1cc834a5ddb"
+ integrity sha512-+YNzKR81UqH+xOZPU8XEIy5L6E63UUGSSEu1Wv3D85GVMQkZ8X9LZkZ5hq4vvqmCTV1zeHIPfzNrrVElqK198g==
-"@swc/html-win32-x64-msvc@1.15.10":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/html-win32-x64-msvc/-/html-win32-x64-msvc-1.15.10.tgz#a7300047fd90710907ba7d4f52a882eb33047efc"
- integrity sha512-UnKP25R8n3rxl3o0/04FK0iezi9m3Yp8Qrc9nzzrjFpso/TPbJwfgE+2bGUYaX482EsBU7TBorLY2t8fWcD7/Q==
+"@swc/html-win32-x64-msvc@1.15.11":
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/html-win32-x64-msvc/-/html-win32-x64-msvc-1.15.11.tgz#98793d32a81457c33248c3bf50711379025104d2"
+ integrity sha512-Y3Xj62eA+pjadhgiVNFUBgIN9Wa1gYrB3N1l6NmSLeApVE2qkBww3WrVXhRDfqUXiWz7eRHPDakZSRQREyMv5A==
"@swc/html@^1.13.5":
- version "1.15.10"
- resolved "https://registry.yarnpkg.com/@swc/html/-/html-1.15.10.tgz#5d20c1b04a11cb1134e4af6de8d9fd8bf1516226"
- integrity sha512-nlsp1DcT84fQPLcdOO8InIApoD6pI2gWmZCqyCfdu9WRIXZyKv43xIFEymtFrkZgR1iE0YlQV5mrsMnY2D2kxA==
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/@swc/html/-/html-1.15.11.tgz#f8dcdc099eaffdc2d40b0a818b13ec6198d75b50"
+ integrity sha512-JOO48SCxyR3KbH9iiLMSWRDm7+Xl6lgvOBe5di54W8PsumdeP0Imatq8cunkRAUR7br8xAjlpB16bX6iJeyeMw==
dependencies:
"@swc/counter" "^0.1.3"
optionalDependencies:
- "@swc/html-darwin-arm64" "1.15.10"
- "@swc/html-darwin-x64" "1.15.10"
- "@swc/html-linux-arm-gnueabihf" "1.15.10"
- "@swc/html-linux-arm64-gnu" "1.15.10"
- "@swc/html-linux-arm64-musl" "1.15.10"
- "@swc/html-linux-x64-gnu" "1.15.10"
- "@swc/html-linux-x64-musl" "1.15.10"
- "@swc/html-win32-arm64-msvc" "1.15.10"
- "@swc/html-win32-ia32-msvc" "1.15.10"
- "@swc/html-win32-x64-msvc" "1.15.10"
+ "@swc/html-darwin-arm64" "1.15.11"
+ "@swc/html-darwin-x64" "1.15.11"
+ "@swc/html-linux-arm-gnueabihf" "1.15.11"
+ "@swc/html-linux-arm64-gnu" "1.15.11"
+ "@swc/html-linux-arm64-musl" "1.15.11"
+ "@swc/html-linux-x64-gnu" "1.15.11"
+ "@swc/html-linux-x64-musl" "1.15.11"
+ "@swc/html-win32-arm64-msvc" "1.15.11"
+ "@swc/html-win32-ia32-msvc" "1.15.11"
+ "@swc/html-win32-x64-msvc" "1.15.11"
"@swc/types@^0.1.25":
version "0.1.25"
@@ -5632,6 +5637,13 @@
dependencies:
tslib "^2.4.0"
+"@types/better-sqlite3@^7.6.13":
+ version "7.6.13"
+ resolved "https://registry.yarnpkg.com/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz#a72387f00d2f53cab699e63f2e2c05453cf953f0"
+ integrity sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==
+ dependencies:
+ "@types/node" "*"
+
"@types/body-parser@*":
version "1.19.6"
resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474"
@@ -6024,9 +6036,9 @@
integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==
"@types/http-cache-semantics@^4.0.2":
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4"
- integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#f6a7788f438cbfde15f29acad46512b4c01913b3"
+ integrity sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==
"@types/http-errors@*":
version "2.0.5"
@@ -6123,9 +6135,9 @@
integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==
"@types/node@*", "@types/node@>=10.0.0":
- version "25.0.10"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-25.0.10.tgz#4864459c3c9459376b8b75fd051315071c8213e7"
- integrity sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==
+ version "25.2.0"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-25.2.0.tgz#015b7d228470c1dcbfc17fe9c63039d216b4d782"
+ integrity sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==
dependencies:
undici-types "~7.16.0"
@@ -6203,9 +6215,9 @@
integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==
"@types/react@*":
- version "19.2.9"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-19.2.9.tgz#84ec7669742bb3e7e2e8d6a5258d95ead7764200"
- integrity sha512-Lpo8kgb/igvMIPeNV2rsYKTgaORYdO1XGVZ4Qz3akwOj0ySGYMPlQWa8BaLn0G63D1aSaAQ5ldR06wCpChQCjA==
+ version "19.2.11"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-19.2.11.tgz#301b615ec33df67f6b0ba63f2b6aedce46cca0de"
+ integrity sha512-tORuanb01iEzWvMGVGv2ZDhYZVeRMrw453DCSAIn/5yvcSVnMoUMTyf33nQJLahYEnv9xqrTNbgz4qY5EfSh0g==
dependencies:
csstype "^3.2.2"
@@ -6895,20 +6907,20 @@ asynckit@^0.4.0:
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
autoprefixer@^10.4.19, autoprefixer@^10.4.23:
- version "10.4.23"
- resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.23.tgz#c6aa6db8e7376fcd900f9fd79d143ceebad8c4e6"
- integrity sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==
+ version "10.4.24"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.24.tgz#2c29595f3abd820a79976a609d0bf40eecf212fb"
+ integrity sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==
dependencies:
browserslist "^4.28.1"
- caniuse-lite "^1.0.30001760"
+ caniuse-lite "^1.0.30001766"
fraction.js "^5.3.4"
picocolors "^1.1.1"
postcss-value-parser "^4.2.0"
axios@^1.7.9, axios@^1.9.0:
- version "1.13.2"
- resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.2.tgz#9ada120b7b5ab24509553ec3e40123521117f687"
- integrity sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==
+ version "1.13.4"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.4.tgz#15d109a4817fb82f73aea910d41a2c85606076bc"
+ integrity sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==
dependencies:
follow-redirects "^1.15.6"
form-data "^4.0.4"
@@ -6938,7 +6950,7 @@ babel-plugin-macros@^3.1.0:
cosmiconfig "^7.0.0"
resolve "^1.19.0"
-babel-plugin-polyfill-corejs2@^0.4.14:
+babel-plugin-polyfill-corejs2@^0.4.14, babel-plugin-polyfill-corejs2@^0.4.15:
version "0.4.15"
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz#808fa349686eea4741807cfaaa2aa3aa57ce120a"
integrity sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==
@@ -6955,7 +6967,15 @@ babel-plugin-polyfill-corejs3@^0.13.0:
"@babel/helper-define-polyfill-provider" "^0.6.5"
core-js-compat "^3.43.0"
-babel-plugin-polyfill-regenerator@^0.6.5:
+babel-plugin-polyfill-corejs3@^0.14.0:
+ version "0.14.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz#65b06cda48d6e447e1e926681f5a247c6ae2b9cf"
+ integrity sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==
+ dependencies:
+ "@babel/helper-define-polyfill-provider" "^0.6.6"
+ core-js-compat "^3.48.0"
+
+babel-plugin-polyfill-regenerator@^0.6.5, babel-plugin-polyfill-regenerator@^0.6.6:
version "0.6.6"
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz#69f5dd263cab933c42fe5ea05e83443b374bd4bf"
integrity sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==
@@ -6983,9 +7003,9 @@ base64id@2.0.0, base64id@~2.0.0:
integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==
baseline-browser-mapping@^2.9.0:
- version "2.9.17"
- resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.17.tgz#9d6019766cd7eba738cb5f32c84b9f937cc87780"
- integrity sha512-agD0MgJFUP/4nvjqzIB29zRPUuCF7Ge6mEv9s8dHrtYD7QWXRcx75rOADE/d5ah1NI+0vkDl0yorDd5U852IQQ==
+ version "2.9.19"
+ resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz#3e508c43c46d961eb4d7d2e5b8d1dd0f9ee4f488"
+ integrity sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==
batch@0.6.1:
version "0.6.1"
@@ -6998,12 +7018,12 @@ before-after-hook@^3.0.2:
integrity sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==
better-auth@^1.4.9:
- version "1.4.17"
- resolved "https://registry.yarnpkg.com/better-auth/-/better-auth-1.4.17.tgz#a6f6176042900690df880ed349ca27ec0620291c"
- integrity sha512-VmHGQyKsEahkEs37qguROKg/6ypYpNF13D7v/lkbO7w7Aivz0Bv2h+VyUkH4NzrGY0QBKXi1577mGhDCVwp0ew==
+ version "1.4.18"
+ resolved "https://registry.yarnpkg.com/better-auth/-/better-auth-1.4.18.tgz#460cfa3f71d2da9ffcbfc1ad4d87977a4d51b5d5"
+ integrity sha512-bnyifLWBPcYVltH3RhS7CM62MoelEqC6Q+GnZwfiDWNfepXoQZBjEvn4urcERC7NTKgKq5zNBM8rvPvRBa6xcg==
dependencies:
- "@better-auth/core" "1.4.17"
- "@better-auth/telemetry" "1.4.17"
+ "@better-auth/core" "1.4.18"
+ "@better-auth/telemetry" "1.4.18"
"@better-auth/utils" "0.3.0"
"@better-fetch/fetch" "1.1.21"
"@noble/ciphers" "^2.0.0"
@@ -7025,6 +7045,14 @@ better-call@1.1.8:
rou3 "^0.7.10"
set-cookie-parser "^2.7.1"
+better-sqlite3@^12.6.2:
+ version "12.6.2"
+ resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.6.2.tgz#770649f28a62e543a360f3dfa1afe4cc944b1937"
+ integrity sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA==
+ dependencies:
+ bindings "^1.5.0"
+ prebuild-install "^7.1.1"
+
big-integer@^1.6.17:
version "1.6.52"
resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85"
@@ -7048,6 +7076,13 @@ binary@~0.3.0:
buffers "~0.1.1"
chainsaw "~0.1.0"
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
bl@^4.0.3:
version "4.1.0"
resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
@@ -7324,10 +7359,10 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
-caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001760:
- version "1.0.30001766"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz#b6f6b55cb25a2d888d9393104d14751c6a7d6f7a"
- integrity sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001766:
+ version "1.0.30001767"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001767.tgz#0279c498e862efb067938bba0a0aabafe8d0b730"
+ integrity sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==
canvas-roundrect-polyfill@0.0.1:
version "0.0.1"
@@ -7821,14 +7856,14 @@ copy-webpack-plugin@^11.0.0:
schema-utils "^4.0.0"
serialize-javascript "^6.0.0"
-core-js-compat@^3.43.0:
+core-js-compat@^3.43.0, core-js-compat@^3.48.0:
version "3.48.0"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.48.0.tgz#7efbe1fc1cbad44008190462217cc5558adaeaa6"
integrity sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==
dependencies:
browserslist "^4.28.1"
-core-js-pure@^3.43.0:
+core-js-pure@^3.48.0:
version "3.48.0"
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.48.0.tgz#7d5a3fe1ec3631b9aa76a81c843ac2ce918e5023"
integrity sha512-1slJgk89tWC51HQ1AEqG+s2VuwpTRr8ocu4n20QUcH1v9lAN0RXen0Q0AABa/DK1I7RrNWLucplOHMx8hfTGTw==
@@ -8041,9 +8076,9 @@ css-what@^6.0.1, css-what@^6.1.0:
integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==
cssdb@^8.6.0:
- version "8.7.0"
- resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.7.0.tgz#5a0846fabf863a4d397d980d8d29eb3eb26dfde1"
- integrity sha512-UxiWVpV953ENHqAKjKRPZHNDfRo3uOymvO5Ef7MFCWlenaohkYj7PTO7WCBdjZm8z/aDZd6rXyUIlwZ0AjyFSg==
+ version "8.7.1"
+ resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.7.1.tgz#f296bbedc39ace9edf0ed8fbbec57c3e117747cd"
+ integrity sha512-+F6LKx48RrdGOtE4DT5jz7Uo+VeyKXpK797FAevIkzjV8bMHz6xTO5F7gNDcRCHmPgD5jj2g6QCsY9zmVrh38A==
cssesc@^3.0.0:
version "3.0.0"
@@ -8516,9 +8551,9 @@ default-browser-id@^5.0.0:
integrity sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==
default-browser@^5.2.1:
- version "5.4.0"
- resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.4.0.tgz#b55cf335bb0b465dd7c961a02cd24246aa434287"
- integrity sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.5.0.tgz#2792e886f2422894545947cc80e1a444496c5976"
+ integrity sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==
dependencies:
bundle-name "^4.1.0"
default-browser-id "^5.0.0"
@@ -8804,9 +8839,9 @@ ee-first@1.1.1:
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
electron-to-chromium@^1.5.263:
- version "1.5.278"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.278.tgz#807a5e321f012a41bfd64e653f35993c9af95493"
- integrity sha512-dQ0tM1svDRQOwxnXxm+twlGTjr9Upvt8UFWAgmLsxEzFQxhbti4VwxmMjsDxVC51Zo84swW7FVCXEV+VAkhuPw==
+ version "1.5.286"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz#142be1ab5e1cd5044954db0e5898f60a4960384e"
+ integrity sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==
elkjs@^0.9.0, elkjs@^0.9.3:
version "0.9.3"
@@ -8894,13 +8929,13 @@ enhanced-resolve@5.12.0:
graceful-fs "^4.2.4"
tapable "^2.2.0"
-enhanced-resolve@^5.17.4:
- version "5.18.4"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz#c22d33055f3952035ce6a144ce092447c525f828"
- integrity sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==
+enhanced-resolve@^5.19.0:
+ version "5.19.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz#6687446a15e969eaa63c2fa2694510e17ae6d97c"
+ integrity sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==
dependencies:
graceful-fs "^4.2.4"
- tapable "^2.2.0"
+ tapable "^2.3.0"
entities@^2.0.0:
version "2.2.0"
@@ -9454,6 +9489,11 @@ file-loader@^6.2.0:
loader-utils "^2.0.0"
schema-utils "^3.0.0"
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
filesize@^10.1.6:
version "10.1.6"
resolved "https://registry.yarnpkg.com/filesize/-/filesize-10.1.6.tgz#31194da825ac58689c0bce3948f33ce83aabd361"
@@ -10080,9 +10120,9 @@ hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.1, hoist-non-react-
react-is "^16.7.0"
hookified@^1.14.0:
- version "1.15.0"
- resolved "https://registry.yarnpkg.com/hookified/-/hookified-1.15.0.tgz#d51db9fe134b8bd19c1aa88f9fcd7878995e4b66"
- integrity sha512-51w+ZZGt7Zw5q7rM3nC4t3aLn/xvKDETsXqMczndvwyVQhAHfUmUuFBRFcos8Iyebtk7OAE9dL26wFNzZVVOkw==
+ version "1.15.1"
+ resolved "https://registry.yarnpkg.com/hookified/-/hookified-1.15.1.tgz#b1fafeaa5489cdc29cb85546a8f837ed4ffbbcb6"
+ integrity sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==
hpack.js@^2.1.6:
version "2.1.6"
@@ -10788,9 +10828,9 @@ jszip@^3.10.1:
setimmediate "^1.0.5"
katex@^0.16.0, katex@^0.16.22, katex@^0.16.9:
- version "0.16.27"
- resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.27.tgz#4ecf6f620e0ca1c1a5de722e85fcdcec49086a48"
- integrity sha512-aeQoDkuRWSqQN6nSvVCEFvfXdqo1OQiCmmW1kc9xSdjutPv7BGO7pqY9sQRJpMOGrEdfDgF2TfRXe5eUAD2Waw==
+ version "0.16.28"
+ resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.28.tgz#64068425b5a29b41b136aae0d51cbb2c71d64c39"
+ integrity sha512-YHzO7721WbmAL6Ov1uzN/l5mY5WWWhJBSW+jq4tkfZfsxmo1hu6frS0EOswvjBUnWE6NtjEs48SFn5CQESRLZg==
dependencies:
commander "^8.3.0"
@@ -10827,9 +10867,9 @@ known-css-properties@^0.36.0:
integrity sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==
kysely@^0.28.5:
- version "0.28.10"
- resolved "https://registry.yarnpkg.com/kysely/-/kysely-0.28.10.tgz#d2441080cd6c633a3c6a927c2a364c69bbb829a7"
- integrity sha512-ksNxfzIW77OcZ+QWSAPC7yDqUSaIVwkTWnTPNiIy//vifNbwsSgQ57OkkncHxxpcBHM3LRfLAZVEh7kjq5twVA==
+ version "0.28.11"
+ resolved "https://registry.yarnpkg.com/kysely/-/kysely-0.28.11.tgz#23b0d027cf59401e66d516eb23ed5e8e945fd4fd"
+ integrity sha512-zpGIFg0HuoC893rIjYX1BETkVWdDnzTzF5e0kWXJFg5lE0k1/LfNWBejrcnOFu8Q2Rfq/hTDTU7XLUM8QOrpzg==
langium@3.3.1:
version "3.3.1"
@@ -13610,7 +13650,7 @@ postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.33, postcss@^8.4.43, postcss@^8.5
picocolors "^1.1.1"
source-map-js "^1.2.1"
-prebuild-install@^7.1.3:
+prebuild-install@^7.1.1, prebuild-install@^7.1.3:
version "7.1.3"
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec"
integrity sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==
@@ -13747,9 +13787,9 @@ pwacompat@2.0.17:
integrity sha512-6Du7IZdIy7cHiv7AhtDy4X2QRM8IAD5DII69mt5qWibC2d15ZU8DmBG1WdZKekG11cChSu4zkSUGPF9sweOl6w==
pyodide@^0.29.1:
- version "0.29.2"
- resolved "https://registry.yarnpkg.com/pyodide/-/pyodide-0.29.2.tgz#cab544903fe202b765da2e6046e7d55c064ec34e"
- integrity sha512-q/Fnbmiwlw80GfaG74gTbZ6hXOYHwZ1wCDZzE03+tzQYDP1wKEqrSqmIuLQRSYixFFdNdlGEinoGYcDnulwp5g==
+ version "0.29.3"
+ resolved "https://registry.yarnpkg.com/pyodide/-/pyodide-0.29.3.tgz#555ec43c09983a3cf3794c778e40084de24cfb95"
+ integrity sha512-22UBuhOJawj7vKUnS7/F3xK+515LJdjiMAHoCfuS6/PbHiOrSQVnYwDe+2sbVwiOZ3sMMexdXICew6NqOMQGgA==
dependencies:
"@types/emscripten" "^1.41.4"
ws "^8.5.0"
@@ -13904,9 +13944,9 @@ react-diff-viewer-continued@^3.4.0:
prop-types "^15.8.1"
react-dom@^19.2.0:
- version "19.2.3"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.2.3.tgz#f0b61d7e5c4a86773889fcc1853af3ed5f215b17"
- integrity sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==
+ version "19.2.4"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.2.4.tgz#6fac6bd96f7db477d966c7ec17c1a2b1ad8e6591"
+ integrity sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==
dependencies:
scheduler "^0.27.0"
@@ -14094,9 +14134,9 @@ react-transition-group@^4.3.0:
prop-types "^15.6.2"
react@^19.2.0:
- version "19.2.3"
- resolved "https://registry.yarnpkg.com/react/-/react-19.2.3.tgz#d83e5e8e7a258cf6b4fe28640515f99b87cd19b8"
- integrity sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==
+ version "19.2.4"
+ resolved "https://registry.yarnpkg.com/react/-/react-19.2.4.tgz#438e57baa19b77cb23aab516cf635cd0579ee09a"
+ integrity sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==
reactjs-popup@^2.0.6:
version "2.0.6"
@@ -14476,37 +14516,37 @@ robust-predicates@^3.0.2:
integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==
rollup@^4.20.0, rollup@^4.43.0:
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.56.0.tgz#65959d13cfbd7e48b8868c05165b1738f0143862"
- integrity sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==
+ version "4.57.1"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.57.1.tgz#947f70baca32db2b9c594267fe9150aa316e5a88"
+ integrity sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==
dependencies:
"@types/estree" "1.0.8"
optionalDependencies:
- "@rollup/rollup-android-arm-eabi" "4.56.0"
- "@rollup/rollup-android-arm64" "4.56.0"
- "@rollup/rollup-darwin-arm64" "4.56.0"
- "@rollup/rollup-darwin-x64" "4.56.0"
- "@rollup/rollup-freebsd-arm64" "4.56.0"
- "@rollup/rollup-freebsd-x64" "4.56.0"
- "@rollup/rollup-linux-arm-gnueabihf" "4.56.0"
- "@rollup/rollup-linux-arm-musleabihf" "4.56.0"
- "@rollup/rollup-linux-arm64-gnu" "4.56.0"
- "@rollup/rollup-linux-arm64-musl" "4.56.0"
- "@rollup/rollup-linux-loong64-gnu" "4.56.0"
- "@rollup/rollup-linux-loong64-musl" "4.56.0"
- "@rollup/rollup-linux-ppc64-gnu" "4.56.0"
- "@rollup/rollup-linux-ppc64-musl" "4.56.0"
- "@rollup/rollup-linux-riscv64-gnu" "4.56.0"
- "@rollup/rollup-linux-riscv64-musl" "4.56.0"
- "@rollup/rollup-linux-s390x-gnu" "4.56.0"
- "@rollup/rollup-linux-x64-gnu" "4.56.0"
- "@rollup/rollup-linux-x64-musl" "4.56.0"
- "@rollup/rollup-openbsd-x64" "4.56.0"
- "@rollup/rollup-openharmony-arm64" "4.56.0"
- "@rollup/rollup-win32-arm64-msvc" "4.56.0"
- "@rollup/rollup-win32-ia32-msvc" "4.56.0"
- "@rollup/rollup-win32-x64-gnu" "4.56.0"
- "@rollup/rollup-win32-x64-msvc" "4.56.0"
+ "@rollup/rollup-android-arm-eabi" "4.57.1"
+ "@rollup/rollup-android-arm64" "4.57.1"
+ "@rollup/rollup-darwin-arm64" "4.57.1"
+ "@rollup/rollup-darwin-x64" "4.57.1"
+ "@rollup/rollup-freebsd-arm64" "4.57.1"
+ "@rollup/rollup-freebsd-x64" "4.57.1"
+ "@rollup/rollup-linux-arm-gnueabihf" "4.57.1"
+ "@rollup/rollup-linux-arm-musleabihf" "4.57.1"
+ "@rollup/rollup-linux-arm64-gnu" "4.57.1"
+ "@rollup/rollup-linux-arm64-musl" "4.57.1"
+ "@rollup/rollup-linux-loong64-gnu" "4.57.1"
+ "@rollup/rollup-linux-loong64-musl" "4.57.1"
+ "@rollup/rollup-linux-ppc64-gnu" "4.57.1"
+ "@rollup/rollup-linux-ppc64-musl" "4.57.1"
+ "@rollup/rollup-linux-riscv64-gnu" "4.57.1"
+ "@rollup/rollup-linux-riscv64-musl" "4.57.1"
+ "@rollup/rollup-linux-s390x-gnu" "4.57.1"
+ "@rollup/rollup-linux-x64-gnu" "4.57.1"
+ "@rollup/rollup-linux-x64-musl" "4.57.1"
+ "@rollup/rollup-openbsd-x64" "4.57.1"
+ "@rollup/rollup-openharmony-arm64" "4.57.1"
+ "@rollup/rollup-win32-arm64-msvc" "4.57.1"
+ "@rollup/rollup-win32-ia32-msvc" "4.57.1"
+ "@rollup/rollup-win32-x64-gnu" "4.57.1"
+ "@rollup/rollup-win32-x64-msvc" "4.57.1"
fsevents "~2.3.2"
rou3@^0.7.10:
@@ -16070,7 +16110,7 @@ warning@^4.0.0:
dependencies:
loose-envify "^1.0.0"
-watchpack@^2.4.4:
+watchpack@^2.5.1:
version "2.5.1"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.1.tgz#dd38b601f669e0cbf567cb802e75cead82cde102"
integrity sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==
@@ -16193,9 +16233,9 @@ webpack-virtual-modules@^0.5.0:
integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==
webpack@^5.88.1, webpack@^5.95.0:
- version "5.104.1"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.104.1.tgz#94bd41eb5dbf06e93be165ba8be41b8260d4fb1a"
- integrity sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==
+ version "5.105.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.0.tgz#38b5e6c5db8cbe81debbd16e089335ada05ea23a"
+ integrity sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==
dependencies:
"@types/eslint-scope" "^3.7.7"
"@types/estree" "^1.0.8"
@@ -16207,7 +16247,7 @@ webpack@^5.88.1, webpack@^5.95.0:
acorn-import-phases "^1.0.3"
browserslist "^4.28.1"
chrome-trace-event "^1.0.2"
- enhanced-resolve "^5.17.4"
+ enhanced-resolve "^5.19.0"
es-module-lexer "^2.0.0"
eslint-scope "5.1.1"
events "^3.2.0"
@@ -16220,7 +16260,7 @@ webpack@^5.88.1, webpack@^5.95.0:
schema-utils "^4.3.3"
tapable "^2.3.0"
terser-webpack-plugin "^5.3.16"
- watchpack "^2.4.4"
+ watchpack "^2.5.1"
webpack-sources "^3.3.3"
webpackbar@^6.0.1: