- {isWelcome ? null : (
-
- )}
+
+ {hasTabs ?
:
}
+ {showPreviewToolbar ?
:
}
+
{body}
- {previewHtml ? : null}
+ {previewHtml && activeTab?.kind === 'file' ? : null}
{commentBubble && interactionMode === 'comment'
? (() => {
diff --git a/apps/desktop/src/renderer/src/components/Sidebar.tsx b/apps/desktop/src/renderer/src/components/Sidebar.tsx
index 29d890d7..7e3fc3f9 100644
--- a/apps/desktop/src/renderer/src/components/Sidebar.tsx
+++ b/apps/desktop/src/renderer/src/components/Sidebar.tsx
@@ -82,10 +82,15 @@ export function Sidebar({ prompt, setPrompt, onSubmit }: SidebarProps) {
);
const cancelGeneration = useCodesignStore((s) => s.cancelGeneration);
const inputFiles = useCodesignStore((s) => s.inputFiles);
+ const canvasScene = useCodesignStore((s) => s.canvasScene);
+ const canvasImportedFiles = useCodesignStore((s) => s.canvasImportedFiles);
+ const canvasRevision = useCodesignStore((s) => s.canvasRevision);
+ const lastGeneratedCanvasRevision = useCodesignStore((s) => s.lastGeneratedCanvasRevision);
const referenceUrl = useCodesignStore((s) => s.referenceUrl);
const setReferenceUrl = useCodesignStore((s) => s.setReferenceUrl);
const pickInputFiles = useCodesignStore((s) => s.pickInputFiles);
const removeInputFile = useCodesignStore((s) => s.removeInputFile);
+ const removeCanvasImportedFile = useCodesignStore((s) => s.removeCanvasImportedFile);
const pickDesignSystemDirectory = useCodesignStore((s) => s.pickDesignSystemDirectory);
const clearDesignSystem = useCodesignStore((s) => s.clearDesignSystem);
const lastUsage = useCodesignStore((s) => s.lastUsage);
@@ -113,7 +118,18 @@ export function Sidebar({ prompt, setPrompt, onSubmit }: SidebarProps) {
const designSystem = config?.designSystem ?? null;
const currentDesign = designs.find((d) => d.id === currentDesignId) ?? null;
- const contextItems = buildComposerContextItems({ inputFiles, referenceUrl, config });
+ const hasCanvasContext = Boolean(
+ (canvasScene && canvasScene.elements.length > 0) || canvasImportedFiles.length > 0,
+ );
+ const canvasWillBeSent = hasCanvasContext && canvasRevision > lastGeneratedCanvasRevision;
+ const visibleFiles = [...inputFiles, ...canvasImportedFiles].filter(
+ (file, index, all) => all.findIndex((candidate) => candidate.path === file.path) === index,
+ );
+ const contextItems = buildComposerContextItems({
+ inputFiles: visibleFiles,
+ referenceUrl,
+ config,
+ });
useEffect(() => {
if (currentDesignId && !chatLoaded) {
@@ -164,24 +180,53 @@ export function Sidebar({ prompt, setPrompt, onSubmit }: SidebarProps) {
contextSummary={
contextItems.length > 0 ? (
- {inputFiles.map((file) => (
+ {visibleFiles.map((file) => {
+ const isCanvasImport = canvasImportedFiles.some(
+ (candidate) => candidate.path === file.path,
+ );
+ return (
+
+
+ {file.name}
+ {isCanvasImport ? (
+
+ {t('canvas.canvasTab')}
+
+ ) : null}
+
+ isCanvasImport
+ ? removeCanvasImportedFile(file.path)
+ : removeInputFile(file.path)
+ }
+ aria-label={t('sidebar.removeFile', { name: file.name })}
+ className="inline-flex items-center justify-center rounded-full text-[var(--color-text-muted)] hover:text-[var(--color-text-primary)] transition-colors"
+ >
+
+
+
+ );
+ })}
+ {hasCanvasContext ? (
-
- {file.name}
- removeInputFile(file.path)}
- aria-label={t('sidebar.removeFile', { name: file.name })}
- className="inline-flex items-center justify-center rounded-full text-[var(--color-text-muted)] hover:text-[var(--color-text-primary)] transition-colors"
- >
-
-
+
+ {t('canvas.canvasTab')}
+
+ {canvasWillBeSent ? t('canvas.contextReady') : t('canvas.contextUpToDate')}
- ))}
+ ) : null}
{referenceUrl.trim() ? (
),
});
diff --git a/apps/desktop/src/renderer/src/components/chat/UserMessage.tsx b/apps/desktop/src/renderer/src/components/chat/UserMessage.tsx
index de1eb82d..44009892 100644
--- a/apps/desktop/src/renderer/src/components/chat/UserMessage.tsx
+++ b/apps/desktop/src/renderer/src/components/chat/UserMessage.tsx
@@ -3,22 +3,33 @@ import { useT } from '@open-codesign/i18n';
interface UserMessageProps {
text: string;
attachedSkills?: string[];
+ contextBadges?: string[];
}
/**
* Claude-style user message: right-aligned bubble with subtle accent tint
* background. No "You" label — bubble alignment carries the role signal.
*/
-export function UserMessage({ text, attachedSkills }: UserMessageProps) {
+export function UserMessage({ text, attachedSkills, contextBadges }: UserMessageProps) {
const t = useT();
+ const hasMeta =
+ (attachedSkills && attachedSkills.length > 0) || (contextBadges && contextBadges.length > 0);
return (
{text}
- {attachedSkills && attachedSkills.length > 0 ? (
+ {hasMeta ? (
- {attachedSkills.map((s) => (
+ {contextBadges?.map((badge) => (
+
+ {badge}
+
+ ))}
+ {attachedSkills?.map((s) => (
[0];
+type AppState = NonNullable;
+type BinaryFiles = Exclude;
+
+export interface CanvasSceneSnapshot {
+ elements: readonly ExcalidrawElement[];
+ appState: Partial;
+ files: BinaryFiles;
+}
+
+export interface CanvasContextArtifact {
+ name: string;
+ content: string;
+}
+
+const MAX_FRAME_EXPORTS = 4;
+
+function sanitizeSvg(svg: string): string {
+ return svg
+ .replace(/data:image\/[^"]+/g, 'data:image/omitted')
+ .replace(/\s+/g, ' ')
+ .trim();
+}
+
+function describeElement(element: ExcalidrawElement): string {
+ const parts = [`- ${element.type}`];
+ if ('x' in element && 'y' in element) {
+ parts.push(`at (${Math.round(element.x)}, ${Math.round(element.y)})`);
+ }
+ if ('width' in element && 'height' in element) {
+ parts.push(`size ${Math.round(element.width)}x${Math.round(element.height)}`);
+ }
+ if ('text' in element && typeof element.text === 'string' && element.text.trim().length > 0) {
+ parts.push(`text "${element.text.trim().slice(0, 120)}"`);
+ }
+ if (element.type === 'image') {
+ parts.push('image');
+ }
+ return parts.join(' | ');
+}
+
+function buildSummary(scene: CanvasSceneSnapshot): string {
+ const elements = getNonDeletedElements(scene.elements);
+ const frames = elements.filter(
+ (element): element is ExcalidrawFrameLikeElement =>
+ element.type === 'frame' || element.type === 'magicframe',
+ );
+ const topText = elements
+ .filter((element): element is ExcalidrawElement & { text: string } => 'text' in element)
+ .map((element) => element.text.trim())
+ .filter((text) => text.length > 0)
+ .slice(0, 12);
+
+ const lines = [
+ '# Canvas context',
+ '',
+ `- Total visible elements: ${elements.length}`,
+ `- Frames: ${frames.length}`,
+ `- Imported image elements: ${elements.filter((element) => element.type === 'image').length}`,
+ ];
+
+ if (topText.length > 0) {
+ lines.push('- Notable text labels:');
+ lines.push(...topText.map((text) => ` - ${text}`));
+ }
+
+ if (frames.length > 0) {
+ lines.push('', '## Frames');
+ frames.slice(0, MAX_FRAME_EXPORTS).forEach((frame, index) => {
+ lines.push(`### Frame ${index + 1}`);
+ lines.push(describeElement(frame));
+ });
+ }
+
+ lines.push('', '## Elements');
+ elements.slice(0, 60).forEach((element) => {
+ lines.push(describeElement(element));
+ });
+
+ if (elements.length > 60) {
+ lines.push(`- ... ${elements.length - 60} more elements omitted`);
+ }
+
+ return lines.join('\n');
+}
+
+async function exportSvg(
+ name: string,
+ scene: CanvasSceneSnapshot,
+ exportingFrame?: ExcalidrawFrameLikeElement,
+): Promise {
+ const svg = await exportToSvg({
+ elements: getNonDeletedElements(scene.elements),
+ appState: {
+ exportBackground: true,
+ exportWithDarkMode: false,
+ viewBackgroundColor: '#ffffff',
+ ...scene.appState,
+ },
+ files: scene.files,
+ exportingFrame: exportingFrame ?? null,
+ });
+ return {
+ name,
+ content: sanitizeSvg(svg.outerHTML),
+ };
+}
+
+export function hasCanvasContent(scene: CanvasSceneSnapshot | null): boolean {
+ return Boolean(scene && getNonDeletedElements(scene.elements).length > 0);
+}
+
+export async function buildCanvasContextArtifacts(
+ scene: CanvasSceneSnapshot | null,
+): Promise {
+ if (!hasCanvasContent(scene)) return [];
+
+ const safeScene = scene as CanvasSceneSnapshot;
+ const artifacts: CanvasContextArtifact[] = [
+ {
+ name: 'canvas-summary.md',
+ content: buildSummary(safeScene),
+ },
+ ];
+
+ const frames = getNonDeletedElements(safeScene.elements).filter(
+ (element): element is ExcalidrawFrameLikeElement =>
+ element.type === 'frame' || element.type === 'magicframe',
+ );
+
+ if (frames.length > 0) {
+ const frameExports = await Promise.all(
+ frames
+ .slice(0, MAX_FRAME_EXPORTS)
+ .map((frame, index) => exportSvg(`canvas-frame-${index + 1}.svg`, safeScene, frame)),
+ );
+ artifacts.push(...frameExports);
+ } else {
+ artifacts.push(await exportSvg('canvas.svg', safeScene));
+ }
+
+ return artifacts;
+}
diff --git a/apps/desktop/src/renderer/src/store.test.ts b/apps/desktop/src/renderer/src/store.test.ts
index ba5c8938..0749894f 100644
--- a/apps/desktop/src/renderer/src/store.test.ts
+++ b/apps/desktop/src/renderer/src/store.test.ts
@@ -28,6 +28,28 @@ function deferred() {
return { promise, resolve, reject };
}
+function canvasInputFile(path: string, name: string) {
+ return { path, name, size: 128 };
+}
+
+function canvasScene() {
+ return {
+ elements: [
+ {
+ id: 'canvas-1',
+ type: 'rectangle',
+ isDeleted: false,
+ x: 10,
+ y: 20,
+ width: 120,
+ height: 80,
+ },
+ ],
+ appState: {},
+ files: {},
+ };
+}
+
function resetStore() {
useCodesignStore.setState({
...initialState,
@@ -154,7 +176,11 @@ describe('useCodesignStore generation cancellation', () => {
const secondId = useCodesignStore.getState().activeGenerationId;
if (!secondId) throw new Error('expected second generation id');
expect(secondId).not.toBe(firstId);
+ await vi.waitFor(() => expect(pendingById.has(secondId)).toBe(true));
+ // Cancellation can now land before the first run reaches the provider, so
+ // this pending task may or may not exist. If it does, resolving it must
+ // not override the active second run.
pendingById.get(firstId)?.resolve({
artifacts: [{ content: 'old' }],
message: 'Old result',
@@ -232,6 +258,163 @@ describe('useCodesignStore generation cancellation', () => {
});
});
+describe('useCodesignStore auto-continue incomplete todos', () => {
+ it('fires one silent continuation per design until a new explicit prompt resets the guard', async () => {
+ const sendPromptMock = vi.fn(async () => undefined);
+ const mockedSendPrompt = sendPromptMock as unknown as SendPromptFn;
+
+ useCodesignStore.setState({
+ currentDesignId: 'design-incomplete',
+ isGenerating: false,
+ autoContinueIncompleteFired: new Set(),
+ sendPrompt: mockedSendPrompt,
+ });
+
+ const first = useCodesignStore
+ .getState()
+ .tryAutoContinueIncomplete('design-incomplete', ['Finish the final screen']);
+ const second = useCodesignStore
+ .getState()
+ .tryAutoContinueIncomplete('design-incomplete', ['Finish the final screen']);
+
+ expect(first).toBe(true);
+ expect(second).toBe(false);
+ expect(sendPromptMock).toHaveBeenCalledTimes(1);
+ expect(sendPromptMock).toHaveBeenCalledWith(
+ expect.objectContaining({
+ silent: true,
+ prompt: expect.stringContaining('Finish the final screen'),
+ }),
+ );
+
+ useCodesignStore.setState({ sendPrompt: initialState.sendPrompt });
+ });
+});
+
+describe('useCodesignStore canvas context attachments', () => {
+ it('shows canvas context in the user chat payload and sends fresh canvas files when dirty', async () => {
+ const append = vi.fn(async (input: { designId: string; kind: string; payload: unknown }) => ({
+ id: 1,
+ designId: input.designId,
+ seq: 1,
+ kind: input.kind,
+ payload: input.payload,
+ snapshotId: null,
+ createdAt: new Date().toISOString(),
+ schemaVersion: 1,
+ }));
+ const generate = vi.fn(async (payload: { attachments: Array<{ path: string; name: string }> }) => ({
+ artifacts: [],
+ message: 'done',
+ }));
+
+ vi.stubGlobal('window', {
+ codesign: {
+ generate,
+ chat: {
+ seedFromSnapshots: vi.fn(async () => {}),
+ list: vi.fn(async () => []),
+ append,
+ },
+ canvas: {
+ saveState: vi.fn(async () => ({ ok: true })),
+ writeContextFiles: vi.fn(async () => [canvasInputFile('/tmp/canvas.svg', 'canvas.svg')]),
+ },
+ },
+ setTimeout,
+ clearTimeout,
+ });
+
+ useCodesignStore.setState({
+ currentDesignId: 'design-canvas',
+ canvasScene: canvasScene() as never,
+ canvasImportedFiles: [canvasInputFile('/tmp/ref.png', 'ref.png')],
+ canvasSceneLoaded: true,
+ canvasRevision: 2,
+ lastGeneratedCanvasRevision: 1,
+ });
+
+ await useCodesignStore.getState().sendPrompt({ prompt: 'use the canvas' });
+
+ expect(append).toHaveBeenCalledWith(
+ expect.objectContaining({
+ designId: 'design-canvas',
+ kind: 'user',
+ payload: expect.objectContaining({
+ text: 'use the canvas',
+ contextBadges: ['Canvas context'],
+ }),
+ }),
+ );
+ expect(generate).toHaveBeenCalledWith(
+ expect.objectContaining({
+ attachments: expect.arrayContaining([
+ expect.objectContaining({ name: 'ref.png' }),
+ expect.objectContaining({ name: 'canvas.svg' }),
+ ]),
+ }),
+ );
+ expect(useCodesignStore.getState().lastGeneratedCanvasRevision).toBe(2);
+ });
+
+ it('does not resend canvas context when the canvas is unchanged since the last generation', async () => {
+ const append = vi.fn(async (input: { designId: string; kind: string; payload: unknown }) => ({
+ id: 1,
+ designId: input.designId,
+ seq: 1,
+ kind: input.kind,
+ payload: input.payload,
+ snapshotId: null,
+ createdAt: new Date().toISOString(),
+ schemaVersion: 1,
+ }));
+ const writeContextFiles = vi.fn(async () => [canvasInputFile('/tmp/canvas.svg', 'canvas.svg')]);
+ const generate = vi.fn(async () => ({ artifacts: [], message: 'done' }));
+
+ vi.stubGlobal('window', {
+ codesign: {
+ generate,
+ chat: {
+ seedFromSnapshots: vi.fn(async () => {}),
+ list: vi.fn(async () => []),
+ append,
+ },
+ canvas: {
+ saveState: vi.fn(async () => ({ ok: true })),
+ writeContextFiles,
+ },
+ },
+ setTimeout,
+ clearTimeout,
+ });
+
+ useCodesignStore.setState({
+ currentDesignId: 'design-canvas',
+ canvasScene: canvasScene() as never,
+ canvasImportedFiles: [canvasInputFile('/tmp/ref.png', 'ref.png')],
+ canvasSceneLoaded: true,
+ canvasRevision: 2,
+ lastGeneratedCanvasRevision: 2,
+ });
+
+ await useCodesignStore.getState().sendPrompt({ prompt: 'follow up' });
+
+ expect(writeContextFiles).not.toHaveBeenCalled();
+ expect(append).toHaveBeenCalledWith(
+ expect.objectContaining({
+ kind: 'user',
+ payload: expect.not.objectContaining({
+ contextBadges: expect.anything(),
+ }),
+ }),
+ );
+ expect(generate).toHaveBeenCalledWith(
+ expect.objectContaining({
+ attachments: [],
+ }),
+ );
+ });
+});
describe('useCodesignStore view navigation', () => {
it('starts on hub view', () => {
expect(useCodesignStore.getState().view).toBe('hub');
@@ -475,7 +658,6 @@ describe('useCodesignStore design management', () => {
await useCodesignStore.getState().switchDesign('design-a');
expect(useCodesignStore.getState().currentDesignId).toBe('design-a');
});
-
it('createNewDesign resets messages + preview and stores the new id as current', async () => {
const created = {
schemaVersion: 1 as const,
diff --git a/apps/desktop/src/renderer/src/store.ts b/apps/desktop/src/renderer/src/store.ts
index 8ad93906..16bce299 100644
--- a/apps/desktop/src/renderer/src/store.ts
+++ b/apps/desktop/src/renderer/src/store.ts
@@ -1,3 +1,5 @@
+import { restore, serializeAsJSON } from '@excalidraw/excalidraw';
+import type { ExcalidrawElement } from '@excalidraw/excalidraw/element/types';
import { i18n } from '@open-codesign/i18n';
import type {
ChatAppendInput,
@@ -25,8 +27,13 @@ import { create } from 'zustand';
import type { StoreApi } from 'zustand';
import type { CodesignApi, ExportFormat } from '../../preload/index';
import { recordAction, snapshotTimeline } from './lib/action-timeline';
+import { buildCanvasContextArtifacts, hasCanvasContent } from './lib/canvasContext';
import { rendererLogger } from './lib/renderer-logger';
+type RestoredScene = ReturnType;
+type ExcalidrawAppState = RestoredScene['appState'];
+type BinaryFiles = RestoredScene['files'];
+
declare global {
interface Window {
codesign?: CodesignApi;
@@ -123,9 +130,16 @@ export type PreviewViewport = 'desktop' | 'tablet' | 'mobile';
// 'files' is the pinned tab that hosts the file list + inline preview; 'file'
// tabs wrap a single file preview opened by double-clicking the list. Closing
// a 'file' tab is purely UI state — it does NOT delete anything.
-export type CanvasTab = { kind: 'files' } | { kind: 'file'; path: string };
+export type CanvasTab = { kind: 'files' } | { kind: 'canvas' } | { kind: 'file'; path: string };
export const FILES_TAB: CanvasTab = { kind: 'files' };
+export const CANVAS_TAB: CanvasTab = { kind: 'canvas' };
+
+interface PersistedCanvasState {
+ elements: readonly ExcalidrawElement[];
+ appState: Partial;
+ files: BinaryFiles;
+}
// Pure reducers, exported for unit tests so we don't need RTL for slice logic.
export function openFileTab(tabs: CanvasTab[], path: string): { tabs: CanvasTab[]; index: number } {
@@ -142,8 +156,8 @@ export function closeTabAt(
): { tabs: CanvasTab[]; activeIndex: number } {
const tab = tabs[target];
if (!tab) return { tabs, activeIndex };
- // The pinned 'files' tab cannot be closed — it always anchors index 0.
- if (tab.kind === 'files') return { tabs, activeIndex };
+ // The pinned 'files' and 'canvas' tabs cannot be closed.
+ if (tab.kind === 'files' || tab.kind === 'canvas') return { tabs, activeIndex };
const next = tabs.filter((_, i) => i !== target);
let nextActive = activeIndex;
if (activeIndex === target) {
@@ -246,6 +260,12 @@ interface CodesignState {
// Workstream G — canvas file tabs
canvasTabs: CanvasTab[];
activeCanvasTab: number;
+ canvasScene: PersistedCanvasState | null;
+ canvasImportedFiles: LocalInputFile[];
+ canvasSceneLoaded: boolean;
+ canvasSeed: number;
+ canvasRevision: number;
+ lastGeneratedCanvasRevision: number;
// PR4 — diagnostics slice. Pull-based: Diagnostics panel + error UI call
// `refreshDiagnosticEvents` on mount / when a failure surfaces. No polling.
@@ -460,6 +480,19 @@ interface CodesignState {
closeCanvasTab: (index: number) => void;
setActiveCanvasTab: (index: number) => void;
resetCanvasTabs: () => void;
+ loadCanvasStateForCurrentDesign: () => Promise;
+ updateCanvasScene: (input: {
+ elements: readonly ExcalidrawElement[];
+ appState: Partial;
+ files: BinaryFiles;
+ }) => void;
+ persistCanvasState: (
+ sceneJson: string | null,
+ importedFiles?: LocalInputFile[] | undefined,
+ ) => Promise;
+ addCanvasImportedFile: (file: LocalInputFile) => void;
+ removeCanvasImportedFile: (path: string) => void;
+ buildCanvasContextFiles: () => Promise;
}
export interface CommentBubbleAnchor {
@@ -578,6 +611,28 @@ function uniqueFiles(files: LocalInputFile[]): LocalInputFile[] {
return result;
}
+function parseCanvasScene(sceneJson: string | null): PersistedCanvasState | null {
+ if (!sceneJson || sceneJson.trim().length === 0) return null;
+ try {
+ const restored = restore(
+ JSON.parse(sceneJson) as {
+ appState?: Partial;
+ elements?: readonly ExcalidrawElement[];
+ files?: BinaryFiles;
+ },
+ null,
+ null,
+ );
+ return {
+ elements: restored.elements,
+ appState: restored.appState,
+ files: restored.files,
+ };
+ } catch {
+ return null;
+ }
+}
+
function tr(key: string, options?: Record): string {
return i18n.t(key, options ?? {}) as string;
}
@@ -1390,8 +1445,14 @@ export const useCodesignStore = create((set, get) => ({
currentSnapshotId: null,
liveRects: {},
- canvasTabs: [FILES_TAB],
- activeCanvasTab: 0,
+ canvasTabs: [FILES_TAB, CANVAS_TAB],
+ activeCanvasTab: 1,
+ canvasScene: null,
+ canvasImportedFiles: [],
+ canvasSceneLoaded: false,
+ canvasSeed: 0,
+ canvasRevision: 0,
+ lastGeneratedCanvasRevision: 0,
recentEvents: [],
unreadErrorCount: 0,
@@ -1544,11 +1605,32 @@ export const useCodesignStore = create((set, get) => ({
);
if (!request) return;
- const enrichedPrompt = buildEnrichedPrompt(request.prompt, pendingEdits);
- const pendingEditIds = pendingEdits.map((c) => c.id);
+ if (get().currentDesignId === null && window.codesign.snapshots) {
+ await get().ensureCurrentDesign();
+ }
const generationId = newId();
const designIdAtStart = get().currentDesignId;
+ const canvasSceneAtSend = get().canvasScene;
+ const canvasImportedFilesAtSend = get().canvasImportedFiles;
+ const hasCanvasStateToPersist =
+ canvasSceneAtSend !== null || canvasImportedFilesAtSend.length > 0;
+ if (hasCanvasStateToPersist) {
+ await get().persistCanvasState(null, canvasImportedFilesAtSend);
+ }
+ const canvasRevisionAtSend = get().canvasRevision;
+ const shouldIncludeCanvasContext =
+ canvasRevisionAtSend > get().lastGeneratedCanvasRevision &&
+ (hasCanvasContent(canvasSceneAtSend) || canvasImportedFilesAtSend.length > 0);
+ if (
+ designIdAtStart &&
+ !input.silent &&
+ get().autoContinueIncompleteFired.has(designIdAtStart)
+ ) {
+ const nextFired = new Set(get().autoContinueIncompleteFired);
+ nextFired.delete(designIdAtStart);
+ set({ autoContinueIncompleteFired: nextFired });
+ }
set(() => ({
isGenerating: true,
activeGenerationId: generationId,
@@ -1565,14 +1647,36 @@ export const useCodesignStore = create((set, get) => ({
// the current HTML via text_editor.view() when needed, so older prose in
// history offers diminishing value and pushes us toward the token ceiling.
const HISTORY_CAP = 12;
+ const canvasContextFilesPromise = shouldIncludeCanvasContext
+ ? get().buildCanvasContextFiles()
+ : Promise.resolve([]);
+ const fullHistoryPromise = buildHistoryFromChat(designIdAtStart);
+ const [canvasContextFiles, fullHistory] = await Promise.all([
+ canvasContextFilesPromise,
+ fullHistoryPromise,
+ ]);
+ const mergedAttachments = uniqueFiles([
+ ...request.attachments,
+ ...(shouldIncludeCanvasContext ? canvasImportedFilesAtSend : []),
+ ...canvasContextFiles,
+ ]).slice(0, 12);
+
+ const enrichedPrompt = buildEnrichedPrompt(request.prompt, pendingEdits);
+ const pendingEditIds = pendingEdits.map((c) => c.id);
// chat_messages is the single source of truth for agent history. Fixes
// the race where a broken session + "继续" made the agent see a stale or
// empty history from a legacy mirror and drift off-task.
- const fullHistory = await buildHistoryFromChat(designIdAtStart);
const history =
fullHistory.length > HISTORY_CAP ? fullHistory.slice(-HISTORY_CAP) : fullHistory;
const isFirstPrompt = fullHistory.length === 0;
+ // Cancellation can land while we are still preparing attachments/history.
+ // Bail out before side effects or provider calls if this run is no longer
+ // the current generation.
+ if (get().activeGenerationId !== generationId) {
+ return;
+ }
+
// Append to the new chat_messages table so Sidebar v2 reflects activity
// even before Workstream B starts emitting streaming tool events. Silent
// prompts (auto-polish) skip this and the auto-rename: the agent still
@@ -1582,7 +1686,12 @@ export const useCodesignStore = create((set, get) => ({
void get().appendChatMessage({
designId: designIdAtStart,
kind: 'user',
- payload: { text: request.prompt },
+ payload: {
+ text: request.prompt,
+ ...(shouldIncludeCanvasContext
+ ? { contextBadges: [tr('canvas.contextBadge')] }
+ : {}),
+ },
});
}
@@ -1607,13 +1716,21 @@ export const useCodesignStore = create((set, get) => ({
history,
model: modelRef(cfg.provider, cfg.modelPrimary),
...(request.referenceUrl ? { referenceUrl: request.referenceUrl } : {}),
- attachments: request.attachments,
+ attachments: mergedAttachments,
generationId,
...(designIdAtStart ? { designId: designIdAtStart } : {}),
...(get().previewHtml ? { previousHtml: get().previewHtml as string } : {}),
},
designIdAtStart,
);
+ if (designIdAtStart && get().currentDesignId === designIdAtStart) {
+ set((s) => ({
+ lastGeneratedCanvasRevision:
+ s.currentDesignId === designIdAtStart
+ ? Math.max(s.lastGeneratedCanvasRevision, canvasRevisionAtSend)
+ : s.lastGeneratedCanvasRevision,
+ }));
+ }
// After a successful generate, persistDesignState (called inside
// applyGenerateSuccess) creates the new snapshot and updates
// currentSnapshotId via loadCommentsForCurrentDesign. Mark any pending
@@ -1960,12 +2077,19 @@ export const useCodesignStore = create((set, get) => ({
commentsLoaded: false,
commentBubble: null,
currentSnapshotId: null,
- canvasTabs: [FILES_TAB],
- activeCanvasTab: 0,
+ canvasTabs: [FILES_TAB, CANVAS_TAB],
+ activeCanvasTab: 1,
+ canvasScene: null,
+ canvasImportedFiles: [],
+ canvasSceneLoaded: false,
+ canvasSeed: get().canvasSeed + 1,
+ canvasRevision: 0,
+ lastGeneratedCanvasRevision: 0,
});
await get().loadDesigns();
void get().loadChatForCurrentDesign();
void get().loadCommentsForCurrentDesign();
+ void get().loadCanvasStateForCurrentDesign();
if (workspacePath) {
try {
await window.codesign.snapshots.updateWorkspace(design.id, workspacePath, false);
@@ -2041,11 +2165,18 @@ export const useCodesignStore = create((set, get) => ({
commentsLoaded: false,
commentBubble: null,
currentSnapshotId: null,
- canvasTabs: [FILES_TAB, { kind: 'file', path: 'index.html' }],
- activeCanvasTab: 1,
+ canvasTabs: [FILES_TAB, CANVAS_TAB, { kind: 'file', path: 'index.html' }],
+ activeCanvasTab: 2,
+ canvasScene: null,
+ canvasImportedFiles: [],
+ canvasSceneLoaded: false,
+ canvasSeed: get().canvasSeed + 1,
+ canvasRevision: 0,
+ lastGeneratedCanvasRevision: 0,
});
void get().loadChatForCurrentDesign();
void get().loadCommentsForCurrentDesign();
+ void get().loadCanvasStateForCurrentDesign();
void (async () => {
try {
const snapshots = await window.codesign?.snapshots.list(id);
@@ -2095,11 +2226,20 @@ export const useCodesignStore = create((set, get) => ({
commentsLoaded: false,
commentBubble: null,
currentSnapshotId: null,
- canvasTabs: latest ? [FILES_TAB, { kind: 'file', path: 'index.html' }] : [FILES_TAB],
- activeCanvasTab: latest ? 1 : 0,
+ canvasTabs: html
+ ? [FILES_TAB, CANVAS_TAB, { kind: 'file', path: 'index.html' }]
+ : [FILES_TAB, CANVAS_TAB],
+ activeCanvasTab: html ? 2 : 1,
+ canvasScene: null,
+ canvasImportedFiles: [],
+ canvasSceneLoaded: false,
+ canvasSeed: get().canvasSeed + 1,
+ canvasRevision: 0,
+ lastGeneratedCanvasRevision: 0,
});
void get().loadChatForCurrentDesign();
void get().loadCommentsForCurrentDesign();
+ void get().loadCanvasStateForCurrentDesign();
} catch (err) {
const msg = err instanceof Error ? err.message : tr('errors.unknown');
get().pushToast({
@@ -2181,8 +2321,14 @@ export const useCodesignStore = create((set, get) => ({
set({
currentDesignId: null,
previewHtml: null,
- canvasTabs: [FILES_TAB],
- activeCanvasTab: 0,
+ canvasTabs: [FILES_TAB, CANVAS_TAB],
+ activeCanvasTab: 1,
+ canvasScene: null,
+ canvasImportedFiles: [],
+ canvasSceneLoaded: false,
+ canvasSeed: get().canvasSeed + 1,
+ canvasRevision: 0,
+ lastGeneratedCanvasRevision: 0,
});
if (remaining.length > 0 && remaining[0]) {
await get().switchDesign(remaining[0].id);
@@ -2703,6 +2849,117 @@ export const useCodesignStore = create((set, get) => ({
}
},
+ async loadCanvasStateForCurrentDesign() {
+ const designId = get().currentDesignId;
+ if (!designId || !window.codesign?.canvas) {
+ set((s) => ({
+ canvasScene: null,
+ canvasImportedFiles: [],
+ canvasSceneLoaded: true,
+ canvasSeed: s.canvasSeed + 1,
+ canvasRevision: 0,
+ lastGeneratedCanvasRevision: 0,
+ }));
+ return;
+ }
+ try {
+ const saved = await window.codesign.canvas.loadState(designId);
+ if (get().currentDesignId !== designId) return;
+ const nextScene = parseCanvasScene(saved.sceneJson);
+ const nextImportedFiles = uniqueFiles(saved.importedFiles);
+ const hasSavedCanvas = hasCanvasContent(nextScene) || nextImportedFiles.length > 0;
+ set((s) => ({
+ canvasScene: nextScene,
+ canvasImportedFiles: nextImportedFiles,
+ canvasSceneLoaded: true,
+ canvasSeed: s.canvasSeed + 1,
+ canvasRevision: hasSavedCanvas ? 1 : 0,
+ lastGeneratedCanvasRevision: 0,
+ }));
+ } catch (err) {
+ console.warn('[open-codesign] loadCanvasStateForCurrentDesign failed:', err);
+ set((s) => ({
+ canvasScene: null,
+ canvasImportedFiles: [],
+ canvasSceneLoaded: true,
+ canvasSeed: s.canvasSeed + 1,
+ canvasRevision: 0,
+ lastGeneratedCanvasRevision: 0,
+ }));
+ }
+ },
+
+ updateCanvasScene(input) {
+ set((s) => ({
+ canvasScene: {
+ elements: input.elements,
+ appState: input.appState,
+ files: input.files,
+ },
+ canvasRevision: s.canvasRevision + 1,
+ }));
+ },
+
+ async persistCanvasState(sceneJson, importedFiles) {
+ const designId = get().currentDesignId;
+ if (!designId || !window.codesign?.canvas) return;
+ try {
+ const currentScene = get().canvasScene;
+ const nextSceneJson =
+ sceneJson ??
+ (currentScene
+ ? serializeAsJSON(
+ currentScene.elements,
+ currentScene.appState as ExcalidrawAppState,
+ currentScene.files,
+ 'local',
+ )
+ : null);
+ await window.codesign.canvas.saveState({
+ designId,
+ sceneJson: nextSceneJson,
+ importedFiles: uniqueFiles(importedFiles ?? get().canvasImportedFiles),
+ });
+ } catch (err) {
+ console.warn('[open-codesign] persistCanvasState failed:', err);
+ }
+ },
+
+ addCanvasImportedFile(file) {
+ set((s) => {
+ const next = uniqueFiles([...s.canvasImportedFiles, file]);
+ return { canvasImportedFiles: next, canvasRevision: s.canvasRevision + 1 };
+ });
+ void get().persistCanvasState(null);
+ },
+
+ removeCanvasImportedFile(path) {
+ set((s) => ({
+ canvasImportedFiles: s.canvasImportedFiles.filter((file) => file.path !== path),
+ canvasRevision: s.canvasRevision + 1,
+ }));
+ void get().persistCanvasState(null);
+ },
+
+ async buildCanvasContextFiles() {
+ const designId = get().currentDesignId;
+ const scene = get().canvasScene;
+ if (!designId || !window.codesign?.canvas || !hasCanvasContent(scene)) {
+ return [];
+ }
+ try {
+ const artifacts = await buildCanvasContextArtifacts(scene);
+ if (artifacts.length === 0) return [];
+ return await window.codesign.canvas.writeContextFiles({
+ designId,
+ files: artifacts,
+ });
+ } catch (err) {
+ console.warn('[open-codesign] buildCanvasContextFiles failed:', err);
+ return [];
+ }
+ },
+
openCanvasFileTab(path: string) {
set((s) => {
const result = openFileTab(s.canvasTabs, path);
@@ -2725,7 +2982,7 @@ export const useCodesignStore = create((set, get) => ({
},
resetCanvasTabs() {
- set({ canvasTabs: [FILES_TAB], activeCanvasTab: 0 });
+ set({ canvasTabs: [FILES_TAB, CANVAS_TAB], activeCanvasTab: 1 });
},
async refreshDiagnosticEvents() {
diff --git a/apps/desktop/src/renderer/test/excalidraw-shim.css b/apps/desktop/src/renderer/test/excalidraw-shim.css
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/apps/desktop/src/renderer/test/excalidraw-shim.css
@@ -0,0 +1 @@
+
diff --git a/apps/desktop/src/renderer/test/excalidraw-shim.tsx b/apps/desktop/src/renderer/test/excalidraw-shim.tsx
new file mode 100644
index 00000000..75db7a41
--- /dev/null
+++ b/apps/desktop/src/renderer/test/excalidraw-shim.tsx
@@ -0,0 +1,63 @@
+import type { ReactNode } from 'react';
+
+type BinaryFiles = Record;
+type ExcalidrawElementLike = {
+ id?: string;
+ type?: string;
+ isDeleted?: boolean;
+ x?: number;
+ y?: number;
+ width?: number;
+ height?: number;
+ text?: string;
+};
+
+export function Excalidraw(_props: Record): ReactNode {
+ return null;
+}
+
+export function serializeAsJSON(
+ elements: readonly ExcalidrawElementLike[],
+ appState: Record | null,
+ files: BinaryFiles | null,
+ source?: string,
+): string {
+ return JSON.stringify({
+ type: 'excalidraw',
+ version: 2,
+ source: source ?? 'test',
+ elements,
+ appState: appState ?? {},
+ files: files ?? {},
+ });
+}
+
+export function restore(
+ data: {
+ elements?: readonly ExcalidrawElementLike[];
+ appState?: Record;
+ files?: BinaryFiles;
+ } | null,
+) {
+ return {
+ elements: data?.elements ?? [],
+ appState: data?.appState ?? {},
+ files: data?.files ?? {},
+ };
+}
+
+export function getNonDeletedElements(elements: readonly ExcalidrawElementLike[]) {
+ return elements.filter((element) => !element?.isDeleted);
+}
+
+export async function exportToSvg(input: {
+ elements: readonly ExcalidrawElementLike[];
+ appState?: Record | null;
+ exportingFrame?: ExcalidrawElementLike | null;
+}) {
+ const frameLabel = input.exportingFrame?.type ? ` frame="${input.exportingFrame.type}"` : '';
+ const background = String(input.appState?.['viewBackgroundColor'] ?? '#ffffff');
+ return {
+ outerHTML: ` `,
+ };
+}
diff --git a/apps/desktop/vitest.config.ts b/apps/desktop/vitest.config.ts
new file mode 100644
index 00000000..6b1418a8
--- /dev/null
+++ b/apps/desktop/vitest.config.ts
@@ -0,0 +1,20 @@
+import { resolve } from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { defineConfig } from 'vitest/config';
+
+const rootDir = fileURLToPath(new URL('.', import.meta.url));
+
+export default defineConfig({
+ resolve: {
+ alias: [
+ {
+ find: /^@excalidraw\/excalidraw$/,
+ replacement: resolve(rootDir, 'src/renderer/test/excalidraw-shim.tsx'),
+ },
+ {
+ find: /^@excalidraw\/excalidraw\/index\.css$/,
+ replacement: resolve(rootDir, 'src/renderer/test/excalidraw-shim.css'),
+ },
+ ],
+ },
+});
diff --git a/packages/i18n/src/locales/en.json b/packages/i18n/src/locales/en.json
index ac96f71d..fd972631 100644
--- a/packages/i18n/src/locales/en.json
+++ b/packages/i18n/src/locales/en.json
@@ -39,6 +39,10 @@
},
"canvas": {
"filesTab": "Files",
+ "canvasTab": "Canvas",
+ "contextBadge": "Canvas context",
+ "contextReady": "Canvas context ready",
+ "contextUpToDate": "Canvas unchanged",
"filesTabEmpty": "No files yet",
"openInTab": "Open in tab",
"previewHint": "Thumbnail preview · double-click the file or use Open in tab for full view",
diff --git a/packages/i18n/src/locales/zh-CN.json b/packages/i18n/src/locales/zh-CN.json
index 9ef3304e..8b66844f 100644
--- a/packages/i18n/src/locales/zh-CN.json
+++ b/packages/i18n/src/locales/zh-CN.json
@@ -39,6 +39,10 @@
},
"canvas": {
"filesTab": "文件",
+ "canvasTab": "画布",
+ "contextBadge": "画布上下文",
+ "contextReady": "画布上下文将随本次发送",
+ "contextUpToDate": "画布未变更",
"filesTabEmpty": "还没有文件",
"openInTab": "在新标签打开",
"previewHint": "缩略预览 · 双击文件名或点击「在新标签打开」可在独立标签查看",
diff --git a/packages/shared/src/snapshot.ts b/packages/shared/src/snapshot.ts
index 5a36cd31..696dc64f 100644
--- a/packages/shared/src/snapshot.ts
+++ b/packages/shared/src/snapshot.ts
@@ -74,6 +74,7 @@ export interface ChatAppendInput {
export interface ChatUserPayload {
text: string;
attachedSkills?: string[];
+ contextBadges?: string[];
}
export interface ChatAssistantTextPayload {
text: string;
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f3c7fef7..905a13c2 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -44,6 +44,9 @@ importers:
apps/desktop:
dependencies:
+ '@excalidraw/excalidraw':
+ specifier: ^0.18.1
+ version: 0.18.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@open-codesign/artifacts':
specifier: workspace:*
version: link:../../packages/artifacts
@@ -97,7 +100,7 @@ importers:
version: 1.3.2
zustand:
specifier: ^5.0.2
- version: 5.0.12(@types/react@19.2.14)(react@19.2.5)
+ version: 5.0.12(@types/react@19.2.14)(react@19.2.5)(use-sync-external-store@1.6.0(react@19.2.5))
devDependencies:
'@tailwindcss/postcss':
specifier: ^4.0.0
@@ -116,7 +119,7 @@ importers:
version: 19.2.3(@types/react@19.2.14)
'@vitejs/plugin-react':
specifier: ^4.3.4
- version: 4.7.0(vite@6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))
+ version: 4.7.0(vite@6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.51.0)(tsx@4.21.0))
autoprefixer:
specifier: ^10.4.20
version: 10.5.0(postcss@8.5.10)
@@ -131,7 +134,7 @@ importers:
version: 26.8.1(dmg-builder@26.8.1)
electron-vite:
specifier: ^2.3.0
- version: 2.3.0(vite@6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))
+ version: 2.3.0(vite@6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.51.0)(tsx@4.21.0))
react-markdown:
specifier: ^10.1.0
version: 10.1.0(@types/react@19.2.14)(react@19.2.5)
@@ -146,10 +149,10 @@ importers:
version: 5.9.3
vite:
specifier: ^6.0.5
- version: 6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)
+ version: 6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.51.0)(tsx@4.21.0)
vitest:
specifier: ^2.1.8
- version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)
+ version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)(sass@1.51.0)
packages/artifacts:
dependencies:
@@ -165,7 +168,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.1.8
- version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)
+ version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)(sass@1.51.0)
packages/core:
dependencies:
@@ -193,7 +196,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.1.8
- version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)
+ version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)(sass@1.51.0)
packages/exporters:
dependencies:
@@ -218,7 +221,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.1.8
- version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)
+ version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)(sass@1.51.0)
packages/i18n:
dependencies:
@@ -243,7 +246,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.1.8
- version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)
+ version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)(sass@1.51.0)
packages/providers:
dependencies:
@@ -259,7 +262,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.1.8
- version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)
+ version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)(sass@1.51.0)
packages/runtime:
dependencies:
@@ -272,7 +275,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.1.8
- version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)
+ version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)(sass@1.51.0)
packages/shared:
dependencies:
@@ -285,7 +288,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.1.8
- version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)
+ version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)(sass@1.51.0)
packages/templates:
dependencies:
@@ -301,7 +304,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.1.8
- version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)
+ version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)(sass@1.51.0)
packages/ui:
dependencies:
@@ -344,19 +347,19 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.1.8
- version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)
+ version: 2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)(sass@1.51.0)
website:
devDependencies:
'@tailwindcss/vite':
specifier: ^4.0.0
- version: 4.2.2(vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0))
+ version: 4.2.2(vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)(sass@1.51.0))
tailwindcss:
specifier: ^4.0.0
version: 4.2.2
vitepress:
specifier: ^1.6.4
- version: 1.6.4(@algolia/client-search@5.50.2)(@types/node@22.19.17)(lightningcss@1.32.0)(postcss@8.5.10)(search-insights@2.17.3)(typescript@5.9.3)
+ version: 1.6.4(@algolia/client-search@5.50.2)(@types/node@22.19.17)(lightningcss@1.32.0)(postcss@8.5.10)(sass@1.51.0)(search-insights@2.17.3)(typescript@5.9.3)
packages:
@@ -443,6 +446,9 @@ packages:
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'}
+ '@antfu/install-pkg@1.1.0':
+ resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
+
'@anthropic-ai/sdk@0.90.0':
resolution: {integrity: sha512-MzZtPabJF1b0FTDl6Z6H5ljphPwACLGP13lu8MTiB8jXaW/YXlpOp+Po2cVou3MPM5+f5toyLnul9whKCy7fBg==}
hasBin: true
@@ -731,6 +737,12 @@ packages:
cpu: [x64]
os: [win32]
+ '@braintree/sanitize-url@6.0.2':
+ resolution: {integrity: sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==}
+
+ '@braintree/sanitize-url@7.1.2':
+ resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==}
+
'@changesets/apply-release-plan@7.1.1':
resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==}
@@ -786,6 +798,36 @@ packages:
'@changesets/write@0.4.0':
resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==}
+ '@chevrotain/cst-dts-gen@11.0.3':
+ resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==}
+
+ '@chevrotain/cst-dts-gen@12.0.0':
+ resolution: {integrity: sha512-fSL4KXjTl7cDgf0B5Rip9Q05BOrYvkJV/RrBTE/bKDN096E4hN/ySpcBK5B24T76dlQ2i32Zc3PAE27jFnFrKg==}
+
+ '@chevrotain/gast@11.0.3':
+ resolution: {integrity: sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==}
+
+ '@chevrotain/gast@12.0.0':
+ resolution: {integrity: sha512-1ne/m3XsIT8aEdrvT33so0GUC+wkctpUPK6zU9IlOyJLUbR0rg4G7ZiApiJbggpgPir9ERy3FRjT6T7lpgetnQ==}
+
+ '@chevrotain/regexp-to-ast@11.0.3':
+ resolution: {integrity: sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==}
+
+ '@chevrotain/regexp-to-ast@12.0.0':
+ resolution: {integrity: sha512-p+EW9MaJwgaHguhoqwOtx/FwuGr+DnNn857sXWOi/mClXIkPGl3rn7hGNWvo31HA3vyeQxjqe+H36yZJwYU8cA==}
+
+ '@chevrotain/types@11.0.3':
+ resolution: {integrity: sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==}
+
+ '@chevrotain/types@12.0.0':
+ resolution: {integrity: sha512-S+04vjFQKeuYw0/eW3U52LkAHQsB1ASxsPGsLPUyQgrZ2iNNibQrsidruDzjEX2JYfespXMG0eZmXlhA6z7nWA==}
+
+ '@chevrotain/utils@11.0.3':
+ resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==}
+
+ '@chevrotain/utils@12.0.0':
+ resolution: {integrity: sha512-lB59uJoaGIfOOL9knQqQRfhl9g7x8/wqFkp13zTdkRu1huG9kg6IJs1O8hqj9rs6h7orGxHJUKb+mX3rPbWGhA==}
+
'@develar/schema-utils@2.6.5':
resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==}
engines: {node: '>= 8.9.0'}
@@ -1303,6 +1345,40 @@ packages:
cpu: [x64]
os: [win32]
+ '@excalidraw/excalidraw@0.18.1':
+ resolution: {integrity: sha512-6i5Gt7IDTOH//qa0Z315Ly5iVRhjWpu2whrlQFqkuwrkKUWgRsMk0P5qdE7bpyDpai7jeLeWYkyj1eVAfni1lw==}
+ peerDependencies:
+ react: ^17.0.2 || ^18.2.0 || ^19.0.0
+ react-dom: ^17.0.2 || ^18.2.0 || ^19.0.0
+
+ '@excalidraw/laser-pointer@1.3.1':
+ resolution: {integrity: sha512-psA1z1N2qeAfsORdXc9JmD2y4CmDwmuMRxnNdJHZexIcPwaNEyIpNcelw+QkL9rz9tosaN9krXuKaRqYpRAR6g==}
+
+ '@excalidraw/markdown-to-text@0.1.2':
+ resolution: {integrity: sha512-1nDXBNAojfi3oSFwJswKREkFm5wrSjqay81QlyRv2pkITG/XYB5v+oChENVBQLcxQwX4IUATWvXM5BcaNhPiIg==}
+
+ '@excalidraw/mermaid-to-excalidraw@2.2.2':
+ resolution: {integrity: sha512-5VKQq5CdRocC82vOIUpQ5ufJOVV9FpBTdHGA+ULqazeIVV+cr299877omQCibsdS3Bpitz2fsnTwnIXEmLVDSg==}
+
+ '@excalidraw/random-username@1.1.0':
+ resolution: {integrity: sha512-nULYsQxkWHnbmHvcs+efMkJ4/9TtvNyFeLyHdeGxW0zHs6P+jYVqcRff9A6Vq9w9JXeDRnRh2VKvTtS19GW2qA==}
+ engines: {node: '>=10'}
+
+ '@floating-ui/core@1.7.5':
+ resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==}
+
+ '@floating-ui/dom@1.7.6':
+ resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==}
+
+ '@floating-ui/react-dom@2.1.8':
+ resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
+ '@floating-ui/utils@0.2.11':
+ resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==}
+
'@fontsource-variable/fraunces@5.2.9':
resolution: {integrity: sha512-Y6IjunlN9Ni723np+GIgAaKzCDBrPRrqNi01TZxHs5wtHYROWFM9W6yiT+/gGwSjWIRD18oX17kD/BRWekc/Lw==}
@@ -1330,6 +1406,9 @@ packages:
'@iconify/types@2.0.0':
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
+ '@iconify/utils@3.1.0':
+ resolution: {integrity: sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==}
+
'@inquirer/external-editor@1.0.3':
resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==}
engines: {node: '>=18'}
@@ -1386,6 +1465,12 @@ packages:
engines: {node: '>=20.0.0'}
hasBin: true
+ '@mermaid-js/parser@0.6.3':
+ resolution: {integrity: sha512-lnjOhe7zyHjc+If7yT4zoedx2vo4sHaTmtkl1+or8BRTnCtDmcTpAjpzDSfCZrshM5bCoz0GyidzadJAH1xobA==}
+
+ '@mermaid-js/parser@1.1.0':
+ resolution: {integrity: sha512-gxK9ZX2+Fex5zu8LhRQoMeMPEHbc73UKZ0FQ54YrQtUxE1VVhMwzeNtKRPAu5aXks4FasbMe4xB4bWrmq6Jlxw==}
+
'@mistralai/mistralai@2.2.0':
resolution: {integrity: sha512-JQUGIXjFWnw/J9LpTSf/ZXwVW3Sh8FBAcfTo5QvAHqkl4CfSiIwnjRJhMoAFcP6ncCe84YPU1ncDGX+p3OXnfg==}
@@ -1448,6 +1533,288 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ '@radix-ui/primitive@1.0.0':
+ resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==}
+
+ '@radix-ui/primitive@1.1.1':
+ resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==}
+
+ '@radix-ui/react-arrow@1.1.2':
+ resolution: {integrity: sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-collection@1.0.1':
+ resolution: {integrity: sha512-uuiFbs+YCKjn3X1DTSx9G7BHApu4GHbi3kgiwsnFUbOKCrwejAJv4eE4Vc8C0Oaxt9T0aV4ox0WCOdx+39Xo+g==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-compose-refs@1.0.0':
+ resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-compose-refs@1.1.1':
+ resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-context@1.0.0':
+ resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-context@1.1.1':
+ resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-direction@1.0.0':
+ resolution: {integrity: sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-dismissable-layer@1.1.5':
+ resolution: {integrity: sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-focus-guards@1.1.1':
+ resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-focus-scope@1.1.2':
+ resolution: {integrity: sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-id@1.0.0':
+ resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-id@1.1.0':
+ resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-popover@1.1.6':
+ resolution: {integrity: sha512-NQouW0x4/GnkFJ/pRqsIS3rM/k97VzKnVb2jB7Gq7VEGPy5g7uNV1ykySFt7eWSp3i2uSGFwaJcvIRJBAHmmFg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-popper@1.2.2':
+ resolution: {integrity: sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-portal@1.1.4':
+ resolution: {integrity: sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-presence@1.0.0':
+ resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-presence@1.1.2':
+ resolution: {integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-primitive@1.0.1':
+ resolution: {integrity: sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-primitive@2.0.2':
+ resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-roving-focus@1.0.2':
+ resolution: {integrity: sha512-HLK+CqD/8pN6GfJm3U+cqpqhSKYAWiOJDe+A+8MfxBnOue39QEeMa43csUn2CXCHQT0/mewh1LrrG4tfkM9DMA==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-slot@1.0.1':
+ resolution: {integrity: sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-slot@1.1.2':
+ resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-tabs@1.0.2':
+ resolution: {integrity: sha512-gOUwh+HbjCuL0UCo8kZ+kdUEG8QtpdO4sMQduJ34ZEz0r4922g9REOBM+vIsfwtGxSug4Yb1msJMJYN2Bk8TpQ==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+ react-dom: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-use-callback-ref@1.0.0':
+ resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-use-callback-ref@1.1.0':
+ resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-controllable-state@1.0.0':
+ resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-use-controllable-state@1.1.0':
+ resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-escape-keydown@1.1.0':
+ resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-layout-effect@1.0.0':
+ resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==}
+ peerDependencies:
+ react: ^16.8 || ^17.0 || ^18.0
+
+ '@radix-ui/react-use-layout-effect@1.1.0':
+ resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-rect@1.1.0':
+ resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-size@1.1.0':
+ resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/rect@1.1.0':
+ resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==}
+
'@rolldown/pluginutils@1.0.0-beta.27':
resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==}
@@ -1971,6 +2338,99 @@ packages:
'@types/cacheable-request@6.0.3':
resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==}
+ '@types/d3-array@3.2.2':
+ resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==}
+
+ '@types/d3-axis@3.0.6':
+ resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==}
+
+ '@types/d3-brush@3.0.6':
+ resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==}
+
+ '@types/d3-chord@3.0.6':
+ resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==}
+
+ '@types/d3-color@3.1.3':
+ resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==}
+
+ '@types/d3-contour@3.0.6':
+ resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==}
+
+ '@types/d3-delaunay@6.0.4':
+ resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==}
+
+ '@types/d3-dispatch@3.0.7':
+ resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==}
+
+ '@types/d3-drag@3.0.7':
+ resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==}
+
+ '@types/d3-dsv@3.0.7':
+ resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==}
+
+ '@types/d3-ease@3.0.2':
+ resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==}
+
+ '@types/d3-fetch@3.0.7':
+ resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==}
+
+ '@types/d3-force@3.0.10':
+ resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==}
+
+ '@types/d3-format@3.0.4':
+ resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==}
+
+ '@types/d3-geo@3.1.0':
+ resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==}
+
+ '@types/d3-hierarchy@3.1.7':
+ resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==}
+
+ '@types/d3-interpolate@3.0.4':
+ resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==}
+
+ '@types/d3-path@3.1.1':
+ resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==}
+
+ '@types/d3-polygon@3.0.2':
+ resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==}
+
+ '@types/d3-quadtree@3.0.6':
+ resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==}
+
+ '@types/d3-random@3.0.3':
+ resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==}
+
+ '@types/d3-scale-chromatic@3.1.0':
+ resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==}
+
+ '@types/d3-scale@4.0.9':
+ resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==}
+
+ '@types/d3-selection@3.0.11':
+ resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==}
+
+ '@types/d3-shape@3.1.8':
+ resolution: {integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==}
+
+ '@types/d3-time-format@4.0.3':
+ resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==}
+
+ '@types/d3-time@3.0.4':
+ resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==}
+
+ '@types/d3-timer@3.0.2':
+ resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==}
+
+ '@types/d3-transition@3.0.9':
+ resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==}
+
+ '@types/d3-zoom@3.0.8':
+ resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==}
+
+ '@types/d3@7.4.3':
+ resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==}
+
'@types/debug@4.1.13':
resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==}
@@ -1983,6 +2443,9 @@ packages:
'@types/fs-extra@9.0.13':
resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==}
+ '@types/geojson@7946.0.16':
+ resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
+
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
@@ -2030,6 +2493,9 @@ packages:
'@types/retry@0.12.0':
resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==}
+ '@types/trusted-types@2.0.7':
+ resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
+
'@types/unist@2.0.11':
resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
@@ -2054,6 +2520,9 @@ packages:
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
+ '@upsetjs/venn.js@2.0.0':
+ resolution: {integrity: sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==}
+
'@vitejs/plugin-react@4.7.0':
resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==}
engines: {node: ^14.18.0 || >=16.0.0}
@@ -2249,6 +2718,10 @@ packages:
resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
engines: {node: '>=12'}
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
app-builder-bin@5.0.0-alpha.12:
resolution: {integrity: sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==}
@@ -2265,6 +2738,10 @@ packages:
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+ aria-hidden@1.2.6:
+ resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
+ engines: {node: '>=10'}
+
aria-query@5.3.0:
resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
@@ -2391,6 +2868,10 @@ packages:
bignumber.js@9.3.1:
resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==}
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
bindings@1.5.0:
resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
@@ -2421,6 +2902,9 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
+ browser-fs-access@0.29.1:
+ resolution: {integrity: sha512-LSvVX5e21LRrXqVMhqtAwj5xPgDb+fXAIH80NsnCQ9xuZPs2xWsOREi24RKgZa1XOiQRbcmVrv87+ulOKsgjxw==}
+
browserslist@4.28.2:
resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
@@ -2472,6 +2956,9 @@ packages:
caniuse-lite@1.0.30001788:
resolution: {integrity: sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==}
+ canvas-roundrect-polyfill@0.0.1:
+ resolution: {integrity: sha512-yWq+R3U3jE+coOeEb3a3GgE2j/0MMiDKM/QpLb6h9ihf5fGY9UXtvK9o4vNqjWXoZz7/3EaSVU3IX53TvFFUOw==}
+
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -2506,6 +2993,27 @@ packages:
resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==}
engines: {node: '>= 16'}
+ chevrotain-allstar@0.3.1:
+ resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==}
+ peerDependencies:
+ chevrotain: ^11.0.0
+
+ chevrotain-allstar@0.4.1:
+ resolution: {integrity: sha512-PvVJm3oGqrveUVW2Vt/eZGeiAIsJszYweUcYwcskg9e+IubNYKKD+rHHem7A6XVO22eDAL+inxNIGAzZ/VIWlA==}
+ peerDependencies:
+ chevrotain: ^12.0.0
+
+ chevrotain@11.0.3:
+ resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==}
+
+ chevrotain@12.0.0:
+ resolution: {integrity: sha512-csJvb+6kEiQaqo1woTdSAuOWdN0WTLIydkKrBnS+V5gZz0oqBrp4kQ35519QgK6TpBThiG3V1vNSHlIkv4AglQ==}
+ engines: {node: '>=22.0.0'}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
chownr@1.1.4:
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
@@ -2552,6 +3060,10 @@ packages:
resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
engines: {node: '>=0.8'}
+ clsx@1.1.1:
+ resolution: {integrity: sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==}
+ engines: {node: '>=6'}
+
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
@@ -2570,6 +3082,14 @@ packages:
resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==}
engines: {node: '>= 6'}
+ commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+
+ commander@8.3.0:
+ resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
+ engines: {node: '>= 12'}
+
commander@9.5.0:
resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
engines: {node: ^12.20.0 || >=14}
@@ -2581,6 +3101,9 @@ packages:
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ confbox@0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
@@ -2594,12 +3117,27 @@ packages:
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+ cose-base@1.0.3:
+ resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==}
+
+ cose-base@2.2.0:
+ resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==}
+
+ crc-32@0.3.0:
+ resolution: {integrity: sha512-kucVIjOmMc1f0tv53BJ/5WIX+MGLcKuoBhnGqQrgKJNqLByb/sVMWfW/Aw6hw0jgcqjJ2pi9E5y32zOIpaUlsA==}
+ engines: {node: '>=0.8'}
+
crc@3.8.0:
resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==}
cross-dirname@0.1.0:
resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==}
+ cross-env@7.0.3:
+ resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
+ engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
+ hasBin: true
+
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
@@ -2607,37 +3145,196 @@ packages:
csstype@3.2.3:
resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
- data-uri-to-buffer@4.0.1:
- resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
- engines: {node: '>= 12'}
-
- data-uri-to-buffer@6.0.2:
- resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==}
- engines: {node: '>= 14'}
+ cytoscape-cose-bilkent@4.1.0:
+ resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==}
+ peerDependencies:
+ cytoscape: ^3.2.0
- debug@4.4.3:
- resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
- engines: {node: '>=6.0'}
+ cytoscape-fcose@2.2.0:
+ resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==}
peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
+ cytoscape: ^3.2.0
- decode-named-character-reference@1.3.0:
- resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==}
+ cytoscape@3.33.2:
+ resolution: {integrity: sha512-sj4HXd3DokGhzZAdjDejGvTPLqlt84vNFN8m7bGsOzDY5DyVcxIb2ejIXat2Iy7HxWhdT/N1oKyheJ5YdpsGuw==}
+ engines: {node: '>=0.10'}
- decompress-response@6.0.0:
- resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
- engines: {node: '>=10'}
+ d3-array@2.12.1:
+ resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==}
- deep-eql@5.0.2:
- resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
- engines: {node: '>=6'}
+ d3-array@3.2.4:
+ resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==}
+ engines: {node: '>=12'}
- deep-extend@0.6.0:
- resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
- engines: {node: '>=4.0.0'}
+ d3-axis@3.0.0:
+ resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==}
+ engines: {node: '>=12'}
+
+ d3-brush@3.0.0:
+ resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==}
+ engines: {node: '>=12'}
+
+ d3-chord@3.0.1:
+ resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==}
+ engines: {node: '>=12'}
+
+ d3-color@3.1.0:
+ resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==}
+ engines: {node: '>=12'}
+
+ d3-contour@4.0.2:
+ resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==}
+ engines: {node: '>=12'}
+
+ d3-delaunay@6.0.4:
+ resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==}
+ engines: {node: '>=12'}
+
+ d3-dispatch@3.0.1:
+ resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==}
+ engines: {node: '>=12'}
+
+ d3-drag@3.0.0:
+ resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==}
+ engines: {node: '>=12'}
+
+ d3-dsv@3.0.1:
+ resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ d3-ease@3.0.1:
+ resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==}
+ engines: {node: '>=12'}
+
+ d3-fetch@3.0.1:
+ resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==}
+ engines: {node: '>=12'}
+
+ d3-force@3.0.0:
+ resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==}
+ engines: {node: '>=12'}
+
+ d3-format@3.1.2:
+ resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==}
+ engines: {node: '>=12'}
+
+ d3-geo@3.1.1:
+ resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==}
+ engines: {node: '>=12'}
+
+ d3-hierarchy@3.1.2:
+ resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==}
+ engines: {node: '>=12'}
+
+ d3-interpolate@3.0.1:
+ resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==}
+ engines: {node: '>=12'}
+
+ d3-path@1.0.9:
+ resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==}
+
+ d3-path@3.1.0:
+ resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==}
+ engines: {node: '>=12'}
+
+ d3-polygon@3.0.1:
+ resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==}
+ engines: {node: '>=12'}
+
+ d3-quadtree@3.0.1:
+ resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==}
+ engines: {node: '>=12'}
+
+ d3-random@3.0.1:
+ resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==}
+ engines: {node: '>=12'}
+
+ d3-sankey@0.12.3:
+ resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==}
+
+ d3-scale-chromatic@3.1.0:
+ resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==}
+ engines: {node: '>=12'}
+
+ d3-scale@4.0.2:
+ resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==}
+ engines: {node: '>=12'}
+
+ d3-selection@3.0.0:
+ resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==}
+ engines: {node: '>=12'}
+
+ d3-shape@1.3.7:
+ resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==}
+
+ d3-shape@3.2.0:
+ resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==}
+ engines: {node: '>=12'}
+
+ d3-time-format@4.1.0:
+ resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==}
+ engines: {node: '>=12'}
+
+ d3-time@3.1.0:
+ resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==}
+ engines: {node: '>=12'}
+
+ d3-timer@3.0.1:
+ resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==}
+ engines: {node: '>=12'}
+
+ d3-transition@3.0.1:
+ resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ d3-selection: 2 - 3
+
+ d3-zoom@3.0.0:
+ resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==}
+ engines: {node: '>=12'}
+
+ d3@7.9.0:
+ resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==}
+ engines: {node: '>=12'}
+
+ dagre-d3-es@7.0.14:
+ resolution: {integrity: sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==}
+
+ data-uri-to-buffer@4.0.1:
+ resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
+ engines: {node: '>= 12'}
+
+ data-uri-to-buffer@6.0.2:
+ resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==}
+ engines: {node: '>= 14'}
+
+ dayjs@1.11.20:
+ resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==}
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decode-named-character-reference@1.3.0:
+ resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==}
+
+ decompress-response@6.0.0:
+ resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@5.0.2:
+ resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
+ engines: {node: '>=6'}
+
+ deep-extend@0.6.0:
+ resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
+ engines: {node: '>=4.0.0'}
defaults@1.0.4:
resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
@@ -2658,6 +3355,9 @@ packages:
resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==}
engines: {node: '>= 14'}
+ delaunator@5.1.0:
+ resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==}
+
delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
@@ -2674,6 +3374,9 @@ packages:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
+ detect-node-es@1.1.0:
+ resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
+
detect-node@2.1.0:
resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
@@ -2702,6 +3405,9 @@ packages:
dom-accessibility-api@0.5.16:
resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
+ dompurify@3.4.1:
+ resolution: {integrity: sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw==}
+
dotenv-expand@11.0.7:
resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==}
engines: {node: '>=12'}
@@ -2822,6 +3528,10 @@ packages:
es6-error@4.1.1:
resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==}
+ es6-promise-pool@2.5.0:
+ resolution: {integrity: sha512-VHErXfzR/6r/+yyzPKeBvO0lgjfC5cbDCQWjWwMZWSb6YU39TGIl51OUmCfWCq4ylMdJSB8zkz2vIuIeIxXApA==}
+ engines: {node: '>=0.10.0'}
+
esbuild@0.21.5:
resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
engines: {node: '>=12'}
@@ -2979,6 +3689,10 @@ packages:
fraction.js@5.3.4:
resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
+ fractional-indexing@3.2.0:
+ resolution: {integrity: sha512-PcOxmqwYCW7O2ovKRU8OoQQj2yqTfEB/yeTYk4gPid6dN5ODRfU1hXd9tTVZzax/0NkO7AxpHykvZnT1aYp/BQ==}
+ engines: {node: ^14.13.1 || >=16.0.0}
+
fs-constants@1.0.0:
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
@@ -3017,6 +3731,10 @@ packages:
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+ fuzzy@0.1.3:
+ resolution: {integrity: sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==}
+ engines: {node: '>= 0.6.0'}
+
gaxios@7.1.4:
resolution: {integrity: sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==}
engines: {node: '>=18'}
@@ -3037,6 +3755,10 @@ packages:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
+ get-nonce@1.0.1:
+ resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
+ engines: {node: '>=6'}
+
get-proto@1.0.1:
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
@@ -3080,6 +3802,9 @@ packages:
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
engines: {node: '>=10'}
+ glur@1.1.2:
+ resolution: {integrity: sha512-l+8esYHTKOx2G/Aao4lEQ0bnHWg4fWtJbVoZZT9Knxi01pB8C80BR85nONLFwkkQoFRCmXY+BUcGZN3yZ2QsRA==}
+
google-auth-library@10.6.2:
resolution: {integrity: sha512-e27Z6EThmVNNvtYASwQxose/G57rkRuaRbQyxM2bvYLLX/GqWZ5chWq2EBoUchJbCc57eC9ArzO5wMsEmWftCw==}
engines: {node: '>=18'}
@@ -3099,6 +3824,9 @@ packages:
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+ hachure-fill@0.5.2:
+ resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==}
+
happy-dom@20.9.0:
resolution: {integrity: sha512-GZZ9mKe8r646NUAf/zemnGbjYh4Bt8/MqASJY+pSm5ZDtc3YQox+4gsLI7yi1hba6o+eCsGxpHn5+iEVn31/FQ==}
engines: {node: '>=20.0.0'}
@@ -3197,6 +3925,9 @@ packages:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
+ image-blob-reduce@3.0.1:
+ resolution: {integrity: sha512-/VmmWgIryG/wcn4TVrV7cC4mlfUC/oyiKIfSg5eVM3Ten/c1c34RJhMYKCWTnoSMHSqXLt3tsrBR4Q2HInvN+Q==}
+
image-size@1.2.1:
resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==}
engines: {node: '>=16.x'}
@@ -3205,6 +3936,9 @@ packages:
immediate@3.0.6:
resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
+ immutable@4.3.8:
+ resolution: {integrity: sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==}
+
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
@@ -3222,6 +3956,13 @@ packages:
inline-style-parser@0.2.7:
resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
+ internmap@1.0.1:
+ resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==}
+
+ internmap@2.0.3:
+ resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
+ engines: {node: '>=12'}
+
ip-address@10.1.0:
resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==}
engines: {node: '>= 12'}
@@ -3232,6 +3973,10 @@ packages:
is-alphanumerical@2.0.1:
resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
is-decimal@2.0.1:
resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
@@ -3308,6 +4053,24 @@ packages:
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
+ jotai-scope@0.7.2:
+ resolution: {integrity: sha512-Gwed97f3dDObrO43++2lRcgOqw4O2sdr4JCjP/7eHK1oPACDJ7xKHGScpJX9XaflU+KBHXF+VhwECnzcaQiShg==}
+ peerDependencies:
+ jotai: '>=2.9.2'
+ react: '>=17.0.0'
+
+ jotai@2.11.0:
+ resolution: {integrity: sha512-zKfoBBD1uDw3rljwHkt0fWuja1B76R7CjznuBO+mSX6jpsO1EBeWNRKpeaQho9yPI/pvCv4recGfgOXGxwPZvQ==}
+ engines: {node: '>=12.20.0'}
+ peerDependencies:
+ '@types/react': '>=17.0.0'
+ react: '>=17.0.0'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ react:
+ optional: true
+
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -3363,9 +4126,30 @@ packages:
jws@4.0.1:
resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==}
+ katex@0.16.45:
+ resolution: {integrity: sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA==}
+ hasBin: true
+
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ khroma@2.1.0:
+ resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==}
+
+ langium@3.3.1:
+ resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==}
+ engines: {node: '>=16.0.0'}
+
+ langium@4.2.2:
+ resolution: {integrity: sha512-JUshTRAfHI4/MF9dH2WupvjSXyn8JBuUEWazB8ZVJUtXutT0doDlAv1XKbZ1Pb5sMexa8FF4CFBc0iiul7gbUQ==}
+ engines: {node: '>=20.10.0', npm: '>=10.2.3'}
+
+ layout-base@1.0.2:
+ resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==}
+
+ layout-base@2.0.1:
+ resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==}
+
lazy-val@1.0.5:
resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==}
@@ -3446,6 +4230,15 @@ packages:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
+ lodash-es@4.17.21:
+ resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+
+ lodash-es@4.18.1:
+ resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==}
+
+ lodash.debounce@4.0.8:
+ resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+
lodash.escaperegexp@4.1.2:
resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==}
@@ -3456,6 +4249,9 @@ packages:
lodash.startcase@4.4.0:
resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
+ lodash.throttle@4.1.1:
+ resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==}
+
lodash@4.18.1:
resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==}
@@ -3512,6 +4308,11 @@ packages:
markdown-table@3.0.4:
resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
+ marked@16.4.2:
+ resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==}
+ engines: {node: '>= 20'}
+ hasBin: true
+
matcher@3.0.0:
resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==}
engines: {node: '>=10'}
@@ -3569,6 +4370,9 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
+ mermaid@11.14.0:
+ resolution: {integrity: sha512-GSGloRsBs+JINmmhl0JDwjpuezCsHB4WGI4NASHxL3fHo3o/BRXTxhDLKnln8/Q0lRFRyDdEjmk1/d5Sn1Xz8g==}
+
micromark-core-commonmark@2.0.3:
resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
@@ -3745,6 +4549,9 @@ packages:
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
hasBin: true
+ mlly@1.8.2:
+ resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==}
+
mri@1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
engines: {node: '>=4'}
@@ -3752,11 +4559,24 @@ packages:
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ multimath@2.0.0:
+ resolution: {integrity: sha512-toRx66cAMJ+Ccz7pMIg38xSIrtnbozk0dchXezwQDMgQmbGpfxjtv68H+L00iFL8hxDaVjrmwAFSb3I6bg8Q2g==}
+
nanoid@3.3.11:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
+ nanoid@3.3.3:
+ resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ nanoid@4.0.2:
+ resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==}
+ engines: {node: ^14 || ^16 || >=18}
+ hasBin: true
+
napi-build-utils@2.0.0:
resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==}
@@ -3804,10 +4624,18 @@ packages:
engines: {node: ^18.17.0 || >=20.5.0}
hasBin: true
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
normalize-url@6.1.0:
resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
engines: {node: '>=10'}
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
object-keys@1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
@@ -3822,6 +4650,9 @@ packages:
oniguruma-to-es@3.1.1:
resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==}
+ open-color@1.9.1:
+ resolution: {integrity: sha512-vCseG/EQ6/RcvxhUcGJiHViOgrtz4x0XbZepXvKik66TMGkvbmjeJrKFyBEx6daG5rNyyd14zYXhz0hZVwQFOw==}
+
openai@6.26.0:
resolution: {integrity: sha512-zd23dbWTjiJ6sSAX6s0HrCZi41JwTA1bQVs0wLQPZ2/5o2gxOJA5wh7yOAUgwYybfhDXyhwlpeQf7Mlgx8EOCA==}
hasBin: true
@@ -3891,15 +4722,24 @@ packages:
package-manager-detector@0.2.11:
resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==}
+ package-manager-detector@1.6.0:
+ resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==}
+
pako@1.0.11:
resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
+ pako@2.0.3:
+ resolution: {integrity: sha512-WjR1hOeg+kki3ZIOjaf4b5WVcay1jaliKSYiEaB1XzwhMQZJxRdQRv0V31EKBYlxb4T7SK3hjfc/jxyU64BoSw==}
+
parse-entities@4.0.2:
resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
partial-json@0.1.7:
resolution: {integrity: sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==}
+ path-data-parser@0.1.0:
+ resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==}
+
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@@ -3927,6 +4767,9 @@ packages:
pathe@1.1.2:
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
pathval@2.0.1:
resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
engines: {node: '>= 14.16'}
@@ -3941,6 +4784,12 @@ packages:
perfect-debounce@1.0.0:
resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
+ perfect-freehand@1.2.0:
+ resolution: {integrity: sha512-h/0ikF1M3phW7CwpZ5MMvKnfpHficWoOEyr//KVNTxV4F6deRK1eYMtHyBKEAKFK0aXIEUK9oBvlF6PNXMDsAw==}
+
+ pica@7.1.1:
+ resolution: {integrity: sha512-WY73tMvNzXWEld2LicT9Y260L43isrZ85tPuqRyvtkljSDLmnNFQmZICt4xUJMVulmcc6L9O7jbBrtx3DOz/YQ==}
+
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -3956,10 +4805,31 @@ packages:
resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
engines: {node: '>=6'}
+ pkg-types@1.3.1:
+ resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
+
plist@3.1.0:
resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==}
engines: {node: '>=10.4.0'}
+ png-chunk-text@1.0.0:
+ resolution: {integrity: sha512-DEROKU3SkkLGWNMzru3xPVgxyd48UGuMSZvioErCure6yhOc/pRH2ZV+SEn7nmaf7WNf3NdIpH+UTrRdKyq9Lw==}
+
+ png-chunks-encode@1.0.0:
+ resolution: {integrity: sha512-J1jcHgbQRsIIgx5wxW9UmCymV3wwn4qCCJl6KYgEU/yHCh/L2Mwq/nMOkRPtmV79TLxRZj5w3tH69pvygFkDqA==}
+
+ png-chunks-extract@1.0.0:
+ resolution: {integrity: sha512-ZiVwF5EJ0DNZyzAqld8BP1qyJBaGOFaq9zl579qfbkcmOwWLLO4I9L8i2O4j3HkI6/35i0nKG2n+dZplxiT89Q==}
+
+ points-on-curve@0.2.0:
+ resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==}
+
+ points-on-curve@1.0.1:
+ resolution: {integrity: sha512-3nmX4/LIiyuwGLwuUrfhTlDeQFlAhi7lyK/zcRNGhalwapDWgAGR82bUpmn2mA03vII3fvNCG8jAONzKXwpxAg==}
+
+ points-on-path@0.2.1:
+ resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==}
+
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
@@ -4036,6 +4906,9 @@ packages:
resolution: {integrity: sha512-rLIUri7E/NQ3APSEYCCozaSJx0u8Tu9wxO6BJwnvXmIgILSK3L0TombaVh3izp1njAGrO6H2ru0hcIrLF+gWLw==}
engines: {node: '>=18'}
+ pwacompat@2.0.17:
+ resolution: {integrity: sha512-6Du7IZdIy7cHiv7AhtDy4X2QRM8IAD5DII69mt5qWibC2d15ZU8DmBG1WdZKekG11cChSu4zkSUGPF9sweOl6w==}
+
quansync@0.2.11:
resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
@@ -4087,6 +4960,36 @@ packages:
resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
engines: {node: '>=0.10.0'}
+ react-remove-scroll-bar@2.3.8:
+ resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-remove-scroll@2.7.2:
+ resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-style-singleton@2.2.3:
+ resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
react@19.2.5:
resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==}
engines: {node: '>=0.10.0'}
@@ -4106,6 +5009,10 @@ packages:
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
engines: {node: '>= 6'}
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
regex-recursion@6.0.2:
resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
@@ -4180,14 +5087,26 @@ packages:
resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==}
engines: {node: '>=8.0'}
+ robust-predicates@3.0.3:
+ resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==}
+
rollup@4.60.1:
resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
+ roughjs@4.6.4:
+ resolution: {integrity: sha512-s6EZ0BntezkFYMf/9mGn7M8XGIoaav9QQBCnJROWB3brUWQ683Q2LbRD/hq0Z3bAJ/9NVpU/5LpiTWvQMyLDhw==}
+
+ roughjs@4.6.6:
+ resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==}
+
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ rw@1.3.3:
+ resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
+
safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
@@ -4200,6 +5119,11 @@ packages:
sanitize-filename@1.6.4:
resolution: {integrity: sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==}
+ sass@1.51.0:
+ resolution: {integrity: sha512-haGdpTgywJTvHC2b91GSq+clTKGbtkkZmVAb82jZQN/wTy6qs8DdFm2lhEQbEwrY0QDRgSQ3xDurqM977C3noA==}
+ engines: {node: '>=12.0.0'}
+ hasBin: true
+
sax@1.6.0:
resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==}
engines: {node: '>=11.0.0'}
@@ -4272,6 +5196,9 @@ packages:
resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==}
engines: {node: '>=8'}
+ sliced@1.0.1:
+ resolution: {integrity: sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA==}
+
smart-buffer@4.2.0:
resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
@@ -4374,6 +5301,9 @@ packages:
style-to-object@1.0.14:
resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==}
+ stylis@4.4.0:
+ resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==}
+
sumchecker@3.0.1:
resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==}
engines: {node: '>= 8.0'}
@@ -4442,6 +5372,10 @@ packages:
tinyexec@0.3.2:
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
+ tinyexec@1.1.1:
+ resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==}
+ engines: {node: '>=18'}
+
tinyglobby@0.2.16:
resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==}
engines: {node: '>=12.0.0'}
@@ -4481,6 +5415,10 @@ packages:
ts-algebra@2.0.0:
resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==}
+ ts-dedent@2.2.0:
+ resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
+ engines: {node: '>=6.10'}
+
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
@@ -4492,6 +5430,9 @@ packages:
tunnel-agent@0.6.0:
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
+ tunnel-rat@0.1.2:
+ resolution: {integrity: sha512-lR5VHmkPhzdhrM092lI2nACsLO4QubF0/yoOhzX7c+wIpbN1GjHNzCc91QlpxBi+cnx8vVJ+Ur6vL5cEoQPFpQ==}
+
turbo@2.9.6:
resolution: {integrity: sha512-+v2QJey7ZUeUiuigkU+uFfklvNUyPI2VO2vBpMYJA+a1hKFLFiKtUYlRHdb3P9CrAvMzi0upbjI4WT+zKtqkBg==}
hasBin: true
@@ -4508,6 +5449,9 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
+ ufo@1.6.3:
+ resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
+
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
@@ -4558,12 +5502,41 @@ packages:
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ use-callback-ref@1.3.3:
+ resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ use-sidecar@1.1.3:
+ resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ use-sync-external-store@1.6.0:
+ resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
utf8-byte-length@1.0.5:
resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==}
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ uuid@11.1.0:
+ resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
+ hasBin: true
+
verror@1.10.1:
resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==}
engines: {node: '>=0.6.0'}
@@ -4691,6 +5664,29 @@ packages:
resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==}
engines: {node: '>=0.10.0'}
+ vscode-jsonrpc@8.2.0:
+ resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==}
+ engines: {node: '>=14.0.0'}
+
+ vscode-languageserver-protocol@3.17.5:
+ resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==}
+
+ vscode-languageserver-textdocument@1.0.12:
+ resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==}
+
+ vscode-languageserver-types@3.17.5:
+ resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==}
+
+ vscode-languageserver@9.0.1:
+ resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==}
+ hasBin: true
+
+ vscode-uri@3.0.8:
+ resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==}
+
+ vscode-uri@3.1.0:
+ resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
+
vue@3.5.32:
resolution: {integrity: sha512-vM4z4Q9tTafVfMAK7IVzmxg34rSzTFMyIe0UUEijUCkn9+23lj0WRfA83dg7eQZIUlgOSGrkViIaCfqSAUXsMw==}
peerDependencies:
@@ -4709,6 +5705,9 @@ packages:
webdriver-bidi-protocol@0.4.1:
resolution: {integrity: sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==}
+ webworkify@1.5.0:
+ resolution: {integrity: sha512-AMcUeyXAhbACL8S2hqqdqOLqvJ8ylmIbNwUIqQujRSouf4+eUFaXbG6F1Rbu+srlJMmxQWsiU7mOJi0nMBfM1g==}
+
whatwg-mimetype@3.0.0:
resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
engines: {node: '>=12'}
@@ -4803,6 +5802,21 @@ packages:
zod@3.25.76:
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
+ zustand@4.5.7:
+ resolution: {integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==}
+ engines: {node: '>=12.7.0'}
+ peerDependencies:
+ '@types/react': '>=16.8'
+ immer: '>=9.0.6'
+ react: '>=16.8'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ immer:
+ optional: true
+ react:
+ optional: true
+
zustand@5.0.12:
resolution: {integrity: sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==}
engines: {node: '>=12.20.0'}
@@ -4942,6 +5956,11 @@ snapshots:
'@alloc/quick-lru@5.2.0': {}
+ '@antfu/install-pkg@1.1.0':
+ dependencies:
+ package-manager-detector: 1.6.0
+ tinyexec: 1.1.1
+
'@anthropic-ai/sdk@0.90.0(zod@3.25.76)':
dependencies:
json-schema-to-ts: 3.1.1
@@ -5478,6 +6497,10 @@ snapshots:
'@biomejs/cli-win32-x64@1.9.4':
optional: true
+ '@braintree/sanitize-url@6.0.2': {}
+
+ '@braintree/sanitize-url@7.1.2': {}
+
'@changesets/apply-release-plan@7.1.1':
dependencies:
'@changesets/config': 3.1.4
@@ -5621,6 +6644,38 @@ snapshots:
human-id: 4.1.3
prettier: 2.8.8
+ '@chevrotain/cst-dts-gen@11.0.3':
+ dependencies:
+ '@chevrotain/gast': 11.0.3
+ '@chevrotain/types': 11.0.3
+ lodash-es: 4.17.21
+
+ '@chevrotain/cst-dts-gen@12.0.0':
+ dependencies:
+ '@chevrotain/gast': 12.0.0
+ '@chevrotain/types': 12.0.0
+
+ '@chevrotain/gast@11.0.3':
+ dependencies:
+ '@chevrotain/types': 11.0.3
+ lodash-es: 4.17.21
+
+ '@chevrotain/gast@12.0.0':
+ dependencies:
+ '@chevrotain/types': 12.0.0
+
+ '@chevrotain/regexp-to-ast@11.0.3': {}
+
+ '@chevrotain/regexp-to-ast@12.0.0': {}
+
+ '@chevrotain/types@11.0.3': {}
+
+ '@chevrotain/types@12.0.0': {}
+
+ '@chevrotain/utils@11.0.3': {}
+
+ '@chevrotain/utils@12.0.0': {}
+
'@develar/schema-utils@2.6.5':
dependencies:
ajv: 6.14.0
@@ -5975,6 +7030,76 @@ snapshots:
'@esbuild/win32-x64@0.27.7':
optional: true
+ '@excalidraw/excalidraw@0.18.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@braintree/sanitize-url': 6.0.2
+ '@excalidraw/laser-pointer': 1.3.1
+ '@excalidraw/mermaid-to-excalidraw': 2.2.2
+ '@excalidraw/random-username': 1.1.0
+ '@radix-ui/react-popover': 1.1.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-tabs': 1.0.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ browser-fs-access: 0.29.1
+ canvas-roundrect-polyfill: 0.0.1
+ clsx: 1.1.1
+ cross-env: 7.0.3
+ es6-promise-pool: 2.5.0
+ fractional-indexing: 3.2.0
+ fuzzy: 0.1.3
+ image-blob-reduce: 3.0.1
+ jotai: 2.11.0(@types/react@19.2.14)(react@19.2.5)
+ jotai-scope: 0.7.2(jotai@2.11.0(@types/react@19.2.14)(react@19.2.5))(react@19.2.5)
+ lodash.debounce: 4.0.8
+ lodash.throttle: 4.1.1
+ nanoid: 3.3.3
+ open-color: 1.9.1
+ pako: 2.0.3
+ perfect-freehand: 1.2.0
+ pica: 7.1.1
+ png-chunk-text: 1.0.0
+ png-chunks-encode: 1.0.0
+ png-chunks-extract: 1.0.0
+ points-on-curve: 1.0.1
+ pwacompat: 2.0.17
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ roughjs: 4.6.4
+ sass: 1.51.0
+ tunnel-rat: 0.1.2(@types/react@19.2.14)(react@19.2.5)
+ transitivePeerDependencies:
+ - '@types/react'
+ - '@types/react-dom'
+ - immer
+
+ '@excalidraw/laser-pointer@1.3.1': {}
+
+ '@excalidraw/markdown-to-text@0.1.2': {}
+
+ '@excalidraw/mermaid-to-excalidraw@2.2.2':
+ dependencies:
+ '@excalidraw/markdown-to-text': 0.1.2
+ '@mermaid-js/parser': 0.6.3
+ mermaid: 11.14.0
+ nanoid: 4.0.2
+
+ '@excalidraw/random-username@1.1.0': {}
+
+ '@floating-ui/core@1.7.5':
+ dependencies:
+ '@floating-ui/utils': 0.2.11
+
+ '@floating-ui/dom@1.7.6':
+ dependencies:
+ '@floating-ui/core': 1.7.5
+ '@floating-ui/utils': 0.2.11
+
+ '@floating-ui/react-dom@2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@floating-ui/dom': 1.7.6
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+
+ '@floating-ui/utils@0.2.11': {}
+
'@fontsource-variable/fraunces@5.2.9': {}
'@fontsource-variable/geist@5.2.8': {}
@@ -6000,6 +7125,12 @@ snapshots:
'@iconify/types@2.0.0': {}
+ '@iconify/utils@3.1.0':
+ dependencies:
+ '@antfu/install-pkg': 1.1.0
+ '@iconify/types': 2.0.0
+ mlly: 1.8.2
+
'@inquirer/external-editor@1.0.3(@types/node@22.19.17)':
dependencies:
chardet: 2.1.1
@@ -6104,6 +7235,14 @@ snapshots:
- ws
- zod
+ '@mermaid-js/parser@0.6.3':
+ dependencies:
+ langium: 3.3.1
+
+ '@mermaid-js/parser@1.1.0':
+ dependencies:
+ langium: 4.2.2
+
'@mistralai/mistralai@2.2.0':
dependencies:
ws: 8.20.0
@@ -6180,6 +7319,286 @@ snapshots:
- react-native-b4a
- supports-color
+ '@radix-ui/primitive@1.0.0':
+ dependencies:
+ '@babel/runtime': 7.29.2
+
+ '@radix-ui/primitive@1.1.1': {}
+
+ '@radix-ui/react-arrow@1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-collection@1.0.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ '@radix-ui/react-compose-refs': 1.0.0(react@19.2.5)
+ '@radix-ui/react-context': 1.0.0(react@19.2.5)
+ '@radix-ui/react-primitive': 1.0.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-slot': 1.0.1(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+
+ '@radix-ui/react-compose-refs@1.0.0(react@19.2.5)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ react: 19.2.5
+
+ '@radix-ui/react-compose-refs@1.1.1(@types/react@19.2.14)(react@19.2.5)':
+ dependencies:
+ react: 19.2.5
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-context@1.0.0(react@19.2.5)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ react: 19.2.5
+
+ '@radix-ui/react-context@1.1.1(@types/react@19.2.14)(react@19.2.5)':
+ dependencies:
+ react: 19.2.5
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-direction@1.0.0(react@19.2.5)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ react: 19.2.5
+
+ '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.1
+ '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-focus-guards@1.1.1(@types/react@19.2.14)(react@19.2.5)':
+ dependencies:
+ react: 19.2.5
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-id@1.0.0(react@19.2.5)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ '@radix-ui/react-use-layout-effect': 1.0.0(react@19.2.5)
+ react: 19.2.5
+
+ '@radix-ui/react-id@1.1.0(@types/react@19.2.14)(react@19.2.5)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-popover@1.1.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.1
+ '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-context': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-id': 1.1.0(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-popper': 1.2.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-portal': 1.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-slot': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.14)(react@19.2.5)
+ aria-hidden: 1.2.6
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-popper@1.2.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@floating-ui/react-dom': 2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-arrow': 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-context': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-size': 1.1.0(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/rect': 1.1.0
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-portal@1.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-presence@1.0.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ '@radix-ui/react-compose-refs': 1.0.0(react@19.2.5)
+ '@radix-ui/react-use-layout-effect': 1.0.0(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+
+ '@radix-ui/react-presence@1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-primitive@1.0.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ '@radix-ui/react-slot': 1.0.1(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+
+ '@radix-ui/react-primitive@2.0.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@radix-ui/react-slot': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-roving-focus@1.0.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ '@radix-ui/primitive': 1.0.0
+ '@radix-ui/react-collection': 1.0.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-compose-refs': 1.0.0(react@19.2.5)
+ '@radix-ui/react-context': 1.0.0(react@19.2.5)
+ '@radix-ui/react-direction': 1.0.0(react@19.2.5)
+ '@radix-ui/react-id': 1.0.0(react@19.2.5)
+ '@radix-ui/react-primitive': 1.0.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-use-callback-ref': 1.0.0(react@19.2.5)
+ '@radix-ui/react-use-controllable-state': 1.0.0(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+
+ '@radix-ui/react-slot@1.0.1(react@19.2.5)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ '@radix-ui/react-compose-refs': 1.0.0(react@19.2.5)
+ react: 19.2.5
+
+ '@radix-ui/react-slot@1.1.2(@types/react@19.2.14)(react@19.2.5)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-tabs@1.0.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ '@radix-ui/primitive': 1.0.0
+ '@radix-ui/react-context': 1.0.0(react@19.2.5)
+ '@radix-ui/react-direction': 1.0.0(react@19.2.5)
+ '@radix-ui/react-id': 1.0.0(react@19.2.5)
+ '@radix-ui/react-presence': 1.0.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-primitive': 1.0.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-roving-focus': 1.0.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-use-controllable-state': 1.0.0(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+
+ '@radix-ui/react-use-callback-ref@1.0.0(react@19.2.5)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ react: 19.2.5
+
+ '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.2.14)(react@19.2.5)':
+ dependencies:
+ react: 19.2.5
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-controllable-state@1.0.0(react@19.2.5)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ '@radix-ui/react-use-callback-ref': 1.0.0(react@19.2.5)
+ react: 19.2.5
+
+ '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.2.14)(react@19.2.5)':
+ dependencies:
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.2.14)(react@19.2.5)':
+ dependencies:
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-layout-effect@1.0.0(react@19.2.5)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ react: 19.2.5
+
+ '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.2.14)(react@19.2.5)':
+ dependencies:
+ react: 19.2.5
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-rect@1.1.0(@types/react@19.2.14)(react@19.2.5)':
+ dependencies:
+ '@radix-ui/rect': 1.1.0
+ react: 19.2.5
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-size@1.1.0(@types/react@19.2.14)(react@19.2.5)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/rect@1.1.0': {}
+
'@rolldown/pluginutils@1.0.0-beta.27': {}
'@rollup/rollup-android-arm-eabi@4.60.1':
@@ -6674,12 +8093,12 @@ snapshots:
postcss: 8.5.10
tailwindcss: 4.2.2
- '@tailwindcss/vite@4.2.2(vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0))':
+ '@tailwindcss/vite@4.2.2(vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)(sass@1.51.0))':
dependencies:
'@tailwindcss/node': 4.2.2
'@tailwindcss/oxide': 4.2.2
tailwindcss: 4.2.2
- vite: 5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)
+ vite: 5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)(sass@1.51.0)
'@testing-library/dom@10.4.1':
dependencies:
@@ -6745,20 +8164,137 @@ snapshots:
'@babel/parser': 7.29.2
'@babel/types': 7.29.0
- '@types/babel__traverse@7.28.0':
+ '@types/babel__traverse@7.28.0':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@types/better-sqlite3@7.6.13':
+ dependencies:
+ '@types/node': 22.19.17
+
+ '@types/cacheable-request@6.0.3':
+ dependencies:
+ '@types/http-cache-semantics': 4.2.0
+ '@types/keyv': 3.1.4
+ '@types/node': 22.19.17
+ '@types/responselike': 1.0.3
+
+ '@types/d3-array@3.2.2': {}
+
+ '@types/d3-axis@3.0.6':
+ dependencies:
+ '@types/d3-selection': 3.0.11
+
+ '@types/d3-brush@3.0.6':
+ dependencies:
+ '@types/d3-selection': 3.0.11
+
+ '@types/d3-chord@3.0.6': {}
+
+ '@types/d3-color@3.1.3': {}
+
+ '@types/d3-contour@3.0.6':
+ dependencies:
+ '@types/d3-array': 3.2.2
+ '@types/geojson': 7946.0.16
+
+ '@types/d3-delaunay@6.0.4': {}
+
+ '@types/d3-dispatch@3.0.7': {}
+
+ '@types/d3-drag@3.0.7':
+ dependencies:
+ '@types/d3-selection': 3.0.11
+
+ '@types/d3-dsv@3.0.7': {}
+
+ '@types/d3-ease@3.0.2': {}
+
+ '@types/d3-fetch@3.0.7':
+ dependencies:
+ '@types/d3-dsv': 3.0.7
+
+ '@types/d3-force@3.0.10': {}
+
+ '@types/d3-format@3.0.4': {}
+
+ '@types/d3-geo@3.1.0':
+ dependencies:
+ '@types/geojson': 7946.0.16
+
+ '@types/d3-hierarchy@3.1.7': {}
+
+ '@types/d3-interpolate@3.0.4':
+ dependencies:
+ '@types/d3-color': 3.1.3
+
+ '@types/d3-path@3.1.1': {}
+
+ '@types/d3-polygon@3.0.2': {}
+
+ '@types/d3-quadtree@3.0.6': {}
+
+ '@types/d3-random@3.0.3': {}
+
+ '@types/d3-scale-chromatic@3.1.0': {}
+
+ '@types/d3-scale@4.0.9':
+ dependencies:
+ '@types/d3-time': 3.0.4
+
+ '@types/d3-selection@3.0.11': {}
+
+ '@types/d3-shape@3.1.8':
+ dependencies:
+ '@types/d3-path': 3.1.1
+
+ '@types/d3-time-format@4.0.3': {}
+
+ '@types/d3-time@3.0.4': {}
+
+ '@types/d3-timer@3.0.2': {}
+
+ '@types/d3-transition@3.0.9':
dependencies:
- '@babel/types': 7.29.0
+ '@types/d3-selection': 3.0.11
- '@types/better-sqlite3@7.6.13':
+ '@types/d3-zoom@3.0.8':
dependencies:
- '@types/node': 22.19.17
+ '@types/d3-interpolate': 3.0.4
+ '@types/d3-selection': 3.0.11
- '@types/cacheable-request@6.0.3':
+ '@types/d3@7.4.3':
dependencies:
- '@types/http-cache-semantics': 4.2.0
- '@types/keyv': 3.1.4
- '@types/node': 22.19.17
- '@types/responselike': 1.0.3
+ '@types/d3-array': 3.2.2
+ '@types/d3-axis': 3.0.6
+ '@types/d3-brush': 3.0.6
+ '@types/d3-chord': 3.0.6
+ '@types/d3-color': 3.1.3
+ '@types/d3-contour': 3.0.6
+ '@types/d3-delaunay': 6.0.4
+ '@types/d3-dispatch': 3.0.7
+ '@types/d3-drag': 3.0.7
+ '@types/d3-dsv': 3.0.7
+ '@types/d3-ease': 3.0.2
+ '@types/d3-fetch': 3.0.7
+ '@types/d3-force': 3.0.10
+ '@types/d3-format': 3.0.4
+ '@types/d3-geo': 3.1.0
+ '@types/d3-hierarchy': 3.1.7
+ '@types/d3-interpolate': 3.0.4
+ '@types/d3-path': 3.1.1
+ '@types/d3-polygon': 3.0.2
+ '@types/d3-quadtree': 3.0.6
+ '@types/d3-random': 3.0.3
+ '@types/d3-scale': 4.0.9
+ '@types/d3-scale-chromatic': 3.1.0
+ '@types/d3-selection': 3.0.11
+ '@types/d3-shape': 3.1.8
+ '@types/d3-time': 3.0.4
+ '@types/d3-time-format': 4.0.3
+ '@types/d3-timer': 3.0.2
+ '@types/d3-transition': 3.0.9
+ '@types/d3-zoom': 3.0.8
'@types/debug@4.1.13':
dependencies:
@@ -6774,6 +8310,8 @@ snapshots:
dependencies:
'@types/node': 22.19.17
+ '@types/geojson@7946.0.16': {}
+
'@types/hast@3.0.4':
dependencies:
'@types/unist': 3.0.3
@@ -6825,6 +8363,9 @@ snapshots:
'@types/retry@0.12.0': {}
+ '@types/trusted-types@2.0.7':
+ optional: true
+
'@types/unist@2.0.11': {}
'@types/unist@3.0.3': {}
@@ -6847,7 +8388,12 @@ snapshots:
'@ungap/structured-clone@1.3.0': {}
- '@vitejs/plugin-react@4.7.0(vite@6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))':
+ '@upsetjs/venn.js@2.0.0':
+ optionalDependencies:
+ d3-selection: 3.0.0
+ d3-transition: 3.0.1(d3-selection@3.0.0)
+
+ '@vitejs/plugin-react@4.7.0(vite@6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.51.0)(tsx@4.21.0))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
@@ -6855,13 +8401,13 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-beta.27
'@types/babel__core': 7.20.5
react-refresh: 0.17.0
- vite: 6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)
+ vite: 6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.51.0)(tsx@4.21.0)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0))(vue@3.5.32(typescript@5.9.3))':
+ '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)(sass@1.51.0))(vue@3.5.32(typescript@5.9.3))':
dependencies:
- vite: 5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)
+ vite: 5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)(sass@1.51.0)
vue: 3.5.32(typescript@5.9.3)
'@vitest/expect@2.1.9':
@@ -6871,13 +8417,13 @@ snapshots:
chai: 5.3.3
tinyrainbow: 1.2.0
- '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0))':
+ '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)(sass@1.51.0))':
dependencies:
'@vitest/spy': 2.1.9
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- vite: 5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)
+ vite: 5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)(sass@1.51.0)
'@vitest/pretty-format@2.1.9':
dependencies:
@@ -7064,6 +8610,11 @@ snapshots:
ansi-styles@6.2.3: {}
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.2
+
app-builder-bin@5.0.0-alpha.12: {}
app-builder-lib@26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@26.8.1):
@@ -7115,6 +8666,10 @@ snapshots:
argparse@2.0.1: {}
+ aria-hidden@1.2.6:
+ dependencies:
+ tslib: 2.8.1
+
aria-query@5.3.0:
dependencies:
dequal: 2.0.3
@@ -7207,6 +8762,8 @@ snapshots:
bignumber.js@9.3.1: {}
+ binary-extensions@2.3.0: {}
+
bindings@1.5.0:
dependencies:
file-uri-to-path: 1.0.0
@@ -7241,6 +8798,8 @@ snapshots:
dependencies:
fill-range: 7.1.1
+ browser-fs-access@0.29.1: {}
+
browserslist@4.28.2:
dependencies:
baseline-browser-mapping: 2.10.19
@@ -7326,6 +8885,8 @@ snapshots:
caniuse-lite@1.0.30001788: {}
+ canvas-roundrect-polyfill@0.0.1: {}
+
ccount@2.0.1: {}
chai@5.3.3:
@@ -7355,6 +8916,45 @@ snapshots:
check-error@2.1.3: {}
+ chevrotain-allstar@0.3.1(chevrotain@11.0.3):
+ dependencies:
+ chevrotain: 11.0.3
+ lodash-es: 4.18.1
+
+ chevrotain-allstar@0.4.1(chevrotain@12.0.0):
+ dependencies:
+ chevrotain: 12.0.0
+ lodash-es: 4.18.1
+
+ chevrotain@11.0.3:
+ dependencies:
+ '@chevrotain/cst-dts-gen': 11.0.3
+ '@chevrotain/gast': 11.0.3
+ '@chevrotain/regexp-to-ast': 11.0.3
+ '@chevrotain/types': 11.0.3
+ '@chevrotain/utils': 11.0.3
+ lodash-es: 4.17.21
+
+ chevrotain@12.0.0:
+ dependencies:
+ '@chevrotain/cst-dts-gen': 12.0.0
+ '@chevrotain/gast': 12.0.0
+ '@chevrotain/regexp-to-ast': 12.0.0
+ '@chevrotain/types': 12.0.0
+ '@chevrotain/utils': 12.0.0
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
chownr@1.1.4: {}
chownr@3.0.0: {}
@@ -7395,6 +8995,8 @@ snapshots:
clone@1.0.4: {}
+ clsx@1.1.1: {}
+
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
@@ -7409,6 +9011,10 @@ snapshots:
commander@5.1.0: {}
+ commander@7.2.0: {}
+
+ commander@8.3.0: {}
+
commander@9.5.0:
optional: true
@@ -7416,6 +9022,8 @@ snapshots:
concat-map@0.0.1: {}
+ confbox@0.1.8: {}
+
convert-source-map@2.0.0: {}
copy-anything@4.0.5:
@@ -7427,6 +9035,16 @@ snapshots:
core-util-is@1.0.3: {}
+ cose-base@1.0.3:
+ dependencies:
+ layout-base: 1.0.2
+
+ cose-base@2.2.0:
+ dependencies:
+ layout-base: 2.0.1
+
+ crc-32@0.3.0: {}
+
crc@3.8.0:
dependencies:
buffer: 5.7.1
@@ -7435,6 +9053,10 @@ snapshots:
cross-dirname@0.1.0:
optional: true
+ cross-env@7.0.3:
+ dependencies:
+ cross-spawn: 7.0.6
+
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
@@ -7443,10 +9065,196 @@ snapshots:
csstype@3.2.3: {}
+ cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.2):
+ dependencies:
+ cose-base: 1.0.3
+ cytoscape: 3.33.2
+
+ cytoscape-fcose@2.2.0(cytoscape@3.33.2):
+ dependencies:
+ cose-base: 2.2.0
+ cytoscape: 3.33.2
+
+ cytoscape@3.33.2: {}
+
+ d3-array@2.12.1:
+ dependencies:
+ internmap: 1.0.1
+
+ d3-array@3.2.4:
+ dependencies:
+ internmap: 2.0.3
+
+ d3-axis@3.0.0: {}
+
+ d3-brush@3.0.0:
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-transition: 3.0.1(d3-selection@3.0.0)
+
+ d3-chord@3.0.1:
+ dependencies:
+ d3-path: 3.1.0
+
+ d3-color@3.1.0: {}
+
+ d3-contour@4.0.2:
+ dependencies:
+ d3-array: 3.2.4
+
+ d3-delaunay@6.0.4:
+ dependencies:
+ delaunator: 5.1.0
+
+ d3-dispatch@3.0.1: {}
+
+ d3-drag@3.0.0:
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-selection: 3.0.0
+
+ d3-dsv@3.0.1:
+ dependencies:
+ commander: 7.2.0
+ iconv-lite: 0.6.3
+ rw: 1.3.3
+
+ d3-ease@3.0.1: {}
+
+ d3-fetch@3.0.1:
+ dependencies:
+ d3-dsv: 3.0.1
+
+ d3-force@3.0.0:
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-quadtree: 3.0.1
+ d3-timer: 3.0.1
+
+ d3-format@3.1.2: {}
+
+ d3-geo@3.1.1:
+ dependencies:
+ d3-array: 3.2.4
+
+ d3-hierarchy@3.1.2: {}
+
+ d3-interpolate@3.0.1:
+ dependencies:
+ d3-color: 3.1.0
+
+ d3-path@1.0.9: {}
+
+ d3-path@3.1.0: {}
+
+ d3-polygon@3.0.1: {}
+
+ d3-quadtree@3.0.1: {}
+
+ d3-random@3.0.1: {}
+
+ d3-sankey@0.12.3:
+ dependencies:
+ d3-array: 2.12.1
+ d3-shape: 1.3.7
+
+ d3-scale-chromatic@3.1.0:
+ dependencies:
+ d3-color: 3.1.0
+ d3-interpolate: 3.0.1
+
+ d3-scale@4.0.2:
+ dependencies:
+ d3-array: 3.2.4
+ d3-format: 3.1.2
+ d3-interpolate: 3.0.1
+ d3-time: 3.1.0
+ d3-time-format: 4.1.0
+
+ d3-selection@3.0.0: {}
+
+ d3-shape@1.3.7:
+ dependencies:
+ d3-path: 1.0.9
+
+ d3-shape@3.2.0:
+ dependencies:
+ d3-path: 3.1.0
+
+ d3-time-format@4.1.0:
+ dependencies:
+ d3-time: 3.1.0
+
+ d3-time@3.1.0:
+ dependencies:
+ d3-array: 3.2.4
+
+ d3-timer@3.0.1: {}
+
+ d3-transition@3.0.1(d3-selection@3.0.0):
+ dependencies:
+ d3-color: 3.1.0
+ d3-dispatch: 3.0.1
+ d3-ease: 3.0.1
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-timer: 3.0.1
+
+ d3-zoom@3.0.0:
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-transition: 3.0.1(d3-selection@3.0.0)
+
+ d3@7.9.0:
+ dependencies:
+ d3-array: 3.2.4
+ d3-axis: 3.0.0
+ d3-brush: 3.0.0
+ d3-chord: 3.0.1
+ d3-color: 3.1.0
+ d3-contour: 4.0.2
+ d3-delaunay: 6.0.4
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-dsv: 3.0.1
+ d3-ease: 3.0.1
+ d3-fetch: 3.0.1
+ d3-force: 3.0.0
+ d3-format: 3.1.2
+ d3-geo: 3.1.1
+ d3-hierarchy: 3.1.2
+ d3-interpolate: 3.0.1
+ d3-path: 3.1.0
+ d3-polygon: 3.0.1
+ d3-quadtree: 3.0.1
+ d3-random: 3.0.1
+ d3-scale: 4.0.2
+ d3-scale-chromatic: 3.1.0
+ d3-selection: 3.0.0
+ d3-shape: 3.2.0
+ d3-time: 3.1.0
+ d3-time-format: 4.1.0
+ d3-timer: 3.0.1
+ d3-transition: 3.0.1(d3-selection@3.0.0)
+ d3-zoom: 3.0.0
+
+ dagre-d3-es@7.0.14:
+ dependencies:
+ d3: 7.9.0
+ lodash-es: 4.18.1
+
data-uri-to-buffer@4.0.1: {}
data-uri-to-buffer@6.0.2: {}
+ dayjs@1.11.20: {}
+
debug@4.4.3:
dependencies:
ms: 2.1.3
@@ -7489,6 +9297,10 @@ snapshots:
escodegen: 2.1.0
esprima: 4.0.1
+ delaunator@5.1.0:
+ dependencies:
+ robust-predicates: 3.0.3
+
delayed-stream@1.0.0: {}
dequal@2.0.3: {}
@@ -7497,6 +9309,8 @@ snapshots:
detect-libc@2.1.2: {}
+ detect-node-es@1.1.0: {}
+
detect-node@2.1.0:
optional: true
@@ -7542,6 +9356,10 @@ snapshots:
dom-accessibility-api@0.5.16: {}
+ dompurify@3.4.1:
+ optionalDependencies:
+ '@types/trusted-types': 2.0.7
+
dotenv-expand@11.0.7:
dependencies:
dotenv: 16.6.1
@@ -7619,7 +9437,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- electron-vite@2.3.0(vite@6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)):
+ electron-vite@2.3.0(vite@6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.51.0)(tsx@4.21.0)):
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0)
@@ -7627,7 +9445,7 @@ snapshots:
esbuild: 0.21.5
magic-string: 0.30.21
picocolors: 1.1.1
- vite: 6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)
+ vite: 6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.51.0)(tsx@4.21.0)
transitivePeerDependencies:
- supports-color
@@ -7702,6 +9520,8 @@ snapshots:
es6-error@4.1.1:
optional: true
+ es6-promise-pool@2.5.0: {}
+
esbuild@0.21.5:
optionalDependencies:
'@esbuild/aix-ppc64': 0.21.5
@@ -7925,6 +9745,8 @@ snapshots:
fraction.js@5.3.4: {}
+ fractional-indexing@3.2.0: {}
+
fs-constants@1.0.0: {}
fs-extra@10.1.0:
@@ -7969,6 +9791,8 @@ snapshots:
function-bind@1.1.2: {}
+ fuzzy@0.1.3: {}
+
gaxios@7.1.4:
dependencies:
extend: 3.0.2
@@ -8002,6 +9826,8 @@ snapshots:
hasown: 2.0.3
math-intrinsics: 1.1.0
+ get-nonce@1.0.1: {}
+
get-proto@1.0.1:
dependencies:
dunder-proto: 1.0.1
@@ -8072,6 +9898,8 @@ snapshots:
merge2: 1.4.1
slash: 3.0.0
+ glur@1.1.2: {}
+
google-auth-library@10.6.2:
dependencies:
base64-js: 1.5.1
@@ -8103,6 +9931,8 @@ snapshots:
graceful-fs@4.2.11: {}
+ hachure-fill@0.5.2: {}
+
happy-dom@20.9.0:
dependencies:
'@types/node': 22.19.17
@@ -8233,12 +10063,18 @@ snapshots:
ignore@5.3.2: {}
+ image-blob-reduce@3.0.1:
+ dependencies:
+ pica: 7.1.1
+
image-size@1.2.1:
dependencies:
queue: 6.0.2
immediate@3.0.6: {}
+ immutable@4.3.8: {}
+
imurmurhash@0.1.4: {}
inflight@1.0.6:
@@ -8252,6 +10088,10 @@ snapshots:
inline-style-parser@0.2.7: {}
+ internmap@1.0.1: {}
+
+ internmap@2.0.3: {}
+
ip-address@10.1.0: {}
is-alphabetical@2.0.1: {}
@@ -8261,6 +10101,10 @@ snapshots:
is-alphabetical: 2.0.1
is-decimal: 2.0.1
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
is-decimal@2.0.1: {}
is-extglob@2.1.1: {}
@@ -8313,6 +10157,16 @@ snapshots:
jiti@2.6.1: {}
+ jotai-scope@0.7.2(jotai@2.11.0(@types/react@19.2.14)(react@19.2.5))(react@19.2.5):
+ dependencies:
+ jotai: 2.11.0(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+
+ jotai@2.11.0(@types/react@19.2.14)(react@19.2.5):
+ optionalDependencies:
+ '@types/react': 19.2.14
+ react: 19.2.5
+
js-tokens@4.0.0: {}
js-yaml@3.14.2:
@@ -8374,10 +10228,37 @@ snapshots:
jwa: 2.0.1
safe-buffer: 5.2.1
+ katex@0.16.45:
+ dependencies:
+ commander: 8.3.0
+
keyv@4.5.4:
dependencies:
json-buffer: 3.0.1
+ khroma@2.1.0: {}
+
+ langium@3.3.1:
+ dependencies:
+ chevrotain: 11.0.3
+ chevrotain-allstar: 0.3.1(chevrotain@11.0.3)
+ vscode-languageserver: 9.0.1
+ vscode-languageserver-textdocument: 1.0.12
+ vscode-uri: 3.0.8
+
+ langium@4.2.2:
+ dependencies:
+ '@chevrotain/regexp-to-ast': 12.0.0
+ chevrotain: 12.0.0
+ chevrotain-allstar: 0.4.1(chevrotain@12.0.0)
+ vscode-languageserver: 9.0.1
+ vscode-languageserver-textdocument: 1.0.12
+ vscode-uri: 3.1.0
+
+ layout-base@1.0.2: {}
+
+ layout-base@2.0.1: {}
+
lazy-val@1.0.5: {}
lie@3.3.0:
@@ -8437,12 +10318,20 @@ snapshots:
dependencies:
p-locate: 4.1.0
+ lodash-es@4.17.21: {}
+
+ lodash-es@4.18.1: {}
+
+ lodash.debounce@4.0.8: {}
+
lodash.escaperegexp@4.1.2: {}
lodash.isequal@4.5.0: {}
lodash.startcase@4.4.0: {}
+ lodash.throttle@4.1.1: {}
+
lodash@4.18.1: {}
log-symbols@4.1.0:
@@ -8500,6 +10389,8 @@ snapshots:
markdown-table@3.0.4: {}
+ marked@16.4.2: {}
+
matcher@3.0.0:
dependencies:
escape-string-regexp: 4.0.0
@@ -8662,6 +10553,30 @@ snapshots:
merge2@1.4.1: {}
+ mermaid@11.14.0:
+ dependencies:
+ '@braintree/sanitize-url': 7.1.2
+ '@iconify/utils': 3.1.0
+ '@mermaid-js/parser': 1.1.0
+ '@types/d3': 7.4.3
+ '@upsetjs/venn.js': 2.0.0
+ cytoscape: 3.33.2
+ cytoscape-cose-bilkent: 4.1.0(cytoscape@3.33.2)
+ cytoscape-fcose: 2.2.0(cytoscape@3.33.2)
+ d3: 7.9.0
+ d3-sankey: 0.12.3
+ dagre-d3-es: 7.0.14
+ dayjs: 1.11.20
+ dompurify: 3.4.1
+ katex: 0.16.45
+ khroma: 2.1.0
+ lodash-es: 4.18.1
+ marked: 16.4.2
+ roughjs: 4.6.6
+ stylis: 4.4.0
+ ts-dedent: 2.2.0
+ uuid: 11.1.0
+
micromark-core-commonmark@2.0.3:
dependencies:
decode-named-character-reference: 1.3.0
@@ -8934,12 +10849,28 @@ snapshots:
dependencies:
minimist: 1.2.8
+ mlly@1.8.2:
+ dependencies:
+ acorn: 8.16.0
+ pathe: 2.0.3
+ pkg-types: 1.3.1
+ ufo: 1.6.3
+
mri@1.2.0: {}
ms@2.1.3: {}
+ multimath@2.0.0:
+ dependencies:
+ glur: 1.1.2
+ object-assign: 4.1.1
+
nanoid@3.3.11: {}
+ nanoid@3.3.3: {}
+
+ nanoid@4.0.2: {}
+
napi-build-utils@2.0.0: {}
negotiator@1.0.0: {}
@@ -8990,8 +10921,12 @@ snapshots:
dependencies:
abbrev: 3.0.1
+ normalize-path@3.0.0: {}
+
normalize-url@6.1.0: {}
+ object-assign@4.1.1: {}
+
object-keys@1.1.1:
optional: true
@@ -9009,6 +10944,8 @@ snapshots:
regex: 6.1.0
regex-recursion: 6.0.2
+ open-color@1.9.1: {}
+
openai@6.26.0(ws@8.20.0)(zod@3.25.76):
optionalDependencies:
ws: 8.20.0
@@ -9081,8 +11018,12 @@ snapshots:
dependencies:
quansync: 0.2.11
+ package-manager-detector@1.6.0: {}
+
pako@1.0.11: {}
+ pako@2.0.3: {}
+
parse-entities@4.0.2:
dependencies:
'@types/unist': 2.0.11
@@ -9095,6 +11036,8 @@ snapshots:
partial-json@0.1.7: {}
+ path-data-parser@0.1.0: {}
+
path-exists@4.0.0: {}
path-expression-matcher@1.5.0: {}
@@ -9112,6 +11055,8 @@ snapshots:
pathe@1.1.2: {}
+ pathe@2.0.3: {}
+
pathval@2.0.1: {}
pe-library@0.4.1: {}
@@ -9120,6 +11065,16 @@ snapshots:
perfect-debounce@1.0.0: {}
+ perfect-freehand@1.2.0: {}
+
+ pica@7.1.1:
+ dependencies:
+ glur: 1.1.2
+ inherits: 2.0.4
+ multimath: 2.0.0
+ object-assign: 4.1.1
+ webworkify: 1.5.0
+
picocolors@1.1.1: {}
picomatch@2.3.2: {}
@@ -9128,12 +11083,38 @@ snapshots:
pify@4.0.1: {}
+ pkg-types@1.3.1:
+ dependencies:
+ confbox: 0.1.8
+ mlly: 1.8.2
+ pathe: 2.0.3
+
plist@3.1.0:
dependencies:
'@xmldom/xmldom': 0.8.12
base64-js: 1.5.1
xmlbuilder: 15.1.1
+ png-chunk-text@1.0.0: {}
+
+ png-chunks-encode@1.0.0:
+ dependencies:
+ crc-32: 0.3.0
+ sliced: 1.0.1
+
+ png-chunks-extract@1.0.0:
+ dependencies:
+ crc-32: 0.3.0
+
+ points-on-curve@0.2.0: {}
+
+ points-on-curve@1.0.1: {}
+
+ points-on-path@0.2.1:
+ dependencies:
+ path-data-parser: 0.1.0
+ points-on-curve: 0.2.0
+
postcss-value-parser@4.2.0: {}
postcss@8.5.10:
@@ -9252,6 +11233,8 @@ snapshots:
- supports-color
- utf-8-validate
+ pwacompat@2.0.17: {}
+
quansync@0.2.11: {}
queue-microtask@1.2.3: {}
@@ -9305,6 +11288,33 @@ snapshots:
react-refresh@0.17.0: {}
+ react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.5):
+ dependencies:
+ react: 19.2.5
+ react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.5)
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.5):
+ dependencies:
+ react: 19.2.5
+ react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.5)
+ react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.5)
+ tslib: 2.8.1
+ use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.5)
+ use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.5)
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.5):
+ dependencies:
+ get-nonce: 1.0.1
+ react: 19.2.5
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.14
+
react@19.2.5: {}
read-binary-file-arch@1.0.6:
@@ -9336,6 +11346,10 @@ snapshots:
string_decoder: 1.3.0
util-deprecate: 1.0.2
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.2
+
regex-recursion@6.0.2:
dependencies:
regex-utilities: 2.3.0
@@ -9425,6 +11439,8 @@ snapshots:
sprintf-js: 1.1.3
optional: true
+ robust-predicates@3.0.3: {}
+
rollup@4.60.1:
dependencies:
'@types/estree': 1.0.8
@@ -9456,10 +11472,26 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.60.1
fsevents: 2.3.3
+ roughjs@4.6.4:
+ dependencies:
+ hachure-fill: 0.5.2
+ path-data-parser: 0.1.0
+ points-on-curve: 0.2.0
+ points-on-path: 0.2.1
+
+ roughjs@4.6.6:
+ dependencies:
+ hachure-fill: 0.5.2
+ path-data-parser: 0.1.0
+ points-on-curve: 0.2.0
+ points-on-path: 0.2.1
+
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
+ rw@1.3.3: {}
+
safe-buffer@5.1.2: {}
safe-buffer@5.2.1: {}
@@ -9470,6 +11502,12 @@ snapshots:
dependencies:
truncate-utf8-bytes: 1.0.2
+ sass@1.51.0:
+ dependencies:
+ chokidar: 3.6.0
+ immutable: 4.3.8
+ source-map-js: 1.2.1
+
sax@1.6.0: {}
scheduler@0.27.0: {}
@@ -9536,6 +11574,8 @@ snapshots:
is-fullwidth-code-point: 3.0.0
optional: true
+ sliced@1.0.1: {}
+
smart-buffer@4.2.0: {}
smol-toml@1.6.1: {}
@@ -9642,6 +11682,8 @@ snapshots:
dependencies:
inline-style-parser: 0.2.7
+ stylis@4.4.0: {}
+
sumchecker@3.0.1:
dependencies:
debug: 4.4.3
@@ -9743,6 +11785,8 @@ snapshots:
tinyexec@0.3.2: {}
+ tinyexec@1.1.1: {}
+
tinyglobby@0.2.16:
dependencies:
fdir: 6.5.0(picomatch@4.0.4)
@@ -9774,6 +11818,8 @@ snapshots:
ts-algebra@2.0.0: {}
+ ts-dedent@2.2.0: {}
+
tslib@2.8.1: {}
tsx@4.21.0:
@@ -9787,6 +11833,14 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
+ tunnel-rat@0.1.2(@types/react@19.2.14)(react@19.2.5):
+ dependencies:
+ zustand: 4.5.7(@types/react@19.2.14)(react@19.2.5)
+ transitivePeerDependencies:
+ - '@types/react'
+ - immer
+ - react
+
turbo@2.9.6:
optionalDependencies:
'@turbo/darwin-64': 2.9.6
@@ -9803,6 +11857,8 @@ snapshots:
typescript@5.9.3: {}
+ ufo@1.6.3: {}
+
undici-types@6.21.0: {}
undici@7.25.0: {}
@@ -9862,10 +11918,31 @@ snapshots:
dependencies:
punycode: 2.3.1
+ use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.5):
+ dependencies:
+ react: 19.2.5
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.5):
+ dependencies:
+ detect-node-es: 1.1.0
+ react: 19.2.5
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ use-sync-external-store@1.6.0(react@19.2.5):
+ dependencies:
+ react: 19.2.5
+
utf8-byte-length@1.0.5: {}
util-deprecate@1.0.2: {}
+ uuid@11.1.0: {}
+
verror@1.10.1:
dependencies:
assert-plus: 1.0.0
@@ -9883,13 +11960,13 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
- vite-node@2.1.9(@types/node@22.19.17)(lightningcss@1.32.0):
+ vite-node@2.1.9(@types/node@22.19.17)(lightningcss@1.32.0)(sass@1.51.0):
dependencies:
cac: 6.7.14
debug: 4.4.3
es-module-lexer: 1.7.0
pathe: 1.1.2
- vite: 5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)
+ vite: 5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)(sass@1.51.0)
transitivePeerDependencies:
- '@types/node'
- less
@@ -9901,7 +11978,7 @@ snapshots:
- supports-color
- terser
- vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0):
+ vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)(sass@1.51.0):
dependencies:
esbuild: 0.21.5
postcss: 8.5.10
@@ -9910,8 +11987,9 @@ snapshots:
'@types/node': 22.19.17
fsevents: 2.3.3
lightningcss: 1.32.0
+ sass: 1.51.0
- vite@6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0):
+ vite@6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.51.0)(tsx@4.21.0):
dependencies:
esbuild: 0.25.12
fdir: 6.5.0(picomatch@4.0.4)
@@ -9924,9 +12002,10 @@ snapshots:
fsevents: 2.3.3
jiti: 2.6.1
lightningcss: 1.32.0
+ sass: 1.51.0
tsx: 4.21.0
- vitepress@1.6.4(@algolia/client-search@5.50.2)(@types/node@22.19.17)(lightningcss@1.32.0)(postcss@8.5.10)(search-insights@2.17.3)(typescript@5.9.3):
+ vitepress@1.6.4(@algolia/client-search@5.50.2)(@types/node@22.19.17)(lightningcss@1.32.0)(postcss@8.5.10)(sass@1.51.0)(search-insights@2.17.3)(typescript@5.9.3):
dependencies:
'@docsearch/css': 3.8.2
'@docsearch/js': 3.8.2(@algolia/client-search@5.50.2)(search-insights@2.17.3)
@@ -9935,7 +12014,7 @@ snapshots:
'@shikijs/transformers': 2.5.0
'@shikijs/types': 2.5.0
'@types/markdown-it': 14.1.2
- '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0))(vue@3.5.32(typescript@5.9.3))
+ '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)(sass@1.51.0))(vue@3.5.32(typescript@5.9.3))
'@vue/devtools-api': 7.7.9
'@vue/shared': 3.5.32
'@vueuse/core': 12.8.2(typescript@5.9.3)
@@ -9944,7 +12023,7 @@ snapshots:
mark.js: 8.11.1
minisearch: 7.2.0
shiki: 2.5.0
- vite: 5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)
+ vite: 5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)(sass@1.51.0)
vue: 3.5.32(typescript@5.9.3)
optionalDependencies:
postcss: 8.5.10
@@ -9975,10 +12054,10 @@ snapshots:
- typescript
- universal-cookie
- vitest@2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0):
+ vitest@2.1.9(@types/node@22.19.17)(happy-dom@20.9.0)(lightningcss@1.32.0)(sass@1.51.0):
dependencies:
'@vitest/expect': 2.1.9
- '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0))
+ '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)(sass@1.51.0))
'@vitest/pretty-format': 2.1.9
'@vitest/runner': 2.1.9
'@vitest/snapshot': 2.1.9
@@ -9994,8 +12073,8 @@ snapshots:
tinyexec: 0.3.2
tinypool: 1.1.1
tinyrainbow: 1.2.0
- vite: 5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)
- vite-node: 2.1.9(@types/node@22.19.17)(lightningcss@1.32.0)
+ vite: 5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)(sass@1.51.0)
+ vite-node: 2.1.9(@types/node@22.19.17)(lightningcss@1.32.0)(sass@1.51.0)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 22.19.17
@@ -10013,6 +12092,25 @@ snapshots:
void-elements@3.1.0: {}
+ vscode-jsonrpc@8.2.0: {}
+
+ vscode-languageserver-protocol@3.17.5:
+ dependencies:
+ vscode-jsonrpc: 8.2.0
+ vscode-languageserver-types: 3.17.5
+
+ vscode-languageserver-textdocument@1.0.12: {}
+
+ vscode-languageserver-types@3.17.5: {}
+
+ vscode-languageserver@9.0.1:
+ dependencies:
+ vscode-languageserver-protocol: 3.17.5
+
+ vscode-uri@3.0.8: {}
+
+ vscode-uri@3.1.0: {}
+
vue@3.5.32(typescript@5.9.3):
dependencies:
'@vue/compiler-dom': 3.5.32
@@ -10031,6 +12129,8 @@ snapshots:
webdriver-bidi-protocol@0.4.1: {}
+ webworkify@1.5.0: {}
+
whatwg-mimetype@3.0.0: {}
which@2.0.2:
@@ -10111,9 +12211,17 @@ snapshots:
zod@3.25.76: {}
- zustand@5.0.12(@types/react@19.2.14)(react@19.2.5):
+ zustand@4.5.7(@types/react@19.2.14)(react@19.2.5):
+ dependencies:
+ use-sync-external-store: 1.6.0(react@19.2.5)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ react: 19.2.5
+
+ zustand@5.0.12(@types/react@19.2.14)(react@19.2.5)(use-sync-external-store@1.6.0(react@19.2.5)):
optionalDependencies:
'@types/react': 19.2.14
react: 19.2.5
+ use-sync-external-store: 1.6.0(react@19.2.5)
zwitch@2.0.4: {}
diff --git a/website/Excalidraw-canvas.png b/website/Excalidraw-canvas.png
new file mode 100644
index 0000000000000000000000000000000000000000..2aef1b02299f5cea1d13dfc08ccd18d12108f299
GIT binary patch
literal 527231
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