)} />;
- case 'state':
case 'task_state':
return ;
}
diff --git a/src/components/Demo/index.tsx b/src/components/Demo/index.tsx
new file mode 100644
index 000000000..239039a48
--- /dev/null
+++ b/src/components/Demo/index.tsx
@@ -0,0 +1,60 @@
+import React from 'react';
+import CodeBlock from '@theme/CodeBlock';
+import { observer } from 'mobx-react-lite';
+import { useStore } from '@tdev-hooks/useStore';
+
+export const Comp = observer(() => {
+ const documentRootStore = useStore('documentRootStore');
+ const pageStore = useStore('pageStore');
+
+ return (
+
+
+ {JSON.stringify(
+ pageStore.pages
+ .filter((p) => p.editingStateV2.length)
+ .map((p) => [
+ p.id,
+ p.path,
+ [
+ ...p.editingStateV2.map(
+ (s) =>
+ `${s.type}:${s.isDone}->${p.documentRootConfigs.get(s.documentRootId)?.position ?? '?'} ${s.documentRootId}::${s.id}`
+ )
+ ]
+ ]),
+ null,
+ 2
+ )}
+
+
+ {JSON.stringify(
+ documentRootStore.documentRoots.map((d) => [
+ d.id,
+ d.mainDocuments.map((d) => d.type),
+ [...d.pagePositions.entries()]
+ ]),
+ null,
+ 2
+ )}
+
+
+ {JSON.stringify(documentRootStore.defaultMetas.map((m) => m.type))}
+
+
+ {JSON.stringify(
+ pageStore.pages
+ .filter((p) => p.taskableDocumentRootIds.length > 0)
+ .map((p) => ({
+ path: p.path,
+ rids: p.taskableDocumentRootIds,
+ docs: p.taskableDocuments.map((d) => d.id)
+ })),
+ null,
+ 2
+ )}
+
+ {JSON.stringify(pageStore.tree, null, 2)};
+
+ );
+});
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/index.tsx b/src/components/EditingOverview/index.tsx
index 71c20f324..ceb84c605 100644
--- a/src/components/EditingOverview/index.tsx
+++ b/src/components/EditingOverview/index.tsx
@@ -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..caf8da676 100644
--- a/src/models/DocumentRoot.ts
+++ b/src/models/DocumentRoot.ts
@@ -101,6 +101,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)];
diff --git a/src/models/Page.ts b/src/models/Page.ts
index 0bf48ce1e..5a77b4191 100644
--- a/src/models/Page.ts
+++ b/src/models/Page.ts
@@ -2,29 +2,86 @@
* A Markdown or MDX Page
*/
-import { action, computed, observable, ObservableSet } from 'mobx';
-import { PageStore } from '@tdev-stores/PageStore';
+import { action, computed, observable, ObservableMap } from 'mobx';
+import { PageStore, SidebarVersions } from '@tdev-stores/PageStore';
import TaskState from '@tdev-models/documents/TaskState';
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 type { PageIndex } from '@tdev/page-progress-state';
+import { filter } from '@mdxeditor/editor';
+
+interface PageTree {
+ id: string;
+ path: string;
+ pages: PageTree[];
+}
+
+const TaskableDocument = new Set(['task_state', 'progress_state']);
+
+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(
+ [[id, { type: 'mdx_comment', position: 0 }]],
+ { deep: false }
+ );
+ }
+
+ @computed
+ get isLandingpage() {
+ return SidebarVersions.some((version) => version.entryPath === this.path);
+ }
+
+ @computed
+ get tree(): PageTree {
+ return {
+ id: this.id,
+ path: this.path,
+ pages: this.subPages.map((page) => page.tree)
+ };
+ }
+
+ @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 (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,15 +94,30 @@ export default class Page {
}
@action
- addDocumentRoot(doc: iDocument) {
- this.documentRootIds.add(doc.documentRootId);
+ assertDocumentRoot(doc: iDocument) {
+ // this.documentRootIds.add(doc.documentRootId);
+ if (process.env.NODE_ENV === 'production') {
+ return;
+ }
+ if (!this.documentRootConfigs.has(doc.documentRootId)) {
+ this.store.loadPageIndex(true);
+ }
+ }
+
+ @action
+ addDocumentRootConfig(id: string, config: PageConfig) {
+ this.documentRootConfigs.set(id, { type: config.type, position: config.position });
}
@computed
get documentRoots() {
- return this.store.root.documentRootStore.documentRoots.filter(
- (doc) => this.documentRootIds.has(doc.id) && !doc.isDummy
- );
+ 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
@@ -67,6 +139,15 @@ export default class Page {
.sort((a, b) => a!.root!.meta!.pagePosition - b!.root!.meta.pagePosition);
}
+ @computed
+ get editingStateV2(): (TaskState | ProgressState)[] {
+ return this.documentRoots
+ .flatMap((doc) => doc.documents)
+ .filter(
+ (d): d is TaskState | ProgressState => d instanceof TaskState || d instanceof ProgressState
+ );
+ }
+
@action
setPrimaryStudentGroupName(name?: string) {
this._primaryStudentGroupName = name;
@@ -100,15 +181,35 @@ 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);
+ }
+
+ @computed
+ get taskableDocumentRootIds() {
+ return [...this.documentRootConfigs.keys()].filter((id) => {
+ const config = this.documentRootConfigs.get(id)!;
+ return TaskableDocument.has(config.type);
+ });
+ }
+
+ @computed
+ get taskableDocuments() {
+ 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 && TaskableDocument.has(doc.type));
});
}
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/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/plugins/remark-page/plugin.ts b/src/plugins/remark-page/plugin.ts
index 709756319..90d748676 100644
--- a/src/plugins/remark-page/plugin.ts
+++ b/src/plugins/remark-page/plugin.ts
@@ -1,6 +1,6 @@
import type { Plugin, Transformer } from 'unified';
import type { MdxJsxFlowElement } from 'mdast-util-mdx';
-import type { Root } from 'mdast';
+import type { Node, Root } from 'mdast';
import { toJsxAttribute } from '../helpers';
/**
@@ -8,14 +8,14 @@ import { toJsxAttribute } from '../helpers';
* This is useful to initialize a page model on page load and to trigger side-effects on page display,
* as to load models attached to the `page_id`'s root document.
*/
-const plugin: Plugin = function plugin(): Transformer {
+const plugin: Plugin = function plugin(): Transformer {
return async (root, file) => {
const { visit, EXIT } = await import('unist-util-visit');
const { page_id } = (file.data?.frontMatter || {}) as { page_id?: string };
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..79f0edeb7 100644
--- a/src/siteConfig/markdownPluginConfigs.ts
+++ b/src/siteConfig/markdownPluginConfigs.ts
@@ -1,5 +1,7 @@
-import type { Node } from 'mdast';
+import type { Code, Node } from 'mdast';
+import path from 'path';
import type { LeafDirective } from 'mdast-util-directive';
+import type { MdxJsxFlowElement, MdxJsxTextElement } from 'mdast-util-mdx-jsx';
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 +15,13 @@ 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 pageProgressStatePlugin from '@tdev/page-progress-state/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 +137,79 @@ export const enumerateAnswersPluginConfig = [
export const pdfPluginConfig = pdfPlugin;
-export const pagePluginConfig = pagePlugin;
+const cwd = process.cwd();
+const indexPath = path.resolve(cwd, './src/.page-index');
+const ComponentsWithId = new Set(['TaskState', 'ProgressState']);
+const AnswerTypes = new Set(['state', 'progress']);
+export const pagePluginConfig = [pagePlugin, {}];
+
+export const pageProgressStatePluginConfig = [
+ pageProgressStatePlugin,
+ {
+ components: [
+ {
+ name: 'Answer',
+ docTypeExtractor: (node: MdxJsxFlowElement) =>
+ 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';
+ }
+ },
+ docsParentDir: '/tdev-website'
+ }
+];
+
export const graphvizPluginConfig = graphvizPlugin;
export const commentPluginConfig = [
@@ -173,6 +249,7 @@ export const recommendedRemarkPlugins = [
enumerateAnswersPluginConfig,
pdfPluginConfig,
pagePluginConfig,
+ pageProgressStatePluginConfig,
commentPluginConfig,
linkAnnotationPluginConfig,
codeAsAttributePluginConfig
diff --git a/src/stores/ComponentStore.ts b/src/stores/ComponentStore.ts
index 590702442..3bd3a76f3 100644
--- a/src/stores/ComponentStore.ts
+++ b/src/stores/ComponentStore.ts
@@ -62,6 +62,14 @@ class ComponentStore {
this.components.set(type, component as ContainerComponent);
}
+ @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..a6b7996ce 100644
--- a/src/stores/PageStore.ts
+++ b/src/stores/PageStore.ts
@@ -4,6 +4,29 @@ 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, GlobalVersion, useDocsSidebar } from '@docusaurus/plugin-content-docs/client';
+import siteConfig from '@generated/docusaurus.config';
+import { PageIndex } from '@tdev/page-progress-state';
+import { groupBy } from 'es-toolkit/array';
+import globalData from '@generated/globalData';
+const ensureTrailingSlash = (str: string) => {
+ return str.endsWith('/') ? str : `${str}/`;
+};
+export const SidebarVersions = (
+ globalData['docusaurus-plugin-content-docs'].default as GlobalPluginData
+).versions.map((version) => {
+ const { mainDocId } = version;
+ const mainDoc = version.docs.find((doc) => doc.id === mainDocId);
+ return {
+ name: version.name,
+ entryPath: ensureTrailingSlash(mainDoc!.path),
+ versionPath: ensureTrailingSlash(version.path)
+ };
+});
+
+interface PagesIndex {
+ documentRoots: PageIndex[];
+}
export class PageStore extends iStore {
readonly root: RootStore;
@@ -13,11 +36,86 @@ 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);
+ }
+
+ @computed
+ get tree() {
+ return SidebarVersions.map((version) => {
+ if (version.entryPath === version.versionPath) {
+ const rootLandingPage = this.pages.find((page) => page.path === version.entryPath);
+ return {
+ version: version.name,
+ path: version.versionPath,
+ pages: [rootLandingPage!.tree]
+ };
+ }
+ const pages = this.pages.filter((page) => page.parentPath === version.versionPath);
+ return {
+ version: version.name,
+ path: version.versionPath,
+ pages: pages.map((page) => page.tree)
+ };
+ });
+ }
+
+ @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((docs) => {
+ const doc = docs[0]!;
+ const page = new Page(doc.page_id, doc.path, this);
+ docs.filter((doc) => doc.position > 0).forEach((d) =>
+ page.addDocumentRootConfig(d.id, d)
+ );
+ return 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 +131,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 +153,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/DocSidebarItem/TaskableState/index.tsx b/src/theme/DocSidebarItem/TaskableState/index.tsx
new file mode 100644
index 000000000..68a68c52c
--- /dev/null
+++ b/src/theme/DocSidebarItem/TaskableState/index.tsx
@@ -0,0 +1,35 @@
+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 { mdiCheckCircle, mdiProgressQuestion } from '@mdi/js';
+
+interface Props {
+ page?: Page;
+ className?: string;
+}
+
+const TaskableState = observer((props: Props) => {
+ const { page } = props;
+ if (!page) {
+ return null;
+ }
+
+ return (
+
+ 0 ? mdiCheckCircle : mdiProgressQuestion}
+ size={0.8}
+ color={
+ page.taskableDocuments?.length > 0
+ ? 'var(--ifm-color-success)'
+ : 'var(--ifm-color-warning)'
+ }
+ />
+
+ );
+});
+
+export default TaskableState;
diff --git a/src/theme/DocSidebarItem/TaskableState/styles.module.scss b/src/theme/DocSidebarItem/TaskableState/styles.module.scss
new file mode 100644
index 000000000..c2ef55ac1
--- /dev/null
+++ b/src/theme/DocSidebarItem/TaskableState/styles.module.scss
@@ -0,0 +1,7 @@
+.taskableState {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 2em;
+ cursor: pointer;
+}
diff --git a/src/theme/DocSidebarItem/index.tsx b/src/theme/DocSidebarItem/index.tsx
new file mode 100644
index 000000000..e02599289
--- /dev/null
+++ b/src/theme/DocSidebarItem/index.tsx
@@ -0,0 +1,30 @@
+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 './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..c9228be94
--- /dev/null
+++ b/src/theme/DocSidebarItem/styles.module.scss
@@ -0,0 +1,11 @@
+.item {
+ position: relative;
+ .icon {
+ position: absolute;
+ right: 0.5em;
+ top: 0;
+ &.category {
+ right: 3em;
+ }
+ }
+}
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/yarn.lock b/yarn.lock
index 372f5d1db..e0ad94a83 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1089,11 +1089,16 @@
"@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"
@@ -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"
@@ -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.20.1"
+ resolved "https://registry.yarnpkg.com/@hpcc-js/wasm-graphviz/-/wasm-graphviz-1.20.1.tgz#f31016380418beeef9ed18837714a9046d3f0772"
+ integrity sha512-F4ga7c4vXfmBRwORJI9QeAW4n9Rbzqc0o+0sB0CsbL5n1E1Gxhb6EWq/M5ya0z/KpSOs3LvxLKc8yoJB9QBa6w==
"@iconify/types@^2.0.0":
version "2.0.0"
@@ -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"
@@ -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.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.0.tgz#f762035679a6b168138c94c960fda0b0cdb00d98"
+ integrity sha512-tPgXB6cDTndIe1ah7u6amCI1T0SsnlOuKgg10Xh3uizJk4e5M1JGaUMk7J4ciuAUcFpbOiNhm2XIjP9ON0dUqA==
+
+"@rollup/rollup-android-arm64@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.0.tgz#1061ce0bfa6a6da361bda52a2949612769cd22ef"
+ integrity sha512-sa4LyseLLXr1onr97StkU1Nb7fWcg6niokTwEVNOO7awaKaoRObQ54+V/hrF/BP1noMEaaAW6Fg2d/CfLiq3Mg==
+
+"@rollup/rollup-darwin-arm64@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.0.tgz#20d65f967566000d22ef6c9defb0f96d2f95ed79"
+ integrity sha512-/NNIj9A7yLjKdmkx5dC2XQ9DmjIECpGpwHoGmA5E1AhU0fuICSqSWScPhN1yLCkEdkCwJIDu2xIeLPs60MNIVg==
+
+"@rollup/rollup-darwin-x64@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.0.tgz#2a805303beb4cd44bfef993c39582cb0f1794f90"
+ integrity sha512-xoh8abqgPrPYPr7pTYipqnUi1V3em56JzE/HgDgitTqZBZ3yKCWI+7KUkceM6tNweyUKYru1UMi7FC060RyKwA==
+
+"@rollup/rollup-freebsd-arm64@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.0.tgz#7cf26a60d7245e9207a253ac07f11ddfcc47d622"
+ integrity sha512-PCkMh7fNahWSbA0OTUQ2OpYHpjZZr0hPr8lId8twD7a7SeWrvT3xJVyza+dQwXSSq4yEQTMoXgNOfMCsn8584g==
+
+"@rollup/rollup-freebsd-x64@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.0.tgz#2b1acc1e624b47f676f526df30bb4357ea21f9b6"
+ integrity sha512-1j3stGx+qbhXql4OCDZhnK7b01s6rBKNybfsX+TNrEe9JNq4DLi1yGiR1xW+nL+FNVvI4D02PUnl6gJ/2y6WJA==
+
+"@rollup/rollup-linux-arm-gnueabihf@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.0.tgz#1ba1ef444365a51687c7af2824b370791a1e3aaf"
+ integrity sha512-eyrr5W08Ms9uM0mLcKfM/Uzx7hjhz2bcjv8P2uynfj0yU8GGPdz8iYrBPhiLOZqahoAMB8ZiolRZPbbU2MAi6Q==
+
+"@rollup/rollup-linux-arm-musleabihf@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.0.tgz#e49863b683644bbbb9abc5b051c9b9d59774c3a0"
+ integrity sha512-Xds90ITXJCNyX9pDhqf85MKWUI4lqjiPAipJ8OLp8xqI2Ehk+TCVhF9rvOoN8xTbcafow3QOThkNnrM33uCFQA==
+
+"@rollup/rollup-linux-arm64-gnu@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.0.tgz#fda3bfd43d2390d2d99bc7d9617c2db2941da52b"
+ integrity sha512-Xws2KA4CLvZmXjy46SQaXSejuKPhwVdaNinldoYfqruZBaJHqVo6hnRa8SDo9z7PBW5x84SH64+izmldCgbezw==
+
+"@rollup/rollup-linux-arm64-musl@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.0.tgz#aea6199031404f80a0ccf33d5d3a63de53819da0"
+ integrity sha512-hrKXKbX5FdaRJj7lTMusmvKbhMJSGWJ+w++4KmjiDhpTgNlhYobMvKfDoIWecy4O60K6yA4SnztGuNTQF+Lplw==
+
+"@rollup/rollup-linux-loong64-gnu@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.0.tgz#f467333a5691f69a18295a7051e1cebb6815fdfe"
+ integrity sha512-6A+nccfSDGKsPm00d3xKcrsBcbqzCTAukjwWK6rbuAnB2bHaL3r9720HBVZ/no7+FhZLz/U3GwwZZEh6tOSI8Q==
+
+"@rollup/rollup-linux-loong64-musl@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.0.tgz#e46dffc29692caa743140636eb0d1d9a24ed0fc3"
+ integrity sha512-4P1VyYUe6XAJtQH1Hh99THxr0GKMMwIXsRNOceLrJnaHTDgk1FTcTimDgneRJPvB3LqDQxUmroBclQ1S0cIJwQ==
+
+"@rollup/rollup-linux-ppc64-gnu@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.0.tgz#be5b4494047ccbaadf1542fe9ac45b7788e73968"
+ integrity sha512-8Vv6pLuIZCMcgXre6c3nOPhE0gjz1+nZP6T+hwWjr7sVH8k0jRkH+XnfjjOTglyMBdSKBPPz54/y1gToSKwrSQ==
+
+"@rollup/rollup-linux-ppc64-musl@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.0.tgz#b14ce2b0fe9c37fd0646ec3095087c1d64c791f4"
+ integrity sha512-r1te1M0Sm2TBVD/RxBPC6RZVwNqUTwJTA7w+C/IW5v9Ssu6xmxWEi+iJQlpBhtUiT1raJ5b48pI8tBvEjEFnFA==
+
+"@rollup/rollup-linux-riscv64-gnu@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.0.tgz#b78357f88ee7a34f677b118714594e37a2362a8c"
+ integrity sha512-say0uMU/RaPm3CDQLxUUTF2oNWL8ysvHkAjcCzV2znxBr23kFfaxocS9qJm+NdkRhF8wtdEEAJuYcLPhSPbjuQ==
+
+"@rollup/rollup-linux-riscv64-musl@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.0.tgz#f44107ec0c30d691552c89eb3e4f287c33c56c3c"
+ integrity sha512-/MU7/HizQGsnBREtRpcSbSV1zfkoxSTR7wLsRmBPQ8FwUj5sykrP1MyJTvsxP5KBq9SyE6kH8UQQQwa0ASeoQQ==
+
+"@rollup/rollup-linux-s390x-gnu@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.0.tgz#ddb1cf80fb21b376a45a4e93ffdbeb15205d38f3"
+ integrity sha512-Q9eh+gUGILIHEaJf66aF6a414jQbDnn29zeu0eX3dHMuysnhTvsUvZTCAyZ6tJhUjnvzBKE4FtuaYxutxRZpOg==
+
+"@rollup/rollup-linux-x64-gnu@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.0.tgz#0da46a644c87e1d8b13da5e2901037193caea8d3"
+ integrity sha512-OR5p5yG5OKSxHReWmwvM0P+VTPMwoBS45PXTMYaskKQqybkS3Kmugq1W+YbNWArF8/s7jQScgzXUhArzEQ7x0A==
+
+"@rollup/rollup-linux-x64-musl@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.0.tgz#e561c93b6a23114a308396806551c25e28d3e303"
+ integrity sha512-XeatKzo4lHDsVEbm1XDHZlhYZZSQYym6dg2X/Ko0kSFgio+KXLsxwJQprnR48GvdIKDOpqWqssC3iBCjoMcMpw==
+
+"@rollup/rollup-openbsd-x64@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.0.tgz#52490600775364a0476f26be7ddc416dfa11439b"
+ integrity sha512-Lu71y78F5qOfYmubYLHPcJm74GZLU6UJ4THkf/a1K7Tz2ycwC2VUbsqbJAXaR6Bx70SRdlVrt2+n5l7F0agTUw==
+
+"@rollup/rollup-openharmony-arm64@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.0.tgz#c25988aae57bd21fa7d0fcb014ef85ec8987ad2c"
+ integrity sha512-v5xwKDWcu7qhAEcsUubiav7r+48Uk/ENWdr82MBZZRIm7zThSxCIVDfb3ZeRRq9yqk+oIzMdDo6fCcA5DHfMyA==
+
+"@rollup/rollup-win32-arm64-msvc@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.0.tgz#572a8cd78442441121f1a6b5ad686ab723c31ae4"
+ integrity sha512-XnaaaSMGSI6Wk8F4KK3QP7GfuuhjGchElsVerCplUuxRIzdvZ7hRBpLR0omCmw+kI2RFJB80nenhOoGXlJ5TfQ==
+
+"@rollup/rollup-win32-ia32-msvc@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.0.tgz#431fa95c0be8377907fe4e7070aaa4016c7b7e3b"
+ integrity sha512-3K1lP+3BXY4t4VihLw5MEg6IZD3ojSYzqzBG571W3kNQe4G4CcFpSUQVgurYgib5d+YaCjeFow8QivWp8vuSvA==
+
+"@rollup/rollup-win32-x64-gnu@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.0.tgz#19db67feb9c5fe09b1358efd1d97c5f6b299d347"
+ integrity sha512-MDk610P/vJGc5L5ImE4k5s+GZT3en0KoK1MKPXCRgzmksAMk79j4h3k1IerxTNqwDLxsGxStEZVBqG0gIqZqoA==
+
+"@rollup/rollup-win32-x64-msvc@4.57.0":
+ version "4.57.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.0.tgz#6f38851da1123ac0380121108abd31ff21205c3d"
+ integrity sha512-Zv7v6q6aV+VslnpwzqKAmrk5JdVkLUzok2208ZXGipjb+msxBr/fJPZyeEXiFgH7k62Ak0SLIfxQRZQvTuf7rQ==
"@rsdoctor/client@0.4.13":
version "0.4.13"
@@ -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"
@@ -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.10"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-19.2.10.tgz#f3ea799e6b4cebad6dfd231c238fc9de7652e2d2"
+ integrity sha512-WPigyYuGhgZ/cTPRXB2EwUw+XvsRA3GqHlsP4qteqrnnjDrApbS7MxcGr/hke5iUoeB7E/gQtrs9I37zAJ0Vjw==
dependencies:
csstype "^3.2.2"
@@ -6906,9 +6918,9 @@ autoprefixer@^10.4.19, autoprefixer@^10.4.23:
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"
@@ -6983,9 +6995,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.18"
+ resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.18.tgz#c8281693035a9261b10d662a5379650a6c2d1ff7"
+ integrity sha512-e23vBV1ZLfjb9apvfPk4rHVu2ry6RIr2Wfs+O324okSidrX7pTAnEJPCh/O5BtRlr7QtZI7ktOP3vsqr7Z5XoA==
batch@0.6.1:
version "0.6.1"
@@ -7025,6 +7037,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 +7068,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"
@@ -8041,9 +8068,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"
@@ -8804,9 +8831,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.279"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.279.tgz#67dfdeb22fd81412d0d18d1d9b2c749e9b8945cb"
+ integrity sha512-0bblUU5UNdOt5G7XqGiJtpZMONma6WAfq9vsFmtn9x1+joAObr6x1chfqyxFSDCAFwFhCQDrqeAr6MYdpwJ9Hg==
elkjs@^0.9.0, elkjs@^0.9.3:
version "0.9.3"
@@ -9454,6 +9481,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"
@@ -10788,9 +10820,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"
@@ -13610,7 +13642,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 +13779,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 +13936,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 +14126,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 +14508,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.0"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.57.0.tgz#9fa13c1fb779d480038f45708b5e01b9449b6853"
+ integrity sha512-e5lPJi/aui4TO1LpAXIRLySmwXSE8k3b9zoGfd42p67wzxog4WHjiZF3M2uheQih4DGyc25QEV4yRBbpueNiUA==
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.0"
+ "@rollup/rollup-android-arm64" "4.57.0"
+ "@rollup/rollup-darwin-arm64" "4.57.0"
+ "@rollup/rollup-darwin-x64" "4.57.0"
+ "@rollup/rollup-freebsd-arm64" "4.57.0"
+ "@rollup/rollup-freebsd-x64" "4.57.0"
+ "@rollup/rollup-linux-arm-gnueabihf" "4.57.0"
+ "@rollup/rollup-linux-arm-musleabihf" "4.57.0"
+ "@rollup/rollup-linux-arm64-gnu" "4.57.0"
+ "@rollup/rollup-linux-arm64-musl" "4.57.0"
+ "@rollup/rollup-linux-loong64-gnu" "4.57.0"
+ "@rollup/rollup-linux-loong64-musl" "4.57.0"
+ "@rollup/rollup-linux-ppc64-gnu" "4.57.0"
+ "@rollup/rollup-linux-ppc64-musl" "4.57.0"
+ "@rollup/rollup-linux-riscv64-gnu" "4.57.0"
+ "@rollup/rollup-linux-riscv64-musl" "4.57.0"
+ "@rollup/rollup-linux-s390x-gnu" "4.57.0"
+ "@rollup/rollup-linux-x64-gnu" "4.57.0"
+ "@rollup/rollup-linux-x64-musl" "4.57.0"
+ "@rollup/rollup-openbsd-x64" "4.57.0"
+ "@rollup/rollup-openharmony-arm64" "4.57.0"
+ "@rollup/rollup-win32-arm64-msvc" "4.57.0"
+ "@rollup/rollup-win32-ia32-msvc" "4.57.0"
+ "@rollup/rollup-win32-x64-gnu" "4.57.0"
+ "@rollup/rollup-win32-x64-msvc" "4.57.0"
fsevents "~2.3.2"
rou3@^0.7.10: