(null);
+ const [menuPlacement, setMenuPlacement] = useState<{
+ top: number;
+ left: number;
+ width: number;
+ }>({
+ top: 0,
+ left: 0,
+ width: 0,
+ });
+ const currentItems = useMemo(() => {
+ return commandItems[activeCommandSet].filter((item) => {
+ return item.name.toLowerCase().includes(prompt.toLowerCase());
+ });
+ }, [prompt, output, activeCommandSet]);
+ const updateMenuPlacement = useCallback(() => {
+ if (!editor || !showAiMenu) return;
+
+ const { view } = editor;
+ const { to } = editor.state.selection;
+ const editorRect = view.dom.getBoundingClientRect();
+ const cursorCoords = view.coordsAtPos(to);
+ const topOffset = 8;
+ const editorPadding = isSmBreakpoint ? 16 : 48;
+
+ setMenuPlacement({
+ top: cursorCoords.bottom + topOffset + window.scrollY,
+ left: editorRect.left + editorPadding + window.scrollX,
+ width: editorRect.width - editorPadding * 2,
+ });
+ }, [editor, showAiMenu, isSmBreakpoint]);
+ const resetMenu = useCallback(() => {
+ setPrompt("");
+ setOutput("");
+ setActiveCommandSet("main");
+ setLastAction(null);
+ aiGenerateStreamMutation.reset();
+ }, [aiGenerateStreamMutation.reset]);
+ const debouncedUpdateMenuPlacement = useDebouncedCallback(
+ updateMenuPlacement,
+ 60,
+ );
+ const handleGenerate = useCallback(
+ (item?: CommandItem) => {
+ if (!editor || isLoading) return;
+
+ let command: CommandItem | null = item || null;
+
+ if (!command) {
+ if (!prompt) return;
+
+ command = {
+ id: "custom",
+ name: "Custom",
+ action: AiAction.CUSTOM,
+ prompt,
+ };
+ }
+
+ const { from, to } = editor.state.selection;
+ const slice = editor.state.doc.slice(from, to);
+ const serializer = DOMSerializer.fromSchema(editor.schema);
+ const fragment = serializer.serializeFragment(slice.content);
+ const wrapper = document.createElement("div");
+ wrapper.appendChild(fragment);
+ const content = htmlToMarkdown(wrapper.innerHTML);
+
+ setOutput("");
+ setIsLoading(true);
+ aiGenerateStreamMutation.mutate({
+ action: command.action,
+ prompt: command.prompt,
+ content,
+ onChunk: (chunk) => {
+ setOutput((output) => output + chunk.content);
+ },
+ onComplete: () => {
+ setIsLoading(false);
+ setActiveCommandSet("result");
+ },
+ onError: () => {
+ setIsLoading(false);
+ resetMenu();
+ },
+ });
+ setLastAction(command);
+ },
+ [
+ editor,
+ prompt,
+ isLoading,
+ aiGenerateStreamMutation.mutateAsync,
+ resetMenu,
+ ],
+ );
+ const handleCommand = useCallback(
+ (item?: CommandItem) => {
+ setPrompt("");
+
+ if (!item) {
+ return handleGenerate();
+ }
+ if (item.id === "back") {
+ return setActiveCommandSet("main");
+ }
+ if (item.id === "result-replace") {
+ const chain = editor.chain().focus();
+
+ if (lastAction.action === AiAction.CONTINUE_WRITING) {
+ chain.setTextSelection(editor.state.selection.to);
+ }
+
+ const html = (marked.parse(output) as string).trim();
+ // Strip wrapper for single-paragraph output to preserve inline context
+ const content =
+ html.startsWith("
") &&
+ html.endsWith("
") &&
+ html.lastIndexOf("") === 0
+ ? html.slice(3, -4)
+ : html;
+
+ chain.insertContent(content).run();
+
+ return setShowAiMenu(false);
+ }
+ if (item.id === "result-insert-below") {
+ editor
+ .chain()
+ .focus()
+ .setTextSelection(editor.state.selection.to)
+ .insertContent(marked.parse(output))
+ .run();
+
+ return setShowAiMenu(false);
+ }
+ if (item.id === "result-copy") {
+ navigator.clipboard.writeText(output);
+
+ return setShowAiMenu(false);
+ }
+ if (item.id === "result-discard") {
+ setOutput("");
+
+ return resetMenu();
+ }
+ if (item.id === "result-try-again" && lastAction) {
+ return handleGenerate(lastAction);
+ }
+ if (item.subCommandSet) {
+ return setActiveCommandSet(item.subCommandSet);
+ }
+
+ return handleGenerate(item);
+ },
+ [editor, output, lastAction, handleGenerate, resetMenu],
+ );
+ const handleKeyDown = useCallback(
+ (event: React.KeyboardEvent) => {
+ const totalItems = currentItems.length;
+ const cycleSize = totalItems + 1;
+
+ if (event.key === "Escape") {
+ return setShowAiMenu(false);
+ }
+
+ if (event.key === "ArrowDown" || event.key === "ArrowUp") {
+ event.preventDefault();
+
+ return setSelectedIndex((selectedIndex) => {
+ const direction = event.key === "ArrowDown" ? 1 : -1;
+ const newIndex = selectedIndex + direction;
+
+ if (newIndex < -1) return cycleSize - 1;
+ if (newIndex >= cycleSize) return 0;
+
+ return newIndex;
+ });
+ }
+
+ if (event.key === "Enter") {
+ event.preventDefault();
+
+ return handleCommand(currentItems[selectedIndex]);
+ }
+ },
+ [currentItems, selectedIndex],
+ );
+
+ useEffect(() => {
+ if (!editor) return;
+
+ const handleClose = () => setShowAiMenu(false);
+ const observer = new ResizeObserver(() => {
+ debouncedUpdateMenuPlacement();
+ });
+
+ updateMenuPlacement();
+ editor.on("focus", handleClose);
+ editor.on("blur", handleClose);
+ window.addEventListener("resize", debouncedUpdateMenuPlacement);
+ window.addEventListener("scroll", debouncedUpdateMenuPlacement, true);
+ observer.observe(editor.view.dom);
+
+ return () => {
+ editor.off("focus", handleClose);
+ editor.off("blur", handleClose);
+ window.removeEventListener("resize", debouncedUpdateMenuPlacement);
+ window.removeEventListener("scroll", debouncedUpdateMenuPlacement, true);
+ observer.disconnect();
+ };
+ }, [editor, updateMenuPlacement, debouncedUpdateMenuPlacement]);
+
+ useEffect(() => {
+ setShowAiMenu(false);
+ }, [location]);
+ useEffect(() => {
+ if (showAiMenu) {
+ resetMenu();
+ }
+ }, [showAiMenu, resetMenu]);
+ useEffect(() => {
+ // Focus input when menu opens or command set changes
+ requestAnimationFrame(() => {
+ inputRef.current?.focus({ preventScroll: true });
+ });
+ }, [showAiMenu, isLoading, currentItems]);
+ useEffect(() => {
+ if (!currentItems.length) {
+ setSelectedIndex(-1);
+ }
+ setSelectedIndex(prompt || activeCommandSet !== "main" ? 0 : -1);
+ }, [prompt, activeCommandSet, currentItems]);
+
+ if (!showAiMenu) return null;
+
+ return createPortal(
+
+
+
+
+ setPrompt(e.currentTarget.value)}
+ rightSection={
+ handleGenerate()}
+ >
+
+
+ }
+ onKeyDown={handleKeyDown}
+ />
+
+
+
,
+ document.body,
+ );
+};
+
+export { EditorAiMenu };
diff --git a/apps/client/src/ee/ai/components/editor/ai-menu/command-items.ts b/apps/client/src/ee/ai/components/editor/ai-menu/command-items.ts
new file mode 100644
index 00000000..71eaa9cb
--- /dev/null
+++ b/apps/client/src/ee/ai/components/editor/ai-menu/command-items.ts
@@ -0,0 +1,219 @@
+import { AiAction } from "@/ee/ai/types/ai.types.ts";
+import {
+ IconSparkles,
+ IconArrowsMaximize,
+ IconArrowsMinimize,
+ IconWriting,
+ IconHelp,
+ IconList,
+ IconMoodSmile,
+ IconLanguage,
+ IconTrash,
+ IconRefresh,
+ IconChevronLeft,
+ IconCheck,
+ IconArrowDownLeft,
+ IconCopy,
+ IconTextPlus,
+ IconAlignJustified,
+} from "@tabler/icons-react";
+
+interface CommandItem {
+ name: string;
+ id: string;
+ icon?: typeof IconSparkles;
+ action?: AiAction;
+ prompt?: string;
+ subCommandSet?: CommandSet;
+}
+
+type CommandSet = "main" | "tone" | "translate" | "result";
+
+const mainItems: CommandItem[] = [
+ {
+ id: "improve-writing",
+ name: "Improve writing",
+ icon: IconSparkles,
+ action: AiAction.IMPROVE_WRITING,
+ },
+ {
+ id: "fix-spelling-grammar",
+ name: "Fix spelling & grammar",
+ icon: IconCheck,
+ action: AiAction.FIX_SPELLING_GRAMMAR,
+ },
+ {
+ id: "make-longer",
+ name: "Make longer",
+ icon: IconTextPlus,
+ action: AiAction.MAKE_LONGER,
+ },
+ {
+ id: "make-shorter",
+ name: "Make shorter",
+ icon: IconAlignJustified,
+ action: AiAction.MAKE_SHORTER,
+ },
+ {
+ id: "continue-writing",
+ name: "Continue writing",
+ icon: IconWriting,
+ action: AiAction.CONTINUE_WRITING,
+ },
+ {
+ id: "explain",
+ name: "Explain",
+ icon: IconHelp,
+ action: AiAction.EXPLAIN,
+ },
+ {
+ id: "summarize",
+ name: "Summarize",
+ icon: IconList,
+ action: AiAction.SUMMARIZE,
+ },
+ {
+ id: "change-tone",
+ name: "Change tone",
+ icon: IconMoodSmile,
+ subCommandSet: "tone",
+ },
+ {
+ id: "translate",
+ name: "Translate",
+ icon: IconLanguage,
+ subCommandSet: "translate",
+ },
+];
+const toneItems: CommandItem[] = [
+ {
+ id: "back",
+ name: "Back",
+ icon: IconChevronLeft,
+ },
+ {
+ id: "tone-professional",
+ name: "Professional",
+ icon: IconMoodSmile,
+ action: AiAction.CHANGE_TONE,
+ prompt: "Professional",
+ },
+ {
+ id: "tone-casual",
+ name: "Casual",
+ icon: IconMoodSmile,
+ action: AiAction.CHANGE_TONE,
+ prompt: "Casual",
+ },
+ {
+ id: "tone-friendly",
+ name: "Friendly",
+ icon: IconMoodSmile,
+ action: AiAction.CHANGE_TONE,
+ prompt: "Friendly",
+ },
+];
+const translateItems: CommandItem[] = [
+ {
+ id: "back",
+ name: "Back",
+ icon: IconChevronLeft,
+ },
+ {
+ id: "translate-english",
+ name: "English",
+ icon: IconLanguage,
+ action: AiAction.TRANSLATE,
+ prompt: "English",
+ },
+ {
+ id: "translate-spanish",
+ name: "Spanish",
+ icon: IconLanguage,
+ action: AiAction.TRANSLATE,
+ prompt: "Spanish",
+ },
+ {
+ id: "translate-german",
+ name: "German",
+ icon: IconLanguage,
+ action: AiAction.TRANSLATE,
+ prompt: "German",
+ },
+ {
+ id: "translate-french",
+ name: "French",
+ icon: IconLanguage,
+ action: AiAction.TRANSLATE,
+ prompt: "French",
+ },
+ {
+ id: "translate-dutch",
+ name: "Dutch",
+ icon: IconLanguage,
+ action: AiAction.TRANSLATE,
+ prompt: "Dutch",
+ },
+ {
+ id: "translate-portuguese",
+ name: "Portuguese",
+ icon: IconLanguage,
+ action: AiAction.TRANSLATE,
+ prompt: "Portuguese",
+ },
+ {
+ id: "translate-italian",
+ name: "Italian",
+ icon: IconLanguage,
+ action: AiAction.TRANSLATE,
+ prompt: "Italian",
+ },
+ {
+ id: "translate-japanese",
+ name: "Japanese",
+ icon: IconLanguage,
+ action: AiAction.TRANSLATE,
+ prompt: "Japanese",
+ },
+ {
+ id: "translate-korean",
+ name: "Korean",
+ icon: IconLanguage,
+ action: AiAction.TRANSLATE,
+ prompt: "Korean",
+ },
+ {
+ id: "translate-swedish",
+ name: "Swedish",
+ icon: IconLanguage,
+ action: AiAction.TRANSLATE,
+ prompt: "Swedish",
+ },
+ {
+ id: "translate-chinese",
+ name: "Chinese (Simplified)",
+ icon: IconLanguage,
+ action: AiAction.TRANSLATE,
+ prompt: "Simplified Chinese",
+ },
+];
+const resultItems: CommandItem[] = [
+ { id: "result-replace", name: "Replace", icon: IconCheck },
+ { id: "result-insert-below", name: "Insert below", icon: IconArrowDownLeft },
+ { id: "result-copy", name: "Copy", icon: IconCopy },
+ { id: "result-discard", name: "Discard", icon: IconTrash },
+ {
+ id: "result-try-again",
+ name: "Try again",
+ icon: IconRefresh,
+ },
+];
+const commandItems: Record = {
+ main: mainItems,
+ tone: toneItems,
+ translate: translateItems,
+ result: resultItems,
+};
+
+export type { CommandItem, CommandSet };
+export { commandItems };
diff --git a/apps/client/src/ee/ai/components/editor/ai-menu/command-selector.tsx b/apps/client/src/ee/ai/components/editor/ai-menu/command-selector.tsx
new file mode 100644
index 00000000..8e66bee0
--- /dev/null
+++ b/apps/client/src/ee/ai/components/editor/ai-menu/command-selector.tsx
@@ -0,0 +1,72 @@
+import { Loader, Menu, ScrollArea } from "@mantine/core";
+import { IconChevronRight } from "@tabler/icons-react";
+import { ReactNode } from "react";
+import { CommandItem } from "./command-items.ts";
+import classes from "./ai-menu.module.css";
+
+interface CommandSelectorProps {
+ selectedIndex: number;
+
+ isLoading: boolean;
+ output: string;
+ currentItems: CommandItem[];
+ children: ReactNode;
+ handleCommand(item: CommandItem): void;
+}
+
+const CommandSelector = ({
+ selectedIndex,
+ children,
+ isLoading,
+ output,
+ currentItems,
+ handleCommand,
+}: CommandSelectorProps) => {
+ return (
+ 0}
+ middlewares={{ flip: false }}
+ position="bottom-start"
+ offset={4}
+ width={250}
+ trapFocus={false}
+ shadow="lg"
+ >
+ {children}
+
+
+ {currentItems.map((item, index) => {
+ const isSelected = selectedIndex === index;
+ const showLoader =
+ isLoading && output === "" && !item.subCommandSet;
+
+ return (
+
+ ) : item.icon ? (
+
+ ) : undefined
+ }
+ rightSection={
+ item.subCommandSet ? (
+
+ ) : undefined
+ }
+ onClick={() => handleCommand(item)}
+ disabled={isLoading}
+ >
+ {item.name}
+
+ );
+ })}
+
+
+
+ );
+};
+
+export { CommandSelector };
diff --git a/apps/client/src/ee/ai/components/editor/ai-menu/result-preview.tsx b/apps/client/src/ee/ai/components/editor/ai-menu/result-preview.tsx
new file mode 100644
index 00000000..d34682e3
--- /dev/null
+++ b/apps/client/src/ee/ai/components/editor/ai-menu/result-preview.tsx
@@ -0,0 +1,32 @@
+import { Loader, Paper, ScrollArea } from "@mantine/core";
+import DOMPurify from "dompurify";
+import { marked } from "marked";
+import { memo } from "react";
+import classes from "./ai-menu.module.css";
+
+interface ResultPreviewProps {
+ output: string;
+ isLoading: boolean;
+}
+const ResultPreview = memo(({ output, isLoading }: ResultPreviewProps) => {
+ if (!output && !isLoading) return;
+
+ const parsedOutput = `${marked.parse(output)}`;
+
+ return (
+
+
+
+ {parsedOutput && (
+
+ )}
+ {isLoading &&
}
+
+
+
+ );
+});
+
+export { ResultPreview };
diff --git a/apps/client/src/ee/ai/components/enable-ai-search.tsx b/apps/client/src/ee/ai/components/enable-ai-search.tsx
index 53b0a9bd..91242804 100644
--- a/apps/client/src/ee/ai/components/enable-ai-search.tsx
+++ b/apps/client/src/ee/ai/components/enable-ai-search.tsx
@@ -15,7 +15,7 @@ export default function EnableAiSearch() {
<>
-
{t("AI-powered search (Ask AI)")}
+
{t("AI-powered search (AI Answers)")}
{t(
"AI search uses vector embeddings to provide semantic search capabilities across your workspace content.",
diff --git a/apps/client/src/ee/ai/components/enable-generative-ai.tsx b/apps/client/src/ee/ai/components/enable-generative-ai.tsx
new file mode 100644
index 00000000..9e09f4f0
--- /dev/null
+++ b/apps/client/src/ee/ai/components/enable-generative-ai.tsx
@@ -0,0 +1,48 @@
+import { Group, Text, Switch } from "@mantine/core";
+import { useAtom } from "jotai";
+import { workspaceAtom } from "@/features/user/atoms/current-user-atom.ts";
+import React, { useState } from "react";
+import { useTranslation } from "react-i18next";
+import { updateWorkspace } from "@/features/workspace/services/workspace-service.ts";
+import { notifications } from "@mantine/notifications";
+import { useIsCloudEE } from "@/hooks/use-is-cloud-ee.tsx";
+
+export default function EnableGenerativeAi() {
+ const { t } = useTranslation();
+ const [workspace, setWorkspace] = useAtom(workspaceAtom);
+ const [checked, setChecked] = useState(workspace?.settings?.ai?.generative);
+ const hasAccess = useIsCloudEE();
+
+ const handleChange = async (event: React.ChangeEvent) => {
+ const value = event.currentTarget.checked;
+ try {
+ const updatedWorkspace = await updateWorkspace({ generativeAi: value });
+ setChecked(value);
+ setWorkspace(updatedWorkspace);
+ } catch (err) {
+ notifications.show({
+ message: err?.response?.data?.message,
+ color: "red",
+ });
+ }
+ };
+
+ return (
+
+
+ {t("Generative AI (Ask AI)")}
+
+ {t(
+ "Enable AI-powered content generation in the editor. Allows users to generate, improve, translate and transform text.",
+ )}
+
+
+
+
+
+ );
+}
diff --git a/apps/client/src/ee/ai/hooks/use-ai-search.ts b/apps/client/src/ee/ai/hooks/use-ai-search.ts
index f9c5aa88..03b24424 100644
--- a/apps/client/src/ee/ai/hooks/use-ai-search.ts
+++ b/apps/client/src/ee/ai/hooks/use-ai-search.ts
@@ -1,6 +1,6 @@
import { useMutation, UseMutationResult } from "@tanstack/react-query";
import { useState, useCallback } from "react";
-import { askAi, IAiSearchResponse } from "@/ee/ai/services/ai-search-service.ts";
+import { aiAnswers, IAiSearchResponse } from "@/ee/ai/services/ai-search-service.ts";
import { IPageSearchParams } from "@/features/search/types/search.types.ts";
// @ts-ignore
@@ -26,7 +26,7 @@ export function useAiSearch(): UseAiSearchResult {
const { contentType, ...apiParams } = params;
- return await askAi(apiParams, (chunk) => {
+ return await aiAnswers(apiParams, (chunk) => {
if (chunk.content) {
setStreamingAnswer((prev) => prev + chunk.content);
}
diff --git a/apps/client/src/ee/ai/pages/ai-settings.tsx b/apps/client/src/ee/ai/pages/ai-settings.tsx
index b9ab516d..441f91b9 100644
--- a/apps/client/src/ee/ai/pages/ai-settings.tsx
+++ b/apps/client/src/ee/ai/pages/ai-settings.tsx
@@ -1,25 +1,25 @@
import { Helmet } from "react-helmet-async";
-import { getAppName, isCloud } from "@/lib/config.ts";
+import { getAppName } from "@/lib/config.ts";
import SettingsTitle from "@/components/settings/settings-title.tsx";
import React from "react";
import useUserRole from "@/hooks/use-user-role.tsx";
import { useTranslation } from "react-i18next";
-import useLicense from "@/ee/hooks/use-license.tsx";
import EnableAiSearch from "@/ee/ai/components/enable-ai-search.tsx";
-import { Alert } from "@mantine/core";
+import EnableGenerativeAi from "@/ee/ai/components/enable-generative-ai.tsx";
+import { Alert, Stack } from "@mantine/core";
import { IconInfoCircle } from "@tabler/icons-react";
+import { useIsCloudEE } from "@/hooks/use-is-cloud-ee.tsx";
+import { isCloud } from "@/lib/config.ts";
export default function AiSettings() {
const { t } = useTranslation();
const { isAdmin } = useUserRole();
- const { hasLicenseKey } = useLicense();
+ const hasAccess = useIsCloudEE();
if (!isAdmin) {
return null;
}
- const hasAccess = isCloud() || (!isCloud() && hasLicenseKey);
-
return (
<>
@@ -40,7 +40,10 @@ export default function AiSettings() {
)}
-
+
+ {!isCloud() && }
+
+
>
);
}
diff --git a/apps/client/src/ee/ai/services/ai-search-service.ts b/apps/client/src/ee/ai/services/ai-search-service.ts
index 759a104a..8c2af64a 100644
--- a/apps/client/src/ee/ai/services/ai-search-service.ts
+++ b/apps/client/src/ee/ai/services/ai-search-service.ts
@@ -15,11 +15,11 @@ export interface IAiSearchResponse {
}>;
}
-export async function askAi(
+export async function aiAnswers(
params: IPageSearchParams,
onChunk?: (chunk: { content?: string; sources?: any[] }) => void,
): Promise {
- const response = await fetch("/api/ai/ask", {
+ const response = await fetch("/api/ai/answers", {
method: "POST",
headers: {
"Content-Type": "application/json",
diff --git a/apps/client/src/ee/ai/services/ai-service.ts b/apps/client/src/ee/ai/services/ai-service.ts
index f3634d59..88557ff1 100644
--- a/apps/client/src/ee/ai/services/ai-service.ts
+++ b/apps/client/src/ee/ai/services/ai-service.ts
@@ -43,13 +43,16 @@ export async function generateAiContentStream(
}
const processStream = async () => {
+ let buffer = "";
try {
while (true) {
const { done, value } = await reader.read();
if (done) break;
- const chunk = decoder.decode(value, { stream: true });
- const lines = chunk.split("\n");
+ buffer += decoder.decode(value, { stream: true });
+ const lines = buffer.split("\n");
+
+ buffer = lines.pop() || "";
for (const line of lines) {
if (line.startsWith("data: ")) {
@@ -66,7 +69,7 @@ export async function generateAiContentStream(
onChunk(parsed);
}
} catch (e) {
- // Ignore parse errors for incomplete chunks
+ // Skip invalid JSON
}
}
}
diff --git a/apps/client/src/ee/ai/types/ai.types.ts b/apps/client/src/ee/ai/types/ai.types.ts
index a5fbc253..54778563 100644
--- a/apps/client/src/ee/ai/types/ai.types.ts
+++ b/apps/client/src/ee/ai/types/ai.types.ts
@@ -6,6 +6,7 @@ export enum AiAction {
SIMPLIFY = "simplify",
CHANGE_TONE = "change_tone",
SUMMARIZE = "summarize",
+ EXPLAIN = "explain",
CONTINUE_WRITING = "continue_writing",
TRANSLATE = "translate",
CUSTOM = "custom",
diff --git a/apps/client/src/ee/components/ldap-login-modal.tsx b/apps/client/src/ee/components/ldap-login-modal.tsx
index 9360651d..0a456946 100644
--- a/apps/client/src/ee/components/ldap-login-modal.tsx
+++ b/apps/client/src/ee/components/ldap-login-modal.tsx
@@ -7,7 +7,7 @@ import { notifications } from "@mantine/notifications";
import { useNavigate } from "react-router-dom";
import { useTranslation } from "react-i18next";
import { IAuthProvider } from "@/ee/security/types/security.types";
-import APP_ROUTE from "@/lib/app-route";
+import APP_ROUTE, { getPostLoginRedirect } from "@/lib/app-route";
import { ldapLogin } from "@/ee/security/services/ldap-auth-service";
const formSchema = z.object({
@@ -59,13 +59,13 @@ export function LdapLoginModal({
// Handle MFA like the regular login
if (response?.userHasMfa) {
onClose();
- navigate(APP_ROUTE.AUTH.MFA_CHALLENGE);
+ navigate(APP_ROUTE.AUTH.MFA_CHALLENGE + window.location.search);
} else if (response?.requiresMfaSetup) {
onClose();
- navigate(APP_ROUTE.AUTH.MFA_SETUP_REQUIRED);
+ navigate(APP_ROUTE.AUTH.MFA_SETUP_REQUIRED + window.location.search);
} else {
onClose();
- navigate(APP_ROUTE.HOME);
+ navigate(getPostLoginRedirect());
}
} catch (err: any) {
setIsLoading(false);
diff --git a/apps/client/src/ee/hooks/use-enterprise-access.tsx b/apps/client/src/ee/hooks/use-enterprise-access.tsx
new file mode 100644
index 00000000..b7746d6f
--- /dev/null
+++ b/apps/client/src/ee/hooks/use-enterprise-access.tsx
@@ -0,0 +1,12 @@
+import { isCloud } from "@/lib/config";
+import useLicense from "@/ee/hooks/use-license";
+import usePlan from "@/ee/hooks/use-plan";
+
+const useEnterpriseAccess = () => {
+ const { hasLicenseKey } = useLicense();
+ const { isBusiness } = usePlan();
+
+ return (isCloud() && isBusiness) || (!isCloud() && hasLicenseKey);
+};
+
+export default useEnterpriseAccess;
diff --git a/apps/client/src/ee/mfa/components/mfa-backup-codes-modal.tsx b/apps/client/src/ee/mfa/components/mfa-backup-codes-modal.tsx
index c24638fe..6b439ef5 100644
--- a/apps/client/src/ee/mfa/components/mfa-backup-codes-modal.tsx
+++ b/apps/client/src/ee/mfa/components/mfa-backup-codes-modal.tsx
@@ -8,10 +8,10 @@ import {
Group,
List,
Code,
- CopyButton,
Alert,
PasswordInput,
} from "@mantine/core";
+import { CopyButton } from "@/components/common/copy-button";
import {
IconRefresh,
IconCopy,
diff --git a/apps/client/src/ee/mfa/components/mfa-challenge.tsx b/apps/client/src/ee/mfa/components/mfa-challenge.tsx
index 8a9bef53..413494ef 100644
--- a/apps/client/src/ee/mfa/components/mfa-challenge.tsx
+++ b/apps/client/src/ee/mfa/components/mfa-challenge.tsx
@@ -18,7 +18,7 @@ import { useNavigate } from "react-router-dom";
import { notifications } from "@mantine/notifications";
import classes from "./mfa-challenge.module.css";
import { verifyMfa } from "@/ee/mfa";
-import APP_ROUTE from "@/lib/app-route";
+import APP_ROUTE, { getPostLoginRedirect } from "@/lib/app-route";
import { useTranslation } from "react-i18next";
import * as z from "zod";
import { MfaBackupCodeInput } from "./mfa-backup-code-input";
@@ -53,7 +53,7 @@ export function MfaChallenge() {
setIsLoading(true);
try {
await verifyMfa(values.code);
- navigate(APP_ROUTE.HOME);
+ navigate(getPostLoginRedirect());
} catch (error: any) {
setIsLoading(false);
notifications.show({
diff --git a/apps/client/src/ee/mfa/components/mfa-setup-modal.tsx b/apps/client/src/ee/mfa/components/mfa-setup-modal.tsx
index d01f2c9f..89d479d7 100644
--- a/apps/client/src/ee/mfa/components/mfa-setup-modal.tsx
+++ b/apps/client/src/ee/mfa/components/mfa-setup-modal.tsx
@@ -11,7 +11,6 @@ import {
PinInput,
Alert,
List,
- CopyButton,
ActionIcon,
Tooltip,
Paper,
@@ -20,6 +19,7 @@ import {
Collapse,
UnstyledButton,
} from "@mantine/core";
+import { CopyButton } from "@/components/common/copy-button";
import {
IconQrcode,
IconShieldCheck,
diff --git a/apps/client/src/ee/mfa/components/mfa-setup-required.tsx b/apps/client/src/ee/mfa/components/mfa-setup-required.tsx
index c657abe9..ab327c4d 100644
--- a/apps/client/src/ee/mfa/components/mfa-setup-required.tsx
+++ b/apps/client/src/ee/mfa/components/mfa-setup-required.tsx
@@ -3,7 +3,7 @@ import { Container, Paper, Title, Text, Alert, Stack } from "@mantine/core";
import { IconAlertCircle } from "@tabler/icons-react";
import { useTranslation } from "react-i18next";
import { MfaSetupModal } from "@/ee/mfa";
-import APP_ROUTE from "@/lib/app-route.ts";
+import APP_ROUTE, { getPostLoginRedirect } from "@/lib/app-route.ts";
import { useNavigate } from "react-router-dom";
export default function MfaSetupRequired() {
@@ -11,7 +11,7 @@ export default function MfaSetupRequired() {
const navigate = useNavigate();
const handleSetupComplete = () => {
- navigate(APP_ROUTE.HOME);
+ navigate(getPostLoginRedirect());
};
return (
diff --git a/apps/client/src/ee/mfa/hooks/use-mfa-page-protection.ts b/apps/client/src/ee/mfa/hooks/use-mfa-page-protection.ts
index 9200cac7..30b27427 100644
--- a/apps/client/src/ee/mfa/hooks/use-mfa-page-protection.ts
+++ b/apps/client/src/ee/mfa/hooks/use-mfa-page-protection.ts
@@ -1,6 +1,6 @@
import { useEffect, useState } from "react";
import { useNavigate, useLocation } from "react-router-dom";
-import APP_ROUTE from "@/lib/app-route";
+import APP_ROUTE, { getPostLoginRedirect } from "@/lib/app-route";
import { validateMfaAccess } from "@/ee/mfa";
export function useMfaPageProtection() {
@@ -13,8 +13,10 @@ export function useMfaPageProtection() {
const checkAccess = async () => {
const result = await validateMfaAccess();
+ const search = location.search;
+
if (!result.valid) {
- navigate(APP_ROUTE.AUTH.LOGIN);
+ navigate(APP_ROUTE.AUTH.LOGIN + search);
return;
}
@@ -26,17 +28,17 @@ export function useMfaPageProtection() {
if (result.requiresMfaSetup && !isOnSetupPage) {
// User needs to set up MFA but is on challenge page
- navigate(APP_ROUTE.AUTH.MFA_SETUP_REQUIRED);
+ navigate(APP_ROUTE.AUTH.MFA_SETUP_REQUIRED + search);
} else if (
!result.requiresMfaSetup &&
result.userHasMfa &&
!isOnChallengePage
) {
// User has MFA and should be on challenge page
- navigate(APP_ROUTE.AUTH.MFA_CHALLENGE);
+ navigate(APP_ROUTE.AUTH.MFA_CHALLENGE + search);
} else if (!result.isTransferToken) {
// User has a regular auth token, shouldn't be on MFA pages
- navigate(APP_ROUTE.HOME);
+ navigate(getPostLoginRedirect());
} else {
setIsValid(true);
}
diff --git a/apps/client/src/ee/security/components/disable-public-sharing.tsx b/apps/client/src/ee/security/components/disable-public-sharing.tsx
new file mode 100644
index 00000000..a5d9f34c
--- /dev/null
+++ b/apps/client/src/ee/security/components/disable-public-sharing.tsx
@@ -0,0 +1,88 @@
+import { Group, Text, Switch, Tooltip } from "@mantine/core";
+import { modals } from "@mantine/modals";
+import { useAtom } from "jotai";
+import { workspaceAtom } from "@/features/user/atoms/current-user-atom.ts";
+import React, { useState } from "react";
+import { useTranslation } from "react-i18next";
+import { updateWorkspace } from "@/features/workspace/services/workspace-service.ts";
+import { notifications } from "@mantine/notifications";
+import useEnterpriseAccess from "@/ee/hooks/use-enterprise-access.tsx";
+
+export default function DisablePublicSharing() {
+ const { t } = useTranslation();
+
+ return (
+
+
+ {t("Disable public sharing")}
+
+ {t("Prevent members from sharing pages publicly.")}
+
+
+
+
+
+ );
+}
+
+function DisablePublicSharingToggle() {
+ const { t } = useTranslation();
+ const [workspace, setWorkspace] = useAtom(workspaceAtom);
+ const [checked, setChecked] = useState(
+ workspace?.settings?.sharing?.disabled === true,
+ );
+ const hasAccess = useEnterpriseAccess();
+
+ const applyChange = async (value: boolean) => {
+ try {
+ const updatedWorkspace = await updateWorkspace({
+ disablePublicSharing: value,
+ });
+ setChecked(value);
+ setWorkspace(updatedWorkspace);
+ } catch (err) {
+ notifications.show({
+ message: err?.response?.data?.message,
+ color: "red",
+ });
+ }
+ };
+
+ const handleChange = (event: React.ChangeEvent) => {
+ const value = event.currentTarget.checked;
+
+ modals.openConfirmModal({
+ title: value ? t("Disable public sharing") : t("Enable public sharing"),
+ children: (
+
+ {value
+ ? t(
+ "Are you sure you want to disable public sharing? All existing shared links in this workspace will be deleted.",
+ )
+ : t(
+ "Are you sure you want to enable public sharing? Members will be able to share pages publicly.",
+ )}
+
+ ),
+ centered: true,
+ labels: { confirm: t("Confirm"), cancel: t("Cancel") },
+ confirmProps: value ? { color: "red" } : {},
+ onConfirm: () => applyChange(value),
+ });
+ };
+
+ return (
+
+
+
+ );
+}
diff --git a/apps/client/src/ee/security/components/enforce-mfa.tsx b/apps/client/src/ee/security/components/enforce-mfa.tsx
index 37cf5152..b716e200 100644
--- a/apps/client/src/ee/security/components/enforce-mfa.tsx
+++ b/apps/client/src/ee/security/components/enforce-mfa.tsx
@@ -10,23 +10,18 @@ export default function EnforceMfa() {
const { t } = useTranslation();
return (
- <>
-
- MFA
-
-
-
- {t("Enforce two-factor authentication")}
-
- {t(
- "Once enforced, all members must enable two-factor authentication to access the workspace.",
- )}
-
-
+
+
+ {t("Enforce two-factor authentication")}
+
+ {t(
+ "Once enforced, all members must enable two-factor authentication to access the workspace.",
+ )}
+
+
-
-
- >
+
+
);
}
diff --git a/apps/client/src/ee/security/components/space-public-sharing-toggle.tsx b/apps/client/src/ee/security/components/space-public-sharing-toggle.tsx
new file mode 100644
index 00000000..f03d18f2
--- /dev/null
+++ b/apps/client/src/ee/security/components/space-public-sharing-toggle.tsx
@@ -0,0 +1,84 @@
+import { Group, Text, Switch, Tooltip } from "@mantine/core";
+import { modals } from "@mantine/modals";
+import { useAtom } from "jotai";
+import { workspaceAtom } from "@/features/user/atoms/current-user-atom.ts";
+import React, { useState } from "react";
+import { useTranslation } from "react-i18next";
+import { ISpace } from "@/features/space/types/space.types.ts";
+import { useUpdateSpaceMutation } from "@/features/space/queries/space-query.ts";
+
+type SpacePublicSharingToggleProps = {
+ space: ISpace;
+};
+
+export default function SpacePublicSharingToggle({
+ space,
+}: SpacePublicSharingToggleProps) {
+ const { t } = useTranslation();
+ const [workspace] = useAtom(workspaceAtom);
+ const workspaceDisabled = workspace?.settings?.sharing?.disabled === true;
+ const [checked, setChecked] = useState(
+ space.settings?.sharing?.disabled === true,
+ );
+ const updateSpaceMutation = useUpdateSpaceMutation();
+
+ const applyChange = async (value: boolean) => {
+ try {
+ await updateSpaceMutation.mutateAsync({
+ spaceId: space.id,
+ disablePublicSharing: value,
+ });
+ setChecked(value);
+ } catch {
+ // error handled by mutation
+ }
+ };
+
+ const handleChange = (event: React.ChangeEvent) => {
+ const value = event.currentTarget.checked;
+
+ modals.openConfirmModal({
+ title: value ? t("Disable public sharing") : t("Enable public sharing"),
+ children: (
+
+ {value
+ ? t(
+ "Are you sure you want to disable public sharing? All existing shared links in this space will be deleted.",
+ )
+ : t(
+ "Are you sure you want to enable public sharing for this space?",
+ )}
+
+ ),
+ centered: true,
+ labels: { confirm: t("Confirm"), cancel: t("Cancel") },
+ confirmProps: value ? { color: "red" } : {},
+ onConfirm: () => applyChange(value),
+ });
+ };
+
+ return (
+
+
+ {t("Disable public sharing")}
+
+ {workspaceDisabled
+ ? t("Public sharing is disabled at the workspace level")
+ : t("Prevent pages in this space from being shared publicly.")}
+
+
+
+
+
+
+ );
+}
diff --git a/apps/client/src/ee/security/pages/security.tsx b/apps/client/src/ee/security/pages/security.tsx
index 82d8640f..a32c5867 100644
--- a/apps/client/src/ee/security/pages/security.tsx
+++ b/apps/client/src/ee/security/pages/security.tsx
@@ -9,15 +9,16 @@ import CreateSsoProvider from "@/ee/security/components/create-sso-provider.tsx"
import EnforceSso from "@/ee/security/components/enforce-sso.tsx";
import AllowedDomains from "@/ee/security/components/allowed-domains.tsx";
import { useTranslation } from "react-i18next";
-import useLicense from "@/ee/hooks/use-license.tsx";
-import usePlan from "@/ee/hooks/use-plan.tsx";
import EnforceMfa from "@/ee/security/components/enforce-mfa.tsx";
+import DisablePublicSharing from "@/ee/security/components/disable-public-sharing.tsx";
+import useEnterpriseAccess from "@/ee/hooks/use-enterprise-access.tsx";
+import { useIsCloudEE } from "@/hooks/use-is-cloud-ee.tsx";
export default function Security() {
const { t } = useTranslation();
const { isAdmin } = useUserRole();
- const { hasLicenseKey } = useLicense();
- const { isBusiness } = usePlan();
+ const hasEnterpriseAccess = useEnterpriseAccess();
+ const isCloudEE = useIsCloudEE();
if (!isAdmin) {
return null;
@@ -30,26 +31,41 @@ export default function Security() {
-
-
-
-
+ {(!isCloud() || hasEnterpriseAccess) && (
+ <>
+
+
+ >
+ )}
+
Single sign-on (SSO)
- {(isCloud() && isBusiness) || (!isCloud() && hasLicenseKey) ? (
+ {hasEnterpriseAccess && (
<>
+ >
+ )}
+
+ {isCloudEE && (
+ <>
+
+
+ >
+ )}
+
+ {hasEnterpriseAccess && (
+ <>
>
- ) : null}
+ )}
>
diff --git a/apps/client/src/features/attachments/services/attachment-service.ts b/apps/client/src/features/attachments/services/attachment-service.ts
index 9550e06d..fa43da3c 100644
--- a/apps/client/src/features/attachments/services/attachment-service.ts
+++ b/apps/client/src/features/attachments/services/attachment-service.ts
@@ -1,20 +1,62 @@
import api from "@/lib/api-client";
+import loadImage from "blueimp-load-image";
import {
AvatarIconType,
IAttachment,
} from "@/features/attachments/types/attachment.types.ts";
+async function compressAndResizeIcon(
+ file: File,
+ type: AvatarIconType,
+): Promise {
+ const isPng = file.type === "image/png";
+
+ const { image: canvas } = await loadImage(file, {
+ maxWidth: 300,
+ maxHeight: 300,
+ canvas: true,
+ orientation: true,
+ imageSmoothingQuality: "high",
+ });
+
+ if (type === AvatarIconType.AVATAR || !isPng) {
+ const ctx = (canvas as HTMLCanvasElement).getContext("2d")!;
+ ctx.globalCompositeOperation = "destination-over";
+ ctx.fillStyle = "#ffffff";
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ ctx.globalCompositeOperation = "source-over";
+ }
+
+ const outputType = isPng ? "image/png" : "image/jpeg";
+
+ return new Promise((resolve, reject) => {
+ (canvas as HTMLCanvasElement).toBlob(
+ (blob) => {
+ if (!blob) {
+ reject(new Error("Failed to compress image"));
+ return;
+ }
+ resolve(new File([blob], file.name, { type: outputType }));
+ },
+ outputType,
+ isPng ? undefined : 0.85,
+ );
+ });
+}
+
export async function uploadIcon(
file: File,
type: AvatarIconType,
spaceId?: string,
): Promise {
+ const processed = await compressAndResizeIcon(file, type);
+
const formData = new FormData();
formData.append("type", type);
if (spaceId) {
formData.append("spaceId", spaceId);
}
- formData.append("image", file);
+ formData.append("image", processed);
return await api.post("/attachments/upload-image", formData, {
headers: {
diff --git a/apps/client/src/features/auth/hooks/use-auth.ts b/apps/client/src/features/auth/hooks/use-auth.ts
index decb393f..6e1b4e34 100644
--- a/apps/client/src/features/auth/hooks/use-auth.ts
+++ b/apps/client/src/features/auth/hooks/use-auth.ts
@@ -23,7 +23,7 @@ import {
acceptInvitation,
createWorkspace,
} from "@/features/workspace/services/workspace-service.ts";
-import APP_ROUTE from "@/lib/app-route.ts";
+import APP_ROUTE, { getPostLoginRedirect } from "@/lib/app-route.ts";
import { RESET } from "jotai/utils";
import { useTranslation } from "react-i18next";
import { isCloud } from "@/lib/config.ts";
@@ -44,11 +44,11 @@ export default function useAuth() {
// Check if MFA is required
if (response?.userHasMfa) {
- navigate(APP_ROUTE.AUTH.MFA_CHALLENGE);
+ navigate(APP_ROUTE.AUTH.MFA_CHALLENGE + window.location.search);
} else if (response?.requiresMfaSetup) {
- navigate(APP_ROUTE.AUTH.MFA_SETUP_REQUIRED);
+ navigate(APP_ROUTE.AUTH.MFA_SETUP_REQUIRED + window.location.search);
} else {
- navigate(APP_ROUTE.HOME);
+ navigate(getPostLoginRedirect());
}
} catch (err) {
setIsLoading(false);
diff --git a/apps/client/src/features/auth/hooks/use-redirect-if-authenticated.ts b/apps/client/src/features/auth/hooks/use-redirect-if-authenticated.ts
index 8961ea93..10c76bd3 100644
--- a/apps/client/src/features/auth/hooks/use-redirect-if-authenticated.ts
+++ b/apps/client/src/features/auth/hooks/use-redirect-if-authenticated.ts
@@ -1,6 +1,6 @@
import { useEffect } from "react";
import useCurrentUser from "@/features/user/hooks/use-current-user.ts";
-import APP_ROUTE from "@/lib/app-route.ts";
+import { getPostLoginRedirect } from "@/lib/app-route.ts";
import { useNavigate } from "react-router-dom";
export function useRedirectIfAuthenticated() {
@@ -9,7 +9,7 @@ export function useRedirectIfAuthenticated() {
useEffect(() => {
if (data && data?.user) {
- navigate(APP_ROUTE.HOME);
+ navigate(getPostLoginRedirect());
}
}, [isLoading, data]);
}
diff --git a/apps/client/src/features/comment/components/comment-dialog.tsx b/apps/client/src/features/comment/components/comment-dialog.tsx
index 7a4b55aa..7b0bb7bf 100644
--- a/apps/client/src/features/comment/components/comment-dialog.tsx
+++ b/apps/client/src/features/comment/components/comment-dialog.tsx
@@ -31,6 +31,7 @@ function CommentDialog({ editor, pageId }: CommentDialogProps) {
const [currentUser] = useAtom(currentUserAtom);
const [, setAsideState] = useAtom(asideStateAtom);
const useClickOutsideRef = useClickOutside(() => {
+ if (document.querySelector("#mention")) return;
handleDialogClose();
});
const createCommentMutation = useCreateCommentMutation();
@@ -105,6 +106,7 @@ function CommentDialog({ editor, pageId }: CommentDialogProps) {
position={{ bottom: 500, right: 50 }}
withCloseButton
withBorder
+ data-comment-dialog
>
diff --git a/apps/client/src/features/comment/components/comment-editor.tsx b/apps/client/src/features/comment/components/comment-editor.tsx
index a0489cdc..067391f4 100644
--- a/apps/client/src/features/comment/components/comment-editor.tsx
+++ b/apps/client/src/features/comment/components/comment-editor.tsx
@@ -1,14 +1,15 @@
-import { EditorContent, useEditor } from "@tiptap/react";
+import { EditorContent, ReactNodeViewRenderer, useEditor } from "@tiptap/react";
import { Placeholder } from "@tiptap/extension-placeholder";
-import { Underline } from "@tiptap/extension-underline";
-import { Link } from "@tiptap/extension-link";
import { StarterKit } from "@tiptap/starter-kit";
+import { Mention, LinkExtension } from "@docmost/editor-ext";
import classes from "./comment.module.css";
import { useFocusWithin } from "@mantine/hooks";
import clsx from "clsx";
import { forwardRef, useEffect, useImperativeHandle } from "react";
import { useTranslation } from "react-i18next";
import EmojiCommand from "@/features/editor/extensions/emoji-command";
+import mentionRenderItems from "@/features/editor/components/mention/mention-suggestion";
+import MentionView from "@/features/editor/components/mention/mention-view";
interface CommentEditorProps {
defaultContent?: any;
@@ -39,13 +40,29 @@ const CommentEditor = forwardRef(
StarterKit.configure({
gapcursor: false,
dropcursor: false,
+ link: false,
}),
Placeholder.configure({
placeholder: placeholder || t("Reply..."),
}),
- Underline,
- Link,
+ LinkExtension,
EmojiCommand,
+ Mention.configure({
+ suggestion: {
+ allowSpaces: true,
+ items: () => [],
+ // @ts-ignore
+ render: mentionRenderItems,
+ },
+ HTMLAttributes: {
+ class: "mention",
+ },
+ }).extend({
+ addNodeView() {
+ this.editor.isInitialized = true;
+ return ReactNodeViewRenderer(MentionView);
+ },
+ }),
],
editorProps: {
handleDOMEvents: {
@@ -60,7 +77,8 @@ const CommentEditor = forwardRef(
].includes(event.key)
) {
const emojiCommand = document.querySelector("#emoji-command");
- if (emojiCommand) {
+ const mentionPopup = document.querySelector("#mention");
+ if (emojiCommand || mentionPopup) {
return true;
}
}
@@ -84,9 +102,14 @@ const CommentEditor = forwardRef(
autofocus: (autofocus && "end") || false,
});
+ // Sync content from props for read-only editors (e.g. when updated via
+ // websocket on another browser). Skip for editable editors to avoid
+ // resetting the cursor position on every keystroke.
useEffect(() => {
- commentEditor.commands.setContent(defaultContent);
- }, [defaultContent]);
+ if (!editable && commentEditor && defaultContent) {
+ commentEditor.commands.setContent(defaultContent);
+ }
+ }, [defaultContent, editable, commentEditor]);
useEffect(() => {
setTimeout(() => {
@@ -103,7 +126,11 @@ const CommentEditor = forwardRef(
}));
return (
-
+
(comment.content);
+ const editContentRef = useRef(null);
const updateCommentMutation = useUpdateCommentMutation();
const deleteCommentMutation = useDeleteCommentMutation(comment.pageId);
const resolveCommentMutation = useResolveCommentMutation();
@@ -56,9 +57,13 @@ function CommentListItem({
setIsLoading(true);
const commentToUpdate = {
commentId: comment.id,
- content: JSON.stringify(content),
+ content: JSON.stringify(editContentRef.current ?? content),
};
await updateCommentMutation.mutateAsync(commentToUpdate);
+ if (editContentRef.current) {
+ setContent(editContentRef.current);
+ editContentRef.current = null;
+ }
setIsEditing(false);
emit({
@@ -128,6 +133,7 @@ function CommentListItem({
setIsEditing(true);
}
function cancelEdit() {
+ editContentRef.current = null;
setIsEditing(false);
}
@@ -194,7 +200,7 @@ function CommentListItem({
setContent(newContent)}
+ onUpdate={(newContent: any) => { editContentRef.current = newContent; }}
onSave={handleUpdateComment}
autofocus={true}
/>
diff --git a/apps/client/src/features/comment/components/comment.module.css b/apps/client/src/features/comment/components/comment.module.css
index fd4ac5be..59032499 100644
--- a/apps/client/src/features/comment/components/comment.module.css
+++ b/apps/client/src/features/comment/components/comment.module.css
@@ -32,11 +32,14 @@
max-width: 100%;
white-space: pre-wrap;
word-break: break-word;
- max-height: 20vh;
padding-left: 6px;
padding-right: 6px;
margin-top: 10px;
margin-bottom: 2px;
+ }
+
+ &[data-editable] .ProseMirror :global(.ProseMirror){
+ max-height: 50vh;
overflow: hidden auto;
}
diff --git a/apps/client/src/features/editor/atoms/editor-atoms.ts b/apps/client/src/features/editor/atoms/editor-atoms.ts
index d4f133f7..25d9332b 100644
--- a/apps/client/src/features/editor/atoms/editor-atoms.ts
+++ b/apps/client/src/features/editor/atoms/editor-atoms.ts
@@ -8,3 +8,5 @@ export const titleEditorAtom = atom(null);
export const readOnlyEditorAtom = atom(null);
export const yjsConnectionStatusAtom = atom("");
+
+export const showAiMenuAtom = atom(false);
diff --git a/apps/client/src/features/editor/components/bubble-menu/bubble-menu.module.css b/apps/client/src/features/editor/components/bubble-menu/bubble-menu.module.css
index e43c1714..facaf7ff 100644
--- a/apps/client/src/features/editor/components/bubble-menu/bubble-menu.module.css
+++ b/apps/client/src/features/editor/components/bubble-menu/bubble-menu.module.css
@@ -1,11 +1,53 @@
.bubbleMenu {
display: flex;
+ flex-wrap: nowrap;
+ overflow-x: auto;
+ max-width: 100vw;
width: fit-content;
- border-radius: 2px;
+ box-shadow: 0 4px 12px light-dark(#cfcfcf, #0f0f0f);
+ border-radius: 6px;
border: 1px solid
light-dark(var(--mantine-color-gray-3), var(--mantine-color-gray-8));
+ background-color: light-dark(
+ var(--mantine-color-white),
+ var(--mantine-color-dark-6)
+ );
+
+ > * {
+ flex-shrink: 0;
+ }
+
+ scrollbar-width: none;
+
+ &::-webkit-scrollbar {
+ display: none;
+ }
.active {
color: light-dark(var(--mantine-color-blue-8), var(--mantine-color-gray-5));
}
}
+
+.buttonRoot {
+ height: 34px;
+ padding-left: rem(8);
+ padding-right: rem(4);
+ border: none;
+ border-radius: 6px;
+}
+
+.buttonSeparator {
+ border-right: 1px solid
+ light-dark(var(--mantine-color-gray-3), var(--mantine-color-dark-4)) !important;
+}
+
+.divider {
+ width: 1px;
+ height: 16px;
+ align-self: center;
+ margin: 0 4px;
+ background-color: light-dark(
+ var(--mantine-color-gray-3),
+ var(--mantine-color-dark-3)
+ );
+}
diff --git a/apps/client/src/features/editor/components/bubble-menu/bubble-menu.tsx b/apps/client/src/features/editor/components/bubble-menu/bubble-menu.tsx
index a6d143ff..a5d3f8a5 100644
--- a/apps/client/src/features/editor/components/bubble-menu/bubble-menu.tsx
+++ b/apps/client/src/features/editor/components/bubble-menu/bubble-menu.tsx
@@ -9,10 +9,11 @@ import {
IconStrikethrough,
IconUnderline,
IconMessage,
+ IconSparkles,
} from "@tabler/icons-react";
import clsx from "clsx";
import classes from "./bubble-menu.module.css";
-import { ActionIcon, rem, Tooltip } from "@mantine/core";
+import { ActionIcon, Button, rem, Tooltip } from "@mantine/core";
import { ColorSelector } from "./color-selector";
import { NodeSelector } from "./node-selector";
import { TextAlignmentSelector } from "./text-alignment-selector";
@@ -20,11 +21,13 @@ import {
draftCommentIdAtom,
showCommentPopupAtom,
} from "@/features/comment/atoms/comment-atom";
-import { useAtom } from "jotai";
+import { useAtom, useAtomValue } from "jotai";
import { v7 as uuid7 } from "uuid";
import { isCellSelection, isTextSelected } from "@docmost/editor-ext";
import { LinkSelector } from "@/features/editor/components/bubble-menu/link-selector.tsx";
import { useTranslation } from "react-i18next";
+import { showAiMenuAtom } from "@/features/editor/atoms/editor-atoms";
+import { workspaceAtom } from "@/features/user/atoms/current-user-atom";
export interface BubbleMenuItem {
name: string;
@@ -39,14 +42,22 @@ type EditorBubbleMenuProps = Omit & {
export const EditorBubbleMenu: FC = (props) => {
const { t } = useTranslation();
+ const [showAiMenu, setShowAiMenu] = useAtom(showAiMenuAtom);
const [showCommentPopup, setShowCommentPopup] = useAtom(showCommentPopupAtom);
+ const workspace = useAtomValue(workspaceAtom);
+ const isGenerativeAiEnabled = workspace?.settings?.ai?.generative === true;
const [, setDraftCommentId] = useAtom(draftCommentIdAtom);
const showCommentPopupRef = useRef(showCommentPopup);
+ const showAiMenuRef = useRef(showAiMenu);
useEffect(() => {
showCommentPopupRef.current = showCommentPopup;
}, [showCommentPopup]);
+ useEffect(() => {
+ showAiMenuRef.current = showAiMenu;
+ }, [showAiMenu]);
+
const editorState = useEditorState({
editor: props.editor,
selector: (ctx) => {
@@ -123,6 +134,7 @@ export const EditorBubbleMenu: FC = (props) => {
empty ||
isNodeSelection(selection) ||
isCellSelection(selection) ||
+ showAiMenuRef.current ||
showCommentPopupRef?.current
) {
return false;
@@ -146,9 +158,31 @@ export const EditorBubbleMenu: FC = (props) => {
const [isLinkSelectorOpen, setIsLinkSelectorOpen] = useState(false);
const [isColorSelectorOpen, setIsColorSelectorOpen] = useState(false);
+ // Hide the bubble menu immediately when AI menu is shown
+ if (showAiMenu) return;
+
return (
-
+
+ {isGenerativeAiEnabled && (
+ <>
+
}
+ onClick={() => {
+ setShowAiMenu(true);
+ }}
+ >
+ {t("Ask AI")}
+
+
+ >
+ )}
= (props) => {
}}
/>
-
-
-
+
+
+
+
+
);
diff --git a/apps/client/src/features/editor/components/bubble-menu/color-selector.tsx b/apps/client/src/features/editor/components/bubble-menu/color-selector.tsx
index d0907b81..0d4d80c0 100644
--- a/apps/client/src/features/editor/components/bubble-menu/color-selector.tsx
+++ b/apps/client/src/features/editor/components/bubble-menu/color-selector.tsx
@@ -1,7 +1,6 @@
import React, { Dispatch, FC, SetStateAction } from "react";
-import { IconCheck, IconChevronDown, IconPalette } from "@tabler/icons-react";
+import { IconCheck, IconChevronDown } from "@tabler/icons-react";
import {
- ActionIcon,
Button,
Popover,
rem,
@@ -15,6 +14,8 @@ import {
import type { Editor } from "@tiptap/react";
import { useEditorState } from "@tiptap/react";
import { useTranslation } from "react-i18next";
+import clsx from "clsx";
+import classes from "./bubble-menu.module.css";
export interface BubbleColorMenuItem {
name: string;
@@ -166,14 +167,10 @@ export const ColorSelector: FC = ({
onClick={() => setIsOpen(!isOpen)}
data-text-color={activeColorItem?.color || ""}
data-highlight-color={activeHighlightItem?.color || ""}
- className="color-selector-trigger"
+ className={clsx(["color-selector-trigger", classes.buttonRoot])}
style={{
- height: "34px",
- border: "none",
fontWeight: 500,
fontSize: rem(16),
- paddingLeft: rem(8),
- paddingRight: rem(4),
}}
>
A
diff --git a/apps/client/src/features/editor/components/bubble-menu/node-selector.tsx b/apps/client/src/features/editor/components/bubble-menu/node-selector.tsx
index 13b2117f..7fecff9e 100644
--- a/apps/client/src/features/editor/components/bubble-menu/node-selector.tsx
+++ b/apps/client/src/features/editor/components/bubble-menu/node-selector.tsx
@@ -1,6 +1,7 @@
import React, { Dispatch, FC, SetStateAction } from "react";
import {
IconBlockquote,
+ IconCaretRightFilled,
IconCheck,
IconCheckbox,
IconChevronDown,
@@ -8,14 +9,16 @@ import {
IconH1,
IconH2,
IconH3,
+ IconInfoCircle,
IconList,
IconListNumbers,
IconTypography,
} from "@tabler/icons-react";
-import { Popover, Button, ScrollArea } from "@mantine/core";
+import { Popover, Button, ScrollArea, Tooltip } from "@mantine/core";
import type { Editor } from "@tiptap/react";
import { useEditorState } from "@tiptap/react";
import { useTranslation } from "react-i18next";
+import classes from "./bubble-menu.module.css";
interface NodeSelectorProps {
editor: Editor | null;
@@ -54,6 +57,8 @@ export const NodeSelector: FC = ({
isTaskItem: ctx.editor.isActive("taskItem"),
isBlockquote: ctx.editor.isActive("blockquote"),
isCodeBlock: ctx.editor.isActive("codeBlock"),
+ isCallout: ctx.editor.isActive("callout"),
+ isDetails: ctx.editor.isActive("details"),
};
},
});
@@ -123,6 +128,18 @@ export const NodeSelector: FC = ({
command: () => editor.chain().focus().toggleCodeBlock().run(),
isActive: () => editorState?.isCodeBlock,
},
+ {
+ name: "Callout",
+ icon: IconInfoCircle,
+ command: () => editor.chain().focus().toggleCallout().run(),
+ isActive: () => editorState?.isCallout,
+ },
+ {
+ name: "Toggle block",
+ icon: IconCaretRightFilled,
+ command: () => editor.chain().focus().setDetails().run(),
+ isActive: () => editorState?.isDetails,
+ },
];
const activeItem = items.filter((item) => item.isActive()).pop() ?? {
@@ -132,15 +149,18 @@ export const NodeSelector: FC = ({
return (
- }
- onClick={() => setIsOpen(!isOpen)}
- >
- {t(activeItem?.name)}
-
+
+ }
+ onClick={() => setIsOpen(!isOpen)}
+ >
+ {t(activeItem?.name)}
+
+
diff --git a/apps/client/src/features/editor/components/bubble-menu/text-alignment-selector.tsx b/apps/client/src/features/editor/components/bubble-menu/text-alignment-selector.tsx
index b5277651..f8dba1c9 100644
--- a/apps/client/src/features/editor/components/bubble-menu/text-alignment-selector.tsx
+++ b/apps/client/src/features/editor/components/bubble-menu/text-alignment-selector.tsx
@@ -7,7 +7,7 @@ import {
IconCheck,
IconChevronDown,
} from "@tabler/icons-react";
-import { Popover, Button, ScrollArea, rem } from "@mantine/core";
+import { Popover, Button, ScrollArea, Tooltip, rem } from "@mantine/core";
import type { Editor } from "@tiptap/react";
import { useEditorState } from "@tiptap/react";
import { useTranslation } from "react-i18next";
@@ -84,16 +84,18 @@ export const TextAlignmentSelector: FC = ({
return (
- }
- onClick={() => setIsOpen(!isOpen)}
- >
-
-
+
+ }
+ onClick={() => setIsOpen(!isOpen)}
+ >
+
+
+
diff --git a/apps/client/src/features/editor/components/code-block/code-block-view.tsx b/apps/client/src/features/editor/components/code-block/code-block-view.tsx
index 130016a3..0ff2fe36 100644
--- a/apps/client/src/features/editor/components/code-block/code-block-view.tsx
+++ b/apps/client/src/features/editor/components/code-block/code-block-view.tsx
@@ -1,5 +1,6 @@
import { NodeViewContent, NodeViewProps, NodeViewWrapper } from "@tiptap/react";
-import { ActionIcon, CopyButton, Group, Select, Tooltip } from "@mantine/core";
+import { ActionIcon, Group, Select, Tooltip } from "@mantine/core";
+import { CopyButton } from "@/components/common/copy-button";
import { useEffect, useState } from "react";
import { IconCheck, IconCopy } from "@tabler/icons-react";
import classes from "./code-block.module.css";
diff --git a/apps/client/src/features/editor/components/mention/mention-list.tsx b/apps/client/src/features/editor/components/mention/mention-list.tsx
index 32959146..f71e39eb 100644
--- a/apps/client/src/features/editor/components/mention/mention-list.tsx
+++ b/apps/client/src/features/editor/components/mention/mention-list.tsx
@@ -10,6 +10,7 @@ import React, {
import { useSearchSuggestionsQuery } from "@/features/search/queries/search-query.ts";
import {
ActionIcon,
+ Divider,
Group,
Paper,
ScrollArea,
@@ -51,6 +52,7 @@ const MentionList = forwardRef((props, ref) => {
const tree = useMemo(() => new SimpleTree(data), [data]);
const createPageMutation = useCreatePageMutation();
const emit = useQueryEmit();
+ const isInCommentContext = props.isInCommentContext ?? false;
const { data: suggestion, isLoading } = useSearchSuggestionsQuery({
query: props.query,
@@ -58,6 +60,7 @@ const MentionList = forwardRef((props, ref) => {
includePages: true,
spaceId: space.id,
limit: 10,
+ preload: true,
});
const createPageItem = (label: string) : MentionSuggestionItem => {
@@ -102,7 +105,9 @@ const MentionList = forwardRef((props, ref) => {
})),
);
}
- items.push(createPageItem(props.query));
+ if (!isInCommentContext && props.query) {
+ items.push(createPageItem(props.query));
+ }
setRenderItems(items);
// update editor storage
@@ -250,35 +255,51 @@ const MentionList = forwardRef((props, ref) => {
}
}
- // if no results and enter what to do?
-
useEffect(() => {
viewportRef.current
?.querySelector(`[data-item-index="${selectedIndex}"]`)
?.scrollIntoView({ block: "nearest" });
}, [selectedIndex]);
+ const popupWidth = isInCommentContext ? 280 : 320;
+
if (renderItems.length === 0) {
return (
-
- { t("No results") }
+
+
+ { t("No results") }
+
);
}
+ const hasUsers = renderItems.some((item) => item.entityType === "user");
+ const hasPages = renderItems.some((item) => item.entityType === "page" && item.id !== null);
+ const createPageItemData = renderItems.find((item) => item.entityType === "page" && item.id === null);
+
return (
-
+
{renderItems?.map((item, index) => {
if (item.entityType === "header") {
+ const isFirst = index === 0;
return (
-
+ {!isFirst && }
+
{item.label}
@@ -292,8 +313,9 @@ const MentionList = forwardRef((props, ref) => {
className={clsx(classes.menuBtn, {
[classes.selectedItem]: index === selectedIndex,
})}
+ px="sm"
>
-
+
((props, ref) => {
);
- } else if (item.entityType === "page") {
+ } else if (item.entityType === "page" && item.id !== null) {
return (
((props, ref) => {
className={clsx(classes.menuBtn, {
[classes.selectedItem]: index === selectedIndex,
})}
+ px="sm"
>
-
+
{item.icon || (
-
- { (item.id) ? : }
-
+
)}
-
-
- { (item.id) ? item.label : t("Create page") + ': ' + item.label }
+
+
+ {item.label}
@@ -348,6 +366,37 @@ const MentionList = forwardRef((props, ref) => {
return null;
}
})}
+
+ {createPageItemData && !isInCommentContext && (
+ <>
+ {(hasUsers || hasPages) && }
+ selectItem(renderItems.indexOf(createPageItemData))}
+ className={clsx(classes.menuBtn, {
+ [classes.selectedItem]: renderItems.indexOf(createPageItemData) === selectedIndex,
+ })}
+ px="sm"
+ >
+
+
+
+
+
+
+
+ {t("Create page")}: {createPageItemData.label}
+
+
+
+
+ >
+ )}
);
diff --git a/apps/client/src/features/editor/components/mention/mention-suggestion.ts b/apps/client/src/features/editor/components/mention/mention-suggestion.ts
index d53c422c..2a4fec1f 100644
--- a/apps/client/src/features/editor/components/mention/mention-suggestion.ts
+++ b/apps/client/src/features/editor/components/mention/mention-suggestion.ts
@@ -17,8 +17,13 @@ const mentionRenderItems = () => {
let component: ReactRenderer | null = null;
let activeClientRect: (() => DOMRect) | null = null;
let updatePositionCleanup: (() => void) | null = null;
+ let outsideClickHandler: ((e: MouseEvent) => void) | null = null;
const destroy = () => {
+ if (outsideClickHandler) {
+ document.removeEventListener("pointerdown", outsideClickHandler);
+ outsideClickHandler = null;
+ }
updatePositionCleanup?.();
updatePositionCleanup = null;
component?.destroy();
@@ -45,8 +50,14 @@ const mentionRenderItems = () => {
return;
}
+ const editorDom = props.editor?.view?.dom;
+ const asideEl = editorDom?.closest(".mantine-AppShell-aside");
+ const dialogEl = editorDom?.closest("[data-comment-dialog]");
+ const isInCommentContext = !!(asideEl || dialogEl);
+ // const isInCommentContext = !!asideEl;
+
component = new ReactRenderer(MentionList, {
- props,
+ props: { ...props, isInCommentContext },
editor: props.editor,
});
@@ -59,6 +70,18 @@ const mentionRenderItems = () => {
const { element } = component;
document.body.appendChild(element);
+ outsideClickHandler = (e: MouseEvent) => {
+ const target = e.target as Node;
+ if (element && !element.contains(target)) {
+ destroy();
+ }
+ };
+ document.addEventListener("pointerdown", outsideClickHandler);
+
+ const shiftMiddleware = asideEl
+ ? shift({ boundary: asideEl, crossAxis: true, padding: 8 })
+ : shift();
+
updatePositionCleanup = autoUpdate(
{
getBoundingClientRect: () =>
@@ -76,7 +99,7 @@ const mentionRenderItems = () => {
element,
{
placement: "bottom-start",
- middleware: [offset(0), flip(), shift()],
+ middleware: [offset(4), flip(), shiftMiddleware],
},
).then(({ x, y }) => {
Object.assign(element.style, {
diff --git a/apps/client/src/features/editor/components/mention/mention.module.css b/apps/client/src/features/editor/components/mention/mention.module.css
index 691fc71a..0ebd09ef 100644
--- a/apps/client/src/features/editor/components/mention/mention.module.css
+++ b/apps/client/src/features/editor/components/mention/mention.module.css
@@ -31,14 +31,14 @@
.menuBtn {
width: 100%;
- padding: 4px;
- margin-bottom: 2px;
+ padding: 6px 4px;
+ margin-bottom: 1px;
color: var(--mantine-color-text);
border-radius: var(--mantine-radius-sm);
&:hover {
@mixin light {
- background: var(--mantine-color-gray-2);
+ background: var(--mantine-color-gray-1);
}
@mixin dark {
@@ -49,7 +49,7 @@
.selectedItem {
@mixin light {
- background: var(--mantine-color-gray-2);
+ background: var(--mantine-color-gray-1);
}
@mixin dark {
diff --git a/apps/client/src/features/editor/components/mention/mention.type.ts b/apps/client/src/features/editor/components/mention/mention.type.ts
index e837629a..efbe27f8 100644
--- a/apps/client/src/features/editor/components/mention/mention.type.ts
+++ b/apps/client/src/features/editor/components/mention/mention.type.ts
@@ -7,6 +7,7 @@ export interface MentionListProps {
range: Range;
text: string;
editor: Editor;
+ isInCommentContext?: boolean;
}
export type MentionSuggestionItem =
diff --git a/apps/client/src/features/editor/components/slash-menu/menu-items.ts b/apps/client/src/features/editor/components/slash-menu/menu-items.ts
index bebefed4..27793f62 100644
--- a/apps/client/src/features/editor/components/slash-menu/menu-items.ts
+++ b/apps/client/src/features/editor/components/slash-menu/menu-items.ts
@@ -170,6 +170,8 @@ const CommandGroups: SlashMenuGroupedItemsType = {
input.type = "file";
input.accept = "image/*";
input.multiple = true;
+ input.style.display = "none";
+ document.body.appendChild(input);
input.onchange = async () => {
if (input.files?.length) {
for (const file of input.files) {
@@ -179,8 +181,7 @@ const CommandGroups: SlashMenuGroupedItemsType = {
}
}
- // Reset the input value to allow uploading the same file again if needed
- input.value = "";
+ input.remove();
};
input.click();
},
@@ -202,6 +203,8 @@ const CommandGroups: SlashMenuGroupedItemsType = {
input.type = "file";
input.accept = "video/*";
input.multiple = true;
+ input.style.display = "none";
+ document.body.appendChild(input);
input.onchange = async () => {
if (input.files?.length) {
for (const file of input.files) {
@@ -211,8 +214,7 @@ const CommandGroups: SlashMenuGroupedItemsType = {
}
}
- // Reset the input value to allow uploading the same file again if needed
- input.value = "";
+ input.remove();
};
input.click();
},
@@ -234,6 +236,8 @@ const CommandGroups: SlashMenuGroupedItemsType = {
input.type = "file";
input.accept = "";
input.multiple = true;
+ input.style.display = "none";
+ document.body.appendChild(input);
input.onchange = async () => {
if (input.files?.length) {
for (const file of input.files) {
@@ -243,8 +247,7 @@ const CommandGroups: SlashMenuGroupedItemsType = {
}
}
- // Reset the input value to allow uploading the same file again if needed
- input.value = "";
+ input.remove();
};
input.click();
},
diff --git a/apps/client/src/features/editor/page-editor.tsx b/apps/client/src/features/editor/page-editor.tsx
index da8bd84a..ed7ccecd 100644
--- a/apps/client/src/features/editor/page-editor.tsx
+++ b/apps/client/src/features/editor/page-editor.tsx
@@ -66,6 +66,7 @@ import { PageEditMode } from "@/features/user/types/user.types.ts";
import { jwtDecode } from "jwt-decode";
import { searchSpotlight } from "@/features/search/constants.ts";
import { useEditorScroll } from "./hooks/use-editor-scroll";
+import { EditorAiMenu } from "@/ee/ai/components/editor/ai-menu/ai-menu";
interface PageEditorProps {
pageId: string;
@@ -405,6 +406,7 @@ export default function PageEditor({
{editor && editorIsEditable && (
+
diff --git a/apps/client/src/features/editor/readonly-page-editor.tsx b/apps/client/src/features/editor/readonly-page-editor.tsx
index 77496fcd..b2ab829a 100644
--- a/apps/client/src/features/editor/readonly-page-editor.tsx
+++ b/apps/client/src/features/editor/readonly-page-editor.tsx
@@ -3,7 +3,7 @@ import React, { useCallback, useEffect, useMemo, useRef } from "react";
import { EditorProvider } from "@tiptap/react";
import { mainExtensions } from "@/features/editor/extensions/extensions";
import { Document } from "@tiptap/extension-document";
-import { Heading, generateNodeId, UniqueID } from "@docmost/editor-ext";
+import { Heading, UniqueID } from "@docmost/editor-ext";
import { Text } from "@tiptap/extension-text";
import { Placeholder } from "@tiptap/extension-placeholder";
import { useAtom } from "jotai";
diff --git a/apps/client/src/features/editor/styles/print.css b/apps/client/src/features/editor/styles/print.css
index c63e376b..5cf32a30 100644
--- a/apps/client/src/features/editor/styles/print.css
+++ b/apps/client/src/features/editor/styles/print.css
@@ -8,7 +8,7 @@
}
.mantine-AppShell-main {
- padding-top: 0 !important;
+ padding: 0 !important;
min-height: auto !important;
}
diff --git a/apps/client/src/features/editor/title-editor.tsx b/apps/client/src/features/editor/title-editor.tsx
index c3610394..31318af5 100644
--- a/apps/client/src/features/editor/title-editor.tsx
+++ b/apps/client/src/features/editor/title-editor.tsx
@@ -157,8 +157,10 @@ export function TitleEditor({
useEffect(() => {
setTimeout(() => {
- titleEditor?.commands.focus("end");
- }, 500);
+ // guard against Cannot access view['hasFocus'] error
+ if (!titleEditor?.isInitialized) return;
+ titleEditor?.commands?.focus("end");
+ }, 300);
}, [titleEditor]);
useEffect(() => {
diff --git a/apps/client/src/features/notification/components/notification-item.tsx b/apps/client/src/features/notification/components/notification-item.tsx
new file mode 100644
index 00000000..f9510be6
--- /dev/null
+++ b/apps/client/src/features/notification/components/notification-item.tsx
@@ -0,0 +1,148 @@
+import {
+ ActionIcon,
+ Group,
+ Text,
+ Tooltip,
+ UnstyledButton,
+} from "@mantine/core";
+import {
+ IconCheck,
+ IconFileDescription,
+ IconPointFilled,
+} from "@tabler/icons-react";
+import { CustomAvatar } from "@/components/ui/custom-avatar";
+import { INotification } from "../types/notification.types";
+import { useTranslation } from "react-i18next";
+import { useNavigate } from "react-router-dom";
+import { useState } from "react";
+import { useMarkReadMutation } from "../queries/notification-query";
+import { buildPageUrl } from "@/features/page/page.utils";
+import { formatRelativeTime } from "../notification.utils";
+import classes from "../notification.module.css";
+
+type NotificationItemProps = {
+ notification: INotification;
+ onNavigate: () => void;
+};
+
+export function NotificationItem({
+ notification,
+ onNavigate,
+}: NotificationItemProps) {
+ const { t } = useTranslation();
+ const navigate = useNavigate();
+ const markRead = useMarkReadMutation();
+ const [hovered, setHovered] = useState(false);
+
+ const isUnread = !notification.readAt;
+
+ const getNotificationMessage = (): string => {
+ switch (notification.type) {
+ case "comment.user_mention":
+ return t("mentioned you in a comment");
+ case "comment.created":
+ return t("commented on a page");
+ case "comment.resolved":
+ return t("resolved a comment");
+ case "page.user_mention":
+ return t("mentioned you on a page");
+ default:
+ return "";
+ }
+ };
+
+ const handleClick = () => {
+ if (notification.page && notification.space) {
+ if (isUnread) {
+ markRead.mutate([notification.id]);
+ }
+ navigate(
+ buildPageUrl(
+ notification.space.slug,
+ notification.page.slugId,
+ notification.page.title,
+ ),
+ );
+ onNavigate();
+ }
+ };
+
+ const handleMarkRead = (e: React.MouseEvent) => {
+ e.stopPropagation();
+ if (isUnread) {
+ markRead.mutate([notification.id]);
+ }
+ };
+
+ return (
+
setHovered(true)}
+ onMouseLeave={() => setHovered(false)}
+ w="100%"
+ className={classes.notificationItem}
+ >
+
+
+
+
+
+
+ {notification.actor?.name}
+ {" "}
+ {getNotificationMessage()}
+
+
+ {notification.page && (
+
+ {notification.page.icon ? (
+
+ {notification.page.icon}
+
+ ) : (
+
+ )}
+
+ {notification.page.title || t("Untitled")}
+
+
+ )}
+
+
+
+ {hovered && isUnread ? (
+
+
+
+
+
+ ) : (
+
+ {formatRelativeTime(notification.createdAt)}
+
+ )}
+
+ {isUnread && (
+
+ )}
+
+
+
+ );
+}
diff --git a/apps/client/src/features/notification/components/notification-list.tsx b/apps/client/src/features/notification/components/notification-list.tsx
new file mode 100644
index 00000000..4c992c57
--- /dev/null
+++ b/apps/client/src/features/notification/components/notification-list.tsx
@@ -0,0 +1,115 @@
+import { Center, Divider, Loader, Stack, Text } from "@mantine/core";
+import { IconBellOff } from "@tabler/icons-react";
+import { useTranslation } from "react-i18next";
+import { useEffect, useRef } from "react";
+import { NotificationItem } from "./notification-item";
+import { INotification, NotificationFilter } from "../types/notification.types";
+import { groupNotificationsByTime } from "../notification.utils";
+import { useNotificationsQuery } from "../queries/notification-query";
+import classes from "../notification.module.css";
+
+type NotificationListProps = {
+ filter: NotificationFilter;
+ onNavigate: () => void;
+};
+
+export function NotificationList({
+ filter,
+ onNavigate,
+}: NotificationListProps) {
+ const { t } = useTranslation();
+ const {
+ data,
+ isLoading,
+ hasNextPage,
+ fetchNextPage,
+ isFetchingNextPage,
+ } = useNotificationsQuery();
+
+ const sentinelRef = useRef
(null);
+
+ useEffect(() => {
+ const sentinel = sentinelRef.current;
+ if (!sentinel) return;
+
+ const observer = new IntersectionObserver(
+ (entries) => {
+ if (entries[0].isIntersecting && hasNextPage && !isFetchingNextPage) {
+ fetchNextPage();
+ }
+ },
+ { threshold: 0.1 },
+ );
+
+ observer.observe(sentinel);
+ return () => observer.disconnect();
+ }, [hasNextPage, isFetchingNextPage, fetchNextPage]);
+
+ if (isLoading) {
+ return (
+
+
+
+ );
+ }
+
+ const allNotifications =
+ data?.pages.flatMap((page) => page.items) ?? [];
+
+ const filtered =
+ filter === "unread"
+ ? allNotifications.filter((n) => !n.readAt)
+ : allNotifications;
+
+ if (filtered.length === 0) {
+ return (
+
+
+
+
+ {filter === "unread"
+ ? t("No unread notifications")
+ : t("No notifications")}
+
+
+
+ );
+ }
+
+ const timeGroupLabels = {
+ today: t("Today"),
+ yesterday: t("Yesterday"),
+ this_week: t("This week"),
+ older: t("Older"),
+ };
+
+ const groups = groupNotificationsByTime(filtered, timeGroupLabels);
+
+ return (
+
+ {groups.map((group, groupIndex) => (
+
+ {groupIndex > 0 &&
}
+
+ {group.label}
+
+ {group.notifications.map((notification: INotification) => (
+
+ ))}
+
+ ))}
+
+
+
+ {isFetchingNextPage && (
+
+
+
+ )}
+
+ );
+}
diff --git a/apps/client/src/features/notification/components/notification-popover.tsx b/apps/client/src/features/notification/components/notification-popover.tsx
new file mode 100644
index 00000000..8ebfedad
--- /dev/null
+++ b/apps/client/src/features/notification/components/notification-popover.tsx
@@ -0,0 +1,142 @@
+import { useState } from "react";
+import {
+ ActionIcon,
+ Group,
+ Indicator,
+ Menu,
+ Popover,
+ ScrollArea,
+ Text,
+ Tooltip,
+} from "@mantine/core";
+import {
+ IconBell,
+ IconCheck,
+ IconChecks,
+ IconDots,
+ IconFilter,
+} from "@tabler/icons-react";
+import { useTranslation } from "react-i18next";
+import { NotificationList } from "./notification-list";
+import { NotificationFilter } from "../types/notification.types";
+import {
+ useMarkAllReadMutation,
+ useUnreadCountQuery,
+} from "../queries/notification-query";
+
+export function NotificationPopover() {
+ const { t } = useTranslation();
+ const [opened, setOpened] = useState(false);
+ const [filter, setFilter] = useState("all");
+
+ const { data: unreadData } = useUnreadCountQuery();
+ const markAllRead = useMarkAllReadMutation();
+
+ const unreadCount = unreadData?.count ?? 0;
+
+ const handleMarkAllRead = () => {
+ markAllRead.mutate();
+ };
+
+ return (
+
+
+
+ setOpened((o) => !o)}
+ >
+
+
+
+
+
+
+
+
+
+
+ {t("Notifications")}
+
+
+
+
+
+
+
+
+
+
+
+ {t("Filter")}
+ setFilter("all")}
+ rightSection={
+ filter === "all" ? : null
+ }
+ >
+ {t("All notifications")}
+
+ setFilter("unread")}
+ rightSection={
+ filter === "unread" ? : null
+ }
+ >
+ {t("Unread only")}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+ onClick={handleMarkAllRead}
+ disabled={unreadCount === 0}
+ >
+ {t("Mark all as read")}
+
+
+
+
+
+
+
+ setOpened(false)}
+ />
+
+
+
+ );
+}
diff --git a/apps/client/src/features/notification/hooks/use-notification-socket.ts b/apps/client/src/features/notification/hooks/use-notification-socket.ts
new file mode 100644
index 00000000..796c504a
--- /dev/null
+++ b/apps/client/src/features/notification/hooks/use-notification-socket.ts
@@ -0,0 +1,23 @@
+import { useEffect } from "react";
+import { useAtom } from "jotai";
+import { useQueryClient } from "@tanstack/react-query";
+import { socketAtom } from "@/features/websocket/atoms/socket-atom";
+import { NOTIFICATION_KEY } from "../queries/notification-query";
+
+export function useNotificationSocket() {
+ const queryClient = useQueryClient();
+ const [socket] = useAtom(socketAtom);
+
+ useEffect(() => {
+ if (!socket) return;
+
+ const handler = () => {
+ queryClient.invalidateQueries({ queryKey: NOTIFICATION_KEY });
+ };
+
+ socket.on("notification", handler);
+ return () => {
+ socket.off("notification", handler);
+ };
+ }, [socket, queryClient]);
+}
diff --git a/apps/client/src/features/notification/notification.module.css b/apps/client/src/features/notification/notification.module.css
new file mode 100644
index 00000000..8a80bcf8
--- /dev/null
+++ b/apps/client/src/features/notification/notification.module.css
@@ -0,0 +1,13 @@
+.notificationItem {
+ padding: 8px 12px;
+ border-radius: 4px;
+ cursor: pointer;
+}
+
+.notificationItem:hover {
+ background-color: var(--mantine-color-default-hover);
+}
+
+.divider {
+ border-color: light-dark(var(--mantine-color-gray-2), var(--mantine-color-dark-5));
+}
diff --git a/apps/client/src/features/notification/notification.utils.ts b/apps/client/src/features/notification/notification.utils.ts
new file mode 100644
index 00000000..266bfc27
--- /dev/null
+++ b/apps/client/src/features/notification/notification.utils.ts
@@ -0,0 +1,75 @@
+import { INotification } from "./types/notification.types";
+
+export function formatRelativeTime(dateStr: string): string {
+ const date = new Date(dateStr);
+ const now = new Date();
+ const diffMs = now.getTime() - date.getTime();
+ const diffMin = Math.floor(diffMs / 60_000);
+ const diffHours = Math.floor(diffMs / 3_600_000);
+ const diffDays = Math.floor(diffMs / 86_400_000);
+
+ if (diffMin < 1) return "now";
+ if (diffMin < 60) return `${diffMin}m`;
+ if (diffHours < 24) return `${diffHours}h`;
+ if (diffDays < 7) return `${diffDays}d`;
+
+ return date.toLocaleDateString(undefined, {
+ month: "short",
+ day: "numeric",
+ });
+}
+
+type TimeGroup = "today" | "yesterday" | "this_week" | "older";
+
+export function getTimeGroup(dateStr: string): TimeGroup {
+ const date = new Date(dateStr);
+ const now = new Date();
+
+ const startOfToday = new Date(
+ now.getFullYear(),
+ now.getMonth(),
+ now.getDate(),
+ );
+ const startOfYesterday = new Date(startOfToday);
+ startOfYesterday.setDate(startOfYesterday.getDate() - 1);
+ const startOfWeek = new Date(startOfToday);
+ startOfWeek.setDate(startOfWeek.getDate() - 7);
+
+ if (date >= startOfToday) return "today";
+ if (date >= startOfYesterday) return "yesterday";
+ if (date >= startOfWeek) return "this_week";
+ return "older";
+}
+
+export type GroupedNotifications = {
+ key: TimeGroup;
+ label: string;
+ notifications: INotification[];
+};
+
+export function groupNotificationsByTime(
+ notifications: INotification[],
+ labels: Record,
+): GroupedNotifications[] {
+ const groups: Record = {
+ today: [],
+ yesterday: [],
+ this_week: [],
+ older: [],
+ };
+
+ for (const notification of notifications) {
+ const group = getTimeGroup(notification.createdAt);
+ groups[group].push(notification);
+ }
+
+ const order: TimeGroup[] = ["today", "yesterday", "this_week", "older"];
+
+ return order
+ .filter((key) => groups[key].length > 0)
+ .map((key) => ({
+ key,
+ label: labels[key],
+ notifications: groups[key],
+ }));
+}
diff --git a/apps/client/src/features/notification/queries/notification-query.ts b/apps/client/src/features/notification/queries/notification-query.ts
new file mode 100644
index 00000000..363482b1
--- /dev/null
+++ b/apps/client/src/features/notification/queries/notification-query.ts
@@ -0,0 +1,59 @@
+import {
+ keepPreviousData,
+ useInfiniteQuery,
+ useMutation,
+ useQuery,
+ useQueryClient,
+} from "@tanstack/react-query";
+import {
+ getNotifications,
+ getUnreadCount,
+ markNotificationsRead,
+ markAllNotificationsRead,
+} from "../services/notification-service";
+
+export const NOTIFICATION_KEY = ["notifications"];
+export const UNREAD_COUNT_KEY = ["notifications", "unread-count"];
+
+export function useNotificationsQuery() {
+ return useInfiniteQuery({
+ queryKey: NOTIFICATION_KEY,
+ queryFn: ({ pageParam }) => getNotifications({ cursor: pageParam }),
+ initialPageParam: undefined as string | undefined,
+ getNextPageParam: (lastPage) =>
+ lastPage.meta.hasNextPage ? lastPage.meta.nextCursor : undefined,
+ staleTime: 0,
+ gcTime: 0,
+ placeholderData: keepPreviousData,
+ });
+}
+
+export function useUnreadCountQuery() {
+ return useQuery({
+ queryKey: UNREAD_COUNT_KEY,
+ queryFn: getUnreadCount,
+ });
+}
+
+export function useMarkReadMutation() {
+ const queryClient = useQueryClient();
+
+ return useMutation({
+ mutationFn: (notificationIds: string[]) =>
+ markNotificationsRead(notificationIds),
+ onSuccess: () => {
+ queryClient.invalidateQueries({ queryKey: NOTIFICATION_KEY });
+ },
+ });
+}
+
+export function useMarkAllReadMutation() {
+ const queryClient = useQueryClient();
+
+ return useMutation({
+ mutationFn: markAllNotificationsRead,
+ onSuccess: () => {
+ queryClient.invalidateQueries({ queryKey: NOTIFICATION_KEY });
+ },
+ });
+}
diff --git a/apps/client/src/features/notification/services/notification-service.ts b/apps/client/src/features/notification/services/notification-service.ts
new file mode 100644
index 00000000..8adf4909
--- /dev/null
+++ b/apps/client/src/features/notification/services/notification-service.ts
@@ -0,0 +1,31 @@
+import api from "@/lib/api-client";
+import { INotification } from "../types/notification.types";
+import { IPagination } from "@/lib/types";
+
+export async function getNotifications(params: {
+ limit?: number;
+ cursor?: string;
+}): Promise> {
+ const req = await api.post>(
+ "/notifications",
+ params,
+ );
+ return req.data;
+}
+
+export async function getUnreadCount(): Promise<{ count: number }> {
+ const req = await api.post<{ count: number }>(
+ "/notifications/unread-count",
+ );
+ return req.data;
+}
+
+export async function markNotificationsRead(
+ notificationIds: string[],
+): Promise {
+ await api.post("/notifications/mark-read", { notificationIds });
+}
+
+export async function markAllNotificationsRead(): Promise {
+ await api.post("/notifications/mark-all-read");
+}
diff --git a/apps/client/src/features/notification/types/notification.types.ts b/apps/client/src/features/notification/types/notification.types.ts
new file mode 100644
index 00000000..2961f5fc
--- /dev/null
+++ b/apps/client/src/features/notification/types/notification.types.ts
@@ -0,0 +1,39 @@
+export type NotificationType =
+ | "comment.user_mention"
+ | "comment.created"
+ | "comment.resolved"
+ | "page.user_mention";
+
+export type INotification = {
+ id: string;
+ userId: string;
+ workspaceId: string;
+ type: NotificationType;
+ actorId: string | null;
+ pageId: string | null;
+ spaceId: string | null;
+ commentId: string | null;
+ data: Record | null;
+ readAt: string | null;
+ emailedAt: string | null;
+ archivedAt: string | null;
+ createdAt: string;
+ actor: {
+ id: string;
+ name: string;
+ avatarUrl: string | null;
+ } | null;
+ page: {
+ id: string;
+ title: string;
+ slugId: string;
+ icon: string | null;
+ } | null;
+ space: {
+ id: string;
+ name: string;
+ slug: string;
+ } | null;
+};
+
+export type NotificationFilter = "all" | "unread";
diff --git a/apps/client/src/features/page-history/atoms/history-atoms.ts b/apps/client/src/features/page-history/atoms/history-atoms.ts
index 023aaa36..2acf163d 100644
--- a/apps/client/src/features/page-history/atoms/history-atoms.ts
+++ b/apps/client/src/features/page-history/atoms/history-atoms.ts
@@ -1,4 +1,9 @@
import { atom } from "jotai";
export const historyAtoms = atom(false);
-export const activeHistoryIdAtom = atom('');
+export const activeHistoryIdAtom = atom("");
+export const activeHistoryPrevIdAtom = atom("");
+export const highlightChangesAtom = atom(true);
+
+export type DiffCounts = { added: number; deleted: number; total: number };
+export const diffCountsAtom = atom(null);
diff --git a/apps/client/src/features/page-history/components/css/history-mobile.module.css b/apps/client/src/features/page-history/components/css/history-mobile.module.css
new file mode 100644
index 00000000..2db6d10c
--- /dev/null
+++ b/apps/client/src/features/page-history/components/css/history-mobile.module.css
@@ -0,0 +1,69 @@
+.container {
+ display: flex;
+ flex-direction: column;
+ height: calc(100vh - 60px);
+ position: relative;
+ overflow: hidden;
+}
+
+.selectorWrapper {
+ padding: var(--mantine-spacing-sm);
+ border-bottom: rem(1px) solid light-dark(var(--mantine-color-gray-3), var(--mantine-color-dark-4));
+ flex-shrink: 0;
+}
+
+.selector {
+ width: 100%;
+ text-align: left;
+ background-color: light-dark(var(--mantine-color-white), var(--mantine-color-dark-6));
+ padding: var(--mantine-spacing-xs) var(--mantine-spacing-sm);
+ cursor: pointer;
+
+ &:hover {
+ background-color: light-dark(var(--mantine-color-gray-0), var(--mantine-color-dark-5));
+ }
+}
+
+.dropdown {
+ max-height: rem(300px);
+}
+
+.option {
+ padding: var(--mantine-spacing-xs) var(--mantine-spacing-sm);
+
+ &[data-combobox-selected] {
+ background-color: light-dark(var(--mantine-color-gray-1), var(--mantine-color-dark-5));
+ }
+
+ &:hover {
+ background-color: light-dark(var(--mantine-color-gray-1), var(--mantine-color-dark-5));
+ }
+}
+
+.editorArea {
+ flex: 1;
+ min-height: 0;
+}
+
+.editorContent {
+ padding: var(--mantine-spacing-md);
+ padding-bottom: rem(60px);
+}
+
+.actionButtons {
+ padding: var(--mantine-spacing-sm) var(--mantine-spacing-md);
+ padding-bottom: rem(70px);
+ border-top: rem(1px) solid light-dark(var(--mantine-color-gray-3), var(--mantine-color-dark-4));
+ background-color: light-dark(var(--mantine-color-white), var(--mantine-color-dark-7));
+ flex-shrink: 0;
+}
+
+.floatingBar {
+ position: fixed;
+ bottom: var(--mantine-spacing-md);
+ left: 50%;
+ transform: translateX(-50%);
+ z-index: 100;
+ background-color: light-dark(var(--mantine-color-white), var(--mantine-color-dark-6));
+ white-space: nowrap;
+}
diff --git a/apps/client/src/features/page-history/components/css/history.module.css b/apps/client/src/features/page-history/components/css/history.module.css
new file mode 100644
index 00000000..a4be3819
--- /dev/null
+++ b/apps/client/src/features/page-history/components/css/history.module.css
@@ -0,0 +1,79 @@
+.history {
+ display: block;
+ width: 100%;
+ padding: var(--mantine-spacing-md);
+ color: light-dark(var(--mantine-color-black), var(--mantine-color-dark-0));
+
+ @mixin hover {
+ background-color: light-dark(
+ var(--mantine-color-gray-2),
+ var(--mantine-color-dark-8)
+ );
+ }
+}
+
+.historyEditor {
+ :global(.ProseMirror) {
+ padding: 0 !important;
+ }
+
+ & :global(.history-diff-added) {
+ background: light-dark(#e1f3f2, #01654a) !important;
+ color: light-dark(#007b69, #cafff7) !important;
+ -webkit-box-decoration-break: clone;
+ box-decoration-break: clone;
+ }
+
+ & :global(.history-diff-deleted) {
+ text-decoration: line-through;
+ color: light-dark(var(--mantine-color-red-7), var(--mantine-color-red-4));
+ background: light-dark(var(--mantine-color-red-0), rgba(255, 0, 0, 0.1));
+ border-radius: rem(2px);
+ padding: 0 rem(2px);
+ }
+
+ & :global(.history-diff-node-added) {
+ outline: rem(2px) solid
+ light-dark(var(--mantine-color-teal-5), var(--mantine-color-teal-7));
+ outline-offset: rem(2px);
+ border-radius: rem(4px);
+ }
+
+ & :global(.history-diff-node-deleted) {
+ opacity: 0.5;
+ outline: rem(2px) dashed
+ light-dark(var(--mantine-color-red-4), var(--mantine-color-red-6));
+ outline-offset: rem(4px);
+ border-radius: rem(4px);
+ }
+}
+
+.active {
+ background-color: light-dark(
+ var(--mantine-color-gray-2),
+ var(--mantine-color-dark-8)
+ );
+}
+
+.sidebar {
+ max-height: rem(700px);
+ width: rem(250px);
+ padding: var(--mantine-spacing-sm);
+ display: flex;
+ flex-direction: column;
+ border-right: rem(1px) solid
+ light-dark(var(--mantine-color-gray-3), var(--mantine-color-dark-4));
+}
+
+.sidebarFlex {
+ display: flex;
+}
+
+.sidebarMain {
+ flex: 1;
+}
+
+.sidebarRightSection {
+ flex: 1;
+ padding: rem(16px) rem(40px);
+}
diff --git a/apps/client/src/features/page-history/components/history-editor.tsx b/apps/client/src/features/page-history/components/history-editor.tsx
index 5fa8cf42..d071abc3 100644
--- a/apps/client/src/features/page-history/components/history-editor.tsx
+++ b/apps/client/src/features/page-history/components/history-editor.tsx
@@ -1,36 +1,203 @@
import "@/features/editor/styles/index.css";
-import React, { useEffect } from "react";
+import { useEffect } from "react";
import { EditorContent, useEditor } from "@tiptap/react";
import { mainExtensions } from "@/features/editor/extensions/extensions";
import { Title } from "@mantine/core";
-import classes from "./history.module.css";
+import { Decoration, DecorationSet } from "@tiptap/pm/view";
+import historyClasses from "./css/history.module.css";
+import { recreateTransform } from "@docmost/editor-ext";
+import { DOMSerializer, Node } from "@tiptap/pm/model";
+import { ChangeSet, simplifyChanges } from "@tiptap/pm/changeset";
+import { useAtom } from "jotai";
+import {
+ diffCountsAtom,
+ highlightChangesAtom,
+} from "@/features/page-history/atoms/history-atoms";
export interface HistoryEditorProps {
title: string;
content: any;
+ previousContent?: any;
}
-export function HistoryEditor({ title, content }: HistoryEditorProps) {
+export function HistoryEditor({
+ title,
+ content,
+ previousContent,
+}: HistoryEditorProps) {
+ const [highlightChanges] = useAtom(highlightChangesAtom);
+ const [, setDiffCounts] = useAtom(diffCountsAtom);
+
const editor = useEditor({
extensions: mainExtensions,
editable: false,
});
useEffect(() => {
- if (editor && content) {
+ if (!editor || !content) return;
+
+ let decorationSet = DecorationSet.empty;
+ let addedCount = 0;
+ let deletedCount = 0;
+
+ if (previousContent) {
+ try {
+ const schema = editor.schema;
+ const oldContent = Node.fromJSON(schema, previousContent);
+ const newContent = Node.fromJSON(schema, content);
+
+ const tr = recreateTransform(oldContent, newContent, {
+ complexSteps: false,
+ wordDiffs: true,
+ simplifyDiff: true,
+ });
+
+ const changeSet = ChangeSet.create(oldContent).addSteps(
+ tr.doc,
+ tr.mapping.maps,
+ [],
+ );
+ const changes = simplifyChanges(changeSet.changes, newContent);
+
+ editor.commands.setContent(content);
+
+ const specialNodeTypes = new Set([
+ "image",
+ "attachment",
+ "video",
+ "excalidraw",
+ "drawio",
+ "mermaid",
+ "mathBlock",
+ "mathInline",
+ "table",
+ "details",
+ "callout",
+ ]);
+
+ const decorations: Decoration[] = [];
+ let changeIndex = 0;
+
+ for (const change of changes) {
+ if (change.toB > change.fromB) {
+ changeIndex++;
+ const currentIndex = changeIndex;
+ let foundSpecialNode: { node: Node; pos: number } | null = null;
+ newContent.nodesBetween(change.fromB, change.toB, (node, pos) => {
+ if (specialNodeTypes.has(node.type.name)) {
+ const nodeEnd = pos + node.nodeSize;
+ if (change.fromB <= pos && change.toB >= nodeEnd) {
+ foundSpecialNode = { node, pos };
+ return false;
+ }
+ }
+ });
+
+ if (foundSpecialNode) {
+ const nodeEnd =
+ foundSpecialNode.pos + foundSpecialNode.node.nodeSize;
+ decorations.push(
+ Decoration.node(foundSpecialNode.pos, nodeEnd, {
+ class: "history-diff-node-added",
+ "data-diff-index": String(currentIndex),
+ }),
+ );
+ } else {
+ decorations.push(
+ Decoration.inline(change.fromB, change.toB, {
+ class: "history-diff-added",
+ "data-diff-index": String(currentIndex),
+ }),
+ );
+ }
+ addedCount += 1;
+ }
+ if (change.toA > change.fromA) {
+ changeIndex++;
+ const currentIndex = changeIndex;
+ let foundDeletedNode: { node: Node; pos: number } | null = null;
+ oldContent.nodesBetween(change.fromA, change.toA, (node, pos) => {
+ if (specialNodeTypes.has(node.type.name)) {
+ const nodeEnd = pos + node.nodeSize;
+ if (change.fromA <= pos && change.toA >= nodeEnd) {
+ foundDeletedNode = { node, pos };
+ return false;
+ }
+ }
+ });
+
+ if (foundDeletedNode) {
+ decorations.push(
+ Decoration.widget(change.fromB, () => {
+ const wrapper = document.createElement("div");
+ wrapper.className = "history-diff-node-deleted";
+ wrapper.setAttribute("data-diff-index", String(currentIndex));
+ const serializer = DOMSerializer.fromSchema(schema);
+ const dom = serializer.serializeNode(foundDeletedNode!.node);
+ wrapper.appendChild(dom);
+ return wrapper;
+ }),
+ );
+ } else {
+ const deletedText = oldContent.textBetween(
+ change.fromA,
+ change.toA,
+ "",
+ );
+ if (deletedText) {
+ decorations.push(
+ Decoration.widget(change.fromB, () => {
+ const span = document.createElement("span");
+ span.className = "history-diff-deleted";
+ span.setAttribute("data-diff-index", String(currentIndex));
+ span.textContent = deletedText;
+ return span;
+ }),
+ );
+ }
+ }
+ deletedCount += 1;
+ }
+ }
+
+ decorationSet = DecorationSet.create(newContent, decorations);
+ } catch (e) {
+ console.error("History diff failed:", e);
+ editor.commands.setContent(content);
+ }
+ } else {
editor.commands.setContent(content);
}
- }, [title, content, editor]);
+
+ const total = addedCount + deletedCount;
+ // @ts-ignore
+ setDiffCounts({ added: addedCount, deleted: deletedCount, total });
+
+ editor.setOptions({
+ editorProps: {
+ ...editor.options.editorProps,
+ decorations: () =>
+ highlightChanges ? decorationSet : DecorationSet.empty,
+ },
+ });
+ }, [
+ title,
+ content,
+ editor,
+ previousContent,
+ highlightChanges,
+ setDiffCounts,
+ ]);
return (
- <>
-
-
{title}
-
- {editor && (
-
- )}
-
- >
+
+
{title}
+ {editor && (
+
+ )}
+
);
}
diff --git a/apps/client/src/features/page-history/components/history-item.tsx b/apps/client/src/features/page-history/components/history-item.tsx
index eb348bd6..cc56b191 100644
--- a/apps/client/src/features/page-history/components/history-item.tsx
+++ b/apps/client/src/features/page-history/components/history-item.tsx
@@ -1,44 +1,100 @@
-import { Text, Group, UnstyledButton } from "@mantine/core";
+import { Text, Group, UnstyledButton, Avatar, Tooltip } from "@mantine/core";
import { CustomAvatar } from "@/components/ui/custom-avatar.tsx";
import { formattedDate } from "@/lib/time";
-import classes from "./history.module.css";
+import classes from "./css/history.module.css";
import clsx from "clsx";
+import { IPageHistory } from "@/features/page-history/types/page.types";
+import { memo, useCallback } from "react";
+
+const MAX_VISIBLE_AVATARS = 5;
interface HistoryItemProps {
- historyItem: any;
- onSelect: (id: string) => void;
+ historyItem: IPageHistory;
+ index: number;
+ onSelect: (id: string, index: number) => void;
+ onHover?: (id: string, index: number) => void;
+ onHoverEnd?: () => void;
isActive: boolean;
}
-function HistoryItem({ historyItem, onSelect, isActive }: HistoryItemProps) {
+const HistoryItem = memo(function HistoryItem({
+ historyItem,
+ index,
+ onSelect,
+ onHover,
+ onHoverEnd,
+ isActive,
+}: HistoryItemProps) {
+ const handleClick = useCallback(() => {
+ onSelect(historyItem.id, index);
+ }, [onSelect, historyItem.id, index]);
+
+ const handleMouseEnter = useCallback(() => {
+ onHover?.(historyItem.id, index);
+ }, [onHover, historyItem.id, index]);
+
+ const contributors = historyItem.contributors;
+ const hasContributors = contributors && contributors.length > 0;
+
return (
onSelect(historyItem.id)}
+ onClick={handleClick}
+ onMouseEnter={handleMouseEnter}
+ onMouseLeave={onHoverEnd}
className={clsx(classes.history, { [classes.active]: isActive })}
>
-
-
-
- {formattedDate(new Date(historyItem.createdAt))}
-
+
{formattedDate(new Date(historyItem.createdAt))}
-
-
-
+
+ {hasContributors ? (
+ <>
+
+
+ {contributors.slice(0, MAX_VISIBLE_AVATARS).map((contributor) => (
+
+
+
+ ))}
+ {contributors.length > MAX_VISIBLE_AVATARS && (
+ (
+ {c.name}
+ ))}
+ >
+
+ +{contributors.length - MAX_VISIBLE_AVATARS}
+
+
+ )}
+
+
+ {contributors.length === 1 && (
- {historyItem.lastUpdatedBy.name}
+ {contributors[0].name}
-
-
-
+ )}
+ >
+ ) : (
+ <>
+
+
+ {historyItem.lastUpdatedBy?.name}
+
+ >
+ )}
);
-}
+});
export default HistoryItem;
diff --git a/apps/client/src/features/page-history/components/history-list.tsx b/apps/client/src/features/page-history/components/history-list.tsx
index 7b0d9ea2..4024901b 100644
--- a/apps/client/src/features/page-history/components/history-list.tsx
+++ b/apps/client/src/features/page-history/components/history-list.tsx
@@ -1,29 +1,27 @@
import {
usePageHistoryListQuery,
- usePageHistoryQuery,
+ prefetchPageHistory,
} from "@/features/page-history/queries/page-history-query";
import HistoryItem from "@/features/page-history/components/history-item";
import {
activeHistoryIdAtom,
+ activeHistoryPrevIdAtom,
historyAtoms,
} from "@/features/page-history/atoms/history-atoms";
-import { useAtom } from "jotai";
-import { useCallback, useEffect } from "react";
-import { Button, ScrollArea, Group, Divider, Text } from "@mantine/core";
+import { useAtom, useSetAtom } from "jotai";
+import { useCallback, useEffect, useMemo, useRef } from "react";
import {
- pageEditorAtom,
- titleEditorAtom,
-} from "@/features/editor/atoms/editor-atoms";
-import { modals } from "@mantine/modals";
-import { notifications } from "@mantine/notifications";
+ Button,
+ ScrollArea,
+ Group,
+ Divider,
+ Loader,
+ Center,
+} from "@mantine/core";
import { useTranslation } from "react-i18next";
-import { useSpaceAbility } from "@/features/space/permissions/use-space-ability.ts";
-import { useSpaceQuery } from "@/features/space/queries/space-query.ts";
-import { useParams } from "react-router-dom";
-import {
- SpaceCaslAction,
- SpaceCaslSubject,
-} from "@/features/space/permissions/permissions.type.ts";
+import { useHistoryRestore } from "@/features/page-history/hooks";
+
+const PREFETCH_DELAY_MS = 150;
interface Props {
pageId: string;
@@ -32,62 +30,89 @@ interface Props {
function HistoryList({ pageId }: Props) {
const { t } = useTranslation();
const [activeHistoryId, setActiveHistoryId] = useAtom(activeHistoryIdAtom);
+ const setActiveHistoryPrevId = useSetAtom(activeHistoryPrevIdAtom);
+ const setHistoryModalOpen = useSetAtom(historyAtoms);
+
const {
- data: pageHistoryList,
+ data: pageHistoryData,
isLoading,
isError,
+ fetchNextPage,
+ hasNextPage,
+ isFetchingNextPage,
} = usePageHistoryListQuery(pageId);
- const { data: activeHistoryData } = usePageHistoryQuery(activeHistoryId);
- const [mainEditor] = useAtom(pageEditorAtom);
- const [mainEditorTitle] = useAtom(titleEditorAtom);
- const [, setHistoryModalOpen] = useAtom(historyAtoms);
+ const historyItems = useMemo(
+ () => pageHistoryData?.pages.flatMap((page) => page.items) ?? [],
+ [pageHistoryData],
+ );
- const { spaceSlug } = useParams();
- const { data: space } = useSpaceQuery(spaceSlug);
- const spaceRules = space?.membership?.permissions;
- const spaceAbility = useSpaceAbility(spaceRules);
+ const loadMoreRef = useRef(null);
+ const prefetchTimeoutRef = useRef | null>(null);
- const confirmModal = () =>
- modals.openConfirmModal({
- title: t("Please confirm your action"),
- children: (
-
- {t(
- "Are you sure you want to restore this version? Any changes not versioned will be lost.",
- )}
-
- ),
- labels: { confirm: t("Confirm"), cancel: t("Cancel") },
- onConfirm: handleRestore,
- });
+ const { canRestore, confirmRestore } = useHistoryRestore();
- const handleRestore = useCallback(() => {
- if (activeHistoryData) {
- mainEditorTitle
- .chain()
- .clearContent()
- .setContent(activeHistoryData.title, { emitUpdate: true })
- .run();
- mainEditor
- .chain()
- .clearContent()
- .setContent(activeHistoryData.content)
- .run();
- setHistoryModalOpen(false);
- notifications.show({ message: t("Successfully restored") });
+ const clearPrefetchTimeout = useCallback(() => {
+ if (prefetchTimeoutRef.current) {
+ clearTimeout(prefetchTimeoutRef.current);
+ prefetchTimeoutRef.current = null;
}
- }, [activeHistoryData]);
+ }, []);
+
+ const handleHover = useCallback(
+ (historyId: string, index: number) => {
+ clearPrefetchTimeout();
+ prefetchTimeoutRef.current = setTimeout(() => {
+ prefetchPageHistory(historyId);
+ const prevId = historyItems[index + 1]?.id;
+ if (prevId) {
+ prefetchPageHistory(prevId);
+ }
+ }, PREFETCH_DELAY_MS);
+ },
+ [clearPrefetchTimeout, historyItems],
+ );
useEffect(() => {
- if (
- pageHistoryList &&
- pageHistoryList.items.length > 0 &&
- !activeHistoryId
- ) {
- setActiveHistoryId(pageHistoryList.items[0].id);
+ return clearPrefetchTimeout;
+ }, [clearPrefetchTimeout]);
+
+ const handleSelect = useCallback(
+ (id: string, index: number) => {
+ setActiveHistoryId(id);
+ setActiveHistoryPrevId(historyItems[index + 1]?.id ?? "");
+ },
+ [historyItems, setActiveHistoryId, setActiveHistoryPrevId],
+ );
+
+ useEffect(() => {
+ if (historyItems.length > 0 && !activeHistoryId) {
+ setActiveHistoryId(historyItems[0].id);
+ setActiveHistoryPrevId(historyItems[1]?.id ?? "");
}
- }, [pageHistoryList]);
+ }, [
+ historyItems,
+ activeHistoryId,
+ setActiveHistoryId,
+ setActiveHistoryPrevId,
+ ]);
+
+ useEffect(() => {
+ const sentinel = loadMoreRef.current;
+ if (!sentinel || !hasNextPage) return;
+
+ const observer = new IntersectionObserver(
+ (entries) => {
+ if (entries[0].isIntersecting && !isFetchingNextPage) {
+ fetchNextPage();
+ }
+ },
+ { threshold: 0.1 },
+ );
+
+ observer.observe(sentinel);
+ return () => observer.disconnect();
+ }, [fetchNextPage, hasNextPage, isFetchingNextPage]);
if (isLoading) {
return <>>;
@@ -97,34 +122,36 @@ function HistoryList({ pageId }: Props) {
return {t("Error loading page history.")}
;
}
- if (!pageHistoryList || pageHistoryList.items.length === 0) {
+ if (historyItems.length === 0) {
return <>{t("No page history saved yet.")}>;
}
return (
- {pageHistoryList &&
- pageHistoryList.items.map((historyItem, index) => (
-
- ))}
+ {historyItems.map((historyItem, index) => (
+
+ ))}
+ {hasNextPage &&
}
+ {isFetchingNextPage && (
+
+
+
+ )}
- {spaceAbility.cannot(
- SpaceCaslAction.Manage,
- SpaceCaslSubject.Page,
- ) ? null : (
+ {canRestore && (
<>
-
- {t("Restore")}
-
{t("Cancel")}
+
+ {t("Restore")}
+
>
)}
diff --git a/apps/client/src/features/page-history/components/history-modal-body.tsx b/apps/client/src/features/page-history/components/history-modal-body.tsx
index 199601fc..5673c82a 100644
--- a/apps/client/src/features/page-history/components/history-modal-body.tsx
+++ b/apps/client/src/features/page-history/components/history-modal-body.tsx
@@ -1,21 +1,45 @@
-import { ScrollArea } from "@mantine/core";
+import {
+ ActionIcon,
+ Group,
+ Paper,
+ ScrollArea,
+ Switch,
+ Text,
+} from "@mantine/core";
import HistoryList from "@/features/page-history/components/history-list";
-import classes from "./history.module.css";
-import { useAtom } from "jotai";
-import { activeHistoryIdAtom } from "@/features/page-history/atoms/history-atoms";
+import classes from "./css/history.module.css";
+import { useAtom, useAtomValue } from "jotai";
+import {
+ activeHistoryIdAtom,
+ activeHistoryPrevIdAtom,
+ diffCountsAtom,
+ highlightChangesAtom,
+} from "@/features/page-history/atoms/history-atoms";
import HistoryView from "@/features/page-history/components/history-view";
-import { useEffect } from "react";
+import { useRef } from "react";
+import { IconChevronUp, IconChevronDown } from "@tabler/icons-react";
+import { useTranslation } from "react-i18next";
+import {
+ useDiffNavigation,
+ useHistoryReset,
+} from "@/features/page-history/hooks";
interface Props {
pageId: string;
}
export default function HistoryModalBody({ pageId }: Props) {
- const [activeHistoryId, setActiveHistoryId] = useAtom(activeHistoryIdAtom);
+ const { t } = useTranslation();
+ const scrollViewportRef = useRef
(null);
- useEffect(() => {
- setActiveHistoryId("");
- }, [pageId]);
+ const activeHistoryId = useAtomValue(activeHistoryIdAtom);
+ const activeHistoryPrevId = useAtomValue(activeHistoryPrevIdAtom);
+ const [highlightChanges, setHighlightChanges] = useAtom(highlightChangesAtom);
+ const diffCounts = useAtomValue(diffCountsAtom);
+
+ useHistoryReset(pageId);
+ const { currentChangeIndex, handlePrevChange, handleNextChange } =
+ useDiffNavigation(scrollViewportRef);
return (
@@ -25,11 +49,63 @@ export default function HistoryModalBody({ pageId }: Props) {
-
-
- {activeHistoryId && }
-
-
+
+
+
+ {activeHistoryId && }
+
+
+
+ {activeHistoryId && activeHistoryPrevId && (
+
+
+ setHighlightChanges(e.currentTarget.checked)}
+ styles={{ label: { userSelect: "none", whiteSpace: "nowrap" } }}
+ />
+ {highlightChanges && diffCounts && diffCounts.total > 0 && (
+
+
+ {currentChangeIndex} of {diffCounts.total}
+
+
+
+
+
+
+
+
+ )}
+
+
+ )}
+
);
}
diff --git a/apps/client/src/features/page-history/components/history-modal-mobile.tsx b/apps/client/src/features/page-history/components/history-modal-mobile.tsx
new file mode 100644
index 00000000..b73695da
--- /dev/null
+++ b/apps/client/src/features/page-history/components/history-modal-mobile.tsx
@@ -0,0 +1,215 @@
+import {
+ ActionIcon,
+ Box,
+ Button,
+ Group,
+ Paper,
+ ScrollArea,
+ Select,
+ Switch,
+ Text,
+} from "@mantine/core";
+import { useAtom, useAtomValue, useSetAtom } from "jotai";
+import {
+ activeHistoryIdAtom,
+ activeHistoryPrevIdAtom,
+ diffCountsAtom,
+ highlightChangesAtom,
+ historyAtoms,
+} from "@/features/page-history/atoms/history-atoms";
+import HistoryView from "@/features/page-history/components/history-view";
+import { useCallback, useEffect, useMemo, useRef } from "react";
+import { IconCheck, IconChevronDown, IconChevronUp } from "@tabler/icons-react";
+import { useTranslation } from "react-i18next";
+import { usePageHistoryListQuery } from "@/features/page-history/queries/page-history-query";
+import { formattedDate } from "@/lib/time";
+import {
+ useDiffNavigation,
+ useHistoryReset,
+ useHistoryRestore,
+} from "@/features/page-history/hooks";
+import classes from "./css/history-mobile.module.css";
+
+interface Props {
+ pageId: string;
+ pageTitle?: string;
+}
+
+export default function HistoryModalMobile({ pageId, pageTitle }: Props) {
+ const { t } = useTranslation();
+
+ const [activeHistoryId, setActiveHistoryId] = useAtom(activeHistoryIdAtom);
+ const setActiveHistoryPrevId = useSetAtom(activeHistoryPrevIdAtom);
+ const [highlightChanges, setHighlightChanges] = useAtom(highlightChangesAtom);
+ const diffCounts = useAtomValue(diffCountsAtom);
+ const setHistoryModalOpen = useSetAtom(historyAtoms);
+
+ const scrollViewportRef = useRef(null);
+ const dropdownViewportRef = useRef(null);
+
+ const {
+ data: pageHistoryData,
+ isLoading,
+ fetchNextPage,
+ hasNextPage,
+ isFetchingNextPage,
+ } = usePageHistoryListQuery(pageId);
+
+ const historyItems = useMemo(
+ () => pageHistoryData?.pages.flatMap((page) => page.items) ?? [],
+ [pageHistoryData],
+ );
+
+ const selectData = useMemo(
+ () =>
+ historyItems.map((item) => {
+ const contributors = item.contributors;
+ const hasContributors = contributors && contributors.length > 0;
+ const names = hasContributors
+ ? contributors.map((c) => c.name).join(", ")
+ : item.lastUpdatedBy?.name;
+ return {
+ value: item.id,
+ label: formattedDate(new Date(item.createdAt)),
+ userName: names,
+ };
+ }),
+ [historyItems],
+ );
+
+ useHistoryReset(pageId);
+ const { canRestore, confirmRestore } = useHistoryRestore();
+ const { currentChangeIndex, handlePrevChange, handleNextChange } =
+ useDiffNavigation(scrollViewportRef);
+
+ useEffect(() => {
+ if (historyItems.length > 0 && !activeHistoryId) {
+ setActiveHistoryId(historyItems[0].id);
+ setActiveHistoryPrevId(historyItems[1]?.id ?? "");
+ }
+ }, [
+ historyItems,
+ activeHistoryId,
+ setActiveHistoryId,
+ setActiveHistoryPrevId,
+ ]);
+
+ const handleDropdownScroll = useCallback(() => {
+ const viewport = dropdownViewportRef.current;
+ if (!viewport || !hasNextPage || isFetchingNextPage) return;
+
+ const { scrollTop, scrollHeight, clientHeight } = viewport;
+ const isNearBottom = scrollTop + clientHeight >= scrollHeight - 50;
+
+ if (isNearBottom) {
+ fetchNextPage();
+ }
+ }, [fetchNextPage, hasNextPage, isFetchingNextPage]);
+
+ const handleSelectVersion = useCallback(
+ (value: string | null) => {
+ if (!value) return;
+ const index = historyItems.findIndex((item) => item.id === value);
+ if (index >= 0) {
+ setActiveHistoryId(value);
+ setActiveHistoryPrevId(historyItems[index + 1]?.id ?? "");
+ }
+ },
+ [historyItems, setActiveHistoryId, setActiveHistoryPrevId],
+ );
+
+ if (isLoading) {
+ return null;
+ }
+
+ return (
+
+
+ (
+
+
+ {option.label}
+
+ {(option as { userName?: string }).userName}
+
+
+ {checked && }
+
+ )}
+ comboboxProps={{ withinPortal: false }}
+ scrollAreaProps={{
+ viewportRef: dropdownViewportRef,
+ onScrollPositionChange: handleDropdownScroll,
+ }}
+ />
+
+
+
+
+ {activeHistoryId && }
+
+
+
+ {canRestore && (
+
+ setHistoryModalOpen(false)}>
+ {t("Cancel")}
+
+ {t("Restore")}
+
+ )}
+
+ {activeHistoryId && (
+
+
+ setHighlightChanges(e.currentTarget.checked)}
+ size="sm"
+ styles={{ label: { userSelect: "none", whiteSpace: "nowrap" } }}
+ />
+ {highlightChanges && diffCounts && diffCounts.total > 0 && (
+
+
+ {currentChangeIndex} of {diffCounts.total}
+
+
+
+
+
+
+
+
+ )}
+
+
+ )}
+
+ );
+}
diff --git a/apps/client/src/features/page-history/components/history-modal.tsx b/apps/client/src/features/page-history/components/history-modal.tsx
index 2596ff68..dfd43cf1 100644
--- a/apps/client/src/features/page-history/components/history-modal.tsx
+++ b/apps/client/src/features/page-history/components/history-modal.tsx
@@ -2,21 +2,26 @@ import { Modal, Text } from "@mantine/core";
import { useAtom } from "jotai";
import { historyAtoms } from "@/features/page-history/atoms/history-atoms";
import HistoryModalBody from "@/features/page-history/components/history-modal-body";
+import HistoryModalMobile from "@/features/page-history/components/history-modal-mobile";
import { useTranslation } from "react-i18next";
+import { useMediaQuery } from "@mantine/hooks";
interface Props {
pageId: string;
+ pageTitle?: string;
}
-export default function HistoryModal({ pageId }: Props) {
+
+export default function HistoryModal({ pageId, pageTitle }: Props) {
const { t } = useTranslation();
const [isModalOpen, setModalOpen] = useAtom(historyAtoms);
+ const isMobile = useMediaQuery("(max-width: 800px)");
- return (
- <>
+ if (isMobile) {
+ return (
setModalOpen(false)}
+ fullScreen
>
@@ -28,11 +33,37 @@ export default function HistoryModal({ pageId }: Props) {
-
-
+
+
- >
+ );
+ }
+
+ return (
+ setModalOpen(false)}
+ >
+
+
+
+
+
+ {t("Page history")}
+
+
+
+
+
+
+
+
+
);
}
diff --git a/apps/client/src/features/page-history/components/history-view.tsx b/apps/client/src/features/page-history/components/history-view.tsx
index 10693428..ed8a41f9 100644
--- a/apps/client/src/features/page-history/components/history-view.tsx
+++ b/apps/client/src/features/page-history/components/history-view.tsx
@@ -1,29 +1,44 @@
import { usePageHistoryQuery } from "@/features/page-history/queries/page-history-query";
import { HistoryEditor } from "@/features/page-history/components/history-editor";
import { useTranslation } from "react-i18next";
+import { useAtomValue } from "jotai";
+import {
+ activeHistoryIdAtom,
+ activeHistoryPrevIdAtom,
+} from "@/features/page-history/atoms/history-atoms";
-interface HistoryProps {
- historyId: string;
-}
-
-function HistoryView({ historyId }: HistoryProps) {
+function HistoryView() {
const { t } = useTranslation();
- const { data, isLoading, isError } = usePageHistoryQuery(historyId);
+ const historyId = useAtomValue(activeHistoryIdAtom);
+ const prevHistoryId = useAtomValue(activeHistoryPrevIdAtom);
- if (isLoading) {
+ const {
+ data,
+ isLoading: isLoadingCurrent,
+ isError: isErrorCurrent,
+ } = usePageHistoryQuery(historyId);
+ const {
+ data: prevData,
+ isLoading: isLoadingPrev,
+ isError: isErrorPrev,
+ } = usePageHistoryQuery(prevHistoryId);
+
+ if (isLoadingCurrent || isLoadingPrev) {
return <>>;
}
- if (isError || !data) {
+ if (isErrorCurrent || !data) {
return {t("Error fetching page data.")}
;
}
return (
- data && (
-
-
-
- )
+
+
+
);
}
diff --git a/apps/client/src/features/page-history/components/history.module.css b/apps/client/src/features/page-history/components/history.module.css
deleted file mode 100644
index 66415146..00000000
--- a/apps/client/src/features/page-history/components/history.module.css
+++ /dev/null
@@ -1,49 +0,0 @@
-.history {
- display: block;
- width: 100%;
- padding: var(--mantine-spacing-md);
- color: light-dark(var(--mantine-color-black), var(--mantine-color-dark-0));
-
- @mixin hover {
- background-color: light-dark(
- var(--mantine-color-gray-2),
- var(--mantine-color-dark-8)
- );
- }
-}
-
-.historyEditor {
- :global(.ProseMirror) {
- padding: 0 !important;
- }
-}
-
-.active {
- background-color: light-dark(
- var(--mantine-color-gray-2),
- var(--mantine-color-dark-8)
- );
-}
-
-.sidebar {
- max-height: rem(700px);
- width: rem(250px);
- padding: var(--mantine-spacing-sm);
- display: flex;
- flex-direction: column;
- border-right: rem(1px) solid
- light-dark(var(--mantine-color-gray-3), var(--mantine-color-dark-4));
-}
-
-.sidebarFlex {
- display: flex;
-}
-
-.sidebarMain {
- flex: 1;
-}
-
-.sidebarRightSection {
- flex: 1;
- padding: rem(16px) rem(40px);
-}
diff --git a/apps/client/src/features/page-history/hooks/index.ts b/apps/client/src/features/page-history/hooks/index.ts
new file mode 100644
index 00000000..b69ae325
--- /dev/null
+++ b/apps/client/src/features/page-history/hooks/index.ts
@@ -0,0 +1,3 @@
+export { useDiffNavigation } from "./use-diff-navigation";
+export { useHistoryRestore } from "./use-history-restore";
+export { useHistoryReset } from "./use-history-reset";
diff --git a/apps/client/src/features/page-history/hooks/use-diff-navigation.ts b/apps/client/src/features/page-history/hooks/use-diff-navigation.ts
new file mode 100644
index 00000000..3a01977a
--- /dev/null
+++ b/apps/client/src/features/page-history/hooks/use-diff-navigation.ts
@@ -0,0 +1,58 @@
+import { useAtomValue } from "jotai";
+import { RefObject, useCallback, useEffect, useState } from "react";
+import { diffCountsAtom } from "@/features/page-history/atoms/history-atoms";
+
+/**
+ * Manages navigation between diff changes in the history view.
+ * Provides prev/next handlers and auto-scrolls to the current change.
+ */
+export function useDiffNavigation(
+ scrollViewportRef: RefObject,
+) {
+ const diffCounts = useAtomValue(diffCountsAtom);
+ const [currentChangeIndex, setCurrentChangeIndex] = useState(0);
+
+ const scrollToChangeIndex = useCallback(
+ (index: number) => {
+ const viewport = scrollViewportRef.current;
+ if (!viewport || index < 1) return;
+
+ const element = viewport.querySelector(`[data-diff-index="${index}"]`);
+ if (element instanceof HTMLElement) {
+ const elementTop = element.offsetTop;
+ const viewportHeight = viewport.clientHeight;
+ const scrollTarget =
+ elementTop - viewportHeight / 2 + element.offsetHeight / 2;
+ viewport.scrollTo({ top: scrollTarget, behavior: "smooth" });
+ }
+ },
+ [scrollViewportRef],
+ );
+
+ useEffect(() => {
+ if (diffCounts && diffCounts.total > 0) {
+ setCurrentChangeIndex(1);
+ requestAnimationFrame(() => scrollToChangeIndex(1));
+ } else {
+ setCurrentChangeIndex(0);
+ }
+ }, [diffCounts, scrollToChangeIndex]);
+
+ const handlePrevChange = useCallback(() => {
+ if (!diffCounts || diffCounts.total === 0) return;
+ const newIndex =
+ currentChangeIndex <= 1 ? diffCounts.total : currentChangeIndex - 1;
+ setCurrentChangeIndex(newIndex);
+ scrollToChangeIndex(newIndex);
+ }, [diffCounts, currentChangeIndex, scrollToChangeIndex]);
+
+ const handleNextChange = useCallback(() => {
+ if (!diffCounts || diffCounts.total === 0) return;
+ const newIndex =
+ currentChangeIndex >= diffCounts.total ? 1 : currentChangeIndex + 1;
+ setCurrentChangeIndex(newIndex);
+ scrollToChangeIndex(newIndex);
+ }, [diffCounts, currentChangeIndex, scrollToChangeIndex]);
+
+ return { currentChangeIndex, handlePrevChange, handleNextChange };
+}
diff --git a/apps/client/src/features/page-history/hooks/use-history-reset.ts b/apps/client/src/features/page-history/hooks/use-history-reset.ts
new file mode 100644
index 00000000..15ae0587
--- /dev/null
+++ b/apps/client/src/features/page-history/hooks/use-history-reset.ts
@@ -0,0 +1,24 @@
+import { useAtom } from "jotai";
+import { useEffect } from "react";
+import {
+ activeHistoryIdAtom,
+ activeHistoryPrevIdAtom,
+ diffCountsAtom,
+} from "@/features/page-history/atoms/history-atoms";
+
+/**
+ * Resets history state when pageId changes.
+ * Clears active selection and diff counts.
+ */
+export function useHistoryReset(pageId: string) {
+ const [, setActiveHistoryId] = useAtom(activeHistoryIdAtom);
+ const [, setActiveHistoryPrevId] = useAtom(activeHistoryPrevIdAtom);
+ const [, setDiffCounts] = useAtom(diffCountsAtom);
+
+ useEffect(() => {
+ setActiveHistoryId("");
+ setActiveHistoryPrevId("");
+ // @ts-ignore
+ setDiffCounts(null);
+ }, [pageId, setActiveHistoryId, setActiveHistoryPrevId, setDiffCounts]);
+}
diff --git a/apps/client/src/features/page-history/hooks/use-history-restore.tsx b/apps/client/src/features/page-history/hooks/use-history-restore.tsx
new file mode 100644
index 00000000..fbeb4e6e
--- /dev/null
+++ b/apps/client/src/features/page-history/hooks/use-history-restore.tsx
@@ -0,0 +1,78 @@
+import { useAtom, useAtomValue, useSetAtom } from "jotai";
+import { useCallback } from "react";
+import { useTranslation } from "react-i18next";
+import { Text } from "@mantine/core";
+import { modals } from "@mantine/modals";
+import { notifications } from "@mantine/notifications";
+import { useParams } from "react-router-dom";
+import {
+ activeHistoryIdAtom,
+ historyAtoms,
+} from "@/features/page-history/atoms/history-atoms";
+import { usePageHistoryQuery } from "@/features/page-history/queries/page-history-query";
+import {
+ pageEditorAtom,
+ titleEditorAtom,
+} from "@/features/editor/atoms/editor-atoms";
+import { useSpaceAbility } from "@/features/space/permissions/use-space-ability";
+import { useSpaceQuery } from "@/features/space/queries/space-query";
+import {
+ SpaceCaslAction,
+ SpaceCaslSubject,
+} from "@/features/space/permissions/permissions.type";
+
+export function useHistoryRestore() {
+ const { t } = useTranslation();
+
+ const activeHistoryId = useAtomValue(activeHistoryIdAtom);
+ const { data: activeHistoryData } = usePageHistoryQuery(activeHistoryId);
+
+ const mainEditor = useAtomValue(pageEditorAtom);
+ const mainEditorTitle = useAtomValue(titleEditorAtom);
+ const setHistoryModalOpen = useSetAtom(historyAtoms);
+
+ const { spaceSlug } = useParams();
+ const { data: space } = useSpaceQuery(spaceSlug);
+ const spaceAbility = useSpaceAbility(space?.membership?.permissions);
+
+ const canRestore = spaceAbility.can(
+ SpaceCaslAction.Manage,
+ SpaceCaslSubject.Page,
+ );
+
+ const handleRestore = useCallback(() => {
+ if (!activeHistoryData) return;
+
+ mainEditorTitle
+ .chain()
+ .clearContent()
+ .setContent(activeHistoryData.title, { emitUpdate: true })
+ .run();
+
+ mainEditor
+ .chain()
+ .clearContent()
+ .setContent(activeHistoryData.content)
+ .run();
+
+ setHistoryModalOpen(false);
+ notifications.show({ message: t("Successfully restored") });
+ }, [activeHistoryData, mainEditor, mainEditorTitle, setHistoryModalOpen, t]);
+
+ const confirmRestore = useCallback(() => {
+ modals.openConfirmModal({
+ title: t("Please confirm your action"),
+ children: (
+
+ {t(
+ "Are you sure you want to restore this version? Any changes not versioned will be lost.",
+ )}
+
+ ),
+ labels: { confirm: t("Confirm"), cancel: t("Cancel") },
+ onConfirm: handleRestore,
+ });
+ }, [t, handleRestore]);
+
+ return { canRestore, confirmRestore };
+}
diff --git a/apps/client/src/features/page-history/queries/page-history-query.ts b/apps/client/src/features/page-history/queries/page-history-query.ts
index 32c1dafc..0fbfc6c9 100644
--- a/apps/client/src/features/page-history/queries/page-history-query.ts
+++ b/apps/client/src/features/page-history/queries/page-history-query.ts
@@ -1,19 +1,38 @@
-import { useQuery, UseQueryResult } from "@tanstack/react-query";
+import {
+ InfiniteData,
+ useInfiniteQuery,
+ UseInfiniteQueryResult,
+ useQuery,
+ UseQueryResult,
+} from "@tanstack/react-query";
import {
getPageHistoryById,
getPageHistoryList,
} from "@/features/page-history/services/page-history-service";
import { IPageHistory } from "@/features/page-history/types/page.types";
import { IPagination } from "@/lib/types.ts";
+import { queryClient } from "@/main";
+
+const HISTORY_STALE_TIME = 60 * 60 * 1000;
+
+export function prefetchPageHistory(historyId: string) {
+ return queryClient.prefetchQuery({
+ queryKey: ["page-history", historyId],
+ queryFn: () => getPageHistoryById(historyId),
+ staleTime: HISTORY_STALE_TIME,
+ });
+}
export function usePageHistoryListQuery(
pageId: string,
-): UseQueryResult, Error> {
- return useQuery({
+): UseInfiniteQueryResult, unknown>> {
+ return useInfiniteQuery({
queryKey: ["page-history-list", pageId],
- queryFn: () => getPageHistoryList(pageId),
+ queryFn: ({ pageParam }) => getPageHistoryList(pageId, pageParam),
enabled: !!pageId,
gcTime: 0,
+ initialPageParam: undefined,
+ getNextPageParam: (lastPage) => lastPage.meta?.nextCursor ?? undefined,
});
}
@@ -24,6 +43,6 @@ export function usePageHistoryQuery(
queryKey: ["page-history", historyId],
queryFn: () => getPageHistoryById(historyId),
enabled: !!historyId,
- staleTime: 10 * 60 * 1000,
+ staleTime: HISTORY_STALE_TIME,
});
}
diff --git a/apps/client/src/features/page-history/services/page-history-service.ts b/apps/client/src/features/page-history/services/page-history-service.ts
index 329ad70d..0e38118b 100644
--- a/apps/client/src/features/page-history/services/page-history-service.ts
+++ b/apps/client/src/features/page-history/services/page-history-service.ts
@@ -4,9 +4,11 @@ import { IPagination } from "@/lib/types.ts";
export async function getPageHistoryList(
pageId: string,
+ cursor?: string,
): Promise> {
const req = await api.post("/pages/history", {
pageId,
+ cursor,
});
return req.data;
}
diff --git a/apps/client/src/features/page-history/types/page.types.ts b/apps/client/src/features/page-history/types/page.types.ts
index 98a5b9d7..45b2e1f8 100644
--- a/apps/client/src/features/page-history/types/page.types.ts
+++ b/apps/client/src/features/page-history/types/page.types.ts
@@ -18,4 +18,5 @@ export interface IPageHistory {
createdAt: string;
updatedAt: string;
lastUpdatedBy: IPageHistoryUser;
+ contributors?: IPageHistoryUser[];
}
diff --git a/apps/client/src/features/page/components/header/page-header-menu.tsx b/apps/client/src/features/page/components/header/page-header-menu.tsx
index 9cd4362d..0561729c 100644
--- a/apps/client/src/features/page/components/header/page-header-menu.tsx
+++ b/apps/client/src/features/page/components/header/page-header-menu.tsx
@@ -17,7 +17,8 @@ import React, { useEffect, useRef, useState } from "react";
import useToggleAside from "@/hooks/use-toggle-aside.tsx";
import { useAtom, useAtomValue } from "jotai";
import { historyAtoms } from "@/features/page-history/atoms/history-atoms.ts";
-import { useClipboard, useDisclosure, useHotkeys } from "@mantine/hooks";
+import { useDisclosure, useHotkeys } from "@mantine/hooks";
+import { useClipboard } from "@/hooks/use-clipboard";
import { useParams } from "react-router-dom";
import { usePageQuery } from "@/features/page/queries/page-query.ts";
import { buildPageUrl } from "@/features/page/page.utils.ts";
@@ -78,8 +79,8 @@ export default function PageHeaderMenu({ readOnly }: PageHeaderMenuProps) {
toggleAside("comments")}
>
@@ -88,8 +89,8 @@ export default function PageHeaderMenu({ readOnly }: PageHeaderMenuProps) {
toggleAside("toc")}
>
@@ -165,7 +166,7 @@ function PageActionMenu({ readOnly }: PageActionMenuProps) {
arrowPosition="center"
>
-
+
diff --git a/apps/client/src/features/page/components/page-import-modal.tsx b/apps/client/src/features/page/components/page-import-modal.tsx
index be0264b6..c805edba 100644
--- a/apps/client/src/features/page/components/page-import-modal.tsx
+++ b/apps/client/src/features/page/components/page-import-modal.tsx
@@ -11,6 +11,7 @@ import {
IconBrandNotion,
IconCheck,
IconFileCode,
+ IconFileTypeDocx,
IconFileTypeZip,
IconMarkdown,
IconX,
@@ -86,11 +87,13 @@ function ImportFormatSelection({ spaceId, onClose }: ImportFormatSelection) {
const markdownFileRef = useRef<() => void>(null);
const htmlFileRef = useRef<() => void>(null);
+ const docxFileRef = useRef<() => void>(null);
const notionFileRef = useRef<() => void>(null);
const confluenceFileRef = useRef<() => void>(null);
const zipFileRef = useRef<() => void>(null);
const canUseConfluence = isCloud() || workspace?.hasLicenseKey;
+ const canUseDocx = isCloud() || workspace?.hasLicenseKey;
const handleZipUpload = async (selectedFile: File, source: string) => {
if (!selectedFile) {
@@ -265,6 +268,7 @@ function ImportFormatSelection({ spaceId, onClose }: ImportFormatSelection) {
// Reset file inputs after successful upload
if (markdownFileRef.current) markdownFileRef.current();
if (htmlFileRef.current) htmlFileRef.current();
+ if (docxFileRef.current) docxFileRef.current();
const pageCountText =
pageCount === 1 ? `1 ${t("page")}` : `${pageCount} ${t("pages")}`;
@@ -321,6 +325,30 @@ function ImportFormatSelection({ spaceId, onClose }: ImportFormatSelection) {
)}
+
+ {(props) => (
+
+ }
+ {...props}
+ >
+ Word (DOCX)
+
+
+ )}
+
+
handleZipUpload(file, "notion")}
accept="application/zip"
diff --git a/apps/client/src/features/page/tree/components/space-tree.tsx b/apps/client/src/features/page/tree/components/space-tree.tsx
index d889a89e..0103c93c 100644
--- a/apps/client/src/features/page/tree/components/space-tree.tsx
+++ b/apps/client/src/features/page/tree/components/space-tree.tsx
@@ -16,7 +16,7 @@ import {
import { useEffect, useRef, useState } from "react";
import { Link, useParams } from "react-router-dom";
import classes from "@/features/page/tree/styles/tree.module.css";
-import { ActionIcon, Box, Menu, rem } from "@mantine/core";
+import { ActionIcon, Box, Menu, rem, Text } from "@mantine/core";
import {
IconArrowRight,
IconChevronDown,
@@ -54,11 +54,11 @@ import { IPage, SidebarPagesParams } from "@/features/page/types/page.types.ts";
import { queryClient } from "@/main.tsx";
import { OpenMap } from "react-arborist/dist/main/state/open-slice";
import {
- useClipboard,
useDisclosure,
useElementSize,
useMergedRef,
} from "@mantine/hooks";
+import { useClipboard } from "@/hooks/use-clipboard";
import { dfs } from "react-arborist/dist/module/utils";
import { useQueryEmit } from "@/features/websocket/use-query-emit.ts";
import { buildPageUrl } from "@/features/page/page.utils.ts";
@@ -82,6 +82,7 @@ interface SpaceTreeProps {
const openTreeNodesAtom = atom({});
export default function SpaceTree({ spaceId, readOnly }: SpaceTreeProps) {
+ const { t } = useTranslation();
const { pageSlug } = useParams();
const { data, setData, controllers } =
useTreeMutation>(spaceId);
@@ -106,10 +107,16 @@ export default function SpaceTree({ spaceId, readOnly }: SpaceTreeProps) {
}
}, sizeRef);
const [isDataLoaded, setIsDataLoaded] = useState(false);
+ const spaceIdRef = useRef(spaceId);
+ spaceIdRef.current = spaceId;
const { data: currentPage } = usePageQuery({
pageId: extractPageSlugId(pageSlug),
});
+ useEffect(() => {
+ setIsDataLoaded(false);
+ }, [spaceId]);
+
useEffect(() => {
if (hasNextPage && !isFetching) {
fetchNextPage();
@@ -130,12 +137,15 @@ export default function SpaceTree({ spaceId, readOnly }: SpaceTreeProps) {
}
// same space; append only missing roots
+ setIsDataLoaded(true);
return mergeRootTrees(prev, treeData);
});
}
- }, [pagesData, hasNextPage]);
+ }, [pagesData, hasNextPage, spaceId]);
useEffect(() => {
+ const effectSpaceId = spaceId;
+
const fetchData = async () => {
if (isDataLoaded && currentPage) {
// check if pageId node is present in the tree
@@ -149,6 +159,8 @@ export default function SpaceTree({ spaceId, readOnly }: SpaceTreeProps) {
if (!currentPage.id) return;
const ancestors = await getPageBreadcrumbs(currentPage.id);
+ if (spaceIdRef.current !== effectSpaceId) return;
+
if (ancestors && ancestors?.length > 1) {
let flatTreeItems = [...buildTree(ancestors)];
@@ -176,22 +188,22 @@ export default function SpaceTree({ spaceId, readOnly }: SpaceTreeProps) {
// Wait for all fetch operations to complete
Promise.all(fetchPromises).then(() => {
+ if (spaceIdRef.current !== effectSpaceId) return;
+
// build tree with children
const ancestorsTree = buildTreeWithChildren(flatTreeItems);
// child of root page we're attaching the built ancestors to
const rootChild = ancestorsTree[0];
- // attach built ancestors to tree
- const updatedTree = appendNodeChildren(
- data,
- rootChild.id,
- rootChild.children,
+ // attach built ancestors to tree using functional updater
+ // to avoid stale closure overwriting the current tree data
+ setData((currentData) =>
+ appendNodeChildren(currentData, rootChild.id, rootChild.children),
);
- setData(updatedTree);
setTimeout(() => {
// focus on node and open all parents
- treeApiRef.current.select(currentPage.id);
+ treeApiRef.current?.select(currentPage.id);
}, 100);
});
}
@@ -220,11 +232,18 @@ export default function SpaceTree({ spaceId, readOnly }: SpaceTreeProps) {
};
}, [setTreeApi]);
+ const filteredData = data.filter((node) => node?.spaceId === spaceId);
+
return (
+ {isDataLoaded && filteredData.length === 0 && (
+
+ {t("No pages yet")}
+
+ )}
{isRootReady && rootElement.current && (
node?.spaceId === spaceId)}
+ data={filteredData}
disableDrag={readOnly}
disableDrop={readOnly}
disableEdit={readOnly}
diff --git a/apps/client/src/features/search/components/search-control.tsx b/apps/client/src/features/search/components/search-control.tsx
index 3ae74da2..a98909b7 100644
--- a/apps/client/src/features/search/components/search-control.tsx
+++ b/apps/client/src/features/search/components/search-control.tsx
@@ -44,8 +44,8 @@ export function SearchMobileControl({ onSearch }: SearchMobileControlProps) {
return (
diff --git a/apps/client/src/features/search/components/search-spotlight-filters.tsx b/apps/client/src/features/search/components/search-spotlight-filters.tsx
index f19d413e..44f089f3 100644
--- a/apps/client/src/features/search/components/search-spotlight-filters.tsx
+++ b/apps/client/src/features/search/components/search-spotlight-filters.tsx
@@ -140,7 +140,7 @@ export function SearchSpotlightFilters({
onAskClick()}
- label={t("Ask AI")}
+ label={t("AI Answers")}
size="sm"
color="blue"
labelPosition="left"
@@ -279,7 +279,7 @@ export function SearchSpotlightFilters({
isAiMode &&
option.value === "attachment" && (
- {t("Ask AI not available for attachments")}
+ {t("AI Answers not available for attachments")}
)}
diff --git a/apps/client/src/features/search/queries/search-query.ts b/apps/client/src/features/search/queries/search-query.ts
index bc91dfac..59a05c86 100644
--- a/apps/client/src/features/search/queries/search-query.ts
+++ b/apps/client/src/features/search/queries/search-query.ts
@@ -24,13 +24,14 @@ export function usePageSearchQuery(
}
export function useSearchSuggestionsQuery(
- params: SearchSuggestionParams,
+ params: SearchSuggestionParams & { preload?: boolean },
): UseQueryResult {
+ const { preload, ...queryParams } = params;
return useQuery({
queryKey: ["search-suggestion", params.query],
staleTime: 60 * 1000, // 1min
- queryFn: () => searchSuggestions(params),
- enabled: !!params.query,
+ queryFn: () => searchSuggestions(queryParams),
+ enabled: preload || !!params.query,
});
}
diff --git a/apps/client/src/features/share/components/share-action-menu.tsx b/apps/client/src/features/share/components/share-action-menu.tsx
index 398e25e9..52dad0da 100644
--- a/apps/client/src/features/share/components/share-action-menu.tsx
+++ b/apps/client/src/features/share/components/share-action-menu.tsx
@@ -13,7 +13,7 @@ import {
buildPageUrl,
buildSharedPageUrl,
} from "@/features/page/page.utils.ts";
-import { useClipboard } from "@mantine/hooks";
+import { useClipboard } from "@/hooks/use-clipboard";
import { notifications } from "@mantine/notifications";
import { useNavigate } from "react-router-dom";
import { useDeleteShareMutation } from "@/features/share/queries/share-query.ts";
diff --git a/apps/client/src/features/share/components/share-modal.tsx b/apps/client/src/features/share/components/share-modal.tsx
index cf597e0a..a7feda26 100644
--- a/apps/client/src/features/share/components/share-modal.tsx
+++ b/apps/client/src/features/share/components/share-modal.tsx
@@ -26,6 +26,9 @@ import { getAppUrl, isCloud } from "@/lib/config.ts";
import { buildPageUrl } from "@/features/page/page.utils.ts";
import classes from "@/features/share/components/share.module.css";
import useTrial from "@/ee/hooks/use-trial.tsx";
+import { useAtom } from "jotai";
+import { workspaceAtom } from "@/features/user/atoms/current-user-atom.ts";
+import { useSpaceQuery } from "@/features/space/queries/space-query.ts";
interface ShareModalProps {
readOnly: boolean;
@@ -40,6 +43,11 @@ export default function ShareModal({ readOnly }: ShareModalProps) {
const { data: share } = useShareForPageQuery(pageId);
const { spaceSlug } = useParams();
const { isTrial } = useTrial();
+ const [workspace] = useAtom(workspaceAtom);
+ const { data: space } = useSpaceQuery(spaceSlug);
+ const workspaceDisabled = workspace?.settings?.sharing?.disabled === true;
+ const spaceDisabled = space?.settings?.sharing?.disabled === true;
+ const sharingDisabled = workspaceDisabled || spaceDisabled;
const createShareMutation = useCreateShareMutation();
const updateShareMutation = useUpdateShareMutation();
const deleteShareMutation = useDeleteShareMutation();
@@ -125,7 +133,6 @@ export default function ShareModal({ readOnly }: ShareModalProps) {
}
- variant="default"
+ color="dark"
+ variant="subtle"
>
{t("Share")}
@@ -164,6 +172,20 @@ export default function ShareModal({ readOnly }: ShareModalProps) {
{t("Upgrade Plan")}
>
+ ) : sharingDisabled ? (
+ <>
+
+
+
+
+ {t("Public sharing is disabled")}
+
+
+ {workspaceDisabled
+ ? t("Public sharing has been disabled at the workspace level.")
+ : t("Public sharing has been disabled for this space.")}
+
+ >
) : isDescendantShared ? (
<>
{t("Inherits public sharing from")}
diff --git a/apps/client/src/features/space/components/space-details.tsx b/apps/client/src/features/space/components/space-details.tsx
index 3c3eb178..89109b3f 100644
--- a/apps/client/src/features/space/components/space-details.tsx
+++ b/apps/client/src/features/space/components/space-details.tsx
@@ -18,6 +18,8 @@ import {
ResponsiveSettingsControl,
ResponsiveSettingsRow,
} from "@/components/ui/responsive-settings-row.tsx";
+import SpacePublicSharingToggle from "@/ee/security/components/space-public-sharing-toggle.tsx";
+import useEnterpriseAccess from "@/ee/hooks/use-enterprise-access.tsx";
interface SpaceDetailsProps {
spaceId: string;
@@ -26,6 +28,8 @@ interface SpaceDetailsProps {
export default function SpaceDetails({ spaceId, readOnly }: SpaceDetailsProps) {
const { t } = useTranslation();
const { data: space, isLoading, refetch } = useSpaceQuery(spaceId);
+ const hasEnterpriseAccess = useEnterpriseAccess();
+ const showSharingToggle = !readOnly && hasEnterpriseAccess;
const [exportOpened, { open: openExportModal, close: closeExportModal }] =
useDisclosure(false);
const [isIconUploading, setIsIconUploading] = useState(false);
@@ -77,7 +81,6 @@ export default function SpaceDetails({ spaceId, readOnly }: SpaceDetailsProps) {
fallbackName={space.name}
size={"60px"}
variant="filled"
-
type={AvatarIconType.SPACE_ICON}
onUpload={handleIconUpload}
onRemove={handleIconRemove}
@@ -88,6 +91,13 @@ export default function SpaceDetails({ spaceId, readOnly }: SpaceDetailsProps) {
+ {showSharingToggle && (
+ <>
+
+
+ >
+ )}
+
{!readOnly && (
<>
diff --git a/apps/client/src/features/space/types/space.types.ts b/apps/client/src/features/space/types/space.types.ts
index de8f83de..f7dcc11a 100644
--- a/apps/client/src/features/space/types/space.types.ts
+++ b/apps/client/src/features/space/types/space.types.ts
@@ -5,6 +5,14 @@ import {
} from "@/features/space/permissions/permissions.type.ts";
import { ExportFormat } from "@/features/page/types/page.types.ts";
+export interface ISpaceSharingSettings {
+ disabled?: boolean;
+}
+
+export interface ISpaceSettings {
+ sharing?: ISpaceSharingSettings;
+}
+
export interface ISpace {
id: string;
name: string;
@@ -18,6 +26,9 @@ export interface ISpace {
memberCount?: number;
spaceId?: string;
membership?: IMembership;
+ settings?: ISpaceSettings;
+ // for updates
+ disablePublicSharing?: boolean;
}
interface IMembership {
diff --git a/apps/client/src/features/user/user-provider.tsx b/apps/client/src/features/user/user-provider.tsx
index 281074ac..fe75623e 100644
--- a/apps/client/src/features/user/user-provider.tsx
+++ b/apps/client/src/features/user/user-provider.tsx
@@ -8,6 +8,7 @@ import { io } from "socket.io-client";
import { SOCKET_URL } from "@/features/websocket/types";
import { useQuerySubscription } from "@/features/websocket/use-query-subscription.ts";
import { useTreeSocket } from "@/features/websocket/use-tree-socket.ts";
+import { useNotificationSocket } from "@/features/notification/hooks/use-notification-socket.ts";
import { useCollabToken } from "@/features/auth/queries/auth-query.tsx";
import { Error404 } from "@/components/ui/error-404.tsx";
@@ -44,6 +45,7 @@ export function UserProvider({ children }: React.PropsWithChildren) {
useQuerySubscription();
useTreeSocket();
+ useNotificationSocket();
useEffect(() => {
if (data && data.user && data.workspace) {
diff --git a/apps/client/src/features/workspace/components/members/components/invite-action-menu.tsx b/apps/client/src/features/workspace/components/members/components/invite-action-menu.tsx
index 6fc06cf5..e2fcf512 100644
--- a/apps/client/src/features/workspace/components/members/components/invite-action-menu.tsx
+++ b/apps/client/src/features/workspace/components/members/components/invite-action-menu.tsx
@@ -8,7 +8,7 @@ import {
} from "@/features/workspace/queries/workspace-query.ts";
import { useTranslation } from "react-i18next";
import { notifications } from "@mantine/notifications";
-import { useClipboard } from "@mantine/hooks";
+import { useClipboard } from "@/hooks/use-clipboard";
import { getInviteLink } from "@/features/workspace/services/workspace-service.ts";
import useUserRole from "@/hooks/use-user-role.tsx";
import { isCloud } from "@/lib/config.ts";
diff --git a/apps/client/src/features/workspace/components/members/components/workspace-invite-section.tsx b/apps/client/src/features/workspace/components/members/components/workspace-invite-section.tsx
index 11596d0a..a49ae5ee 100644
--- a/apps/client/src/features/workspace/components/members/components/workspace-invite-section.tsx
+++ b/apps/client/src/features/workspace/components/members/components/workspace-invite-section.tsx
@@ -1,7 +1,8 @@
import { useAtom } from "jotai";
import { currentUserAtom } from "@/features/user/atoms/current-user-atom.ts";
import { useEffect, useState } from "react";
-import { Button, CopyButton, Group, Text, TextInput } from "@mantine/core";
+import { Button, Group, Text, TextInput } from "@mantine/core";
+import { CopyButton } from "@/components/common/copy-button";
import { useTranslation } from "react-i18next";
export default function WorkspaceInviteSection() {
diff --git a/apps/client/src/features/workspace/services/workspace-service.ts b/apps/client/src/features/workspace/services/workspace-service.ts
index e47e2972..2c36968f 100644
--- a/apps/client/src/features/workspace/services/workspace-service.ts
+++ b/apps/client/src/features/workspace/services/workspace-service.ts
@@ -42,7 +42,7 @@ export async function deleteWorkspaceMember(data: {
await api.post("/workspace/members/delete", data);
}
-export async function updateWorkspace(data: Partial & { aiSearch?: boolean }) {
+export async function updateWorkspace(data: Partial) {
const req = await api.post("/workspace/update", data);
return req.data;
}
@@ -66,7 +66,9 @@ export async function createInvitation(data: ICreateInvite) {
return req.data;
}
-export async function acceptInvitation(data: IAcceptInvite): Promise<{ requiresLogin?: boolean; }> {
+export async function acceptInvitation(
+ data: IAcceptInvite,
+): Promise<{ requiresLogin?: boolean }> {
const req = await api.post("/workspace/invites/accept", data);
return req.data;
}
@@ -108,4 +110,3 @@ export async function getAppVersion(): Promise {
const req = await api.post("/version");
return req.data;
}
-
diff --git a/apps/client/src/features/workspace/types/workspace.types.ts b/apps/client/src/features/workspace/types/workspace.types.ts
index f7d0b964..18b8bdf9 100644
--- a/apps/client/src/features/workspace/types/workspace.types.ts
+++ b/apps/client/src/features/workspace/types/workspace.types.ts
@@ -22,14 +22,23 @@ export interface IWorkspace {
plan?: string;
hasLicenseKey?: boolean;
enforceMfa?: boolean;
+ aiSearch?: boolean;
+ generativeAi?: boolean;
+ disablePublicSharing?: boolean;
}
export interface IWorkspaceSettings {
ai?: IWorkspaceAiSettings;
+ sharing?: IWorkspaceSharingSettings;
}
export interface IWorkspaceAiSettings {
search?: boolean;
+ generative?: boolean;
+}
+
+export interface IWorkspaceSharingSettings {
+ disabled?: boolean;
}
export interface ICreateInvite {
diff --git a/apps/client/src/hooks/use-clipboard.ts b/apps/client/src/hooks/use-clipboard.ts
new file mode 100644
index 00000000..e68a92ba
--- /dev/null
+++ b/apps/client/src/hooks/use-clipboard.ts
@@ -0,0 +1,60 @@
+// Source: https://github.com/mantinedev/mantine/blob/master/packages/@mantine/hooks/src/use-clipboard/use-clipboard.ts
+// polyfilled to support execCommand fallback
+import { useState } from "react";
+import { execCommandCopy } from "@docmost/editor-ext";
+
+export type UseClipboardOptions = {
+ timeout?: number;
+};
+
+export type UseClipboardReturnValue = {
+ copy: (value: string) => void;
+ reset: () => void;
+ error: Error | null;
+ copied: boolean;
+};
+
+export function useClipboard(
+ options: UseClipboardOptions = { timeout: 2000 },
+): UseClipboardReturnValue {
+ const [error, setError] = useState(null);
+ const [copied, setCopied] = useState(false);
+ const [copyTimeout, setCopyTimeout] = useState(null);
+
+ const handleCopyResult = (value: boolean) => {
+ window.clearTimeout(copyTimeout!);
+ setCopyTimeout(window.setTimeout(() => setCopied(false), options.timeout));
+ setCopied(value);
+ };
+
+ const copy = (value: string) => {
+ if ("clipboard" in navigator) {
+ navigator.clipboard
+ .writeText(value)
+ .then(() => handleCopyResult(true))
+ .catch(() => {
+ try {
+ execCommandCopy(value);
+ handleCopyResult(true);
+ } catch (err) {
+ setError(err instanceof Error ? err : new Error("Failed to copy"));
+ }
+ });
+ } else {
+ try {
+ execCommandCopy(value);
+ handleCopyResult(true);
+ } catch (err) {
+ setError(err instanceof Error ? err : new Error("Failed to copy"));
+ }
+ }
+ };
+
+ const reset = () => {
+ setCopied(false);
+ setError(null);
+ window.clearTimeout(copyTimeout!);
+ };
+
+ return { copy, reset, error, copied };
+}
diff --git a/apps/client/src/lib/api-client.ts b/apps/client/src/lib/api-client.ts
index d4f61b05..632811db 100644
--- a/apps/client/src/lib/api-client.ts
+++ b/apps/client/src/lib/api-client.ts
@@ -68,10 +68,14 @@ function redirectToLogin() {
APP_ROUTE.AUTH.SIGNUP,
APP_ROUTE.AUTH.FORGOT_PASSWORD,
APP_ROUTE.AUTH.PASSWORD_RESET,
+ APP_ROUTE.AUTH.MFA_CHALLENGE,
+ APP_ROUTE.AUTH.MFA_SETUP_REQUIRED,
"/invites",
];
if (!exemptPaths.some((path) => window.location.pathname.startsWith(path))) {
- window.location.href = APP_ROUTE.AUTH.LOGIN;
+ const redirectTo = window.location.pathname;
+ const params = new URLSearchParams({ redirect: redirectTo });
+ window.location.href = `${APP_ROUTE.AUTH.LOGIN}?${params.toString()}`;
}
}
diff --git a/apps/client/src/lib/app-route.ts b/apps/client/src/lib/app-route.ts
index 0151c856..c4a13093 100644
--- a/apps/client/src/lib/app-route.ts
+++ b/apps/client/src/lib/app-route.ts
@@ -29,4 +29,20 @@ const APP_ROUTE = {
},
};
+export function getPostLoginRedirect(): string {
+ const params = new URLSearchParams(window.location.search);
+ const redirect = params.get("redirect");
+ if (redirect) {
+ try {
+ const resolved = new URL(redirect, window.location.origin);
+ if (resolved.origin === window.location.origin) {
+ return resolved.pathname + resolved.search + resolved.hash;
+ }
+ } catch {
+ // malformed URL, fall through to default
+ }
+ }
+ return APP_ROUTE.HOME;
+}
+
export default APP_ROUTE;
diff --git a/apps/client/src/pages/page/page.tsx b/apps/client/src/pages/page/page.tsx
index a1dfee6f..449f1e15 100644
--- a/apps/client/src/pages/page/page.tsx
+++ b/apps/client/src/pages/page/page.tsx
@@ -13,6 +13,11 @@ import {
} from "@/features/space/permissions/permissions.type.ts";
import { useTranslation } from "react-i18next";
import React from "react";
+import { EmptyState } from "@/components/ui/empty-state.tsx";
+import { IconAlertTriangle, IconFileOff } from "@tabler/icons-react";
+import { Button } from "@mantine/core";
+import { Link } from "react-router-dom";
+import { ErrorBoundary } from "react-error-boundary";
const MemoizedFullEditor = React.memo(FullEditor);
const MemoizedPageHeader = React.memo(PageHeader);
@@ -22,6 +27,29 @@ export default function Page() {
const { t } = useTranslation();
const { pageSlug } = useParams();
+ return (
+ (
+
+ {t("Try again")}
+
+ }
+ />
+ )}
+ >
+
+
+ );
+}
+
+function PageContent({ pageSlug }: { pageSlug: string | undefined }) {
+ const { t } = useTranslation();
+
const {
data: page,
isLoading,
@@ -39,9 +67,27 @@ export default function Page() {
if (isError || !page) {
if ([401, 403, 404].includes(error?.["status"])) {
- return {t("Page not found")}
;
+ return (
+
+ {t("Go to homepage")}
+
+ }
+ />
+ );
}
- return {t("Error fetching page data.")}
;
+ return (
+
+ );
}
if (!space) {
diff --git a/apps/client/src/theme.ts b/apps/client/src/theme.ts
index b02200b1..45c3474b 100644
--- a/apps/client/src/theme.ts
+++ b/apps/client/src/theme.ts
@@ -35,12 +35,35 @@ export const theme = createTheme({
blue,
red,
},
+ /***
+ components: {
+ ActionIcon: ActionIcon.extend({
+ vars: (_theme, props) => {
+ return {
+ root: {
+ ...(props.variant === "subtle" &&
+ props.color === "dark" && {
+ "--ai-color": "var(--mantine-color-default-color)",
+ "--ai-hover": "var(--mantine-color-default-hover)",
+ }),
+ },
+ };
+ },
+ }),
+ },
+ ***/
});
export const mantineCssResolver: CSSVariablesResolver = (theme) => ({
variables: {
"--input-error-size": theme.fontSizes.sm,
},
- light: {},
- dark: {},
+ light: {
+ "--mantine-color-dark-light-color": "#4e5359",
+ "--mantine-color-dark-light-hover": "var(--mantine-color-gray-light-hover)",
+ },
+ dark: {
+ "--mantine-color-dark-light-color": "var(--mantine-color-gray-4)",
+ "--mantine-color-dark-light-hover": "var(--mantine-color-default-hover)",
+ },
});
diff --git a/apps/server/package.json b/apps/server/package.json
index 532fb1fa..8fe0f7b7 100644
--- a/apps/server/package.json
+++ b/apps/server/package.json
@@ -1,6 +1,6 @@
{
"name": "server",
- "version": "0.25.0-beta.1",
+ "version": "0.25.3",
"description": "",
"author": "",
"private": true,
@@ -30,40 +30,40 @@
"test:e2e": "jest --config test/jest-e2e.json"
},
"dependencies": {
- "@ai-sdk/google": "^3.0.9",
- "@ai-sdk/openai": "^3.0.11",
- "@ai-sdk/openai-compatible": "^2.0.12",
- "@aws-sdk/client-s3": "3.701.0",
- "@aws-sdk/lib-storage": "3.701.0",
- "@aws-sdk/s3-request-presigner": "3.701.0",
+ "@ai-sdk/google": "^3.0.29",
+ "@ai-sdk/openai": "^3.0.29",
+ "@ai-sdk/openai-compatible": "^2.0.30",
+ "@aws-sdk/client-s3": "3.982.0",
+ "@aws-sdk/lib-storage": "3.982.0",
+ "@aws-sdk/s3-request-presigner": "3.982.0",
"@fastify/cookie": "^11.0.2",
- "@fastify/multipart": "^9.3.0",
- "@fastify/static": "^8.3.0",
- "@langchain/core": "1.1.13",
+ "@fastify/multipart": "^9.4.0",
+ "@fastify/static": "^9.0.0",
+ "@langchain/core": "1.1.18",
"@langchain/textsplitters": "1.0.1",
"@nestjs-labs/nestjs-ioredis": "^11.0.4",
"@nestjs/bullmq": "^11.0.4",
"@nestjs/common": "^11.1.11",
"@nestjs/config": "^4.0.2",
- "@nestjs/core": "^11.1.11",
+ "@nestjs/core": "^11.1.13",
"@nestjs/event-emitter": "^3.0.1",
"@nestjs/jwt": "11.0.0",
"@nestjs/mapped-types": "^2.1.0",
"@nestjs/passport": "^11.0.5",
- "@nestjs/platform-fastify": "^11.1.11",
- "@nestjs/platform-socket.io": "^11.1.11",
+ "@nestjs/platform-fastify": "^11.1.13",
+ "@nestjs/platform-socket.io": "^11.1.13",
"@nestjs/schedule": "^6.1.0",
"@nestjs/terminus": "^11.0.0",
- "@nestjs/websockets": "^11.1.11",
+ "@nestjs/websockets": "^11.1.13",
"@node-saml/passport-saml": "^5.1.0",
- "@react-email/components": "0.0.28",
- "@react-email/render": "1.0.2",
+ "@react-email/components": "1.0.7",
+ "@react-email/render": "2.0.4",
"@socket.io/redis-adapter": "^8.3.0",
- "ai": "^6.0.37",
- "ai-sdk-ollama": "^3.1.1",
+ "ai": "^6.0.86",
+ "ai-sdk-ollama": "^3.7.0",
"bcrypt": "^6.0.0",
"bullmq": "^5.65.0",
- "cache-manager": "^6.4.3",
+ "cache-manager": "^7.2.8",
"cheerio": "^1.1.2",
"class-transformer": "^0.5.1",
"class-validator": "^0.14.3",
@@ -92,16 +92,15 @@
"pdfjs-dist": "^5.4.394",
"pg-tsquery": "^8.4.2",
"pgvector": "^0.2.1",
- "postgres": "^3.4.8",
"pino-http": "^11.0.0",
"pino-pretty": "^13.1.3",
+ "postgres": "^3.4.8",
"postmark": "^4.0.5",
"react": "^18.3.1",
"reflect-metadata": "^0.2.2",
"rxjs": "^7.8.2",
"sanitize-filename-ts": "1.0.2",
"scimmy": "1.3.5",
- "sharp": "0.34.3",
"socket.io": "^4.8.3",
"stripe": "^17.5.0",
"tmp-promise": "^3.0.3",
@@ -112,32 +111,32 @@
},
"devDependencies": {
"@eslint/js": "^9.20.0",
- "@nestjs/cli": "^11.0.4",
+ "@nestjs/cli": "^11.0.16",
"@nestjs/schematics": "^11.0.1",
"@nestjs/testing": "^11.0.10",
"@types/bcrypt": "^5.0.2",
"@types/debounce": "^1.2.4",
"@types/fs-extra": "^11.0.4",
- "@types/jest": "^29.5.14",
+ "@types/jest": "^30.0.0",
"@types/mime-types": "^2.1.4",
"@types/node": "^22.13.4",
"@types/nodemailer": "^6.4.17",
"@types/passport-google-oauth20": "^2.0.16",
"@types/passport-jwt": "^4.0.1",
- "@types/supertest": "^6.0.2",
+ "@types/supertest": "^6.0.3",
"@types/ws": "^8.5.14",
"@types/yauzl": "^2.10.3",
- "eslint": "^9.20.1",
+ "eslint": "^9.39.2",
"eslint-config-prettier": "^10.0.1",
"globals": "^15.15.0",
- "jest": "^29.7.0",
+ "jest": "^30.2.0",
"kysely-codegen": "^0.19.0",
"prettier": "^3.5.1",
- "react-email": "3.0.2",
+ "react-email": "5.2.8",
"source-map-support": "^0.5.21",
- "supertest": "^7.0.0",
- "ts-jest": "^29.2.5",
- "ts-loader": "^9.5.2",
+ "supertest": "^7.2.2",
+ "ts-jest": "^29.4.6",
+ "ts-loader": "^9.5.4",
"ts-node": "^10.9.2",
"tsconfig-paths": "^4.2.0",
"typescript": "^5.7.3",
diff --git a/apps/server/src/collaboration/collaboration.handler.ts b/apps/server/src/collaboration/collaboration.handler.ts
index ec746550..87dc5010 100644
--- a/apps/server/src/collaboration/collaboration.handler.ts
+++ b/apps/server/src/collaboration/collaboration.handler.ts
@@ -1,5 +1,12 @@
import { Injectable, Logger } from '@nestjs/common';
import { Hocuspocus, Document } from '@hocuspocus/server';
+import { TiptapTransformer } from '@hocuspocus/transformer';
+import {
+ prosemirrorNodeToYElement,
+ tiptapExtensions,
+} from './collaboration.util';
+import * as Y from 'yjs';
+import { User } from '@docmost/db/types/entity.types';
export type CollabEventHandlers = ReturnType<
CollaborationHandler['getHandlers']
@@ -20,6 +27,44 @@ export class CollaborationHandler {
// const fragment = doc.getXmlFragment('default');
//});
},
+ updatePageContent: async (
+ documentName: string,
+ payload: {
+ prosemirrorJson: any;
+ operation: string;
+ user: User;
+ },
+ ) => {
+ const { prosemirrorJson, operation, user } = payload;
+ this.logger.debug('Updating page content via yjs', documentName);
+ await this.withYdocConnection(
+ hocuspocus,
+ documentName,
+ { user },
+ (doc) => {
+ const fragment = doc.getXmlFragment('default');
+
+ if (operation === 'replace') {
+ if (fragment.length > 0) {
+ fragment.delete(0, fragment.length);
+ }
+
+ const newDoc = TiptapTransformer.toYdoc(
+ prosemirrorJson,
+ 'default',
+ tiptapExtensions,
+ );
+ Y.applyUpdate(doc, Y.encodeStateAsUpdate(newDoc));
+ } else {
+ const newContent = prosemirrorJson.content || [];
+ const yElements = newContent.map(prosemirrorNodeToYElement);
+ const position =
+ operation === 'prepend' ? 0 : fragment.length;
+ fragment.insert(position, yElements);
+ }
+ },
+ );
+ },
};
}
diff --git a/apps/server/src/collaboration/collaboration.module.ts b/apps/server/src/collaboration/collaboration.module.ts
index e9374c53..42814508 100644
--- a/apps/server/src/collaboration/collaboration.module.ts
+++ b/apps/server/src/collaboration/collaboration.module.ts
@@ -1,4 +1,10 @@
-import { Logger, Module, OnModuleDestroy, OnModuleInit } from '@nestjs/common';
+import {
+ Global,
+ Logger,
+ Module,
+ OnModuleDestroy,
+ OnModuleInit,
+} from '@nestjs/common';
import { AuthenticationExtension } from './extensions/authentication.extension';
import { PersistenceExtension } from './extensions/persistence.extension';
import { CollaborationGateway } from './collaboration.gateway';
@@ -7,9 +13,11 @@ import { CollabWsAdapter } from './adapter/collab-ws.adapter';
import { IncomingMessage } from 'http';
import { WebSocket } from 'ws';
import { TokenModule } from '../core/auth/token.module';
-import { HistoryListener } from './listeners/history.listener';
+import { HistoryProcessor } from './processors/history.processor';
import { LoggerExtension } from './extensions/logger.extension';
import { CollaborationHandler } from './collaboration.handler';
+import { CollabHistoryService } from './services/collab-history.service';
+import { WatcherModule } from '../core/watcher/watcher.module';
@Module({
providers: [
@@ -17,11 +25,12 @@ import { CollaborationHandler } from './collaboration.handler';
AuthenticationExtension,
PersistenceExtension,
LoggerExtension,
- HistoryListener,
+ HistoryProcessor,
+ CollabHistoryService,
CollaborationHandler,
],
exports: [CollaborationGateway],
- imports: [TokenModule],
+ imports: [TokenModule, WatcherModule],
})
export class CollaborationModule implements OnModuleInit, OnModuleDestroy {
private readonly logger = new Logger(CollaborationModule.name);
diff --git a/apps/server/src/collaboration/collaboration.util.ts b/apps/server/src/collaboration/collaboration.util.ts
index afe1be08..a29bb22a 100644
--- a/apps/server/src/collaboration/collaboration.util.ts
+++ b/apps/server/src/collaboration/collaboration.util.ts
@@ -34,6 +34,7 @@ import {
Highlight,
UniqueID,
addUniqueIdsToDoc,
+ htmlToMarkdown,
} from '@docmost/editor-ext';
import { generateText, getSchema, JSONContent } from '@tiptap/core';
import { generateHTML, generateJSON } from '../common/helpers/prosemirror/html';
@@ -42,6 +43,7 @@ import { generateHTML, generateJSON } from '../common/helpers/prosemirror/html';
// see:https://github.com/ueberdosis/tiptap/issues/4089
//import { generateJSON } from '@tiptap/html';
import { Node, Schema } from '@tiptap/pm/model';
+import * as Y from 'yjs';
import { Logger } from '@nestjs/common';
export const tiptapExtensions = [
@@ -161,3 +163,37 @@ function stripUnknownNodes(
return json;
}
+
+export function prosemirrorNodeToYElement(node: any): Y.XmlElement | Y.XmlText {
+ if (node.type === 'text') {
+ const ytext = new Y.XmlText();
+ ytext.insert(0, node.text || '');
+ if (node.marks?.length > 0) {
+ const attrs: Record = {};
+ for (const mark of node.marks) {
+ attrs[mark.type] = mark.attrs || true;
+ }
+ ytext.format(0, node.text?.length || 0, attrs);
+ }
+ return ytext;
+ }
+
+ const element = new Y.XmlElement(node.type);
+ if (node.attrs) {
+ for (const [key, value] of Object.entries(node.attrs)) {
+ if (value !== null && value !== undefined) {
+ element.setAttribute(key, value as any);
+ }
+ }
+ }
+ if (node.content?.length > 0) {
+ const children = node.content.map(prosemirrorNodeToYElement);
+ element.insert(0, children);
+ }
+ return element;
+}
+
+export function jsonToMarkdown(tiptapJson: any): string {
+ const html = jsonToHtml(tiptapJson);
+ return htmlToMarkdown(html);
+}
diff --git a/apps/server/src/collaboration/constants.ts b/apps/server/src/collaboration/constants.ts
new file mode 100644
index 00000000..8ce8c825
--- /dev/null
+++ b/apps/server/src/collaboration/constants.ts
@@ -0,0 +1,3 @@
+export const HISTORY_INTERVAL = 5 * 60 * 1000;
+export const HISTORY_FAST_INTERVAL = 60 * 1000;
+export const HISTORY_FAST_THRESHOLD = 5 * 60 * 1000;
diff --git a/apps/server/src/collaboration/extensions/persistence.extension.ts b/apps/server/src/collaboration/extensions/persistence.extension.ts
index 54c4a89e..642d0761 100644
--- a/apps/server/src/collaboration/extensions/persistence.extension.ts
+++ b/apps/server/src/collaboration/extensions/persistence.extension.ts
@@ -13,17 +13,27 @@ import { PageRepo } from '@docmost/db/repos/page/page.repo';
import { InjectKysely } from 'nestjs-kysely';
import { KyselyDB } from '@docmost/db/types/kysely.types';
import { executeTx } from '@docmost/db/utils';
-import { EventEmitter2 } from '@nestjs/event-emitter';
import { InjectQueue } from '@nestjs/bullmq';
import { QueueJob, QueueName } from '../../integrations/queue/constants';
import { Queue } from 'bullmq';
import {
extractMentions,
extractPageMentions,
+ extractUserMentions,
} from '../../common/helpers/prosemirror/utils';
import { isDeepStrictEqual } from 'node:util';
-import { IPageBacklinkJob } from '../../integrations/queue/constants/queue.interface';
+import {
+ IPageBacklinkJob,
+ IPageHistoryJob,
+ IPageMentionNotificationJob,
+} from '../../integrations/queue/constants/queue.interface';
import { Page } from '@docmost/db/types/entity.types';
+import { CollabHistoryService } from '../services/collab-history.service';
+import {
+ HISTORY_FAST_INTERVAL,
+ HISTORY_FAST_THRESHOLD,
+ HISTORY_INTERVAL,
+} from '../constants';
@Injectable()
export class PersistenceExtension implements Extension {
@@ -33,9 +43,11 @@ export class PersistenceExtension implements Extension {
constructor(
private readonly pageRepo: PageRepo,
@InjectKysely() private readonly db: KyselyDB,
- private eventEmitter: EventEmitter2,
@InjectQueue(QueueName.GENERAL_QUEUE) private generalQueue: Queue,
@InjectQueue(QueueName.AI_QUEUE) private aiQueue: Queue,
+ @InjectQueue(QueueName.HISTORY_QUEUE) private historyQueue: Queue,
+ @InjectQueue(QueueName.NOTIFICATION_QUEUE) private notificationQueue: Queue,
+ private readonly collabHistory: CollabHistoryService,
) {}
async onLoadDocument(data: onLoadDocumentPayload) {
@@ -101,6 +113,7 @@ export class PersistenceExtension implements Extension {
}
let page: Page = null;
+ const editingUserIds = this.consumeContributors(documentName);
try {
await executeTx(this.db, async (trx) => {
@@ -123,13 +136,9 @@ export class PersistenceExtension implements Extension {
let contributorIds = undefined;
try {
const existingContributors = page.contributorIds || [];
- const contributorSet = this.contributors.get(documentName);
- contributorSet.add(page.creatorId);
- const newContributors = [...contributorSet];
contributorIds = Array.from(
- new Set([...existingContributors, ...newContributors]),
+ new Set([...existingContributors, ...editingUserIds, page.creatorId]),
);
- this.contributors.delete(documentName);
} catch (err) {
//this.logger.debug('Contributors error:' + err?.['message']);
}
@@ -153,13 +162,7 @@ export class PersistenceExtension implements Extension {
}
if (page) {
- this.eventEmitter.emit('collab.page.updated', {
- page: {
- ...page,
- content: tiptapJson,
- lastUpdatedById: context.user.id,
- },
- });
+ await this.collabHistory.addContributors(pageId, editingUserIds);
const mentions = extractMentions(tiptapJson);
const pageMentions = extractPageMentions(mentions);
@@ -170,16 +173,37 @@ export class PersistenceExtension implements Extension {
mentions: pageMentions,
} as IPageBacklinkJob);
+ const userMentions = extractUserMentions(mentions);
+ const oldMentions = page.content ? extractMentions(page.content) : [];
+ const oldMentionedUserIds = extractUserMentions(oldMentions).map((m) => m.entityId);
+
+ if (userMentions.length > 0) {
+ await this.notificationQueue.add(QueueJob.PAGE_MENTION_NOTIFICATION, {
+ userMentions: userMentions.map((m) => ({
+ userId: m.entityId,
+ mentionId: m.id,
+ creatorId: m.creatorId,
+ })),
+ oldMentionedUserIds,
+ pageId,
+ spaceId: page.spaceId,
+ workspaceId: page.workspaceId,
+ } as IPageMentionNotificationJob);
+ }
+
await this.aiQueue.add(QueueJob.PAGE_CONTENT_UPDATED, {
pageIds: [pageId],
workspaceId: page.workspaceId,
});
+
+ await this.enqueuePageHistory(page);
}
}
async onChange(data: onChangePayload) {
const documentName = data.documentName;
- const userId = data.context?.user.id;
+ const userId = data.context?.user?.id;
+
if (!userId) return;
if (!this.contributors.has(documentName)) {
@@ -193,4 +217,26 @@ export class PersistenceExtension implements Extension {
const documentName = data.documentName;
this.contributors.delete(documentName);
}
+
+ private consumeContributors(documentName: string): string[] {
+ const contributorSet = this.contributors.get(documentName);
+ if (!contributorSet) return [];
+ const userIds = [...contributorSet];
+ this.contributors.delete(documentName);
+ return userIds;
+ }
+
+ private async enqueuePageHistory(page: Page): Promise {
+ const pageAge = Date.now() - new Date(page.createdAt).getTime();
+ const delay =
+ pageAge < HISTORY_FAST_THRESHOLD
+ ? HISTORY_FAST_INTERVAL
+ : HISTORY_INTERVAL;
+
+ await this.historyQueue.add(
+ QueueJob.PAGE_HISTORY,
+ { pageId: page.id } as IPageHistoryJob,
+ { jobId: page.id, delay },
+ );
+ }
}
diff --git a/apps/server/src/collaboration/listeners/history.listener.ts b/apps/server/src/collaboration/listeners/history.listener.ts
deleted file mode 100644
index 958e288e..00000000
--- a/apps/server/src/collaboration/listeners/history.listener.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { Injectable, Logger } from '@nestjs/common';
-import { OnEvent } from '@nestjs/event-emitter';
-import { PageHistoryRepo } from '@docmost/db/repos/page/page-history.repo';
-import { Page } from '@docmost/db/types/entity.types';
-import { isDeepStrictEqual } from 'node:util';
-
-export class UpdatedPageEvent {
- page: Page;
-}
-
-@Injectable()
-export class HistoryListener {
- private readonly logger = new Logger(HistoryListener.name);
-
- constructor(private readonly pageHistoryRepo: PageHistoryRepo) {}
-
- @OnEvent('collab.page.updated')
- async handleCreatePageHistory(event: UpdatedPageEvent) {
- const { page } = event;
-
- const pageCreationTime = new Date(page.createdAt).getTime();
- const currentTime = Date.now();
- const FIVE_MINUTES = 5 * 60 * 1000;
-
- if (currentTime - pageCreationTime < FIVE_MINUTES) {
- return;
- }
-
- const lastHistory = await this.pageHistoryRepo.findPageLastHistory(page.id);
-
- if (
- !lastHistory ||
- (!isDeepStrictEqual(lastHistory.content, page.content) &&
- currentTime - new Date(lastHistory.createdAt).getTime() >= FIVE_MINUTES)
- ) {
- try {
- await this.pageHistoryRepo.saveHistory(page);
- this.logger.debug(`New history created for: ${page.id}`);
- } catch (err) {
- this.logger.error(`Failed to create history for page: ${page.id}`, err);
- }
- }
- }
-}
diff --git a/apps/server/src/collaboration/processors/history.processor.ts b/apps/server/src/collaboration/processors/history.processor.ts
new file mode 100644
index 00000000..315dba0b
--- /dev/null
+++ b/apps/server/src/collaboration/processors/history.processor.ts
@@ -0,0 +1,93 @@
+import { Logger, OnModuleDestroy } from '@nestjs/common';
+import { OnWorkerEvent, Processor, WorkerHost } from '@nestjs/bullmq';
+import { Job } from 'bullmq';
+import { QueueJob, QueueName } from '../../integrations/queue/constants';
+import { IPageHistoryJob } from '../../integrations/queue/constants/queue.interface';
+import { PageHistoryRepo } from '@docmost/db/repos/page/page-history.repo';
+import { PageRepo } from '@docmost/db/repos/page/page.repo';
+import { isDeepStrictEqual } from 'node:util';
+import { CollabHistoryService } from '../services/collab-history.service';
+import { WatcherService } from '../../core/watcher/watcher.service';
+
+@Processor(QueueName.HISTORY_QUEUE)
+export class HistoryProcessor extends WorkerHost implements OnModuleDestroy {
+ private readonly logger = new Logger(HistoryProcessor.name);
+
+ constructor(
+ private readonly pageHistoryRepo: PageHistoryRepo,
+ private readonly pageRepo: PageRepo,
+ private readonly collabHistory: CollabHistoryService,
+ private readonly watcherService: WatcherService,
+ ) {
+ super();
+ }
+
+ async process(job: Job): Promise {
+ if (job.name !== QueueJob.PAGE_HISTORY) return;
+
+ try {
+ const { pageId } = job.data;
+
+ const page = await this.pageRepo.findById(pageId, {
+ includeContent: true,
+ });
+
+ if (!page) {
+ this.logger.warn(`Page ${pageId} not found, skipping history`);
+ await this.collabHistory.clearContributors(pageId);
+ return;
+ }
+
+ const lastHistory = await this.pageHistoryRepo.findPageLastHistory(
+ pageId,
+ { includeContent: true },
+ );
+
+ if (
+ !lastHistory ||
+ !isDeepStrictEqual(lastHistory.content, page.content)
+ ) {
+ const contributorIds =
+ await this.collabHistory.popContributors(pageId);
+
+ try {
+ await this.watcherService.addPageWatchers(
+ contributorIds,
+ pageId,
+ page.spaceId,
+ page.workspaceId,
+ );
+
+ await this.pageHistoryRepo.saveHistory(page, { contributorIds });
+ this.logger.debug(`History created for page: ${pageId}`);
+ } catch (err) {
+ await this.collabHistory.addContributors(
+ pageId,
+ contributorIds,
+ );
+ throw err;
+ }
+ }
+ } catch (err) {
+ throw err;
+ }
+ }
+
+ @OnWorkerEvent('active')
+ onActive(job: Job) {
+ this.logger.debug(`Processing ${job.name} for page: ${job.data.pageId}`);
+ }
+
+ @OnWorkerEvent('failed')
+ onError(job: Job) {
+ this.logger.error(
+ `Failed ${job.name} for page: ${job.data.pageId}. Reason: ${job.failedReason}`,
+ );
+ }
+
+ async onModuleDestroy(): Promise {
+ if (this.worker) {
+ await this.worker.close();
+ }
+ }
+}
diff --git a/apps/server/src/collaboration/server/collab-app.module.ts b/apps/server/src/collaboration/server/collab-app.module.ts
index eb6b57fa..396ff0a9 100644
--- a/apps/server/src/collaboration/server/collab-app.module.ts
+++ b/apps/server/src/collaboration/server/collab-app.module.ts
@@ -9,6 +9,8 @@ import { EventEmitterModule } from '@nestjs/event-emitter';
import { HealthModule } from '../../integrations/health/health.module';
import { CollaborationController } from './collaboration.controller';
import { LoggerModule } from '../../common/logger/logger.module';
+import { RedisModule } from '@nestjs-labs/nestjs-ioredis';
+import { RedisConfigService } from '../../integrations/redis/redis-config.service';
@Module({
imports: [
@@ -19,6 +21,9 @@ import { LoggerModule } from '../../common/logger/logger.module';
QueueModule,
HealthModule,
EventEmitterModule.forRoot(),
+ RedisModule.forRootAsync({
+ useClass: RedisConfigService,
+ }),
],
controllers: [
AppController,
diff --git a/apps/server/src/collaboration/server/collab-main.ts b/apps/server/src/collaboration/server/collab-main.ts
index 1839c2e3..3b3de243 100644
--- a/apps/server/src/collaboration/server/collab-main.ts
+++ b/apps/server/src/collaboration/server/collab-main.ts
@@ -7,6 +7,7 @@ import {
import { TransformHttpResponseInterceptor } from '../../common/interceptors/http-response.interceptor';
import { Logger } from '@nestjs/common';
import { Logger as PinoLogger } from 'nestjs-pino';
+import { InternalLogFilter } from '../../common/logger/internal-log-filter';
async function bootstrap() {
const app = await NestFactory.create(
@@ -19,7 +20,7 @@ async function bootstrap() {
},
}),
{
- logger: false,
+ logger: new InternalLogFilter(),
bufferLogs: false,
},
);
diff --git a/apps/server/src/collaboration/services/collab-history.service.ts b/apps/server/src/collaboration/services/collab-history.service.ts
new file mode 100644
index 00000000..b7cf5086
--- /dev/null
+++ b/apps/server/src/collaboration/services/collab-history.service.ts
@@ -0,0 +1,30 @@
+import { Injectable } from '@nestjs/common';
+import { RedisService } from '@nestjs-labs/nestjs-ioredis';
+import type { Redis } from 'ioredis';
+
+const REDIS_KEY_PREFIX = 'history:contributors:';
+
+@Injectable()
+export class CollabHistoryService {
+ private readonly redis: Redis;
+
+ constructor(private readonly redisService: RedisService) {
+ this.redis = this.redisService.getOrThrow();
+ }
+
+ async addContributors(pageId: string, userIds: string[]): Promise {
+ if (userIds.length === 0) return;
+ await this.redis.sadd(REDIS_KEY_PREFIX + pageId, ...userIds);
+ }
+
+ async popContributors(pageId: string): Promise {
+ const key = REDIS_KEY_PREFIX + pageId;
+ const count = await this.redis.scard(key);
+ if (count === 0) return [];
+ return await this.redis.spop(key, count);
+ }
+
+ async clearContributors(pageId: string): Promise {
+ await this.redis.del(REDIS_KEY_PREFIX + pageId);
+ }
+}
diff --git a/apps/server/src/collaboration/yjs.util.ts b/apps/server/src/collaboration/yjs.util.ts
new file mode 100644
index 00000000..3e494bbc
--- /dev/null
+++ b/apps/server/src/collaboration/yjs.util.ts
@@ -0,0 +1,177 @@
+import {
+ initProseMirrorDoc,
+ relativePositionToAbsolutePosition,
+} from 'y-prosemirror';
+import * as Y from 'yjs';
+import { Document } from '@hocuspocus/server';
+import { getSchema } from '@tiptap/core';
+import { tiptapExtensions } from './collaboration.util';
+
+export type YjsSelection = {
+ anchor: any;
+ head: any;
+};
+
+export function setYjsMark(
+ doc: Document,
+ fragment: Y.XmlFragment,
+ yjsSelection: YjsSelection,
+ markName: string,
+ markAttributes: Record,
+) {
+ const schema = getSchema(tiptapExtensions);
+ const { mapping } = initProseMirrorDoc(fragment, schema);
+
+ // Convert JSON positions to Y.js RelativePosition objects
+ const anchorRelPos = Y.createRelativePositionFromJSON(yjsSelection.anchor);
+ const headRelPos = Y.createRelativePositionFromJSON(yjsSelection.head);
+
+ const anchor = relativePositionToAbsolutePosition(
+ doc,
+ fragment,
+ anchorRelPos,
+ mapping,
+ );
+ const head = relativePositionToAbsolutePosition(
+ doc,
+ fragment,
+ headRelPos,
+ mapping,
+ );
+
+ if (anchor === null || head === null) {
+ throw new Error(
+ 'Could not resolve Y.js relative positions to absolute positions',
+ );
+ }
+
+ const from = Math.min(anchor, head);
+ const to = Math.max(anchor, head);
+
+ // Apply mark directly to Y.js XmlText nodes
+ // This bypasses updateYFragment which has compatibility issues
+ applyMarkToYFragment(fragment, from, to, markName, markAttributes);
+}
+
+function applyMarkToYFragment(
+ fragment: Y.XmlFragment,
+ from: number,
+ to: number,
+ markName: string,
+ markAttributes: Record,
+) {
+ let pos = 0;
+
+ const processItem = (item: any): boolean => {
+ if (pos >= to) return false;
+
+ if (item instanceof Y.XmlText) {
+ const textLength = item.length;
+ const itemEnd = pos + textLength;
+
+ if (itemEnd > from && pos < to) {
+ const formatFrom = Math.max(0, from - pos);
+ const formatTo = Math.min(textLength, to - pos);
+ const formatLength = formatTo - formatFrom;
+
+ if (formatLength > 0) {
+ item.format(formatFrom, formatLength, { [markName]: markAttributes });
+ }
+ }
+ pos = itemEnd;
+ } else if (item instanceof Y.XmlElement) {
+ pos++; // Opening tag
+ for (let i = 0; i < item.length; i++) {
+ if (!processItem(item.get(i))) return false;
+ }
+ pos++; // Closing tag
+ }
+ return true;
+ };
+
+ for (let i = 0; i < fragment.length; i++) {
+ if (!processItem(fragment.get(i))) break;
+ }
+}
+
+/**
+ * Removes a mark from all text in the fragment that has the specified attribute value.
+ * Useful for deleting comments by commentId.
+ */
+export function removeYjsMarkByAttribute(
+ fragment: Y.XmlFragment,
+ markName: string,
+ attributeName: string,
+ attributeValue: string,
+) {
+ const processItem = (item: any) => {
+ if (item instanceof Y.XmlText) {
+ // Get all formatting deltas to find ranges with this mark
+ const deltas = item.toDelta();
+ let offset = 0;
+
+ for (const delta of deltas) {
+ const length = delta.insert?.length ?? 0;
+ const attributes = delta.attributes ?? {};
+ const markAttr = attributes[markName];
+
+ if (markAttr && markAttr[attributeName] === attributeValue) {
+ // Remove the mark by setting it to null
+ item.format(offset, length, { [markName]: null });
+ }
+ offset += length;
+ }
+ } else if (item instanceof Y.XmlElement) {
+ for (let i = 0; i < item.length; i++) {
+ processItem(item.get(i));
+ }
+ }
+ };
+
+ for (let i = 0; i < fragment.length; i++) {
+ processItem(fragment.get(i));
+ }
+}
+
+/**
+ * Updates a mark's attributes for all text that has the specified attribute value.
+ * Useful for resolving/unresolving comments by commentId.
+ */
+export function updateYjsMarkAttribute(
+ fragment: Y.XmlFragment,
+ markName: string,
+ findByAttribute: { name: string; value: string },
+ newAttributes: Record,
+) {
+ const processItem = (item: any) => {
+ if (item instanceof Y.XmlText) {
+ const deltas = item.toDelta();
+ let offset = 0;
+
+ for (const delta of deltas) {
+ const length = delta.insert?.length ?? 0;
+ const attributes = delta.attributes ?? {};
+ const markAttr = attributes[markName];
+
+ if (
+ markAttr &&
+ markAttr[findByAttribute.name] === findByAttribute.value
+ ) {
+ // Update the mark with new attributes (merge with existing)
+ item.format(offset, length, {
+ [markName]: { ...markAttr, ...newAttributes },
+ });
+ }
+ offset += length;
+ }
+ } else if (item instanceof Y.XmlElement) {
+ for (let i = 0; i < item.length; i++) {
+ processItem(item.get(i));
+ }
+ }
+ };
+
+ for (let i = 0; i < fragment.length; i++) {
+ processItem(fragment.get(i));
+ }
+}
diff --git a/apps/server/src/common/helpers/constants.ts b/apps/server/src/common/helpers/constants.ts
index 6f4b30bd..d3288aa1 100644
--- a/apps/server/src/common/helpers/constants.ts
+++ b/apps/server/src/common/helpers/constants.ts
@@ -9,3 +9,7 @@ export const LOCAL_STORAGE_PATH = path.resolve(
'..',
LOCAL_STORAGE_DIR,
);
+
+export function getPageTitle(title: string | null | undefined): string {
+ return title || 'untitled';
+}
diff --git a/apps/server/src/common/helpers/prosemirror/utils.ts b/apps/server/src/common/helpers/prosemirror/utils.ts
index 7c98065a..424cd787 100644
--- a/apps/server/src/common/helpers/prosemirror/utils.ts
+++ b/apps/server/src/common/helpers/prosemirror/utils.ts
@@ -64,6 +64,30 @@ export function extractPageMentions(mentionList: MentionNode[]): MentionNode[] {
return pageMentionList as MentionNode[];
}
+export function extractUserMentionIdsFromJson(json: any): string[] {
+ const userIds: string[] = [];
+
+ function walk(node: any) {
+ if (!node) return;
+ if (
+ node.type === 'mention' &&
+ node.attrs?.entityType === 'user' &&
+ node.attrs?.entityId &&
+ !userIds.includes(node.attrs.entityId)
+ ) {
+ userIds.push(node.attrs.entityId);
+ }
+ if (Array.isArray(node.content)) {
+ for (const child of node.content) {
+ walk(child);
+ }
+ }
+ }
+
+ walk(json);
+ return userIds;
+}
+
export function getProsemirrorContent(content: any) {
return (
content ?? {
diff --git a/apps/server/src/common/logger/internal-log-filter.ts b/apps/server/src/common/logger/internal-log-filter.ts
index 5273716c..a3a0168d 100644
--- a/apps/server/src/common/logger/internal-log-filter.ts
+++ b/apps/server/src/common/logger/internal-log-filter.ts
@@ -1,7 +1,8 @@
-import { ConsoleLogger } from '@nestjs/common';
+import { ConsoleLogger, LogLevel } from '@nestjs/common';
export class InternalLogFilter extends ConsoleLogger {
static contextsToIgnore = [
+ 'NestFactory',
'InstanceLoader',
'RoutesResolver',
'RouterExplorer',
@@ -11,14 +12,23 @@ export class InternalLogFilter extends ConsoleLogger {
private allowedLogLevels: string[];
constructor() {
- super();
const isProduction = process.env.NODE_ENV === 'production';
+ super({
+ json: isProduction,
+ });
const isDebugMode = process.env.DEBUG_MODE === 'true';
-
+
if (isProduction && !isDebugMode) {
- this.allowedLogLevels = ['log', 'error', 'fatal'];
+ this.allowedLogLevels = ['info', 'error', 'fatal'];
} else {
- this.allowedLogLevels = ['log', 'debug', 'verbose', 'warn', 'error', 'fatal'];
+ this.allowedLogLevels = [
+ 'info',
+ 'debug',
+ 'verbose',
+ 'warn',
+ 'error',
+ 'fatal',
+ ];
}
}
@@ -28,9 +38,8 @@ export class InternalLogFilter extends ConsoleLogger {
log(_: any, context?: string): void {
if (
- this.isLogLevelAllowed('log') &&
- (process.env.NODE_ENV !== 'production' ||
- !InternalLogFilter.contextsToIgnore.includes(context))
+ this.isLogLevelAllowed('info') &&
+ !InternalLogFilter.contextsToIgnore.includes(context)
) {
super.log.apply(this, arguments);
}
@@ -59,4 +68,15 @@ export class InternalLogFilter extends ConsoleLogger {
super.verbose.apply(this, arguments);
}
}
+
+ protected printMessages(
+ messages: unknown[],
+ context?: string,
+ logLevel?: LogLevel,
+ writeStreamType?: 'stdout' | 'stderr',
+ errorStack?: unknown,
+ ): void {
+ const level = logLevel === 'log' ? ('info' as LogLevel) : logLevel;
+ super.printMessages(messages, context, level, writeStreamType, errorStack);
+ }
}
diff --git a/apps/server/src/core/attachment/attachment.controller.ts b/apps/server/src/core/attachment/attachment.controller.ts
index cc058ac6..73c9699a 100644
--- a/apps/server/src/core/attachment/attachment.controller.ts
+++ b/apps/server/src/core/attachment/attachment.controller.ts
@@ -17,13 +17,13 @@ import {
UseInterceptors,
} from '@nestjs/common';
import { AttachmentService } from './services/attachment.service';
-import { FastifyReply } from 'fastify';
+import { FastifyReply, FastifyRequest } from 'fastify';
import { FileInterceptor } from '../../common/interceptors/file.interceptor';
import * as bytes from 'bytes';
import { AuthUser } from '../../common/decorators/auth-user.decorator';
import { AuthWorkspace } from '../../common/decorators/auth-workspace.decorator';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
-import { User, Workspace } from '@docmost/db/types/entity.types';
+import { Attachment, User, Workspace } from '@docmost/db/types/entity.types';
import { StorageService } from '../../integrations/storage/storage.service';
import {
getAttachmentFolderPath,
@@ -151,6 +151,7 @@ export class AttachmentController {
@UseGuards(JwtAuthGuard)
@Get('/files/:fileId/:fileName')
async getFile(
+ @Req() req: FastifyRequest,
@Res() res: FastifyReply,
@AuthUser() user: User,
@AuthWorkspace() workspace: Workspace,
@@ -181,22 +182,7 @@ export class AttachmentController {
}
try {
- const fileStream = await this.storageService.readStream(
- attachment.filePath,
- );
- res.headers({
- 'Content-Type': attachment.mimeType,
- 'Cache-Control': 'private, max-age=3600',
- });
-
- if (!inlineFileExtensions.includes(attachment.fileExt)) {
- res.header(
- 'Content-Disposition',
- `attachment; filename="${encodeURIComponent(attachment.fileName)}"`,
- );
- }
-
- return res.send(fileStream);
+ return await this.sendFileResponse(req, res, attachment, 'private');
} catch (err) {
this.logger.error(err);
throw new NotFoundException('File not found');
@@ -205,6 +191,7 @@ export class AttachmentController {
@Get('/files/public/:fileId/:fileName')
async getPublicFile(
+ @Req() req: FastifyRequest,
@Res() res: FastifyReply,
@AuthWorkspace() workspace: Workspace,
@Param('fileId') fileId: string,
@@ -243,22 +230,7 @@ export class AttachmentController {
}
try {
- const fileStream = await this.storageService.readStream(
- attachment.filePath,
- );
- res.headers({
- 'Content-Type': attachment.mimeType,
- 'Cache-Control': 'public, max-age=3600',
- });
-
- if (!inlineFileExtensions.includes(attachment.fileExt)) {
- res.header(
- 'Content-Disposition',
- `attachment; filename="${encodeURIComponent(attachment.fileName)}"`,
- );
- }
-
- return res.send(fileStream);
+ return await this.sendFileResponse(req, res, attachment, 'public');
} catch (err) {
this.logger.error(err);
throw new NotFoundException('File not found');
@@ -433,4 +405,70 @@ export class AttachmentController {
return;
}
}
+
+ private async sendFileResponse(
+ req: FastifyRequest,
+ res: FastifyReply,
+ attachment: Attachment,
+ cacheScope: 'private' | 'public',
+ ) {
+ const fileSize = Number(attachment.fileSize);
+ const rangeHeader = req.headers.range;
+
+ res.header('Accept-Ranges', 'bytes');
+
+ if (!inlineFileExtensions.includes(attachment.fileExt)) {
+ res.header(
+ 'Content-Disposition',
+ `attachment; filename="${encodeURIComponent(attachment.fileName)}"`,
+ );
+ }
+
+ if (rangeHeader && fileSize) {
+ const match = rangeHeader.match(/bytes=(\d+)-(\d*)/);
+ if (match) {
+ const start = parseInt(match[1], 10);
+ const end = match[2]
+ ? Math.min(parseInt(match[2], 10), fileSize - 1)
+ : fileSize - 1;
+
+ if (start >= fileSize || start > end) {
+ res.status(416);
+ res.header('Content-Range', `bytes */${fileSize}`);
+ return res.send();
+ }
+
+ const fileStream = await this.storageService.readRangeStream(
+ attachment.filePath,
+ { start, end },
+ );
+
+ res.status(206);
+ res.headers({
+ 'Content-Type': attachment.mimeType,
+ 'Content-Range': `bytes ${start}-${end}/${fileSize}`,
+ 'Content-Length': end - start + 1,
+ 'Cache-Control': `${cacheScope}, max-age=3600`,
+ });
+
+ return res.send(fileStream);
+ }
+ }
+
+ const fileStream = await this.storageService.readStream(
+ attachment.filePath,
+ );
+
+ res.headers({
+ 'Content-Type': attachment.mimeType,
+ 'Cache-Control': `${cacheScope}, max-age=3600`,
+ });
+
+ const isSvg = attachment.fileExt === '.svg';
+ if (fileSize && !isSvg) {
+ res.header('Content-Length', fileSize);
+ }
+
+ return res.send(fileStream);
+ }
}
diff --git a/apps/server/src/core/attachment/attachment.utils.ts b/apps/server/src/core/attachment/attachment.utils.ts
index 23512002..0bddee1a 100644
--- a/apps/server/src/core/attachment/attachment.utils.ts
+++ b/apps/server/src/core/attachment/attachment.utils.ts
@@ -2,7 +2,7 @@ import { MultipartFile } from '@fastify/multipart';
import * as path from 'path';
import { AttachmentType } from './attachment.constants';
import { sanitizeFileName } from '../../common/helpers';
-import * as sharp from 'sharp';
+import { getMimeType } from '../../common/helpers/file.helper';
export interface PreparedFile {
buffer?: Buffer;
@@ -41,7 +41,7 @@ export async function prepareFile(
fileName,
fileSize,
fileExtension,
- mimeType: file.mimetype,
+ mimeType: getMimeType(file.originalname),
multiPartFile: file,
};
} catch (error) {
@@ -77,51 +77,3 @@ export function getAttachmentFolderPath(
}
export const validAttachmentTypes = Object.values(AttachmentType);
-
-export async function compressAndResizeIcon(
- buffer: Buffer,
- attachmentType?: AttachmentType,
-): Promise {
- try {
- let sharpInstance = sharp(buffer);
- const metadata = await sharpInstance.metadata();
-
- const targetWidth = 300;
- const targetHeight = 300;
-
- // Only resize if image is larger than target dimensions
- if (metadata.width > targetWidth || metadata.height > targetHeight) {
- sharpInstance = sharpInstance.resize(targetWidth, targetHeight, {
- fit: 'inside',
- withoutEnlargement: true,
- });
- }
-
- // Handle based on original format
- if (metadata.format === 'png') {
- // Only flatten avatars to remove transparency
- if (attachmentType === AttachmentType.Avatar) {
- sharpInstance = sharpInstance.flatten({
- background: { r: 255, g: 255, b: 255 },
- });
- }
-
- return await sharpInstance
- .png({
- quality: 85,
- compressionLevel: 6,
- })
- .toBuffer();
- } else {
- return await sharpInstance
- .jpeg({
- quality: 85,
- progressive: true,
- mozjpeg: true,
- })
- .toBuffer();
- }
- } catch (err) {
- throw err;
- }
-}
diff --git a/apps/server/src/core/attachment/services/attachment.service.ts b/apps/server/src/core/attachment/services/attachment.service.ts
index ea94b983..bc6a1e36 100644
--- a/apps/server/src/core/attachment/services/attachment.service.ts
+++ b/apps/server/src/core/attachment/services/attachment.service.ts
@@ -8,7 +8,6 @@ import { Readable } from 'stream';
import { StorageService } from '../../../integrations/storage/storage.service';
import { MultipartFile } from '@fastify/multipart';
import {
- compressAndResizeIcon,
getAttachmentFolderPath,
PreparedFile,
prepareFile,
@@ -99,6 +98,7 @@ export class AttachmentService {
if (isUpdate) {
attachment = await this.attachmentRepo.updateAttachment(
{
+ fileSize: preparedFile.fileSize,
updatedAt: new Date(),
},
attachmentId,
@@ -153,12 +153,6 @@ export class AttachmentService {
const preparedFile: PreparedFile = await prepareFile(filePromise);
validateFileType(preparedFile.fileExtension, validImageExtensions);
- const processedBuffer = await compressAndResizeIcon(
- preparedFile.buffer,
- type,
- );
- preparedFile.buffer = processedBuffer;
- preparedFile.fileSize = processedBuffer.length;
preparedFile.fileName = uuid4() + preparedFile.fileExtension;
const filePath = `${getAttachmentFolderPath(type, workspaceId)}/${preparedFile.fileName}`;
diff --git a/apps/server/src/core/comment/comment.module.ts b/apps/server/src/core/comment/comment.module.ts
index 60a577e8..02cb6d81 100644
--- a/apps/server/src/core/comment/comment.module.ts
+++ b/apps/server/src/core/comment/comment.module.ts
@@ -3,7 +3,6 @@ import { CommentService } from './comment.service';
import { CommentController } from './comment.controller';
@Module({
- imports: [],
controllers: [CommentController],
providers: [CommentService],
exports: [CommentService],
diff --git a/apps/server/src/core/comment/comment.service.ts b/apps/server/src/core/comment/comment.service.ts
index 630605be..91a96554 100644
--- a/apps/server/src/core/comment/comment.service.ts
+++ b/apps/server/src/core/comment/comment.service.ts
@@ -2,8 +2,11 @@ import {
BadRequestException,
ForbiddenException,
Injectable,
+ Logger,
NotFoundException,
} from '@nestjs/common';
+import { InjectQueue } from '@nestjs/bullmq';
+import { Queue } from 'bullmq';
import { CreateCommentDto } from './dto/create-comment.dto';
import { UpdateCommentDto } from './dto/update-comment.dto';
import { CommentRepo } from '@docmost/db/repos/comment/comment.repo';
@@ -11,12 +14,21 @@ import { Comment, Page, User } from '@docmost/db/types/entity.types';
import { PaginationOptions } from '@docmost/db/pagination/pagination-options';
import { PageRepo } from '@docmost/db/repos/page/page.repo';
import { CursorPaginationResult } from '@docmost/db/pagination/cursor-pagination';
+import { QueueJob, QueueName } from '../../integrations/queue/constants';
+import { extractUserMentionIdsFromJson } from '../../common/helpers/prosemirror/utils';
+import { ICommentNotificationJob } from '../../integrations/queue/constants/queue.interface';
@Injectable()
export class CommentService {
+ private readonly logger = new Logger(CommentService.name);
+
constructor(
private commentRepo: CommentRepo,
private pageRepo: PageRepo,
+ @InjectQueue(QueueName.GENERAL_QUEUE)
+ private generalQueue: Queue,
+ @InjectQueue(QueueName.NOTIFICATION_QUEUE)
+ private notificationQueue: Queue,
) {}
async findById(commentId: string) {
@@ -51,7 +63,7 @@ export class CommentService {
}
}
- return await this.commentRepo.insertComment({
+ const comment = await this.commentRepo.insertComment({
pageId: page.id,
content: commentContent,
selection: createCommentDto?.selection?.substring(0, 250),
@@ -61,6 +73,33 @@ export class CommentService {
workspaceId: workspaceId,
spaceId: page.spaceId,
});
+
+ this.generalQueue
+ .add(QueueJob.ADD_PAGE_WATCHERS, {
+ userIds: [userId],
+ pageId: page.id,
+ spaceId: page.spaceId,
+ workspaceId,
+ })
+ .catch((err) =>
+ this.logger.warn(`Failed to queue add-page-watchers: ${err.message}`),
+ );
+
+ const isReply = !!createCommentDto.parentCommentId;
+
+ await this.queueCommentNotification(
+ commentContent,
+ [],
+ comment.id,
+ page.id,
+ page.spaceId,
+ workspaceId,
+ userId,
+ !isReply,
+ createCommentDto.parentCommentId,
+ );
+
+ return comment;
}
async findByPageId(
@@ -87,6 +126,8 @@ export class CommentService {
throw new ForbiddenException('You can only edit your own comments');
}
+ const oldMentionIds = extractUserMentionIdsFromJson(comment.content);
+
const editedAt = new Date();
await this.commentRepo.updateComment(
@@ -97,10 +138,57 @@ export class CommentService {
},
comment.id,
);
+
+ await this.queueCommentNotification(
+ commentContent,
+ oldMentionIds,
+ comment.id,
+ comment.pageId,
+ comment.spaceId,
+ comment.workspaceId,
+ authUser.id,
+ false,
+ );
+
comment.content = commentContent;
comment.editedAt = editedAt;
comment.updatedAt = editedAt;
return comment;
}
+
+ private async queueCommentNotification(
+ content: any,
+ oldMentionIds: string[],
+ commentId: string,
+ pageId: string,
+ spaceId: string,
+ workspaceId: string,
+ actorId: string,
+ notifyWatchers: boolean,
+ parentCommentId?: string,
+ ) {
+ const mentionedUserIds = extractUserMentionIdsFromJson(content);
+ const newMentionIds = mentionedUserIds.filter(
+ (id) => id !== actorId && !oldMentionIds.includes(id),
+ );
+
+ if (newMentionIds.length === 0 && !notifyWatchers && !parentCommentId) return;
+
+ const jobData: ICommentNotificationJob = {
+ commentId,
+ parentCommentId,
+ pageId,
+ spaceId,
+ workspaceId,
+ actorId,
+ mentionedUserIds: newMentionIds,
+ notifyWatchers,
+ };
+
+ await this.notificationQueue.add(
+ QueueJob.COMMENT_NOTIFICATION,
+ jobData,
+ );
+ }
}
diff --git a/apps/server/src/core/core.module.ts b/apps/server/src/core/core.module.ts
index f7f4f785..f8b75cd0 100644
--- a/apps/server/src/core/core.module.ts
+++ b/apps/server/src/core/core.module.ts
@@ -16,6 +16,8 @@ import { GroupModule } from './group/group.module';
import { CaslModule } from './casl/casl.module';
import { DomainMiddleware } from '../common/middlewares/domain.middleware';
import { ShareModule } from './share/share.module';
+import { NotificationModule } from './notification/notification.module';
+import { WatcherModule } from './watcher/watcher.module';
@Module({
imports: [
@@ -30,6 +32,8 @@ import { ShareModule } from './share/share.module';
GroupModule,
CaslModule,
ShareModule,
+ NotificationModule,
+ WatcherModule,
],
})
export class CoreModule implements NestModule {
diff --git a/apps/server/src/core/group/group.module.ts b/apps/server/src/core/group/group.module.ts
index 41d03a52..7cf35b9b 100644
--- a/apps/server/src/core/group/group.module.ts
+++ b/apps/server/src/core/group/group.module.ts
@@ -4,6 +4,7 @@ import { GroupController } from './group.controller';
import { GroupUserService } from './services/group-user.service';
@Module({
+ imports: [],
controllers: [GroupController],
providers: [GroupService, GroupUserService],
exports: [GroupService, GroupUserService],
diff --git a/apps/server/src/core/group/services/group-user.service.ts b/apps/server/src/core/group/services/group-user.service.ts
index 1c9d1cf8..887f3c53 100644
--- a/apps/server/src/core/group/services/group-user.service.ts
+++ b/apps/server/src/core/group/services/group-user.service.ts
@@ -10,16 +10,21 @@ import { GroupService } from './group.service';
import { KyselyDB, KyselyTransaction } from '@docmost/db/types/kysely.types';
import { InjectKysely } from 'nestjs-kysely';
import { GroupUserRepo } from '@docmost/db/repos/group/group-user.repo';
+import { SpaceMemberRepo } from '@docmost/db/repos/space/space-member.repo';
import { UserRepo } from '@docmost/db/repos/user/user.repo';
+import { executeTx } from '@docmost/db/utils';
+import { WatcherRepo } from '@docmost/db/repos/watcher/watcher.repo';
import { dbOrTx } from '@docmost/db/utils';
@Injectable()
export class GroupUserService {
constructor(
private groupUserRepo: GroupUserRepo,
+ private spaceMemberRepo: SpaceMemberRepo,
private userRepo: UserRepo,
@Inject(forwardRef(() => GroupService))
private groupService: GroupService,
+ private readonly watcherRepo: WatcherRepo,
@InjectKysely() private readonly db: KyselyDB,
) {}
@@ -107,6 +112,18 @@ export class GroupUserService {
throw new BadRequestException('Group member not found');
}
- await this.groupUserRepo.delete(userId, groupId);
+ const spaceIds = await this.spaceMemberRepo.getSpaceIdsByGroupId(groupId);
+
+ // TODO: use queue instead
+ await executeTx(this.db, async (trx) => {
+ await this.groupUserRepo.delete(userId, groupId, { trx });
+
+ for (const spaceId of spaceIds) {
+ await this.watcherRepo.deleteByUsersWithoutSpaceAccess(
+ [userId],
+ spaceId,
+ );
+ }
+ });
}
}
diff --git a/apps/server/src/core/group/services/group.service.ts b/apps/server/src/core/group/services/group.service.ts
index 7db9d940..8c41526d 100644
--- a/apps/server/src/core/group/services/group.service.ts
+++ b/apps/server/src/core/group/services/group.service.ts
@@ -8,18 +8,27 @@ import {
import { CreateGroupDto, DefaultGroup } from '../dto/create-group.dto';
import { PaginationOptions } from '@docmost/db/pagination/pagination-options';
import { UpdateGroupDto } from '../dto/update-group.dto';
-import { KyselyTransaction } from '@docmost/db/types/kysely.types';
+import { KyselyDB, KyselyTransaction } from '@docmost/db/types/kysely.types';
import { GroupRepo } from '@docmost/db/repos/group/group.repo';
+import { GroupUserRepo } from '@docmost/db/repos/group/group-user.repo';
+import { SpaceMemberRepo } from '@docmost/db/repos/space/space-member.repo';
import { Group, InsertableGroup, User } from '@docmost/db/types/entity.types';
import { CursorPaginationResult } from '@docmost/db/pagination/cursor-pagination';
import { GroupUserService } from './group-user.service';
+import { WatcherRepo } from '@docmost/db/repos/watcher/watcher.repo';
+import { executeTx } from '@docmost/db/utils';
+import { InjectKysely } from 'nestjs-kysely';
@Injectable()
export class GroupService {
constructor(
private groupRepo: GroupRepo,
+ private groupUserRepo: GroupUserRepo,
+ private spaceMemberRepo: SpaceMemberRepo,
@Inject(forwardRef(() => GroupUserService))
private groupUserService: GroupUserService,
+ private readonly watcherRepo: WatcherRepo,
+ @InjectKysely() private readonly db: KyselyDB,
) {}
async getGroupInfo(groupId: string, workspaceId: string): Promise {
@@ -68,20 +77,6 @@ export class GroupService {
return createdGroup;
}
- async createDefaultGroup(
- workspaceId: string,
- userId?: string,
- trx?: KyselyTransaction,
- ): Promise {
- const insertableGroup: InsertableGroup = {
- name: DefaultGroup.EVERYONE,
- isDefault: true,
- creatorId: userId ?? null,
- workspaceId: workspaceId,
- };
- return await this.groupRepo.insertGroup(insertableGroup, trx);
- }
-
async updateGroup(
workspaceId: string,
updateGroupDto: UpdateGroupDto,
@@ -141,7 +136,24 @@ export class GroupService {
if (group.isDefault) {
throw new BadRequestException('You cannot delete a default group');
}
- await this.groupRepo.delete(groupId, workspaceId);
+
+ const [userIds, spaceIds] = await Promise.all([
+ this.groupUserRepo.getUserIdsByGroupId(groupId),
+ this.spaceMemberRepo.getSpaceIdsByGroupId(groupId),
+ ]);
+
+ // TODO: use queue instead
+ await executeTx(this.db, async (trx) => {
+ await this.groupRepo.delete(groupId, workspaceId, { trx });
+
+ for (const spaceId of spaceIds) {
+ await this.watcherRepo.deleteByUsersWithoutSpaceAccess(
+ userIds,
+ spaceId,
+ { trx },
+ );
+ }
+ });
}
async findAndValidateGroup(
diff --git a/apps/server/src/core/notification/dto/notification.dto.ts b/apps/server/src/core/notification/dto/notification.dto.ts
new file mode 100644
index 00000000..0b0bde94
--- /dev/null
+++ b/apps/server/src/core/notification/dto/notification.dto.ts
@@ -0,0 +1,13 @@
+import { IsArray, IsOptional, IsUUID } from 'class-validator';
+
+export class NotificationIdDto {
+ @IsUUID()
+ notificationId: string;
+}
+
+export class MarkNotificationsReadDto {
+ @IsArray()
+ @IsUUID(undefined, { each: true })
+ @IsOptional()
+ notificationIds?: string[];
+}
diff --git a/apps/server/src/core/notification/notification.constants.ts b/apps/server/src/core/notification/notification.constants.ts
new file mode 100644
index 00000000..037d099e
--- /dev/null
+++ b/apps/server/src/core/notification/notification.constants.ts
@@ -0,0 +1,9 @@
+export const NotificationType = {
+ COMMENT_USER_MENTION: 'comment.user_mention',
+ COMMENT_CREATED: 'comment.created',
+ COMMENT_RESOLVED: 'comment.resolved',
+ PAGE_USER_MENTION: 'page.user_mention',
+} as const;
+
+export type NotificationType =
+ (typeof NotificationType)[keyof typeof NotificationType];
diff --git a/apps/server/src/core/notification/notification.controller.ts b/apps/server/src/core/notification/notification.controller.ts
new file mode 100644
index 00000000..d041414f
--- /dev/null
+++ b/apps/server/src/core/notification/notification.controller.ts
@@ -0,0 +1,56 @@
+import {
+ Body,
+ Controller,
+ HttpCode,
+ HttpStatus,
+ Post,
+ UseGuards,
+} from '@nestjs/common';
+import { NotificationService } from './notification.service';
+import { AuthUser } from '../../common/decorators/auth-user.decorator';
+import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
+import { PaginationOptions } from '@docmost/db/pagination/pagination-options';
+import { User } from '@docmost/db/types/entity.types';
+import { MarkNotificationsReadDto } from './dto/notification.dto';
+
+@UseGuards(JwtAuthGuard)
+@Controller('notifications')
+export class NotificationController {
+ constructor(private readonly notificationService: NotificationService) {}
+
+ @HttpCode(HttpStatus.OK)
+ @Post('/')
+ async getNotifications(
+ @Body() pagination: PaginationOptions,
+ @AuthUser() user: User,
+ ) {
+ return this.notificationService.findByUserId(user.id, pagination);
+ }
+
+ @HttpCode(HttpStatus.OK)
+ @Post('unread-count')
+ async getUnreadCount(@AuthUser() user: User) {
+ const count = await this.notificationService.getUnreadCount(user.id);
+ return { count };
+ }
+
+ @HttpCode(HttpStatus.OK)
+ @Post('mark-read')
+ async markAsRead(
+ @Body() dto: MarkNotificationsReadDto,
+ @AuthUser() user: User,
+ ) {
+ if (dto.notificationIds?.length) {
+ await this.notificationService.markMultipleAsRead(
+ dto.notificationIds,
+ user.id,
+ );
+ }
+ }
+
+ @HttpCode(HttpStatus.OK)
+ @Post('mark-all-read')
+ async markAllAsRead(@AuthUser() user: User) {
+ await this.notificationService.markAllAsRead(user.id);
+ }
+}
diff --git a/apps/server/src/core/notification/notification.module.ts b/apps/server/src/core/notification/notification.module.ts
new file mode 100644
index 00000000..7995693b
--- /dev/null
+++ b/apps/server/src/core/notification/notification.module.ts
@@ -0,0 +1,20 @@
+import { Module } from '@nestjs/common';
+import { NotificationService } from './notification.service';
+import { NotificationController } from './notification.controller';
+import { NotificationProcessor } from './notification.processor';
+import { CommentNotificationService } from './services/comment.notification';
+import { PageNotificationService } from './services/page.notification';
+import { WsModule } from '../../ws/ws.module';
+
+@Module({
+ imports: [WsModule],
+ controllers: [NotificationController],
+ providers: [
+ NotificationService,
+ NotificationProcessor,
+ CommentNotificationService,
+ PageNotificationService,
+ ],
+ exports: [NotificationService],
+})
+export class NotificationModule {}
diff --git a/apps/server/src/core/notification/notification.processor.ts b/apps/server/src/core/notification/notification.processor.ts
new file mode 100644
index 00000000..e9c0d1f9
--- /dev/null
+++ b/apps/server/src/core/notification/notification.processor.ts
@@ -0,0 +1,101 @@
+import { Logger, OnModuleDestroy } from '@nestjs/common';
+import { OnWorkerEvent, Processor, WorkerHost } from '@nestjs/bullmq';
+import { Job } from 'bullmq';
+import { InjectKysely } from 'nestjs-kysely';
+import { KyselyDB } from '@docmost/db/types/kysely.types';
+import { QueueJob, QueueName } from '../../integrations/queue/constants';
+import {
+ ICommentNotificationJob,
+ ICommentResolvedNotificationJob,
+ IPageMentionNotificationJob,
+} from '../../integrations/queue/constants/queue.interface';
+import { CommentNotificationService } from './services/comment.notification';
+import { PageNotificationService } from './services/page.notification';
+import { DomainService } from '../../integrations/environment/domain.service';
+
+@Processor(QueueName.NOTIFICATION_QUEUE)
+export class NotificationProcessor
+ extends WorkerHost
+ implements OnModuleDestroy
+{
+ private readonly logger = new Logger(NotificationProcessor.name);
+
+ constructor(
+ private readonly commentNotificationService: CommentNotificationService,
+ private readonly pageNotificationService: PageNotificationService,
+ private readonly domainService: DomainService,
+ @InjectKysely() private readonly db: KyselyDB,
+ ) {
+ super();
+ }
+
+ async process(
+ job: Job<
+ | ICommentNotificationJob
+ | ICommentResolvedNotificationJob
+ | IPageMentionNotificationJob,
+ void
+ >,
+ ): Promise {
+ try {
+ const workspaceId = (job.data as { workspaceId: string }).workspaceId;
+ const appUrl = await this.getWorkspaceUrl(workspaceId);
+
+ switch (job.name) {
+ case QueueJob.COMMENT_NOTIFICATION: {
+ await this.commentNotificationService.processComment(
+ job.data as ICommentNotificationJob,
+ appUrl,
+ );
+ break;
+ }
+
+ case QueueJob.COMMENT_RESOLVED_NOTIFICATION: {
+ await this.commentNotificationService.processResolved(
+ job.data as ICommentResolvedNotificationJob,
+ appUrl,
+ );
+ break;
+ }
+
+ case QueueJob.PAGE_MENTION_NOTIFICATION: {
+ await this.pageNotificationService.processPageMention(
+ job.data as IPageMentionNotificationJob,
+ appUrl,
+ );
+ break;
+ }
+
+ default:
+ this.logger.warn(`Unknown notification job: ${job.name}`);
+ }
+ } catch (err: unknown) {
+ const message = err instanceof Error ? err.message : 'Unknown error';
+ this.logger.error(`Failed to process ${job.name}: ${message}`);
+ throw err;
+ }
+ }
+
+ private async getWorkspaceUrl(workspaceId: string): Promise {
+ const workspace = await this.db
+ .selectFrom('workspaces')
+ .select('hostname')
+ .where('id', '=', workspaceId)
+ .executeTakeFirst();
+
+ return this.domainService.getUrl(workspace?.hostname);
+ }
+
+ @OnWorkerEvent('failed')
+ onError(job: Job) {
+ this.logger.error(
+ `Error processing ${job.name} job. Reason: ${job.failedReason}`,
+ );
+ }
+
+ async onModuleDestroy(): Promise {
+ if (this.worker) {
+ await this.worker.close();
+ }
+ }
+}
diff --git a/apps/server/src/core/notification/notification.service.ts b/apps/server/src/core/notification/notification.service.ts
new file mode 100644
index 00000000..493b673e
--- /dev/null
+++ b/apps/server/src/core/notification/notification.service.ts
@@ -0,0 +1,80 @@
+import { Injectable, Logger } from '@nestjs/common';
+import { InjectKysely } from 'nestjs-kysely';
+import { KyselyDB } from '@docmost/db/types/kysely.types';
+import { NotificationRepo } from '@docmost/db/repos/notification/notification.repo';
+import { InsertableNotification } from '@docmost/db/types/entity.types';
+import { PaginationOptions } from '@docmost/db/pagination/pagination-options';
+import { WsGateway } from '../../ws/ws.gateway';
+import { MailService } from '../../integrations/mail/mail.service';
+
+@Injectable()
+export class NotificationService {
+ private readonly logger = new Logger(NotificationService.name);
+
+ constructor(
+ private readonly notificationRepo: NotificationRepo,
+ private readonly wsGateway: WsGateway,
+ private readonly mailService: MailService,
+ @InjectKysely() private readonly db: KyselyDB,
+ ) {}
+
+ async create(data: InsertableNotification) {
+ const notification = await this.notificationRepo.insert(data);
+
+ this.wsGateway.server
+ .to(`user-${data.userId}`)
+ .emit('notification', { id: notification.id, type: notification.type });
+
+ return notification;
+ }
+
+ async findByUserId(userId: string, pagination: PaginationOptions) {
+ return this.notificationRepo.findByUserId(userId, pagination);
+ }
+
+ async getUnreadCount(userId: string) {
+ return this.notificationRepo.getUnreadCount(userId);
+ }
+
+ async markAsRead(notificationId: string, userId: string) {
+ return this.notificationRepo.markAsRead(notificationId, userId);
+ }
+
+ async markMultipleAsRead(notificationIds: string[], userId: string) {
+ return this.notificationRepo.markMultipleAsRead(notificationIds, userId);
+ }
+
+ async markAllAsRead(userId: string) {
+ return this.notificationRepo.markAllAsRead(userId);
+ }
+
+ async queueEmail(
+ userId: string,
+ notificationId: string,
+ subject: string,
+ template: any,
+ ) {
+ try {
+ const user = await this.db
+ .selectFrom('users')
+ .select(['email'])
+ .where('id', '=', userId)
+ .where('deletedAt', 'is', null)
+ .executeTakeFirst();
+
+ if (!user?.email) return;
+
+ await this.mailService.sendToQueue({
+ to: user.email,
+ subject,
+ template,
+ notificationId,
+ });
+ } catch (err: unknown) {
+ const message = err instanceof Error ? err.message : 'Unknown error';
+ this.logger.error(
+ `Failed to queue email for notification ${notificationId}: ${message}`,
+ );
+ }
+ }
+}
diff --git a/apps/server/src/core/notification/services/comment.notification.ts b/apps/server/src/core/notification/services/comment.notification.ts
new file mode 100644
index 00000000..5c6b5bd5
--- /dev/null
+++ b/apps/server/src/core/notification/services/comment.notification.ts
@@ -0,0 +1,219 @@
+import { Injectable, Logger } from '@nestjs/common';
+import { InjectKysely } from 'nestjs-kysely';
+import { KyselyDB } from '@docmost/db/types/kysely.types';
+import {
+ ICommentNotificationJob,
+ ICommentResolvedNotificationJob,
+} from '../../../integrations/queue/constants/queue.interface';
+import { NotificationService } from '../notification.service';
+import { NotificationType } from '../notification.constants';
+import { SpaceMemberRepo } from '@docmost/db/repos/space/space-member.repo';
+import { WatcherRepo } from '@docmost/db/repos/watcher/watcher.repo';
+import { CommentMentionEmail } from '@docmost/transactional/emails/comment-mention-email';
+import { CommentCreateEmail } from '@docmost/transactional/emails/comment-created-email';
+import { CommentResolvedEmail } from '@docmost/transactional/emails/comment-resolved-email';
+import { getPageTitle } from '../../../common/helpers';
+
+@Injectable()
+export class CommentNotificationService {
+ private readonly logger = new Logger(CommentNotificationService.name);
+
+ constructor(
+ @InjectKysely() private readonly db: KyselyDB,
+ private readonly notificationService: NotificationService,
+ private readonly spaceMemberRepo: SpaceMemberRepo,
+ private readonly watcherRepo: WatcherRepo,
+ ) {}
+
+ async processComment(data: ICommentNotificationJob, appUrl: string) {
+ const {
+ commentId,
+ parentCommentId,
+ pageId,
+ spaceId,
+ workspaceId,
+ actorId,
+ mentionedUserIds,
+ notifyWatchers,
+ } = data;
+
+ const context = await this.getCommentContext(
+ actorId,
+ pageId,
+ spaceId,
+ commentId,
+ appUrl,
+ );
+ if (!context) return;
+
+ const { actor, pageTitle, pageUrl } = context;
+ const notifiedUserIds = new Set();
+ notifiedUserIds.add(actorId);
+
+ const recipientIds = parentCommentId
+ ? await this.getThreadParticipantIds(parentCommentId)
+ : notifyWatchers
+ ? await this.watcherRepo.getPageWatcherIds(pageId)
+ : [];
+
+ const allCandidateIds = [
+ ...new Set([...mentionedUserIds, ...recipientIds]),
+ ];
+ const usersWithAccess =
+ await this.spaceMemberRepo.getUserIdsWithSpaceAccess(
+ allCandidateIds,
+ spaceId,
+ );
+
+ for (const userId of mentionedUserIds) {
+ if (!usersWithAccess.has(userId)) continue;
+
+ const notification = await this.notificationService.create({
+ userId,
+ workspaceId,
+ type: NotificationType.COMMENT_USER_MENTION,
+ actorId,
+ pageId,
+ spaceId,
+ commentId,
+ });
+
+ await this.notificationService.queueEmail(
+ userId,
+ notification.id,
+ `${actor.name} mentioned you in a comment`,
+ CommentMentionEmail({ actorName: actor.name, pageTitle, pageUrl }),
+ );
+
+ notifiedUserIds.add(userId);
+ }
+
+ for (const recipientId of recipientIds) {
+ if (notifiedUserIds.has(recipientId)) continue;
+ if (!usersWithAccess.has(recipientId)) continue;
+
+ const notification = await this.notificationService.create({
+ userId: recipientId,
+ workspaceId,
+ type: NotificationType.COMMENT_CREATED,
+ actorId,
+ pageId,
+ spaceId,
+ commentId,
+ });
+
+ await this.notificationService.queueEmail(
+ recipientId,
+ notification.id,
+ `${actor.name} commented on ${pageTitle}`,
+ CommentCreateEmail({ actorName: actor.name, pageTitle, pageUrl }),
+ );
+ }
+ }
+
+ async processResolved(data: ICommentResolvedNotificationJob, appUrl: string) {
+ const {
+ commentId,
+ commentCreatorId,
+ pageId,
+ spaceId,
+ workspaceId,
+ actorId,
+ } = data;
+
+ if (commentCreatorId === actorId) return;
+
+ const context = await this.getCommentContext(
+ actorId,
+ pageId,
+ spaceId,
+ commentId,
+ appUrl,
+ );
+ if (!context) return;
+
+ const { actor, pageTitle, pageUrl } = context;
+
+ const roles = await this.spaceMemberRepo.getUserSpaceRoles(
+ commentCreatorId,
+ spaceId,
+ );
+
+ if (!roles) {
+ this.logger.debug(
+ `Skipping resolved notification for user ${commentCreatorId}: no access to space ${spaceId}`,
+ );
+ return;
+ }
+
+ const notification = await this.notificationService.create({
+ userId: commentCreatorId,
+ workspaceId,
+ type: NotificationType.COMMENT_RESOLVED,
+ actorId,
+ pageId,
+ spaceId,
+ commentId,
+ });
+
+ const subject = `${actor.name} resolved a comment on ${pageTitle}`;
+
+ await this.notificationService.queueEmail(
+ commentCreatorId,
+ notification.id,
+ subject,
+ CommentResolvedEmail({ actorName: actor.name, pageTitle, pageUrl }),
+ );
+ }
+
+ private async getThreadParticipantIds(
+ parentCommentId: string,
+ ): Promise {
+ const participants = await this.db
+ .selectFrom('comments')
+ .select('creatorId')
+ .where((eb) =>
+ eb.or([
+ eb('id', '=', parentCommentId),
+ eb('parentCommentId', '=', parentCommentId),
+ ]),
+ )
+ .execute();
+
+ return [...new Set(participants.map((p) => p.creatorId))];
+ }
+
+ private async getCommentContext(
+ actorId: string,
+ pageId: string,
+ spaceId: string,
+ commentId: string,
+ appUrl: string,
+ ) {
+ const [actor, page, space] = await Promise.all([
+ this.db
+ .selectFrom('users')
+ .select(['id', 'name'])
+ .where('id', '=', actorId)
+ .executeTakeFirst(),
+ this.db
+ .selectFrom('pages')
+ .select(['id', 'title', 'slugId'])
+ .where('id', '=', pageId)
+ .executeTakeFirst(),
+ this.db
+ .selectFrom('spaces')
+ .select(['id', 'slug'])
+ .where('id', '=', spaceId)
+ .executeTakeFirst(),
+ ]);
+
+ if (!actor || !page || !space) {
+ return null;
+ }
+
+ const pageUrl = `${appUrl}/s/${space.slug}/p/${page.slugId}`;
+
+ return { actor, pageTitle: getPageTitle(page.title), pageUrl };
+ }
+}
diff --git a/apps/server/src/core/notification/services/page.notification.ts b/apps/server/src/core/notification/services/page.notification.ts
new file mode 100644
index 00000000..40bd3544
--- /dev/null
+++ b/apps/server/src/core/notification/services/page.notification.ts
@@ -0,0 +1,132 @@
+import { Injectable } from '@nestjs/common';
+import { InjectKysely } from 'nestjs-kysely';
+import { KyselyDB } from '@docmost/db/types/kysely.types';
+import { IPageMentionNotificationJob } from '../../../integrations/queue/constants/queue.interface';
+import { NotificationService } from '../notification.service';
+import { NotificationType } from '../notification.constants';
+import { SpaceMemberRepo } from '@docmost/db/repos/space/space-member.repo';
+import { PageMentionEmail } from '@docmost/transactional/emails/page-mention-email';
+import { getPageTitle } from '../../../common/helpers';
+
+@Injectable()
+export class PageNotificationService {
+ constructor(
+ @InjectKysely() private readonly db: KyselyDB,
+ private readonly notificationService: NotificationService,
+ private readonly spaceMemberRepo: SpaceMemberRepo,
+ ) {}
+
+ async processPageMention(data: IPageMentionNotificationJob, appUrl: string) {
+ const { userMentions, oldMentionedUserIds, pageId, spaceId, workspaceId } =
+ data;
+
+ const oldIds = new Set(oldMentionedUserIds);
+ const newMentions = userMentions.filter(
+ (m) => !oldIds.has(m.userId) && m.creatorId !== m.userId,
+ );
+
+ if (newMentions.length === 0) return;
+
+ const candidateUserIds = newMentions.map((m) => m.userId);
+ const usersWithAccess =
+ await this.spaceMemberRepo.getUserIdsWithSpaceAccess(
+ candidateUserIds,
+ spaceId,
+ );
+
+ const accessibleMentions = newMentions.filter((m) =>
+ usersWithAccess.has(m.userId),
+ );
+ if (accessibleMentions.length === 0) return;
+
+ const mentionsByCreator = new Map<
+ string,
+ { userId: string; mentionId: string }[]
+ >();
+ for (const m of accessibleMentions) {
+ const list = mentionsByCreator.get(m.creatorId) || [];
+ list.push({ userId: m.userId, mentionId: m.mentionId });
+ mentionsByCreator.set(m.creatorId, list);
+ }
+
+ for (const [actorId, mentions] of mentionsByCreator) {
+ await this.notifyMentionedUsers(
+ mentions,
+ actorId,
+ pageId,
+ spaceId,
+ workspaceId,
+ appUrl,
+ );
+ }
+ }
+
+ private async notifyMentionedUsers(
+ mentions: { userId: string; mentionId: string }[],
+ actorId: string,
+ pageId: string,
+ spaceId: string,
+ workspaceId: string,
+ appUrl: string,
+ ) {
+ const context = await this.getPageContext(actorId, pageId, spaceId, appUrl);
+ if (!context) return;
+
+ const { actor, pageTitle, basePageUrl } = context;
+
+ for (const { userId, mentionId } of mentions) {
+ const notification = await this.notificationService.create({
+ userId,
+ workspaceId,
+ type: NotificationType.PAGE_USER_MENTION,
+ actorId,
+ pageId,
+ spaceId,
+ data: { mentionId },
+ });
+
+ const pageUrl = `${basePageUrl}`;
+ const subject = `${actor.name} mentioned you in ${pageTitle}`;
+
+ await this.notificationService.queueEmail(
+ userId,
+ notification.id,
+ subject,
+ PageMentionEmail({ actorName: actor.name, pageTitle, pageUrl }),
+ );
+ }
+ }
+
+ private async getPageContext(
+ actorId: string,
+ pageId: string,
+ spaceId: string,
+ appUrl: string,
+ ) {
+ const [actor, page, space] = await Promise.all([
+ this.db
+ .selectFrom('users')
+ .select(['id', 'name'])
+ .where('id', '=', actorId)
+ .executeTakeFirst(),
+ this.db
+ .selectFrom('pages')
+ .select(['id', 'title', 'slugId'])
+ .where('id', '=', pageId)
+ .executeTakeFirst(),
+ this.db
+ .selectFrom('spaces')
+ .select(['id', 'slug'])
+ .where('id', '=', spaceId)
+ .executeTakeFirst(),
+ ]);
+
+ if (!actor || !page || !space) {
+ return null;
+ }
+
+ const basePageUrl = `${appUrl}/s/${space.slug}/p/${page.slugId}`;
+
+ return { actor, pageTitle: getPageTitle(page.title), basePageUrl };
+ }
+}
diff --git a/apps/server/src/core/page/dto/create-page.dto.ts b/apps/server/src/core/page/dto/create-page.dto.ts
index 397e4a42..5cf71e5a 100644
--- a/apps/server/src/core/page/dto/create-page.dto.ts
+++ b/apps/server/src/core/page/dto/create-page.dto.ts
@@ -1,4 +1,13 @@
-import { IsOptional, IsString, IsUUID } from 'class-validator';
+import {
+ IsIn,
+ IsOptional,
+ IsString,
+ IsUUID,
+ ValidateIf,
+} from 'class-validator';
+import { Transform } from 'class-transformer';
+
+export type ContentFormat = 'json' | 'markdown' | 'html';
export class CreatePageDto {
@IsOptional()
@@ -15,4 +24,12 @@ export class CreatePageDto {
@IsUUID()
spaceId: string;
+
+ @IsOptional()
+ content?: string | object;
+
+ @ValidateIf((o) => o.content !== undefined)
+ @Transform(({ value }) => value?.toLowerCase() ?? 'json')
+ @IsIn(['json', 'markdown', 'html'])
+ format?: ContentFormat;
}
diff --git a/apps/server/src/core/page/dto/page.dto.ts b/apps/server/src/core/page/dto/page.dto.ts
index e897d3a5..c53f8ade 100644
--- a/apps/server/src/core/page/dto/page.dto.ts
+++ b/apps/server/src/core/page/dto/page.dto.ts
@@ -1,10 +1,14 @@
import {
IsBoolean,
+ IsIn,
IsNotEmpty,
IsOptional,
IsString,
IsUUID,
} from 'class-validator';
+import { Transform } from 'class-transformer';
+
+import { ContentFormat } from './create-page.dto';
export class PageIdDto {
@IsString()
@@ -30,6 +34,11 @@ export class PageInfoDto extends PageIdDto {
@IsOptional()
@IsBoolean()
includeContent: boolean;
+
+ @IsOptional()
+ @Transform(({ value }) => value?.toLowerCase())
+ @IsIn(['json', 'markdown', 'html'])
+ format?: ContentFormat;
}
export class DeletePageDto extends PageIdDto {
diff --git a/apps/server/src/core/page/dto/update-page.dto.ts b/apps/server/src/core/page/dto/update-page.dto.ts
index 7bd2e2a6..026b3076 100644
--- a/apps/server/src/core/page/dto/update-page.dto.ts
+++ b/apps/server/src/core/page/dto/update-page.dto.ts
@@ -1,8 +1,24 @@
import { PartialType } from '@nestjs/mapped-types';
-import { CreatePageDto } from './create-page.dto';
-import { IsString } from 'class-validator';
+import { CreatePageDto, ContentFormat } from './create-page.dto';
+import { IsIn, IsOptional, IsString, ValidateIf } from 'class-validator';
+import { Transform } from 'class-transformer';
+
+export type ContentOperation = 'append' | 'prepend' | 'replace';
export class UpdatePageDto extends PartialType(CreatePageDto) {
@IsString()
pageId: string;
+
+ @IsOptional()
+ content?: string | object;
+
+ @ValidateIf((o) => o.content !== undefined)
+ @Transform(({ value }) => value?.toLowerCase())
+ @IsIn(['append', 'prepend', 'replace'])
+ operation?: ContentOperation;
+
+ @ValidateIf((o) => o.content !== undefined)
+ @Transform(({ value }) => value?.toLowerCase() ?? 'json')
+ @IsIn(['json', 'markdown', 'html'])
+ format?: ContentFormat;
}
diff --git a/apps/server/src/core/page/page.controller.ts b/apps/server/src/core/page/page.controller.ts
index 97275440..e1227f28 100644
--- a/apps/server/src/core/page/page.controller.ts
+++ b/apps/server/src/core/page/page.controller.ts
@@ -35,6 +35,10 @@ import { PageRepo } from '@docmost/db/repos/page/page.repo';
import { RecentPageDto } from './dto/recent-page.dto';
import { DuplicatePageDto } from './dto/duplicate-page.dto';
import { DeletedPageDto } from './dto/deleted-page.dto';
+import {
+ jsonToHtml,
+ jsonToMarkdown,
+} from '../../collaboration/collaboration.util';
@UseGuards(JwtAuthGuard)
@Controller('pages')
@@ -66,6 +70,17 @@ export class PageController {
throw new ForbiddenException();
}
+ if (dto.format && dto.format !== 'json' && page.content) {
+ const contentOutput =
+ dto.format === 'markdown'
+ ? jsonToMarkdown(page.content)
+ : jsonToHtml(page.content);
+ return {
+ ...page,
+ content: contentOutput,
+ };
+ }
+
return page;
}
@@ -84,7 +99,25 @@ export class PageController {
throw new ForbiddenException();
}
- return this.pageService.create(user.id, workspace.id, createPageDto);
+ const page = await this.pageService.create(
+ user.id,
+ workspace.id,
+ createPageDto,
+ );
+
+ if (
+ createPageDto.format &&
+ createPageDto.format !== 'json' &&
+ page.content
+ ) {
+ const contentOutput =
+ createPageDto.format === 'markdown'
+ ? jsonToMarkdown(page.content)
+ : jsonToHtml(page.content);
+ return { ...page, content: contentOutput };
+ }
+
+ return page;
}
@HttpCode(HttpStatus.OK)
@@ -101,7 +134,25 @@ export class PageController {
throw new ForbiddenException();
}
- return this.pageService.update(page, updatePageDto, user.id);
+ const updatedPage = await this.pageService.update(
+ page,
+ updatePageDto,
+ user,
+ );
+
+ if (
+ updatePageDto.format &&
+ updatePageDto.format !== 'json' &&
+ updatedPage.content
+ ) {
+ const contentOutput =
+ updatePageDto.format === 'markdown'
+ ? jsonToMarkdown(updatedPage.content)
+ : jsonToHtml(updatedPage.content);
+ return { ...updatedPage, content: contentOutput };
+ }
+
+ return updatedPage;
}
@HttpCode(HttpStatus.OK)
@@ -215,7 +266,6 @@ export class PageController {
}
}
- // TODO: scope to workspaces
@HttpCode(HttpStatus.OK)
@Post('/history')
async getPageHistory(
diff --git a/apps/server/src/core/page/page.module.ts b/apps/server/src/core/page/page.module.ts
index 9dfba84a..a2042279 100644
--- a/apps/server/src/core/page/page.module.ts
+++ b/apps/server/src/core/page/page.module.ts
@@ -4,11 +4,13 @@ import { PageController } from './page.controller';
import { PageHistoryService } from './services/page-history.service';
import { TrashCleanupService } from './services/trash-cleanup.service';
import { StorageModule } from '../../integrations/storage/storage.module';
+import { CollaborationModule } from '../../collaboration/collaboration.module';
+import { WatcherModule } from '../watcher/watcher.module';
@Module({
controllers: [PageController],
providers: [PageService, PageHistoryService, TrashCleanupService],
exports: [PageService, PageHistoryService],
- imports: [StorageModule],
+ imports: [StorageModule, CollaborationModule, WatcherModule],
})
export class PageModule {}
diff --git a/apps/server/src/core/page/services/page-history.service.ts b/apps/server/src/core/page/services/page-history.service.ts
index a3e96639..9155638f 100644
--- a/apps/server/src/core/page/services/page-history.service.ts
+++ b/apps/server/src/core/page/services/page-history.service.ts
@@ -9,7 +9,9 @@ export class PageHistoryService {
constructor(private pageHistoryRepo: PageHistoryRepo) {}
async findById(historyId: string): Promise {
- return await this.pageHistoryRepo.findById(historyId);
+ return await this.pageHistoryRepo.findById(historyId, {
+ includeContent: true,
+ });
}
async findHistoryByPageId(
diff --git a/apps/server/src/core/page/services/page.service.ts b/apps/server/src/core/page/services/page.service.ts
index 3b02e14e..0f9957ff 100644
--- a/apps/server/src/core/page/services/page.service.ts
+++ b/apps/server/src/core/page/services/page.service.ts
@@ -4,8 +4,8 @@ import {
Logger,
NotFoundException,
} from '@nestjs/common';
-import { CreatePageDto } from '../dto/create-page.dto';
-import { UpdatePageDto } from '../dto/update-page.dto';
+import { CreatePageDto, ContentFormat } from '../dto/create-page.dto';
+import { ContentOperation, UpdatePageDto } from '../dto/update-page.dto';
import { PageRepo } from '@docmost/db/repos/page/page.repo';
import { InsertablePage, Page, User } from '@docmost/db/types/entity.types';
import { PaginationOptions } from '@docmost/db/pagination/pagination-options';
@@ -18,6 +18,7 @@ import { KyselyDB } from '@docmost/db/types/kysely.types';
import { generateJitteredKeyBetween } from 'fractional-indexing-jittered';
import { MovePageDto } from '../dto/move-page.dto';
import { generateSlugId } from '../../../common/helpers';
+import { getPageTitle } from '../../../common/helpers';
import { executeTx } from '@docmost/db/utils';
import { AttachmentRepo } from '@docmost/db/repos/attachment/attachment.repo';
import { v7 as uuid7 } from 'uuid';
@@ -28,7 +29,11 @@ import {
isAttachmentNode,
removeMarkTypeFromDoc,
} from '../../../common/helpers/prosemirror/utils';
-import { jsonToNode, jsonToText } from 'src/collaboration/collaboration.util';
+import {
+ htmlToJson,
+ jsonToNode,
+ jsonToText,
+} from 'src/collaboration/collaboration.util';
import {
CopyPageMapEntry,
ICopyPageAttachment,
@@ -40,6 +45,9 @@ import { Queue } from 'bullmq';
import { QueueJob, QueueName } from '../../../integrations/queue/constants';
import { EventName } from '../../../common/events/event.contants';
import { EventEmitter2 } from '@nestjs/event-emitter';
+import { CollaborationGateway } from '../../../collaboration/collaboration.gateway';
+import { markdownToHtml } from '@docmost/editor-ext';
+import { WatcherService } from '../../watcher/watcher.service';
@Injectable()
export class PageService {
@@ -52,7 +60,10 @@ export class PageService {
private readonly storageService: StorageService,
@InjectQueue(QueueName.ATTACHMENT_QUEUE) private attachmentQueue: Queue,
@InjectQueue(QueueName.AI_QUEUE) private aiQueue: Queue,
+ @InjectQueue(QueueName.GENERAL_QUEUE) private generalQueue: Queue,
private eventEmitter: EventEmitter2,
+ private collaborationGateway: CollaborationGateway,
+ private readonly watcherService: WatcherService,
) {}
async findById(
@@ -88,7 +99,22 @@ export class PageService {
parentPageId = parentPage.id;
}
- const createdPage = await this.pageRepo.insertPage({
+ let content = undefined;
+ let textContent = undefined;
+ let ydoc = undefined;
+
+ if (createPageDto?.content && createPageDto?.format) {
+ const prosemirrorJson = await this.parseProsemirrorContent(
+ createPageDto.content,
+ createPageDto.format,
+ );
+
+ content = prosemirrorJson;
+ textContent = jsonToText(prosemirrorJson);
+ ydoc = createYdocFromJson(prosemirrorJson);
+ }
+
+ const page = await this.pageRepo.insertPage({
slugId: generateSlugId(),
title: createPageDto.title,
position: await this.nextPagePosition(
@@ -101,9 +127,23 @@ export class PageService {
creatorId: userId,
workspaceId: workspaceId,
lastUpdatedById: userId,
+ content,
+ textContent,
+ ydoc,
});
- return createdPage;
+ this.generalQueue
+ .add(QueueJob.ADD_PAGE_WATCHERS, {
+ userIds: [userId],
+ pageId: page.id,
+ spaceId: createPageDto.spaceId,
+ workspaceId,
+ })
+ .catch((err) =>
+ this.logger.warn(`Failed to queue add-page-watchers: ${err.message}`),
+ );
+
+ return page;
}
async nextPagePosition(spaceId: string, parentPageId?: string) {
@@ -150,23 +190,48 @@ export class PageService {
async update(
page: Page,
updatePageDto: UpdatePageDto,
- userId: string,
+ user: User,
): Promise {
const contributors = new Set(page.contributorIds);
- contributors.add(userId);
+ contributors.add(user.id);
const contributorIds = Array.from(contributors);
await this.pageRepo.updatePage(
{
title: updatePageDto.title,
icon: updatePageDto.icon,
- lastUpdatedById: userId,
+ lastUpdatedById: user.id,
updatedAt: new Date(),
contributorIds: contributorIds,
},
page.id,
);
+ this.generalQueue
+ .add(QueueJob.ADD_PAGE_WATCHERS, {
+ userIds: [user.id],
+ pageId: page.id,
+ spaceId: page.spaceId,
+ workspaceId: page.workspaceId,
+ })
+ .catch((err) =>
+ this.logger.warn(`Failed to queue add-page-watchers: ${err.message}`),
+ );
+
+ if (
+ updatePageDto.content &&
+ updatePageDto.operation &&
+ updatePageDto.format
+ ) {
+ await this.updatePageContent(
+ page.id,
+ updatePageDto.content,
+ updatePageDto.operation,
+ updatePageDto.format,
+ user,
+ );
+ }
+
return await this.pageRepo.findById(page.id, {
includeSpace: true,
includeContent: true,
@@ -176,6 +241,23 @@ export class PageService {
});
}
+ async updatePageContent(
+ pageId: string,
+ content: string | object,
+ operation: ContentOperation,
+ format: ContentFormat,
+ user: User,
+ ): Promise {
+ const prosemirrorJson = await this.parseProsemirrorContent(content, format);
+
+ const documentName = `page.${pageId}`;
+ await this.collaborationGateway.handleYjsEvent(
+ 'updatePageContent',
+ documentName,
+ { operation, prosemirrorJson, user },
+ );
+ }
+
async getSidebarPages(
spaceId: string,
pagination: PaginationOptions,
@@ -209,7 +291,11 @@ export class PageService {
cursor: pagination.cursor,
beforeCursor: pagination.beforeCursor,
fields: [
- { expression: 'position', direction: 'asc', orderModifier: (ob) => ob.collate('C').asc() },
+ {
+ expression: 'position',
+ direction: 'asc',
+ orderModifier: (ob) => ob.collate('C').asc(),
+ },
{ expression: 'id', direction: 'asc' },
],
parseCursor: (cursor) => ({
@@ -263,6 +349,11 @@ export class PageService {
trx,
);
+ // Update watchers and remove those without access to new space
+ await this.watcherService.movePageWatchersToSpace(pageIds, spaceId, {
+ trx,
+ });
+
await this.aiQueue.add(QueueJob.PAGE_MOVED_TO_SPACE, {
pageId: pageIds,
workspaceId: rootPage.workspaceId,
@@ -376,7 +467,7 @@ export class PageService {
// Add "Copy of " prefix to the root page title only for duplicates in same space
let title = page.title;
if (isDuplicateInSameSpace && page.id === rootPage.id) {
- const originalTitle = page.title || 'Untitled';
+ const originalTitle = getPageTitle(page.title);
title = `Copy of ${originalTitle}`;
}
@@ -653,4 +744,36 @@ export class PageService {
): Promise {
await this.pageRepo.removePage(pageId, userId, workspaceId);
}
+
+ private async parseProsemirrorContent(
+ content: string | object,
+ format: ContentFormat,
+ ): Promise {
+ let prosemirrorJson: any;
+
+ switch (format) {
+ case 'markdown': {
+ const html = await markdownToHtml(content as string);
+ prosemirrorJson = htmlToJson(html as string);
+ break;
+ }
+ case 'html': {
+ prosemirrorJson = htmlToJson(content as string);
+ break;
+ }
+ case 'json':
+ default: {
+ prosemirrorJson = content;
+ break;
+ }
+ }
+
+ try {
+ jsonToNode(prosemirrorJson);
+ } catch (err) {
+ throw new BadRequestException('Invalid content format');
+ }
+
+ return prosemirrorJson;
+ }
}
diff --git a/apps/server/src/core/share/share.controller.ts b/apps/server/src/core/share/share.controller.ts
index ef6e9b2a..fb7639c1 100644
--- a/apps/server/src/core/share/share.controller.ts
+++ b/apps/server/src/core/share/share.controller.ts
@@ -64,8 +64,18 @@ export class ShareController {
throw new BadRequestException();
}
+ const shareData = await this.shareService.getSharedPage(dto, workspace.id);
+
+ const sharingAllowed = await this.shareService.isSharingAllowed(
+ workspace.id,
+ shareData.share.spaceId,
+ );
+ if (!sharingAllowed) {
+ throw new NotFoundException('Shared page not found');
+ }
+
return {
- ...(await this.shareService.getSharedPage(dto, workspace.id)),
+ ...shareData,
hasLicenseKey: hasLicenseOrEE({
licenseKey: workspace.licenseKey,
isCloud: this.environmentService.isCloud(),
@@ -86,6 +96,14 @@ export class ShareController {
throw new NotFoundException('Share not found');
}
+ const sharingAllowed = await this.shareService.isSharingAllowed(
+ share.workspaceId,
+ share.spaceId,
+ );
+ if (!sharingAllowed) {
+ throw new NotFoundException('Share not found');
+ }
+
return share;
}
@@ -127,6 +145,14 @@ export class ShareController {
throw new ForbiddenException();
}
+ const sharingAllowed = await this.shareService.isSharingAllowed(
+ workspace.id,
+ page.spaceId,
+ );
+ if (!sharingAllowed) {
+ throw new ForbiddenException('Public sharing is disabled');
+ }
+
return this.shareService.createShare({
page,
authUserId: user.id,
@@ -176,8 +202,21 @@ export class ShareController {
@Body() dto: ShareIdDto,
@AuthWorkspace() workspace: Workspace,
) {
+ const treeData = await this.shareService.getShareTree(
+ dto.shareId,
+ workspace.id,
+ );
+
+ const sharingAllowed = await this.shareService.isSharingAllowed(
+ workspace.id,
+ treeData.share.spaceId,
+ );
+ if (!sharingAllowed) {
+ throw new NotFoundException('Share not found');
+ }
+
return {
- ...(await this.shareService.getShareTree(dto.shareId, workspace.id)),
+ ...treeData,
hasLicenseKey: hasLicenseOrEE({
licenseKey: workspace.licenseKey,
isCloud: this.environmentService.isCloud(),
diff --git a/apps/server/src/core/share/share.service.ts b/apps/server/src/core/share/share.service.ts
index 82b8660c..c34ebff9 100644
--- a/apps/server/src/core/share/share.service.ts
+++ b/apps/server/src/core/share/share.service.ts
@@ -264,6 +264,31 @@ export class ShareService {
return ancestor;
}
+ async isSharingAllowed(
+ workspaceId: string,
+ spaceId: string,
+ ): Promise {
+ const result = await this.db
+ .selectFrom('workspaces')
+ .innerJoin('spaces', 'spaces.workspaceId', 'workspaces.id')
+ .select([
+ 'workspaces.settings as workspaceSettings',
+ 'spaces.settings as spaceSettings',
+ ])
+ .where('workspaces.id', '=', workspaceId)
+ .where('spaces.id', '=', spaceId)
+ .executeTakeFirst();
+
+ if (!result) return false;
+
+ const workspaceDisabled =
+ (result.workspaceSettings as any)?.sharing?.disabled === true;
+ const spaceDisabled =
+ (result.spaceSettings as any)?.sharing?.disabled === true;
+
+ return !workspaceDisabled && !spaceDisabled;
+ }
+
async updatePublicAttachments(page: Page): Promise {
const prosemirrorJson = getProsemirrorContent(page.content);
const attachmentIds = getAttachmentIds(prosemirrorJson);
diff --git a/apps/server/src/core/space/dto/update-space.dto.ts b/apps/server/src/core/space/dto/update-space.dto.ts
index 9de945cc..47f1529b 100644
--- a/apps/server/src/core/space/dto/update-space.dto.ts
+++ b/apps/server/src/core/space/dto/update-space.dto.ts
@@ -1,10 +1,14 @@
import { PartialType } from '@nestjs/mapped-types';
import { CreateSpaceDto } from './create-space.dto';
-import { IsNotEmpty, IsString, IsUUID } from 'class-validator';
+import { IsBoolean, IsNotEmpty, IsOptional, IsString, IsUUID } from 'class-validator';
export class UpdateSpaceDto extends PartialType(CreateSpaceDto) {
@IsString()
@IsNotEmpty()
@IsUUID()
spaceId: string;
+
+ @IsOptional()
+ @IsBoolean()
+ disablePublicSharing: boolean;
}
diff --git a/apps/server/src/core/space/services/space-member.service.ts b/apps/server/src/core/space/services/space-member.service.ts
index 93da3e3c..f4f4aa17 100644
--- a/apps/server/src/core/space/services/space-member.service.ts
+++ b/apps/server/src/core/space/services/space-member.service.ts
@@ -6,6 +6,7 @@ import {
import { PaginationOptions } from '@docmost/db/pagination/pagination-options';
import { KyselyDB, KyselyTransaction } from '@docmost/db/types/kysely.types';
import { SpaceMemberRepo } from '@docmost/db/repos/space/space-member.repo';
+import { GroupUserRepo } from '@docmost/db/repos/group/group-user.repo';
import { AddSpaceMembersDto } from '../dto/add-space-members.dto';
import { InjectKysely } from 'nestjs-kysely';
import { Space, SpaceMember, User } from '@docmost/db/types/entity.types';
@@ -14,12 +15,16 @@ import { RemoveSpaceMemberDto } from '../dto/remove-space-member.dto';
import { UpdateSpaceMemberRoleDto } from '../dto/update-space-member-role.dto';
import { SpaceRole } from '../../../common/helpers/types/permission';
import { CursorPaginationResult } from '@docmost/db/pagination/cursor-pagination';
+import { WatcherRepo } from '@docmost/db/repos/watcher/watcher.repo';
+import { executeTx } from '@docmost/db/utils';
@Injectable()
export class SpaceMemberService {
constructor(
private spaceMemberRepo: SpaceMemberRepo,
+ private groupUserRepo: GroupUserRepo,
private spaceRepo: SpaceRepo,
+ private watcherRepo: WatcherRepo,
@InjectKysely() private readonly db: KyselyDB,
) {}
@@ -203,10 +208,28 @@ export class SpaceMemberService {
await this.validateLastAdmin(dto.spaceId);
}
- await this.spaceMemberRepo.removeSpaceMemberById(
- spaceMember.id,
- dto.spaceId,
- );
+ let affectedUserIds: string[] = [];
+ if (dto.userId) {
+ affectedUserIds = [dto.userId];
+ } else if (dto.groupId) {
+ affectedUserIds = await this.groupUserRepo.getUserIdsByGroupId(
+ dto.groupId,
+ );
+ }
+
+ await executeTx(this.db, async (trx) => {
+ await this.spaceMemberRepo.removeSpaceMemberById(
+ spaceMember.id,
+ dto.spaceId,
+ { trx },
+ );
+
+ await this.watcherRepo.deleteByUsersWithoutSpaceAccess(
+ affectedUserIds,
+ dto.spaceId,
+ { trx },
+ );
+ });
}
async updateSpaceMemberRole(
diff --git a/apps/server/src/core/space/services/space.service.ts b/apps/server/src/core/space/services/space.service.ts
index cc811f97..7e8e99d9 100644
--- a/apps/server/src/core/space/services/space.service.ts
+++ b/apps/server/src/core/space/services/space.service.ts
@@ -1,5 +1,6 @@
import {
BadRequestException,
+ ForbiddenException,
Injectable,
NotFoundException,
} from '@nestjs/common';
@@ -17,12 +18,18 @@ import { QueueJob, QueueName } from 'src/integrations/queue/constants';
import { Queue } from 'bullmq';
import { InjectQueue } from '@nestjs/bullmq';
import { CursorPaginationResult } from '@docmost/db/pagination/cursor-pagination';
+import { ShareRepo } from '@docmost/db/repos/share/share.repo';
+import { WorkspaceRepo } from '@docmost/db/repos/workspace/workspace.repo';
+import { LicenseCheckService } from '../../../integrations/environment/license-check.service';
@Injectable()
export class SpaceService {
constructor(
private spaceRepo: SpaceRepo,
private spaceMemberService: SpaceMemberService,
+ private shareRepo: ShareRepo,
+ private workspaceRepo: WorkspaceRepo,
+ private licenseCheckService: LicenseCheckService,
@InjectKysely() private readonly db: KyselyDB,
@InjectQueue(QueueName.ATTACHMENT_QUEUE) private attachmentQueue: Queue,
) {}
@@ -105,6 +112,31 @@ export class SpaceService {
}
}
+ if (typeof updateSpaceDto.disablePublicSharing !== 'undefined') {
+ const workspace = await this.workspaceRepo.findById(workspaceId, {
+ withLicenseKey: true,
+ });
+
+ if (
+ !this.licenseCheckService.isValidEELicense(workspace.licenseKey)
+ ) {
+ throw new ForbiddenException(
+ 'This feature requires a valid enterprise license',
+ );
+ }
+
+ await this.spaceRepo.updateSharingSettings(
+ updateSpaceDto.spaceId,
+ workspaceId,
+ 'disabled',
+ updateSpaceDto.disablePublicSharing,
+ );
+
+ if (updateSpaceDto.disablePublicSharing) {
+ await this.shareRepo.deleteBySpaceId(updateSpaceDto.spaceId);
+ }
+ }
+
return await this.spaceRepo.updateSpace(
{
name: updateSpaceDto.name,
diff --git a/apps/server/src/core/space/space.module.ts b/apps/server/src/core/space/space.module.ts
index a34fe5b7..e6b55be7 100644
--- a/apps/server/src/core/space/space.module.ts
+++ b/apps/server/src/core/space/space.module.ts
@@ -4,6 +4,7 @@ import { SpaceController } from './space.controller';
import { SpaceMemberService } from './services/space-member.service';
@Module({
+ imports: [],
controllers: [SpaceController],
providers: [SpaceService, SpaceMemberService],
exports: [SpaceService, SpaceMemberService],
diff --git a/apps/server/src/core/watcher/dto/watcher.dto.ts b/apps/server/src/core/watcher/dto/watcher.dto.ts
new file mode 100644
index 00000000..ad5b7463
--- /dev/null
+++ b/apps/server/src/core/watcher/dto/watcher.dto.ts
@@ -0,0 +1,7 @@
+import { IsString, IsNotEmpty } from 'class-validator';
+
+export class WatcherPageDto {
+ @IsString()
+ @IsNotEmpty()
+ pageId: string;
+}
diff --git a/apps/server/src/core/watcher/watcher.controller.ts b/apps/server/src/core/watcher/watcher.controller.ts
new file mode 100644
index 00000000..8709719a
--- /dev/null
+++ b/apps/server/src/core/watcher/watcher.controller.ts
@@ -0,0 +1,99 @@
+/***
+ import {
+ Body,
+ Controller,
+ ForbiddenException,
+ HttpCode,
+ HttpStatus,
+ NotFoundException,
+ Post,
+ UseGuards,
+} from '@nestjs/common';
+import { WatcherService } from './watcher.service';
+import { AuthUser } from '../../common/decorators/auth-user.decorator';
+import { AuthWorkspace } from '../../common/decorators/auth-workspace.decorator';
+import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
+import { User, Workspace } from '@docmost/db/types/entity.types';
+import { WatcherPageDto } from './dto/watcher.dto';
+import { PageRepo } from '@docmost/db/repos/page/page.repo';
+import SpaceAbilityFactory from '../casl/abilities/space-ability.factory';
+import {
+ SpaceCaslAction,
+ SpaceCaslSubject,
+} from '../casl/interfaces/space-ability.type';
+
+
+@UseGuards(JwtAuthGuard)
+@Controller('pages')
+export class WatcherController {
+ constructor(
+ private readonly watcherService: WatcherService,
+ private readonly pageRepo: PageRepo,
+ private readonly spaceAbility: SpaceAbilityFactory,
+ ) {}
+
+ @HttpCode(HttpStatus.OK)
+ @Post('watch')
+ async watchPage(
+ @Body() dto: WatcherPageDto,
+ @AuthUser() user: User,
+ @AuthWorkspace() workspace: Workspace,
+ ) {
+ const page = await this.pageRepo.findById(dto.pageId);
+ if (!page) {
+ throw new NotFoundException('Page not found');
+ }
+
+ const ability = await this.spaceAbility.createForUser(user, page.spaceId);
+ if (ability.cannot(SpaceCaslAction.Read, SpaceCaslSubject.Page)) {
+ throw new ForbiddenException();
+ }
+
+ await this.watcherService.watchPage(
+ user.id,
+ page.id,
+ page.spaceId,
+ workspace.id,
+ );
+
+ return { watching: true };
+ }
+
+ @HttpCode(HttpStatus.OK)
+ @Post('unwatch')
+ async unwatchPage(@Body() dto: WatcherPageDto, @AuthUser() user: User) {
+ const page = await this.pageRepo.findById(dto.pageId);
+ if (!page) {
+ throw new NotFoundException('Page not found');
+ }
+
+ const ability = await this.spaceAbility.createForUser(user, page.spaceId);
+ if (ability.cannot(SpaceCaslAction.Read, SpaceCaslSubject.Page)) {
+ throw new ForbiddenException();
+ }
+
+ await this.watcherService.unwatchPage(user.id, page.id);
+
+ return { watching: false };
+ }
+
+ @HttpCode(HttpStatus.OK)
+ @Post('watch-status')
+ async getWatchStatus(@Body() dto: WatcherPageDto, @AuthUser() user: User) {
+ const page = await this.pageRepo.findById(dto.pageId);
+ if (!page) {
+ throw new NotFoundException('Page not found');
+ }
+
+ const ability = await this.spaceAbility.createForUser(user, page.spaceId);
+ if (ability.cannot(SpaceCaslAction.Read, SpaceCaslSubject.Page)) {
+ throw new ForbiddenException();
+ }
+
+ const watching = await this.watcherService.isWatchingPage(user.id, page.id);
+
+ return { watching };
+ }
+
+}
+***/
diff --git a/apps/server/src/core/watcher/watcher.module.ts b/apps/server/src/core/watcher/watcher.module.ts
new file mode 100644
index 00000000..68ab5624
--- /dev/null
+++ b/apps/server/src/core/watcher/watcher.module.ts
@@ -0,0 +1,11 @@
+import { Module } from '@nestjs/common';
+import { WatcherService } from './watcher.service';
+import { CaslModule } from '../casl/casl.module';
+
+@Module({
+ imports: [CaslModule],
+ controllers: [],
+ providers: [WatcherService],
+ exports: [WatcherService],
+})
+export class WatcherModule {}
diff --git a/apps/server/src/core/watcher/watcher.service.ts b/apps/server/src/core/watcher/watcher.service.ts
new file mode 100644
index 00000000..384a0787
--- /dev/null
+++ b/apps/server/src/core/watcher/watcher.service.ts
@@ -0,0 +1,99 @@
+import { Injectable } from '@nestjs/common';
+import {
+ WatcherRepo,
+ WatcherType,
+} from '@docmost/db/repos/watcher/watcher.repo';
+import { PaginationOptions } from '@docmost/db/pagination/pagination-options';
+import { KyselyTransaction } from '@docmost/db/types/kysely.types';
+import { InsertableWatcher } from '@docmost/db/types/entity.types';
+
+@Injectable()
+export class WatcherService {
+ constructor(private readonly watcherRepo: WatcherRepo) {}
+
+ async watchPage(
+ userId: string,
+ pageId: string,
+ spaceId: string,
+ workspaceId: string,
+ trx?: KyselyTransaction,
+ ) {
+ const watcher: InsertableWatcher = {
+ userId,
+ pageId,
+ spaceId,
+ workspaceId,
+ type: WatcherType.PAGE,
+ addedById: userId,
+ };
+ return this.watcherRepo.upsert(watcher, trx);
+ }
+
+ async addPageWatchers(
+ userIds: string[],
+ pageId: string,
+ spaceId: string,
+ workspaceId: string,
+ trx?: KyselyTransaction,
+ ) {
+ if (userIds.length === 0) return;
+
+ const watchers: InsertableWatcher[] = userIds.map((userId) => ({
+ userId,
+ pageId,
+ spaceId,
+ workspaceId,
+ type: WatcherType.PAGE,
+ addedById: userId,
+ }));
+
+ return this.watcherRepo.insertMany(watchers, trx);
+ }
+
+ async unwatchPage(userId: string, pageId: string) {
+ return this.watcherRepo.mute(userId, pageId);
+ }
+
+ async isWatchingPage(userId: string, pageId: string): Promise {
+ return this.watcherRepo.isWatching(userId, pageId);
+ }
+
+ async getPageWatchers(pageId: string, pagination: PaginationOptions) {
+ return this.watcherRepo.findPageWatchers(pageId, pagination);
+ }
+
+ async getPageWatcherIds(
+ pageId: string,
+ trx?: KyselyTransaction,
+ ): Promise {
+ return this.watcherRepo.getPageWatcherIds(pageId, trx);
+ }
+
+ async countPageWatchers(pageId: string): Promise {
+ return this.watcherRepo.countPageWatchers(pageId);
+ }
+
+ async cleanupOnSpaceAccessChange(
+ userIds: string[],
+ spaceId: string,
+ opts?: { trx?: KyselyTransaction },
+ ): Promise {
+ const { trx } = opts;
+ await this.watcherRepo.deleteByUsersWithoutSpaceAccess(userIds, spaceId, {
+ trx,
+ });
+ }
+
+ async movePageWatchersToSpace(
+ pageIds: string[],
+ spaceId: string,
+ opts?: { trx?: KyselyTransaction },
+ ): Promise {
+ await this.watcherRepo.updateSpaceIdByPageIds(spaceId, pageIds, opts);
+ await this.watcherRepo.deleteByPageIdsWithoutSpaceAccess(
+ pageIds,
+ spaceId,
+ opts,
+ );
+ }
+}
diff --git a/apps/server/src/core/workspace/dto/update-workspace.dto.ts b/apps/server/src/core/workspace/dto/update-workspace.dto.ts
index 2b61c7ee..7b4f31eb 100644
--- a/apps/server/src/core/workspace/dto/update-workspace.dto.ts
+++ b/apps/server/src/core/workspace/dto/update-workspace.dto.ts
@@ -30,4 +30,8 @@ export class UpdateWorkspaceDto extends PartialType(CreateWorkspaceDto) {
@IsOptional()
@IsBoolean()
generativeAi: boolean;
+
+ @IsOptional()
+ @IsBoolean()
+ disablePublicSharing: boolean;
}
diff --git a/apps/server/src/core/workspace/services/workspace.service.ts b/apps/server/src/core/workspace/services/workspace.service.ts
index 7be5b642..ed1a3424 100644
--- a/apps/server/src/core/workspace/services/workspace.service.ts
+++ b/apps/server/src/core/workspace/services/workspace.service.ts
@@ -5,6 +5,7 @@ import {
Logger,
NotFoundException,
} from '@nestjs/common';
+import { LicenseCheckService } from '../../../integrations/environment/license-check.service';
import { CreateWorkspaceDto } from '../dto/create-workspace.dto';
import { UpdateWorkspaceDto } from '../dto/update-workspace.dto';
import { SpaceService } from '../../space/services/space.service';
@@ -33,6 +34,8 @@ import { Queue } from 'bullmq';
import { generateRandomSuffixNumbers } from '../../../common/helpers';
import { isPageEmbeddingsTableExists } from '@docmost/db/helpers/helpers';
import { CursorPaginationResult } from '@docmost/db/pagination/cursor-pagination';
+import { ShareRepo } from '@docmost/db/repos/share/share.repo';
+import { WatcherRepo } from '@docmost/db/repos/watcher/watcher.repo';
@Injectable()
export class WorkspaceService {
@@ -47,6 +50,9 @@ export class WorkspaceService {
private userRepo: UserRepo,
private environmentService: EnvironmentService,
private domainService: DomainService,
+ private licenseCheckService: LicenseCheckService,
+ private shareRepo: ShareRepo,
+ private watcherRepo: WatcherRepo,
@InjectKysely() private readonly db: KyselyDB,
@InjectQueue(QueueName.ATTACHMENT_QUEUE) private attachmentQueue: Queue,
@InjectQueue(QueueName.BILLING_QUEUE) private billingQueue: Queue,
@@ -112,6 +118,7 @@ export class WorkspaceService {
let status = undefined;
let plan = undefined;
let billingEmail = undefined;
+ let settings = undefined;
if (this.environmentService.isCloud()) {
// generate unique hostname
@@ -125,6 +132,7 @@ export class WorkspaceService {
status = WorkspaceStatus.Active;
plan = 'standard';
billingEmail = user.email;
+ settings = { ai: { generative: true } };
}
// create workspace
@@ -137,6 +145,7 @@ export class WorkspaceService {
trialEndAt,
plan,
billingEmail,
+ settings,
},
trx,
);
@@ -358,6 +367,32 @@ export class WorkspaceService {
delete updateWorkspaceDto.generativeAi;
}
+ if (typeof updateWorkspaceDto.disablePublicSharing !== 'undefined') {
+ const currentWorkspace = await this.workspaceRepo.findById(workspaceId, {
+ withLicenseKey: true,
+ });
+
+ if (
+ !this.licenseCheckService.isValidEELicense(currentWorkspace.licenseKey)
+ ) {
+ throw new ForbiddenException(
+ 'This feature requires a valid enterprise license',
+ );
+ }
+
+ await this.workspaceRepo.updateSharingSettings(
+ workspaceId,
+ 'disabled',
+ updateWorkspaceDto.disablePublicSharing,
+ );
+
+ if (updateWorkspaceDto.disablePublicSharing) {
+ await this.shareRepo.deleteByWorkspaceId(workspaceId);
+ }
+
+ delete updateWorkspaceDto.disablePublicSharing;
+ }
+
await this.workspaceRepo.updateWorkspace(updateWorkspaceDto, workspaceId);
const workspace = await this.workspaceRepo.findById(workspaceId, {
@@ -523,6 +558,10 @@ export class WorkspaceService {
.deleteFrom('authAccounts')
.where('userId', '=', userId)
.execute();
+
+ await this.watcherRepo.deleteByUserAndWorkspace(userId, workspaceId, {
+ trx,
+ });
});
try {
diff --git a/apps/server/src/database/database.module.ts b/apps/server/src/database/database.module.ts
index e6cb2904..6272ead1 100644
--- a/apps/server/src/database/database.module.ts
+++ b/apps/server/src/database/database.module.ts
@@ -24,6 +24,8 @@ import { MigrationService } from '@docmost/db/services/migration.service';
import { UserTokenRepo } from './repos/user-token/user-token.repo';
import { BacklinkRepo } from '@docmost/db/repos/backlink/backlink.repo';
import { ShareRepo } from '@docmost/db/repos/share/share.repo';
+import { NotificationRepo } from '@docmost/db/repos/notification/notification.repo';
+import { WatcherRepo } from '@docmost/db/repos/watcher/watcher.repo';
import { PageListener } from '@docmost/db/listeners/page.listener';
import { PostgresJSDialect } from 'kysely-postgres-js';
import * as postgres from 'postgres';
@@ -80,6 +82,8 @@ import { normalizePostgresUrl } from '../common/helpers';
UserTokenRepo,
BacklinkRepo,
ShareRepo,
+ NotificationRepo,
+ WatcherRepo,
PageListener,
],
exports: [
@@ -96,6 +100,8 @@ import { normalizePostgresUrl } from '../common/helpers';
UserTokenRepo,
BacklinkRepo,
ShareRepo,
+ NotificationRepo,
+ WatcherRepo,
],
})
export class DatabaseModule
diff --git a/apps/server/src/database/migrations/20260205T214213-add-settings-to-spaces.ts b/apps/server/src/database/migrations/20260205T214213-add-settings-to-spaces.ts
new file mode 100644
index 00000000..5c365b0c
--- /dev/null
+++ b/apps/server/src/database/migrations/20260205T214213-add-settings-to-spaces.ts
@@ -0,0 +1,9 @@
+import { Kysely } from 'kysely';
+
+export async function up(db: Kysely): Promise {
+ await db.schema.alterTable('spaces').addColumn('settings', 'jsonb').execute();
+}
+
+export async function down(db: Kysely): Promise {
+ await db.schema.alterTable('spaces').dropColumn('settings').execute();
+}
diff --git a/apps/server/src/database/migrations/20260209T120000-add-contributor_ids-to-page-history.ts b/apps/server/src/database/migrations/20260209T120000-add-contributor_ids-to-page-history.ts
new file mode 100644
index 00000000..4e50ad3a
--- /dev/null
+++ b/apps/server/src/database/migrations/20260209T120000-add-contributor_ids-to-page-history.ts
@@ -0,0 +1,15 @@
+import { type Kysely, sql } from 'kysely';
+
+export async function up(db: Kysely): Promise {
+ await db.schema
+ .alterTable('page_history')
+ .addColumn('contributor_ids', sql`uuid[]`, (col) => col.defaultTo('{}'))
+ .execute();
+}
+
+export async function down(db: Kysely): Promise {
+ await db.schema
+ .alterTable('page_history')
+ .dropColumn('contributor_ids')
+ .execute();
+}
diff --git a/apps/server/src/database/migrations/20260213T085259-notifications.ts b/apps/server/src/database/migrations/20260213T085259-notifications.ts
new file mode 100644
index 00000000..b6dd4046
--- /dev/null
+++ b/apps/server/src/database/migrations/20260213T085259-notifications.ts
@@ -0,0 +1,53 @@
+import { type Kysely, sql } from 'kysely';
+
+export async function up(db: Kysely): Promise {
+ await db.schema
+ .createTable('notifications')
+ .addColumn('id', 'uuid', (col) =>
+ col.primaryKey().defaultTo(sql`gen_uuid_v7()`),
+ )
+ .addColumn('user_id', 'uuid', (col) =>
+ col.references('users.id').onDelete('cascade').notNull(),
+ )
+ .addColumn('workspace_id', 'uuid', (col) =>
+ col.references('workspaces.id').onDelete('cascade').notNull(),
+ )
+ .addColumn('type', 'text', (col) => col.notNull())
+ .addColumn('actor_id', 'uuid', (col) =>
+ col.references('users.id').onDelete('set null'),
+ )
+ .addColumn('page_id', 'uuid', (col) =>
+ col.references('pages.id').onDelete('cascade'),
+ )
+ .addColumn('space_id', 'uuid', (col) =>
+ col.references('spaces.id').onDelete('cascade'),
+ )
+ .addColumn('comment_id', 'uuid', (col) =>
+ col.references('comments.id').onDelete('cascade'),
+ )
+ .addColumn('data', 'jsonb')
+ .addColumn('read_at', 'timestamptz')
+ .addColumn('emailed_at', 'timestamptz')
+ .addColumn('archived_at', 'timestamptz')
+ .addColumn('created_at', 'timestamptz', (col) =>
+ col.notNull().defaultTo(sql`now()`),
+ )
+ .execute();
+
+ await db.schema
+ .createIndex('idx_notifications_user_id')
+ .on('notifications')
+ .columns(['user_id', 'id desc'])
+ .execute();
+
+ await db.schema
+ .createIndex('idx_notifications_user_unread')
+ .on('notifications')
+ .column('user_id')
+ .where(sql.ref('read_at'), 'is', null)
+ .execute();
+}
+
+export async function down(db: Kysely): Promise {
+ await db.schema.dropTable('notifications').execute();
+}
diff --git a/apps/server/src/database/migrations/20260213T085320-watchers.ts b/apps/server/src/database/migrations/20260213T085320-watchers.ts
new file mode 100644
index 00000000..eae1d494
--- /dev/null
+++ b/apps/server/src/database/migrations/20260213T085320-watchers.ts
@@ -0,0 +1,57 @@
+import { type Kysely, sql } from 'kysely';
+
+export async function up(db: Kysely): Promise {
+ await db.schema
+ .createTable('watchers')
+ .addColumn('id', 'uuid', (col) =>
+ col.primaryKey().defaultTo(sql`gen_uuid_v7()`),
+ )
+ .addColumn('user_id', 'uuid', (col) =>
+ col.references('users.id').onDelete('cascade').notNull(),
+ )
+ .addColumn('page_id', 'uuid', (col) =>
+ col.references('pages.id').onDelete('cascade'),
+ )
+ .addColumn('space_id', 'uuid', (col) =>
+ col.references('spaces.id').onDelete('cascade').notNull(),
+ )
+ .addColumn('workspace_id', 'uuid', (col) =>
+ col.references('workspaces.id').onDelete('cascade').notNull(),
+ )
+ .addColumn('type', 'text', (col) => col.notNull())
+ .addColumn('added_by_id', 'uuid', (col) =>
+ col.references('users.id').onDelete('set null'),
+ )
+ .addColumn('muted_at', 'timestamptz')
+ .addColumn('created_at', 'timestamptz', (col) =>
+ col.notNull().defaultTo(sql`now()`),
+ )
+ .execute();
+
+ await db.schema
+ .createIndex('idx_watchers_user_page')
+ .on('watchers')
+ .columns(['user_id', 'page_id'])
+ .unique()
+ .where('page_id', 'is not', null)
+ .execute();
+
+ await db.schema
+ .createIndex('idx_watchers_user_space')
+ .on('watchers')
+ .columns(['user_id', 'space_id'])
+ .unique()
+ .where(sql.ref('page_id'), 'is', null)
+ .execute();
+
+ // Query index for fetching watchers by page
+ await db.schema
+ .createIndex('idx_watchers_page_id')
+ .on('watchers')
+ .column('page_id')
+ .execute();
+}
+
+export async function down(db: Kysely): Promise {
+ await db.schema.dropTable('watchers').execute();
+}
diff --git a/apps/server/src/database/migrations/20260213T085337-backfill-watchers.ts b/apps/server/src/database/migrations/20260213T085337-backfill-watchers.ts
new file mode 100644
index 00000000..d16a80e9
--- /dev/null
+++ b/apps/server/src/database/migrations/20260213T085337-backfill-watchers.ts
@@ -0,0 +1,29 @@
+import { type Kysely, sql } from 'kysely';
+
+export async function up(db: Kysely): Promise {
+ // Backfill watchers from pages.contributorIds and pages.creatorId
+ // This inserts unique user-page combinations from both sources
+ await sql`
+ INSERT INTO watchers (user_id, page_id, space_id, workspace_id, type, added_by_id)
+ SELECT DISTINCT
+ u.user_id,
+ p.id as page_id,
+ p.space_id,
+ p.workspace_id,
+ 'page' as type,
+ u.user_id as added_by_id
+ FROM pages p
+ CROSS JOIN LATERAL (
+ SELECT unnest(p.contributor_ids) as user_id
+ UNION
+ SELECT p.creator_id as user_id WHERE p.creator_id IS NOT NULL
+ ) u
+ WHERE p.deleted_at IS NULL
+ AND u.user_id IS NOT NULL
+ ON CONFLICT DO NOTHING
+ `.execute(db);
+}
+
+export async function down(db: Kysely): Promise {
+ await sql`DELETE FROM watchers WHERE type = 'page'`.execute(db);
+}
diff --git a/apps/server/src/database/repos/group/group-user.repo.ts b/apps/server/src/database/repos/group/group-user.repo.ts
index 7d03957b..da4528fb 100644
--- a/apps/server/src/database/repos/group/group-user.repo.ts
+++ b/apps/server/src/database/repos/group/group-user.repo.ts
@@ -56,7 +56,11 @@ export class GroupUserRepo {
if (pagination.query) {
query = query.where((eb) =>
- eb(sql`f_unaccent(users.name)`, 'ilike', sql`f_unaccent(${'%' + pagination.query + '%'})`),
+ eb(
+ sql`f_unaccent(users.name)`,
+ 'ilike',
+ sql`f_unaccent(${'%' + pagination.query + '%'})`,
+ ),
);
}
@@ -147,8 +151,25 @@ export class GroupUserRepo {
);
}
- async delete(userId: string, groupId: string): Promise {
- await this.db
+ async getUserIdsByGroupId(groupId: string): Promise {
+ const rows = await this.db
+ .selectFrom('groupUsers')
+ .select('userId')
+ .where('groupId', '=', groupId)
+ .execute();
+
+ return rows.map((r) => r.userId);
+ }
+
+ async delete(
+ userId: string,
+ groupId: string,
+ opts?: { trx?: KyselyTransaction },
+ ): Promise {
+ const { trx } = opts;
+ const db = dbOrTx(this.db, trx);
+
+ await db
.deleteFrom('groupUsers')
.where('userId', '=', userId)
.where('groupId', '=', groupId)
diff --git a/apps/server/src/database/repos/group/group.repo.ts b/apps/server/src/database/repos/group/group.repo.ts
index e368d366..558db6f7 100644
--- a/apps/server/src/database/repos/group/group.repo.ts
+++ b/apps/server/src/database/repos/group/group.repo.ts
@@ -155,8 +155,15 @@ export class GroupRepo {
.as('memberCount');
}
- async delete(groupId: string, workspaceId: string): Promise {
- await this.db
+ async delete(
+ groupId: string,
+ workspaceId: string,
+ opts?: { trx?: KyselyTransaction },
+ ): Promise {
+ const { trx } = opts;
+ const db = dbOrTx(this.db, trx);
+
+ await db
.deleteFrom('groups')
.where('id', '=', groupId)
.where('workspaceId', '=', workspaceId)
diff --git a/apps/server/src/database/repos/notification/notification.repo.ts b/apps/server/src/database/repos/notification/notification.repo.ts
new file mode 100644
index 00000000..19add3c6
--- /dev/null
+++ b/apps/server/src/database/repos/notification/notification.repo.ts
@@ -0,0 +1,167 @@
+import { Injectable } from '@nestjs/common';
+import { InjectKysely } from 'nestjs-kysely';
+import { KyselyDB } from '../../types/kysely.types';
+import {
+ InsertableNotification,
+ Notification,
+} from '@docmost/db/types/entity.types';
+import { PaginationOptions } from '@docmost/db/pagination/pagination-options';
+import { executeWithCursorPagination } from '@docmost/db/pagination/cursor-pagination';
+import { ExpressionBuilder } from 'kysely';
+import { DB } from '@docmost/db/types/db';
+import { jsonObjectFrom } from 'kysely/helpers/postgres';
+import { SpaceMemberRepo } from '@docmost/db/repos/space/space-member.repo';
+
+@Injectable()
+export class NotificationRepo {
+ constructor(
+ @InjectKysely() private readonly db: KyselyDB,
+ private readonly spaceMemberRepo: SpaceMemberRepo,
+ ) {}
+
+ async findById(notificationId: string): Promise {
+ return this.db
+ .selectFrom('notifications')
+ .selectAll('notifications')
+ .where('id', '=', notificationId)
+ .executeTakeFirst();
+ }
+
+ async findByUserId(userId: string, pagination: PaginationOptions) {
+ const query = this.db
+ .selectFrom('notifications')
+ .selectAll('notifications')
+ .select((eb) => this.withActor(eb))
+ .select((eb) => this.withPage(eb))
+ .select((eb) => this.withSpace(eb))
+ .where('userId', '=', userId)
+ .where((eb) =>
+ eb.or([
+ eb('spaceId', 'is', null),
+ eb('spaceId', 'in', this.spaceMemberRepo.getUserSpaceIdsQuery(userId)),
+ ]),
+ );
+
+ return executeWithCursorPagination(query, {
+ perPage: pagination.limit,
+ cursor: pagination.cursor,
+ beforeCursor: pagination.beforeCursor,
+ fields: [{ expression: 'id', direction: 'desc' }],
+ parseCursor: (cursor) => ({ id: cursor.id }),
+ });
+ }
+
+ async getUnreadCount(userId: string): Promise {
+ const result = await this.db
+ .selectFrom('notifications')
+ .select((eb) => eb.fn.count('id').as('count'))
+ .where('userId', '=', userId)
+ .where('readAt', 'is', null)
+ .where((eb) =>
+ eb.or([
+ eb('spaceId', 'is', null),
+ eb('spaceId', 'in', this.spaceMemberRepo.getUserSpaceIdsQuery(userId)),
+ ]),
+ )
+ .executeTakeFirst();
+
+ return Number(result?.count ?? 0);
+ }
+
+ async insert(notification: InsertableNotification): Promise {
+ return this.db
+ .insertInto('notifications')
+ .values(notification)
+ .returningAll()
+ .executeTakeFirst();
+ }
+
+ async markAsRead(notificationId: string, userId: string): Promise {
+ await this.db
+ .updateTable('notifications')
+ .set({ readAt: new Date() })
+ .where('id', '=', notificationId)
+ .where('userId', '=', userId)
+ .where('readAt', 'is', null)
+ .where((eb) =>
+ eb.or([
+ eb('spaceId', 'is', null),
+ eb('spaceId', 'in', this.spaceMemberRepo.getUserSpaceIdsQuery(userId)),
+ ]),
+ )
+ .execute();
+ }
+
+ async markMultipleAsRead(
+ notificationIds: string[],
+ userId: string,
+ ): Promise {
+ if (notificationIds.length === 0) {
+ return;
+ }
+ await this.db
+ .updateTable('notifications')
+ .set({ readAt: new Date() })
+ .where('id', 'in', notificationIds)
+ .where('userId', '=', userId)
+ .where('readAt', 'is', null)
+ .where((eb) =>
+ eb.or([
+ eb('spaceId', 'is', null),
+ eb('spaceId', 'in', this.spaceMemberRepo.getUserSpaceIdsQuery(userId)),
+ ]),
+ )
+ .execute();
+ }
+
+ async markAsEmailed(notificationId: string): Promise {
+ await this.db
+ .updateTable('notifications')
+ .set({ emailedAt: new Date() })
+ .where('id', '=', notificationId)
+ .where('emailedAt', 'is', null)
+ .execute();
+ }
+
+ async markAllAsRead(userId: string): Promise {
+ await this.db
+ .updateTable('notifications')
+ .set({ readAt: new Date() })
+ .where('userId', '=', userId)
+ .where('readAt', 'is', null)
+ .where((eb) =>
+ eb.or([
+ eb('spaceId', 'is', null),
+ eb('spaceId', 'in', this.spaceMemberRepo.getUserSpaceIdsQuery(userId)),
+ ]),
+ )
+ .execute();
+ }
+
+ withActor(eb: ExpressionBuilder) {
+ return jsonObjectFrom(
+ eb
+ .selectFrom('users')
+ .select(['users.id', 'users.name', 'users.avatarUrl'])
+ .whereRef('users.id', '=', 'notifications.actorId'),
+ ).as('actor');
+ }
+
+ withPage(eb: ExpressionBuilder) {
+ return jsonObjectFrom(
+ eb
+ .selectFrom('pages')
+ .select(['pages.id', 'pages.title', 'pages.slugId', 'pages.icon'])
+ .whereRef('pages.id', '=', 'notifications.pageId'),
+ ).as('page');
+ }
+
+ withSpace(eb: ExpressionBuilder) {
+ return jsonObjectFrom(
+ eb
+ .selectFrom('spaces')
+ .select(['spaces.id', 'spaces.name', 'spaces.slug'])
+ .whereRef('spaces.id', '=', 'notifications.spaceId'),
+ ).as('space');
+ }
+}
diff --git a/apps/server/src/database/repos/page/page-history.repo.ts b/apps/server/src/database/repos/page/page-history.repo.ts
index 7152d8e3..aca38f45 100644
--- a/apps/server/src/database/repos/page/page-history.repo.ts
+++ b/apps/server/src/database/repos/page/page-history.repo.ts
@@ -9,24 +9,43 @@ import {
} from '@docmost/db/types/entity.types';
import { PaginationOptions } from '@docmost/db/pagination/pagination-options';
import { executeWithCursorPagination } from '@docmost/db/pagination/cursor-pagination';
-import { jsonObjectFrom } from 'kysely/helpers/postgres';
-import { ExpressionBuilder } from 'kysely';
+import { jsonArrayFrom, jsonObjectFrom } from 'kysely/helpers/postgres';
+import { ExpressionBuilder, sql } from 'kysely';
import { DB } from '@docmost/db/types/db';
@Injectable()
export class PageHistoryRepo {
constructor(@InjectKysely() private readonly db: KyselyDB) {}
+ private baseFields: Array = [
+ 'id',
+ 'pageId',
+ 'slugId',
+ 'title',
+ 'icon',
+ 'coverPhoto',
+ 'lastUpdatedById',
+ 'contributorIds',
+ 'spaceId',
+ 'workspaceId',
+ 'createdAt',
+ ];
+
async findById(
pageHistoryId: string,
- trx?: KyselyTransaction,
+ opts?: {
+ includeContent?: boolean;
+ trx?: KyselyTransaction;
+ },
): Promise {
- const db = dbOrTx(this.db, trx);
+ const db = dbOrTx(this.db, opts?.trx);
return await db
.selectFrom('pageHistory')
- .selectAll()
+ .select(this.baseFields)
+ .$if(opts?.includeContent, (qb) => qb.select('content'))
.select((eb) => this.withLastUpdatedBy(eb))
+ .select((eb) => this.withContributors(eb))
.where('id', '=', pageHistoryId)
.executeTakeFirst();
}
@@ -43,7 +62,10 @@ export class PageHistoryRepo {
.executeTakeFirst();
}
- async saveHistory(page: Page, trx?: KyselyTransaction): Promise {
+ async saveHistory(
+ page: Page,
+ opts?: { contributorIds?: string[]; trx?: KyselyTransaction },
+ ): Promise {
await this.insertPageHistory(
{
pageId: page.id,
@@ -53,18 +75,20 @@ export class PageHistoryRepo {
icon: page.icon,
coverPhoto: page.coverPhoto,
lastUpdatedById: page.lastUpdatedById ?? page.creatorId,
+ contributorIds: opts?.contributorIds,
spaceId: page.spaceId,
workspaceId: page.workspaceId,
},
- trx,
+ opts?.trx,
);
}
async findPageHistoryByPageId(pageId: string, pagination: PaginationOptions) {
const query = this.db
.selectFrom('pageHistory')
- .selectAll()
+ .select(this.baseFields)
.select((eb) => this.withLastUpdatedBy(eb))
+ .select((eb) => this.withContributors(eb))
.where('pageId', '=', pageId);
return executeWithCursorPagination(query, {
@@ -76,12 +100,19 @@ export class PageHistoryRepo {
});
}
- async findPageLastHistory(pageId: string, trx?: KyselyTransaction) {
- const db = dbOrTx(this.db, trx);
+ async findPageLastHistory(
+ pageId: string,
+ opts?: {
+ includeContent?: boolean;
+ trx?: KyselyTransaction;
+ },
+ ) {
+ const db = dbOrTx(this.db, opts?.trx);
return await db
.selectFrom('pageHistory')
- .selectAll()
+ .select(this.baseFields)
+ .$if(opts?.includeContent, (qb) => qb.select('content'))
.where('pageId', '=', pageId)
.limit(1)
.orderBy('createdAt', 'desc')
@@ -96,4 +127,17 @@ export class PageHistoryRepo {
.whereRef('users.id', '=', 'pageHistory.lastUpdatedById'),
).as('lastUpdatedBy');
}
+
+ withContributors(eb: ExpressionBuilder) {
+ return jsonArrayFrom(
+ eb
+ .selectFrom('users')
+ .select(['users.id', 'users.name', 'users.avatarUrl'])
+ .whereRef(
+ 'users.id',
+ '=',
+ sql`ANY(${eb.ref('pageHistory.contributorIds')})`,
+ ),
+ ).as('contributors');
+ }
}
diff --git a/apps/server/src/database/repos/share/share.repo.ts b/apps/server/src/database/repos/share/share.repo.ts
index 994f054f..631e0697 100644
--- a/apps/server/src/database/repos/share/share.repo.ts
+++ b/apps/server/src/database/repos/share/share.repo.ts
@@ -136,6 +136,20 @@ export class ShareRepo {
await query.execute();
}
+ async deleteBySpaceId(spaceId: string): Promise {
+ await this.db
+ .deleteFrom('shares')
+ .where('spaceId', '=', spaceId)
+ .execute();
+ }
+
+ async deleteByWorkspaceId(workspaceId: string): Promise {
+ await this.db
+ .deleteFrom('shares')
+ .where('workspaceId', '=', workspaceId)
+ .execute();
+ }
+
async getShares(userId: string, pagination: PaginationOptions) {
const query = this.db
.selectFrom('shares')
diff --git a/apps/server/src/database/repos/space/space-member.repo.ts b/apps/server/src/database/repos/space/space-member.repo.ts
index 0f9e78de..5cace3e0 100644
--- a/apps/server/src/database/repos/space/space-member.repo.ts
+++ b/apps/server/src/database/repos/space/space-member.repo.ts
@@ -73,8 +73,9 @@ export class SpaceMemberRepo {
async removeSpaceMemberById(
memberId: string,
spaceId: string,
- trx?: KyselyTransaction,
+ opts?: { trx?: KyselyTransaction },
): Promise {
+ const { trx } = opts;
const db = dbOrTx(this.db, trx);
await db
.deleteFrom('spaceMembers')
@@ -114,7 +115,11 @@ export class SpaceMemberRepo {
'spaceMembers.createdAt',
])
.select((eb) => this.groupRepo.withMemberCount(eb))
- .select(sql`case when groups.id is not null then 1 else 0 end`.as('isGroup'))
+ .select(
+ sql`case when groups.id is not null then 1 else 0 end`.as(
+ 'isGroup',
+ ),
+ )
.where('spaceId', '=', spaceId);
if (pagination.query) {
@@ -219,6 +224,40 @@ export class SpaceMemberRepo {
return roles;
}
+ async getUserIdsWithSpaceAccess(
+ userIds: string[],
+ spaceId: string,
+ ): Promise> {
+ if (userIds.length === 0) return new Set();
+
+ const rows = await this.db
+ .selectFrom('spaceMembers')
+ .select('userId')
+ .where('userId', 'in', userIds)
+ .where('spaceId', '=', spaceId)
+ .unionAll(
+ this.db
+ .selectFrom('spaceMembers')
+ .innerJoin('groupUsers', 'groupUsers.groupId', 'spaceMembers.groupId')
+ .select('groupUsers.userId')
+ .where('groupUsers.userId', 'in', userIds)
+ .where('spaceMembers.spaceId', '=', spaceId),
+ )
+ .execute();
+
+ return new Set(rows.map((r) => r.userId));
+ }
+
+ async getSpaceIdsByGroupId(groupId: string): Promise {
+ const rows = await this.db
+ .selectFrom('spaceMembers')
+ .select('spaceId')
+ .where('groupId', '=', groupId)
+ .execute();
+
+ return rows.map((r) => r.spaceId);
+ }
+
getUserSpaceIdsQuery(userId: string) {
return this.db
.selectFrom('spaceMembers')
diff --git a/apps/server/src/database/repos/space/space.repo.ts b/apps/server/src/database/repos/space/space.repo.ts
index e5bb5472..0e2bd2b7 100644
--- a/apps/server/src/database/repos/space/space.repo.ts
+++ b/apps/server/src/database/repos/space/space.repo.ts
@@ -89,6 +89,26 @@ export class SpaceRepo {
.executeTakeFirst();
}
+ async updateSharingSettings(
+ spaceId: string,
+ workspaceId: string,
+ prefKey: string,
+ prefValue: string | boolean,
+ ) {
+ return this.db
+ .updateTable('spaces')
+ .set({
+ settings: sql`COALESCE(settings, '{}'::jsonb)
+ || jsonb_build_object('sharing', COALESCE(settings->'sharing', '{}'::jsonb)
+ || jsonb_build_object('${sql.raw(prefKey)}', ${sql.lit(prefValue)}))`,
+ updatedAt: new Date(),
+ })
+ .where('id', '=', spaceId)
+ .where('workspaceId', '=', workspaceId)
+ .returningAll()
+ .executeTakeFirst();
+ }
+
async insertSpace(
insertableSpace: InsertableSpace,
trx?: KyselyTransaction,
diff --git a/apps/server/src/database/repos/watcher/watcher.repo.ts b/apps/server/src/database/repos/watcher/watcher.repo.ts
new file mode 100644
index 00000000..9739b4de
--- /dev/null
+++ b/apps/server/src/database/repos/watcher/watcher.repo.ts
@@ -0,0 +1,249 @@
+import { Injectable } from '@nestjs/common';
+import { InjectKysely } from 'nestjs-kysely';
+import { KyselyDB, KyselyTransaction } from '../../types/kysely.types';
+import { InsertableWatcher, Watcher } from '@docmost/db/types/entity.types';
+import { PaginationOptions } from '@docmost/db/pagination/pagination-options';
+import { executeWithCursorPagination } from '@docmost/db/pagination/cursor-pagination';
+import { ExpressionBuilder } from 'kysely';
+import { DB } from '@docmost/db/types/db';
+import { jsonObjectFrom } from 'kysely/helpers/postgres';
+import { dbOrTx } from '@docmost/db/utils';
+
+export const WatcherType = {
+ PAGE: 'page',
+ SPACE: 'space',
+} as const;
+
+export type WatcherType = (typeof WatcherType)[keyof typeof WatcherType];
+
+@Injectable()
+export class WatcherRepo {
+ constructor(@InjectKysely() private readonly db: KyselyDB) {}
+
+ async findByUserAndPage(
+ userId: string,
+ pageId: string,
+ ): Promise {
+ return this.db
+ .selectFrom('watchers')
+ .selectAll()
+ .where('userId', '=', userId)
+ .where('pageId', '=', pageId)
+ .executeTakeFirst();
+ }
+
+ async findPageWatchers(pageId: string, pagination: PaginationOptions) {
+ const query = this.db
+ .selectFrom('watchers')
+ .selectAll('watchers')
+ .select((eb) => this.withUser(eb))
+ .where('pageId', '=', pageId)
+ .where('type', '=', WatcherType.PAGE)
+ .where('mutedAt', 'is', null);
+
+ return executeWithCursorPagination(query, {
+ perPage: pagination.limit,
+ cursor: pagination.cursor,
+ beforeCursor: pagination.beforeCursor,
+ fields: [{ expression: 'id', direction: 'asc' }],
+ parseCursor: (cursor) => ({ id: cursor.id }),
+ });
+ }
+
+ async getPageWatcherIds(
+ pageId: string,
+ trx?: KyselyTransaction,
+ ): Promise {
+ const db = dbOrTx(this.db, trx);
+ const watchers = await db
+ .selectFrom('watchers')
+ .select('userId')
+ .where('pageId', '=', pageId)
+ .where('type', '=', WatcherType.PAGE)
+ .where('mutedAt', 'is', null)
+ .execute();
+
+ return watchers.map((w) => w.userId);
+ }
+
+ async insert(
+ watcher: InsertableWatcher,
+ trx?: KyselyTransaction,
+ ): Promise {
+ const db = dbOrTx(this.db, trx);
+ return db
+ .insertInto('watchers')
+ .values(watcher)
+ .onConflict((oc) => oc.doNothing())
+ .returningAll()
+ .executeTakeFirst();
+ }
+
+ async insertMany(
+ watchers: InsertableWatcher[],
+ trx?: KyselyTransaction,
+ ): Promise {
+ if (watchers.length === 0) return;
+ const db = dbOrTx(this.db, trx);
+ await db
+ .insertInto('watchers')
+ .values(watchers)
+ .onConflict((oc) => oc.doNothing())
+ .execute();
+ }
+
+ async upsert(
+ watcher: InsertableWatcher,
+ trx?: KyselyTransaction,
+ ): Promise {
+ const db = dbOrTx(this.db, trx);
+ return db
+ .insertInto('watchers')
+ .values(watcher)
+ .onConflict((oc) =>
+ oc
+ .columns(['userId', 'pageId'])
+ .where('pageId', 'is not', null)
+ .doUpdateSet({ mutedAt: null }),
+ )
+ .returningAll()
+ .executeTakeFirst();
+ }
+
+ async mute(
+ userId: string,
+ pageId: string,
+ trx?: KyselyTransaction,
+ ): Promise {
+ const db = dbOrTx(this.db, trx);
+ await db
+ .updateTable('watchers')
+ .set({ mutedAt: new Date() })
+ .where('userId', '=', userId)
+ .where('pageId', '=', pageId)
+ .execute();
+ }
+
+ async isWatching(userId: string, pageId: string): Promise {
+ const watcher = await this.db
+ .selectFrom('watchers')
+ .select('id')
+ .where('userId', '=', userId)
+ .where('pageId', '=', pageId)
+ .where('mutedAt', 'is', null)
+ .executeTakeFirst();
+
+ return !!watcher;
+ }
+
+ async countPageWatchers(pageId: string): Promise {
+ const result = await this.db
+ .selectFrom('watchers')
+ .select((eb) => eb.fn.count('id').as('count'))
+ .where('pageId', '=', pageId)
+ .where('type', '=', WatcherType.PAGE)
+ .where('mutedAt', 'is', null)
+ .executeTakeFirst();
+
+ return Number(result?.count ?? 0);
+ }
+
+ async deleteByUsersWithoutSpaceAccess(
+ userIds: string[],
+ spaceId: string,
+ opts?: { trx?: KyselyTransaction },
+ ): Promise {
+ if (userIds.length === 0) return;
+
+ const { trx } = opts;
+ const db = dbOrTx(this.db, trx);
+
+ const usersWithAccess = db
+ .selectFrom('spaceMembers')
+ .select('userId')
+ .where('spaceId', '=', spaceId)
+ .where('userId', 'is not', null)
+ .union(
+ this.db
+ .selectFrom('spaceMembers')
+ .innerJoin('groupUsers', 'groupUsers.groupId', 'spaceMembers.groupId')
+ .select('groupUsers.userId')
+ .where('spaceMembers.spaceId', '=', spaceId),
+ );
+
+ await this.db
+ .deleteFrom('watchers')
+ .where('userId', 'in', userIds)
+ .where('spaceId', '=', spaceId)
+ .where('userId', 'not in', usersWithAccess)
+ .execute();
+ }
+
+ async updateSpaceIdByPageIds(
+ spaceId: string,
+ pageIds: string[],
+ opts?: { trx?: KyselyTransaction },
+ ): Promise {
+ if (pageIds.length === 0) return;
+ const { trx } = opts;
+ const db = dbOrTx(this.db, trx);
+ await db
+ .updateTable('watchers')
+ .set({ spaceId })
+ .where('pageId', 'in', pageIds)
+ .execute();
+ }
+
+ async deleteByPageIdsWithoutSpaceAccess(
+ pageIds: string[],
+ spaceId: string,
+ opts?: { trx?: KyselyTransaction },
+ ): Promise {
+ if (pageIds.length === 0) return;
+ const { trx } = opts;
+ const db = dbOrTx(this.db, trx);
+
+ const usersWithAccess = db
+ .selectFrom('spaceMembers')
+ .select('userId')
+ .where('spaceId', '=', spaceId)
+ .where('userId', 'is not', null)
+ .union(
+ db
+ .selectFrom('spaceMembers')
+ .innerJoin('groupUsers', 'groupUsers.groupId', 'spaceMembers.groupId')
+ .select('groupUsers.userId')
+ .where('spaceMembers.spaceId', '=', spaceId),
+ );
+
+ await db
+ .deleteFrom('watchers')
+ .where('pageId', 'in', pageIds)
+ .where('userId', 'not in', usersWithAccess)
+ .execute();
+ }
+
+ async deleteByUserAndWorkspace(
+ userId: string,
+ workspaceId: string,
+ opts?: { trx?: KyselyTransaction },
+ ): Promise {
+ const { trx } = opts;
+
+ const db = dbOrTx(this.db, trx);
+ await db
+ .deleteFrom('watchers')
+ .where('userId', '=', userId)
+ .where('workspaceId', '=', workspaceId)
+ .execute();
+ }
+
+ withUser(eb: ExpressionBuilder) {
+ return jsonObjectFrom(
+ eb
+ .selectFrom('users')
+ .select(['users.id', 'users.name', 'users.avatarUrl', 'users.email'])
+ .whereRef('users.id', '=', 'watchers.userId'),
+ ).as('user');
+ }
+}
diff --git a/apps/server/src/database/repos/workspace/workspace.repo.ts b/apps/server/src/database/repos/workspace/workspace.repo.ts
index d17db49b..5e054650 100644
--- a/apps/server/src/database/repos/workspace/workspace.repo.ts
+++ b/apps/server/src/database/repos/workspace/workspace.repo.ts
@@ -167,7 +167,7 @@ export class WorkspaceRepo {
.updateTable('workspaces')
.set({
settings: sql`COALESCE(settings, '{}'::jsonb)
- || jsonb_build_object('api', COALESCE(settings->'api', '{}'::jsonb)
+ || jsonb_build_object('api', COALESCE(settings->'api', '{}'::jsonb)
|| jsonb_build_object('${sql.raw(prefKey)}', ${sql.lit(prefValue)}))`,
updatedAt: new Date(),
})
@@ -185,7 +185,25 @@ export class WorkspaceRepo {
.updateTable('workspaces')
.set({
settings: sql`COALESCE(settings, '{}'::jsonb)
- || jsonb_build_object('ai', COALESCE(settings->'ai', '{}'::jsonb)
+ || jsonb_build_object('ai', COALESCE(settings->'ai', '{}'::jsonb)
+ || jsonb_build_object('${sql.raw(prefKey)}', ${sql.lit(prefValue)}))`,
+ updatedAt: new Date(),
+ })
+ .where('id', '=', workspaceId)
+ .returning(this.baseFields)
+ .executeTakeFirst();
+ }
+
+ async updateSharingSettings(
+ workspaceId: string,
+ prefKey: string,
+ prefValue: string | boolean,
+ ) {
+ return this.db
+ .updateTable('workspaces')
+ .set({
+ settings: sql`COALESCE(settings, '{}'::jsonb)
+ || jsonb_build_object('sharing', COALESCE(settings->'sharing', '{}'::jsonb)
|| jsonb_build_object('${sql.raw(prefKey)}', ${sql.lit(prefValue)}))`,
updatedAt: new Date(),
})
diff --git a/apps/server/src/database/types/db.d.ts b/apps/server/src/database/types/db.d.ts
index fe5b8fab..6668398b 100644
--- a/apps/server/src/database/types/db.d.ts
+++ b/apps/server/src/database/types/db.d.ts
@@ -199,6 +199,7 @@ export interface GroupUsers {
export interface PageHistory {
content: Json | null;
+ contributorIds: Generated;
coverPhoto: string | null;
createdAt: Generated;
icon: string | null;
@@ -273,6 +274,7 @@ export interface Spaces {
id: Generated;
logo: string | null;
name: string | null;
+ settings: Json | null;
slug: string;
updatedAt: Generated;
visibility: Generated;
@@ -360,6 +362,34 @@ export interface Workspaces {
updatedAt: Generated;
}
+export interface Notifications {
+ id: Generated;
+ userId: string;
+ workspaceId: string;
+ type: string;
+ actorId: string | null;
+ pageId: string | null;
+ spaceId: string | null;
+ commentId: string | null;
+ data: Json | null;
+ readAt: Timestamp | null;
+ emailedAt: Timestamp | null;
+ archivedAt: Timestamp | null;
+ createdAt: Generated;
+}
+
+export interface Watchers {
+ id: Generated;
+ userId: string;
+ pageId: string | null;
+ spaceId: string;
+ workspaceId: string;
+ type: string;
+ addedById: string | null;
+ mutedAt: Timestamp | null;
+ createdAt: Generated;
+}
+
export interface DB {
apiKeys: ApiKeys;
attachments: Attachments;
@@ -371,6 +401,7 @@ export interface DB {
fileTasks: FileTasks;
groups: Groups;
groupUsers: GroupUsers;
+ notifications: Notifications;
pageHistory: PageHistory;
pages: Pages;
shares: Shares;
@@ -379,6 +410,7 @@ export interface DB {
userMfa: UserMfa;
users: Users;
userTokens: UserTokens;
+ watchers: Watchers;
workspaceInvitations: WorkspaceInvitations;
workspaces: Workspaces;
}
diff --git a/apps/server/src/database/types/db.interface.ts b/apps/server/src/database/types/db.interface.ts
index 969e2059..be66fd8c 100644
--- a/apps/server/src/database/types/db.interface.ts
+++ b/apps/server/src/database/types/db.interface.ts
@@ -1,47 +1,6 @@
-import {
- ApiKeys,
- Attachments,
- AuthAccounts,
- AuthProviders,
- Backlinks,
- Billing,
- Comments,
- FileTasks,
- Groups,
- GroupUsers,
- PageHistory,
- Pages,
- Shares,
- SpaceMembers,
- Spaces,
- UserMfa,
- Users,
- UserTokens,
- WorkspaceInvitations,
- Workspaces,
-} from '@docmost/db/types/db';
+import { DB } from '@docmost/db/types/db';
import { PageEmbeddings } from '@docmost/db/types/embeddings.types';
-export interface DbInterface {
- attachments: Attachments;
- authAccounts: AuthAccounts;
- authProviders: AuthProviders;
- backlinks: Backlinks;
- billing: Billing;
- comments: Comments;
- fileTasks: FileTasks;
- groups: Groups;
- groupUsers: GroupUsers;
+export interface DbInterface extends DB {
pageEmbeddings: PageEmbeddings;
- pageHistory: PageHistory;
- pages: Pages;
- shares: Shares;
- spaceMembers: SpaceMembers;
- spaces: Spaces;
- userMfa: UserMfa;
- users: Users;
- userTokens: UserTokens;
- workspaceInvitations: WorkspaceInvitations;
- workspaces: Workspaces;
- apiKeys: ApiKeys;
}
diff --git a/apps/server/src/database/types/entity.types.ts b/apps/server/src/database/types/entity.types.ts
index 7f273dce..65e1024a 100644
--- a/apps/server/src/database/types/entity.types.ts
+++ b/apps/server/src/database/types/entity.types.ts
@@ -3,6 +3,7 @@ import {
Attachments,
Comments,
Groups,
+ Notifications,
Pages,
Spaces,
Users,
@@ -20,6 +21,7 @@ import {
FileTasks,
UserMfa as _UserMFA,
ApiKeys,
+ Watchers,
} from './db';
import { PageEmbeddings } from '@docmost/db/types/embeddings.types';
@@ -131,3 +133,13 @@ export type UpdatableApiKey = Updateable>;
export type PageEmbedding = Selectable;
export type InsertablePageEmbedding = Insertable;
export type UpdatablePageEmbedding = Updateable>;
+
+// Notification
+export type Notification = Selectable;
+export type InsertableNotification = Insertable;
+export type UpdatableNotification = Updateable>;
+
+// Watcher
+export type Watcher = Selectable;
+export type InsertableWatcher = Insertable;
+export type UpdatableWatcher = Updateable>;
diff --git a/apps/server/src/ee b/apps/server/src/ee
index 667619ef..a3b48000 160000
--- a/apps/server/src/ee
+++ b/apps/server/src/ee
@@ -1 +1 @@
-Subproject commit 667619ef8e16a3ad64f036f7d77829183043e38e
+Subproject commit a3b48000bd4b7e1b6b0ff54c5764794070c63b34
diff --git a/apps/server/src/integrations/environment/environment.module.ts b/apps/server/src/integrations/environment/environment.module.ts
index ac41aaf1..1cf99ecc 100644
--- a/apps/server/src/integrations/environment/environment.module.ts
+++ b/apps/server/src/integrations/environment/environment.module.ts
@@ -4,6 +4,7 @@ import { ConfigModule } from '@nestjs/config';
import { validate } from './environment.validation';
import { envPath } from '../../common/helpers';
import { DomainService } from './domain.service';
+import { LicenseCheckService } from './license-check.service';
@Global()
@Module({
@@ -15,7 +16,7 @@ import { DomainService } from './domain.service';
validate,
}),
],
- providers: [EnvironmentService, DomainService],
- exports: [EnvironmentService, DomainService],
+ providers: [EnvironmentService, DomainService, LicenseCheckService],
+ exports: [EnvironmentService, DomainService, LicenseCheckService],
})
export class EnvironmentModule {}
diff --git a/apps/server/src/integrations/environment/environment.validation.ts b/apps/server/src/integrations/environment/environment.validation.ts
index ced01b5d..5f65d018 100644
--- a/apps/server/src/integrations/environment/environment.validation.ts
+++ b/apps/server/src/integrations/environment/environment.validation.ts
@@ -91,7 +91,6 @@ export class EnvironmentVariables {
@ValidateIf((obj) => obj.SEARCH_DRIVER === 'typesense')
TYPESENSE_URL: string;
- @IsOptional()
@ValidateIf((obj) => obj.SEARCH_DRIVER === 'typesense')
@IsNotEmpty()
@IsString()
@@ -110,18 +109,14 @@ export class EnvironmentVariables {
AI_DRIVER: string;
@IsOptional()
- @ValidateIf((obj) => obj.AI_DRIVER)
@IsString()
- @IsNotEmpty()
AI_EMBEDDING_MODEL: string;
- @IsOptional()
@ValidateIf((obj) => obj.AI_EMBEDDING_DIMENSION)
@IsIn(['768', '1024', '1536', '2000', '3072'])
@IsString()
AI_EMBEDDING_DIMENSION: string;
- @IsOptional()
@ValidateIf((obj) => obj.AI_DRIVER)
@IsString()
@IsNotEmpty()
@@ -145,13 +140,11 @@ export class EnvironmentVariables {
@IsUrl({ protocols: ['http', 'https'], require_tld: false })
OPENAI_API_URL: string;
- @IsOptional()
@ValidateIf((obj) => obj.AI_DRIVER && obj.AI_DRIVER === 'gemini')
@IsString()
@IsNotEmpty()
GEMINI_API_KEY: string;
- @IsOptional()
@ValidateIf((obj) => obj.AI_DRIVER && obj.AI_DRIVER === 'ollama')
@IsUrl({ protocols: ['http', 'https'], require_tld: false })
OLLAMA_API_URL: string;
diff --git a/apps/server/src/integrations/environment/license-check.service.ts b/apps/server/src/integrations/environment/license-check.service.ts
new file mode 100644
index 00000000..a6051c79
--- /dev/null
+++ b/apps/server/src/integrations/environment/license-check.service.ts
@@ -0,0 +1,28 @@
+import { Injectable } from '@nestjs/common';
+import { ModuleRef } from '@nestjs/core';
+import { EnvironmentService } from './environment.service';
+
+@Injectable()
+export class LicenseCheckService {
+ constructor(
+ private moduleRef: ModuleRef,
+ private environmentService: EnvironmentService,
+ ) {}
+
+ isValidEELicense(licenseKey: string): boolean {
+ if (this.environmentService.isCloud()) {
+ return true;
+ }
+
+ try {
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
+ const LicenseModule = require('../../ee/licence/license.service');
+ const licenseService = this.moduleRef.get(LicenseModule.LicenseService, {
+ strict: false,
+ });
+ return licenseService.isValidEELicense(licenseKey);
+ } catch {
+ return false;
+ }
+ }
+}
diff --git a/apps/server/src/integrations/import/import.controller.ts b/apps/server/src/integrations/import/import.controller.ts
index 1adb82eb..11842a51 100644
--- a/apps/server/src/integrations/import/import.controller.ts
+++ b/apps/server/src/integrations/import/import.controller.ts
@@ -44,7 +44,7 @@ export class ImportController {
@AuthUser() user: User,
@AuthWorkspace() workspace: Workspace,
) {
- const validFileExtensions = ['.md', '.html'];
+ const validFileExtensions = ['.md', '.html', '.docx'];
const maxFileSize = bytes('10mb');
diff --git a/apps/server/src/integrations/import/services/import.service.ts b/apps/server/src/integrations/import/services/import.service.ts
index aeeebcee..a6aec5c5 100644
--- a/apps/server/src/integrations/import/services/import.service.ts
+++ b/apps/server/src/integrations/import/services/import.service.ts
@@ -29,6 +29,7 @@ import { StorageService } from '../../storage/storage.service';
import { InjectQueue } from '@nestjs/bullmq';
import { Queue } from 'bullmq';
import { QueueJob, QueueName } from '../../queue/constants';
+import { ModuleRef } from '@nestjs/core';
@Injectable()
export class ImportService {
@@ -40,6 +41,7 @@ export class ImportService {
@InjectKysely() private readonly db: KyselyDB,
@InjectQueue(QueueName.FILE_TASK_QUEUE)
private readonly fileTaskQueue: Queue,
+ private moduleRef: ModuleRef,
) {}
async importPage(
@@ -59,11 +61,22 @@ export class ImportService {
let prosemirrorState = null;
let createdPage = null;
+ // For DOCX, we need the page ID upfront so images can reference it
+ const pageId = fileExtension === '.docx' ? uuid7() : undefined;
+
try {
if (fileExtension.endsWith('.md')) {
prosemirrorState = await this.processMarkdown(fileContent);
} else if (fileExtension.endsWith('.html')) {
prosemirrorState = await this.processHTML(fileContent);
+ } else if (fileExtension.endsWith('.docx')) {
+ prosemirrorState = await this.processDocx(
+ fileBuffer,
+ workspaceId,
+ spaceId,
+ pageId,
+ userId,
+ );
}
} catch (err) {
const message = 'Error processing file content';
@@ -87,6 +100,7 @@ export class ImportService {
const pagePosition = await this.getNewPagePosition(spaceId);
createdPage = await this.pageRepo.insertPage({
+ ...(pageId ? { id: pageId } : {}),
slugId: generateSlugId(),
title: pageTitle,
content: prosemirrorJson,
@@ -129,6 +143,42 @@ export class ImportService {
}
}
+ async processDocx(
+ fileBuffer: Buffer,
+ workspaceId: string,
+ spaceId: string,
+ pageId: string,
+ userId: string,
+ ): Promise {
+ let DocxImportModule: any;
+ try {
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
+ DocxImportModule = require('./../../../ee/docx-import/docx-import.service');
+ } catch (err) {
+ this.logger.error(
+ 'DOCX import requested but EE module not bundled in this build',
+ );
+ throw new BadRequestException(
+ 'This feature requires a valid enterprise license.',
+ );
+ }
+
+ const docxImportService = this.moduleRef.get(
+ DocxImportModule.DocxImportService,
+ { strict: false },
+ );
+
+ const html = await docxImportService.convertDocxToHtml(
+ fileBuffer,
+ workspaceId,
+ spaceId,
+ pageId,
+ userId,
+ );
+
+ return this.processHTML(html);
+ }
+
async createYdoc(prosemirrorJson: any): Promise {
if (prosemirrorJson) {
// this.logger.debug(`Converting prosemirror json state to ydoc`);
diff --git a/apps/server/src/integrations/mail/interfaces/mail.message.ts b/apps/server/src/integrations/mail/interfaces/mail.message.ts
index b21f7fe4..8ca5c41f 100644
--- a/apps/server/src/integrations/mail/interfaces/mail.message.ts
+++ b/apps/server/src/integrations/mail/interfaces/mail.message.ts
@@ -5,4 +5,5 @@ export interface MailMessage {
text?: string;
html?: string;
template?: any;
+ notificationId?: string;
}
diff --git a/apps/server/src/integrations/mail/processors/email.processor.ts b/apps/server/src/integrations/mail/processors/email.processor.ts
index 699bab54..a2ef2b4b 100644
--- a/apps/server/src/integrations/mail/processors/email.processor.ts
+++ b/apps/server/src/integrations/mail/processors/email.processor.ts
@@ -4,11 +4,15 @@ import { QueueName } from '../../queue/constants';
import { Job } from 'bullmq';
import { MailService } from '../mail.service';
import { MailMessage } from '../interfaces/mail.message';
+import { NotificationRepo } from '@docmost/db/repos/notification/notification.repo';
@Processor(QueueName.EMAIL_QUEUE)
export class EmailProcessor extends WorkerHost implements OnModuleDestroy {
private readonly logger = new Logger(EmailProcessor.name);
- constructor(private readonly mailService: MailService) {
+ constructor(
+ private readonly mailService: MailService,
+ private readonly notificationRepo: NotificationRepo,
+ ) {
super();
}
@@ -18,6 +22,14 @@ export class EmailProcessor extends WorkerHost implements OnModuleDestroy {
} catch (err) {
throw err;
}
+
+ if (job.data.notificationId) {
+ try {
+ await this.notificationRepo.markAsEmailed(job.data.notificationId);
+ } catch (err) {
+ this.logger.warn(`Failed to mark notification ${job.data.notificationId} as emailed`);
+ }
+ }
}
@OnWorkerEvent('active')
diff --git a/apps/server/src/integrations/queue/constants/queue.constants.ts b/apps/server/src/integrations/queue/constants/queue.constants.ts
index 5c7aa29a..a60fc184 100644
--- a/apps/server/src/integrations/queue/constants/queue.constants.ts
+++ b/apps/server/src/integrations/queue/constants/queue.constants.ts
@@ -6,6 +6,8 @@ export enum QueueName {
FILE_TASK_QUEUE = '{file-task-queue}',
SEARCH_QUEUE = '{search-queue}',
AI_QUEUE = '{ai-queue}',
+ HISTORY_QUEUE = '{history-queue}',
+ NOTIFICATION_QUEUE = '{notification-queue}',
}
export enum QueueJob {
@@ -18,6 +20,7 @@ export enum QueueJob {
DELETE_USER_AVATARS = 'delete-user-avatars',
PAGE_BACKLINKS = 'page-backlinks',
+ ADD_PAGE_WATCHERS = 'add-page-watchers',
STRIPE_SEATS_SYNC = 'sync-stripe-seats',
TRIAL_ENDED = 'trial-ended',
@@ -58,4 +61,10 @@ export enum QueueJob {
GENERATE_PAGE_EMBEDDINGS = 'generate-page-embeddings',
DELETE_PAGE_EMBEDDINGS = 'delete-page-embeddings',
+
+ PAGE_HISTORY = 'page-history',
+
+ COMMENT_NOTIFICATION = 'comment-notification',
+ COMMENT_RESOLVED_NOTIFICATION = 'comment-resolved-notification',
+ PAGE_MENTION_NOTIFICATION = 'page-mention-notification',
}
diff --git a/apps/server/src/integrations/queue/constants/queue.interface.ts b/apps/server/src/integrations/queue/constants/queue.interface.ts
index ce105f1c..613feb75 100644
--- a/apps/server/src/integrations/queue/constants/queue.interface.ts
+++ b/apps/server/src/integrations/queue/constants/queue.interface.ts
@@ -7,6 +7,56 @@ export interface IPageBacklinkJob {
mentions: MentionNode[];
}
+export interface IAddPageWatchersJob {
+ userIds: string[];
+ pageId: string;
+ spaceId: string;
+ workspaceId: string;
+}
+
export interface IStripeSeatsSyncJob {
workspaceId: string;
-}
\ No newline at end of file
+}
+
+export interface IPageHistoryJob {
+ pageId: string;
+}
+
+export interface INotificationCreateJob {
+ userId: string;
+ workspaceId: string;
+ type: string;
+ actorId?: string;
+ pageId?: string;
+ spaceId?: string;
+ commentId?: string;
+ data?: Record;
+}
+
+export interface ICommentNotificationJob {
+ commentId: string;
+ parentCommentId?: string;
+ pageId: string;
+ spaceId: string;
+ workspaceId: string;
+ actorId: string;
+ mentionedUserIds: string[];
+ notifyWatchers: boolean;
+}
+
+export interface ICommentResolvedNotificationJob {
+ commentId: string;
+ commentCreatorId: string;
+ pageId: string;
+ spaceId: string;
+ workspaceId: string;
+ actorId: string;
+}
+
+export interface IPageMentionNotificationJob {
+ userMentions: { userId: string; mentionId: string; creatorId: string }[];
+ oldMentionedUserIds: string[];
+ pageId: string;
+ spaceId: string;
+ workspaceId: string;
+}
diff --git a/apps/server/src/integrations/queue/processors/backlinks.processor.ts b/apps/server/src/integrations/queue/processors/backlinks.processor.ts
deleted file mode 100644
index 31be44b3..00000000
--- a/apps/server/src/integrations/queue/processors/backlinks.processor.ts
+++ /dev/null
@@ -1,135 +0,0 @@
-import { Logger, OnModuleDestroy } from '@nestjs/common';
-import { OnWorkerEvent, Processor, WorkerHost } from '@nestjs/bullmq';
-import { Job } from 'bullmq';
-import { QueueJob, QueueName } from '../constants';
-import { IPageBacklinkJob } from '../constants/queue.interface';
-import { InjectKysely } from 'nestjs-kysely';
-import { KyselyDB } from '@docmost/db/types/kysely.types';
-import { BacklinkRepo } from '@docmost/db/repos/backlink/backlink.repo';
-import { executeTx } from '@docmost/db/utils';
-
-@Processor(QueueName.GENERAL_QUEUE)
-export class BacklinksProcessor extends WorkerHost implements OnModuleDestroy {
- private readonly logger = new Logger(BacklinksProcessor.name);
- constructor(
- @InjectKysely() private readonly db: KyselyDB,
- private readonly backlinkRepo: BacklinkRepo,
- ) {
- super();
- }
-
- async process(job: Job): Promise {
- try {
- const { pageId, mentions, workspaceId } = job.data;
-
- switch (job.name) {
- case QueueJob.PAGE_BACKLINKS:
- {
- await executeTx(this.db, async (trx) => {
- const existingBacklinks = await trx
- .selectFrom('backlinks')
- .select('targetPageId')
- .where('sourcePageId', '=', pageId)
- .execute();
-
- if (existingBacklinks.length === 0 && mentions.length === 0) {
- return;
- }
-
- const existingTargetPageIds = existingBacklinks.map(
- (backlink) => backlink.targetPageId,
- );
-
- const targetPageIds = mentions
- .filter((mention) => mention.entityId !== pageId)
- .map((mention) => mention.entityId);
-
- // make sure target pages belong to the same workspace
- let validTargetPages = [];
- if (targetPageIds.length > 0) {
- validTargetPages = await trx
- .selectFrom('pages')
- .select('id')
- .where('id', 'in', targetPageIds)
- .where('workspaceId', '=', workspaceId)
- .execute();
- }
-
- const validTargetPageIds = validTargetPages.map(
- (page) => page.id,
- );
-
- // new backlinks
- const backlinksToAdd = validTargetPageIds.filter(
- (id) => !existingTargetPageIds.includes(id),
- );
-
- // stale backlinks
- const backlinksToRemove = existingTargetPageIds.filter(
- (existingId) => !validTargetPageIds.includes(existingId),
- );
-
- // add new backlinks
- if (backlinksToAdd.length > 0) {
- const newBacklinks = backlinksToAdd.map((targetPageId) => ({
- sourcePageId: pageId,
- targetPageId: targetPageId,
- workspaceId: workspaceId,
- }));
-
- await this.backlinkRepo.insertBacklink(newBacklinks, trx);
- this.logger.debug(
- `Added ${newBacklinks.length} new backlinks to ${pageId}`,
- );
- }
-
- // remove stale backlinks
- if (backlinksToRemove.length > 0) {
- await this.db
- .deleteFrom('backlinks')
- .where('sourcePageId', '=', pageId)
- .where('targetPageId', 'in', backlinksToRemove)
- .execute();
-
- this.logger.debug(
- `Removed ${backlinksToRemove.length} outdated backlinks from ${pageId}.`,
- );
- }
- });
- }
- break;
- }
- } catch (err) {
- throw err;
- }
- }
-
- @OnWorkerEvent('active')
- onActive(job: Job) {
- if (job.name === QueueJob.PAGE_BACKLINKS) {
- this.logger.debug(`Processing ${job.name} job`);
- }
- }
-
- @OnWorkerEvent('failed')
- onError(job: Job) {
- if (job.name === QueueJob.PAGE_BACKLINKS) {
- this.logger.error(
- `Error processing ${job.name} job. Reason: ${job.failedReason}`,
- );
- }
- }
-
- @OnWorkerEvent('completed')
- onCompleted(job: Job) {
- if (job.name === QueueJob.PAGE_BACKLINKS) {
- this.logger.debug(`Completed ${job.name} job`);
- }
- }
-
- async onModuleDestroy(): Promise {
- if (this.worker) {
- await this.worker.close();
- }
- }
-}
diff --git a/apps/server/src/integrations/queue/processors/general-queue.processor.ts b/apps/server/src/integrations/queue/processors/general-queue.processor.ts
new file mode 100644
index 00000000..617cee10
--- /dev/null
+++ b/apps/server/src/integrations/queue/processors/general-queue.processor.ts
@@ -0,0 +1,87 @@
+import { Logger, OnModuleDestroy } from '@nestjs/common';
+import { OnWorkerEvent, Processor, WorkerHost } from '@nestjs/bullmq';
+import { Job } from 'bullmq';
+import { QueueJob, QueueName } from '../constants';
+import {
+ IAddPageWatchersJob,
+ IPageBacklinkJob,
+} from '../constants/queue.interface';
+import { InjectKysely } from 'nestjs-kysely';
+import { KyselyDB } from '@docmost/db/types/kysely.types';
+import { BacklinkRepo } from '@docmost/db/repos/backlink/backlink.repo';
+import {
+ WatcherRepo,
+ WatcherType,
+} from '@docmost/db/repos/watcher/watcher.repo';
+import { InsertableWatcher } from '@docmost/db/types/entity.types';
+import { processBacklinks } from '../tasks/backlinks.task';
+
+@Processor(QueueName.GENERAL_QUEUE)
+export class GeneralQueueProcessor
+ extends WorkerHost
+ implements OnModuleDestroy
+{
+ private readonly logger = new Logger(GeneralQueueProcessor.name);
+ constructor(
+ @InjectKysely() private readonly db: KyselyDB,
+ private readonly backlinkRepo: BacklinkRepo,
+ private readonly watcherRepo: WatcherRepo,
+ ) {
+ super();
+ }
+
+ async process(job: Job): Promise {
+ try {
+ switch (job.name) {
+ case QueueJob.ADD_PAGE_WATCHERS: {
+ const { userIds, pageId, spaceId, workspaceId } =
+ job.data as IAddPageWatchersJob;
+ const watchers: InsertableWatcher[] = userIds.map((userId) => ({
+ userId,
+ pageId,
+ spaceId,
+ workspaceId,
+ type: WatcherType.PAGE,
+ addedById: userId,
+ }));
+ await this.watcherRepo.insertMany(watchers);
+ break;
+ }
+
+ case QueueJob.PAGE_BACKLINKS: {
+ await processBacklinks(
+ this.db,
+ this.backlinkRepo,
+ job.data as IPageBacklinkJob,
+ );
+ break;
+ }
+ }
+ } catch (err) {
+ throw err;
+ }
+ }
+
+ @OnWorkerEvent('active')
+ onActive(job: Job) {
+ this.logger.debug(`Processing ${job.name} job`);
+ }
+
+ @OnWorkerEvent('failed')
+ onError(job: Job) {
+ this.logger.error(
+ `Error processing ${job.name} job. Reason: ${job.failedReason}`,
+ );
+ }
+
+ @OnWorkerEvent('completed')
+ onCompleted(job: Job) {
+ this.logger.debug(`Completed ${job.name} job`);
+ }
+
+ async onModuleDestroy(): Promise {
+ if (this.worker) {
+ await this.worker.close();
+ }
+ }
+}
diff --git a/apps/server/src/integrations/queue/queue.module.ts b/apps/server/src/integrations/queue/queue.module.ts
index 6787e010..6268977f 100644
--- a/apps/server/src/integrations/queue/queue.module.ts
+++ b/apps/server/src/integrations/queue/queue.module.ts
@@ -3,7 +3,7 @@ import { BullModule } from '@nestjs/bullmq';
import { EnvironmentService } from '../environment/environment.service';
import { createRetryStrategy, parseRedisUrl } from '../../common/helpers';
import { QueueName } from './constants';
-import { BacklinksProcessor } from './processors/backlinks.processor';
+import { GeneralQueueProcessor } from './processors/general-queue.processor';
@Global()
@Module({
@@ -73,8 +73,19 @@ import { BacklinksProcessor } from './processors/backlinks.processor';
attempts: 1,
},
}),
+ BullModule.registerQueue({
+ name: QueueName.HISTORY_QUEUE,
+ defaultJobOptions: {
+ removeOnComplete: true,
+ removeOnFail: true,
+ attempts: 2,
+ },
+ }),
+ BullModule.registerQueue({
+ name: QueueName.NOTIFICATION_QUEUE,
+ }),
],
exports: [BullModule],
- providers: [BacklinksProcessor],
+ providers: [GeneralQueueProcessor],
})
export class QueueModule {}
diff --git a/apps/server/src/integrations/queue/tasks/backlinks.task.ts b/apps/server/src/integrations/queue/tasks/backlinks.task.ts
new file mode 100644
index 00000000..268adaae
--- /dev/null
+++ b/apps/server/src/integrations/queue/tasks/backlinks.task.ts
@@ -0,0 +1,80 @@
+import { Logger } from '@nestjs/common';
+import { KyselyDB } from '@docmost/db/types/kysely.types';
+import { BacklinkRepo } from '@docmost/db/repos/backlink/backlink.repo';
+import { IPageBacklinkJob } from '../constants/queue.interface';
+import { executeTx } from '@docmost/db/utils';
+
+const logger = new Logger('BacklinksTask');
+
+export async function processBacklinks(
+ db: KyselyDB,
+ backlinkRepo: BacklinkRepo,
+ data: IPageBacklinkJob,
+): Promise {
+ const { pageId, mentions, workspaceId } = data;
+
+ await executeTx(db, async (trx) => {
+ const existingBacklinks = await trx
+ .selectFrom('backlinks')
+ .select('targetPageId')
+ .where('sourcePageId', '=', pageId)
+ .execute();
+
+ if (existingBacklinks.length === 0 && mentions.length === 0) {
+ return;
+ }
+
+ const existingTargetPageIds = existingBacklinks.map(
+ (backlink) => backlink.targetPageId,
+ );
+
+ const targetPageIds = mentions
+ .filter((mention) => mention.entityId !== pageId)
+ .map((mention) => mention.entityId);
+
+ let validTargetPages = [];
+ if (targetPageIds.length > 0) {
+ validTargetPages = await trx
+ .selectFrom('pages')
+ .select('id')
+ .where('id', 'in', targetPageIds)
+ .where('workspaceId', '=', workspaceId)
+ .execute();
+ }
+
+ const validTargetPageIds = validTargetPages.map((page) => page.id);
+
+ const backlinksToAdd = validTargetPageIds.filter(
+ (id) => !existingTargetPageIds.includes(id),
+ );
+
+ const backlinksToRemove = existingTargetPageIds.filter(
+ (existingId) => !validTargetPageIds.includes(existingId),
+ );
+
+ if (backlinksToAdd.length > 0) {
+ const newBacklinks = backlinksToAdd.map((targetPageId) => ({
+ sourcePageId: pageId,
+ targetPageId: targetPageId,
+ workspaceId: workspaceId,
+ }));
+
+ await backlinkRepo.insertBacklink(newBacklinks, trx);
+ logger.debug(
+ `Added ${newBacklinks.length} new backlinks to ${pageId}`,
+ );
+ }
+
+ if (backlinksToRemove.length > 0) {
+ await db
+ .deleteFrom('backlinks')
+ .where('sourcePageId', '=', pageId)
+ .where('targetPageId', 'in', backlinksToRemove)
+ .execute();
+
+ logger.debug(
+ `Removed ${backlinksToRemove.length} outdated backlinks from ${pageId}.`,
+ );
+ }
+ });
+}
diff --git a/apps/server/src/integrations/storage/drivers/local.driver.ts b/apps/server/src/integrations/storage/drivers/local.driver.ts
index aada2c05..90f7b7dd 100644
--- a/apps/server/src/integrations/storage/drivers/local.driver.ts
+++ b/apps/server/src/integrations/storage/drivers/local.driver.ts
@@ -73,6 +73,20 @@ export class LocalDriver implements StorageDriver {
}
}
+ async readRangeStream(
+ filePath: string,
+ range: { start: number; end: number },
+ ): Promise {
+ try {
+ return createReadStream(this._fullPath(filePath), {
+ start: range.start,
+ end: range.end,
+ });
+ } catch (err) {
+ throw new Error(`Failed to read file: ${(err as Error).message}`);
+ }
+ }
+
async exists(filePath: string): Promise {
try {
return await fs.pathExists(this._fullPath(filePath));
diff --git a/apps/server/src/integrations/storage/drivers/s3.driver.ts b/apps/server/src/integrations/storage/drivers/s3.driver.ts
index ed44fded..02087176 100644
--- a/apps/server/src/integrations/storage/drivers/s3.driver.ts
+++ b/apps/server/src/integrations/storage/drivers/s3.driver.ts
@@ -13,6 +13,7 @@ import { Readable } from 'stream';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
import { getMimeType } from '../../../common/helpers';
import { Upload } from '@aws-sdk/lib-storage';
+import { Logger } from '@nestjs/common';
export class S3Driver implements StorageDriver {
private readonly s3Client: S3Client;
@@ -39,6 +40,7 @@ export class S3Driver implements StorageDriver {
await upload.done();
} catch (err) {
+ Logger.error(err);
throw new Error(`Failed to upload file: ${(err as Error).message}`);
}
}
@@ -73,6 +75,7 @@ export class S3Driver implements StorageDriver {
await upload.done();
} catch (err) {
+ Logger.error(err);
throw new Error(`Failed to upload file: ${(err as Error).message}`);
} finally {
if (shouldDestroyClient && clientToUse) {
@@ -127,6 +130,25 @@ export class S3Driver implements StorageDriver {
}
}
+ async readRangeStream(
+ filePath: string,
+ range: { start: number; end: number },
+ ): Promise {
+ try {
+ const command = new GetObjectCommand({
+ Bucket: this.config.bucket,
+ Key: filePath,
+ Range: `bytes=${range.start}-${range.end}`,
+ });
+
+ const response = await this.s3Client.send(command);
+
+ return response.Body as Readable;
+ } catch (err) {
+ throw new Error(`Failed to read file from S3: ${(err as Error).message}`);
+ }
+ }
+
async exists(filePath: string): Promise {
try {
const command = new HeadObjectCommand({
diff --git a/apps/server/src/integrations/storage/interfaces/storage-driver.interface.ts b/apps/server/src/integrations/storage/interfaces/storage-driver.interface.ts
index f376c56f..c5764e0e 100644
--- a/apps/server/src/integrations/storage/interfaces/storage-driver.interface.ts
+++ b/apps/server/src/integrations/storage/interfaces/storage-driver.interface.ts
@@ -11,6 +11,11 @@ export interface StorageDriver {
readStream(filePath: string): Promise;
+ readRangeStream(
+ filePath: string,
+ range: { start: number; end: number },
+ ): Promise;
+
exists(filePath: string): Promise;
getUrl(filePath: string): string;
diff --git a/apps/server/src/integrations/storage/storage.service.ts b/apps/server/src/integrations/storage/storage.service.ts
index 3ed887af..cb643cc8 100644
--- a/apps/server/src/integrations/storage/storage.service.ts
+++ b/apps/server/src/integrations/storage/storage.service.ts
@@ -33,6 +33,13 @@ export class StorageService {
return this.storageDriver.readStream(filePath);
}
+ async readRangeStream(
+ filePath: string,
+ range: { start: number; end: number },
+ ): Promise {
+ return this.storageDriver.readRangeStream(filePath, range);
+ }
+
async exists(filePath: string): Promise {
return this.storageDriver.exists(filePath);
}
diff --git a/apps/server/src/integrations/transactional/emails/comment-created-email.tsx b/apps/server/src/integrations/transactional/emails/comment-created-email.tsx
new file mode 100644
index 00000000..49bde6c5
--- /dev/null
+++ b/apps/server/src/integrations/transactional/emails/comment-created-email.tsx
@@ -0,0 +1,43 @@
+import { Section, Text, Button } from '@react-email/components';
+import * as React from 'react';
+import { button, content, paragraph } from '../css/styles';
+import { MailBody } from '../partials/partials';
+
+interface Props {
+ actorName: string;
+ pageTitle: string;
+ pageUrl: string;
+}
+
+export const CommentCreateEmail = ({
+ actorName,
+ pageTitle,
+ pageUrl,
+}: Props) => {
+ return (
+
+
+ Hi there,
+
+ {actorName} commented on{' '}
+ {pageTitle} .
+
+
+
+
+ );
+};
+
+export default CommentCreateEmail;
diff --git a/apps/server/src/integrations/transactional/emails/comment-mention-email.tsx b/apps/server/src/integrations/transactional/emails/comment-mention-email.tsx
new file mode 100644
index 00000000..379a8586
--- /dev/null
+++ b/apps/server/src/integrations/transactional/emails/comment-mention-email.tsx
@@ -0,0 +1,43 @@
+import { Section, Text, Button } from '@react-email/components';
+import * as React from 'react';
+import { button, content, paragraph } from '../css/styles';
+import { MailBody } from '../partials/partials';
+
+interface Props {
+ actorName: string;
+ pageTitle: string;
+ pageUrl: string;
+}
+
+export const CommentMentionEmail = ({
+ actorName,
+ pageTitle,
+ pageUrl,
+}: Props) => {
+ return (
+
+
+ Hi there,
+
+ {actorName} mentioned you in a comment on{' '}
+ {pageTitle} .
+
+
+
+
+ );
+};
+
+export default CommentMentionEmail;
diff --git a/apps/server/src/integrations/transactional/emails/comment-resolved-email.tsx b/apps/server/src/integrations/transactional/emails/comment-resolved-email.tsx
new file mode 100644
index 00000000..886d08fd
--- /dev/null
+++ b/apps/server/src/integrations/transactional/emails/comment-resolved-email.tsx
@@ -0,0 +1,43 @@
+import { Section, Text, Button } from '@react-email/components';
+import * as React from 'react';
+import { button, content, paragraph } from '../css/styles';
+import { MailBody } from '../partials/partials';
+
+interface Props {
+ actorName: string;
+ pageTitle: string;
+ pageUrl: string;
+}
+
+export const CommentResolvedEmail = ({
+ actorName,
+ pageTitle,
+ pageUrl,
+}: Props) => {
+ return (
+
+
+ Hi there,
+
+ {actorName} resolved a comment on{' '}
+ {pageTitle} .
+
+
+
+
+ );
+};
+
+export default CommentResolvedEmail;
diff --git a/apps/server/src/integrations/transactional/emails/page-mention-email.tsx b/apps/server/src/integrations/transactional/emails/page-mention-email.tsx
new file mode 100644
index 00000000..a4b9baa7
--- /dev/null
+++ b/apps/server/src/integrations/transactional/emails/page-mention-email.tsx
@@ -0,0 +1,39 @@
+import { Section, Text, Button } from '@react-email/components';
+import * as React from 'react';
+import { button, content, paragraph } from '../css/styles';
+import { MailBody } from '../partials/partials';
+
+interface Props {
+ actorName: string;
+ pageTitle: string;
+ pageUrl: string;
+}
+
+export const PageMentionEmail = ({ actorName, pageTitle, pageUrl }: Props) => {
+ return (
+
+
+ Hi there,
+
+ {actorName} mentioned you in{' '}
+ {pageTitle} .
+
+
+
+
+ );
+};
+
+export default PageMentionEmail;
diff --git a/apps/server/src/main.ts b/apps/server/src/main.ts
index 0ab654d8..64d813bc 100644
--- a/apps/server/src/main.ts
+++ b/apps/server/src/main.ts
@@ -10,6 +10,7 @@ import { TransformHttpResponseInterceptor } from './common/interceptors/http-res
import { WsRedisIoAdapter } from './ws/adapter/ws-redis.adapter';
import fastifyMultipart from '@fastify/multipart';
import fastifyCookie from '@fastify/cookie';
+import { InternalLogFilter } from './common/logger/internal-log-filter';
async function bootstrap() {
const app = await NestFactory.create(
@@ -24,10 +25,10 @@ async function bootstrap() {
}),
{
rawBody: true,
- // disable Nest logger so pino handles all logs
+ // captures NestJS internal errors
+ logger: new InternalLogFilter(),
// bufferLogs must be false else pino will fail
// to log OnApplicationBootstrap logs
- logger: false,
bufferLogs: false,
},
);
diff --git a/apps/server/src/ws/ws.gateway.ts b/apps/server/src/ws/ws.gateway.ts
index eeaec897..9308f32e 100644
--- a/apps/server/src/ws/ws.gateway.ts
+++ b/apps/server/src/ws/ws.gateway.ts
@@ -37,10 +37,11 @@ export class WsGateway implements OnGatewayConnection, OnModuleDestroy {
const userSpaceIds = await this.spaceMemberRepo.getUserSpaceIds(userId);
+ const userRoom = `user-${userId}`;
const workspaceRoom = `workspace-${workspaceId}`;
const spaceRooms = userSpaceIds.map((id) => this.getSpaceRoomName(id));
- client.join([workspaceRoom, ...spaceRooms]);
+ client.join([userRoom, workspaceRoom, ...spaceRooms]);
} catch (err) {
client.emit('Unauthorized');
client.disconnect();
diff --git a/apps/server/src/ws/ws.module.ts b/apps/server/src/ws/ws.module.ts
index aa2d9b7c..d48cff94 100644
--- a/apps/server/src/ws/ws.module.ts
+++ b/apps/server/src/ws/ws.module.ts
@@ -5,5 +5,6 @@ import { TokenModule } from '../core/auth/token.module';
@Module({
imports: [TokenModule],
providers: [WsGateway],
+ exports: [WsGateway],
})
export class WsModule {}
diff --git a/docker-compose.yml b/docker-compose.yml
index 76887fae..606c229b 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -7,7 +7,7 @@ services:
environment:
APP_URL: 'http://localhost:3000'
APP_SECRET: 'REPLACE_WITH_LONG_SECRET'
- DATABASE_URL: 'postgresql://docmost:STRONG_DB_PASSWORD@db:5432/docmost?schema=public'
+ DATABASE_URL: 'postgresql://docmost:STRONG_DB_PASSWORD@db:5432/docmost'
REDIS_URL: 'redis://redis:6379'
ports:
- "3000:3000"
@@ -16,17 +16,18 @@ services:
- docmost:/app/data/storage
db:
- image: postgres:16-alpine
+ image: postgres:18
environment:
POSTGRES_DB: docmost
POSTGRES_USER: docmost
POSTGRES_PASSWORD: STRONG_DB_PASSWORD
restart: unless-stopped
volumes:
- - db_data:/var/lib/postgresql/data
+ - db_data:/var/lib/postgresql
redis:
- image: redis:7.2-alpine
+ image: redis:8
+ command: ["redis-server", "--appendonly", "yes", "--maxmemory-policy", "noeviction"]
restart: unless-stopped
volumes:
- redis_data:/data
diff --git a/nx.json b/nx.json
index f6c4289f..9578f835 100644
--- a/nx.json
+++ b/nx.json
@@ -6,6 +6,11 @@
],
"cache": true
},
+ "start:dev": {
+ "dependsOn": [
+ "^build"
+ ]
+ },
"lint": {
"cache": true
}
diff --git a/package.json b/package.json
index 71783209..625c065b 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "docmost",
"homepage": "https://docmost.com",
- "version": "0.25.0-beta.1",
+ "version": "0.25.3",
"private": true,
"scripts": {
"build": "nx run-many -t build",
@@ -23,9 +23,9 @@
"@casl/ability": "6.8.0",
"@docmost/editor-ext": "workspace:*",
"@floating-ui/dom": "^1.7.3",
- "@hocuspocus/provider": "3.4.3",
- "@hocuspocus/server": "3.4.3",
- "@hocuspocus/transformer": "3.4.3",
+ "@hocuspocus/provider": "3.4.4",
+ "@hocuspocus/server": "3.4.4",
+ "@hocuspocus/transformer": "3.4.4",
"@joplin/turndown": "^4.0.74",
"@joplin/turndown-plugin-gfm": "^1.0.56",
"@sindresorhus/slugify": "1.1.0",
@@ -56,11 +56,13 @@
"@tiptap/react": "3.17.1",
"@tiptap/starter-kit": "3.17.1",
"@tiptap/suggestion": "3.17.1",
+ "@tiptap/y-tiptap": "^3.0.2",
"@types/qrcode": "^1.5.5",
"bytes": "^3.1.2",
"cross-env": "^7.0.3",
"date-fns": "^4.1.0",
- "dompurify": "^3.2.6",
+ "diff": "8.0.3",
+ "dompurify": "^3.3.1",
"fractional-indexing-jittered": "^1.0.0",
"highlight.js": "^11.11.1",
"image-dimensions": "^2.5.0",
@@ -70,18 +72,19 @@
"marked": "13.0.3",
"ms": "3.0.0-canary.1",
"qrcode": "^1.5.4",
+ "rfc6902": "5.1.2",
"uuid": "^11.1.0",
"y-indexeddb": "^9.0.12",
"y-prosemirror": "1.3.7",
"yjs": "^13.6.29"
},
"devDependencies": {
- "@nx/js": "20.4.5",
+ "@nx/js": "22.5.0",
"@types/bytes": "^3.1.5",
"@types/turndown": "^5.0.6",
"@types/uuid": "^10.0.0",
"concurrently": "^9.1.2",
- "nx": "20.4.5",
+ "nx": "22.5.0",
"tsx": "^4.19.3"
},
"workspaces": {
@@ -99,7 +102,26 @@
"overrides": {
"jsdom": "25.0.1",
"jsonwebtoken": "9.0.3",
- "y-prosemirror": "1.3.7"
+ "prosemirror-changeset": "2.3.1",
+ "y-prosemirror": "1.3.7",
+ "qs": "6.14.2",
+ "glob": "10.5.0",
+ "lodash": "4.17.23",
+ "ws": "8.19.0",
+ "cross-spawn": "7.0.5",
+ "dompurify": "3.3.1",
+ "tmp": "0.2.5",
+ "lodash-es": "4.17.23",
+ "markdown-it": "14.1.1",
+ "@tiptap/core": "3.17.1",
+ "@tiptap/pm": "3.17.1",
+ "@tiptap/starter-kit": "3.17.1",
+ "@tiptap/extension-blockquote": "3.17.1",
+ "@tiptap/extension-bold": "3.17.0",
+ "@tiptap/extension-bubble-menu": "3.17.1",
+ "@tiptap/extension-bullet-list": "3.17.1",
+ "@tiptap/extension-list": "3.17.1",
+ "@tiptap/extension-code": "3.17.1"
},
"neverBuiltDependencies": []
}
diff --git a/packages/editor-ext/package.json b/packages/editor-ext/package.json
index 5a79fb27..022c4b6a 100644
--- a/packages/editor-ext/package.json
+++ b/packages/editor-ext/package.json
@@ -8,5 +8,6 @@
},
"main": "dist/index.js",
"module": "./src/index.ts",
- "types": "dist/index.d.ts"
+ "types": "dist/index.d.ts",
+ "dependencies": {}
}
diff --git a/packages/editor-ext/src/index.ts b/packages/editor-ext/src/index.ts
index 24d0ac5f..102cc4b1 100644
--- a/packages/editor-ext/src/index.ts
+++ b/packages/editor-ext/src/index.ts
@@ -24,3 +24,4 @@ export * from "./lib/highlight";
export * from "./lib/heading/heading";
export * from "./lib/unique-id";
export * from "./lib/shared-storage";
+export * from "./lib/recreate-transform";
diff --git a/packages/editor-ext/src/lib/heading/heading.ts b/packages/editor-ext/src/lib/heading/heading.ts
index 909524fd..26f6f0d4 100644
--- a/packages/editor-ext/src/lib/heading/heading.ts
+++ b/packages/editor-ext/src/lib/heading/heading.ts
@@ -4,11 +4,13 @@ import TiptapHeading, {
import { mergeAttributes } from "@tiptap/react";
import { Decoration, DecorationSet } from "prosemirror-view";
import { Plugin } from "prosemirror-state";
+import { copyToClipboard } from "../utils";
const copyIcon = ` `;
const successIcon = ` `;
export const Heading = TiptapHeading.extend({
+ // @ts-ignore
addProseMirrorPlugins() {
return [
new Plugin({
@@ -18,7 +20,7 @@ export const Heading = TiptapHeading.extend({
const { doc } = state;
doc.descendants((node, pos) => {
- if (node.type.name === "heading" && node.content.size > 0) {
+ if (node.type.name === "heading" && node.content.size > 1) {
const deco = Decoration.widget(
pos + node.nodeSize - 1,
() => {
@@ -41,7 +43,7 @@ export const Heading = TiptapHeading.extend({
const id = node.attrs.id;
const baseUrl = window.location.href.split('#')[0];
const url = `${baseUrl}#${id}`;
- navigator.clipboard.writeText(url);
+ copyToClipboard(url);
linkBtnContent.innerHTML = successIcon;
setTimeout(
() => (linkBtnContent.innerHTML = copyIcon),
diff --git a/packages/editor-ext/src/lib/image/image-upload.ts b/packages/editor-ext/src/lib/image/image-upload.ts
index d5acdcff..ca521bc8 100644
--- a/packages/editor-ext/src/lib/image/image-upload.ts
+++ b/packages/editor-ext/src/lib/image/image-upload.ts
@@ -1,9 +1,9 @@
-import { imageDimensionsFromStream } from "image-dimensions";
-import { MediaUploadOptions, UploadFn } from "../media-utils";
-import { IAttachment } from "../types";
-import { generateNodeId } from "../utils";
-import { Node } from "@tiptap/pm/model";
-import { Command } from "@tiptap/core";
+import { imageDimensionsFromData } from 'image-dimensions';
+import { MediaUploadOptions, UploadFn } from '../media-utils';
+import { IAttachment } from '../types';
+import { generateNodeId } from '../utils';
+import { Node } from '@tiptap/pm/model';
+import { Command } from '@tiptap/core';
const findImageNodeByPlaceholderId = (
doc: Node,
@@ -14,7 +14,7 @@ const findImageNodeByPlaceholderId = (
doc.descendants((node, pos) => {
if (result) return false;
if (
- node.type.name === "image" &&
+ node.type.name === 'image' &&
node.attrs.placeholder?.id === placeholderId
) {
result = { node, pos };
@@ -34,7 +34,11 @@ const handleImageUpload =
if (!validated) return;
const objectUrl = URL.createObjectURL(file);
- const imageDimensions = await imageDimensionsFromStream(file.stream());
+
+ const imageDimensions = imageDimensionsFromData(
+ new Uint8Array(await file.arrayBuffer()),
+ );
+
const placeholderId = generateNodeId();
const aspectRatio = imageDimensions
? imageDimensions.width / imageDimensions.height
diff --git a/packages/editor-ext/src/lib/recreate-transform/copy.ts b/packages/editor-ext/src/lib/recreate-transform/copy.ts
new file mode 100644
index 00000000..f17b880c
--- /dev/null
+++ b/packages/editor-ext/src/lib/recreate-transform/copy.ts
@@ -0,0 +1,3 @@
+export function copy(value: T): T {
+ return JSON.parse(JSON.stringify(value));
+}
diff --git a/packages/editor-ext/src/lib/recreate-transform/getFromPath.ts b/packages/editor-ext/src/lib/recreate-transform/getFromPath.ts
new file mode 100644
index 00000000..27558ded
--- /dev/null
+++ b/packages/editor-ext/src/lib/recreate-transform/getFromPath.ts
@@ -0,0 +1,17 @@
+import { AnyObject } from "./types";
+
+/**
+ * get target value from json-pointer (e.g. /content/0/content)
+ * @param {AnyObject} obj object to resolve path into
+ * @param {string} path json-pointer
+ * @return {any} target value
+ */
+export function getFromPath(obj: AnyObject, path: string): any {
+ const pathParts = path.split("/");
+ pathParts.shift(); // remove root-entry
+ while (pathParts.length) {
+ const property = pathParts.shift();
+ obj = obj[property];
+ }
+ return obj;
+}
diff --git a/packages/editor-ext/src/lib/recreate-transform/getReplaceStep.ts b/packages/editor-ext/src/lib/recreate-transform/getReplaceStep.ts
new file mode 100644
index 00000000..f7ba1edd
--- /dev/null
+++ b/packages/editor-ext/src/lib/recreate-transform/getReplaceStep.ts
@@ -0,0 +1,29 @@
+import { ReplaceStep } from "@tiptap/pm/transform";
+import { Node } from "@tiptap/pm/model";
+
+export function getReplaceStep(fromDoc: Node, toDoc: Node) {
+ let start = toDoc.content.findDiffStart(fromDoc.content);
+ if (start === null) {
+ return false;
+ }
+
+ // @ts-ignore property access to content
+ let { a: endA, b: endB } = toDoc.content.findDiffEnd(fromDoc.content);
+ const overlap = start - Math.min(endA, endB);
+ if (overlap > 0) {
+ // If there is an overlap, there is some freedom of choice in how to calculate the
+ // start/end boundary. for an inserted/removed slice. We choose the extreme with
+ // the lowest depth value.
+ if (
+ fromDoc.resolve(start - overlap).depth <
+ toDoc.resolve(endA + overlap).depth
+ ) {
+ start -= overlap;
+ } else {
+ endA += overlap;
+ endB += overlap;
+ }
+ }
+
+ return new ReplaceStep(start, endB, toDoc.slice(start, endA));
+}
diff --git a/packages/editor-ext/src/lib/recreate-transform/index.ts b/packages/editor-ext/src/lib/recreate-transform/index.ts
new file mode 100644
index 00000000..67d480cc
--- /dev/null
+++ b/packages/editor-ext/src/lib/recreate-transform/index.ts
@@ -0,0 +1,4 @@
+// https://gitlab.com/mpapp-public/prosemirror-recreate-steps - MIT
+// https://github.com/sueddeutsche/prosemirror-recreate-transform - MIT
+export { recreateTransform, RecreateTransform } from "./recreateTransform";
+export type { Options } from "./recreateTransform";
diff --git a/packages/editor-ext/src/lib/recreate-transform/recreateTransform.ts b/packages/editor-ext/src/lib/recreate-transform/recreateTransform.ts
new file mode 100644
index 00000000..61b70418
--- /dev/null
+++ b/packages/editor-ext/src/lib/recreate-transform/recreateTransform.ts
@@ -0,0 +1,279 @@
+import { Transform } from "@tiptap/pm/transform";
+import { Node, Schema } from "@tiptap/pm/model";
+import { applyPatch, createPatch, Operation } from "rfc6902";
+import { diffWordsWithSpace, diffChars } from "diff";
+import { AnyObject } from "./types";
+import { getReplaceStep } from "./getReplaceStep";
+import { simplifyTransform } from "./simplifyTransform";
+import { removeMarks } from "./removeMarks";
+import { getFromPath } from "./getFromPath";
+import { copy } from "./copy";
+
+export interface Options {
+ complexSteps?: boolean;
+ wordDiffs?: boolean;
+ simplifyDiff?: boolean;
+}
+
+export class RecreateTransform {
+ fromDoc: Node;
+ toDoc: Node;
+ complexSteps: boolean;
+ wordDiffs: boolean;
+ simplifyDiff: boolean;
+ schema: Schema;
+ tr: Transform;
+ /* current working document data, may get updated while recalculating node steps */
+ currentJSON: AnyObject;
+ /* final document as json data */
+ finalJSON: AnyObject;
+ ops: Array;
+
+ constructor(fromDoc: Node, toDoc: Node, options: Options = {}) {
+ const o = {
+ complexSteps: true,
+ wordDiffs: false,
+ simplifyDiff: true,
+ ...options,
+ };
+
+ this.fromDoc = fromDoc;
+ this.toDoc = toDoc;
+ this.complexSteps = o.complexSteps; // Whether to return steps other than ReplaceSteps
+ this.wordDiffs = o.wordDiffs; // Whether to make text diffs cover entire words
+ this.simplifyDiff = o.simplifyDiff;
+ this.schema = fromDoc.type.schema;
+ this.tr = new Transform(fromDoc);
+ }
+
+ init() {
+ if (this.complexSteps) {
+ // For First steps: we create versions of the documents without marks as
+ // these will only confuse the diffing mechanism and marks won't cause
+ // any mapping changes anyway.
+ this.currentJSON = removeMarks(this.fromDoc).toJSON();
+ this.finalJSON = removeMarks(this.toDoc).toJSON();
+ this.ops = createPatch(this.currentJSON, this.finalJSON);
+ this.recreateChangeContentSteps();
+ this.recreateChangeMarkSteps();
+ } else {
+ // We don't differentiate between mark changes and other changes.
+ this.currentJSON = this.fromDoc.toJSON();
+ this.finalJSON = this.toDoc.toJSON();
+ this.ops = createPatch(this.currentJSON, this.finalJSON);
+ this.recreateChangeContentSteps();
+ }
+
+ if (this.simplifyDiff) {
+ this.tr = simplifyTransform(this.tr) || this.tr;
+ }
+
+ return this.tr;
+ }
+
+ /** convert json-diff to prosemirror steps */
+ recreateChangeContentSteps() {
+ // First step: find content changing steps.
+ let ops = [];
+ while (this.ops.length) {
+ // get next
+ let op = this.ops.shift();
+ ops.push(op);
+
+ let toDoc;
+ const afterStepJSON = copy(this.currentJSON); // working document receiving patches
+ const pathParts = op.path.split("/");
+
+ // collect operations until we receive a valid document:
+ // apply ops-patches until a valid prosemirror document is retrieved,
+ // then try to create a transformation step or retry with next operation
+ while (toDoc == null) {
+ applyPatch(afterStepJSON, [op]);
+
+ try {
+ toDoc = this.schema.nodeFromJSON(afterStepJSON);
+ toDoc.check();
+ } catch (error) {
+ toDoc = null;
+ if (this.ops.length > 0) {
+ op = this.ops.shift();
+ ops.push(op);
+ } else {
+ throw new Error(`No valid diff possible applying ${op.path}`);
+ }
+ }
+ }
+
+ // apply operation (ignoring afterStepJSON)
+ if (
+ this.complexSteps &&
+ ops.length === 1 &&
+ (pathParts.includes("attrs") || pathParts.includes("type"))
+ ) {
+ // Node markup is changing
+ this.addSetNodeMarkup(); // a lost update is ignored
+ ops = [];
+ // console.log("%cop", logStyle, "- update node", ops);
+ } else if (
+ ops.length === 1 &&
+ op.op === "replace" &&
+ pathParts[pathParts.length - 1] === "text"
+ ) {
+ // Text is being replaced, we apply text diffing to find the smallest possible diffs.
+ this.addReplaceTextSteps(op, afterStepJSON);
+ ops = [];
+ // console.log("%cop", logStyle, "- replace", ops);
+ } else if (this.addReplaceStep(toDoc, afterStepJSON)) {
+ // operations have been applied
+ ops = [];
+ // console.log("%cop", logStyle, "- other", ops);
+ }
+ }
+ }
+
+ /** update node with attrs and marks, may also change type */
+ addSetNodeMarkup() {
+ // first diff in document is supposed to be a node-change (in type and/or attributes)
+ // thus simply find the first change and apply a node change step, then recalculate the diff
+ // after updating the document
+ const fromDoc = this.schema.nodeFromJSON(this.currentJSON);
+ const toDoc = this.schema.nodeFromJSON(this.finalJSON);
+ const start = toDoc.content.findDiffStart(fromDoc.content);
+ // @note start is the same (first) position for current and target document
+ const fromNode = fromDoc.nodeAt(start);
+ const toNode = toDoc.nodeAt(start);
+
+ if (start != null) {
+ // @note this completly updates all attributes in one step, by completely replacing node
+ const nodeType = fromNode.type === toNode.type ? null : toNode.type;
+ try {
+ this.tr.setNodeMarkup(start, nodeType, toNode.attrs, toNode.marks);
+ } catch (e) {
+ // if nodetypes differ, the updated node-type and contents might not be compatible
+ // with schema and requires a replace
+ if (nodeType && e.message.includes("Invalid content")) {
+ // @todo add test-case for this scenario
+ this.tr.replaceWith(start, start + fromNode.nodeSize, toNode);
+ } else {
+ throw e;
+ }
+ }
+ this.currentJSON = removeMarks(this.tr.doc).toJSON();
+ // setting the node markup may have invalidated the following ops, so we calculate them again.
+ this.ops = createPatch(this.currentJSON, this.finalJSON);
+ return true;
+ }
+ return false;
+ }
+
+ recreateChangeMarkSteps() {
+ // Now the documents should be the same, except their marks, so everything should map 1:1.
+ // Second step: Iterate through the toDoc and make sure all marks are the same in tr.doc
+ this.toDoc.descendants((tNode, tPos) => {
+ if (!tNode.isInline) {
+ return true;
+ }
+
+ this.tr.doc.nodesBetween(tPos, tPos + tNode.nodeSize, (fNode, fPos) => {
+ if (!fNode.isInline) {
+ return true;
+ }
+ const from = Math.max(tPos, fPos);
+ const to = Math.min(tPos + tNode.nodeSize, fPos + fNode.nodeSize);
+ fNode.marks.forEach((nodeMark) => {
+ if (!nodeMark.isInSet(tNode.marks)) {
+ this.tr.removeMark(from, to, nodeMark);
+ }
+ });
+ tNode.marks.forEach((nodeMark) => {
+ if (!nodeMark.isInSet(fNode.marks)) {
+ this.tr.addMark(from, to, nodeMark);
+ }
+ });
+ });
+ });
+ }
+
+ /**
+ * retrieve and possibly apply replace-step based from doc changes
+ * From http://prosemirror.net/examples/footnote/
+ */
+ addReplaceStep(toDoc: Node, afterStepJSON: AnyObject) {
+ const fromDoc = this.schema.nodeFromJSON(this.currentJSON);
+ const step = getReplaceStep(fromDoc, toDoc);
+
+ if (!step) {
+ return false;
+ } else if (!this.tr.maybeStep(step).failed) {
+ this.currentJSON = afterStepJSON;
+ return true; // @change previously null
+ }
+
+ throw new Error("No valid step found.");
+ }
+
+ /** retrieve and possibly apply text replace-steps based from doc changes */
+ addReplaceTextSteps(op, afterStepJSON) {
+ // We find the position number of the first character in the string
+ const op1 = { ...op, value: "xx" };
+ const op2 = { ...op, value: "yy" };
+ const afterOP1JSON = copy(this.currentJSON);
+ const afterOP2JSON = copy(this.currentJSON);
+ applyPatch(afterOP1JSON, [op1]);
+ applyPatch(afterOP2JSON, [op2]);
+ const op1Doc = this.schema.nodeFromJSON(afterOP1JSON);
+ const op2Doc = this.schema.nodeFromJSON(afterOP2JSON);
+
+ // get text diffs
+ const finalText = op.value;
+ const currentText = getFromPath(this.currentJSON, op.path);
+ const textDiffs = this.wordDiffs
+ ? diffWordsWithSpace(currentText, finalText)
+ : diffChars(currentText, finalText);
+
+ let offset = op1Doc.content.findDiffStart(op2Doc.content);
+ const marks = op1Doc.resolve(offset + 1).marks();
+
+ while (textDiffs.length) {
+ const diff = textDiffs.shift();
+
+ if (diff.added) {
+ const textNode = this.schema
+ .nodeFromJSON({ type: "text", text: diff.value })
+ .mark(marks);
+
+ if (textDiffs.length && textDiffs[0].removed) {
+ const nextDiff = textDiffs.shift();
+ this.tr.replaceWith(offset, offset + nextDiff.value.length, textNode);
+ } else {
+ this.tr.insert(offset, textNode);
+ }
+ offset += diff.value.length;
+ } else if (diff.removed) {
+ if (textDiffs.length && textDiffs[0].added) {
+ const nextDiff = textDiffs.shift();
+ const textNode = this.schema
+ .nodeFromJSON({ type: "text", text: nextDiff.value })
+ .mark(marks);
+ this.tr.replaceWith(offset, offset + diff.value.length, textNode);
+ offset += nextDiff.value.length;
+ } else {
+ this.tr.delete(offset, offset + diff.value.length);
+ }
+ } else {
+ offset += diff.value.length;
+ }
+ }
+
+ this.currentJSON = afterStepJSON;
+ }
+}
+
+export function recreateTransform(
+ fromDoc: Node,
+ toDoc: Node,
+ options: Options = {},
+): Transform {
+ const recreator = new RecreateTransform(fromDoc, toDoc, options);
+ return recreator.init();
+}
diff --git a/packages/editor-ext/src/lib/recreate-transform/removeMarks.ts b/packages/editor-ext/src/lib/recreate-transform/removeMarks.ts
new file mode 100644
index 00000000..cdefc55f
--- /dev/null
+++ b/packages/editor-ext/src/lib/recreate-transform/removeMarks.ts
@@ -0,0 +1,8 @@
+import { Transform } from "@tiptap/pm/transform";
+import { Node } from "@tiptap/pm/model";
+
+export function removeMarks(doc: Node) {
+ const tr = new Transform(doc);
+ tr.removeMark(0, doc.nodeSize - 2);
+ return tr.doc;
+}
diff --git a/packages/editor-ext/src/lib/recreate-transform/simplifyTransform.ts b/packages/editor-ext/src/lib/recreate-transform/simplifyTransform.ts
new file mode 100644
index 00000000..a7bf2a28
--- /dev/null
+++ b/packages/editor-ext/src/lib/recreate-transform/simplifyTransform.ts
@@ -0,0 +1,30 @@
+import { Transform, ReplaceStep, Step } from "@tiptap/pm/transform";
+import { getReplaceStep } from "./getReplaceStep";
+
+// join adjacent ReplaceSteps
+export function simplifyTransform(tr: Transform) {
+ if (!tr.steps.length) {
+ return undefined;
+ }
+
+ const newTr = new Transform(tr.docs[0]);
+ const oldSteps = tr.steps.slice();
+
+ while (oldSteps.length) {
+ let step = oldSteps.shift();
+ while (oldSteps.length && step.merge(oldSteps[0])) {
+ const addedStep = oldSteps.shift();
+ if (step instanceof ReplaceStep && addedStep instanceof ReplaceStep) {
+ step = getReplaceStep(
+ newTr.doc,
+ addedStep.apply(step.apply(newTr.doc).doc).doc,
+ // @ts-ignore
+ ) as Step;
+ } else {
+ step = step.merge(addedStep);
+ }
+ }
+ newTr.step(step);
+ }
+ return newTr;
+}
diff --git a/packages/editor-ext/src/lib/recreate-transform/types.ts b/packages/editor-ext/src/lib/recreate-transform/types.ts
new file mode 100644
index 00000000..59a303c7
--- /dev/null
+++ b/packages/editor-ext/src/lib/recreate-transform/types.ts
@@ -0,0 +1,3 @@
+export interface AnyObject {
+ [p: string]: any;
+}
diff --git a/packages/editor-ext/src/lib/utils.ts b/packages/editor-ext/src/lib/utils.ts
index 350ab3bb..4c0b798e 100644
--- a/packages/editor-ext/src/lib/utils.ts
+++ b/packages/editor-ext/src/lib/utils.ts
@@ -384,3 +384,25 @@ export function sanitizeUrl(url: string | undefined): string {
const alphabet = "abcdefghijklmnopqrstuvwxyz";
export const generateNodeId = customAlphabet(alphabet, 12);
+
+export function copyToClipboard(text: string): void {
+ if ("clipboard" in navigator) {
+ navigator.clipboard.writeText(text).catch(() => {
+ execCommandCopy(text);
+ });
+ } else {
+ execCommandCopy(text);
+ }
+}
+
+export function execCommandCopy(text: string): void {
+ const textarea = document.createElement("textarea");
+ textarea.value = text;
+ textarea.style.position = "fixed";
+ textarea.style.left = "-9999px";
+ textarea.style.top = "-9999px";
+ document.body.appendChild(textarea);
+ textarea.select();
+ document.execCommand("copy");
+ document.body.removeChild(textarea);
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 81149015..592584d9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -7,7 +7,26 @@ settings:
overrides:
jsdom: 25.0.1
jsonwebtoken: 9.0.3
+ prosemirror-changeset: 2.3.1
y-prosemirror: 1.3.7
+ qs: 6.14.2
+ glob: 10.5.0
+ lodash: 4.17.23
+ ws: 8.19.0
+ cross-spawn: 7.0.5
+ dompurify: 3.3.1
+ tmp: 0.2.5
+ lodash-es: 4.17.23
+ markdown-it: 14.1.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
+ '@tiptap/starter-kit': 3.17.1
+ '@tiptap/extension-blockquote': 3.17.1
+ '@tiptap/extension-bold': 3.17.0
+ '@tiptap/extension-bubble-menu': 3.17.1
+ '@tiptap/extension-bullet-list': 3.17.1
+ '@tiptap/extension-list': 3.17.1
+ '@tiptap/extension-code': 3.17.1
patchedDependencies:
react-arborist@3.4.0:
@@ -34,14 +53,14 @@ importers:
specifier: ^1.7.3
version: 1.7.3
'@hocuspocus/provider':
- specifier: 3.4.3
- version: 3.4.3(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29)
+ specifier: 3.4.4
+ version: 3.4.4(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29)
'@hocuspocus/server':
- specifier: 3.4.3
- version: 3.4.3(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29)
+ specifier: 3.4.4
+ version: 3.4.4(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29)
'@hocuspocus/transformer':
- specifier: 3.4.3
- version: 3.4.3(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(y-prosemirror@1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29)
+ specifier: 3.4.4
+ version: 3.4.4(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(y-prosemirror@1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29)
'@joplin/turndown':
specifier: ^4.0.74
version: 4.0.74
@@ -59,10 +78,10 @@ importers:
version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
'@tiptap/extension-collaboration':
specifier: 3.17.1
- version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29)
+ version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29)
'@tiptap/extension-collaboration-caret':
specifier: 3.17.1
- version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29))
+ version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29))
'@tiptap/extension-color':
specifier: 3.17.1
version: 3.17.1(@tiptap/extension-text-style@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)))
@@ -77,7 +96,7 @@ importers:
version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
'@tiptap/extension-history':
specifier: 3.17.1
- version: 3.17.1(@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))
+ version: 3.17.1(@tiptap/extensions@3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))
'@tiptap/extension-image':
specifier: 3.17.1
version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
@@ -89,7 +108,7 @@ importers:
version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
'@tiptap/extension-placeholder':
specifier: 3.17.1
- version: 3.17.1(@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))
+ version: 3.17.1(@tiptap/extensions@3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))
'@tiptap/extension-subscript':
specifier: 3.17.1
version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
@@ -113,7 +132,7 @@ importers:
version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
'@tiptap/extension-unique-id':
specifier: ^3.17.1
- version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
+ version: 3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
'@tiptap/extension-youtube':
specifier: 3.17.1
version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
@@ -132,6 +151,9 @@ importers:
'@tiptap/suggestion':
specifier: 3.17.1
version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
+ '@tiptap/y-tiptap':
+ specifier: ^3.0.2
+ version: 3.0.2(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29)
'@types/qrcode':
specifier: ^1.5.5
version: 1.5.5
@@ -144,9 +166,12 @@ importers:
date-fns:
specifier: ^4.1.0
version: 4.1.0
+ diff:
+ specifier: 8.0.3
+ version: 8.0.3
dompurify:
- specifier: ^3.2.6
- version: 3.2.6
+ specifier: 3.3.1
+ version: 3.3.1
fractional-indexing-jittered:
specifier: ^1.0.0
version: 1.0.0
@@ -174,6 +199,9 @@ importers:
qrcode:
specifier: ^1.5.4
version: 1.5.4
+ rfc6902:
+ specifier: 5.1.2
+ version: 5.1.2
uuid:
specifier: ^11.1.0
version: 11.1.0
@@ -188,8 +216,8 @@ importers:
version: 13.6.29
devDependencies:
'@nx/js':
- specifier: 20.4.5
- version: 20.4.5(@babel/traverse@7.28.5)(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.19.1)(nx@20.4.5(@swc/core@1.5.25(@swc/helpers@0.5.5)))(typescript@5.7.3)
+ specifier: 22.5.0
+ version: 22.5.0(@babel/traverse@7.28.5)(nx@22.5.0)
'@types/bytes':
specifier: ^3.1.5
version: 3.1.5
@@ -203,8 +231,8 @@ importers:
specifier: ^9.1.2
version: 9.1.2
nx:
- specifier: 20.4.5
- version: 20.4.5(@swc/core@1.5.25(@swc/helpers@0.5.5))
+ specifier: 22.5.0
+ version: 22.5.0
tsx:
specifier: ^4.19.3
version: 4.19.3
@@ -224,29 +252,29 @@ importers:
specifier: ^1.1.1
version: 1.1.1(emoji-mart@5.6.0)(react@18.3.1)
'@excalidraw/excalidraw':
- specifier: 0.18.0-c158187
- version: 0.18.0-c158187(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: 0.18.0-3a5ef40
+ version: 0.18.0-3a5ef40(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@mantine/core':
- specifier: ^8.3.12
- version: 8.3.12(@mantine/hooks@8.3.12(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^8.3.14
+ version: 8.3.14(@mantine/hooks@8.3.14(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@mantine/dates':
- specifier: ^8.3.12
- version: 8.3.12(@mantine/core@8.3.12(@mantine/hooks@8.3.12(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.12(react@18.3.1))(dayjs@1.11.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^8.3.14
+ version: 8.3.14(@mantine/core@8.3.14(@mantine/hooks@8.3.14(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.14(react@18.3.1))(dayjs@1.11.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@mantine/form':
- specifier: ^8.3.12
- version: 8.3.12(react@18.3.1)
+ specifier: ^8.3.14
+ version: 8.3.14(react@18.3.1)
'@mantine/hooks':
- specifier: ^8.3.12
- version: 8.3.12(react@18.3.1)
+ specifier: ^8.3.14
+ version: 8.3.14(react@18.3.1)
'@mantine/modals':
- specifier: ^8.3.12
- version: 8.3.12(@mantine/core@8.3.12(@mantine/hooks@8.3.12(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.12(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^8.3.14
+ version: 8.3.14(@mantine/core@8.3.14(@mantine/hooks@8.3.14(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.14(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@mantine/notifications':
- specifier: ^8.3.12
- version: 8.3.12(@mantine/core@8.3.12(@mantine/hooks@8.3.12(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.12(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^8.3.14
+ version: 8.3.14(@mantine/core@8.3.14(@mantine/hooks@8.3.14(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.14(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@mantine/spotlight':
- specifier: ^8.3.12
- version: 8.3.12(@mantine/core@8.3.12(@mantine/hooks@8.3.12(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.12(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^8.3.14
+ version: 8.3.14(@mantine/core@8.3.14(@mantine/hooks@8.3.14(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.14(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@tabler/icons-react':
specifier: ^3.36.1
version: 3.36.1(react@18.3.1)
@@ -257,8 +285,11 @@ importers:
specifier: ^1.1.0
version: 1.1.0
axios:
- specifier: ^1.13.2
- version: 1.13.2
+ specifier: ^1.13.5
+ version: 1.13.5
+ blueimp-load-image:
+ specifier: ^5.16.0
+ version: 5.16.0
clsx:
specifier: ^2.1.1
version: 2.1.1
@@ -297,7 +328,7 @@ importers:
version: 3.3.0
mantine-form-zod-resolver:
specifier: ^1.3.0
- version: 1.3.0(@mantine/form@8.3.12(react@18.3.1))(zod@3.25.76)
+ version: 1.3.0(@mantine/form@8.3.14(react@18.3.1))(zod@3.25.76)
mermaid:
specifier: ^11.12.2
version: 11.12.2
@@ -305,8 +336,8 @@ importers:
specifier: ^3.0.1
version: 3.0.1
posthog-js:
- specifier: ^1.255.1
- version: 1.255.1
+ specifier: 1.345.5
+ version: 1.345.5
react:
specifier: ^18.3.1
version: 18.3.1
@@ -352,7 +383,10 @@ importers:
version: 9.16.0
'@tanstack/eslint-plugin-query':
specifier: ^5.62.1
- version: 5.62.1(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2)
+ version: 5.62.1(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2)
+ '@types/blueimp-load-image':
+ specifier: ^5.16.0
+ version: 5.16.6
'@types/file-saver':
specifier: ^2.0.7
version: 2.0.7
@@ -373,19 +407,19 @@ importers:
version: 18.3.1
'@vitejs/plugin-react':
specifier: ^5.1.1
- version: 5.1.1(vite@7.2.4(@types/node@22.19.1)(jiti@1.21.0)(less@4.2.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))
+ version: 5.1.1(vite@7.2.4(@types/node@22.19.1)(jiti@2.4.2)(less@4.2.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))
eslint:
- specifier: ^9.15.0
- version: 9.15.0(jiti@1.21.0)
+ specifier: ^9.39.2
+ version: 9.39.2(jiti@2.4.2)
eslint-plugin-react:
specifier: ^7.37.2
- version: 7.37.2(eslint@9.15.0(jiti@1.21.0))
+ version: 7.37.2(eslint@9.39.2(jiti@2.4.2))
eslint-plugin-react-hooks:
specifier: ^5.1.0
- version: 5.1.0(eslint@9.15.0(jiti@1.21.0))
+ version: 5.1.0(eslint@9.39.2(jiti@2.4.2))
eslint-plugin-react-refresh:
specifier: ^0.4.16
- version: 0.4.16(eslint@9.15.0(jiti@1.21.0))
+ version: 0.4.16(eslint@9.39.2(jiti@2.4.2))
globals:
specifier: ^15.13.0
version: 15.13.0
@@ -409,52 +443,52 @@ importers:
version: 5.7.2
typescript-eslint:
specifier: ^8.17.0
- version: 8.17.0(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2)
+ version: 8.17.0(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2)
vite:
specifier: ^7.2.4
- version: 7.2.4(@types/node@22.19.1)(jiti@1.21.0)(less@4.2.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
+ version: 7.2.4(@types/node@22.19.1)(jiti@2.4.2)(less@4.2.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
apps/server:
dependencies:
'@ai-sdk/google':
- specifier: ^3.0.9
- version: 3.0.10(zod@4.3.5)
+ specifier: ^3.0.29
+ version: 3.0.29(zod@4.3.6)
'@ai-sdk/openai':
- specifier: ^3.0.11
- version: 3.0.12(zod@4.3.5)
+ specifier: ^3.0.29
+ version: 3.0.29(zod@4.3.6)
'@ai-sdk/openai-compatible':
- specifier: ^2.0.12
- version: 2.0.13(zod@4.3.5)
+ specifier: ^2.0.30
+ version: 2.0.30(zod@4.3.6)
'@aws-sdk/client-s3':
- specifier: 3.701.0
- version: 3.701.0
+ specifier: 3.982.0
+ version: 3.982.0
'@aws-sdk/lib-storage':
- specifier: 3.701.0
- version: 3.701.0(@aws-sdk/client-s3@3.701.0)
+ specifier: 3.982.0
+ version: 3.982.0(@aws-sdk/client-s3@3.982.0)
'@aws-sdk/s3-request-presigner':
- specifier: 3.701.0
- version: 3.701.0
+ specifier: 3.982.0
+ version: 3.982.0
'@fastify/cookie':
specifier: ^11.0.2
version: 11.0.2
'@fastify/multipart':
- specifier: ^9.3.0
- version: 9.3.0
+ specifier: ^9.4.0
+ version: 9.4.0
'@fastify/static':
- specifier: ^8.3.0
- version: 8.3.0
+ specifier: ^9.0.0
+ version: 9.0.0
'@langchain/core':
- specifier: 1.1.13
- version: 1.1.13(@opentelemetry/api@1.9.0)(openai@6.2.0(ws@8.19.0)(zod@4.3.5))
+ specifier: 1.1.18
+ version: 1.1.18(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.19.0)(zod@4.3.6))
'@langchain/textsplitters':
specifier: 1.0.1
- version: 1.0.1(@langchain/core@1.1.13(@opentelemetry/api@1.9.0)(openai@6.2.0(ws@8.19.0)(zod@4.3.5)))
+ version: 1.0.1(@langchain/core@1.1.18(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.19.0)(zod@4.3.6)))
'@nestjs-labs/nestjs-ioredis':
specifier: ^11.0.4
- version: 11.0.4(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)(ioredis@5.4.1)
+ version: 11.0.4(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(ioredis@5.4.1)
'@nestjs/bullmq':
specifier: ^11.0.4
- version: 11.0.4(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)(bullmq@5.65.0)
+ version: 11.0.4(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(bullmq@5.65.0)
'@nestjs/common':
specifier: ^11.1.11
version: 11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
@@ -462,11 +496,11 @@ importers:
specifier: ^4.0.2
version: 4.0.2(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2)
'@nestjs/core':
- specifier: ^11.1.11
- version: 11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ specifier: ^11.1.13
+ version: 11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nestjs/event-emitter':
specifier: ^3.0.1
- version: 3.0.1(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)
+ version: 3.0.1(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)
'@nestjs/jwt':
specifier: 11.0.0
version: 11.0.0(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))
@@ -477,38 +511,38 @@ importers:
specifier: ^11.0.5
version: 11.0.5(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(passport@0.7.0)
'@nestjs/platform-fastify':
- specifier: ^11.1.11
- version: 11.1.11(@fastify/static@8.3.0)(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)
+ specifier: ^11.1.13
+ version: 11.1.13(@fastify/static@9.0.0)(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)
'@nestjs/platform-socket.io':
- specifier: ^11.1.11
- version: 11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.11)(rxjs@7.8.2)
+ specifier: ^11.1.13
+ version: 11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.13)(rxjs@7.8.2)
'@nestjs/schedule':
specifier: ^6.1.0
- version: 6.1.0(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)
+ version: 6.1.0(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)
'@nestjs/terminus':
specifier: ^11.0.0
- version: 11.0.0(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ version: 11.0.0(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nestjs/websockets':
- specifier: ^11.1.11
- version: 11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)(@nestjs/platform-socket.io@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ specifier: ^11.1.13
+ version: 11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(@nestjs/platform-socket.io@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@node-saml/passport-saml':
specifier: ^5.1.0
version: 5.1.0
'@react-email/components':
- specifier: 0.0.28
- version: 0.0.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: 1.0.7
+ version: 1.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@react-email/render':
- specifier: 1.0.2
- version: 1.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: 2.0.4
+ version: 2.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@socket.io/redis-adapter':
specifier: ^8.3.0
version: 8.3.0(socket.io-adapter@2.5.4)
ai:
- specifier: ^6.0.37
- version: 6.0.38(zod@4.3.5)
+ specifier: ^6.0.86
+ version: 6.0.86(zod@4.3.6)
ai-sdk-ollama:
- specifier: ^3.1.1
- version: 3.1.1(ai@6.0.38(zod@4.3.5))(zod@4.3.5)
+ specifier: ^3.7.0
+ version: 3.7.0(ai@6.0.86(zod@4.3.6))(zod@4.3.6)
bcrypt:
specifier: ^6.0.0
version: 6.0.0
@@ -516,8 +550,8 @@ importers:
specifier: ^5.65.0
version: 5.65.0
cache-manager:
- specifier: ^6.4.3
- version: 6.4.3
+ specifier: ^7.2.8
+ version: 7.2.8
cheerio:
specifier: ^1.1.2
version: 1.1.2
@@ -571,7 +605,7 @@ importers:
version: 3.3.11
nestjs-kysely:
specifier: ^1.2.0
- version: 1.2.0(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)(kysely@0.28.2)(reflect-metadata@0.2.2)
+ version: 1.2.0(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(kysely@0.28.2)(reflect-metadata@0.2.2)
nestjs-pino:
specifier: ^4.5.0
version: 4.5.0(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(pino-http@11.0.0)(pino@10.1.0)(rxjs@7.8.2)
@@ -629,9 +663,6 @@ importers:
scimmy:
specifier: 1.3.5
version: 1.3.5(patch_hash=775d80f86830b2c5dd1a250c9802c10f8fc3da3c7898373de5aa0c23993d1673)
- sharp:
- specifier: 0.34.3
- version: 0.34.3
socket.io:
specifier: ^4.8.3
version: 4.8.3
@@ -646,9 +677,9 @@ importers:
version: 1.3.1
typesense:
specifier: ^2.1.0
- version: 2.1.0(@babel/runtime@7.25.6)
+ version: 2.1.0(@babel/runtime@7.26.10)
ws:
- specifier: ^8.19.0
+ specifier: 8.19.0
version: 8.19.0
yauzl:
specifier: ^3.2.0
@@ -658,14 +689,14 @@ importers:
specifier: ^9.20.0
version: 9.20.0
'@nestjs/cli':
- specifier: ^11.0.4
- version: 11.0.4(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)
+ specifier: ^11.0.16
+ version: 11.0.16(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)
'@nestjs/schematics':
specifier: ^11.0.1
version: 11.0.1(chokidar@4.0.3)(typescript@5.7.3)
'@nestjs/testing':
specifier: ^11.0.10
- version: 11.0.10(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)
+ version: 11.0.10(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)
'@types/bcrypt':
specifier: ^5.0.2
version: 5.0.2
@@ -676,8 +707,8 @@ importers:
specifier: ^11.0.4
version: 11.0.4
'@types/jest':
- specifier: ^29.5.14
- version: 29.5.14
+ specifier: ^30.0.0
+ version: 30.0.0
'@types/mime-types':
specifier: ^2.1.4
version: 2.1.4
@@ -694,8 +725,8 @@ importers:
specifier: ^4.0.1
version: 4.0.1
'@types/supertest':
- specifier: ^6.0.2
- version: 6.0.2
+ specifier: ^6.0.3
+ version: 6.0.3
'@types/ws':
specifier: ^8.5.14
version: 8.5.14
@@ -703,17 +734,17 @@ importers:
specifier: ^2.10.3
version: 2.10.3
eslint:
- specifier: ^9.20.1
- version: 9.20.1(jiti@1.21.0)
+ specifier: ^9.39.2
+ version: 9.39.2(jiti@2.4.2)
eslint-config-prettier:
specifier: ^10.0.1
- version: 10.0.1(eslint@9.20.1(jiti@1.21.0))
+ version: 10.0.1(eslint@9.39.2(jiti@2.4.2))
globals:
specifier: ^15.15.0
version: 15.15.0
jest:
- specifier: ^29.7.0
- version: 29.7.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))
+ specifier: ^30.2.0
+ version: 30.2.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))
kysely-codegen:
specifier: ^0.19.0
version: 0.19.0(kysely@0.28.2)(pg@8.16.3)(typescript@5.7.3)
@@ -721,20 +752,20 @@ importers:
specifier: ^3.5.1
version: 3.5.1
react-email:
- specifier: 3.0.2
- version: 3.0.2(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.51.0)
+ specifier: 5.2.8
+ version: 5.2.8
source-map-support:
specifier: ^0.5.21
version: 0.5.21
supertest:
- specifier: ^7.0.0
- version: 7.0.0
+ specifier: ^7.2.2
+ version: 7.2.2
ts-jest:
- specifier: ^29.2.5
- version: 29.2.5(@babel/core@7.24.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3)))(typescript@5.7.3)
+ specifier: ^29.4.6
+ version: 29.4.6(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@30.2.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3)))(typescript@5.7.3)
ts-loader:
- specifier: ^9.5.2
- version: 9.5.2(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.5.25(@swc/helpers@0.5.5)))
+ specifier: ^9.5.4
+ version: 9.5.4(typescript@5.7.3)(webpack@5.104.1(@swc/core@1.5.25(@swc/helpers@0.5.5)))
ts-node:
specifier: ^10.9.2
version: 10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3)
@@ -746,7 +777,7 @@ importers:
version: 5.7.3
typescript-eslint:
specifier: ^8.24.1
- version: 8.24.1(eslint@9.20.1(jiti@1.21.0))(typescript@5.7.3)
+ version: 8.24.1(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.3)
packages/editor-ext: {}
@@ -759,44 +790,40 @@ packages:
'@adobe/css-tools@4.3.3':
resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==}
- '@ai-sdk/gateway@3.0.16':
- resolution: {integrity: sha512-OOY5CfRJiHvh/8np2vs1RQaCZ5hWv2qOeEmmeiABXK3gLQHUVnCO+1hhoLsZdHM5iElu6M407dAOfyvTsKJqcQ==}
+ '@ai-sdk/gateway@3.0.46':
+ resolution: {integrity: sha512-zH1UbNRjG5woOXXFOrVCZraqZuFTtmPvLardMGcgLkzpxKV0U3tAGoyWKSZ862H+eBJfI/Hf2yj/zzGJcCkycg==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
- '@ai-sdk/google@3.0.10':
- resolution: {integrity: sha512-qd2EM9SlD7wWFrq036hwKsuAgkCVxQbwJzctszdmzPs9yUZg795/gHtZRpKItZhbyHSNWhAHmJwEgKjD+HOzuQ==}
+ '@ai-sdk/google@3.0.29':
+ resolution: {integrity: sha512-x0hcU10AA+i1ZUQHloGD5qXWsB+Y8qnxlmFUef6Ly4rB53MGVbQExkI9nOKiCO3mu2TGiiNoQMeKWSeQVLfRUA==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
- '@ai-sdk/openai-compatible@2.0.13':
- resolution: {integrity: sha512-DShpuHZ9wiy3QtxJ4/Uq5csLxgNgeA3w58isYhZ34pSod2cBlRmJl3EyQzxZ1HD8e6sQDa9fvc0cwF5/EugBMw==}
+ '@ai-sdk/openai-compatible@2.0.30':
+ resolution: {integrity: sha512-iTjumHf1/u4NhjXYFn/aONM2GId3/o7J1Lp5ql8FCbgIMyRwrmanR5xy1S3aaVkfTscuDvLTzWiy1mAbGzK3nQ==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
- '@ai-sdk/openai@3.0.12':
- resolution: {integrity: sha512-zqLWEKuaKnjXhu7xCw1jgz/+yTbd3F7EtgU4T2Q8BAo8OJC5wZv14l+kwM7Jai7M1/2Y2T/zBkrfiIu+7NsvfQ==}
+ '@ai-sdk/openai@3.0.29':
+ resolution: {integrity: sha512-ugVTIVpuSLKTjzSPe1F1DWiblJT/lwrrHx0OZEKjpMk/EYP6j6VD/F7SJqM1dsqOJryeBCJWFbUzLNqc99PrMA==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
- '@ai-sdk/provider-utils@4.0.8':
- resolution: {integrity: sha512-ns9gN7MmpI8vTRandzgz+KK/zNMLzhrriiKECMt4euLtQFSBgNfydtagPOX4j4pS1/3KvHF6RivhT3gNQgBZsg==}
+ '@ai-sdk/provider-utils@4.0.15':
+ resolution: {integrity: sha512-8XiKWbemmCbvNN0CLR9u3PQiet4gtEVIrX4zzLxnCj06AwsEDJwJVBbKrEI4t6qE8XRSIvU2irka0dcpziKW6w==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
- '@ai-sdk/provider@3.0.4':
- resolution: {integrity: sha512-5KXyBOSEX+l67elrEa+wqo/LSsSTtrPj9Uoh3zMbe/ceQX4ucHI3b9nUEfNkGF3Ry1svv90widAt+aiKdIJasQ==}
+ '@ai-sdk/provider@3.0.8':
+ resolution: {integrity: sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ==}
engines: {node: '>=18'}
- '@ampproject/remapping@2.3.0':
- resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
- engines: {node: '>=6.0.0'}
-
'@angular-devkit/core@19.1.7':
resolution: {integrity: sha512-q0I6L9KTqyQ7D5M8H+fWLT+yjapvMNb7SRdfU6GzmexO66Dpo83q4HDzuDKIPDF29Yl0ELs9ICJqe9yUXh6yDQ==}
engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
@@ -806,8 +833,17 @@ packages:
chokidar:
optional: true
- '@angular-devkit/schematics-cli@19.1.7':
- resolution: {integrity: sha512-4v84frwtJ0LUwuFTkaghMuaFbf9e1db3GuYSTN7fMRlT1pnfl/0lc4DRWVGP5VBxsJUYP42ltRnhrp6M+XjHSg==}
+ '@angular-devkit/core@19.2.19':
+ resolution: {integrity: sha512-JbLL+4IMLMBgjLZlnPG4lYDfz4zGrJ/s6Aoon321NJKuw1Kb1k5KpFu9dUY0BqLIe8xPQ2UJBpI+xXdK5MXMHQ==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
+ peerDependencies:
+ chokidar: ^4.0.0
+ peerDependenciesMeta:
+ chokidar:
+ optional: true
+
+ '@angular-devkit/schematics-cli@19.2.19':
+ resolution: {integrity: sha512-7q9UY6HK6sccL9F3cqGRUwKhM7b/XfD2YcVaZ2WD7VMaRlRm85v6mRjSrfKIAwxcQU0UK27kMc79NIIqaHjzxA==}
engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
hasBin: true
@@ -815,6 +851,10 @@ packages:
resolution: {integrity: sha512-AP6FvhMybCYs3gs+vzEAzSU1K//AFT3SVTRFv+C3WMO5dLeAHeGzM8I2dxD5EHQQtqIE/8apP6CxGrnpA5YlFg==}
engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
+ '@angular-devkit/schematics@19.2.19':
+ resolution: {integrity: sha512-J4Jarr0SohdrHcb40gTL4wGPCQ952IMWF1G/MSAQfBAPvA9ZKApYhpxcY7PmehVePve+ujpus1dGsJ7dPxz8Kg==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
+
'@antfu/install-pkg@1.1.0':
resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
@@ -847,224 +887,172 @@ packages:
'@aws-crypto/util@5.2.0':
resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==}
- '@aws-sdk/client-s3@3.701.0':
- resolution: {integrity: sha512-7iXmPC5r7YNjvwSsRbGq9oLVgfIWZesXtEYl908UqMmRj2sVAW/leLopDnbLT7TEedqlK0RasOZT05I0JTNdKw==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/client-s3@3.982.0':
+ resolution: {integrity: sha512-k0ANYAtPiON9BwLXcDgJXkmmCAGEuSk2pZOvrMej2kNhs3xTXoPshIUR5UMCD9apYiWtXJJfXMZSgaME+iWNaQ==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/client-sso-oidc@3.699.0':
- resolution: {integrity: sha512-u8a1GorY5D1l+4FQAf4XBUC1T10/t7neuwT21r0ymrtMFSK2a9QqVHKMoLkvavAwyhJnARSBM9/UQC797PFOFw==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/client-sso@3.982.0':
+ resolution: {integrity: sha512-qJrIiivmvujdGqJ0ldSUvhN3k3N7GtPesoOI1BSt0fNXovVnMz4C/JmnkhZihU7hJhDvxJaBROLYTU+lpild4w==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/core@3.973.6':
+ resolution: {integrity: sha512-pz4ZOw3BLG0NdF25HoB9ymSYyPbMiIjwQJ2aROXRhAzt+b+EOxStfFv8s5iZyP6Kiw7aYhyWxj5G3NhmkoOTKw==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/crc64-nvme@3.972.0':
+ resolution: {integrity: sha512-ThlLhTqX68jvoIVv+pryOdb5coP1cX1/MaTbB9xkGDCbWbsqQcLqzPxuSoW1DCnAAIacmXCWpzUNOB9pv+xXQw==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/credential-provider-env@3.972.4':
+ resolution: {integrity: sha512-/8dnc7+XNMmViEom2xsNdArQxQPSgy4Z/lm6qaFPTrMFesT1bV3PsBhb19n09nmxHdrtQskYmViddUIjUQElXg==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/credential-provider-http@3.972.6':
+ resolution: {integrity: sha512-5ERWqRljiZv44AIdvIRQ3k+EAV0Sq2WeJHvXuK7gL7bovSxOf8Al7MLH7Eh3rdovH4KHFnlIty7J71mzvQBl5Q==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/credential-provider-ini@3.972.4':
+ resolution: {integrity: sha512-eRUg+3HaUKuXWn/lEMirdiA5HOKmEl8hEHVuszIDt2MMBUKgVX5XNGmb3XmbgU17h6DZ+RtjbxQpjhz3SbTjZg==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/credential-provider-login@3.972.4':
+ resolution: {integrity: sha512-nLGjXuvWWDlQAp505xIONI7Gam0vw2p7Qu3P6on/W2q7rjJXtYjtpHbcsaOjJ/pAju3eTvEQuSuRedcRHVQIAQ==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/credential-provider-node@3.972.5':
+ resolution: {integrity: sha512-VWXKgSISQCI2GKN3zakTNHSiZ0+mux7v6YHmmbLQp/o3fvYUQJmKGcLZZzg2GFA+tGGBStplra9VFNf/WwxpYg==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/credential-provider-process@3.972.4':
+ resolution: {integrity: sha512-TCZpWUnBQN1YPk6grvd5x419OfXjHvhj5Oj44GYb84dOVChpg/+2VoEj+YVA4F4E/6huQPNnX7UYbTtxJqgihw==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/credential-provider-sso@3.972.4':
+ resolution: {integrity: sha512-wzsGwv9mKlwJ3vHLyembBvGE/5nPUIwRR2I51B1cBV4Cb4ql9nIIfpmHzm050XYTY5fqTOKJQnhLj7zj89VG8g==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/credential-provider-web-identity@3.972.4':
+ resolution: {integrity: sha512-hIzw2XzrG8jzsUSEatehmpkd5rWzASg5IHUfA+m01k/RtvfAML7ZJVVohuKdhAYx+wV2AThLiQJVzqn7F0khrw==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/lib-storage@3.982.0':
+ resolution: {integrity: sha512-N3FeXRwWxkRq5/WSNqgg4PNaT6mFG8eZyKs1AsS7n3PvoLTa17qTvtKUlxYvyf4AC5qNRF8Vp1OCMQycV013SQ==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
- '@aws-sdk/client-sts': ^3.699.0
+ '@aws-sdk/client-s3': 3.982.0
- '@aws-sdk/client-sso@3.696.0':
- resolution: {integrity: sha512-q5TTkd08JS0DOkHfUL853tuArf7NrPeqoS5UOvqJho8ibV9Ak/a/HO4kNvy9Nj3cib/toHYHsQIEtecUPSUUrQ==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/middleware-bucket-endpoint@3.972.3':
+ resolution: {integrity: sha512-fmbgWYirF67YF1GfD7cg5N6HHQ96EyRNx/rDIrTF277/zTWVuPI2qS/ZHgofwR1NZPe/NWvoppflQY01LrbVLg==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/client-sts@3.699.0':
- resolution: {integrity: sha512-++lsn4x2YXsZPIzFVwv3fSUVM55ZT0WRFmPeNilYIhZClxHLmVAWKH4I55cY9ry60/aTKYjzOXkWwyBKGsGvQg==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/middleware-expect-continue@3.972.3':
+ resolution: {integrity: sha512-4msC33RZsXQpUKR5QR4HnvBSNCPLGHmB55oDiROqqgyOc+TOfVu2xgi5goA7ms6MdZLeEh2905UfWMnMMF4mRg==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/core@3.696.0':
- resolution: {integrity: sha512-3c9III1k03DgvRZWg8vhVmfIXPG6hAciN9MzQTzqGngzWAELZF/WONRTRQuDFixVtarQatmLHYVw/atGeA2Byw==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/middleware-flexible-checksums@3.972.4':
+ resolution: {integrity: sha512-xOxsUkF3O3BtIe3tf54OpPo94eZepjFm3z0Dd2TZKbsPxMiRTFXurC04wJ58o/wPW9YHVO9VqZik3MfoPfrKlw==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/credential-provider-env@3.696.0':
- resolution: {integrity: sha512-T9iMFnJL7YTlESLpVFT3fg1Lkb1lD+oiaIC8KMpepb01gDUBIpj9+Y+pA/cgRWW0yRxmkDXNazAE2qQTVFGJzA==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/middleware-host-header@3.972.3':
+ resolution: {integrity: sha512-aknPTb2M+G3s+0qLCx4Li/qGZH8IIYjugHMv15JTYMe6mgZO8VBpYgeGYsNMGCqCZOcWzuf900jFBG5bopfzmA==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/credential-provider-http@3.696.0':
- resolution: {integrity: sha512-GV6EbvPi2eq1+WgY/o2RFA3P7HGmnkIzCNmhwtALFlqMroLYWKE7PSeHw66Uh1dFQeVESn0/+hiUNhu1mB0emA==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/middleware-location-constraint@3.972.3':
+ resolution: {integrity: sha512-nIg64CVrsXp67vbK0U1/Is8rik3huS3QkRHn2DRDx4NldrEFMgdkZGI/+cZMKD9k4YOS110Dfu21KZLHrFA/1g==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/credential-provider-ini@3.699.0':
- resolution: {integrity: sha512-dXmCqjJnKmG37Q+nLjPVu22mNkrGHY8hYoOt3Jo9R2zr5MYV7s/NHsCHr+7E+BZ+tfZYLRPeB1wkpTeHiEcdRw==}
- engines: {node: '>=16.0.0'}
- peerDependencies:
- '@aws-sdk/client-sts': ^3.699.0
+ '@aws-sdk/middleware-logger@3.972.3':
+ resolution: {integrity: sha512-Ftg09xNNRqaz9QNzlfdQWfpqMCJbsQdnZVJP55jfhbKi1+FTWxGuvfPoBhDHIovqWKjqbuiew3HuhxbJ0+OjgA==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/credential-provider-node@3.699.0':
- resolution: {integrity: sha512-MmEmNDo1bBtTgRmdNfdQksXu4uXe66s0p1hi1YPrn1h59Q605eq/xiWbGL6/3KdkViH6eGUuABeV2ODld86ylg==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/middleware-recursion-detection@3.972.3':
+ resolution: {integrity: sha512-PY57QhzNuXHnwbJgbWYTrqIDHYSeOlhfYERTAuc16LKZpTZRJUjzBFokp9hF7u1fuGeE3D70ERXzdbMBOqQz7Q==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/credential-provider-process@3.696.0':
- resolution: {integrity: sha512-mL1RcFDe9sfmyU5K1nuFkO8UiJXXxLX4JO1gVaDIOvPqwStpUAwi3A1BoeZhWZZNQsiKI810RnYGo0E0WB/hUA==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/middleware-sdk-s3@3.972.6':
+ resolution: {integrity: sha512-Xq7wM6kbgJN1UO++8dvH/efPb1nTwWqFCpZCR7RCLOETP7xAUAhVo7JmsCnML5Di/iC4Oo5VrJ4QmkYcMZniLw==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/credential-provider-sso@3.699.0':
- resolution: {integrity: sha512-Ekp2cZG4pl9D8+uKWm4qO1xcm8/MeiI8f+dnlZm8aQzizeC+aXYy9GyoclSf6daK8KfRPiRfM7ZHBBL5dAfdMA==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/middleware-ssec@3.972.3':
+ resolution: {integrity: sha512-dU6kDuULN3o3jEHcjm0c4zWJlY1zWVkjG9NPe9qxYLLpcbdj5kRYBS2DdWYD+1B9f910DezRuws7xDEqKkHQIg==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/credential-provider-web-identity@3.696.0':
- resolution: {integrity: sha512-XJ/CVlWChM0VCoc259vWguFUjJDn/QwDqHwbx+K9cg3v6yrqXfK5ai+p/6lx0nQpnk4JzPVeYYxWRpaTsGC9rg==}
- engines: {node: '>=16.0.0'}
- peerDependencies:
- '@aws-sdk/client-sts': ^3.696.0
+ '@aws-sdk/middleware-user-agent@3.972.6':
+ resolution: {integrity: sha512-TehLN8W/kivl0U9HcS+keryElEWORROpghDXZBLfnb40DXM7hx/i+7OOjkogXQOF3QtUraJVRkHQ07bPhrWKlw==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/lib-storage@3.701.0':
- resolution: {integrity: sha512-eAbJ/3OgyFp1NnFdQfkZ7PuKCjrhbSQWf0EVTMhlg4aE5piCZ1We38NI1dQ58yr53rGc2gBkbYr8+/9CehpEvA==}
- engines: {node: '>=16.0.0'}
- peerDependencies:
- '@aws-sdk/client-s3': ^3.701.0
+ '@aws-sdk/nested-clients@3.982.0':
+ resolution: {integrity: sha512-VVkaH27digrJfdVrT64rjkllvOp4oRiZuuJvrylLXAKl18ujToJR7AqpDldL/LS63RVne3QWIpkygIymxFtliQ==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/middleware-bucket-endpoint@3.696.0':
- resolution: {integrity: sha512-V07jishKHUS5heRNGFpCWCSTjRJyQLynS/ncUeE8ZYtG66StOOQWftTwDfFOSoXlIqrXgb4oT9atryzXq7Z4LQ==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/region-config-resolver@3.972.3':
+ resolution: {integrity: sha512-v4J8qYAWfOMcZ4MJUyatntOicTzEMaU7j3OpkRCGGFSL2NgXQ5VbxauIyORA+pxdKZ0qQG2tCQjQjZDlXEC3Ow==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/middleware-expect-continue@3.696.0':
- resolution: {integrity: sha512-vpVukqY3U2pb+ULeX0shs6L0aadNep6kKzjme/MyulPjtUDJpD3AekHsXRrCCGLmOqSKqRgQn5zhV9pQhHsb6Q==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/s3-request-presigner@3.982.0':
+ resolution: {integrity: sha512-18mEy26sW0lf6Z3UpIPHFQ08+p+Kfn/A7EE7lrCAiQcq4b5ueSkR9B0uurIZHFtb9UMjOPXVdYaetWpl//Oidw==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/middleware-flexible-checksums@3.701.0':
- resolution: {integrity: sha512-adNaPCyTT+CiVM0ufDiO1Fe7nlRmJdI9Hcgj0M9S6zR7Dw70Ra5z8Lslkd7syAccYvZaqxLklGjPQH/7GNxwTA==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/signature-v4-multi-region@3.982.0':
+ resolution: {integrity: sha512-AWqjMAH848aNwnLCtIKM3WO00eHuUoYVfQMP4ccrUHhnEduGOusVgdHQ5mLNQZZNZzREuBwnPPhIP55cy0gFSg==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/middleware-host-header@3.696.0':
- resolution: {integrity: sha512-zELJp9Ta2zkX7ELggMN9qMCgekqZhFC5V2rOr4hJDEb/Tte7gpfKSObAnw/3AYiVqt36sjHKfdkoTsuwGdEoDg==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/token-providers@3.982.0':
+ resolution: {integrity: sha512-v3M0KYp2TVHYHNBT7jHD9lLTWAdS9CaWJ2jboRKt0WAB65bA7iUEpR+k4VqKYtpQN4+8kKSc4w+K6kUNZkHKQw==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/middleware-location-constraint@3.696.0':
- resolution: {integrity: sha512-FgH12OB0q+DtTrP2aiDBddDKwL4BPOrm7w3VV9BJrSdkqQCNBPz8S1lb0y5eVH4tBG+2j7gKPlOv1wde4jF/iw==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/types@3.973.1':
+ resolution: {integrity: sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/middleware-logger@3.696.0':
- resolution: {integrity: sha512-KhkHt+8AjCxcR/5Zp3++YPJPpFQzxpr+jmONiT/Jw2yqnSngZ0Yspm5wGoRx2hS1HJbyZNuaOWEGuJoxLeBKfA==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/util-arn-parser@3.972.2':
+ resolution: {integrity: sha512-VkykWbqMjlSgBFDyrY3nOSqupMc6ivXuGmvci6Q3NnLq5kC+mKQe2QBZ4nrWRE/jqOxeFP2uYzLtwncYYcvQDg==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/middleware-recursion-detection@3.696.0':
- resolution: {integrity: sha512-si/maV3Z0hH7qa99f9ru2xpS5HlfSVcasRlNUXKSDm611i7jFMWwGNLUOXFAOLhXotPX5G3Z6BLwL34oDeBMug==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/util-endpoints@3.982.0':
+ resolution: {integrity: sha512-M27u8FJP7O0Of9hMWX5dipp//8iglmV9jr7R8SR8RveU+Z50/8TqH68Tu6wUWBGMfXjzbVwn1INIAO5lZrlxXQ==}
+ engines: {node: '>=20.0.0'}
- '@aws-sdk/middleware-sdk-s3@3.696.0':
- resolution: {integrity: sha512-M7fEiAiN7DBMHflzOFzh1I2MNSlLpbiH2ubs87bdRc2wZsDPSbs4l3v6h3WLhxoQK0bq6vcfroudrLBgvCuX3Q==}
- engines: {node: '>=16.0.0'}
-
- '@aws-sdk/middleware-ssec@3.696.0':
- resolution: {integrity: sha512-w/d6O7AOZ7Pg3w2d3BxnX5RmGNWb5X4RNxF19rJqcgu/xqxxE/QwZTNd5a7eTsqLXAUIfbbR8hh0czVfC1pJLA==}
- engines: {node: '>=16.0.0'}
-
- '@aws-sdk/middleware-user-agent@3.696.0':
- resolution: {integrity: sha512-Lvyj8CTyxrHI6GHd2YVZKIRI5Fmnugt3cpJo0VrKKEgK5zMySwEZ1n4dqPK6czYRWKd5+WnYHYAuU+Wdk6Jsjw==}
- engines: {node: '>=16.0.0'}
-
- '@aws-sdk/region-config-resolver@3.696.0':
- resolution: {integrity: sha512-7EuH142lBXjI8yH6dVS/CZeiK/WZsmb/8zP6bQbVYpMrppSTgB3MzZZdxVZGzL5r8zPQOU10wLC4kIMy0qdBVQ==}
- engines: {node: '>=16.0.0'}
-
- '@aws-sdk/s3-request-presigner@3.701.0':
- resolution: {integrity: sha512-S4eKSZxhDcVmUoHv9N4dCxGde7V4v60R/+qFz/LgHxU++XOZ2npM/jqX5I9vT4uOkHLwQD6DgkL0j37vZpsqxA==}
- engines: {node: '>=16.0.0'}
-
- '@aws-sdk/signature-v4-multi-region@3.696.0':
- resolution: {integrity: sha512-ijPkoLjXuPtgxAYlDoYls8UaG/VKigROn9ebbvPL/orEY5umedd3iZTcS9T+uAf4Ur3GELLxMQiERZpfDKaz3g==}
- engines: {node: '>=16.0.0'}
-
- '@aws-sdk/token-providers@3.699.0':
- resolution: {integrity: sha512-kuiEW9DWs7fNos/SM+y58HCPhcIzm1nEZLhe2/7/6+TvAYLuEWURYsbK48gzsxXlaJ2k/jGY3nIsA7RptbMOwA==}
- engines: {node: '>=16.0.0'}
- peerDependencies:
- '@aws-sdk/client-sso-oidc': ^3.699.0
-
- '@aws-sdk/types@3.696.0':
- resolution: {integrity: sha512-9rTvUJIAj5d3//U5FDPWGJ1nFJLuWb30vugGOrWk7aNZ6y9tuA3PI7Cc9dP8WEXKVyK1vuuk8rSFP2iqXnlgrw==}
- engines: {node: '>=16.0.0'}
-
- '@aws-sdk/types@3.734.0':
- resolution: {integrity: sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg==}
- engines: {node: '>=18.0.0'}
-
- '@aws-sdk/util-arn-parser@3.693.0':
- resolution: {integrity: sha512-WC8x6ca+NRrtpAH64rWu+ryDZI3HuLwlEr8EU6/dbC/pt+r/zC0PBoC15VEygUaBA+isppCikQpGyEDu0Yj7gQ==}
- engines: {node: '>=16.0.0'}
-
- '@aws-sdk/util-endpoints@3.696.0':
- resolution: {integrity: sha512-T5s0IlBVX+gkb9g/I6CLt4yAZVzMSiGnbUqWihWsHvQR1WOoIcndQy/Oz/IJXT9T2ipoy7a80gzV6a5mglrioA==}
- engines: {node: '>=16.0.0'}
-
- '@aws-sdk/util-format-url@3.696.0':
- resolution: {integrity: sha512-R6yK1LozUD1GdAZRPhNsIow6VNFJUTyyoIar1OCWaknlucBMcq7musF3DN3TlORBwfFMj5buHc2ET9OtMtzvuA==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/util-format-url@3.972.3':
+ resolution: {integrity: sha512-n7F2ycckcKFXa01vAsT/SJdjFHfKH9s96QHcs5gn8AaaigASICeME8WdUL9uBp8XV/OVwEt8+6gzn6KFUgQa8g==}
+ engines: {node: '>=20.0.0'}
'@aws-sdk/util-locate-window@3.535.0':
resolution: {integrity: sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA==}
engines: {node: '>=14.0.0'}
- '@aws-sdk/util-user-agent-browser@3.696.0':
- resolution: {integrity: sha512-Z5rVNDdmPOe6ELoM5AhF/ja5tSjbe6ctSctDPb0JdDf4dT0v2MfwhJKzXju2RzX8Es/77Glh7MlaXLE0kCB9+Q==}
+ '@aws-sdk/util-user-agent-browser@3.972.3':
+ resolution: {integrity: sha512-JurOwkRUcXD/5MTDBcqdyQ9eVedtAsZgw5rBwktsPTN7QtPiS2Ld1jkJepNgYoCufz1Wcut9iup7GJDoIHp8Fw==}
- '@aws-sdk/util-user-agent-node@3.696.0':
- resolution: {integrity: sha512-KhKqcfyXIB0SCCt+qsu4eJjsfiOrNzK5dCV7RAW2YIpp+msxGUUX0NdRE9rkzjiv+3EMktgJm3eEIS+yxtlVdQ==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/util-user-agent-node@3.972.4':
+ resolution: {integrity: sha512-3WFCBLiM8QiHDfosQq3Py+lIMgWlFWwFQliUHUqwEiRqLnKyhgbU3AKa7AWJF7lW2Oc/2kFNY4MlAYVnVc0i8A==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
aws-crt: '>=1.0.0'
peerDependenciesMeta:
aws-crt:
optional: true
- '@aws-sdk/xml-builder@3.696.0':
- resolution: {integrity: sha512-dn1mX+EeqivoLYnY7p2qLrir0waPnCgS/0YdRCAVU2x14FgfUYCH6Im3w3oi2dMwhxfKY5lYVB5NKvZu7uI9lQ==}
- engines: {node: '>=16.0.0'}
+ '@aws-sdk/xml-builder@3.972.4':
+ resolution: {integrity: sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==}
+ engines: {node: '>=20.0.0'}
- '@babel/code-frame@7.24.2':
- resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/code-frame@7.26.2':
- resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
- engines: {node: '>=6.9.0'}
+ '@aws/lambda-invoke-store@0.2.3':
+ resolution: {integrity: sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==}
+ engines: {node: '>=18.0.0'}
'@babel/code-frame@7.27.1':
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
- '@babel/compat-data@7.26.2':
- resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/compat-data@7.26.8':
- resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==}
- engines: {node: '>=6.9.0'}
-
'@babel/compat-data@7.28.5':
resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==}
engines: {node: '>=6.9.0'}
- '@babel/core@7.24.5':
- resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/core@7.24.6':
- resolution: {integrity: sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/core@7.26.0':
- resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/core@7.26.10':
- resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==}
- engines: {node: '>=6.9.0'}
-
'@babel/core@7.28.5':
resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==}
engines: {node: '>=6.9.0'}
- '@babel/generator@7.24.1':
- resolution: {integrity: sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==}
- engines: {node: '>=6.9.0'}
-
- '@babel/generator@7.24.6':
- resolution: {integrity: sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/generator@7.26.2':
- resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/generator@7.27.0':
- resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==}
- engines: {node: '>=6.9.0'}
-
'@babel/generator@7.28.5':
resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
engines: {node: '>=6.9.0'}
@@ -1077,14 +1065,6 @@ packages:
resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-compilation-targets@7.25.9':
- resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-compilation-targets@7.27.0':
- resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-compilation-targets@7.27.2':
resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
engines: {node: '>=6.9.0'}
@@ -1106,10 +1086,6 @@ packages:
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
- '@babel/helper-environment-visitor@7.22.20':
- resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-environment-visitor@7.24.6':
resolution: {integrity: sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==}
engines: {node: '>=6.9.0'}
@@ -1130,40 +1106,10 @@ packages:
resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-module-imports@7.22.15':
- resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-module-imports@7.24.6':
- resolution: {integrity: sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-module-imports@7.25.9':
- resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-module-imports@7.27.1':
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
engines: {node: '>=6.9.0'}
- '@babel/helper-module-transforms@7.23.3':
- resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/helper-module-transforms@7.24.6':
- resolution: {integrity: sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/helper-module-transforms@7.26.0':
- resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
'@babel/helper-module-transforms@7.28.3':
resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
engines: {node: '>=6.9.0'}
@@ -1174,10 +1120,6 @@ packages:
resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-plugin-utils@7.24.0':
- resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-plugin-utils@7.25.9':
resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==}
engines: {node: '>=6.9.0'}
@@ -1186,6 +1128,10 @@ packages:
resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-plugin-utils@7.28.6':
+ resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-remap-async-to-generator@7.22.20':
resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==}
engines: {node: '>=6.9.0'}
@@ -1198,10 +1144,6 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-simple-access@7.22.5':
- resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-simple-access@7.24.6':
resolution: {integrity: sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==}
engines: {node: '>=6.9.0'}
@@ -1210,26 +1152,10 @@ packages:
resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
engines: {node: '>=6.9.0'}
- '@babel/helper-split-export-declaration@7.22.6':
- resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-split-export-declaration@7.24.6':
resolution: {integrity: sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-string-parser@7.23.4':
- resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-string-parser@7.24.1':
- resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-string-parser@7.24.6':
- resolution: {integrity: sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-string-parser@7.25.9':
resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
engines: {node: '>=6.9.0'}
@@ -1238,14 +1164,6 @@ packages:
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.22.20':
- resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-validator-identifier@7.24.6':
- resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-validator-identifier@7.25.9':
resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
engines: {node: '>=6.9.0'}
@@ -1254,10 +1172,6 @@ packages:
resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-option@7.25.9':
- resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-validator-option@7.27.1':
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
engines: {node: '>=6.9.0'}
@@ -1266,36 +1180,10 @@ packages:
resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==}
engines: {node: '>=6.9.0'}
- '@babel/helpers@7.24.6':
- resolution: {integrity: sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helpers@7.26.0':
- resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helpers@7.27.0':
- resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==}
- engines: {node: '>=6.9.0'}
-
'@babel/helpers@7.28.4':
resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
engines: {node: '>=6.9.0'}
- '@babel/highlight@7.24.2':
- resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/parser@7.24.5':
- resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==}
- engines: {node: '>=6.0.0'}
- hasBin: true
-
- '@babel/parser@7.26.2':
- resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==}
- engines: {node: '>=6.0.0'}
- hasBin: true
-
'@babel/parser@7.27.0':
resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==}
engines: {node: '>=6.0.0'}
@@ -1385,6 +1273,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-syntax-import-attributes@7.28.6':
+ resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-syntax-import-meta@7.10.4':
resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
peerDependencies:
@@ -1401,6 +1295,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-syntax-jsx@7.28.6':
+ resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-syntax-logical-assignment-operators@7.10.4':
resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
peerDependencies:
@@ -1449,6 +1349,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-syntax-typescript@7.28.6':
+ resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-syntax-unicode-sets-regex@7.18.6':
resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
engines: {node: '>=6.9.0'}
@@ -1787,58 +1693,18 @@ packages:
'@babel/regjsgen@0.8.0':
resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
- '@babel/runtime@7.23.7':
- resolution: {integrity: sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/runtime@7.25.6':
- resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/template@7.24.6':
- resolution: {integrity: sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/template@7.25.9':
- resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/template@7.27.0':
- resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==}
+ '@babel/runtime@7.26.10':
+ resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==}
engines: {node: '>=6.9.0'}
'@babel/template@7.27.2':
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
engines: {node: '>=6.9.0'}
- '@babel/traverse@7.25.9':
- resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/traverse@7.27.0':
- resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==}
- engines: {node: '>=6.9.0'}
-
'@babel/traverse@7.28.5':
resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.23.6':
- resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/types@7.24.0':
- resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==}
- engines: {node: '>=6.9.0'}
-
- '@babel/types@7.24.6':
- resolution: {integrity: sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/types@7.26.0':
- resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==}
- engines: {node: '>=6.9.0'}
-
'@babel/types@7.27.0':
resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==}
engines: {node: '>=6.9.0'}
@@ -1862,6 +1728,9 @@ packages:
'@braintree/sanitize-url@7.1.1':
resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==}
+ '@cacheable/utils@2.3.4':
+ resolution: {integrity: sha512-knwKUJEYgIfwShABS1BX6JyJJTglAFcEU7EXqzTdiGCXur4voqkiJkdgZIQtWNFhynzDWERcTYv/sETMu3uJWA==}
+
'@casl/ability@6.8.0':
resolution: {integrity: sha512-Ipt4mzI4gSgnomFdaPjaLgY2MWuXqAEZLrU6qqWBB7khGiBBuuEp6ytYDnq09bRXqcjaeeHiaCvCGFbBA2SpvA==}
@@ -1933,8 +1802,8 @@ packages:
'@emnapi/core@1.2.0':
resolution: {integrity: sha512-E7Vgw78I93we4ZWdYCb4DGAwRROGkMIXk7/y87UmANR+J6qsWusmC3gLt0H+O0KOt5e6O38U8oJamgbudrES/w==}
- '@emnapi/runtime@1.2.0':
- resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==}
+ '@emnapi/core@1.8.1':
+ resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==}
'@emnapi/runtime@1.5.0':
resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==}
@@ -1942,6 +1811,9 @@ packages:
'@emnapi/wasi-threads@1.0.1':
resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==}
+ '@emnapi/wasi-threads@1.1.0':
+ resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
+
'@emoji-mart/data@1.2.1':
resolution: {integrity: sha512-no2pQMWiBy6gpBEiqGeU77/bFejDqUTRY7KX+0+iur13op3bqUsXdnwoZs6Xb1zbv0gAj5VvS1PWoUUckSr5Dw==}
@@ -1951,204 +1823,102 @@ packages:
emoji-mart: ^5.2
react: ^16.8 || ^17 || ^18
- '@esbuild/aix-ppc64@0.19.11':
- resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [aix]
-
'@esbuild/aix-ppc64@0.25.0':
resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/android-arm64@0.19.11':
- resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
-
'@esbuild/android-arm64@0.25.0':
resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
- '@esbuild/android-arm@0.19.11':
- resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [android]
-
'@esbuild/android-arm@0.25.0':
resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
- '@esbuild/android-x64@0.19.11':
- resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [android]
-
'@esbuild/android-x64@0.25.0':
resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
- '@esbuild/darwin-arm64@0.19.11':
- resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
-
'@esbuild/darwin-arm64@0.25.0':
resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-x64@0.19.11':
- resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [darwin]
-
'@esbuild/darwin-x64@0.25.0':
resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.19.11':
- resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
-
'@esbuild/freebsd-arm64@0.25.0':
resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.19.11':
- resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [freebsd]
-
'@esbuild/freebsd-x64@0.25.0':
resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
- '@esbuild/linux-arm64@0.19.11':
- resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
-
'@esbuild/linux-arm64@0.25.0':
resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.19.11':
- resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [linux]
-
'@esbuild/linux-arm@0.25.0':
resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
- '@esbuild/linux-ia32@0.19.11':
- resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [linux]
-
'@esbuild/linux-ia32@0.25.0':
resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
- '@esbuild/linux-loong64@0.19.11':
- resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==}
- engines: {node: '>=12'}
- cpu: [loong64]
- os: [linux]
-
'@esbuild/linux-loong64@0.25.0':
resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
- '@esbuild/linux-mips64el@0.19.11':
- resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==}
- engines: {node: '>=12'}
- cpu: [mips64el]
- os: [linux]
-
'@esbuild/linux-mips64el@0.25.0':
resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-ppc64@0.19.11':
- resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [linux]
-
'@esbuild/linux-ppc64@0.25.0':
resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-riscv64@0.19.11':
- resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==}
- engines: {node: '>=12'}
- cpu: [riscv64]
- os: [linux]
-
'@esbuild/linux-riscv64@0.25.0':
resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-s390x@0.19.11':
- resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==}
- engines: {node: '>=12'}
- cpu: [s390x]
- os: [linux]
-
'@esbuild/linux-s390x@0.25.0':
resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
- '@esbuild/linux-x64@0.19.11':
- resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [linux]
-
'@esbuild/linux-x64@0.25.0':
resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==}
engines: {node: '>=18'}
@@ -2161,12 +1931,6 @@ packages:
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.19.11':
- resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [netbsd]
-
'@esbuild/netbsd-x64@0.25.0':
resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==}
engines: {node: '>=18'}
@@ -2179,60 +1943,30 @@ packages:
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.19.11':
- resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [openbsd]
-
'@esbuild/openbsd-x64@0.25.0':
resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/sunos-x64@0.19.11':
- resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [sunos]
-
'@esbuild/sunos-x64@0.25.0':
resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
- '@esbuild/win32-arm64@0.19.11':
- resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [win32]
-
'@esbuild/win32-arm64@0.25.0':
resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-ia32@0.19.11':
- resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [win32]
-
'@esbuild/win32-ia32@0.25.0':
resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.19.11':
- resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [win32]
-
'@esbuild/win32-x64@0.25.0':
resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==}
engines: {node: '>=18'}
@@ -2245,28 +1979,30 @@ packages:
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ '@eslint-community/eslint-utils@4.9.1':
+ resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
'@eslint-community/regexpp@4.12.1':
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/config-array@0.19.0':
- resolution: {integrity: sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==}
+ '@eslint/config-array@0.21.1':
+ resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/core@0.11.0':
- resolution: {integrity: sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==}
+ '@eslint/config-helpers@0.4.2':
+ resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/core@0.9.0':
- resolution: {integrity: sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==}
+ '@eslint/core@0.17.0':
+ resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/eslintrc@3.2.0':
- resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@eslint/js@9.15.0':
- resolution: {integrity: sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==}
+ '@eslint/eslintrc@3.3.3':
+ resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.16.0':
@@ -2277,26 +2013,26 @@ packages:
resolution: {integrity: sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/object-schema@2.1.4':
- resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==}
+ '@eslint/js@9.39.2':
+ resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/plugin-kit@0.2.3':
- resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==}
+ '@eslint/object-schema@2.1.7':
+ resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/plugin-kit@0.2.6':
- resolution: {integrity: sha512-+0TjwR1eAUdZtvv/ir1mGX+v0tUoR3VEPB8Up0LLJC+whRW0GgBBtpbOkg/a/U4Dxa6l5a3l9AJ1aWIQVyoWJA==}
+ '@eslint/plugin-kit@0.4.1':
+ resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@excalidraw/common@0.18.0-c158187':
- resolution: {integrity: sha512-5mFjIzOh6F5rhmMdusxQoJnCnljuyiS8451GpaiXYXRGVxFKzpKxCIwxx+OMLvDE2ShVBSyh2jicxnSN0xJieg==}
+ '@excalidraw/common@0.18.0-3a5ef40':
+ resolution: {integrity: sha512-bnrDbP/Stg+i/mbI2H/kns69fFRPrMNOZ3nWA5opdp9oiNid0TS5D4fBEECRq6JdbStGp6Y7hdiN9OP5pUiUCA==}
- '@excalidraw/element@0.18.0-c158187':
- resolution: {integrity: sha512-uKNdEUJ3EkIzAhzIuy7q7xsGnfNOPQPeecfwXxXrwtPIc5FW6XH5XGqcXNpdNMo4Y+5YJ9OX/vni1/5dPiCygw==}
+ '@excalidraw/element@0.18.0-3a5ef40':
+ resolution: {integrity: sha512-X44hcnc/hlAVv/2Bk9eRdWc79omv/zkKLmrEp/VSWOik5sHXdkI1nHJe023EakPRpNfzbcw8o/3lCvjvRc9r9w==}
- '@excalidraw/excalidraw@0.18.0-c158187':
- resolution: {integrity: sha512-A33bl73adMTEeqzFjYjJ0kwv2YNgG46TrUz3UHYHi+p6WFx/VwGnwTXk8WS2OjbigDgwBOhTZXZF2ah+Gf2x8w==}
+ '@excalidraw/excalidraw@0.18.0-3a5ef40':
+ resolution: {integrity: sha512-a7+IGZHPWX0Nqxv8CLi2GhZDj6v1gu/vOCs3Xo7nsdOibztmltF07vzfAMuxDP4tBukiDul94xtUncrmD37zQQ==}
peerDependencies:
react: ^17.0.2 || ^18.2.0 || ^19.0.0
react-dom: ^17.0.2 || ^18.2.0 || ^19.0.0
@@ -2307,11 +2043,11 @@ packages:
'@excalidraw/markdown-to-text@0.1.2':
resolution: {integrity: sha512-1nDXBNAojfi3oSFwJswKREkFm5wrSjqay81QlyRv2pkITG/XYB5v+oChENVBQLcxQwX4IUATWvXM5BcaNhPiIg==}
- '@excalidraw/math@0.18.0-c158187':
- resolution: {integrity: sha512-SE0Wxudz1KeuTMAFPapE8ItvsVYOfUeq4LG+0GTjKGzdqGYp/a0dJX43Bu879osVqDsCcwidI3UV9F8xyMAG3Q==}
+ '@excalidraw/math@0.18.0-3a5ef40':
+ resolution: {integrity: sha512-TLn71dQAddM9mIoVWKg1hwLnSPZV5MGZF4h2++zsA1IAZ8qQr20sEfR583uKDKTxqnOF1/eAaGpleNid57RuFg==}
- '@excalidraw/mermaid-to-excalidraw@1.1.3':
- resolution: {integrity: sha512-/50GUWlGotc+FCMX7nM1P1kWm9vNd3fuq38v7upBp9IHqlw6Zmfyj79eG/0vz1heifuYrSW9yzzv0q9jVALzxg==}
+ '@excalidraw/mermaid-to-excalidraw@2.0.0-rfc3':
+ resolution: {integrity: sha512-OlKySL2aZwxgvO0wKpjq5fNNWWYwYGQAVMqwG3CJZ/zEf9NotTtX+Rl/WgL6qWvNgDq8/mavOnEstC+42gqnIQ==}
'@excalidraw/random-username@1.1.0':
resolution: {integrity: sha512-nULYsQxkWHnbmHvcs+efMkJ4/9TtvNyFeLyHdeGxW0zHs6P+jYVqcRff9A6Vq9w9JXeDRnRh2VKvTtS19GW2qA==}
@@ -2320,8 +2056,8 @@ packages:
'@fastify/accept-negotiator@2.0.1':
resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==}
- '@fastify/ajv-compiler@4.0.2':
- resolution: {integrity: sha512-Rkiu/8wIjpsf46Rr+Fitd3HRP+VsxUFDDeag0hs9L0ksfnwx2g7SPQQTFL0E8Qv+rfXzQOxBJnjUB9ITUDjfWQ==}
+ '@fastify/ajv-compiler@4.0.5':
+ resolution: {integrity: sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A==}
'@fastify/busboy@3.1.1':
resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==}
@@ -2350,8 +2086,8 @@ packages:
'@fastify/merge-json-schemas@0.2.1':
resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==}
- '@fastify/multipart@9.3.0':
- resolution: {integrity: sha512-NpeKipTOjjL1dA7SSlRMrOWWtrE8/0yKOmeudkdQoEaz4sVDJw5MVdZIahsWhvpc3YTN7f04f9ep/Y65RKoOWA==}
+ '@fastify/multipart@9.4.0':
+ resolution: {integrity: sha512-Z404bzZeLSXTBmp/trCBuoVFX28pM7rhv849Q5TsbTFZHuk1lc4QjQITTPK92DKVpXmNtJXeHSSc7GYvqFpxAQ==}
'@fastify/proxy-addr@5.0.0':
resolution: {integrity: sha512-37qVVA1qZ5sgH7KpHkkC4z9SK6StIsIcOmpjvMPXNb3vx2GQxhZocogVYbr2PbbeLCQxYIPDok307xEvRZOzGA==}
@@ -2359,8 +2095,8 @@ packages:
'@fastify/send@4.1.0':
resolution: {integrity: sha512-TMYeQLCBSy2TOFmV95hQWkiTYgC/SEx7vMdV+wnZVX4tt8VBLKzmH8vV9OzJehV0+XBfg+WxPMt5wp+JBUKsVw==}
- '@fastify/static@8.3.0':
- resolution: {integrity: sha512-yKxviR5PH1OKNnisIzZKmgZSus0r2OZb8qCSbqmw34aolT4g3UlzYfeBRym+HJ1J471CR8e2ldNub4PubD1coA==}
+ '@fastify/static@9.0.0':
+ resolution: {integrity: sha512-r64H8Woe/vfilg5RTy7lwWlE8ZZcTrc3kebYFMEUBrMqlydhQyoiExQXdYAy2REVpST/G35+stAM8WYp1WGmMA==}
'@floating-ui/core@1.7.3':
resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==}
@@ -2371,12 +2107,6 @@ packages:
'@floating-ui/dom@1.7.4':
resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==}
- '@floating-ui/react-dom@2.1.2':
- resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==}
- peerDependencies:
- react: '>=16.8.0'
- react-dom: '>=16.8.0'
-
'@floating-ui/react-dom@2.1.6':
resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==}
peerDependencies:
@@ -2392,26 +2122,26 @@ packages:
'@floating-ui/utils@0.2.10':
resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
- '@hocuspocus/common@3.4.3':
- resolution: {integrity: sha512-wnBBO9sWcVAoUPEXN1qO+zk3HaEF9VTemxB6kjuuH6e1dHnD0v12m4P4X1wiZVhmMIX/PMl/fu3MGtYWQJz8gA==}
+ '@hocuspocus/common@3.4.4':
+ resolution: {integrity: sha512-RykIJ0tsHHMP4Xk+4UCbc7SO5LgGxGUSTdbh6anJEsaALAyqinf1Nn5HYuMjLPolAmsar1v++m9zufR09NLpXA==}
- '@hocuspocus/provider@3.4.3':
- resolution: {integrity: sha512-zt+UgVXGsEQrqnDZgavc2PT9yKJjmVjV+5YxvhlmFVFLVORqawT4l601aKmLPhvyK97un4ZApZ5rso8iO6crWg==}
+ '@hocuspocus/provider@3.4.4':
+ resolution: {integrity: sha512-KbsMAfdYcIJD8eMU/5QnpXcSOvIWAcCNI33FSRSaKCIpYBFtAwkYIwWnZJmPZ8a1BMAtqQc+uvy9+UQf7GHnGQ==}
peerDependencies:
y-protocols: ^1.0.6
yjs: ^13.6.8
- '@hocuspocus/server@3.4.3':
- resolution: {integrity: sha512-a9bqAXUMBo9YBeuzqNf9C3eVbu1RIWUrtmFMGq+ZssQr3Jugt/5PCkZskgqhJNvPkyTARHcUtN80j/SDLylZmg==}
+ '@hocuspocus/server@3.4.4':
+ resolution: {integrity: sha512-UV+oaONAejOzeYgUygNcgsc8RdZvSokVvAxluZJIisLACpRO/VsseQ5lWKDRwLd7Fn6+rHWDH3hGuQ1fdX1Ycg==}
peerDependencies:
y-protocols: ^1.0.6
yjs: ^13.6.8
- '@hocuspocus/transformer@3.4.3':
- resolution: {integrity: sha512-jQZiqFGCvGQJLgE0nHZ4TdpEJlI7WkM8CKA1wLcs0beVs0kNXg32lykGckjveJwwJuJ/hieMqIEqj9POxTWPEw==}
+ '@hocuspocus/transformer@3.4.4':
+ resolution: {integrity: sha512-X0EJ863LV97YbL5m8WTt4NDSC6uHi6ZCq/teIH5aholdjdhdTmFrzMemdhha/ZqPUZyaKhOoAmZzwR55HZLPpQ==}
peerDependencies:
- '@tiptap/core': ^3.0.1
- '@tiptap/pm': ^3.0.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
y-prosemirror: 1.3.7
yjs: ^13.6.8
@@ -2431,8 +2161,8 @@ packages:
resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==}
engines: {node: '>=18.18'}
- '@humanwhocodes/retry@0.4.1':
- resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==}
+ '@humanwhocodes/retry@0.4.3':
+ resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines: {node: '>=18.18'}
'@iconify/types@2.0.0':
@@ -2441,127 +2171,9 @@ packages:
'@iconify/utils@3.0.1':
resolution: {integrity: sha512-A78CUEnFGX8I/WlILxJCuIJXloL0j/OJ9PSchPAfCargEIKmUBWvvEMmKWB5oONwiUqlNt+5eRufdkLxeHIWYw==}
- '@img/sharp-darwin-arm64@0.34.3':
- resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm64]
- os: [darwin]
-
- '@img/sharp-darwin-x64@0.34.3':
- resolution: {integrity: sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [x64]
- os: [darwin]
-
- '@img/sharp-libvips-darwin-arm64@1.2.0':
- resolution: {integrity: sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==}
- cpu: [arm64]
- os: [darwin]
-
- '@img/sharp-libvips-darwin-x64@1.2.0':
- resolution: {integrity: sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==}
- cpu: [x64]
- os: [darwin]
-
- '@img/sharp-libvips-linux-arm64@1.2.0':
- resolution: {integrity: sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==}
- cpu: [arm64]
- os: [linux]
-
- '@img/sharp-libvips-linux-arm@1.2.0':
- resolution: {integrity: sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==}
- cpu: [arm]
- os: [linux]
-
- '@img/sharp-libvips-linux-ppc64@1.2.0':
- resolution: {integrity: sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==}
- cpu: [ppc64]
- os: [linux]
-
- '@img/sharp-libvips-linux-s390x@1.2.0':
- resolution: {integrity: sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==}
- cpu: [s390x]
- os: [linux]
-
- '@img/sharp-libvips-linux-x64@1.2.0':
- resolution: {integrity: sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==}
- cpu: [x64]
- os: [linux]
-
- '@img/sharp-libvips-linuxmusl-arm64@1.2.0':
- resolution: {integrity: sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==}
- cpu: [arm64]
- os: [linux]
-
- '@img/sharp-libvips-linuxmusl-x64@1.2.0':
- resolution: {integrity: sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==}
- cpu: [x64]
- os: [linux]
-
- '@img/sharp-linux-arm64@0.34.3':
- resolution: {integrity: sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm64]
- os: [linux]
-
- '@img/sharp-linux-arm@0.34.3':
- resolution: {integrity: sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm]
- os: [linux]
-
- '@img/sharp-linux-ppc64@0.34.3':
- resolution: {integrity: sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [ppc64]
- os: [linux]
-
- '@img/sharp-linux-s390x@0.34.3':
- resolution: {integrity: sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [s390x]
- os: [linux]
-
- '@img/sharp-linux-x64@0.34.3':
- resolution: {integrity: sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [x64]
- os: [linux]
-
- '@img/sharp-linuxmusl-arm64@0.34.3':
- resolution: {integrity: sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm64]
- os: [linux]
-
- '@img/sharp-linuxmusl-x64@0.34.3':
- resolution: {integrity: sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [x64]
- os: [linux]
-
- '@img/sharp-wasm32@0.34.3':
- resolution: {integrity: sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [wasm32]
-
- '@img/sharp-win32-arm64@0.34.3':
- resolution: {integrity: sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm64]
- os: [win32]
-
- '@img/sharp-win32-ia32@0.34.3':
- resolution: {integrity: sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [ia32]
- os: [win32]
-
- '@img/sharp-win32-x64@0.34.3':
- resolution: {integrity: sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [x64]
- os: [win32]
+ '@inquirer/ansi@1.0.2':
+ resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==}
+ engines: {node: '>=18'}
'@inquirer/checkbox@4.1.2':
resolution: {integrity: sha512-PL9ixC5YsPXzXhAZFUPmkXGxfgjkdfZdPEPPmt4kFwQ4LBMDG9n/nHXYRGGZSKZJs+d1sGKWgS2GiPzVRKUdtQ==}
@@ -2572,6 +2184,24 @@ packages:
'@types/node':
optional: true
+ '@inquirer/checkbox@4.3.2':
+ resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/confirm@5.1.21':
+ resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
'@inquirer/confirm@5.1.6':
resolution: {integrity: sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw==}
engines: {node: '>=18'}
@@ -2590,6 +2220,24 @@ packages:
'@types/node':
optional: true
+ '@inquirer/core@10.3.2':
+ resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/editor@4.2.23':
+ resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
'@inquirer/editor@4.2.7':
resolution: {integrity: sha512-gktCSQtnSZHaBytkJKMKEuswSk2cDBuXX5rxGFv306mwHfBPjg5UAldw9zWGoEyvA9KpRDkeM4jfrx0rXn0GyA==}
engines: {node: '>=18'}
@@ -2599,6 +2247,15 @@ packages:
'@types/node':
optional: true
+ '@inquirer/expand@4.0.23':
+ resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
'@inquirer/expand@4.0.9':
resolution: {integrity: sha512-Xxt6nhomWTAmuSX61kVgglLjMEFGa+7+F6UUtdEUeg7fg4r9vaFttUUKrtkViYYrQBA5Ia1tkOJj2koP9BuLig==}
engines: {node: '>=18'}
@@ -2608,10 +2265,23 @@ packages:
'@types/node':
optional: true
+ '@inquirer/external-editor@1.0.3':
+ resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
'@inquirer/figures@1.0.10':
resolution: {integrity: sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==}
engines: {node: '>=18'}
+ '@inquirer/figures@1.0.15':
+ resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==}
+ engines: {node: '>=18'}
+
'@inquirer/input@4.1.6':
resolution: {integrity: sha512-1f5AIsZuVjPT4ecA8AwaxDFNHny/tSershP/cTvTDxLdiIGTeILNcKozB0LaYt6mojJLUbOYhpIxicaYf7UKIQ==}
engines: {node: '>=18'}
@@ -2621,6 +2291,24 @@ packages:
'@types/node':
optional: true
+ '@inquirer/input@4.3.1':
+ resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/number@3.0.23':
+ resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
'@inquirer/number@3.0.9':
resolution: {integrity: sha512-iN2xZvH3tyIYXLXBvlVh0npk1q/aVuKXZo5hj+K3W3D4ngAEq/DkLpofRzx6oebTUhBvOgryZ+rMV0yImKnG3w==}
engines: {node: '>=18'}
@@ -2630,6 +2318,15 @@ packages:
'@types/node':
optional: true
+ '@inquirer/password@4.0.23':
+ resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
'@inquirer/password@4.0.9':
resolution: {integrity: sha512-xBEoOw1XKb0rIN208YU7wM7oJEHhIYkfG7LpTJAEW913GZeaoQerzf5U/LSHI45EVvjAdgNXmXgH51cUXKZcJQ==}
engines: {node: '>=18'}
@@ -2639,11 +2336,14 @@ packages:
'@types/node':
optional: true
- '@inquirer/prompts@7.2.1':
- resolution: {integrity: sha512-v2JSGri6/HXSfoGIwuKEn8sNCQK6nsB2BNpy2lSX6QH9bsECrMv93QHnj5+f+1ZWpF/VNioIV2B/PDox8EvGuQ==}
+ '@inquirer/prompts@7.10.1':
+ resolution: {integrity: sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
'@inquirer/prompts@7.3.2':
resolution: {integrity: sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==}
@@ -2663,6 +2363,15 @@ packages:
'@types/node':
optional: true
+ '@inquirer/rawlist@4.1.11':
+ resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
'@inquirer/search@3.0.9':
resolution: {integrity: sha512-DWmKztkYo9CvldGBaRMr0ETUHgR86zE6sPDVOHsqz4ISe9o1LuiWfgJk+2r75acFclA93J/lqzhT0dTjCzHuoA==}
engines: {node: '>=18'}
@@ -2672,6 +2381,15 @@ packages:
'@types/node':
optional: true
+ '@inquirer/search@3.2.2':
+ resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
'@inquirer/select@4.0.9':
resolution: {integrity: sha512-BpJyJe7Dkhv2kz7yG7bPSbJLQuu/rqyNlF1CfiiFeFwouegfH+zh13KDyt6+d9DwucKo7hqM3wKLLyJxZMO+Xg==}
engines: {node: '>=18'}
@@ -2681,6 +2399,24 @@ packages:
'@types/node':
optional: true
+ '@inquirer/select@4.4.2':
+ resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/type@3.0.10':
+ resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
'@inquirer/type@3.0.4':
resolution: {integrity: sha512-2MNFrDY8jkFYc9Il9DgLsHhMzuHnOYM1+CUYVWbzu9oT0hC7V7EcYvdCKeoll/Fcci04A+ERZ9wcc7cQ8lTkIA==}
engines: {node: '>=18'}
@@ -2696,6 +2432,14 @@ packages:
'@ioredis/commands@1.4.0':
resolution: {integrity: sha512-aFT2yemJJo+TZCmieA7qnYGQooOS7QfNmYrzGtsYd3g9j5iDP8AimYYAesf79ohjbLG12XxC4nG5DyEnC88AsQ==}
+ '@isaacs/balanced-match@4.0.1':
+ resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
+ engines: {node: 20 || >=22}
+
+ '@isaacs/brace-expansion@5.0.1':
+ resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==}
+ engines: {node: 20 || >=22}
+
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
@@ -2708,71 +2452,87 @@ packages:
resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
engines: {node: '>=8'}
- '@jest/console@29.7.0':
- resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/console@30.2.0':
+ resolution: {integrity: sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- '@jest/core@29.7.0':
- resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/core@30.2.0':
+ resolution: {integrity: sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
node-notifier:
optional: true
- '@jest/environment@29.7.0':
- resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/diff-sequences@30.0.1':
+ resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- '@jest/expect-utils@29.7.0':
- resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/environment@30.2.0':
+ resolution: {integrity: sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- '@jest/expect@29.7.0':
- resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/expect-utils@30.2.0':
+ resolution: {integrity: sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- '@jest/fake-timers@29.7.0':
- resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/expect@30.2.0':
+ resolution: {integrity: sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- '@jest/globals@29.7.0':
- resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/fake-timers@30.2.0':
+ resolution: {integrity: sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- '@jest/reporters@29.7.0':
- resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/get-type@30.1.0':
+ resolution: {integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/globals@30.2.0':
+ resolution: {integrity: sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/pattern@30.0.1':
+ resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/reporters@30.2.0':
+ resolution: {integrity: sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
node-notifier:
optional: true
- '@jest/schemas@29.6.3':
- resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/schemas@30.0.5':
+ resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- '@jest/source-map@29.6.3':
- resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/snapshot-utils@30.2.0':
+ resolution: {integrity: sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- '@jest/test-result@29.7.0':
- resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/source-map@30.0.1':
+ resolution: {integrity: sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- '@jest/test-sequencer@29.7.0':
- resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/test-result@30.2.0':
+ resolution: {integrity: sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- '@jest/transform@29.7.0':
- resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/test-sequencer@30.2.0':
+ resolution: {integrity: sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- '@jest/types@29.6.3':
- resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/transform@30.2.0':
+ resolution: {integrity: sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/types@30.2.0':
+ resolution: {integrity: sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@joplin/turndown-plugin-gfm@1.0.56':
resolution: {integrity: sha512-q9Pul+xfmjXNHgNgB+ksRkwcBf13X7C89CDxT4sShrh17dmGsc7AUy+GbnwlmavauMDvsdiDIG8pvGqa1L002g==}
@@ -2790,10 +2550,6 @@ packages:
'@jridgewell/remapping@2.3.5':
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
- '@jridgewell/resolve-uri@3.1.1':
- resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
- engines: {node: '>=6.0.0'}
-
'@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
@@ -2805,26 +2561,20 @@ packages:
'@jridgewell/source-map@0.3.6':
resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
- '@jridgewell/sourcemap-codec@1.4.15':
- resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
-
'@jridgewell/sourcemap-codec@1.5.0':
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
- '@jridgewell/trace-mapping@0.3.25':
- resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
-
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
'@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
- '@keyv/serialize@1.0.3':
- resolution: {integrity: sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==}
+ '@keyv/serialize@1.1.1':
+ resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==}
- '@langchain/core@1.1.13':
- resolution: {integrity: sha512-CmTES4DNfNs7PisGm/is4RxOf1NAWCkhi+RrBBHb/gB5nZVFd+dfmXSomKoiBQ1DOdCUz1k9RX4DzSUbwg1swg==}
+ '@langchain/core@1.1.18':
+ resolution: {integrity: sha512-vwzbtHUSZaJONBA1n9uQedZPfyFFZ6XzTggTpR28n8tiIg7e1NC/5dvGW/lGtR1Du1VwV9DvDHA5/bOrLe6cVg==}
engines: {node: '>=20'}
'@langchain/textsplitters@1.0.1':
@@ -2844,58 +2594,58 @@ packages:
resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==}
engines: {node: '>=8'}
- '@mantine/core@8.3.12':
- resolution: {integrity: sha512-bDEoUl4SneltfI1GeEaBk6BVDbLuB/w15YwseAmUvc8ldAbNcsVhxKxY/BdhwqUo6O3L2vhdlb3WwxR1y8741g==}
+ '@mantine/core@8.3.14':
+ resolution: {integrity: sha512-ZOxggx65Av1Ii1NrckCuqzluRpmmG+8DyEw24wDom3rmwsPg9UV+0le2QTyI5Eo60LzPfUju1KuEPiUzNABIPg==}
peerDependencies:
- '@mantine/hooks': 8.3.12
+ '@mantine/hooks': 8.3.14
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
- '@mantine/dates@8.3.12':
- resolution: {integrity: sha512-rL2kYJRTrU29l1KjQt5bdUweiZuJs3DjiIcc6VGHUuj7OwfYZbEpWzMbcu8fSrya/+kZAe8JM0irX22CjmsDGw==}
+ '@mantine/dates@8.3.14':
+ resolution: {integrity: sha512-NdStRo2ZQ55MoMF5B9vjhpBpHRDHF1XA9Dkb1kKSdNuLlaFXKlvoaZxj/3LfNPpn7Nqlns78nWt4X8/cgC2YIg==}
peerDependencies:
- '@mantine/core': 8.3.12
- '@mantine/hooks': 8.3.12
+ '@mantine/core': 8.3.14
+ '@mantine/hooks': 8.3.14
dayjs: '>=1.0.0'
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
- '@mantine/form@8.3.12':
- resolution: {integrity: sha512-bjXL1Ah3lAZYHrjrF37FeHV8DFGeXV+apn0PRQw2MTLpdUSqKsiYIDDgugzRfNXWX1cn1ELtxtDXsMfdj/LI7Q==}
+ '@mantine/form@8.3.14':
+ resolution: {integrity: sha512-LJUeab+oF+YzATrm/K03Z/QoVVYlaolWqLUZZj7XexNA4hS2/ycKyWT07YhGkdHTLXkf3DUtrg1sS77K7Oje8A==}
peerDependencies:
react: ^18.x || ^19.x
- '@mantine/hooks@8.3.12':
- resolution: {integrity: sha512-lMMDzDewd3lUNtJCAHDj3g8On9X5aBl4q6EBwgOixKQSby9RG9ASEpK8oYHundHTm9tzo3MDeXWV/z32oSQWuw==}
+ '@mantine/hooks@8.3.14':
+ resolution: {integrity: sha512-0SbHnGEuHcF2QyjzBBcqidpjNmIb6n7TC3obnhkBToYhUTbMcJSK/8ei/yHtAelridJH4CPeohRlQdc0HajHyQ==}
peerDependencies:
react: ^18.x || ^19.x
- '@mantine/modals@8.3.12':
- resolution: {integrity: sha512-+uRyGe2lLy601qlMk+8aR9d/Aibu+dZi6Jcmvm5z8Gw4ocviyMMlnd8BLSQ/Jvib2OX8fWj+yUQN7FMQ4Rbwjw==}
+ '@mantine/modals@8.3.14':
+ resolution: {integrity: sha512-BBM53MBq0vKZ7MKmTbqdt6i5eZEoAbfllCHVlQ7J4Xlr1LehoxO3q0MuwPr5kkjSWAPw5okiviKoMYXIKBn53w==}
peerDependencies:
- '@mantine/core': 8.3.12
- '@mantine/hooks': 8.3.12
+ '@mantine/core': 8.3.14
+ '@mantine/hooks': 8.3.14
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
- '@mantine/notifications@8.3.12':
- resolution: {integrity: sha512-lqPPa11XdcndG8ywMao8yVkMA4jg/pBNbS85bR7OwHQa1yUftmfVlqJl9PZZCiWLX2AgKY3+xM5dHo4LidL+DA==}
+ '@mantine/notifications@8.3.14':
+ resolution: {integrity: sha512-+ia97wrcU9Zfv+jXYvgr2GdISqKTHbQE9nnEIZvGUBPAqKr9b2JAsaXQS/RsAdoXUI+kKDEtH2fyVYS7zrSi/Q==}
peerDependencies:
- '@mantine/core': 8.3.12
- '@mantine/hooks': 8.3.12
+ '@mantine/core': 8.3.14
+ '@mantine/hooks': 8.3.14
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
- '@mantine/spotlight@8.3.12':
- resolution: {integrity: sha512-ujj3C/Mzdt20dVDBfUt0sJ+Re/DsLWN9mgef00TchbRtSbPfGJEZDkOeytsKEeUk3BDP3gC6nFilehf+Vkzevg==}
+ '@mantine/spotlight@8.3.14':
+ resolution: {integrity: sha512-AzBLfw2U03aVy7eByaHFDPf/GplhW4jZ/Eyy/H4sBCfIYTM8QO4W/Db/y5dZBO4tOEWFDNFabc85QyiyfMyHiw==}
peerDependencies:
- '@mantine/core': 8.3.12
- '@mantine/hooks': 8.3.12
+ '@mantine/core': 8.3.14
+ '@mantine/hooks': 8.3.14
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
- '@mantine/store@8.3.12':
- resolution: {integrity: sha512-EC4eIKpm5s7neMbBrWsP6jGKLqrzHf63Ao3penYr7fn25dFXdbXZYw+IG8GYzxOC4yG61b2zTS+bpy5+vwzXpw==}
+ '@mantine/store@8.3.14':
+ resolution: {integrity: sha512-bgW+fYHDOp7Pk4+lcEm3ZF7dD/sIMKHyR985cOqSHAYJPRcVFb+zcEK/SWoFZqlyA4qh08CNrASOaod8N0XKfA==}
peerDependencies:
react: ^18.x || ^19.x
@@ -2996,6 +2746,9 @@ packages:
resolution: {integrity: sha512-FGjyUBoF0sl1EenSiE4UV2WYu76q6F9GSYedq5EiOCOyGYoQ/Owulcv6rd7v/tWOpljDDtefXXIaOCJrVKem4w==}
engines: {node: '>= 10'}
+ '@napi-rs/wasm-runtime@0.2.12':
+ resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
+
'@napi-rs/wasm-runtime@0.2.4':
resolution: {integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==}
@@ -3020,12 +2773,12 @@ packages:
'@nestjs/core': ^10.0.0 || ^11.0.0
bullmq: ^3.0.0 || ^4.0.0 || ^5.0.0
- '@nestjs/cli@11.0.4':
- resolution: {integrity: sha512-EITofIvoxqHt/A5M2VcihyDqmZ0b8s8k8xLI/gzSNqmgkZ4caYOq87LKCENG862jGb0aC7ROXpYnDjxMqnFjOQ==}
+ '@nestjs/cli@11.0.16':
+ resolution: {integrity: sha512-P0H+Vcjki6P5160E5QnMt3Q0X5FTg4PZkP99Ig4lm/4JWqfw32j3EXv3YBTJ2DmxLwOQ/IS9F7dzKpMAgzKTGg==}
engines: {node: '>= 20.11'}
hasBin: true
peerDependencies:
- '@swc/cli': ^0.1.62 || ^0.3.0 || ^0.4.0 || ^0.5.0 || ^0.6.0
+ '@swc/cli': ^0.1.62 || ^0.3.0 || ^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0
'@swc/core': ^1.3.62
peerDependenciesMeta:
'@swc/cli':
@@ -3052,8 +2805,8 @@ packages:
'@nestjs/common': ^10.0.0 || ^11.0.0
rxjs: ^7.1.0
- '@nestjs/core@11.1.11':
- resolution: {integrity: sha512-H9i+zT3RvHi7tDc+lCmWHJ3ustXveABCr+Vcpl96dNOxgmrx4elQSTC4W93Mlav2opfLV+p0UTHY6L+bpUA4zA==}
+ '@nestjs/core@11.1.13':
+ resolution: {integrity: sha512-Tq9EIKiC30EBL8hLK93tNqaToy0hzbuVGYt29V8NhkVJUsDzlmiVf6c3hSPtzx2krIUVbTgQ2KFeaxr72rEyzQ==}
engines: {node: '>= 20'}
peerDependencies:
'@nestjs/common': ^11.0.0
@@ -3100,8 +2853,8 @@ packages:
'@nestjs/common': ^10.0.0 || ^11.0.0
passport: ^0.5.0 || ^0.6.0 || ^0.7.0
- '@nestjs/platform-fastify@11.1.11':
- resolution: {integrity: sha512-BA/KN31ALgdmPgT6sMwHBUnSCezOq9TjRpnczgoljam34xjp/yvZwNu9DGS0KiJF7NHQXpzI2jm6gxiUUOVMtw==}
+ '@nestjs/platform-fastify@11.1.13':
+ resolution: {integrity: sha512-08VkZt5SVRtRyuEzRxY5KzrtsTSiqTSQlySUI8GUVhINHV/iziB6GKOWJc3upTmxvYG/5LSmDO4hv8kDnsWNCQ==}
peerDependencies:
'@fastify/static': ^8.0.0 || ^9.0.0
'@fastify/view': ^10.0.0 || ^11.0.0
@@ -3113,8 +2866,8 @@ packages:
'@fastify/view':
optional: true
- '@nestjs/platform-socket.io@11.1.11':
- resolution: {integrity: sha512-0z6pLg9CuTXtz7q2lRZoPOU94DN28OTa39f4cQrlZysKA6QrKM7w7z6xqb4g32qjF+LQHFNRmMJtE/pLrxBaig==}
+ '@nestjs/platform-socket.io@11.1.13':
+ resolution: {integrity: sha512-04Rh16IopZzHRXt0ZjFASqt9oNFV/0m0NsYe4kVOSaTEoef3cH7cTFpNpHsfNHcc4QpYL963XE8SvIRcZs5L8A==}
peerDependencies:
'@nestjs/common': ^11.0.0
'@nestjs/websockets': ^11.0.0
@@ -3192,8 +2945,8 @@ packages:
'@nestjs/platform-express':
optional: true
- '@nestjs/websockets@11.1.11':
- resolution: {integrity: sha512-apuP7C/gtMBIYNgA8IWt75GTZeWya5JQCnrLZFcOu+IZt00j9Xd/Bm7hbj/Qr/JVoM/7q6c/4p4oOZtBGx4aeA==}
+ '@nestjs/websockets@11.1.13':
+ resolution: {integrity: sha512-8r8EadqBkrTYtH2uog42HfIb5fcP5a3iXymH/ityd9bO/gDson5Q1qbtCQRjuU++6NY12YYteKRu4eP/iErbLw==}
peerDependencies:
'@nestjs/common': ^11.0.0
'@nestjs/core': ^11.0.0
@@ -3204,63 +2957,6 @@ packages:
'@nestjs/platform-socket.io':
optional: true
- '@next/env@14.2.10':
- resolution: {integrity: sha512-dZIu93Bf5LUtluBXIv4woQw2cZVZ2DJTjax5/5DOs3lzEOeKLy7GxRSr4caK9/SCPdaW6bCgpye6+n4Dh9oJPw==}
-
- '@next/swc-darwin-arm64@14.2.10':
- resolution: {integrity: sha512-V3z10NV+cvMAfxQUMhKgfQnPbjw+Ew3cnr64b0lr8MDiBJs3eLnM6RpGC46nhfMZsiXgQngCJKWGTC/yDcgrDQ==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [darwin]
-
- '@next/swc-darwin-x64@14.2.10':
- resolution: {integrity: sha512-Y0TC+FXbFUQ2MQgimJ/7Ina2mXIKhE7F+GUe1SgnzRmwFY3hX2z8nyVCxE82I2RicspdkZnSWMn4oTjIKz4uzA==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [darwin]
-
- '@next/swc-linux-arm64-gnu@14.2.10':
- resolution: {integrity: sha512-ZfQ7yOy5zyskSj9rFpa0Yd7gkrBnJTkYVSya95hX3zeBG9E55Z6OTNPn1j2BTFWvOVVj65C3T+qsjOyVI9DQpA==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
-
- '@next/swc-linux-arm64-musl@14.2.10':
- resolution: {integrity: sha512-n2i5o3y2jpBfXFRxDREr342BGIQCJbdAUi/K4q6Env3aSx8erM9VuKXHw5KNROK9ejFSPf0LhoSkU/ZiNdacpQ==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
-
- '@next/swc-linux-x64-gnu@14.2.10':
- resolution: {integrity: sha512-GXvajAWh2woTT0GKEDlkVhFNxhJS/XdDmrVHrPOA83pLzlGPQnixqxD8u3bBB9oATBKB//5e4vpACnx5Vaxdqg==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
-
- '@next/swc-linux-x64-musl@14.2.10':
- resolution: {integrity: sha512-opFFN5B0SnO+HTz4Wq4HaylXGFV+iHrVxd3YvREUX9K+xfc4ePbRrxqOuPOFjtSuiVouwe6uLeDtabjEIbkmDA==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
-
- '@next/swc-win32-arm64-msvc@14.2.10':
- resolution: {integrity: sha512-9NUzZuR8WiXTvv+EiU/MXdcQ1XUvFixbLIMNQiVHuzs7ZIFrJDLJDaOF1KaqttoTujpcxljM/RNAOmw1GhPPQQ==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [win32]
-
- '@next/swc-win32-ia32-msvc@14.2.10':
- resolution: {integrity: sha512-fr3aEbSd1GeW3YUMBkWAu4hcdjZ6g4NBl1uku4gAn661tcxd1bHs1THWYzdsbTRLcCKLjrDZlNp6j2HTfrw+Bg==}
- engines: {node: '>= 10'}
- cpu: [ia32]
- os: [win32]
-
- '@next/swc-win32-x64-msvc@14.2.10':
- resolution: {integrity: sha512-UjeVoRGKNL2zfbcQ6fscmgjBAS/inHBh63mjIlfPg/NG8Yn2ztqylXt5qilYb6hoHIwaU2ogHknHWWmahJjgZQ==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [win32]
-
'@noble/hashes@1.8.0':
resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
engines: {node: ^14.21.3 || >=16}
@@ -3290,89 +2986,147 @@ packages:
engines: {node: ^14.18.0 || >=16.10.0, npm: '>=5.10.0'}
hasBin: true
- '@nx/devkit@20.4.5':
- resolution: {integrity: sha512-yHzR4/6SoT1bZHXcJwdFYKDYEG+MNQIu2JCW6vMtkP6HAprITT6A8kj/diWowpoAskA0e4LtqN+KtYAhzNvnvg==}
+ '@nx/devkit@22.5.0':
+ resolution: {integrity: sha512-CLHu+zoZW8szUc0aoSrDc8P8UkWsCCoSJoa3mHsw1rYxyvFv8ufKBMmIN/jUKNx+q/XJmGivymcNI1z3vpql0w==}
peerDependencies:
- nx: '>= 19 <= 21'
+ nx: '>= 21 <= 23 || ^22.0.0-0'
- '@nx/js@20.4.5':
- resolution: {integrity: sha512-pPU6fu7G5RAvOxeavghV5wiZSupKd8f8Y9DHkuFheZmyPBTqY2ndcE/6jPnHsWzmyMgYpsEVOG0iS8/Y3HBW4w==}
+ '@nx/js@22.5.0':
+ resolution: {integrity: sha512-+RZAdUwxJNENEtrkwGUMSqQ4f3Vipn0ERZI0EB04rq4QlET30fcUa8yfBf/QYll4LOZ//Ej4vD3TjyWtoJ+dFw==}
peerDependencies:
- verdaccio: ^5.0.4
+ verdaccio: ^6.0.5
peerDependenciesMeta:
verdaccio:
optional: true
- '@nx/nx-darwin-arm64@20.4.5':
- resolution: {integrity: sha512-KWZNGXdyJZj5ArBORY9H10MVhxrsOXj7yfXZM9AerSA4LNgWTZ8gLDnLk0y/25RLIGrzBGIe2vLxa5DS+WtINQ==}
- engines: {node: '>= 10'}
+ '@nx/nx-darwin-arm64@22.5.0':
+ resolution: {integrity: sha512-MHnzv6tzucvLsh4oS9FTepj+ct/o8/DPXrQow+9Jid7GSgY59xrDX/8CleJOrwL5lqKEyGW7vv8TR+4wGtEWTA==}
cpu: [arm64]
os: [darwin]
- '@nx/nx-darwin-x64@20.4.5':
- resolution: {integrity: sha512-aBSsH6WTkQjEmpZyugsGv74U+wjUv4i75bSlyrfcmJsaSCto/rkX9s3uyxeuqE56Uxjdq437dQTkzd2ZQUGjwg==}
- engines: {node: '>= 10'}
+ '@nx/nx-darwin-x64@22.5.0':
+ resolution: {integrity: sha512-/0w43hbR5Kia0XeCDZHDt/18FHhpwQs+Y+8TO8/ZsF1RgCI0knJDCyJieYk1yEZAq6E8dStAJnuzxK9uvETs4A==}
cpu: [x64]
os: [darwin]
- '@nx/nx-freebsd-x64@20.4.5':
- resolution: {integrity: sha512-t9tcDU6ddCd9tVPlR/PdIMzL5c/8k/nhM9OZmZvdLHEJyJrRhEl7/rmBA7XIYwYP0lptrm6zivsXKydzZCohag==}
- engines: {node: '>= 10'}
+ '@nx/nx-freebsd-x64@22.5.0':
+ resolution: {integrity: sha512-d4Pd1VFpD272R7kJTWm/Pj49BIz44GZ+QIVSfxlx3GWxyaPd25X9GBanUngL6qpactS+aLTwcoBmnSbZ4PEcEQ==}
cpu: [x64]
os: [freebsd]
- '@nx/nx-linux-arm-gnueabihf@20.4.5':
- resolution: {integrity: sha512-R4DFGtNePkCqjC776VKNPkRGcw0z0dB8R7O3TyU3VWeu33K7irm0G1pJSScSSZpl/12T0J4QQS4D/UtPrrGOzg==}
- engines: {node: '>= 10'}
+ '@nx/nx-linux-arm-gnueabihf@22.5.0':
+ resolution: {integrity: sha512-cCyG23PikIlqE7I6s9j0aHJSqIxnpdOjFOXyRd224XmFyAB8tOyKl7vDD/WugcpAceos28i+Rgz4na189zm48A==}
cpu: [arm]
os: [linux]
- '@nx/nx-linux-arm64-gnu@20.4.5':
- resolution: {integrity: sha512-mk9RX9qy2EvdcvxFG5ZSRhm1NGf2rMkR8VXeSTlNgUdn+QPU9OvxzedyAqjyDppAkCPQpo+m6LGNNKvxmbgv7g==}
- engines: {node: '>= 10'}
+ '@nx/nx-linux-arm64-gnu@22.5.0':
+ resolution: {integrity: sha512-vkQw8737fpta6oVEEqskzwq+d0GeZkGhtyl+U3pAcuUcYTdqbsZaofSQACFnGfngsqpYmlJCWJGU5Te00qcPQw==}
cpu: [arm64]
os: [linux]
- '@nx/nx-linux-arm64-musl@20.4.5':
- resolution: {integrity: sha512-bTqySYxbfV8sPq2MZciOFYOSvzS0pBksV9ELJEW5QJZ1NUqOIWQW/sgBSdeprt0qMJtn3fov6Wro0liWOQRUZQ==}
- engines: {node: '>= 10'}
+ '@nx/nx-linux-arm64-musl@22.5.0':
+ resolution: {integrity: sha512-BkEsFBsnKrDK11N914rr5YKyIJwYoSVItJ7VzsQZIqAX0C7PdJeQ7KzqOGwoezbabdLmzFOBNg6s/o1ujoEYxw==}
cpu: [arm64]
os: [linux]
- '@nx/nx-linux-x64-gnu@20.4.5':
- resolution: {integrity: sha512-dxJCRESkWGMNUWM28lT9p8Ap2okM/HU6o9jiZhvMh6D9sdqKY73cg9RUoLu2rAvFMTUUPqNku6qsyOCYpJ9GXA==}
- engines: {node: '>= 10'}
+ '@nx/nx-linux-x64-gnu@22.5.0':
+ resolution: {integrity: sha512-Dsqoz4hWmqehMMm8oJY6Q0ckEUeeHz4+T/C8nHyDaaj/REKCSmqYf/+QV6f2Z5Up/CsQ/hoAsWYEhCHZ0tcSFg==}
cpu: [x64]
os: [linux]
- '@nx/nx-linux-x64-musl@20.4.5':
- resolution: {integrity: sha512-Vaqeo/DyUu10SJRHLH5Nb6FOYdwprpQAkvnm9JflQB0XqVnywUftvjnadQ2kOWbWU/rL+zh1XKs6Pn+YtcuRkQ==}
- engines: {node: '>= 10'}
+ '@nx/nx-linux-x64-musl@22.5.0':
+ resolution: {integrity: sha512-Lcj/61BpsT85Qhm3hNTwQFrqGtsjLC+y4Kk21dh22d1/E5pOdVAwPXBuWrSPNo4lX+ESNoKmwxWjfgW3uoB05g==}
cpu: [x64]
os: [linux]
- '@nx/nx-win32-arm64-msvc@20.4.5':
- resolution: {integrity: sha512-qf+9goWiUwQAtZwpW6A5x0uJYAJfbbIaT8kVnfT/feDN/Z0rZJ93KJW0QmKPGb41LALcUipVYiUC8PU/8BAmCQ==}
- engines: {node: '>= 10'}
+ '@nx/nx-win32-arm64-msvc@22.5.0':
+ resolution: {integrity: sha512-0DlnBDLvqNtseCyBBoBst0gwux+N91RBc4E41JDDcLcWpfntcwCQM39D6lA5qdma/0L7U0PUM7MYV9Q6igJMkQ==}
cpu: [arm64]
os: [win32]
- '@nx/nx-win32-x64-msvc@20.4.5':
- resolution: {integrity: sha512-6N6PEcQuQ0KPv0swYDRpoLMI28tRIJKL5LWlD35OrQnWlhv+hEYJzk5YNNUl0kSWhcZQxoo0t5J8wMHgmlc8og==}
- engines: {node: '>= 10'}
+ '@nx/nx-win32-x64-msvc@22.5.0':
+ resolution: {integrity: sha512-kMMsU4PxKQ76NvmPFKT0/RlzRTiuUfuNWVJUmsWF1onVcBkXgQNKkmLcSJk3wGwML5/tHChjtlI7Hpo705Uv/g==}
cpu: [x64]
os: [win32]
- '@nx/workspace@20.4.5':
- resolution: {integrity: sha512-tVfqmqdfBpwmrD/ljiizoBKYX77oZTVjtyO4OIPsFAl6E77RSAc68DX7q8lYKP080d04CdsnPpZ27qA+u282bw==}
+ '@nx/workspace@22.5.0':
+ resolution: {integrity: sha512-kFXSMV7eGVBSJlfPtbIDrlUFYDspFpwHcsYFU+qwyg/b5R8lNfYKlSC0ypL2XyG4kwCMoTr4BDEaY5nYRWW3Lw==}
- '@one-ini/wasm@0.1.1':
- resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==}
+ '@opentelemetry/api-logs@0.208.0':
+ resolution: {integrity: sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg==}
+ engines: {node: '>=8.0.0'}
'@opentelemetry/api@1.9.0':
resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
engines: {node: '>=8.0.0'}
+ '@opentelemetry/core@2.2.0':
+ resolution: {integrity: sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
+ '@opentelemetry/core@2.5.0':
+ resolution: {integrity: sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
+ '@opentelemetry/exporter-logs-otlp-http@0.208.0':
+ resolution: {integrity: sha512-jOv40Bs9jy9bZVLo/i8FwUiuCvbjWDI+ZW13wimJm4LjnlwJxGgB+N/VWOZUTpM+ah/awXeQqKdNlpLf2EjvYg==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': ^1.3.0
+
+ '@opentelemetry/otlp-exporter-base@0.208.0':
+ resolution: {integrity: sha512-gMd39gIfVb2OgxldxUtOwGJYSH8P1kVFFlJLuut32L6KgUC4gl1dMhn+YC2mGn0bDOiQYSk/uHOdSjuKp58vvA==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': ^1.3.0
+
+ '@opentelemetry/otlp-transformer@0.208.0':
+ resolution: {integrity: sha512-DCFPY8C6lAQHUNkzcNT9R+qYExvsk6C5Bto2pbNxgicpcSWbe2WHShLxkOxIdNcBiYPdVHv/e7vH7K6TI+C+fQ==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': ^1.3.0
+
+ '@opentelemetry/resources@2.2.0':
+ resolution: {integrity: sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.3.0 <1.10.0'
+
+ '@opentelemetry/resources@2.5.0':
+ resolution: {integrity: sha512-F8W52ApePshpoSrfsSk1H2yJn9aKjCrbpQF1M9Qii0GHzbfVeFUB+rc3X4aggyZD8x9Gu3Slua+s6krmq6Dt8g==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.3.0 <1.10.0'
+
+ '@opentelemetry/sdk-logs@0.208.0':
+ resolution: {integrity: sha512-QlAyL1jRpOeaqx7/leG1vJMp84g0xKP6gJmfELBpnI4O/9xPX+Hu5m1POk9Kl+veNkyth5t19hRlN6tNY1sjbA==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.4.0 <1.10.0'
+
+ '@opentelemetry/sdk-metrics@2.2.0':
+ resolution: {integrity: sha512-G5KYP6+VJMZzpGipQw7Giif48h6SGQ2PFKEYCybeXJsOCB4fp8azqMAAzE5lnnHK3ZVwYQrgmFbsUJO/zOnwGw==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.9.0 <1.10.0'
+
+ '@opentelemetry/sdk-trace-base@2.2.0':
+ resolution: {integrity: sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.3.0 <1.10.0'
+
+ '@opentelemetry/semantic-conventions@1.39.0':
+ resolution: {integrity: sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==}
+ engines: {node: '>=14'}
+
+ '@paralleldrive/cuid2@2.3.1':
+ resolution: {integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==}
+
'@pinojs/redact@0.4.0':
resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==}
@@ -3380,11 +3134,54 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
- '@radix-ui/primitive@1.1.1':
- resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==}
+ '@pkgr/core@0.2.9':
+ resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
- '@radix-ui/react-arrow@1.1.2':
- resolution: {integrity: sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==}
+ '@posthog/core@1.22.0':
+ resolution: {integrity: sha512-WkmOnq95aAOu6yk6r5LWr5cfXsQdpVbWDCwOxQwxSne8YV6GuZET1ziO5toSQXgrgbdcjrSz2/GopAfiL6iiAA==}
+
+ '@posthog/types@1.345.5':
+ resolution: {integrity: sha512-nPQQ5QfVMmsKquXQkXfA8g1/2IrHO7npw8ezcC0v3xJaTpAKoqBqknqugP+RwTlIfkhCbHSGd6x00yRSwTGaBQ==}
+
+ '@protobufjs/aspromise@1.1.2':
+ resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
+
+ '@protobufjs/base64@1.1.2':
+ resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==}
+
+ '@protobufjs/codegen@2.0.4':
+ resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==}
+
+ '@protobufjs/eventemitter@1.1.0':
+ resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==}
+
+ '@protobufjs/fetch@1.1.0':
+ resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==}
+
+ '@protobufjs/float@1.0.2':
+ resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==}
+
+ '@protobufjs/inquire@1.1.0':
+ resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==}
+
+ '@protobufjs/path@1.1.2':
+ resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==}
+
+ '@protobufjs/pool@1.1.0':
+ resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==}
+
+ '@protobufjs/utf8@1.1.0':
+ resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==}
+
+ '@radix-ui/number@1.1.1':
+ resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==}
+
+ '@radix-ui/primitive@1.1.3':
+ resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==}
+
+ '@radix-ui/react-accessible-icon@1.1.7':
+ resolution: {integrity: sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -3396,8 +3193,8 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-collection@1.1.2':
- resolution: {integrity: sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==}
+ '@radix-ui/react-accordion@1.2.12':
+ resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -3409,35 +3206,8 @@ packages:
'@types/react-dom':
optional: true
- '@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.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.1.0':
- resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==}
- peerDependencies:
- '@types/react': '*'
- react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
- peerDependenciesMeta:
- '@types/react':
- optional: true
-
- '@radix-ui/react-dismissable-layer@1.1.5':
- resolution: {integrity: sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==}
+ '@radix-ui/react-alert-dialog@1.1.15':
+ resolution: {integrity: sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -3449,17 +3219,8 @@ packages:
'@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==}
+ '@radix-ui/react-arrow@1.1.7':
+ resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -3471,17 +3232,8 @@ packages:
'@types/react-dom':
optional: true
- '@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==}
+ '@radix-ui/react-aspect-ratio@1.1.7':
+ resolution: {integrity: sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -3493,8 +3245,8 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-popper@1.2.2':
- resolution: {integrity: sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==}
+ '@radix-ui/react-avatar@1.1.10':
+ resolution: {integrity: sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -3506,8 +3258,8 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-portal@1.1.4':
- resolution: {integrity: sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==}
+ '@radix-ui/react-checkbox@1.3.3':
+ resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -3519,8 +3271,8 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-presence@1.1.2':
- resolution: {integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==}
+ '@radix-ui/react-collapsible@1.1.12':
+ resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -3532,8 +3284,8 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-primitive@2.0.2':
- resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==}
+ '@radix-ui/react-collection@1.1.7':
+ resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -3545,8 +3297,17 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-roving-focus@1.1.2':
- resolution: {integrity: sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==}
+ '@radix-ui/react-compose-refs@1.1.2':
+ resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-context-menu@2.2.16':
+ resolution: {integrity: sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -3558,8 +3319,8 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-slot@1.1.2':
- resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==}
+ '@radix-ui/react-context@1.1.2':
+ resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -3567,8 +3328,8 @@ packages:
'@types/react':
optional: true
- '@radix-ui/react-tabs@1.1.3':
- resolution: {integrity: sha512-9mFyI30cuRDImbmFF6O2KUJdgEOsGh9Vmx9x/Dh9tOhL7BngmQPQfwW4aejKm5OHpfWIdmeV6ySyuxoOGjtNng==}
+ '@radix-ui/react-dialog@1.1.15':
+ resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -3580,8 +3341,8 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-use-callback-ref@1.1.0':
- resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==}
+ '@radix-ui/react-direction@1.1.1':
+ resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -3589,8 +3350,34 @@ packages:
'@types/react':
optional: true
- '@radix-ui/react-use-controllable-state@1.1.0':
- resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==}
+ '@radix-ui/react-dismissable-layer@1.1.11':
+ resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-dropdown-menu@2.1.16':
+ resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==}
+ peerDependencies:
+ '@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.3':
+ resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -3598,8 +3385,47 @@ packages:
'@types/react':
optional: true
- '@radix-ui/react-use-escape-keydown@1.1.0':
- resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==}
+ '@radix-ui/react-focus-scope@1.1.7':
+ resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==}
+ 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-form@0.1.8':
+ resolution: {integrity: sha512-QM70k4Zwjttifr5a4sZFts9fn8FzHYvQ5PiB19O2HsYibaHSVt9fH9rzB0XZo/YcM+b7t/p7lYCT/F5eOeF5yQ==}
+ 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-hover-card@1.1.15':
+ resolution: {integrity: sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==}
+ 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.1.1':
+ resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -3607,8 +3433,242 @@ packages:
'@types/react':
optional: true
- '@radix-ui/react-use-layout-effect@1.1.0':
- resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==}
+ '@radix-ui/react-label@2.1.7':
+ resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==}
+ 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-menu@2.1.16':
+ resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==}
+ 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-menubar@1.1.16':
+ resolution: {integrity: sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==}
+ 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-navigation-menu@1.2.14':
+ resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==}
+ 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-one-time-password-field@0.1.8':
+ resolution: {integrity: sha512-ycS4rbwURavDPVjCb5iS3aG4lURFDILi6sKI/WITUMZ13gMmn/xGjpLoqBAalhJaDk8I3UbCM5GzKHrnzwHbvg==}
+ 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-password-toggle-field@0.1.3':
+ resolution: {integrity: sha512-/UuCrDBWravcaMix4TdT+qlNdVwOM1Nck9kWx/vafXsdfj1ChfhOdfi3cy9SGBpWgTXwYCuboT/oYpJy3clqfw==}
+ 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-popover@1.1.15':
+ resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-popper@1.2.8':
+ resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-portal@1.1.9':
+ resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-presence@1.1.5':
+ resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-primitive@2.1.3':
+ resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==}
+ peerDependencies:
+ '@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-progress@1.1.7':
+ resolution: {integrity: sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==}
+ 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-radio-group@1.3.8':
+ resolution: {integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==}
+ 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.1.11':
+ resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==}
+ 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-scroll-area@1.2.10':
+ resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==}
+ 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-select@2.2.6':
+ resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==}
+ 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-separator@1.1.7':
+ resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==}
+ 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-slider@1.3.6':
+ resolution: {integrity: sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==}
+ 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-slot@1.2.3':
+ resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -3616,8 +3676,99 @@ packages:
'@types/react':
optional: true
- '@radix-ui/react-use-rect@1.1.0':
- resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==}
+ '@radix-ui/react-switch@1.2.6':
+ resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==}
+ 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-tabs@1.1.13':
+ resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==}
+ 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-toast@1.2.15':
+ resolution: {integrity: sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==}
+ 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-toggle-group@1.1.11':
+ resolution: {integrity: sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==}
+ 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-toggle@1.1.10':
+ resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==}
+ 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-toolbar@1.1.11':
+ resolution: {integrity: sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==}
+ 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-tooltip@1.2.8':
+ resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==}
+ 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-use-callback-ref@1.1.1':
+ resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -3625,8 +3776,8 @@ packages:
'@types/react':
optional: true
- '@radix-ui/react-use-size@1.1.0':
- resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==}
+ '@radix-ui/react-use-controllable-state@1.2.2':
+ resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -3634,8 +3785,84 @@ packages:
'@types/react':
optional: true
- '@radix-ui/rect@1.1.0':
- resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==}
+ '@radix-ui/react-use-effect-event@0.0.2':
+ resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-escape-keydown@1.1.1':
+ resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-is-hydrated@0.1.0':
+ resolution: {integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==}
+ 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.1.1':
+ resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-previous@1.1.1':
+ resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==}
+ peerDependencies:
+ '@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.1':
+ resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-size@1.1.1':
+ resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-visually-hidden@1.2.3':
+ resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==}
+ peerDependencies:
+ '@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/rect@1.1.1':
+ resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
'@react-dnd/asap@4.0.1':
resolution: {integrity: sha512-kLy0PJDDwvwwTXxqTFNAAllPHD73AycE9ypWeln/IguoGBEbvFcPDbCV03G52bEcC5E+YgupBE0VzHGdC8SIXg==}
@@ -3646,128 +3873,162 @@ packages:
'@react-dnd/shallowequal@2.0.0':
resolution: {integrity: sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg==}
- '@react-email/body@0.0.10':
- resolution: {integrity: sha512-dMJyL9aU25ieatdPtVjCyQ/WHZYHwNc+Hy/XpF8Cc18gu21cUynVEeYQzFSeigDRMeBQ3PGAyjVDPIob7YlGwA==}
+ '@react-email/body@0.2.1':
+ resolution: {integrity: sha512-ljDiQiJDu/Fq//vSIIP0z5Nuvt4+DX1RqGasstChDGJB/14ogd4VdNS9aacoede/ZjGy3o3Qb+cxyS+XgM6SwQ==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/button@0.0.18':
- resolution: {integrity: sha512-uNUnpeDzz1o9HAky47JSTsUN/Ih0A3Az165AAOgAy8XOVzQJPrltUBRzHkScSVJTwRqKLASkie1yZbtNGIcRdA==}
- engines: {node: '>=18.0.0'}
+ '@react-email/button@0.2.1':
+ resolution: {integrity: sha512-qXyj7RZLE7POy9BMKSoqQ00tOXThjOZSUnI2Yu9i29IHngPlmrNayIWBoVKtElES7OWwypUcpiajwi1mUWx6/A==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/code-block@0.0.10':
- resolution: {integrity: sha512-xx4m5Ir1cSFbz1bhyZfETUW34iQg+WRLTItW7Qv2arnFr6Ec0u8AWi4lUUqkpmbXzeuY8U8lV+2awDerwRpW6g==}
- engines: {node: '>=18.0.0'}
+ '@react-email/code-block@0.2.1':
+ resolution: {integrity: sha512-M3B7JpVH4ytgn83/ujRR1k1DQHvTeABiDM61OvAbjLRPhC/5KLHU5KkzIbbuGIrjWwxAbL1kSQzU8MhLEtSxyw==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/code-inline@0.0.4':
- resolution: {integrity: sha512-zj3oMQiiUCZbddSNt3k0zNfIBFK0ZNDIzzDyBaJKy6ZASTtWfB+1WFX0cpTX8q0gUiYK+A94rk5Qp68L6YXjXQ==}
- engines: {node: '>=18.0.0'}
+ '@react-email/code-inline@0.0.6':
+ resolution: {integrity: sha512-jfhebvv3dVsp3OdPgKXnk8+e2pBiDVZejDOBFzBa/IblrAJ9cQDkN6rBD5IyEg8hTOxwbw3iaI/yZFmDmIguIA==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/column@0.0.12':
- resolution: {integrity: sha512-Rsl7iSdDaeHZO938xb+0wR5ud0Z3MVfdtPbNKJNojZi2hApwLAQXmDrnn/AcPDM5Lpl331ZljJS8vHTWxxkvKw==}
- engines: {node: '>=18.0.0'}
+ '@react-email/column@0.0.14':
+ resolution: {integrity: sha512-f+W+Bk2AjNO77zynE33rHuQhyqVICx4RYtGX9NKsGUg0wWjdGP0qAuIkhx9Rnmk4/hFMo1fUrtYNqca9fwJdHg==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/components@0.0.28':
- resolution: {integrity: sha512-90ayLWy1g2uqlZVcwonfq1oKUlAnQBUJ4iUnGXg0UuBPAeoqxSG1BFrVDmLSX0u5MG/wtmFPFPxhq+v8roq+sA==}
- engines: {node: '>=18.0.0'}
+ '@react-email/components@1.0.7':
+ resolution: {integrity: sha512-mY+v4C1SMaGOKuKp0QWDQLGK+3fvH06ZE10EVavv+T6tQneDHq9cpQ9NdCrvuO1nWZnWrA/0tRpvyqyF0uo93w==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/container@0.0.14':
- resolution: {integrity: sha512-NgoaJJd9tTtsrveL86Ocr/AYLkGyN3prdXKd/zm5fQpfDhy/NXezyT3iF6VlwAOEUIu64ErHpAJd+P6ygR+vjg==}
- engines: {node: '>=18.0.0'}
+ '@react-email/container@0.0.16':
+ resolution: {integrity: sha512-QWBB56RkkU0AJ9h+qy33gfT5iuZknPC7Un/IjZv9B0QmMIK+WWacc0cH6y2SV5Cv/b99hU94fjEMOOO4enpkbQ==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/font@0.0.8':
- resolution: {integrity: sha512-fSBEqYyVPAyyACBBHcs3wEYzNknpHMuwcSAAKE8fOoDfGqURr/vSxKPdh4tOa9z7G4hlcEfgGrCYEa2iPT22cw==}
+ '@react-email/font@0.0.10':
+ resolution: {integrity: sha512-0urVSgCmQIfx5r7Xc586miBnQUVnGp3OTYUm8m5pwtQRdTRO5XrTtEfNJ3JhYhSOruV0nD8fd+dXtKXobum6tA==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/head@0.0.11':
- resolution: {integrity: sha512-skw5FUgyamIMK+LN+fZQ5WIKQYf0dPiRAvsUAUR2eYoZp9oRsfkIpFHr0GWPkKAYjFEj+uJjaxQ/0VzQH7svVg==}
- engines: {node: '>=18.0.0'}
+ '@react-email/head@0.0.13':
+ resolution: {integrity: sha512-AJg6le/08Gz4tm+6MtKXqtNNyKHzmooOCdmtqmWxD7FxoAdU1eVcizhtQ0gcnVaY6ethEyE/hnEzQxt1zu5Kog==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/heading@0.0.14':
- resolution: {integrity: sha512-jZM7IVuZOXa0G110ES8OkxajPTypIKlzlO1K1RIe1auk76ukQRiCg1IRV4HZlWk1GGUbec5hNxsvZa2kU8cb9w==}
- engines: {node: '>=18.0.0'}
+ '@react-email/heading@0.0.16':
+ resolution: {integrity: sha512-jmsKnQm1ykpBzw4hCYHwBkt5pW2jScXffPeEH5ZRF5tZeF5b1pvlFTO9han7C0pCkZYo1kEvWiRtx69yfCIwuw==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/hr@0.0.10':
- resolution: {integrity: sha512-3AA4Yjgl3zEid/KVx6uf6TuLJHVZvUc2cG9Wm9ZpWeAX4ODA+8g9HyuC0tfnjbRsVMhMcCGiECuWWXINi+60vA==}
- engines: {node: '>=18.0.0'}
+ '@react-email/hr@0.0.12':
+ resolution: {integrity: sha512-TwmOmBDibavUQpXBxpmZYi2Iks/yeZOzFYh+di9EltMSnEabH8dMZXrl+pxNXzCgZ2XE8HY7VmUL65Lenfu5PA==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/html@0.0.10':
- resolution: {integrity: sha512-06uiuSKJBWQJfhCKv4MPupELei4Lepyz9Sth7Yq7Fq29CAeB1ejLgKkGqn1I+FZ72hQxPLdYF4iq4yloKv3JCg==}
- engines: {node: '>=18.0.0'}
+ '@react-email/html@0.0.12':
+ resolution: {integrity: sha512-KTShZesan+UsreU7PDUV90afrZwU5TLwYlALuCSU0OT+/U8lULNNbAUekg+tGwCnOfIKYtpDPKkAMRdYlqUznw==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/img@0.0.10':
- resolution: {integrity: sha512-pJ8glJjDNaJ53qoM95pvX9SK05yh0bNQY/oyBKmxlBDdUII6ixuMc3SCwYXPMl+tgkQUyDgwEBpSTrLAnjL3hA==}
- engines: {node: '>=18.0.0'}
+ '@react-email/img@0.0.12':
+ resolution: {integrity: sha512-sRCpEARNVTf3FQhZOC+JTvu5r6ubiYWkT0ucYXg8ctkyi4G8QG+jgYPiNUqVeTLA2STOfmPM/nrk1nb84y6CPQ==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/link@0.0.11':
- resolution: {integrity: sha512-o1/BgPn2Fi+bN4Nh+P64t4tulaOyPhkBNSpNmiYL1Ar+ilw8q0BmUAqM+lvHy8Qr/4K7BjkgFoc4GoYkoEjOig==}
- engines: {node: '>=18.0.0'}
+ '@react-email/link@0.0.13':
+ resolution: {integrity: sha512-lkWc/NjOcefRZMkQoSDDbuKBEBDES9aXnFEOuPH845wD3TxPwh+QTf0fStuzjoRLUZWpHnio4z7qGGRYusn/sw==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/markdown@0.0.12':
- resolution: {integrity: sha512-wsuvj1XAb6O63aizCLNEeqVgKR3oFjAwt9vjfg2y2oh4G1dZeo8zonZM2x1fmkEkBZhzwSHraNi70jSXhA3A9w==}
- engines: {node: '>=18.0.0'}
+ '@react-email/markdown@0.0.18':
+ resolution: {integrity: sha512-gSuYK5fsMbGk87jDebqQ6fa2fKcWlkf2Dkva8kMONqLgGCq8/0d+ZQYMEJsdidIeBo3kmsnHZPrwdFB4HgjUXg==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/preview@0.0.11':
- resolution: {integrity: sha512-7O/CT4b16YlSGrj18htTPx3Vbhu2suCGv/cSe5c+fuSrIM/nMiBSZ3Js16Vj0XJbAmmmlVmYFZw9L20wXJ+LjQ==}
- engines: {node: '>=18.0.0'}
+ '@react-email/preview@0.0.14':
+ resolution: {integrity: sha512-aYK8q0IPkBXyMsbpMXgxazwHxYJxTrXrV95GFuu2HbEiIToMwSyUgb8HDFYwPqqfV03/jbwqlsXmFxsOd+VNaw==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/render@1.0.2':
- resolution: {integrity: sha512-q82eBd39TepzA/xjlm8szqJlrQk/gh7mgtxXMGlJ4dcdx89go1m9YBDpZY98SFy+2r2KAOd5A1mxvUbsPwoATg==}
- engines: {node: '>=18.0.0'}
+ '@react-email/render@2.0.4':
+ resolution: {integrity: sha512-kht2oTFQ1SwrLpd882ahTvUtNa9s53CERHstiTbzhm6aR2Hbykp/mQ4tpPvsBGkKAEvKRlDEoooh60Uk6nHK1g==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
react-dom: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/row@0.0.11':
- resolution: {integrity: sha512-ra09h7BMoGa14ds3vh7KVuj1N3astTstEC1YbMdCiHcx/nxylglNaT7qJXU74ZTzyHiGabyiNuyabTS+HLoMCA==}
- engines: {node: '>=18.0.0'}
+ '@react-email/row@0.0.13':
+ resolution: {integrity: sha512-bYnOac40vIKCId7IkwuLAAsa3fKfSfqCvv6epJKmPE0JBuu5qI4FHFCl9o9dVpIIS08s/ub+Y/txoMt0dYziGw==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/section@0.0.15':
- resolution: {integrity: sha512-xfM3Qy5eU7fbkwvktlTeQgad7uo+1Z7YVh1aowSZaRBvKbkEXgoH/XssRYQmQL8ZrZGXbEJMujwtf4fsQL6vrg==}
- engines: {node: '>=18.0.0'}
+ '@react-email/section@0.0.17':
+ resolution: {integrity: sha512-qNl65ye3W0Rd5udhdORzTV9ezjb+GFqQQSae03NDzXtmJq6sqVXNWNiVolAjvJNypim+zGXmv6J9TcV5aNtE/w==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/tailwind@1.0.2':
- resolution: {integrity: sha512-P106AouxGQCCvapE5/HJT5rmNma+UJwG3A0MF6+4me7Usf+VNyJ5Jk0eSdsZ1zEfY3AbUSs+F7ql3oWztCg9nw==}
- engines: {node: '>=18.0.0'}
+ '@react-email/tailwind@2.0.4':
+ resolution: {integrity: sha512-cDp8Ss6LJKI8zBLKE+tsXFurn6I2nnQNg1qqjfZuNPNoToN1Uyx3egW0bwSVk1JjrNWx/Xnme7ZxvNLRrU9K0Q==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
+ '@react-email/body': 0.2.1
+ '@react-email/button': 0.2.1
+ '@react-email/code-block': 0.2.1
+ '@react-email/code-inline': 0.0.6
+ '@react-email/container': 0.0.16
+ '@react-email/heading': 0.0.16
+ '@react-email/hr': 0.0.12
+ '@react-email/img': 0.0.12
+ '@react-email/link': 0.0.13
+ '@react-email/preview': 0.0.14
+ '@react-email/text': 0.1.6
react: ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@react-email/body':
+ optional: true
+ '@react-email/button':
+ optional: true
+ '@react-email/code-block':
+ optional: true
+ '@react-email/code-inline':
+ optional: true
+ '@react-email/container':
+ optional: true
+ '@react-email/heading':
+ optional: true
+ '@react-email/hr':
+ optional: true
+ '@react-email/img':
+ optional: true
+ '@react-email/link':
+ optional: true
+ '@react-email/preview':
+ optional: true
- '@react-email/text@0.0.10':
- resolution: {integrity: sha512-wNAnxeEAiFs6N+SxS0y6wTJWfewEzUETuyS2aZmT00xk50VijwyFRuhm4sYSjusMyshevomFwz5jNISCxRsGWw==}
- engines: {node: '>=18.0.0'}
+ '@react-email/text@0.1.6':
+ resolution: {integrity: sha512-TYqkioRS45wTR5il3dYk/SbUjjEdhSwh9BtRNB99qNH1pXAwA45H7rAuxehiu8iJQJH0IyIr+6n62gBz9ezmsw==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
@@ -3890,8 +4151,8 @@ packages:
'@selderee/plugin-htmlparser2@0.11.0':
resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==}
- '@sinclair/typebox@0.27.8':
- resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
+ '@sinclair/typebox@0.34.48':
+ resolution: {integrity: sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==}
'@sindresorhus/slugify@1.1.0':
resolution: {integrity: sha512-ujZRbmmizX26yS/HnB3P9QNlNa4+UvHh+rIse3RbOXLp8yl6n1TxB4t7NHggtVgS8QmmOtzXo48kCxZGACpkPw==}
@@ -3904,215 +4165,224 @@ packages:
'@sinonjs/commons@3.0.1':
resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
- '@sinonjs/fake-timers@10.3.0':
- resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
+ '@sinonjs/fake-timers@13.0.5':
+ resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==}
- '@smithy/abort-controller@3.1.9':
- resolution: {integrity: sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw==}
- engines: {node: '>=16.0.0'}
+ '@smithy/abort-controller@4.2.8':
+ resolution: {integrity: sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==}
+ engines: {node: '>=18.0.0'}
- '@smithy/chunked-blob-reader-native@3.0.1':
- resolution: {integrity: sha512-VEYtPvh5rs/xlyqpm5NRnfYLZn+q0SRPELbvBV+C/G7IQ+ouTuo+NKKa3ShG5OaFR8NYVMXls9hPYLTvIKKDrQ==}
+ '@smithy/chunked-blob-reader-native@4.2.1':
+ resolution: {integrity: sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==}
+ engines: {node: '>=18.0.0'}
- '@smithy/chunked-blob-reader@4.0.0':
- resolution: {integrity: sha512-jSqRnZvkT4egkq/7b6/QRCNXmmYVcHwnJldqJ3IhVpQE2atObVJ137xmGeuGFhjFUr8gCEVAOKwSY79OvpbDaQ==}
+ '@smithy/chunked-blob-reader@5.2.0':
+ resolution: {integrity: sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==}
+ engines: {node: '>=18.0.0'}
- '@smithy/config-resolver@3.0.13':
- resolution: {integrity: sha512-Gr/qwzyPaTL1tZcq8WQyHhTZREER5R1Wytmz4WnVGL4onA3dNk6Btll55c8Vr58pLdvWZmtG8oZxJTw3t3q7Jg==}
- engines: {node: '>=16.0.0'}
+ '@smithy/config-resolver@4.4.6':
+ resolution: {integrity: sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==}
+ engines: {node: '>=18.0.0'}
- '@smithy/core@2.5.7':
- resolution: {integrity: sha512-8olpW6mKCa0v+ibCjoCzgZHQx1SQmZuW/WkrdZo73wiTprTH6qhmskT60QLFdT9DRa5mXxjz89kQPZ7ZSsoqqg==}
- engines: {node: '>=16.0.0'}
+ '@smithy/core@3.22.1':
+ resolution: {integrity: sha512-x3ie6Crr58MWrm4viHqqy2Du2rHYZjwu8BekasrQx4ca+Y24dzVAwq3yErdqIbc2G3I0kLQA13PQ+/rde+u65g==}
+ engines: {node: '>=18.0.0'}
- '@smithy/credential-provider-imds@3.2.8':
- resolution: {integrity: sha512-ZCY2yD0BY+K9iMXkkbnjo+08T2h8/34oHd0Jmh6BZUSZwaaGlGCyBT/3wnS7u7Xl33/EEfN4B6nQr3Gx5bYxgw==}
- engines: {node: '>=16.0.0'}
+ '@smithy/credential-provider-imds@4.2.8':
+ resolution: {integrity: sha512-FNT0xHS1c/CPN8upqbMFP83+ul5YgdisfCfkZ86Jh2NSmnqw/AJ6x5pEogVCTVvSm7j9MopRU89bmDelxuDMYw==}
+ engines: {node: '>=18.0.0'}
- '@smithy/eventstream-codec@3.1.10':
- resolution: {integrity: sha512-323B8YckSbUH0nMIpXn7HZsAVKHYHFUODa8gG9cHo0ySvA1fr5iWaNT+iIL0UCqUzG6QPHA3BSsBtRQou4mMqQ==}
+ '@smithy/eventstream-codec@4.2.8':
+ resolution: {integrity: sha512-jS/O5Q14UsufqoGhov7dHLOPCzkYJl9QDzusI2Psh4wyYx/izhzvX9P4D69aTxcdfVhEPhjK+wYyn/PzLjKbbw==}
+ engines: {node: '>=18.0.0'}
- '@smithy/eventstream-serde-browser@3.0.14':
- resolution: {integrity: sha512-kbrt0vjOIihW3V7Cqj1SXQvAI5BR8SnyQYsandva0AOR307cXAc+IhPngxIPslxTLfxwDpNu0HzCAq6g42kCPg==}
- engines: {node: '>=16.0.0'}
+ '@smithy/eventstream-serde-browser@4.2.8':
+ resolution: {integrity: sha512-MTfQT/CRQz5g24ayXdjg53V0mhucZth4PESoA5IhvaWVDTOQLfo8qI9vzqHcPsdd2v6sqfTYqF5L/l+pea5Uyw==}
+ engines: {node: '>=18.0.0'}
- '@smithy/eventstream-serde-config-resolver@3.0.11':
- resolution: {integrity: sha512-P2pnEp4n75O+QHjyO7cbw/vsw5l93K/8EWyjNCAAybYwUmj3M+hjSQZ9P5TVdUgEG08ueMAP5R4FkuSkElZ5tQ==}
- engines: {node: '>=16.0.0'}
+ '@smithy/eventstream-serde-config-resolver@4.3.8':
+ resolution: {integrity: sha512-ah12+luBiDGzBruhu3efNy1IlbwSEdNiw8fOZksoKoWW1ZHvO/04MQsdnws/9Aj+5b0YXSSN2JXKy/ClIsW8MQ==}
+ engines: {node: '>=18.0.0'}
- '@smithy/eventstream-serde-node@3.0.13':
- resolution: {integrity: sha512-zqy/9iwbj8Wysmvi7Lq7XFLeDgjRpTbCfwBhJa8WbrylTAHiAu6oQTwdY7iu2lxigbc9YYr9vPv5SzYny5tCXQ==}
- engines: {node: '>=16.0.0'}
+ '@smithy/eventstream-serde-node@4.2.8':
+ resolution: {integrity: sha512-cYpCpp29z6EJHa5T9WL0KAlq3SOKUQkcgSoeRfRVwjGgSFl7Uh32eYGt7IDYCX20skiEdRffyDpvF2efEZPC0A==}
+ engines: {node: '>=18.0.0'}
- '@smithy/eventstream-serde-universal@3.0.13':
- resolution: {integrity: sha512-L1Ib66+gg9uTnqp/18Gz4MDpJPKRE44geOjOQ2SVc0eiaO5l255ADziATZgjQjqumC7yPtp1XnjHlF1srcwjKw==}
- engines: {node: '>=16.0.0'}
+ '@smithy/eventstream-serde-universal@4.2.8':
+ resolution: {integrity: sha512-iJ6YNJd0bntJYnX6s52NC4WFYcZeKrPUr1Kmmr5AwZcwCSzVpS7oavAmxMR7pMq7V+D1G4s9F5NJK0xwOsKAlQ==}
+ engines: {node: '>=18.0.0'}
- '@smithy/fetch-http-handler@4.1.3':
- resolution: {integrity: sha512-6SxNltSncI8s689nvnzZQc/dPXcpHQ34KUj6gR/HBroytKOd/isMG3gJF/zBE1TBmTT18TXyzhg3O3SOOqGEhA==}
+ '@smithy/fetch-http-handler@5.3.9':
+ resolution: {integrity: sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==}
+ engines: {node: '>=18.0.0'}
- '@smithy/hash-blob-browser@3.1.10':
- resolution: {integrity: sha512-elwslXOoNunmfS0fh55jHggyhccobFkexLYC1ZeZ1xP2BTSrcIBaHV2b4xUQOdctrSNOpMqOZH1r2XzWTEhyfA==}
+ '@smithy/hash-blob-browser@4.2.9':
+ resolution: {integrity: sha512-m80d/iicI7DlBDxyQP6Th7BW/ejDGiF0bgI754+tiwK0lgMkcaIBgvwwVc7OFbY4eUzpGtnig52MhPAEJ7iNYg==}
+ engines: {node: '>=18.0.0'}
- '@smithy/hash-node@3.0.11':
- resolution: {integrity: sha512-emP23rwYyZhQBvklqTtwetkQlqbNYirDiEEwXl2v0GYWMnCzxst7ZaRAnWuy28njp5kAH54lvkdG37MblZzaHA==}
- engines: {node: '>=16.0.0'}
+ '@smithy/hash-node@4.2.8':
+ resolution: {integrity: sha512-7ZIlPbmaDGxVoxErDZnuFG18WekhbA/g2/i97wGj+wUBeS6pcUeAym8u4BXh/75RXWhgIJhyC11hBzig6MljwA==}
+ engines: {node: '>=18.0.0'}
- '@smithy/hash-stream-node@3.1.10':
- resolution: {integrity: sha512-olomK/jZQ93OMayW1zfTHwcbwBdhcZOHsyWyiZ9h9IXvc1mCD/VuvzbLb3Gy/qNJwI4MANPLctTp2BucV2oU/Q==}
- engines: {node: '>=16.0.0'}
+ '@smithy/hash-stream-node@4.2.8':
+ resolution: {integrity: sha512-v0FLTXgHrTeheYZFGhR+ehX5qUm4IQsjAiL9qehad2cyjMWcN2QG6/4mSwbSgEQzI7jwfoXj7z4fxZUx/Mhj2w==}
+ engines: {node: '>=18.0.0'}
- '@smithy/invalid-dependency@3.0.11':
- resolution: {integrity: sha512-NuQmVPEJjUX6c+UELyVz8kUx8Q539EDeNwbRyu4IIF8MeV7hUtq1FB3SHVyki2u++5XLMFqngeMKk7ccspnNyQ==}
+ '@smithy/invalid-dependency@4.2.8':
+ resolution: {integrity: sha512-N9iozRybwAQ2dn9Fot9kI6/w9vos2oTXLhtK7ovGqwZjlOcxu6XhPlpLpC+INsxktqHinn5gS2DXDjDF2kG5sQ==}
+ engines: {node: '>=18.0.0'}
'@smithy/is-array-buffer@2.2.0':
resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==}
engines: {node: '>=14.0.0'}
- '@smithy/is-array-buffer@3.0.0':
- resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==}
- engines: {node: '>=16.0.0'}
-
- '@smithy/md5-js@3.0.11':
- resolution: {integrity: sha512-3NM0L3i2Zm4bbgG6Ymi9NBcxXhryi3uE8fIfHJZIOfZVxOkGdjdgjR9A06SFIZCfnEIWKXZdm6Yq5/aPXFFhsQ==}
-
- '@smithy/middleware-content-length@3.0.13':
- resolution: {integrity: sha512-zfMhzojhFpIX3P5ug7jxTjfUcIPcGjcQYzB9t+rv0g1TX7B0QdwONW+ATouaLoD7h7LOw/ZlXfkq4xJ/g2TrIw==}
- engines: {node: '>=16.0.0'}
-
- '@smithy/middleware-endpoint@3.2.8':
- resolution: {integrity: sha512-OEJZKVUEhMOqMs3ktrTWp7UvvluMJEvD5XgQwRePSbDg1VvBaL8pX8mwPltFn6wk1GySbcVwwyldL8S+iqnrEQ==}
- engines: {node: '>=16.0.0'}
-
- '@smithy/middleware-retry@3.0.34':
- resolution: {integrity: sha512-yVRr/AAtPZlUvwEkrq7S3x7Z8/xCd97m2hLDaqdz6ucP2RKHsBjEqaUA2ebNv2SsZoPEi+ZD0dZbOB1u37tGCA==}
- engines: {node: '>=16.0.0'}
-
- '@smithy/middleware-serde@3.0.11':
- resolution: {integrity: sha512-KzPAeySp/fOoQA82TpnwItvX8BBURecpx6ZMu75EZDkAcnPtO6vf7q4aH5QHs/F1s3/snQaSFbbUMcFFZ086Mw==}
- engines: {node: '>=16.0.0'}
-
- '@smithy/middleware-stack@3.0.11':
- resolution: {integrity: sha512-1HGo9a6/ikgOMrTrWL/WiN9N8GSVYpuRQO5kjstAq4CvV59bjqnh7TbdXGQ4vxLD3xlSjfBjq5t1SOELePsLnA==}
- engines: {node: '>=16.0.0'}
-
- '@smithy/node-config-provider@3.1.12':
- resolution: {integrity: sha512-O9LVEu5J/u/FuNlZs+L7Ikn3lz7VB9hb0GtPT9MQeiBmtK8RSY3ULmsZgXhe6VAlgTw0YO+paQx4p8xdbs43vQ==}
- engines: {node: '>=16.0.0'}
-
- '@smithy/node-http-handler@3.3.3':
- resolution: {integrity: sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ==}
- engines: {node: '>=16.0.0'}
-
- '@smithy/property-provider@3.1.11':
- resolution: {integrity: sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A==}
- engines: {node: '>=16.0.0'}
-
- '@smithy/protocol-http@4.1.8':
- resolution: {integrity: sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==}
- engines: {node: '>=16.0.0'}
-
- '@smithy/querystring-builder@3.0.11':
- resolution: {integrity: sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg==}
- engines: {node: '>=16.0.0'}
-
- '@smithy/querystring-parser@3.0.11':
- resolution: {integrity: sha512-Je3kFvCsFMnso1ilPwA7GtlbPaTixa3WwC+K21kmMZHsBEOZYQaqxcMqeFFoU7/slFjKDIpiiPydvdJm8Q/MCw==}
- engines: {node: '>=16.0.0'}
-
- '@smithy/service-error-classification@3.0.11':
- resolution: {integrity: sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog==}
- engines: {node: '>=16.0.0'}
-
- '@smithy/shared-ini-file-loader@3.1.12':
- resolution: {integrity: sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q==}
- engines: {node: '>=16.0.0'}
-
- '@smithy/signature-v4@4.2.4':
- resolution: {integrity: sha512-5JWeMQYg81TgU4cG+OexAWdvDTs5JDdbEZx+Qr1iPbvo91QFGzjy0IkXAKaXUHqmKUJgSHK0ZxnCkgZpzkeNTA==}
- engines: {node: '>=16.0.0'}
-
- '@smithy/smithy-client@3.7.0':
- resolution: {integrity: sha512-9wYrjAZFlqWhgVo3C4y/9kpc68jgiSsKUnsFPzr/MSiRL93+QRDafGTfhhKAb2wsr69Ru87WTiqSfQusSmWipA==}
- engines: {node: '>=16.0.0'}
-
- '@smithy/types@3.7.2':
- resolution: {integrity: sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==}
- engines: {node: '>=16.0.0'}
-
- '@smithy/types@4.3.0':
- resolution: {integrity: sha512-+1iaIQHthDh9yaLhRzaoQxRk+l9xlk+JjMFxGRhNLz+m9vKOkjNeU8QuB4w3xvzHyVR/BVlp/4AXDHjoRIkfgQ==}
+ '@smithy/is-array-buffer@4.2.0':
+ resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==}
engines: {node: '>=18.0.0'}
- '@smithy/url-parser@3.0.11':
- resolution: {integrity: sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw==}
+ '@smithy/md5-js@4.2.8':
+ resolution: {integrity: sha512-oGMaLj4tVZzLi3itBa9TCswgMBr7k9b+qKYowQ6x1rTyTuO1IU2YHdHUa+891OsOH+wCsH7aTPRsTJO3RMQmjQ==}
+ engines: {node: '>=18.0.0'}
- '@smithy/util-base64@3.0.0':
- resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==}
- engines: {node: '>=16.0.0'}
+ '@smithy/middleware-content-length@4.2.8':
+ resolution: {integrity: sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==}
+ engines: {node: '>=18.0.0'}
- '@smithy/util-body-length-browser@3.0.0':
- resolution: {integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==}
+ '@smithy/middleware-endpoint@4.4.13':
+ resolution: {integrity: sha512-x6vn0PjYmGdNuKh/juUJJewZh7MoQ46jYaJ2mvekF4EesMuFfrl4LaW/k97Zjf8PTCPQmPgMvwewg7eNoH9n5w==}
+ engines: {node: '>=18.0.0'}
- '@smithy/util-body-length-node@3.0.0':
- resolution: {integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==}
- engines: {node: '>=16.0.0'}
+ '@smithy/middleware-retry@4.4.30':
+ resolution: {integrity: sha512-CBGyFvN0f8hlnqKH/jckRDz78Snrp345+PVk8Ux7pnkUCW97Iinse59lY78hBt04h1GZ6hjBN94BRwZy1xC8Bg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-serde@4.2.9':
+ resolution: {integrity: sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-stack@4.2.8':
+ resolution: {integrity: sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/node-config-provider@4.3.8':
+ resolution: {integrity: sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/node-http-handler@4.4.9':
+ resolution: {integrity: sha512-KX5Wml5mF+luxm1szW4QDz32e3NObgJ4Fyw+irhph4I/2geXwUy4jkIMUs5ZPGflRBeR6BUkC2wqIab4Llgm3w==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/property-provider@4.2.8':
+ resolution: {integrity: sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/protocol-http@5.3.8':
+ resolution: {integrity: sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/querystring-builder@4.2.8':
+ resolution: {integrity: sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/querystring-parser@4.2.8':
+ resolution: {integrity: sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/service-error-classification@4.2.8':
+ resolution: {integrity: sha512-mZ5xddodpJhEt3RkCjbmUQuXUOaPNTkbMGR0bcS8FE0bJDLMZlhmpgrvPNCYglVw5rsYTpSnv19womw9WWXKQQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/shared-ini-file-loader@4.4.3':
+ resolution: {integrity: sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/signature-v4@5.3.8':
+ resolution: {integrity: sha512-6A4vdGj7qKNRF16UIcO8HhHjKW27thsxYci+5r/uVRkdcBEkOEiY8OMPuydLX4QHSrJqGHPJzPRwwVTqbLZJhg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/smithy-client@4.11.2':
+ resolution: {integrity: sha512-SCkGmFak/xC1n7hKRsUr6wOnBTJ3L22Qd4e8H1fQIuKTAjntwgU8lrdMe7uHdiT2mJAOWA/60qaW9tiMu69n1A==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/types@4.12.0':
+ resolution: {integrity: sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/url-parser@4.2.8':
+ resolution: {integrity: sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-base64@4.3.0':
+ resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-body-length-browser@4.2.0':
+ resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-body-length-node@4.2.1':
+ resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==}
+ engines: {node: '>=18.0.0'}
'@smithy/util-buffer-from@2.2.0':
resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==}
engines: {node: '>=14.0.0'}
- '@smithy/util-buffer-from@3.0.0':
- resolution: {integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==}
- engines: {node: '>=16.0.0'}
+ '@smithy/util-buffer-from@4.2.0':
+ resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==}
+ engines: {node: '>=18.0.0'}
- '@smithy/util-config-provider@3.0.0':
- resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==}
- engines: {node: '>=16.0.0'}
+ '@smithy/util-config-provider@4.2.0':
+ resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==}
+ engines: {node: '>=18.0.0'}
- '@smithy/util-defaults-mode-browser@3.0.34':
- resolution: {integrity: sha512-FumjjF631lR521cX+svMLBj3SwSDh9VdtyynTYDAiBDEf8YPP5xORNXKQ9j0105o5+ARAGnOOP/RqSl40uXddA==}
- engines: {node: '>= 10.0.0'}
+ '@smithy/util-defaults-mode-browser@4.3.29':
+ resolution: {integrity: sha512-nIGy3DNRmOjaYaaKcQDzmWsro9uxlaqUOhZDHQed9MW/GmkBZPtnU70Pu1+GT9IBmUXwRdDuiyaeiy9Xtpn3+Q==}
+ engines: {node: '>=18.0.0'}
- '@smithy/util-defaults-mode-node@3.0.34':
- resolution: {integrity: sha512-vN6aHfzW9dVVzkI0wcZoUXvfjkl4CSbM9nE//08lmUMyf00S75uuCpTrqF9uD4bD9eldIXlt53colrlwKAT8Gw==}
- engines: {node: '>= 10.0.0'}
+ '@smithy/util-defaults-mode-node@4.2.32':
+ resolution: {integrity: sha512-7dtFff6pu5fsjqrVve0YMhrnzJtccCWDacNKOkiZjJ++fmjGExmmSu341x+WU6Oc1IccL7lDuaUj7SfrHpWc5Q==}
+ engines: {node: '>=18.0.0'}
- '@smithy/util-endpoints@2.1.7':
- resolution: {integrity: sha512-tSfcqKcN/Oo2STEYCABVuKgJ76nyyr6skGl9t15hs+YaiU06sgMkN7QYjo0BbVw+KT26zok3IzbdSOksQ4YzVw==}
- engines: {node: '>=16.0.0'}
+ '@smithy/util-endpoints@3.2.8':
+ resolution: {integrity: sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw==}
+ engines: {node: '>=18.0.0'}
- '@smithy/util-hex-encoding@3.0.0':
- resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==}
- engines: {node: '>=16.0.0'}
+ '@smithy/util-hex-encoding@4.2.0':
+ resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==}
+ engines: {node: '>=18.0.0'}
- '@smithy/util-middleware@3.0.11':
- resolution: {integrity: sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow==}
- engines: {node: '>=16.0.0'}
+ '@smithy/util-middleware@4.2.8':
+ resolution: {integrity: sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==}
+ engines: {node: '>=18.0.0'}
- '@smithy/util-retry@3.0.11':
- resolution: {integrity: sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ==}
- engines: {node: '>=16.0.0'}
+ '@smithy/util-retry@4.2.8':
+ resolution: {integrity: sha512-CfJqwvoRY0kTGe5AkQokpURNCT1u/MkRzMTASWMPPo2hNSnKtF1D45dQl3DE2LKLr4m+PW9mCeBMJr5mCAVThg==}
+ engines: {node: '>=18.0.0'}
- '@smithy/util-stream@3.3.4':
- resolution: {integrity: sha512-SGhGBG/KupieJvJSZp/rfHHka8BFgj56eek9px4pp7lZbOF+fRiVr4U7A3y3zJD8uGhxq32C5D96HxsTC9BckQ==}
- engines: {node: '>=16.0.0'}
+ '@smithy/util-stream@4.5.11':
+ resolution: {integrity: sha512-lKmZ0S/3Qj2OF5H1+VzvDLb6kRxGzZHq6f3rAsoSu5cTLGsn3v3VQBA8czkNNXlLjoFEtVu3OQT2jEeOtOE2CA==}
+ engines: {node: '>=18.0.0'}
- '@smithy/util-uri-escape@3.0.0':
- resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==}
- engines: {node: '>=16.0.0'}
+ '@smithy/util-uri-escape@4.2.0':
+ resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==}
+ engines: {node: '>=18.0.0'}
'@smithy/util-utf8@2.3.0':
resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==}
engines: {node: '>=14.0.0'}
- '@smithy/util-utf8@3.0.0':
- resolution: {integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==}
- engines: {node: '>=16.0.0'}
+ '@smithy/util-utf8@4.2.0':
+ resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==}
+ engines: {node: '>=18.0.0'}
- '@smithy/util-waiter@3.2.0':
- resolution: {integrity: sha512-PpjSboaDUE6yl+1qlg3Si57++e84oXdWGbuFUSAciXsVfEZJJJupR2Nb0QuXHiunt2vGR+1PTizOMvnUPaG2Qg==}
- engines: {node: '>=16.0.0'}
+ '@smithy/util-waiter@4.2.8':
+ resolution: {integrity: sha512-n+lahlMWk+aejGuax7DPWtqav8HYnWxQwR+LCG2BgCUmaGcTe9qZCFsmw8TMg9iG75HOwhrJCX9TCJRLH+Yzqg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/uuid@1.1.0':
+ resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==}
+ engines: {node: '>=18.0.0'}
'@socket.io/component-emitter@3.1.0':
resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==}
@@ -4201,8 +4471,8 @@ packages:
'@swc/helpers@0.5.5':
resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==}
- '@swc/types@0.1.7':
- resolution: {integrity: sha512-scHWahbHF0eyj3JsxG9CFJgFdFNaVQCNAimBlT6PzS3n/HptxqREjsm4OH6AN3lYcffZYSPxXW8ua2BEHp0lJQ==}
+ '@swc/types@0.1.25':
+ resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==}
'@tabler/icons-react@3.36.1':
resolution: {integrity: sha512-/8nOXeNeMoze9xY/QyEKG65wuvRhkT3q9aytaur6Gj8bYU2A98YVJyLc9MRmc5nVvpy+bRlrrwK/Ykr8WGyUWg==}
@@ -4228,52 +4498,52 @@ packages:
'@tiptap/core@3.17.1':
resolution: {integrity: sha512-f8hB9MzXqsuXoF9qXEDEH5Fb3VgwhEFMBMfk9EKN88l5adri6oM8mt2XOWVxVVssjpEW0177zXSLPKWzoS/vrw==}
peerDependencies:
- '@tiptap/pm': ^3.17.1
+ '@tiptap/pm': 3.17.1
'@tiptap/extension-blockquote@3.17.1':
resolution: {integrity: sha512-X4jU/fllJQ8QbjCHUafU4QIHBobyXP3yGBoOcXxUaKlWbLvUs0SQTREM3n6/86m2YyAxwTPG1cn3Xypf42DMAQ==}
peerDependencies:
- '@tiptap/core': ^3.17.1
+ '@tiptap/core': 3.17.1
- '@tiptap/extension-bold@3.17.1':
- resolution: {integrity: sha512-PZmrljcVBziJkQDXT/QJv4ESxVVQ0iRH+ruTzPda56Kk4h2310cSXGjI33W7rlCikGPoBAAjY/inujm46YB4bw==}
+ '@tiptap/extension-bold@3.17.0':
+ resolution: {integrity: sha512-Tpf3o7qTMjM1B7NV6QXAjRdn64vbFCsFfwLF3Tt5tY2TxqcwDLktx11XPvbqdEloOeA8deJA26jKdh7Dc3ZBxA==}
peerDependencies:
- '@tiptap/core': ^3.17.1
+ '@tiptap/core': 3.17.1
'@tiptap/extension-bubble-menu@3.17.1':
resolution: {integrity: sha512-z3E8biLiWlzZJwNHnB6j/ZyBdFrJmpl1lqKHc72JqahUHZvidZHdCOYssvR3fc6IaI7MXV13XY1DXUdFbatnaw==}
peerDependencies:
- '@tiptap/core': ^3.17.1
- '@tiptap/pm': ^3.17.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
'@tiptap/extension-bullet-list@3.17.1':
resolution: {integrity: sha512-2zw17XHruOJQK7ntLVq0PmOLajFhvQ+U4/qTfJnV3VOsHkm+2GPAksFe7I7+X0XmSmDru0pcT339Yywx/6Aykw==}
peerDependencies:
- '@tiptap/extension-list': ^3.17.1
+ '@tiptap/extension-list': 3.17.1
'@tiptap/extension-code-block@3.17.1':
resolution: {integrity: sha512-h4i+Y/cN7nMi0Tmlp6V1w4dI7NTqrUFSr1W/vMqnq4vn+c6jvm35KubKU5ry/1qQp8KfndDA02BtVQiMx6DmpA==}
peerDependencies:
- '@tiptap/core': ^3.17.1
- '@tiptap/pm': ^3.17.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
'@tiptap/extension-code@3.17.1':
resolution: {integrity: sha512-4W0x1ZZqSnIVzQV0/b5VR0bktef2HykH5I/Czzir9yqoZ5zV2cLrMVuLvdFNgRIckU60tQLmHrfKWLF50OY0ew==}
peerDependencies:
- '@tiptap/core': ^3.17.1
+ '@tiptap/core': 3.17.1
'@tiptap/extension-collaboration-caret@3.17.1':
resolution: {integrity: sha512-tYzujG4ABacSbjd8QOqMt1IP3QdCmAEBHP2faF4SeFauaP6Nto88JvTiZVCHad0BBwiNrj4UPGZSujcNQiLjTA==}
peerDependencies:
- '@tiptap/core': ^3.17.1
- '@tiptap/pm': ^3.17.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
'@tiptap/y-tiptap': ^3.0.2
'@tiptap/extension-collaboration@3.17.1':
resolution: {integrity: sha512-4ehZ5LL7M3nFfcogCG7bWRHIR/8366i1vz5i0PaaoArJga2N5sXnWcuBGXG7ykC8owbgrfL3agFxjHlhTl4sNw==}
peerDependencies:
- '@tiptap/core': ^3.17.1
- '@tiptap/pm': ^3.17.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
'@tiptap/y-tiptap': ^3.0.2
yjs: ^13
@@ -4285,168 +4555,168 @@ packages:
'@tiptap/extension-document@3.17.1':
resolution: {integrity: sha512-F7Q5HoAU383HWFa6AXZQ5N6t6lTJzVjYM8z93XrtH/2GzDFwy1UmDSrsXqvgznedBLAOgCNVTNh9PjXpLoOUbg==}
peerDependencies:
- '@tiptap/core': ^3.17.1
+ '@tiptap/core': 3.17.1
- '@tiptap/extension-dropcursor@3.17.1':
- resolution: {integrity: sha512-EKJYPb7OSk3p9mX1SmHt4ccw89w1P1d55hC8aPtZJ6jxAUd5MSuVwvEEVz7LGldUZD9HZz9WFQ0Sv9U73Bpkmw==}
+ '@tiptap/extension-dropcursor@3.19.0':
+ resolution: {integrity: sha512-sf3dEZXiLvsGqVK2maUIzXY6qtYYCvBumag7+VPTMGQ0D4hiZ1X/4ukt4+6VXDg5R2WP1CoIt/QvUetUjWNhbQ==}
peerDependencies:
- '@tiptap/extensions': ^3.17.1
+ '@tiptap/extensions': ^3.19.0
- '@tiptap/extension-floating-menu@3.17.1':
- resolution: {integrity: sha512-zYkoYsxp+cZ8tBDODm4E8hnSaMTdDWKJuCQWY2Ep14oMPkAkSJr8sCLL1tOnNSAnhGwLJQtRLkZ41nvUEP6xKA==}
+ '@tiptap/extension-floating-menu@3.19.0':
+ resolution: {integrity: sha512-JaoEkVRkt+Slq3tySlIsxnMnCjS0L5n1CA1hctjLy0iah8edetj3XD5mVv5iKqDzE+LIjF4nwLRRVKJPc8hFBg==}
peerDependencies:
'@floating-ui/dom': ^1.0.0
- '@tiptap/core': ^3.17.1
- '@tiptap/pm': ^3.17.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
- '@tiptap/extension-gapcursor@3.17.1':
- resolution: {integrity: sha512-xItmJZTi+Z6UbLBhpBBL9RZDNbDXf+ntWVgblAmxtpyEyNh5k5tkM6IP9SJRhk92uVfnFpH9qkGo66a537I8QA==}
+ '@tiptap/extension-gapcursor@3.19.0':
+ resolution: {integrity: sha512-w7DACS4oSZaDWjz7gropZHPc9oXqC9yERZTcjWxyORuuIh1JFf0TRYspleK+OK28plK/IftojD/yUDn1MTRhvA==}
peerDependencies:
- '@tiptap/extensions': ^3.17.1
+ '@tiptap/extensions': ^3.19.0
- '@tiptap/extension-hard-break@3.17.1':
- resolution: {integrity: sha512-28FZPUho1Q2AB3ka5SVEVib5f9dMKbE1kewLZeRIOQ5FuFNholGIPL5X1tKcwGW7G3A7Y0fGxeNmIZJ3hrqhzA==}
+ '@tiptap/extension-hard-break@3.19.0':
+ resolution: {integrity: sha512-lAmQraYhPS5hafvCl74xDB5+bLuNwBKIEsVoim35I0sDJj5nTrfhaZgMJ91VamMvT+6FF5f1dvBlxBxAWa8jew==}
peerDependencies:
- '@tiptap/core': ^3.17.1
+ '@tiptap/core': 3.17.1
'@tiptap/extension-heading@3.17.1':
resolution: {integrity: sha512-rT+Su/YnHdlikg8f78t6RXlc1sVSfp7B0fdJdtFgS2e6BBYJQoDMp5L9nt54RR9Yy953aDW2sko7NArUCb8log==}
peerDependencies:
- '@tiptap/core': ^3.17.1
+ '@tiptap/core': 3.17.1
'@tiptap/extension-highlight@3.17.1':
resolution: {integrity: sha512-I4EdBhPVzJd4ECMI9kP0NE4aG4Numd46jy/AqeZyf3dqVgCxRyAbSyU7oy4aXUnsojYODrKKG6+djm07KgOGoQ==}
peerDependencies:
- '@tiptap/core': ^3.17.1
+ '@tiptap/core': 3.17.1
'@tiptap/extension-history@3.17.1':
resolution: {integrity: sha512-YHW4HP9ovZ/zqc1u3+cDdAY/LITaMQNRnX5foLsDFLV5FU+zqonYo2CqDkVwaQs9UfCp9PM0ehZzxMI8hc58oA==}
peerDependencies:
'@tiptap/extensions': ^3.17.1
- '@tiptap/extension-horizontal-rule@3.17.1':
- resolution: {integrity: sha512-CHG6LBtxV+3qj5EcCRVlpvSW5udKD6KbnXIGhP+Tvy+OabLGzO4HNxz3+duDE0pMR4eKX1libsnqffj0vq7mnQ==}
+ '@tiptap/extension-horizontal-rule@3.19.0':
+ resolution: {integrity: sha512-iqUHmgMGhMgYGwG6L/4JdelVQ5Mstb4qHcgTGd/4dkcUOepILvhdxajPle7OEdf9sRgjQO6uoAU5BVZVC26+ng==}
peerDependencies:
- '@tiptap/core': ^3.17.1
- '@tiptap/pm': ^3.17.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
'@tiptap/extension-image@3.17.1':
resolution: {integrity: sha512-VbSSZ//5qijm8F0lQQ6K+DGnZgjLKYQY2c+O56QNEoN8BaCFrJlsVgF1ttrSRUmoG4XBNIMlAS07kZXvMZQr0g==}
peerDependencies:
- '@tiptap/core': ^3.17.1
+ '@tiptap/core': 3.17.1
- '@tiptap/extension-italic@3.17.1':
- resolution: {integrity: sha512-unfRLmvf680Y0UkBToUcrDkSEKO/wAjd3nQ7CNPMfAc8m+ZMReXkcgLpeVvnDEiHNsJ0PlYSW7a45tnQD9HQdg==}
+ '@tiptap/extension-italic@3.19.0':
+ resolution: {integrity: sha512-6GffxOnS/tWyCbDkirWNZITiXRta9wrCmrfa4rh+v32wfaOL1RRQNyqo9qN6Wjyl1R42Js+yXTzTTzZsOaLMYA==}
peerDependencies:
- '@tiptap/core': ^3.17.1
+ '@tiptap/core': 3.17.1
'@tiptap/extension-link@3.17.1':
resolution: {integrity: sha512-5kdN7vms5hMXtjiophUkgvzy8dNGvGSmol1Sawh30TEPrgXc93Ayj7YyGZlbimInKZcD8q+Od/FFc+wkrof3nA==}
peerDependencies:
- '@tiptap/core': ^3.17.1
- '@tiptap/pm': ^3.17.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
- '@tiptap/extension-list-item@3.17.1':
- resolution: {integrity: sha512-Qjj4oIa44cTX0E6aw/4+wleqX21t5jMDxeSqP5uQ8Q3IdD1GoR5+yo+41XAHELaeZOXLHLkAIbzIxik3pOqO8w==}
+ '@tiptap/extension-list-item@3.19.0':
+ resolution: {integrity: sha512-VsSKuJz4/Tb6ZmFkXqWpDYkRzmaLTyE6dNSEpNmUpmZ32sMqo58mt11/huADNwfBFB0Ve7siH/VnFNIJYY3xvg==}
peerDependencies:
- '@tiptap/extension-list': ^3.17.1
+ '@tiptap/extension-list': 3.17.1
- '@tiptap/extension-list-keymap@3.17.1':
- resolution: {integrity: sha512-zRidxbkJNe/j3nZpOGLnPeVdyciUM8MM+NHhxcjVKoNDA+/zEBfjXJ1dKC4UBsnSr4AS/3SCWBYHGXOoSqdUaA==}
+ '@tiptap/extension-list-keymap@3.19.0':
+ resolution: {integrity: sha512-bxgmAgA3RzBGA0GyTwS2CC1c+QjkJJq9hC+S6PSOWELGRiTbwDN3MANksFXLjntkTa0N5fOnL27vBHtMStURqw==}
peerDependencies:
- '@tiptap/extension-list': ^3.17.1
+ '@tiptap/extension-list': 3.17.1
'@tiptap/extension-list@3.17.1':
resolution: {integrity: sha512-LHKIxmXe5Me+vJZKhiwMBGHlApaBIAduNMRUpm5mkY7ER/m96zKR0VqrJd4LjVVH2iDvck5h1Ka4396MHWlKNg==}
peerDependencies:
- '@tiptap/core': ^3.17.1
- '@tiptap/pm': ^3.17.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
- '@tiptap/extension-ordered-list@3.17.1':
- resolution: {integrity: sha512-pahAXbVajqX0Y51Zge9jKZlCtPV1oiq5Fbzs7gHF80KICIKf44i/AsUvfdJyT2N5/8kZrAMQHEiU/UgTMrhM3w==}
+ '@tiptap/extension-ordered-list@3.19.0':
+ resolution: {integrity: sha512-cxGsINquwHYE1kmhAcLNLHAofmoDEG6jbesR5ybl7tU5JwtKVO7S/xZatll2DU1dsDAXWPWEeeMl4e/9svYjCg==}
peerDependencies:
- '@tiptap/extension-list': ^3.17.1
+ '@tiptap/extension-list': 3.17.1
- '@tiptap/extension-paragraph@3.17.1':
- resolution: {integrity: sha512-Vl+xAlINaPtX8XTPvPmeveYMEIMLs8gA7ItcKpyyo4cCzAfVCY3DKuWzOkQGUf7DKrhyJQZhpgLNMaq+h5sTSw==}
+ '@tiptap/extension-paragraph@3.19.0':
+ resolution: {integrity: sha512-xWa6gj82l5+AzdYyrSk9P4ynySaDzg/SlR1FarXE5yPXibYzpS95IWaVR0m2Qaz7Rrk+IiYOTGxGRxcHLOelNg==}
peerDependencies:
- '@tiptap/core': ^3.17.1
+ '@tiptap/core': 3.17.1
'@tiptap/extension-placeholder@3.17.1':
resolution: {integrity: sha512-cE8Rij5/1t4KnWE7GaDewhBek9DKNB+97yrxyggMegILg6v195hOmOkRZkyfnFMYZoBDlrfSAtX9wBvbZBqIsg==}
peerDependencies:
'@tiptap/extensions': ^3.17.1
- '@tiptap/extension-strike@3.17.1':
- resolution: {integrity: sha512-c6fS6YIhxoU55etlJgM0Xqker+jn7I1KC7GVu6ljmda8I00K3/lOLZgvFUNPmgp8EJWtyTctj+3D3D+PaZaFAA==}
+ '@tiptap/extension-strike@3.19.0':
+ resolution: {integrity: sha512-xYpabHsv7PccLUBQaP8AYiFCnYbx6P93RHPd0lgNwhdOjYFd931Zy38RyoxPHAgbYVmhf1iyx7lpuLtBnhS5dA==}
peerDependencies:
- '@tiptap/core': ^3.17.1
+ '@tiptap/core': 3.17.1
'@tiptap/extension-subscript@3.17.1':
resolution: {integrity: sha512-+y/sl1d+TcecX2n1r6ZTjBmY3D6cfqAW86iKsvudCFSpp9SQk85RaumPzELOXWOjz9g0mtfUnXifrLYF3dS+vA==}
peerDependencies:
- '@tiptap/core': ^3.17.1
- '@tiptap/pm': ^3.17.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
'@tiptap/extension-superscript@3.17.1':
resolution: {integrity: sha512-FKt+lI1ocFRW0EFla9EuO71aLQINpkC/wt9zxWnJJnfPIWfxYlsTSFJLjLkVungTmwfeCnoCVcXnZ0dSKDnoGg==}
peerDependencies:
- '@tiptap/core': ^3.17.1
- '@tiptap/pm': ^3.17.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
'@tiptap/extension-table@3.17.1':
resolution: {integrity: sha512-FuAMdmM330tHJUYT5IV2ooFRqtXf+0D8llcE9nIQQCXKL4J0pfGSOIm40LVpunYgx2pV8SSCL51qTBuEmR84tQ==}
peerDependencies:
- '@tiptap/core': ^3.17.1
- '@tiptap/pm': ^3.17.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
'@tiptap/extension-text-align@3.17.1':
resolution: {integrity: sha512-CyJbZf823dqPZ/1zwRsza5pk/NQwFZwILdFYLVkV88I4+Ua9YVztI9kmwTB6dJyuKT4kTc7nhQHdaa957alGZQ==}
peerDependencies:
- '@tiptap/core': ^3.17.1
+ '@tiptap/core': 3.17.1
'@tiptap/extension-text-style@3.17.1':
resolution: {integrity: sha512-TCMsEU92r/TfZkN8AKo/WIcJ1uNq/5NiZxloq5drF1HXxDDjwliurgwBw3OTGUlKQmer0N9hV0AAePY/G+5Akw==}
peerDependencies:
- '@tiptap/core': ^3.17.1
+ '@tiptap/core': 3.17.1
'@tiptap/extension-text@3.17.1':
resolution: {integrity: sha512-rGml96vokQbvPB+w6L3+WKyYJWwqELaLdFUr1WMgg+py5uNYGJYAExYNAbDb5biWJBrX9GgMlCaNeiJj849L1w==}
peerDependencies:
- '@tiptap/core': ^3.17.1
+ '@tiptap/core': 3.17.1
'@tiptap/extension-typography@3.17.1':
resolution: {integrity: sha512-bEocTrK/gryk3VtthC9Ca03p2kutVIIFnDkVW6iOG8PgQWEspuQRgqE8yPnHxY8pBBDWxiaBzcGTSrp+3U9d5A==}
peerDependencies:
- '@tiptap/core': ^3.17.1
+ '@tiptap/core': 3.17.1
- '@tiptap/extension-underline@3.17.1':
- resolution: {integrity: sha512-6RdBzmkg6DYs0EqPyoqLGkISXzCnPqM/q3A6nh3EmFmORcIDfuNmcidvA6EImebK8KQGmtZKsRhQSnK4CNQ39g==}
+ '@tiptap/extension-underline@3.19.0':
+ resolution: {integrity: sha512-800MGEWfG49j10wQzAFiW/ele1HT04MamcL8iyuPNu7ZbjbGN2yknvdrJlRy7hZlzIrVkZMr/1tz62KN33VHIw==}
peerDependencies:
- '@tiptap/core': ^3.17.1
+ '@tiptap/core': 3.17.1
- '@tiptap/extension-unique-id@3.17.1':
- resolution: {integrity: sha512-R+lXBIaEmJ23rJMMLs6dPIVMhpv+TU8vEFVtpbMoOl/yfoc9Pvr6Q0EgLnRDX6l4yAekenem4KmGeG9CmuoskA==}
+ '@tiptap/extension-unique-id@3.19.0':
+ resolution: {integrity: sha512-gzRW4LHkRq90k8DXte0GqkUj10d5032xf73+i5B4TeNTFiQup4LTPBHmx9WAum6up9Uz3qCZ7fq0pkkRoyT8zg==}
peerDependencies:
- '@tiptap/core': ^3.17.1
- '@tiptap/pm': ^3.17.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
'@tiptap/extension-youtube@3.17.1':
resolution: {integrity: sha512-AarpN4vI/S6jPMuLuFGEFLgdoasGiUW+rGLj+jH/0Of6l27nKRN00MTm/fD/62qjR6At3Rd7Xsue/GuXdmDUWw==}
peerDependencies:
- '@tiptap/core': ^3.17.1
+ '@tiptap/core': 3.17.1
- '@tiptap/extensions@3.17.1':
- resolution: {integrity: sha512-aQ4WA5bdRpv9yPQ6rRdiqwlMZ1eJw1HyEaNPQhOr2HVhQ0EqSDIOEXF4ymCveGAHxXbxNvtQ+4t1ymQEikGfXA==}
+ '@tiptap/extensions@3.19.0':
+ resolution: {integrity: sha512-ZmGUhLbMWaGqnJh2Bry+6V4M6gMpUDYo4D1xNux5Gng/E/eYtc+PMxMZ/6F7tNTAuujLBOQKj6D+4SsSm457jw==}
peerDependencies:
- '@tiptap/core': ^3.17.1
- '@tiptap/pm': ^3.17.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
'@tiptap/html@3.17.1':
resolution: {integrity: sha512-fLb2fo8+3oQ+5FTx5IGZvLI5+VLgN9BM6pHaO1+IrwqQ5w2RBFIGp8M946asBPkxJ74EtzHqFKJpVFtaY2CcpA==}
peerDependencies:
- '@tiptap/core': ^3.17.1
- '@tiptap/pm': ^3.17.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
happy-dom: ^20.0.2
'@tiptap/pm@3.17.1':
@@ -4455,8 +4725,8 @@ packages:
'@tiptap/react@3.17.1':
resolution: {integrity: sha512-Hn/pIP3HG9xYnhI3iGrfVhgQhfIdOaEBSxOFzJ37patqSOlIoP5aZH/b2HZ4vgo5DdRlV56q7WtRC+vLIw4Neg==}
peerDependencies:
- '@tiptap/core': ^3.17.1
- '@tiptap/pm': ^3.17.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
'@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
'@types/react-dom': ^17.0.0 || ^18.0.0 || ^19.0.0
react: ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -4468,11 +4738,11 @@ packages:
'@tiptap/suggestion@3.17.1':
resolution: {integrity: sha512-a188uVYjlLsUiwK3Ki7KsaWVWC0u28KsqGEAqCk9ECYmtVY99Hrb+rcAwGpMjA7tn8WAwThOxiLISoMdpuqXwg==}
peerDependencies:
- '@tiptap/core': ^3.17.1
- '@tiptap/pm': ^3.17.1
+ '@tiptap/core': 3.17.1
+ '@tiptap/pm': 3.17.1
- '@tiptap/y-tiptap@3.0.1':
- resolution: {integrity: sha512-F3hj5X77ckmyIywbCQpKgyX3xKra2/acJPWaV5R9wqp0cUPBmm62FYbkQ6HaqxH1VhCkUhhAZcDSQjbjj7tnWw==}
+ '@tiptap/y-tiptap@3.0.2':
+ resolution: {integrity: sha512-flMn/YW6zTbc6cvDaUPh/NfLRTXDIqgpBUkYzM74KA1snqQwhOMjnRcnpu4hDFrTnPO6QGzr99vRyXEA7M44WA==}
engines: {node: '>=16.0.0', npm: '>=8.0.0'}
peerDependencies:
prosemirror-model: ^1.7.1
@@ -4500,6 +4770,9 @@ packages:
'@tsconfig/node16@1.0.4':
resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
+ '@tybys/wasm-util@0.10.1':
+ resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+
'@tybys/wasm-util@0.9.0':
resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==}
@@ -4521,6 +4794,9 @@ packages:
'@types/bcrypt@5.0.2':
resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==}
+ '@types/blueimp-load-image@5.16.6':
+ resolution: {integrity: sha512-e7s6CdDCUoBQdCe62Q6OS+DF68M8+ABxCEMh2Isjt4Fl3xuddljCHMN8mak48AMSVGGwUUtNRaZbkzgL5PEWew==}
+
'@types/body-parser@1.19.5':
resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==}
@@ -4644,12 +4920,6 @@ packages:
'@types/eslint@8.56.10':
resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==}
- '@types/estree@1.0.6':
- resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
-
- '@types/estree@1.0.7':
- resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
-
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
@@ -4671,9 +4941,6 @@ packages:
'@types/geojson@7946.0.14':
resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==}
- '@types/graceful-fs@4.1.9':
- resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
-
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
@@ -4689,8 +4956,8 @@ packages:
'@types/istanbul-reports@3.0.4':
resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
- '@types/jest@29.5.14':
- resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==}
+ '@types/jest@30.0.0':
+ resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==}
'@types/js-cookie@3.0.6':
resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==}
@@ -4719,9 +4986,6 @@ packages:
'@types/markdown-it@14.1.2':
resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==}
- '@types/mdast@3.0.15':
- resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==}
-
'@types/mdurl@2.0.0':
resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
@@ -4809,8 +5073,8 @@ packages:
'@types/superagent@8.1.6':
resolution: {integrity: sha512-yzBOv+6meEHSzV2NThYYOA6RtqvPr3Hbob9ZLp3i07SH27CrYVfm8CrF7ydTmidtelsFiKx2I4gZAiAOamGgvQ==}
- '@types/supertest@6.0.2':
- resolution: {integrity: sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==}
+ '@types/supertest@6.0.3':
+ resolution: {integrity: sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==}
'@types/trusted-types@2.0.7':
resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
@@ -4818,9 +5082,6 @@ packages:
'@types/turndown@5.0.6':
resolution: {integrity: sha512-ru00MoyeeouE5BX4gRL+6m/BsDfbRayOskWqUvh7CLGW+UXxHQItqALa38kKnOiZPqJrtzJUgAC2+F0rL1S4Pg==}
- '@types/unist@2.0.11':
- resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
-
'@types/unist@3.0.2':
resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==}
@@ -4851,8 +5112,8 @@ packages:
'@types/yargs-parser@21.0.3':
resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
- '@types/yargs@17.0.32':
- resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==}
+ '@types/yargs@17.0.35':
+ resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==}
'@types/yauzl@2.10.3':
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
@@ -4978,6 +5239,104 @@ packages:
'@ucast/mongo@2.4.3':
resolution: {integrity: sha512-XcI8LclrHWP83H+7H2anGCEeDq0n+12FU2mXCTz6/Tva9/9ddK/iacvvhCyW6cijAAOILmt0tWplRyRhVyZLsA==}
+ '@ungap/structured-clone@1.3.0':
+ resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
+
+ '@unrs/resolver-binding-android-arm-eabi@1.11.1':
+ resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==}
+ cpu: [arm]
+ os: [android]
+
+ '@unrs/resolver-binding-android-arm64@1.11.1':
+ resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==}
+ cpu: [arm64]
+ os: [android]
+
+ '@unrs/resolver-binding-darwin-arm64@1.11.1':
+ resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@unrs/resolver-binding-darwin-x64@1.11.1':
+ resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@unrs/resolver-binding-freebsd-x64@1.11.1':
+ resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1':
+ resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1':
+ resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-arm64-gnu@1.11.1':
+ resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-arm64-musl@1.11.1':
+ resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
+ resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
+ resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
+ resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
+ resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-x64-gnu@1.11.1':
+ resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==}
+ cpu: [x64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-x64-musl@1.11.1':
+ resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==}
+ cpu: [x64]
+ os: [linux]
+
+ '@unrs/resolver-binding-wasm32-wasi@1.11.1':
+ resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@unrs/resolver-binding-win32-arm64-msvc@1.11.1':
+ resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@unrs/resolver-binding-win32-ia32-msvc@1.11.1':
+ resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@unrs/resolver-binding-win32-x64-msvc@1.11.1':
+ resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==}
+ cpu: [x64]
+ os: [win32]
+
'@vercel/oidc@3.1.0':
resolution: {integrity: sha512-Fw28YZpRnA3cAHHDlkt7xQHiJ0fcL+NRcIqsocZQUSmbzeIKRpwttJjik5ZGanXP+vlA4SbTg+AbA3bP363l+w==}
engines: {node: '>= 20'}
@@ -5058,10 +5417,6 @@ packages:
resolution: {integrity: sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==}
hasBin: true
- abbrev@2.0.0:
- resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
- engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-
abstract-logging@2.0.1:
resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==}
@@ -5069,6 +5424,12 @@ packages:
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
engines: {node: '>= 0.6'}
+ acorn-import-phases@1.0.4:
+ resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==}
+ engines: {node: '>=10.13.0'}
+ peerDependencies:
+ acorn: ^8.14.0
+
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@@ -5078,16 +5439,6 @@ packages:
resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==}
engines: {node: '>=0.4.0'}
- acorn@8.11.3:
- resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
- engines: {node: '>=0.4.0'}
- hasBin: true
-
- acorn@8.14.0:
- resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
- engines: {node: '>=0.4.0'}
- hasBin: true
-
acorn@8.15.0:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
@@ -5101,14 +5452,14 @@ packages:
resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==}
engines: {node: '>= 14'}
- ai-sdk-ollama@3.1.1:
- resolution: {integrity: sha512-1rTgOGUsE8pR2ccg0Uz9lNJYzNUJKjtHDfUB5itoc2UnWZnbzQyqyxTUloCIWjwDkEzaWBiEJRLNvwF7a6j4VQ==}
+ ai-sdk-ollama@3.7.0:
+ resolution: {integrity: sha512-RtiOsAjfjykqtqp0vpnkkUe/lSlnZy7BEapuxZl6VnHwo8hq+DqRn35RpABoAI+eCBjzLioBcZk/msnhwfc8CA==}
engines: {node: '>=22'}
peerDependencies:
- ai: ^6.0.27
+ ai: ^6.0.80
- ai@6.0.38:
- resolution: {integrity: sha512-X8AaZFrdsPO1RNCAQLsaWfmE/SL9zgsiIZN3XqEHs3jIZ7ycR5aQZRg5XpNtbLWJxKXzK2b1ZXLx13AFOjksSg==}
+ ai@6.0.86:
+ resolution: {integrity: sha512-U2W2LBCHA/pr0Ui7vmmsjBiLEzBbZF3yVHNy7Rbzn7IX+SvoQPFM5rN74hhfVzZoE8zBuGD4nLLk+j0elGacvQ==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
@@ -5142,9 +5493,6 @@ packages:
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
- ajv@8.12.0:
- resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
-
ajv@8.17.1:
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
@@ -5186,8 +5534,8 @@ packages:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
- ansis@3.15.0:
- resolution: {integrity: sha512-zIcWDJ+Kwqxfdnogx66Gxzr0kVmCcRAdat9nlY2IHsshqTN4fBH6tMeRMPA/2w0rpBayIJvjQAaa2/4RDrNqwg==}
+ ansis@4.2.0:
+ resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
engines: {node: '>=14'}
anymatch@3.1.3:
@@ -5260,6 +5608,9 @@ packages:
resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
engines: {node: '>=8.0.0'}
+ atomically@2.1.1:
+ resolution: {integrity: sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==}
+
available-typed-arrays@1.0.7:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
@@ -5267,27 +5618,27 @@ packages:
avvio@9.1.0:
resolution: {integrity: sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==}
- axios@1.13.2:
- resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==}
+ axios@1.13.5:
+ resolution: {integrity: sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==}
- babel-jest@29.7.0:
- resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ babel-jest@30.2.0:
+ resolution: {integrity: sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
peerDependencies:
- '@babel/core': ^7.8.0
+ '@babel/core': ^7.11.0 || ^8.0.0-0
babel-plugin-const-enum@1.2.0:
resolution: {integrity: sha512-o1m/6iyyFnp9MRsK1dHF3bneqyf3AlM2q3A/YbgQr2pCat6B6XJVDv2TXqzfY2RYUi4mak6WAksSBPlyYGx9dg==}
peerDependencies:
'@babel/core': ^7.0.0-0
- babel-plugin-istanbul@6.1.1:
- resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
- engines: {node: '>=8'}
+ babel-plugin-istanbul@7.0.1:
+ resolution: {integrity: sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==}
+ engines: {node: '>=12'}
- babel-plugin-jest-hoist@29.6.3:
- resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ babel-plugin-jest-hoist@30.2.0:
+ resolution: {integrity: sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
babel-plugin-macros@3.1.0:
resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
@@ -5317,16 +5668,16 @@ packages:
'@babel/traverse':
optional: true
- babel-preset-current-node-syntax@1.0.1:
- resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==}
+ babel-preset-current-node-syntax@1.2.0:
+ resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==}
peerDependencies:
- '@babel/core': ^7.0.0
+ '@babel/core': ^7.0.0 || ^8.0.0-0
- babel-preset-jest@29.6.3:
- resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ babel-preset-jest@30.2.0:
+ resolution: {integrity: sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
peerDependencies:
- '@babel/core': ^7.0.0
+ '@babel/core': ^7.11.0 || ^8.0.0-beta.1
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -5342,6 +5693,10 @@ packages:
resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==}
engines: {node: '>=6.0.0'}
+ baseline-browser-mapping@2.9.19:
+ resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==}
+ hasBin: true
+
bcrypt@6.0.0:
resolution: {integrity: sha512-cU8v/EGSrnH+HnxV2z0J7/blxH8gq7Xh2JFT6Aroax7UohdmiJJlxApMxtKfuI7z68NvvVcmR78k2LbT6efhRg==}
engines: {node: '>= 18'}
@@ -5356,6 +5711,9 @@ packages:
bluebird@3.4.7:
resolution: {integrity: sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==}
+ blueimp-load-image@5.16.0:
+ resolution: {integrity: sha512-3DUSVdOtlfNRk7moRZuTwDmA3NnG8KIJuLcq3c0J7/BIr6X3Vb/EpX3kUH1joxUhmoVF4uCpDfz7wHkz8pQajA==}
+
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
@@ -5366,15 +5724,11 @@ packages:
resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==}
engines: {node: '>=10'}
- brace-expansion@1.1.11:
- resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
- brace-expansion@2.0.1:
- resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
-
- braces@3.0.2:
- resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
- engines: {node: '>=8'}
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
@@ -5388,6 +5742,11 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
+ browserslist@4.28.1:
+ resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
bs-logger@0.2.6:
resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==}
engines: {node: '>= 6'}
@@ -5410,25 +5769,15 @@ packages:
buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
- buffer@6.0.3:
- resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
-
- builtins@5.0.1:
- resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==}
-
bullmq@5.65.0:
resolution: {integrity: sha512-fyOcyf2ad4zrNmE18vdF/ie7DrW0TwhLt5e0DkqDxbRpDNiUdYqgp2QZJW2ntnUN08T2mDMC4deUUhF2UOAmeQ==}
- busboy@1.6.0:
- resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
- engines: {node: '>=10.16.0'}
-
bytes@3.1.2:
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
engines: {node: '>= 0.8'}
- cache-manager@6.4.3:
- resolution: {integrity: sha512-VV5eq/QQ5rIVix7/aICO4JyvSeEv9eIQuKL5iFwgM2BrcYoE0A/D1mNsAHJAsB0WEbNdBlKkn6Tjz6fKzh/cKQ==}
+ cache-manager@7.2.8:
+ resolution: {integrity: sha512-0HDaDLBBY/maa/LmUVAr70XUOwsiQD+jyzCBjmUErYZUKdMS9dT59PqW59PpVqfGM7ve6H0J6307JTpkCYefHQ==}
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
@@ -5438,6 +5787,10 @@ packages:
resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
engines: {node: '>= 0.4'}
+ call-bound@1.0.4:
+ resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
+ engines: {node: '>= 0.4'}
+
callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
@@ -5457,6 +5810,9 @@ packages:
caniuse-lite@1.0.30001684:
resolution: {integrity: sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==}
+ caniuse-lite@1.0.30001769:
+ resolution: {integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==}
+
canvas-roundrect-polyfill@0.0.1:
resolution: {integrity: sha512-yWq+R3U3jE+coOeEb3a3GgE2j/0MMiDKM/QpLb6h9ihf5fGY9UXtvK9o4vNqjWXoZz7/3EaSVU3IX53TvFFUOw==}
@@ -5468,16 +5824,20 @@ packages:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
+ chalk@5.6.2:
+ resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
char-regex@1.0.2:
resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
engines: {node: '>=10'}
- character-entities@2.0.2:
- resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
-
chardet@0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+ chardet@2.1.1:
+ resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==}
+
check-disk-space@3.4.0:
resolution: {integrity: sha512-drVkSqfwA+TvuEhFipiR1OC9boEGZL5RrWvVsOthdcvQNXyCCuKkEiTOTXZ7qxSf/GLwq4GvzfrQD/Wz325hgw==}
engines: {node: '>=16'}
@@ -5509,12 +5869,15 @@ packages:
resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==}
engines: {node: '>=6.0'}
- ci-info@3.9.0:
- resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+ ci-info@4.4.0:
+ resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==}
engines: {node: '>=8'}
- cjs-module-lexer@1.2.3:
- resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==}
+ citty@0.1.6:
+ resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
+
+ cjs-module-lexer@2.2.0:
+ resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==}
class-transformer@0.5.1:
resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==}
@@ -5530,6 +5893,10 @@ packages:
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
engines: {node: '>=8'}
+ cli-cursor@5.0.0:
+ resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
+ engines: {node: '>=18'}
+
cli-spinners@2.6.1:
resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==}
engines: {node: '>=6'}
@@ -5546,9 +5913,6 @@ packages:
resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
engines: {node: '>= 12'}
- client-only@0.0.1:
- resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
-
cliui@6.0.0:
resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
@@ -5592,13 +5956,6 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
- color-string@1.9.1:
- resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
-
- color@4.2.3:
- resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
- engines: {node: '>=12.5.0'}
-
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
@@ -5610,14 +5967,14 @@ packages:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
- commander@10.0.1:
- resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
- engines: {node: '>=14'}
-
commander@11.1.0:
resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
engines: {node: '>=16'}
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
@@ -5648,29 +6005,38 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ conf@15.1.0:
+ resolution: {integrity: sha512-Uy5YN9KEu0WWDaZAVJ5FAmZoaJt9rdK6kH+utItPyGsCqCgaTKkrmZx3zoE0/3q6S3bcp3Ihkk+ZqPxWxFK5og==}
+ engines: {node: '>=20'}
+
confbox@0.1.8:
resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
confbox@0.2.2:
resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
- config-chain@1.1.13:
- resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
-
consola@3.4.0:
resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==}
engines: {node: ^14.18.0 || >=16.10.0}
+ consola@3.4.2:
+ resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
+ engines: {node: ^14.18.0 || >=16.10.0}
+
console-table-printer@2.14.6:
resolution: {integrity: sha512-MCBl5HNVaFuuHW6FGbL/4fB7N/ormCy+tQ+sxTrF6QtSbSNETvPuOVbkJBhzDgYhvjWGrTma4eYJa37ZuoQsPw==}
- content-disposition@0.5.4:
- resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
- engines: {node: '>= 0.6'}
+ content-disposition@1.0.1:
+ resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==}
+ engines: {node: '>=18'}
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+ cookie-signature@1.2.2:
+ resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
+ engines: {node: '>=6.6.0'}
+
cookie@0.7.2:
resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
engines: {node: '>= 0.6'}
@@ -5730,11 +6096,6 @@ packages:
resolution: {integrity: sha512-kucVIjOmMc1f0tv53BJ/5WIX+MGLcKuoBhnGqQrgKJNqLByb/sVMWfW/Aw6hw0jgcqjJ2pi9E5y32zOIpaUlsA==}
engines: {node: '>=0.8'}
- create-jest@29.7.0:
- resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- hasBin: true
-
create-require@1.1.1:
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
@@ -5757,12 +6118,8 @@ packages:
cross-fetch@4.0.0:
resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==}
- cross-spawn@7.0.3:
- resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
- engines: {node: '>= 8'}
-
- cross-spawn@7.0.6:
- resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ cross-spawn@7.0.5:
+ resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==}
engines: {node: '>= 8'}
css-select@5.1.0:
@@ -5937,9 +6294,6 @@ packages:
resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==}
engines: {node: '>=12'}
- dagre-d3-es@7.0.10:
- resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==}
-
dagre-d3-es@7.0.13:
resolution: {integrity: sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q==}
@@ -5965,12 +6319,13 @@ packages:
dateformat@4.6.3:
resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==}
- dayjs@1.11.13:
- resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
-
dayjs@1.11.19:
resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==}
+ debounce-fn@6.0.0:
+ resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==}
+ engines: {node: '>=18'}
+
debounce@2.0.0:
resolution: {integrity: sha512-xRetU6gL1VJbs85Mc4FoEGSjQxzpdxRyFhe3lmWFyy2EzydIcD4xzUvRJMD+NPDfMwKNhxa3PvsIOU32luIWeA==}
engines: {node: '>=18'}
@@ -6027,11 +6382,8 @@ packages:
decimal.js@10.4.3:
resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
- decode-named-character-reference@1.1.0:
- resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==}
-
- dedent@1.5.1:
- resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==}
+ dedent@1.7.1:
+ resolution: {integrity: sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==}
peerDependencies:
babel-plugin-macros: ^3.1.0
peerDependenciesMeta:
@@ -6079,10 +6431,6 @@ packages:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
- detect-libc@2.0.4:
- resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
- engines: {node: '>=8'}
-
detect-newline@3.1.0:
resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
engines: {node: '>=8'}
@@ -6100,20 +6448,16 @@ packages:
dezalgo@1.0.4:
resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==}
- diff-sequences@29.6.3:
- resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
- diff@3.5.0:
- resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==}
+ diff@3.5.1:
+ resolution: {integrity: sha512-Z3u54A8qGyqFOSr2pk0ijYs8mOE9Qz8kTvtKeBI+upoG9j04Sq+oI7W8zAJiQybDcESET8/uIdHzs0p3k4fZlw==}
engines: {node: '>=0.3.1'}
- diff@4.0.2:
- resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ diff@4.0.4:
+ resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==}
engines: {node: '>=0.3.1'}
- diff@5.2.0:
- resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+ diff@8.0.3:
+ resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==}
engines: {node: '>=0.3.1'}
dijkstrajs@1.0.3:
@@ -6142,15 +6486,16 @@ packages:
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
engines: {node: '>= 4'}
- dompurify@3.1.6:
- resolution: {integrity: sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==}
-
- dompurify@3.2.6:
- resolution: {integrity: sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==}
+ dompurify@3.3.1:
+ resolution: {integrity: sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==}
domutils@3.2.2:
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
+ dot-prop@10.1.0:
+ resolution: {integrity: sha512-MVUtAugQMOff5RnBy2d9N31iG0lNwg1qAoAOn7pOK5wf94WIaE3My2p3uwTQuvS2AcqchkcR3bHByjaM0mmi7Q==}
+ engines: {node: '>=20'}
+
dotenv-expand@11.0.6:
resolution: {integrity: sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==}
engines: {node: '>=12'}
@@ -6163,16 +6508,12 @@ packages:
resolution: {integrity: sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA==}
engines: {node: '>=12'}
- dotenv@16.4.5:
- resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==}
- engines: {node: '>=12'}
-
dotenv@16.4.7:
resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==}
engines: {node: '>=12'}
- dotenv@17.2.3:
- resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==}
+ dotenv@17.2.4:
+ resolution: {integrity: sha512-mudtfb4zRB4bVvdj0xRo+e6duH1csJRM8IukBqfTRvHotn9+LBXB8ynAidP9zHqoRC/fsllXgk4kCKlR21fIhw==}
engines: {node: '>=12'}
duck@0.1.12:
@@ -6188,22 +6529,17 @@ packages:
ecdsa-sig-formatter@1.0.11:
resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
- editorconfig@1.0.4:
- resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==}
- engines: {node: '>=14'}
- hasBin: true
-
ejs@3.1.10:
resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
engines: {node: '>=0.10.0'}
hasBin: true
+ electron-to-chromium@1.5.286:
+ resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==}
+
electron-to-chromium@1.5.65:
resolution: {integrity: sha512-PWVzBjghx7/wop6n22vS2MLU8tKGd4Q91aCEGhG/TYmW6PP5OcSXcdnxTe1NNt0T66N8D6jxh4kC8UsdzOGaIw==}
- elkjs@0.9.3:
- resolution: {integrity: sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==}
-
emittery@0.13.1:
resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
engines: {node: '>=12'}
@@ -6211,6 +6547,9 @@ packages:
emoji-mart@5.6.0:
resolution: {integrity: sha512-eJp3QRe79pjwa+duv+n7+5YsNhRcMl812EcFVwrnRvYKoNPoQb5qxU8DG6Bgwji0akHdp6D4Ln6tYLG58MFSow==}
+ emoji-regex@10.6.0:
+ resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
+
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -6238,6 +6577,10 @@ packages:
resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==}
engines: {node: '>=10.13.0'}
+ enhanced-resolve@5.19.0:
+ resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==}
+ engines: {node: '>=10.13.0'}
+
enquirer@2.3.6:
resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==}
engines: {node: '>=8.6'}
@@ -6254,6 +6597,10 @@ packages:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
engines: {node: '>=6'}
+ env-paths@3.0.0:
+ resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
errno@0.1.8:
resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
hasBin: true
@@ -6281,8 +6628,8 @@ packages:
resolution: {integrity: sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==}
engines: {node: '>= 0.4'}
- es-module-lexer@1.4.2:
- resolution: {integrity: sha512-7nOqkomXZEaxUDJw21XZNtRk739QvrPSoZoRtbsEfcii00vdzZUh6zh1CQwHhrib8MdEtJfv5rJiGeb4KuV/vw==}
+ es-module-lexer@2.0.0:
+ resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==}
es-object-atoms@1.0.0:
resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
@@ -6311,11 +6658,6 @@ packages:
resolution: {integrity: sha512-VHErXfzR/6r/+yyzPKeBvO0lgjfC5cbDCQWjWwMZWSb6YU39TGIl51OUmCfWCq4ylMdJSB8zkz2vIuIeIxXApA==}
engines: {node: '>=0.10.0'}
- esbuild@0.19.11:
- resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==}
- engines: {node: '>=12'}
- hasBin: true
-
esbuild@0.25.0:
resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==}
engines: {node: '>=18'}
@@ -6371,8 +6713,8 @@ packages:
resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
engines: {node: '>=8.0.0'}
- eslint-scope@8.2.0:
- resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==}
+ eslint-scope@8.4.0:
+ resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint-visitor-keys@3.4.3:
@@ -6383,8 +6725,12 @@ packages:
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint@9.15.0:
- resolution: {integrity: sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==}
+ eslint-visitor-keys@4.2.1:
+ resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint@9.39.2:
+ resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -6393,18 +6739,8 @@ packages:
jiti:
optional: true
- eslint@9.20.1:
- resolution: {integrity: sha512-m1mM33o6dBUjxl2qb6wv6nGNwCAsns1eKtaQ4l/NPHeTvhiUPbtdfMyktxN4B3fgHIgsYh1VT3V9txblpQHq+g==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- hasBin: true
- peerDependencies:
- jiti: '*'
- peerDependenciesMeta:
- jiti:
- optional: true
-
- espree@10.3.0:
- resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
+ espree@10.4.0:
+ resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
esprima@4.0.1:
@@ -6450,13 +6786,13 @@ packages:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
- exit@0.1.2:
- resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
+ exit-x@0.2.2:
+ resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==}
engines: {node: '>= 0.8.0'}
- expect@29.7.0:
- resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ expect@30.2.0:
+ resolution: {integrity: sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
exsolve@1.0.7:
resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==}
@@ -6471,9 +6807,6 @@ packages:
fast-decode-uri-component@1.0.1:
resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==}
- fast-deep-equal@2.0.1:
- resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==}
-
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -6503,8 +6836,8 @@ packages:
fast-uri@3.0.6:
resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==}
- fast-xml-parser@4.4.1:
- resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==}
+ fast-xml-parser@5.3.4:
+ resolution: {integrity: sha512-EFd6afGmXlCx8H8WTZHhAoDaWaGyuIBoZJ2mknrNxug+aZKjkp0a0dlars9Izl+jF+7Gu1/5f/2h68cQpe0IiA==}
hasBin: true
fastify-plugin@5.0.1:
@@ -6513,8 +6846,8 @@ packages:
fastify-plugin@5.1.0:
resolution: {integrity: sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw==}
- fastify@5.6.2:
- resolution: {integrity: sha512-dPugdGnsvYkBlENLhCgX8yhyGCsCPrpA8lFWbTNU428l+YOnLgYHR69hzV8HWPC79n536EqzqQtvhtdaCE0dKg==}
+ fastify@5.7.4:
+ resolution: {integrity: sha512-e6l5NsRdaEP8rdD8VR0ErJASeyaRbzXYpmkrpr2SuvuMq6Si3lvsaVy5C+7gLanEkvjpMDzBXWE5HPeb/hgTxA==}
fastq@1.17.1:
resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
@@ -6522,14 +6855,6 @@ packages:
fb-watchman@2.0.2:
resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
- fdir@6.4.3:
- resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==}
- peerDependencies:
- picomatch: ^3 || ^4
- peerDependenciesMeta:
- picomatch:
- optional: true
-
fdir@6.5.0:
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
@@ -6560,16 +6885,12 @@ packages:
filelist@1.0.4:
resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
- fill-range@7.0.1:
- resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
- engines: {node: '>=8'}
-
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
- find-my-way@9.3.0:
- resolution: {integrity: sha512-eRoFWQw+Yv2tuYlK2pjFS2jGXSxSppAs3hSQjfxVKxM5amECzIgYYc1FEI8ZmhSh/Ig+FrKEz43NLRKJjYCZVg==}
+ find-my-way@9.4.0:
+ resolution: {integrity: sha512-5Ye4vHsypZRYtS01ob/iwHzGRUDELlsoCftI/OZFhcLs1M0tkGPcXldE80TAZC5yYuJMBPJQQ43UHlqbJWiX2w==}
engines: {node: '>=20'}
find-up@4.1.0:
@@ -6591,8 +6912,8 @@ packages:
flatted@3.2.9:
resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
- follow-redirects@1.15.6:
- resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==}
+ follow-redirects@1.15.11:
+ resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
engines: {node: '>=4.0'}
peerDependencies:
debug: '*'
@@ -6607,23 +6928,20 @@ packages:
resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
engines: {node: '>=14'}
- fork-ts-checker-webpack-plugin@9.0.2:
- resolution: {integrity: sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==}
- engines: {node: '>=12.13.0', yarn: '>=1.0.0'}
+ fork-ts-checker-webpack-plugin@9.1.0:
+ resolution: {integrity: sha512-mpafl89VFPJmhnJ1ssH+8wmM2b50n+Rew5x42NeI2U78aRWgtkEtGmctp7iT16UjquJTjorEmIfESj3DxdW84Q==}
+ engines: {node: '>=14.21.3'}
peerDependencies:
typescript: '>3.6.0'
webpack: ^5.11.0
- form-data@4.0.0:
- resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
- engines: {node: '>= 6'}
-
form-data@4.0.5:
resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
engines: {node: '>= 6'}
- formidable@3.5.1:
- resolution: {integrity: sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==}
+ formidable@3.5.4:
+ resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==}
+ engines: {node: '>=14.0.0'}
fractional-indexing-jittered@1.0.0:
resolution: {integrity: sha512-0tLU0FOedVY7lrvN4LK0DVj6FTuYM0pWDpN97/8UTZE2lx1+OwX8+2uL7IOWc2PmktYTHQjMT6FvZZ3SGCdZdg==}
@@ -6649,9 +6967,6 @@ packages:
fs-monkey@1.0.5:
resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==}
- fs.realpath@1.0.0:
- resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
-
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -6679,6 +6994,10 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
+ get-east-asian-width@1.4.0:
+ resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==}
+ engines: {node: '>=18'}
+
get-intrinsic@1.2.4:
resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
engines: {node: '>= 0.4'}
@@ -6725,24 +7044,11 @@ packages:
glob-to-regexp@0.4.1:
resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
- glob@10.3.4:
- resolution: {integrity: sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==}
- engines: {node: '>=16 || 14 >=14.17'}
+ glob@10.5.0:
+ resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
+ deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
hasBin: true
- glob@10.4.5:
- resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
- hasBin: true
-
- glob@11.0.1:
- resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==}
- engines: {node: 20 || >=22}
- hasBin: true
-
- glob@7.2.3:
- resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
- deprecated: Glob versions prior to v9 are no longer supported
-
globals@11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'}
@@ -6779,6 +7085,11 @@ packages:
hachure-fill@0.5.2:
resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==}
+ handlebars@4.7.8:
+ resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==}
+ engines: {node: '>=0.4.7'}
+ hasBin: true
+
happy-dom@20.1.0:
resolution: {integrity: sha512-ebvqjBqzenBk2LjzNEAzoj7yhw7rW/R2/wVevMu6Mrq3MXtcI/RUz4+ozpcOcqVLEWPqLfg2v9EAU7fFXZUUJw==}
engines: {node: '>=20.0.0'}
@@ -6817,6 +7128,10 @@ packages:
resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
engines: {node: '>= 0.4'}
+ hashery@1.4.0:
+ resolution: {integrity: sha512-Wn2i1In6XFxl8Az55kkgnFRiAlIAushzh26PTjL2AKtQcEfXrcLa7Hn5QOWGZEf3LU057P9TwwZjFyxfS1VuvQ==}
+ engines: {node: '>=20'}
+
hasown@2.0.2:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
@@ -6824,10 +7139,6 @@ packages:
help-me@5.0.0:
resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==}
- hexoid@1.0.0:
- resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==}
- engines: {node: '>=8'}
-
highlight.js@11.11.1:
resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
engines: {node: '>=12.0.0'}
@@ -6838,9 +7149,8 @@ packages:
hoist-non-react-statics@3.3.2:
resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
- hosted-git-info@7.0.1:
- resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==}
- engines: {node: ^16.14.0 || >=18.0.0}
+ hookified@1.15.1:
+ resolution: {integrity: sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==}
html-encoding-sniffer@4.0.0:
resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
@@ -6895,6 +7205,10 @@ packages:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
+ iconv-lite@0.7.2:
+ resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==}
+ engines: {node: '>=0.10.0'}
+
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
@@ -6902,6 +7216,10 @@ packages:
resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
engines: {node: '>= 4'}
+ ignore@7.0.5:
+ resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
+ engines: {node: '>= 4'}
+
image-blob-reduce@3.0.1:
resolution: {integrity: sha512-/VmmWgIryG/wcn4TVrV7cC4mlfUC/oyiKIfSg5eVM3Ten/c1c34RJhMYKCWTnoSMHSqXLt3tsrBR4Q2HInvN+Q==}
@@ -6925,8 +7243,8 @@ packages:
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
engines: {node: '>=6'}
- import-local@3.1.0:
- resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==}
+ import-local@3.2.0:
+ resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
engines: {node: '>=8'}
hasBin: true
@@ -6934,16 +7252,9 @@ packages:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
- inflight@1.0.6:
- resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
- deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
-
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
- ini@1.3.8:
- resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
-
internal-slot@1.0.7:
resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==}
engines: {node: '>= 0.4'}
@@ -6981,9 +7292,6 @@ packages:
is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
- is-arrayish@0.3.4:
- resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==}
-
is-async-function@2.0.0:
resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==}
engines: {node: '>= 0.4'}
@@ -7048,6 +7356,10 @@ packages:
resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
engines: {node: '>=8'}
+ is-interactive@2.0.0:
+ resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==}
+ engines: {node: '>=12'}
+
is-map@2.0.3:
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines: {node: '>= 0.4'}
@@ -7099,6 +7411,14 @@ packages:
resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
engines: {node: '>=10'}
+ is-unicode-supported@1.3.0:
+ resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==}
+ engines: {node: '>=12'}
+
+ is-unicode-supported@2.1.0:
+ resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==}
+ engines: {node: '>=18'}
+
is-weakmap@2.0.2:
resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
engines: {node: '>= 0.4'}
@@ -7133,10 +7453,6 @@ packages:
resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
engines: {node: '>=8'}
- istanbul-lib-instrument@5.2.1:
- resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
- engines: {node: '>=8'}
-
istanbul-lib-instrument@6.0.2:
resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==}
engines: {node: '>=10'}
@@ -7145,8 +7461,8 @@ packages:
resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
engines: {node: '>=10'}
- istanbul-lib-source-maps@4.0.1:
- resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
+ istanbul-lib-source-maps@5.0.6:
+ resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==}
engines: {node: '>=10'}
istanbul-reports@3.1.7:
@@ -7161,33 +7477,25 @@ packages:
resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==}
engines: {node: '>= 0.4'}
- jackspeak@2.3.6:
- resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
- engines: {node: '>=14'}
-
jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
- jackspeak@4.0.3:
- resolution: {integrity: sha512-oSwM7q8PTHQWuZAlp995iPpPJ4Vkl7qT0ZRD+9duL9j2oBy6KcTfyxc8mEuHJYC+z/kbps80aJLkaNzTOrf/kw==}
- engines: {node: 20 || >=22}
-
jake@10.8.7:
resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==}
engines: {node: '>=10'}
hasBin: true
- jest-changed-files@29.7.0:
- resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-changed-files@30.2.0:
+ resolution: {integrity: sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-circus@29.7.0:
- resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-circus@30.2.0:
+ resolution: {integrity: sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-cli@29.7.0:
- resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-cli@30.2.0:
+ resolution: {integrity: sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
hasBin: true
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
@@ -7195,57 +7503,56 @@ packages:
node-notifier:
optional: true
- jest-config@29.7.0:
- resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-config@30.2.0:
+ resolution: {integrity: sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
peerDependencies:
'@types/node': '*'
+ esbuild-register: '>=3.4.0'
ts-node: '>=9.0.0'
peerDependenciesMeta:
'@types/node':
optional: true
+ esbuild-register:
+ optional: true
ts-node:
optional: true
- jest-diff@29.7.0:
- resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-diff@30.2.0:
+ resolution: {integrity: sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-docblock@29.7.0:
- resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-docblock@30.2.0:
+ resolution: {integrity: sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-each@29.7.0:
- resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-each@30.2.0:
+ resolution: {integrity: sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-environment-node@29.7.0:
- resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-environment-node@30.2.0:
+ resolution: {integrity: sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-get-type@29.6.3:
- resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-haste-map@30.2.0:
+ resolution: {integrity: sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-haste-map@29.7.0:
- resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-leak-detector@30.2.0:
+ resolution: {integrity: sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-leak-detector@29.7.0:
- resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-matcher-utils@30.2.0:
+ resolution: {integrity: sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-matcher-utils@29.7.0:
- resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-message-util@30.2.0:
+ resolution: {integrity: sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-message-util@29.7.0:
- resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
- jest-mock@29.7.0:
- resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-mock@30.2.0:
+ resolution: {integrity: sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-pnp-resolver@1.2.3:
resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
@@ -7256,53 +7563,53 @@ packages:
jest-resolve:
optional: true
- jest-regex-util@29.6.3:
- resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-regex-util@30.0.1:
+ resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-resolve-dependencies@29.7.0:
- resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-resolve-dependencies@30.2.0:
+ resolution: {integrity: sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-resolve@29.7.0:
- resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-resolve@30.2.0:
+ resolution: {integrity: sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-runner@29.7.0:
- resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-runner@30.2.0:
+ resolution: {integrity: sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-runtime@29.7.0:
- resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-runtime@30.2.0:
+ resolution: {integrity: sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-snapshot@29.7.0:
- resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-snapshot@30.2.0:
+ resolution: {integrity: sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-util@29.7.0:
- resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-util@30.2.0:
+ resolution: {integrity: sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-validate@29.7.0:
- resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-validate@30.2.0:
+ resolution: {integrity: sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-watcher@29.7.0:
- resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-watcher@30.2.0:
+ resolution: {integrity: sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-worker@27.5.1:
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
engines: {node: '>= 10.13.0'}
- jest-worker@29.7.0:
- resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-worker@30.2.0:
+ resolution: {integrity: sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest@29.7.0:
- resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest@30.2.0:
+ resolution: {integrity: sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
hasBin: true
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
@@ -7310,8 +7617,8 @@ packages:
node-notifier:
optional: true
- jiti@1.21.0:
- resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
+ jiti@2.4.2:
+ resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
hasBin: true
jose@4.15.9:
@@ -7363,11 +7670,6 @@ packages:
resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
engines: {node: '>=10'}
- js-beautify@1.15.1:
- resolution: {integrity: sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==}
- engines: {node: '>=14'}
- hasBin: true
-
js-cookie@3.0.5:
resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
engines: {node: '>=14'}
@@ -7378,12 +7680,12 @@ packages:
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
- js-yaml@3.14.1:
- resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
+ js-yaml@3.14.2:
+ resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
hasBin: true
- js-yaml@4.1.0:
- resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ js-yaml@4.1.1:
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
jsdom@25.0.1:
@@ -7399,11 +7701,6 @@ packages:
resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
hasBin: true
- jsesc@2.5.2:
- resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
- engines: {node: '>=4'}
- hasBin: true
-
jsesc@3.0.2:
resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
engines: {node: '>=6'}
@@ -7424,6 +7721,9 @@ packages:
json-schema-traverse@1.0.0:
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+ json-schema-typed@8.0.2:
+ resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==}
+
json-schema@0.4.0:
resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
@@ -7444,6 +7744,10 @@ packages:
jsonfile@6.1.0:
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+ jsonrepair@3.13.2:
+ resolution: {integrity: sha512-Leuly0nbM4R+S5SVJk3VHfw1oxnlEK9KygdZvfUtEtTawNDyzB4qa1xWTmFt1aeoA7sXZkVTRuIixJ8bAvqVUg==}
+ hasBin: true
+
jsonwebtoken@9.0.3:
resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==}
engines: {node: '>=12', npm: '>=6'}
@@ -7472,8 +7776,8 @@ packages:
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
- keyv@5.3.3:
- resolution: {integrity: sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==}
+ keyv@5.6.0:
+ resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==}
khroma@2.1.0:
resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==}
@@ -7550,8 +7854,8 @@ packages:
resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==}
engines: {node: '>=16.0.0'}
- langsmith@0.4.6:
- resolution: {integrity: sha512-9aYop1fEwA8RgFuvv8XPeV9ieeSnKnVRn3bNemkFQCyINLAxfNHC547bVMW8i8MuS1F1pgKwopqhLNf80qS1bQ==}
+ langsmith@0.4.12:
+ resolution: {integrity: sha512-YWt0jcGvKqjUgIvd78rd4QcdMss0lUkeUaqp0UpVRq7H2yNDx8H5jOUO/laWUmaPtWGgcip0qturykXe1g9Gqw==}
peerDependencies:
'@opentelemetry/api': '*'
'@opentelemetry/exporter-trace-otlp-proto': '*'
@@ -7624,8 +7928,8 @@ packages:
resolution: {integrity: sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA==}
engines: {node: '>=13.2.0'}
- loader-runner@4.3.0:
- resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
+ loader-runner@4.3.1:
+ resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==}
engines: {node: '>=6.11.5'}
local-pkg@1.1.2:
@@ -7640,8 +7944,8 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
- lodash-es@4.17.21:
- resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+ lodash-es@4.17.23:
+ resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==}
lodash.debounce@4.0.8:
resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
@@ -7685,17 +7989,28 @@ packages:
lodash.throttle@4.1.1:
resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==}
- lodash@4.17.21:
- resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ lodash@4.17.23:
+ resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==}
log-symbols@4.1.0:
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
engines: {node: '>=10'}
+ log-symbols@6.0.0:
+ resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==}
+ engines: {node: '>=18'}
+
+ log-symbols@7.0.1:
+ resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==}
+ engines: {node: '>=18'}
+
loglevel@1.9.1:
resolution: {integrity: sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==}
engines: {node: '>= 0.6.0'}
+ long@5.3.2:
+ resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==}
+
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
@@ -7709,10 +8024,6 @@ packages:
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
- lru-cache@11.0.2:
- resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==}
- engines: {node: 20 || >=22}
-
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
@@ -7757,8 +8068,8 @@ packages:
'@mantine/form': '>=7.0.0'
zod: '>=3.25.0'
- markdown-it@14.1.0:
- resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
+ markdown-it@14.1.1:
+ resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==}
hasBin: true
marked@13.0.3:
@@ -7766,31 +8077,20 @@ packages:
engines: {node: '>= 18'}
hasBin: true
+ marked@15.0.12:
+ resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==}
+ engines: {node: '>= 18'}
+ hasBin: true
+
marked@16.4.2:
resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==}
engines: {node: '>= 20'}
hasBin: true
- marked@7.0.4:
- resolution: {integrity: sha512-t8eP0dXRJMtMvBojtkcsA7n48BkauktUKzfkPSCq85ZMTJ0v76Rke4DYz01omYpPTUh4p/f7HePgRo3ebG8+QQ==}
- engines: {node: '>= 16'}
- hasBin: true
-
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
- md-to-react-email@5.0.2:
- resolution: {integrity: sha512-x6kkpdzIzUhecda/yahltfEl53mH26QdWu4abUF9+S0Jgam8P//Ciro8cdhyMHnT5MQUJYrIbO6ORM2UxPiNNA==}
- peerDependencies:
- react: 18.x
-
- mdast-util-from-markdown@1.3.1:
- resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==}
-
- mdast-util-to-string@3.2.0:
- resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==}
-
mdurl@2.0.0:
resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
@@ -7808,9 +8108,6 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
- mermaid@10.9.4:
- resolution: {integrity: sha512-VIG2B0R9ydvkS+wShA8sXqkzfpYglM2Qwj7VyUeqzNVqSGPoP/tcaUr3ub4ESykv8eqQJn3p99bHNvYdg3gCHQ==}
-
mermaid@11.12.2:
resolution: {integrity: sha512-n34QPDPEKmaeCG4WDMGy0OT6PSyxKCfy2pJgShP+Qow2KLrvWjclwbc3yXfSIf4BanqWEhQEpngWwNp/XhZt6w==}
@@ -7818,73 +8115,6 @@ packages:
resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
engines: {node: '>= 0.6'}
- micromark-core-commonmark@1.1.0:
- resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==}
-
- micromark-factory-destination@1.1.0:
- resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==}
-
- micromark-factory-label@1.1.0:
- resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==}
-
- micromark-factory-space@1.1.0:
- resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==}
-
- micromark-factory-title@1.1.0:
- resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==}
-
- micromark-factory-whitespace@1.1.0:
- resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==}
-
- micromark-util-character@1.2.0:
- resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==}
-
- micromark-util-chunked@1.1.0:
- resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==}
-
- micromark-util-classify-character@1.1.0:
- resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==}
-
- micromark-util-combine-extensions@1.1.0:
- resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==}
-
- micromark-util-decode-numeric-character-reference@1.1.0:
- resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==}
-
- micromark-util-decode-string@1.1.0:
- resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==}
-
- micromark-util-encode@1.1.0:
- resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==}
-
- micromark-util-html-tag-name@1.2.0:
- resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==}
-
- micromark-util-normalize-identifier@1.1.0:
- resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==}
-
- micromark-util-resolve-all@1.1.0:
- resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==}
-
- micromark-util-sanitize-uri@1.2.0:
- resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==}
-
- micromark-util-subtokenize@1.1.0:
- resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==}
-
- micromark-util-symbol@1.1.0:
- resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==}
-
- micromark-util-types@1.1.0:
- resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==}
-
- micromark@3.2.0:
- resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==}
-
- micromatch@4.0.5:
- resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
- engines: {node: '>=8.6'}
-
micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
@@ -7893,10 +8123,18 @@ packages:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
+ mime-db@1.54.0:
+ resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
+ engines: {node: '>= 0.6'}
+
mime-types@2.1.35:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
+ mime-types@3.0.2:
+ resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==}
+ engines: {node: '>=18'}
+
mime@1.6.0:
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
engines: {node: '>=4'}
@@ -7916,8 +8154,12 @@ packages:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
- minimatch@10.0.1:
- resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
+ mimic-function@5.0.1:
+ resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
+ engines: {node: '>=18'}
+
+ minimatch@10.1.1:
+ resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==}
engines: {node: 20 || >=22}
minimatch@3.1.2:
@@ -7927,14 +8169,6 @@ packages:
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
engines: {node: '>=10'}
- minimatch@9.0.1:
- resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- minimatch@9.0.3:
- resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
- engines: {node: '>=16 || 14 >=14.17'}
-
minimatch@9.0.4:
resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -7952,10 +8186,6 @@ packages:
mlly@1.8.0:
resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
- mri@1.2.0:
- resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
- engines: {node: '>=4'}
-
ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
@@ -8004,6 +8234,11 @@ packages:
engines: {node: ^14 || ^16 || >=18}
hasBin: true
+ napi-postinstall@0.3.4:
+ resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+ hasBin: true
+
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
@@ -8036,25 +8271,6 @@ packages:
pino-http: ^6.4.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0
rxjs: ^7.1.0
- next@14.2.10:
- resolution: {integrity: sha512-sDDExXnh33cY3RkS9JuFEKaS4HmlWmDKP1VJioucCG6z5KuA008DPsDZOzi8UfqEk3Ii+2NCQSJrfbEWtZZfww==}
- engines: {node: '>=18.17.0'}
- deprecated: This version has a security vulnerability. Please upgrade to a patched version. See https://nextjs.org/blog/security-update-2025-12-11 for more details.
- hasBin: true
- peerDependencies:
- '@opentelemetry/api': ^1.1.0
- '@playwright/test': ^1.41.2
- react: ^18.2.0
- react-dom: ^18.2.0
- sass: ^1.3.0
- peerDependenciesMeta:
- '@opentelemetry/api':
- optional: true
- '@playwright/test':
- optional: true
- sass:
- optional: true
-
node-abort-controller@3.1.1:
resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
@@ -8091,18 +8307,13 @@ packages:
node-releases@2.0.18:
resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
+ node-releases@2.0.27:
+ resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
+
nodemailer@7.0.12:
resolution: {integrity: sha512-H+rnK5bX2Pi/6ms3sN4/jRQvYSMltV6vqup/0SFOrxYYY/qoNvhXPlYq3e+Pm9RFJRwrMGbMIwi81M4dxpomhA==}
engines: {node: '>=6.0.0'}
- non-layered-tidy-tree-layout@2.0.2:
- resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==}
-
- nopt@7.2.0:
- resolution: {integrity: sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==}
- engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
- hasBin: true
-
normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
@@ -8110,10 +8321,6 @@ packages:
notepack.io@3.0.1:
resolution: {integrity: sha512-TKC/8zH5pXIAMVQio2TvVDTtPRX+DJPHDqjRbxogtFiByHyzKmy96RA0JtCQJ+WouyyL4A10xomQzgbUT+1jCg==}
- npm-package-arg@11.0.1:
- resolution: {integrity: sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==}
- engines: {node: ^16.14.0 || >=18.0.0}
-
npm-run-path@4.0.1:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
@@ -8124,18 +8331,23 @@ packages:
nwsapi@2.2.16:
resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==}
- nx@20.4.5:
- resolution: {integrity: sha512-3NQ1rorNL808cVxZR+r7W5sS/9/Zxr4FjcyneKFujEOc7nK3BrtQwIYyp6Neyk6LHi3pOpqY5syU4kPsrAGodw==}
+ nx@22.5.0:
+ resolution: {integrity: sha512-GOHhDHXvuscD28Hpj1bP38oVrCgZ/+5UWjA8R/VkpbtkfMHgRZ0uHlfKLYXQAZIsjmTq7Tr+e4QchJt0e76n0w==}
hasBin: true
peerDependencies:
- '@swc-node/register': ^1.8.0
- '@swc/core': ^1.3.85
+ '@swc-node/register': 1.11.1
+ '@swc/core': 1.15.8
peerDependenciesMeta:
'@swc-node/register':
optional: true
'@swc/core':
optional: true
+ nypm@0.6.2:
+ resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==}
+ engines: {node: ^14.16.0 || >=16.10.0}
+ hasBin: true
+
oauth@0.10.0:
resolution: {integrity: sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q==}
@@ -8193,8 +8405,9 @@ packages:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
- open-color@1.9.1:
- resolution: {integrity: sha512-vCseG/EQ6/RcvxhUcGJiHViOgrtz4x0XbZepXvKik66TMGkvbmjeJrKFyBEx6daG5rNyyd14zYXhz0hZVwQFOw==}
+ onetime@7.0.0:
+ resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
+ engines: {node: '>=18'}
open@8.4.2:
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
@@ -8204,7 +8417,7 @@ packages:
resolution: {integrity: sha512-qqjzHls7F5xkXNGy9P1Ei1rorI5LWupUUFWP66zPU8FlZbiITX8SFcHMKNZg/NATJ0LpIZcMUFxSwQmdeQPwSw==}
hasBin: true
peerDependencies:
- ws: ^8.18.0
+ ws: 8.19.0
zod: ^3.25 || ^4.0
peerDependenciesMeta:
ws:
@@ -8233,13 +8446,13 @@ packages:
resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
engines: {node: '>=10'}
+ ora@8.2.0:
+ resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==}
+ engines: {node: '>=18'}
+
orderedmap@2.1.1:
resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==}
- os-tmpdir@1.0.2:
- resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
- engines: {node: '>=0.10.0'}
-
otpauth@9.4.1:
resolution: {integrity: sha512-+iVvys36CFsyXEqfNftQm1II7SW23W1wx9RwNk0Cd97lbvorqAhBDksb/0bYry087QMxjiuBS0wokdoZ0iUeAw==}
@@ -8359,10 +8572,6 @@ packages:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
- path-scurry@2.0.0:
- resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
- engines: {node: 20 || >=22}
-
path-to-regexp@8.3.0:
resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==}
@@ -8389,23 +8598,23 @@ packages:
perfect-freehand@1.2.0:
resolution: {integrity: sha512-h/0ikF1M3phW7CwpZ5MMvKnfpHficWoOEyr//KVNTxV4F6deRK1eYMtHyBKEAKFK0aXIEUK9oBvlF6PNXMDsAw==}
- pg-cloudflare@1.2.7:
- resolution: {integrity: sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==}
+ pg-cloudflare@1.3.0:
+ resolution: {integrity: sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==}
- pg-connection-string@2.9.1:
- resolution: {integrity: sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==}
+ pg-connection-string@2.11.0:
+ resolution: {integrity: sha512-kecgoJwhOpxYU21rZjULrmrBJ698U2RxXofKVzOn5UDj61BPj/qMb7diYUR1nLScCDbrztQFl1TaQZT0t1EtzQ==}
pg-int8@1.0.1:
resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
engines: {node: '>=4.0.0'}
- pg-pool@3.10.1:
- resolution: {integrity: sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==}
+ pg-pool@3.11.0:
+ resolution: {integrity: sha512-MJYfvHwtGp870aeusDh+hg9apvOe2zmpZJpyt+BMtzUWlVqbhFmMK6bOBXLBUPd7iRtIF9fZplDc7KrPN3PN7w==}
peerDependencies:
pg: '>=8.0'
- pg-protocol@1.10.3:
- resolution: {integrity: sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==}
+ pg-protocol@1.11.0:
+ resolution: {integrity: sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==}
pg-tsquery@8.4.2:
resolution: {integrity: sha512-waJSlBIKE+shDhuDpuQglTH6dG5zakDhnrnxu8XB8V5c7yoDSuy4pOxY6t2dyoxTjaKMcMmlByJN7n9jx9eqMA==}
@@ -8434,12 +8643,6 @@ packages:
pica@7.1.1:
resolution: {integrity: sha512-WY73tMvNzXWEld2LicT9Y260L43isrZ85tPuqRyvtkljSDLmnNFQmZICt4xUJMVulmcc6L9O7jbBrtx3DOz/YQ==}
- picocolors@1.0.0:
- resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
-
- picocolors@1.0.1:
- resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
-
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -8479,8 +8682,8 @@ packages:
resolution: {integrity: sha512-0zZC2ygfdqvqK8zJIr1e+wT1T/L+LF6qvqvbzEQ6tiMAoTqEVK9a1K3YRu8HEUvGEvNqZyPJTtb2sNIoTkB83w==}
hasBin: true
- pirates@4.0.6:
- resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
+ pirates@4.0.7:
+ resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
engines: {node: '>= 6'}
pkg-dir@4.2.0:
@@ -8556,10 +8759,6 @@ packages:
peerDependencies:
postcss: ^8.2.1
- postcss@8.4.31:
- resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
- engines: {node: ^10 || ^12 || >=14}
-
postcss@8.4.49:
resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
engines: {node: ^10 || ^12 || >=14}
@@ -8572,8 +8771,8 @@ packages:
resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
engines: {node: '>=4'}
- postgres-bytea@1.0.0:
- resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==}
+ postgres-bytea@1.0.1:
+ resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==}
engines: {node: '>=0.10.0'}
postgres-date@1.0.7:
@@ -8588,22 +8787,14 @@ packages:
resolution: {integrity: sha512-d+JFcLM17njZaOLkv6SCev7uoLaBtfK86vMUXhW1Z4glPWh4jozno9APvW/XKFJ3CCxVoC7OL38BqRydtu5nGg==}
engines: {node: '>=12'}
- posthog-js@1.255.1:
- resolution: {integrity: sha512-KMh0o9MhORhEZVjXpktXB5rJ8PfDk+poqBoTSoLzWgNjhJf6D8jcyB9jUMA6vVPfn4YeepVX5NuclDRqOwr5Mw==}
- peerDependencies:
- '@rrweb/types': 2.0.0-alpha.17
- rrweb-snapshot: 2.0.0-alpha.17
- peerDependenciesMeta:
- '@rrweb/types':
- optional: true
- rrweb-snapshot:
- optional: true
+ posthog-js@1.345.5:
+ resolution: {integrity: sha512-Hplt/aRD3DQLTQl3NxmS7V0jZPF18nnKJ4rST0qinz/6tXNCMemYqOVb4C/HYAXXWrtVVzGSJeNCNKvECFHHoQ==}
postmark@4.0.5:
resolution: {integrity: sha512-nerZdd3TwOH4CgGboZnlUM/q7oZk0EqpZgJL+Y3Nup8kHeaukxouQ6JcFF3EJEijc4QbuNv1TefGhboAKtf/SQ==}
- preact@10.26.9:
- resolution: {integrity: sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==}
+ preact@10.28.3:
+ resolution: {integrity: sha512-tCmoRkPQLpBeWzpmbhryairGnhW9tKV6c6gr/w+RhoRoKEJwsjzipwp//1oCpGPOchvSLaAPlpcJi9MwMmoPyA==}
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
@@ -8619,18 +8810,19 @@ packages:
engines: {node: '>=14'}
hasBin: true
- pretty-format@29.7.0:
- resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ prettier@3.8.1:
+ resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==}
+ engines: {node: '>=14'}
+ hasBin: true
- prismjs@1.29.0:
- resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
+ pretty-format@30.2.0:
+ resolution: {integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ prismjs@1.30.0:
+ resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==}
engines: {node: '>=6'}
- proc-log@3.0.0:
- resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==}
- engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-
process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
@@ -8705,8 +8897,9 @@ packages:
prosemirror-view@1.40.0:
resolution: {integrity: sha512-2G3svX0Cr1sJjkD/DYWSe3cfV5VPVTBOxI9XQEGWJDFEpsZb/gh4MV29ctv+OJx2RFX4BLt09i+6zaGM/ldkCw==}
- proto-list@1.2.4:
- resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
+ protobufjs@7.5.4:
+ resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==}
+ engines: {node: '>=12.0.0'}
proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
@@ -8725,8 +8918,8 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
- pure-rand@6.1.0:
- resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==}
+ pure-rand@7.0.1:
+ resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==}
pwacompat@2.0.17:
resolution: {integrity: sha512-6Du7IZdIy7cHiv7AhtDy4X2QRM8IAD5DII69mt5qWibC2d15ZU8DmBG1WdZKekG11cChSu4zkSUGPF9sweOl6w==}
@@ -8736,19 +8929,35 @@ packages:
engines: {node: '>=10.13.0'}
hasBin: true
- qs@6.12.0:
- resolution: {integrity: sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==}
+ qs@6.14.2:
+ resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==}
engines: {node: '>=0.6'}
quansync@0.2.11:
resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
+ query-selector-shadow-dom@1.0.1:
+ resolution: {integrity: sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==}
+
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
quick-format-unescaped@4.0.4:
resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
+ radix-ui@1.4.3:
+ resolution: {integrity: sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA==}
+ 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
+
randombytes@2.1.0:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
@@ -8796,9 +9005,9 @@ packages:
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- react-email@3.0.2:
- resolution: {integrity: sha512-R7Doynb6NbnDvHx+9dWxkiWN2eaq9hj4MxRdkS94cVD/WDaIzESSLm62GtAAyLJ65xA2ROJydFlcYsDq4hGi4Q==}
- engines: {node: '>=18.0.0'}
+ react-email@5.2.8:
+ resolution: {integrity: sha512-noPcnpl78vsyBnhiKCzxK9Mdsv7ncAYI80osS5kbMgaKH2IgPtPab5BzLJX6INXuiNk5ju+9YRnCjPoPTOHZjA==}
+ engines: {node: '>=20.0.0'}
hasBin: true
react-error-boundary@4.1.2:
@@ -8830,8 +9039,8 @@ packages:
react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
- react-is@18.2.0:
- resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
+ react-is@18.3.1:
+ resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
react-number-format@5.4.4:
resolution: {integrity: sha512-wOmoNZoOpvMminhifQYiYSTCLUDOiUbBunrMrMjA+dV52sY+vck1S4UhR6PkgnoCquvvMSeJjErXZ4qSaWCliA==}
@@ -8839,9 +9048,6 @@ packages:
react: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- react-promise-suspense@0.3.4:
- resolution: {integrity: sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==}
-
react-refresh@0.18.0:
resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==}
engines: {node: '>=0.10.0'}
@@ -8856,16 +9062,6 @@ packages:
'@types/react':
optional: true
- react-remove-scroll@2.6.3:
- resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==}
- 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-remove-scroll@2.7.2:
resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==}
engines: {node: '>=10'}
@@ -8893,11 +9089,6 @@ packages:
react-dom:
optional: true
- react-split@2.0.14:
- resolution: {integrity: sha512-bKWydgMgaKTg/2JGQnaJPg51T6dmumTWZppFgEbbY0Fbme0F5TuatAScCLaqommbGQQf/ZT1zaejuPDriscISA==}
- peerDependencies:
- react: '*'
-
react-style-singleton@2.2.3:
resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==}
engines: {node: '>=10'}
@@ -9030,10 +9221,6 @@ packages:
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
- resolve.exports@2.0.2:
- resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==}
- engines: {node: '>=10'}
-
resolve.exports@2.0.3:
resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==}
engines: {node: '>=10'}
@@ -9050,6 +9237,10 @@ packages:
resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
engines: {node: '>=8'}
+ restore-cursor@5.1.0:
+ resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
+ engines: {node: '>=18'}
+
ret@0.5.0:
resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==}
engines: {node: '>=10'}
@@ -9062,14 +9253,12 @@ packages:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ rfc6902@5.1.2:
+ resolution: {integrity: sha512-zxcb+PWlE8PwX0tiKE6zP97THQ8/lHmeiwucRrJ3YFupWEmp25RmFSlB1dNTqjkovwqG4iq+u1gzJMBS3um8mA==}
+
rfdc@1.3.1:
resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==}
- rimraf@3.0.2:
- resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
- deprecated: Rimraf versions prior to v4 are no longer supported
- hasBin: true
-
robust-predicates@3.0.2:
resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
@@ -9105,10 +9294,6 @@ packages:
rxjs@7.8.2:
resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
- sade@1.8.1:
- resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
- engines: {node: '>=6'}
-
safe-array-concat@1.1.2:
resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==}
engines: {node: '>=0.4'}
@@ -9144,6 +9329,10 @@ packages:
sax@1.4.1:
resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
+ sax@1.4.4:
+ resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==}
+ engines: {node: '>=11.0.0'}
+
saxes@6.0.0:
resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
engines: {node: '>=v12.22.7'}
@@ -9155,8 +9344,8 @@ packages:
resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
engines: {node: '>= 10.13.0'}
- schema-utils@4.3.0:
- resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==}
+ schema-utils@4.3.3:
+ resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==}
engines: {node: '>= 10.13.0'}
scimmy@1.3.5:
@@ -9213,10 +9402,6 @@ packages:
shallowequal@1.1.0:
resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==}
- sharp@0.34.3:
- resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -9237,10 +9422,26 @@ packages:
engines: {node: '>=4'}
hasBin: true
+ side-channel-list@1.0.0:
+ resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-map@1.0.1:
+ resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-weakmap@1.0.2:
+ resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
+ engines: {node: '>= 0.4'}
+
side-channel@1.0.6:
resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
engines: {node: '>= 0.4'}
+ side-channel@1.1.0:
+ resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
+ engines: {node: '>= 0.4'}
+
signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
@@ -9248,9 +9449,6 @@ packages:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
- simple-swizzle@0.2.4:
- resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==}
-
simple-wcswidth@1.1.2:
resolution: {integrity: sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==}
@@ -9275,10 +9473,6 @@ packages:
resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==}
engines: {node: '>=10.0.0'}
- socket.io@4.8.0:
- resolution: {integrity: sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==}
- engines: {node: '>=10.2.0'}
-
socket.io@4.8.3:
resolution: {integrity: sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A==}
engines: {node: '>=10.2.0'}
@@ -9307,9 +9501,6 @@ packages:
resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
engines: {node: '>= 8'}
- split.js@1.6.5:
- resolution: {integrity: sha512-mPTnGCiS/RiuTNsVhCm9De9cCAUsrNFFviRbADdKiiV+Kk8HKp/0fWu7Kr8pi3/yBmsqLFHuXGT9UUZ+CNLwFw==}
-
split2@4.2.0:
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
engines: {node: '>= 10.x'}
@@ -9328,13 +9519,13 @@ packages:
resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
engines: {node: '>= 0.8'}
+ stdin-discarder@0.2.2:
+ resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==}
+ engines: {node: '>=18'}
+
stream-browserify@3.0.0:
resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==}
- streamsearch@1.1.0:
- resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
- engines: {node: '>=10.0.0'}
-
strict-event-emitter-types@2.0.0:
resolution: {integrity: sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA==}
@@ -9350,6 +9541,10 @@ packages:
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
engines: {node: '>=12'}
+ string-width@7.2.0:
+ resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+ engines: {node: '>=18'}
+
string.prototype.matchall@4.0.11:
resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==}
engines: {node: '>= 0.4'}
@@ -9406,25 +9601,18 @@ packages:
resolution: {integrity: sha512-kcyeAkDFjGsVl17FqnG7q/+xIjt0ZjOo9Dm+q8deAvs2Xe4iAHrhxyoP4etUVFc+/LZJANjIPVR+ZOnt9hr/Ug==}
engines: {node: '>=12.*'}
- strnum@1.0.5:
- resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==}
+ strnum@2.1.2:
+ resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==}
strtok3@10.3.4:
resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==}
engines: {node: '>=18'}
- styled-jsx@5.1.1:
- resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
- engines: {node: '>= 12.0.0'}
- peerDependencies:
- '@babel/core': '*'
- babel-plugin-macros: '*'
- react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
- peerDependenciesMeta:
- '@babel/core':
- optional: true
- babel-plugin-macros:
- optional: true
+ stubborn-fs@2.0.0:
+ resolution: {integrity: sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==}
+
+ stubborn-utils@1.0.2:
+ resolution: {integrity: sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==}
stylis@4.3.6:
resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==}
@@ -9435,15 +9623,13 @@ packages:
peerDependencies:
postcss: ^8.3.3
- superagent@9.0.2:
- resolution: {integrity: sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==}
+ superagent@10.3.0:
+ resolution: {integrity: sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ==}
engines: {node: '>=14.18.0'}
- deprecated: Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net
- supertest@7.0.0:
- resolution: {integrity: sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==}
+ supertest@7.2.2:
+ resolution: {integrity: sha512-oK8WG9diS3DlhdUkcFn4tkNIiIbBx9lI2ClF8K+b2/m8Eyv47LSawxUzZQSNKUrVb2KsqeTDCcjAAVPYaSLVTA==}
engines: {node: '>=14.18.0'}
- deprecated: Please upgrade to supertest v7.1.3+, see release notes at https://github.com/forwardemail/supertest/releases/tag/v7.1.3 - maintenance is supported by Forward Email @ https://forwardemail.net
supports-color@5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
@@ -9468,19 +9654,34 @@ packages:
symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
+ synckit@0.11.12:
+ resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+
tabbable@6.2.0:
resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
+ tagged-tag@1.0.0:
+ resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==}
+ engines: {node: '>=20'}
+
+ tailwindcss@4.1.18:
+ resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==}
+
tapable@2.2.1:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
engines: {node: '>=6'}
+ tapable@2.3.0:
+ resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
+ engines: {node: '>=6'}
+
tar-stream@2.2.0:
resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
engines: {node: '>=6'}
- terser-webpack-plugin@5.3.11:
- resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==}
+ terser-webpack-plugin@5.3.16:
+ resolution: {integrity: sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==}
engines: {node: '>= 10.13.0'}
peerDependencies:
'@swc/core': '*'
@@ -9513,10 +9714,6 @@ packages:
tinyexec@1.0.1:
resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
- tinyglobby@0.2.12:
- resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==}
- engines: {node: '>=12.0.0'}
-
tinyglobby@0.2.15:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
@@ -9534,21 +9731,13 @@ packages:
tmp-promise@3.0.3:
resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==}
- tmp@0.0.33:
- resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
- engines: {node: '>=0.6.0'}
-
- tmp@0.2.1:
- resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==}
- engines: {node: '>=8.17.0'}
+ tmp@0.2.5:
+ resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==}
+ engines: {node: '>=14.14'}
tmpl@1.0.5:
resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
- to-fast-properties@2.0.0:
- resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
- engines: {node: '>=4'}
-
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
@@ -9603,17 +9792,18 @@ packages:
resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
engines: {node: '>=6.10'}
- ts-jest@29.2.5:
- resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==}
+ ts-jest@29.4.6:
+ resolution: {integrity: sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA==}
engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
'@babel/core': '>=7.0.0-beta.0 <8'
- '@jest/transform': ^29.0.0
- '@jest/types': ^29.0.0
- babel-jest: ^29.0.0
+ '@jest/transform': ^29.0.0 || ^30.0.0
+ '@jest/types': ^29.0.0 || ^30.0.0
+ babel-jest: ^29.0.0 || ^30.0.0
esbuild: '*'
- jest: ^29.0.0
+ jest: ^29.0.0 || ^30.0.0
+ jest-util: ^29.0.0 || ^30.0.0
typescript: '>=4.3 <6'
peerDependenciesMeta:
'@babel/core':
@@ -9626,28 +9816,16 @@ packages:
optional: true
esbuild:
optional: true
+ jest-util:
+ optional: true
- ts-loader@9.5.2:
- resolution: {integrity: sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==}
+ ts-loader@9.5.4:
+ resolution: {integrity: sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==}
engines: {node: '>=12.0.0'}
peerDependencies:
typescript: '*'
webpack: ^5.0.0
- ts-node@10.9.1:
- resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
- hasBin: true
- peerDependencies:
- '@swc/core': '>=1.2.50'
- '@swc/wasm': '>=1.2.50'
- '@types/node': '*'
- typescript: '>=2.7'
- peerDependenciesMeta:
- '@swc/core':
- optional: true
- '@swc/wasm':
- optional: true
-
ts-node@10.9.2:
resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
hasBin: true
@@ -9673,9 +9851,6 @@ packages:
tseep@1.3.1:
resolution: {integrity: sha512-ZPtfk1tQnZVyr7BPtbJ93qaAh2lZuIOpTMjhrYa4XctT8xe7t4SAW9LIxrySDuYMsfNNayE51E/WNGrNVgVicQ==}
- tslib@2.8.0:
- resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
-
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
@@ -9707,6 +9882,10 @@ packages:
resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
engines: {node: '>=16'}
+ type-fest@5.4.4:
+ resolution: {integrity: sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==}
+ engines: {node: '>=20'}
+
typed-array-buffer@1.0.2:
resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==}
engines: {node: '>= 0.4'}
@@ -9750,6 +9929,11 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
typesense@2.1.0:
resolution: {integrity: sha512-a/IRTL+dRXlpRDU4UodyGj8hl5xBz3nKihVRd/KfSFAfFPGcpdX6lxIgwdXy3O6VLNNiEsN8YwIsPHQPVT0vNw==}
engines: {node: '>=18'}
@@ -9762,6 +9946,11 @@ packages:
ufo@1.6.1:
resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
+ uglify-js@3.19.3:
+ resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
+ engines: {node: '>=0.8.0'}
+ hasBin: true
+
uid2@0.0.4:
resolution: {integrity: sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==}
@@ -9777,6 +9966,10 @@ packages:
resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==}
engines: {node: '>=18'}
+ uint8array-extras@1.5.0:
+ resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==}
+ engines: {node: '>=18'}
+
unbox-primitive@1.0.2:
resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
@@ -9809,19 +10002,25 @@ packages:
resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
engines: {node: '>=4'}
- unist-util-stringify-position@3.0.3:
- resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
-
universalify@2.0.1:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
+ unrs-resolver@1.11.1:
+ resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
+
update-browserslist-db@1.1.1:
resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
+ update-browserslist-db@1.2.3:
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
@@ -9896,15 +10095,6 @@ packages:
resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
hasBin: true
- uuid@9.0.1:
- resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
- hasBin: true
-
- uvu@0.5.6:
- resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==}
- engines: {node: '>=8'}
- hasBin: true
-
v8-compile-cache-lib@3.0.1:
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
@@ -9912,10 +10102,6 @@ packages:
resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==}
engines: {node: '>=10.12.0'}
- validate-npm-package-name@5.0.0:
- resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==}
- engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-
validator@13.15.23:
resolution: {integrity: sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==}
engines: {node: '>= 0.10'}
@@ -9998,18 +10184,15 @@ packages:
walker@1.0.8:
resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
- watchpack@2.4.1:
- resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==}
+ watchpack@2.5.1:
+ resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==}
engines: {node: '>=10.13.0'}
wcwidth@1.0.1:
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
- web-vitals@4.2.4:
- resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==}
-
- web-worker@1.5.0:
- resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==}
+ web-vitals@5.1.0:
+ resolution: {integrity: sha512-ArI3kx5jI0atlTtmV0fWU3fjpLmq/nD3Zr1iFFlJLaqa5wLBkUSzINwBPySCX/8jRyjlmy1Volw1kz1g9XE4Jg==}
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
@@ -10022,12 +10205,12 @@ packages:
resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==}
engines: {node: '>=6'}
- webpack-sources@3.2.3:
- resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
+ webpack-sources@3.3.3:
+ resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==}
engines: {node: '>=10.13.0'}
- webpack@5.98.0:
- resolution: {integrity: sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==}
+ webpack@5.104.1:
+ resolution: {integrity: sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==}
engines: {node: '>=10.13.0'}
hasBin: true
peerDependencies:
@@ -10066,6 +10249,9 @@ packages:
whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+ when-exit@2.1.5:
+ resolution: {integrity: sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==}
+
which-boxed-primitive@1.1.0:
resolution: {integrity: sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng==}
engines: {node: '>= 0.4'}
@@ -10094,6 +10280,9 @@ packages:
resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==}
engines: {node: '>=8'}
+ wordwrap@1.0.0:
+ resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+
wrap-ansi@6.2.0:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}
@@ -10109,33 +10298,9 @@ packages:
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
- write-file-atomic@4.0.2:
- resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
- engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
-
- ws@8.11.0:
- resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: ^5.0.2
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
-
- ws@8.17.1:
- resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: '>=5.0.2'
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
+ write-file-atomic@5.0.1:
+ resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
ws@8.19.0:
resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==}
@@ -10283,11 +10448,19 @@ packages:
resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==}
engines: {node: '>=18'}
+ yoctocolors-cjs@2.1.3:
+ resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==}
+ engines: {node: '>=18'}
+
+ yoctocolors@2.1.2:
+ resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==}
+ engines: {node: '>=18'}
+
zod@3.25.76:
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
- zod@4.3.5:
- resolution: {integrity: sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==}
+ zod@4.3.6:
+ resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==}
zustand@4.5.6:
resolution: {integrity: sha512-ibr/n1hBzLLj5Y+yUcU7dYw8p6WnIVzdJbnX+1YpaScvZVF2ziugqHs+LAmHw4lWO9c/zRj+K1ncgWDQuthEdQ==}
@@ -10310,47 +10483,42 @@ snapshots:
'@adobe/css-tools@4.3.3': {}
- '@ai-sdk/gateway@3.0.16(zod@4.3.5)':
+ '@ai-sdk/gateway@3.0.46(zod@4.3.6)':
dependencies:
- '@ai-sdk/provider': 3.0.4
- '@ai-sdk/provider-utils': 4.0.8(zod@4.3.5)
+ '@ai-sdk/provider': 3.0.8
+ '@ai-sdk/provider-utils': 4.0.15(zod@4.3.6)
'@vercel/oidc': 3.1.0
- zod: 4.3.5
+ zod: 4.3.6
- '@ai-sdk/google@3.0.10(zod@4.3.5)':
+ '@ai-sdk/google@3.0.29(zod@4.3.6)':
dependencies:
- '@ai-sdk/provider': 3.0.4
- '@ai-sdk/provider-utils': 4.0.8(zod@4.3.5)
- zod: 4.3.5
+ '@ai-sdk/provider': 3.0.8
+ '@ai-sdk/provider-utils': 4.0.15(zod@4.3.6)
+ zod: 4.3.6
- '@ai-sdk/openai-compatible@2.0.13(zod@4.3.5)':
+ '@ai-sdk/openai-compatible@2.0.30(zod@4.3.6)':
dependencies:
- '@ai-sdk/provider': 3.0.4
- '@ai-sdk/provider-utils': 4.0.8(zod@4.3.5)
- zod: 4.3.5
+ '@ai-sdk/provider': 3.0.8
+ '@ai-sdk/provider-utils': 4.0.15(zod@4.3.6)
+ zod: 4.3.6
- '@ai-sdk/openai@3.0.12(zod@4.3.5)':
+ '@ai-sdk/openai@3.0.29(zod@4.3.6)':
dependencies:
- '@ai-sdk/provider': 3.0.4
- '@ai-sdk/provider-utils': 4.0.8(zod@4.3.5)
- zod: 4.3.5
+ '@ai-sdk/provider': 3.0.8
+ '@ai-sdk/provider-utils': 4.0.15(zod@4.3.6)
+ zod: 4.3.6
- '@ai-sdk/provider-utils@4.0.8(zod@4.3.5)':
+ '@ai-sdk/provider-utils@4.0.15(zod@4.3.6)':
dependencies:
- '@ai-sdk/provider': 3.0.4
+ '@ai-sdk/provider': 3.0.8
'@standard-schema/spec': 1.1.0
eventsource-parser: 3.0.6
- zod: 4.3.5
+ zod: 4.3.6
- '@ai-sdk/provider@3.0.4':
+ '@ai-sdk/provider@3.0.8':
dependencies:
json-schema: 0.4.0
- '@ampproject/remapping@2.3.0':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.5
- '@jridgewell/trace-mapping': 0.3.25
-
'@angular-devkit/core@19.1.7(chokidar@4.0.3)':
dependencies:
ajv: 8.17.1
@@ -10362,11 +10530,22 @@ snapshots:
optionalDependencies:
chokidar: 4.0.3
- '@angular-devkit/schematics-cli@19.1.7(@types/node@22.13.4)(chokidar@4.0.3)':
+ '@angular-devkit/core@19.2.19(chokidar@4.0.3)':
dependencies:
- '@angular-devkit/core': 19.1.7(chokidar@4.0.3)
- '@angular-devkit/schematics': 19.1.7(chokidar@4.0.3)
- '@inquirer/prompts': 7.2.1(@types/node@22.13.4)
+ ajv: 8.17.1
+ ajv-formats: 3.0.1(ajv@8.17.1)
+ jsonc-parser: 3.3.1
+ picomatch: 4.0.2
+ rxjs: 7.8.1
+ source-map: 0.7.4
+ optionalDependencies:
+ chokidar: 4.0.3
+
+ '@angular-devkit/schematics-cli@19.2.19(@types/node@22.13.4)(chokidar@4.0.3)':
+ dependencies:
+ '@angular-devkit/core': 19.2.19(chokidar@4.0.3)
+ '@angular-devkit/schematics': 19.2.19(chokidar@4.0.3)
+ '@inquirer/prompts': 7.3.2(@types/node@22.13.4)
ansi-colors: 4.1.3
symbol-observable: 4.0.0
yargs-parser: 21.1.1
@@ -10384,6 +10563,16 @@ snapshots:
transitivePeerDependencies:
- chokidar
+ '@angular-devkit/schematics@19.2.19(chokidar@4.0.3)':
+ dependencies:
+ '@angular-devkit/core': 19.2.19(chokidar@4.0.3)
+ jsonc-parser: 3.3.1
+ magic-string: 0.30.17
+ ora: 5.4.1
+ rxjs: 7.8.1
+ transitivePeerDependencies:
+ - chokidar
+
'@antfu/install-pkg@1.1.0':
dependencies:
package-manager-detector: 1.3.0
@@ -10402,20 +10591,20 @@ snapshots:
'@aws-crypto/crc32@5.2.0':
dependencies:
'@aws-crypto/util': 5.2.0
- '@aws-sdk/types': 3.734.0
+ '@aws-sdk/types': 3.973.1
tslib: 2.8.1
'@aws-crypto/crc32c@5.2.0':
dependencies:
'@aws-crypto/util': 5.2.0
- '@aws-sdk/types': 3.734.0
+ '@aws-sdk/types': 3.973.1
tslib: 2.8.1
'@aws-crypto/sha1-browser@5.2.0':
dependencies:
'@aws-crypto/supports-web-crypto': 5.2.0
'@aws-crypto/util': 5.2.0
- '@aws-sdk/types': 3.734.0
+ '@aws-sdk/types': 3.973.1
'@aws-sdk/util-locate-window': 3.535.0
'@smithy/util-utf8': 2.3.0
tslib: 2.8.1
@@ -10425,7 +10614,7 @@ snapshots:
'@aws-crypto/sha256-js': 5.2.0
'@aws-crypto/supports-web-crypto': 5.2.0
'@aws-crypto/util': 5.2.0
- '@aws-sdk/types': 3.734.0
+ '@aws-sdk/types': 3.973.1
'@aws-sdk/util-locate-window': 3.535.0
'@smithy/util-utf8': 2.3.0
tslib: 2.8.1
@@ -10433,7 +10622,7 @@ snapshots:
'@aws-crypto/sha256-js@5.2.0':
dependencies:
'@aws-crypto/util': 5.2.0
- '@aws-sdk/types': 3.734.0
+ '@aws-sdk/types': 3.973.1
tslib: 2.8.1
'@aws-crypto/supports-web-crypto@5.2.0':
@@ -10442,514 +10631,476 @@ snapshots:
'@aws-crypto/util@5.2.0':
dependencies:
- '@aws-sdk/types': 3.734.0
+ '@aws-sdk/types': 3.973.1
'@smithy/util-utf8': 2.3.0
tslib: 2.8.1
- '@aws-sdk/client-s3@3.701.0':
+ '@aws-sdk/client-s3@3.982.0':
dependencies:
'@aws-crypto/sha1-browser': 5.2.0
'@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0)
- '@aws-sdk/client-sts': 3.699.0
- '@aws-sdk/core': 3.696.0
- '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0)
- '@aws-sdk/middleware-bucket-endpoint': 3.696.0
- '@aws-sdk/middleware-expect-continue': 3.696.0
- '@aws-sdk/middleware-flexible-checksums': 3.701.0
- '@aws-sdk/middleware-host-header': 3.696.0
- '@aws-sdk/middleware-location-constraint': 3.696.0
- '@aws-sdk/middleware-logger': 3.696.0
- '@aws-sdk/middleware-recursion-detection': 3.696.0
- '@aws-sdk/middleware-sdk-s3': 3.696.0
- '@aws-sdk/middleware-ssec': 3.696.0
- '@aws-sdk/middleware-user-agent': 3.696.0
- '@aws-sdk/region-config-resolver': 3.696.0
- '@aws-sdk/signature-v4-multi-region': 3.696.0
- '@aws-sdk/types': 3.696.0
- '@aws-sdk/util-endpoints': 3.696.0
- '@aws-sdk/util-user-agent-browser': 3.696.0
- '@aws-sdk/util-user-agent-node': 3.696.0
- '@aws-sdk/xml-builder': 3.696.0
- '@smithy/config-resolver': 3.0.13
- '@smithy/core': 2.5.7
- '@smithy/eventstream-serde-browser': 3.0.14
- '@smithy/eventstream-serde-config-resolver': 3.0.11
- '@smithy/eventstream-serde-node': 3.0.13
- '@smithy/fetch-http-handler': 4.1.3
- '@smithy/hash-blob-browser': 3.1.10
- '@smithy/hash-node': 3.0.11
- '@smithy/hash-stream-node': 3.1.10
- '@smithy/invalid-dependency': 3.0.11
- '@smithy/md5-js': 3.0.11
- '@smithy/middleware-content-length': 3.0.13
- '@smithy/middleware-endpoint': 3.2.8
- '@smithy/middleware-retry': 3.0.34
- '@smithy/middleware-serde': 3.0.11
- '@smithy/middleware-stack': 3.0.11
- '@smithy/node-config-provider': 3.1.12
- '@smithy/node-http-handler': 3.3.3
- '@smithy/protocol-http': 4.1.8
- '@smithy/smithy-client': 3.7.0
- '@smithy/types': 3.7.2
- '@smithy/url-parser': 3.0.11
- '@smithy/util-base64': 3.0.0
- '@smithy/util-body-length-browser': 3.0.0
- '@smithy/util-body-length-node': 3.0.0
- '@smithy/util-defaults-mode-browser': 3.0.34
- '@smithy/util-defaults-mode-node': 3.0.34
- '@smithy/util-endpoints': 2.1.7
- '@smithy/util-middleware': 3.0.11
- '@smithy/util-retry': 3.0.11
- '@smithy/util-stream': 3.3.4
- '@smithy/util-utf8': 3.0.0
- '@smithy/util-waiter': 3.2.0
+ '@aws-sdk/core': 3.973.6
+ '@aws-sdk/credential-provider-node': 3.972.5
+ '@aws-sdk/middleware-bucket-endpoint': 3.972.3
+ '@aws-sdk/middleware-expect-continue': 3.972.3
+ '@aws-sdk/middleware-flexible-checksums': 3.972.4
+ '@aws-sdk/middleware-host-header': 3.972.3
+ '@aws-sdk/middleware-location-constraint': 3.972.3
+ '@aws-sdk/middleware-logger': 3.972.3
+ '@aws-sdk/middleware-recursion-detection': 3.972.3
+ '@aws-sdk/middleware-sdk-s3': 3.972.6
+ '@aws-sdk/middleware-ssec': 3.972.3
+ '@aws-sdk/middleware-user-agent': 3.972.6
+ '@aws-sdk/region-config-resolver': 3.972.3
+ '@aws-sdk/signature-v4-multi-region': 3.982.0
+ '@aws-sdk/types': 3.973.1
+ '@aws-sdk/util-endpoints': 3.982.0
+ '@aws-sdk/util-user-agent-browser': 3.972.3
+ '@aws-sdk/util-user-agent-node': 3.972.4
+ '@smithy/config-resolver': 4.4.6
+ '@smithy/core': 3.22.1
+ '@smithy/eventstream-serde-browser': 4.2.8
+ '@smithy/eventstream-serde-config-resolver': 4.3.8
+ '@smithy/eventstream-serde-node': 4.2.8
+ '@smithy/fetch-http-handler': 5.3.9
+ '@smithy/hash-blob-browser': 4.2.9
+ '@smithy/hash-node': 4.2.8
+ '@smithy/hash-stream-node': 4.2.8
+ '@smithy/invalid-dependency': 4.2.8
+ '@smithy/md5-js': 4.2.8
+ '@smithy/middleware-content-length': 4.2.8
+ '@smithy/middleware-endpoint': 4.4.13
+ '@smithy/middleware-retry': 4.4.30
+ '@smithy/middleware-serde': 4.2.9
+ '@smithy/middleware-stack': 4.2.8
+ '@smithy/node-config-provider': 4.3.8
+ '@smithy/node-http-handler': 4.4.9
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/smithy-client': 4.11.2
+ '@smithy/types': 4.12.0
+ '@smithy/url-parser': 4.2.8
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-body-length-browser': 4.2.0
+ '@smithy/util-body-length-node': 4.2.1
+ '@smithy/util-defaults-mode-browser': 4.3.29
+ '@smithy/util-defaults-mode-node': 4.2.32
+ '@smithy/util-endpoints': 3.2.8
+ '@smithy/util-middleware': 4.2.8
+ '@smithy/util-retry': 4.2.8
+ '@smithy/util-stream': 4.5.11
+ '@smithy/util-utf8': 4.2.0
+ '@smithy/util-waiter': 4.2.8
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)':
+ '@aws-sdk/client-sso@3.982.0':
dependencies:
'@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/client-sts': 3.699.0
- '@aws-sdk/core': 3.696.0
- '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0)
- '@aws-sdk/middleware-host-header': 3.696.0
- '@aws-sdk/middleware-logger': 3.696.0
- '@aws-sdk/middleware-recursion-detection': 3.696.0
- '@aws-sdk/middleware-user-agent': 3.696.0
- '@aws-sdk/region-config-resolver': 3.696.0
- '@aws-sdk/types': 3.696.0
- '@aws-sdk/util-endpoints': 3.696.0
- '@aws-sdk/util-user-agent-browser': 3.696.0
- '@aws-sdk/util-user-agent-node': 3.696.0
- '@smithy/config-resolver': 3.0.13
- '@smithy/core': 2.5.7
- '@smithy/fetch-http-handler': 4.1.3
- '@smithy/hash-node': 3.0.11
- '@smithy/invalid-dependency': 3.0.11
- '@smithy/middleware-content-length': 3.0.13
- '@smithy/middleware-endpoint': 3.2.8
- '@smithy/middleware-retry': 3.0.34
- '@smithy/middleware-serde': 3.0.11
- '@smithy/middleware-stack': 3.0.11
- '@smithy/node-config-provider': 3.1.12
- '@smithy/node-http-handler': 3.3.3
- '@smithy/protocol-http': 4.1.8
- '@smithy/smithy-client': 3.7.0
- '@smithy/types': 3.7.2
- '@smithy/url-parser': 3.0.11
- '@smithy/util-base64': 3.0.0
- '@smithy/util-body-length-browser': 3.0.0
- '@smithy/util-body-length-node': 3.0.0
- '@smithy/util-defaults-mode-browser': 3.0.34
- '@smithy/util-defaults-mode-node': 3.0.34
- '@smithy/util-endpoints': 2.1.7
- '@smithy/util-middleware': 3.0.11
- '@smithy/util-retry': 3.0.11
- '@smithy/util-utf8': 3.0.0
+ '@aws-sdk/core': 3.973.6
+ '@aws-sdk/middleware-host-header': 3.972.3
+ '@aws-sdk/middleware-logger': 3.972.3
+ '@aws-sdk/middleware-recursion-detection': 3.972.3
+ '@aws-sdk/middleware-user-agent': 3.972.6
+ '@aws-sdk/region-config-resolver': 3.972.3
+ '@aws-sdk/types': 3.973.1
+ '@aws-sdk/util-endpoints': 3.982.0
+ '@aws-sdk/util-user-agent-browser': 3.972.3
+ '@aws-sdk/util-user-agent-node': 3.972.4
+ '@smithy/config-resolver': 4.4.6
+ '@smithy/core': 3.22.1
+ '@smithy/fetch-http-handler': 5.3.9
+ '@smithy/hash-node': 4.2.8
+ '@smithy/invalid-dependency': 4.2.8
+ '@smithy/middleware-content-length': 4.2.8
+ '@smithy/middleware-endpoint': 4.4.13
+ '@smithy/middleware-retry': 4.4.30
+ '@smithy/middleware-serde': 4.2.9
+ '@smithy/middleware-stack': 4.2.8
+ '@smithy/node-config-provider': 4.3.8
+ '@smithy/node-http-handler': 4.4.9
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/smithy-client': 4.11.2
+ '@smithy/types': 4.12.0
+ '@smithy/url-parser': 4.2.8
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-body-length-browser': 4.2.0
+ '@smithy/util-body-length-node': 4.2.1
+ '@smithy/util-defaults-mode-browser': 4.3.29
+ '@smithy/util-defaults-mode-node': 4.2.32
+ '@smithy/util-endpoints': 3.2.8
+ '@smithy/util-middleware': 4.2.8
+ '@smithy/util-retry': 4.2.8
+ '@smithy/util-utf8': 4.2.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/client-sso@3.696.0':
+ '@aws-sdk/core@3.973.6':
dependencies:
- '@aws-crypto/sha256-browser': 5.2.0
- '@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/core': 3.696.0
- '@aws-sdk/middleware-host-header': 3.696.0
- '@aws-sdk/middleware-logger': 3.696.0
- '@aws-sdk/middleware-recursion-detection': 3.696.0
- '@aws-sdk/middleware-user-agent': 3.696.0
- '@aws-sdk/region-config-resolver': 3.696.0
- '@aws-sdk/types': 3.696.0
- '@aws-sdk/util-endpoints': 3.696.0
- '@aws-sdk/util-user-agent-browser': 3.696.0
- '@aws-sdk/util-user-agent-node': 3.696.0
- '@smithy/config-resolver': 3.0.13
- '@smithy/core': 2.5.7
- '@smithy/fetch-http-handler': 4.1.3
- '@smithy/hash-node': 3.0.11
- '@smithy/invalid-dependency': 3.0.11
- '@smithy/middleware-content-length': 3.0.13
- '@smithy/middleware-endpoint': 3.2.8
- '@smithy/middleware-retry': 3.0.34
- '@smithy/middleware-serde': 3.0.11
- '@smithy/middleware-stack': 3.0.11
- '@smithy/node-config-provider': 3.1.12
- '@smithy/node-http-handler': 3.3.3
- '@smithy/protocol-http': 4.1.8
- '@smithy/smithy-client': 3.7.0
- '@smithy/types': 3.7.2
- '@smithy/url-parser': 3.0.11
- '@smithy/util-base64': 3.0.0
- '@smithy/util-body-length-browser': 3.0.0
- '@smithy/util-body-length-node': 3.0.0
- '@smithy/util-defaults-mode-browser': 3.0.34
- '@smithy/util-defaults-mode-node': 3.0.34
- '@smithy/util-endpoints': 2.1.7
- '@smithy/util-middleware': 3.0.11
- '@smithy/util-retry': 3.0.11
- '@smithy/util-utf8': 3.0.0
+ '@aws-sdk/types': 3.973.1
+ '@aws-sdk/xml-builder': 3.972.4
+ '@smithy/core': 3.22.1
+ '@smithy/node-config-provider': 4.3.8
+ '@smithy/property-provider': 4.2.8
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/signature-v4': 5.3.8
+ '@smithy/smithy-client': 4.11.2
+ '@smithy/types': 4.12.0
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-middleware': 4.2.8
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+
+ '@aws-sdk/crc64-nvme@3.972.0':
+ dependencies:
+ '@smithy/types': 4.12.0
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-env@3.972.4':
+ dependencies:
+ '@aws-sdk/core': 3.973.6
+ '@aws-sdk/types': 3.973.1
+ '@smithy/property-provider': 4.2.8
+ '@smithy/types': 4.12.0
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-http@3.972.6':
+ dependencies:
+ '@aws-sdk/core': 3.973.6
+ '@aws-sdk/types': 3.973.1
+ '@smithy/fetch-http-handler': 5.3.9
+ '@smithy/node-http-handler': 4.4.9
+ '@smithy/property-provider': 4.2.8
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/smithy-client': 4.11.2
+ '@smithy/types': 4.12.0
+ '@smithy/util-stream': 4.5.11
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-ini@3.972.4':
+ dependencies:
+ '@aws-sdk/core': 3.973.6
+ '@aws-sdk/credential-provider-env': 3.972.4
+ '@aws-sdk/credential-provider-http': 3.972.6
+ '@aws-sdk/credential-provider-login': 3.972.4
+ '@aws-sdk/credential-provider-process': 3.972.4
+ '@aws-sdk/credential-provider-sso': 3.972.4
+ '@aws-sdk/credential-provider-web-identity': 3.972.4
+ '@aws-sdk/nested-clients': 3.982.0
+ '@aws-sdk/types': 3.973.1
+ '@smithy/credential-provider-imds': 4.2.8
+ '@smithy/property-provider': 4.2.8
+ '@smithy/shared-ini-file-loader': 4.4.3
+ '@smithy/types': 4.12.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/client-sts@3.699.0':
+ '@aws-sdk/credential-provider-login@3.972.4':
dependencies:
- '@aws-crypto/sha256-browser': 5.2.0
- '@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0)
- '@aws-sdk/core': 3.696.0
- '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0)
- '@aws-sdk/middleware-host-header': 3.696.0
- '@aws-sdk/middleware-logger': 3.696.0
- '@aws-sdk/middleware-recursion-detection': 3.696.0
- '@aws-sdk/middleware-user-agent': 3.696.0
- '@aws-sdk/region-config-resolver': 3.696.0
- '@aws-sdk/types': 3.696.0
- '@aws-sdk/util-endpoints': 3.696.0
- '@aws-sdk/util-user-agent-browser': 3.696.0
- '@aws-sdk/util-user-agent-node': 3.696.0
- '@smithy/config-resolver': 3.0.13
- '@smithy/core': 2.5.7
- '@smithy/fetch-http-handler': 4.1.3
- '@smithy/hash-node': 3.0.11
- '@smithy/invalid-dependency': 3.0.11
- '@smithy/middleware-content-length': 3.0.13
- '@smithy/middleware-endpoint': 3.2.8
- '@smithy/middleware-retry': 3.0.34
- '@smithy/middleware-serde': 3.0.11
- '@smithy/middleware-stack': 3.0.11
- '@smithy/node-config-provider': 3.1.12
- '@smithy/node-http-handler': 3.3.3
- '@smithy/protocol-http': 4.1.8
- '@smithy/smithy-client': 3.7.0
- '@smithy/types': 3.7.2
- '@smithy/url-parser': 3.0.11
- '@smithy/util-base64': 3.0.0
- '@smithy/util-body-length-browser': 3.0.0
- '@smithy/util-body-length-node': 3.0.0
- '@smithy/util-defaults-mode-browser': 3.0.34
- '@smithy/util-defaults-mode-node': 3.0.34
- '@smithy/util-endpoints': 2.1.7
- '@smithy/util-middleware': 3.0.11
- '@smithy/util-retry': 3.0.11
- '@smithy/util-utf8': 3.0.0
+ '@aws-sdk/core': 3.973.6
+ '@aws-sdk/nested-clients': 3.982.0
+ '@aws-sdk/types': 3.973.1
+ '@smithy/property-provider': 4.2.8
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/shared-ini-file-loader': 4.4.3
+ '@smithy/types': 4.12.0
tslib: 2.8.1
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/core@3.696.0':
+ '@aws-sdk/credential-provider-node@3.972.5':
dependencies:
- '@aws-sdk/types': 3.696.0
- '@smithy/core': 2.5.7
- '@smithy/node-config-provider': 3.1.12
- '@smithy/property-provider': 3.1.11
- '@smithy/protocol-http': 4.1.8
- '@smithy/signature-v4': 4.2.4
- '@smithy/smithy-client': 3.7.0
- '@smithy/types': 3.7.2
- '@smithy/util-middleware': 3.0.11
- fast-xml-parser: 4.4.1
- tslib: 2.8.1
-
- '@aws-sdk/credential-provider-env@3.696.0':
- dependencies:
- '@aws-sdk/core': 3.696.0
- '@aws-sdk/types': 3.696.0
- '@smithy/property-provider': 3.1.11
- '@smithy/types': 3.7.2
- tslib: 2.8.1
-
- '@aws-sdk/credential-provider-http@3.696.0':
- dependencies:
- '@aws-sdk/core': 3.696.0
- '@aws-sdk/types': 3.696.0
- '@smithy/fetch-http-handler': 4.1.3
- '@smithy/node-http-handler': 3.3.3
- '@smithy/property-provider': 3.1.11
- '@smithy/protocol-http': 4.1.8
- '@smithy/smithy-client': 3.7.0
- '@smithy/types': 3.7.2
- '@smithy/util-stream': 3.3.4
- tslib: 2.8.1
-
- '@aws-sdk/credential-provider-ini@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0)':
- dependencies:
- '@aws-sdk/client-sts': 3.699.0
- '@aws-sdk/core': 3.696.0
- '@aws-sdk/credential-provider-env': 3.696.0
- '@aws-sdk/credential-provider-http': 3.696.0
- '@aws-sdk/credential-provider-process': 3.696.0
- '@aws-sdk/credential-provider-sso': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))
- '@aws-sdk/credential-provider-web-identity': 3.696.0(@aws-sdk/client-sts@3.699.0)
- '@aws-sdk/types': 3.696.0
- '@smithy/credential-provider-imds': 3.2.8
- '@smithy/property-provider': 3.1.11
- '@smithy/shared-ini-file-loader': 3.1.12
- '@smithy/types': 3.7.2
+ '@aws-sdk/credential-provider-env': 3.972.4
+ '@aws-sdk/credential-provider-http': 3.972.6
+ '@aws-sdk/credential-provider-ini': 3.972.4
+ '@aws-sdk/credential-provider-process': 3.972.4
+ '@aws-sdk/credential-provider-sso': 3.972.4
+ '@aws-sdk/credential-provider-web-identity': 3.972.4
+ '@aws-sdk/types': 3.973.1
+ '@smithy/credential-provider-imds': 4.2.8
+ '@smithy/property-provider': 4.2.8
+ '@smithy/shared-ini-file-loader': 4.4.3
+ '@smithy/types': 4.12.0
tslib: 2.8.1
transitivePeerDependencies:
- - '@aws-sdk/client-sso-oidc'
- aws-crt
- '@aws-sdk/credential-provider-node@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0)':
+ '@aws-sdk/credential-provider-process@3.972.4':
dependencies:
- '@aws-sdk/credential-provider-env': 3.696.0
- '@aws-sdk/credential-provider-http': 3.696.0
- '@aws-sdk/credential-provider-ini': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0)
- '@aws-sdk/credential-provider-process': 3.696.0
- '@aws-sdk/credential-provider-sso': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))
- '@aws-sdk/credential-provider-web-identity': 3.696.0(@aws-sdk/client-sts@3.699.0)
- '@aws-sdk/types': 3.696.0
- '@smithy/credential-provider-imds': 3.2.8
- '@smithy/property-provider': 3.1.11
- '@smithy/shared-ini-file-loader': 3.1.12
- '@smithy/types': 3.7.2
+ '@aws-sdk/core': 3.973.6
+ '@aws-sdk/types': 3.973.1
+ '@smithy/property-provider': 4.2.8
+ '@smithy/shared-ini-file-loader': 4.4.3
+ '@smithy/types': 4.12.0
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-sso@3.972.4':
+ dependencies:
+ '@aws-sdk/client-sso': 3.982.0
+ '@aws-sdk/core': 3.973.6
+ '@aws-sdk/token-providers': 3.982.0
+ '@aws-sdk/types': 3.973.1
+ '@smithy/property-provider': 4.2.8
+ '@smithy/shared-ini-file-loader': 4.4.3
+ '@smithy/types': 4.12.0
tslib: 2.8.1
transitivePeerDependencies:
- - '@aws-sdk/client-sso-oidc'
- - '@aws-sdk/client-sts'
- aws-crt
- '@aws-sdk/credential-provider-process@3.696.0':
+ '@aws-sdk/credential-provider-web-identity@3.972.4':
dependencies:
- '@aws-sdk/core': 3.696.0
- '@aws-sdk/types': 3.696.0
- '@smithy/property-provider': 3.1.11
- '@smithy/shared-ini-file-loader': 3.1.12
- '@smithy/types': 3.7.2
- tslib: 2.8.1
-
- '@aws-sdk/credential-provider-sso@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))':
- dependencies:
- '@aws-sdk/client-sso': 3.696.0
- '@aws-sdk/core': 3.696.0
- '@aws-sdk/token-providers': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))
- '@aws-sdk/types': 3.696.0
- '@smithy/property-provider': 3.1.11
- '@smithy/shared-ini-file-loader': 3.1.12
- '@smithy/types': 3.7.2
+ '@aws-sdk/core': 3.973.6
+ '@aws-sdk/nested-clients': 3.982.0
+ '@aws-sdk/types': 3.973.1
+ '@smithy/property-provider': 4.2.8
+ '@smithy/shared-ini-file-loader': 4.4.3
+ '@smithy/types': 4.12.0
tslib: 2.8.1
transitivePeerDependencies:
- - '@aws-sdk/client-sso-oidc'
- aws-crt
- '@aws-sdk/credential-provider-web-identity@3.696.0(@aws-sdk/client-sts@3.699.0)':
+ '@aws-sdk/lib-storage@3.982.0(@aws-sdk/client-s3@3.982.0)':
dependencies:
- '@aws-sdk/client-sts': 3.699.0
- '@aws-sdk/core': 3.696.0
- '@aws-sdk/types': 3.696.0
- '@smithy/property-provider': 3.1.11
- '@smithy/types': 3.7.2
- tslib: 2.8.1
-
- '@aws-sdk/lib-storage@3.701.0(@aws-sdk/client-s3@3.701.0)':
- dependencies:
- '@aws-sdk/client-s3': 3.701.0
- '@smithy/abort-controller': 3.1.9
- '@smithy/middleware-endpoint': 3.2.8
- '@smithy/smithy-client': 3.7.0
+ '@aws-sdk/client-s3': 3.982.0
+ '@smithy/abort-controller': 4.2.8
+ '@smithy/middleware-endpoint': 4.4.13
+ '@smithy/smithy-client': 4.11.2
buffer: 5.6.0
events: 3.3.0
stream-browserify: 3.0.0
tslib: 2.8.1
- '@aws-sdk/middleware-bucket-endpoint@3.696.0':
+ '@aws-sdk/middleware-bucket-endpoint@3.972.3':
dependencies:
- '@aws-sdk/types': 3.696.0
- '@aws-sdk/util-arn-parser': 3.693.0
- '@smithy/node-config-provider': 3.1.12
- '@smithy/protocol-http': 4.1.8
- '@smithy/types': 3.7.2
- '@smithy/util-config-provider': 3.0.0
+ '@aws-sdk/types': 3.973.1
+ '@aws-sdk/util-arn-parser': 3.972.2
+ '@smithy/node-config-provider': 4.3.8
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/types': 4.12.0
+ '@smithy/util-config-provider': 4.2.0
tslib: 2.8.1
- '@aws-sdk/middleware-expect-continue@3.696.0':
+ '@aws-sdk/middleware-expect-continue@3.972.3':
dependencies:
- '@aws-sdk/types': 3.696.0
- '@smithy/protocol-http': 4.1.8
- '@smithy/types': 3.7.2
+ '@aws-sdk/types': 3.973.1
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@aws-sdk/middleware-flexible-checksums@3.701.0':
+ '@aws-sdk/middleware-flexible-checksums@3.972.4':
dependencies:
'@aws-crypto/crc32': 5.2.0
'@aws-crypto/crc32c': 5.2.0
'@aws-crypto/util': 5.2.0
- '@aws-sdk/core': 3.696.0
- '@aws-sdk/types': 3.696.0
- '@smithy/is-array-buffer': 3.0.0
- '@smithy/node-config-provider': 3.1.12
- '@smithy/protocol-http': 4.1.8
- '@smithy/types': 3.7.2
- '@smithy/util-middleware': 3.0.11
- '@smithy/util-stream': 3.3.4
- '@smithy/util-utf8': 3.0.0
+ '@aws-sdk/core': 3.973.6
+ '@aws-sdk/crc64-nvme': 3.972.0
+ '@aws-sdk/types': 3.973.1
+ '@smithy/is-array-buffer': 4.2.0
+ '@smithy/node-config-provider': 4.3.8
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/types': 4.12.0
+ '@smithy/util-middleware': 4.2.8
+ '@smithy/util-stream': 4.5.11
+ '@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@aws-sdk/middleware-host-header@3.696.0':
+ '@aws-sdk/middleware-host-header@3.972.3':
dependencies:
- '@aws-sdk/types': 3.696.0
- '@smithy/protocol-http': 4.1.8
- '@smithy/types': 3.7.2
+ '@aws-sdk/types': 3.973.1
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@aws-sdk/middleware-location-constraint@3.696.0':
+ '@aws-sdk/middleware-location-constraint@3.972.3':
dependencies:
- '@aws-sdk/types': 3.696.0
- '@smithy/types': 3.7.2
+ '@aws-sdk/types': 3.973.1
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@aws-sdk/middleware-logger@3.696.0':
+ '@aws-sdk/middleware-logger@3.972.3':
dependencies:
- '@aws-sdk/types': 3.696.0
- '@smithy/types': 3.7.2
+ '@aws-sdk/types': 3.973.1
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@aws-sdk/middleware-recursion-detection@3.696.0':
+ '@aws-sdk/middleware-recursion-detection@3.972.3':
dependencies:
- '@aws-sdk/types': 3.696.0
- '@smithy/protocol-http': 4.1.8
- '@smithy/types': 3.7.2
+ '@aws-sdk/types': 3.973.1
+ '@aws/lambda-invoke-store': 0.2.3
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@aws-sdk/middleware-sdk-s3@3.696.0':
+ '@aws-sdk/middleware-sdk-s3@3.972.6':
dependencies:
- '@aws-sdk/core': 3.696.0
- '@aws-sdk/types': 3.696.0
- '@aws-sdk/util-arn-parser': 3.693.0
- '@smithy/core': 2.5.7
- '@smithy/node-config-provider': 3.1.12
- '@smithy/protocol-http': 4.1.8
- '@smithy/signature-v4': 4.2.4
- '@smithy/smithy-client': 3.7.0
- '@smithy/types': 3.7.2
- '@smithy/util-config-provider': 3.0.0
- '@smithy/util-middleware': 3.0.11
- '@smithy/util-stream': 3.3.4
- '@smithy/util-utf8': 3.0.0
+ '@aws-sdk/core': 3.973.6
+ '@aws-sdk/types': 3.973.1
+ '@aws-sdk/util-arn-parser': 3.972.2
+ '@smithy/core': 3.22.1
+ '@smithy/node-config-provider': 4.3.8
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/signature-v4': 5.3.8
+ '@smithy/smithy-client': 4.11.2
+ '@smithy/types': 4.12.0
+ '@smithy/util-config-provider': 4.2.0
+ '@smithy/util-middleware': 4.2.8
+ '@smithy/util-stream': 4.5.11
+ '@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@aws-sdk/middleware-ssec@3.696.0':
+ '@aws-sdk/middleware-ssec@3.972.3':
dependencies:
- '@aws-sdk/types': 3.696.0
- '@smithy/types': 3.7.2
+ '@aws-sdk/types': 3.973.1
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@aws-sdk/middleware-user-agent@3.696.0':
+ '@aws-sdk/middleware-user-agent@3.972.6':
dependencies:
- '@aws-sdk/core': 3.696.0
- '@aws-sdk/types': 3.696.0
- '@aws-sdk/util-endpoints': 3.696.0
- '@smithy/core': 2.5.7
- '@smithy/protocol-http': 4.1.8
- '@smithy/types': 3.7.2
+ '@aws-sdk/core': 3.973.6
+ '@aws-sdk/types': 3.973.1
+ '@aws-sdk/util-endpoints': 3.982.0
+ '@smithy/core': 3.22.1
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@aws-sdk/region-config-resolver@3.696.0':
+ '@aws-sdk/nested-clients@3.982.0':
dependencies:
- '@aws-sdk/types': 3.696.0
- '@smithy/node-config-provider': 3.1.12
- '@smithy/types': 3.7.2
- '@smithy/util-config-provider': 3.0.0
- '@smithy/util-middleware': 3.0.11
+ '@aws-crypto/sha256-browser': 5.2.0
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-sdk/core': 3.973.6
+ '@aws-sdk/middleware-host-header': 3.972.3
+ '@aws-sdk/middleware-logger': 3.972.3
+ '@aws-sdk/middleware-recursion-detection': 3.972.3
+ '@aws-sdk/middleware-user-agent': 3.972.6
+ '@aws-sdk/region-config-resolver': 3.972.3
+ '@aws-sdk/types': 3.973.1
+ '@aws-sdk/util-endpoints': 3.982.0
+ '@aws-sdk/util-user-agent-browser': 3.972.3
+ '@aws-sdk/util-user-agent-node': 3.972.4
+ '@smithy/config-resolver': 4.4.6
+ '@smithy/core': 3.22.1
+ '@smithy/fetch-http-handler': 5.3.9
+ '@smithy/hash-node': 4.2.8
+ '@smithy/invalid-dependency': 4.2.8
+ '@smithy/middleware-content-length': 4.2.8
+ '@smithy/middleware-endpoint': 4.4.13
+ '@smithy/middleware-retry': 4.4.30
+ '@smithy/middleware-serde': 4.2.9
+ '@smithy/middleware-stack': 4.2.8
+ '@smithy/node-config-provider': 4.3.8
+ '@smithy/node-http-handler': 4.4.9
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/smithy-client': 4.11.2
+ '@smithy/types': 4.12.0
+ '@smithy/url-parser': 4.2.8
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-body-length-browser': 4.2.0
+ '@smithy/util-body-length-node': 4.2.1
+ '@smithy/util-defaults-mode-browser': 4.3.29
+ '@smithy/util-defaults-mode-node': 4.2.32
+ '@smithy/util-endpoints': 3.2.8
+ '@smithy/util-middleware': 4.2.8
+ '@smithy/util-retry': 4.2.8
+ '@smithy/util-utf8': 4.2.0
tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
- '@aws-sdk/s3-request-presigner@3.701.0':
+ '@aws-sdk/region-config-resolver@3.972.3':
dependencies:
- '@aws-sdk/signature-v4-multi-region': 3.696.0
- '@aws-sdk/types': 3.696.0
- '@aws-sdk/util-format-url': 3.696.0
- '@smithy/middleware-endpoint': 3.2.8
- '@smithy/protocol-http': 4.1.8
- '@smithy/smithy-client': 3.7.0
- '@smithy/types': 3.7.2
+ '@aws-sdk/types': 3.973.1
+ '@smithy/config-resolver': 4.4.6
+ '@smithy/node-config-provider': 4.3.8
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@aws-sdk/signature-v4-multi-region@3.696.0':
+ '@aws-sdk/s3-request-presigner@3.982.0':
dependencies:
- '@aws-sdk/middleware-sdk-s3': 3.696.0
- '@aws-sdk/types': 3.696.0
- '@smithy/protocol-http': 4.1.8
- '@smithy/signature-v4': 4.2.4
- '@smithy/types': 3.7.2
+ '@aws-sdk/signature-v4-multi-region': 3.982.0
+ '@aws-sdk/types': 3.973.1
+ '@aws-sdk/util-format-url': 3.972.3
+ '@smithy/middleware-endpoint': 4.4.13
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/smithy-client': 4.11.2
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@aws-sdk/token-providers@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))':
+ '@aws-sdk/signature-v4-multi-region@3.982.0':
dependencies:
- '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0)
- '@aws-sdk/types': 3.696.0
- '@smithy/property-provider': 3.1.11
- '@smithy/shared-ini-file-loader': 3.1.12
- '@smithy/types': 3.7.2
+ '@aws-sdk/middleware-sdk-s3': 3.972.6
+ '@aws-sdk/types': 3.973.1
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/signature-v4': 5.3.8
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@aws-sdk/types@3.696.0':
+ '@aws-sdk/token-providers@3.982.0':
dependencies:
- '@smithy/types': 3.7.2
+ '@aws-sdk/core': 3.973.6
+ '@aws-sdk/nested-clients': 3.982.0
+ '@aws-sdk/types': 3.973.1
+ '@smithy/property-provider': 4.2.8
+ '@smithy/shared-ini-file-loader': 4.4.3
+ '@smithy/types': 4.12.0
tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
- '@aws-sdk/types@3.734.0':
+ '@aws-sdk/types@3.973.1':
dependencies:
- '@smithy/types': 4.3.0
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@aws-sdk/util-arn-parser@3.693.0':
+ '@aws-sdk/util-arn-parser@3.972.2':
dependencies:
tslib: 2.8.1
- '@aws-sdk/util-endpoints@3.696.0':
+ '@aws-sdk/util-endpoints@3.982.0':
dependencies:
- '@aws-sdk/types': 3.696.0
- '@smithy/types': 3.7.2
- '@smithy/util-endpoints': 2.1.7
+ '@aws-sdk/types': 3.973.1
+ '@smithy/types': 4.12.0
+ '@smithy/url-parser': 4.2.8
+ '@smithy/util-endpoints': 3.2.8
tslib: 2.8.1
- '@aws-sdk/util-format-url@3.696.0':
+ '@aws-sdk/util-format-url@3.972.3':
dependencies:
- '@aws-sdk/types': 3.696.0
- '@smithy/querystring-builder': 3.0.11
- '@smithy/types': 3.7.2
+ '@aws-sdk/types': 3.973.1
+ '@smithy/querystring-builder': 4.2.8
+ '@smithy/types': 4.12.0
tslib: 2.8.1
'@aws-sdk/util-locate-window@3.535.0':
dependencies:
tslib: 2.8.1
- '@aws-sdk/util-user-agent-browser@3.696.0':
+ '@aws-sdk/util-user-agent-browser@3.972.3':
dependencies:
- '@aws-sdk/types': 3.696.0
- '@smithy/types': 3.7.2
+ '@aws-sdk/types': 3.973.1
+ '@smithy/types': 4.12.0
bowser: 2.11.0
tslib: 2.8.1
- '@aws-sdk/util-user-agent-node@3.696.0':
+ '@aws-sdk/util-user-agent-node@3.972.4':
dependencies:
- '@aws-sdk/middleware-user-agent': 3.696.0
- '@aws-sdk/types': 3.696.0
- '@smithy/node-config-provider': 3.1.12
- '@smithy/types': 3.7.2
+ '@aws-sdk/middleware-user-agent': 3.972.6
+ '@aws-sdk/types': 3.973.1
+ '@smithy/node-config-provider': 4.3.8
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@aws-sdk/xml-builder@3.696.0':
+ '@aws-sdk/xml-builder@3.972.4':
dependencies:
- '@smithy/types': 3.7.2
+ '@smithy/types': 4.12.0
+ fast-xml-parser: 5.3.4
tslib: 2.8.1
- '@babel/code-frame@7.24.2':
- dependencies:
- '@babel/highlight': 7.24.2
- picocolors: 1.0.0
-
- '@babel/code-frame@7.26.2':
- dependencies:
- '@babel/helper-validator-identifier': 7.25.9
- js-tokens: 4.0.0
- picocolors: 1.0.1
+ '@aws/lambda-invoke-store@0.2.3': {}
'@babel/code-frame@7.27.1':
dependencies:
@@ -10957,92 +11108,8 @@ snapshots:
js-tokens: 4.0.0
picocolors: 1.1.1
- '@babel/compat-data@7.26.2': {}
-
- '@babel/compat-data@7.26.8': {}
-
'@babel/compat-data@7.28.5': {}
- '@babel/core@7.24.5':
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@babel/code-frame': 7.26.2
- '@babel/generator': 7.26.2
- '@babel/helper-compilation-targets': 7.25.9
- '@babel/helper-module-transforms': 7.26.0(@babel/core@7.24.5)
- '@babel/helpers': 7.26.0
- '@babel/parser': 7.26.2
- '@babel/template': 7.25.9
- '@babel/traverse': 7.25.9
- '@babel/types': 7.26.0
- convert-source-map: 2.0.0
- debug: 4.4.0
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/core@7.24.6':
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.24.6
- '@babel/helper-compilation-targets': 7.25.9
- '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6)
- '@babel/helpers': 7.24.6
- '@babel/parser': 7.26.2
- '@babel/template': 7.24.6
- '@babel/traverse': 7.25.9
- '@babel/types': 7.24.6
- convert-source-map: 2.0.0
- debug: 4.4.3
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/core@7.26.0':
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@babel/code-frame': 7.26.2
- '@babel/generator': 7.26.2
- '@babel/helper-compilation-targets': 7.25.9
- '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
- '@babel/helpers': 7.26.0
- '@babel/parser': 7.26.2
- '@babel/template': 7.25.9
- '@babel/traverse': 7.25.9
- '@babel/types': 7.26.0
- convert-source-map: 2.0.0
- debug: 4.4.0
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/core@7.26.10':
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.27.0
- '@babel/helper-compilation-targets': 7.27.0
- '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
- '@babel/helpers': 7.27.0
- '@babel/parser': 7.27.0
- '@babel/template': 7.27.0
- '@babel/traverse': 7.27.0
- '@babel/types': 7.27.0
- convert-source-map: 2.0.0
- debug: 4.4.3
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
'@babel/core@7.28.5':
dependencies:
'@babel/code-frame': 7.27.1
@@ -11063,36 +11130,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@babel/generator@7.24.1':
- dependencies:
- '@babel/types': 7.24.0
- '@jridgewell/gen-mapping': 0.3.5
- '@jridgewell/trace-mapping': 0.3.25
- jsesc: 2.5.2
-
- '@babel/generator@7.24.6':
- dependencies:
- '@babel/types': 7.26.0
- '@jridgewell/gen-mapping': 0.3.5
- '@jridgewell/trace-mapping': 0.3.25
- jsesc: 2.5.2
-
- '@babel/generator@7.26.2':
- dependencies:
- '@babel/parser': 7.26.2
- '@babel/types': 7.26.0
- '@jridgewell/gen-mapping': 0.3.5
- '@jridgewell/trace-mapping': 0.3.25
- jsesc: 3.0.2
-
- '@babel/generator@7.27.0':
- dependencies:
- '@babel/parser': 7.27.0
- '@babel/types': 7.27.0
- '@jridgewell/gen-mapping': 0.3.5
- '@jridgewell/trace-mapping': 0.3.25
- jsesc: 3.0.2
-
'@babel/generator@7.28.5':
dependencies:
'@babel/parser': 7.28.5
@@ -11103,27 +11140,11 @@ snapshots:
'@babel/helper-annotate-as-pure@7.22.5':
dependencies:
- '@babel/types': 7.26.0
+ '@babel/types': 7.28.5
'@babel/helper-builder-binary-assignment-operator-visitor@7.22.15':
dependencies:
- '@babel/types': 7.26.0
-
- '@babel/helper-compilation-targets@7.25.9':
- dependencies:
- '@babel/compat-data': 7.26.2
- '@babel/helper-validator-option': 7.25.9
- browserslist: 4.24.2
- lru-cache: 5.1.1
- semver: 6.3.1
-
- '@babel/helper-compilation-targets@7.27.0':
- dependencies:
- '@babel/compat-data': 7.26.8
- '@babel/helper-validator-option': 7.25.9
- browserslist: 4.24.2
- lru-cache: 5.1.1
- semver: 6.3.1
+ '@babel/types': 7.28.5
'@babel/helper-compilation-targets@7.27.2':
dependencies:
@@ -11133,70 +11154,53 @@ snapshots:
lru-cache: 5.1.1
semver: 6.3.1
- '@babel/helper-create-class-features-plugin@7.23.7(@babel/core@7.26.0)':
+ '@babel/helper-create-class-features-plugin@7.23.7(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
'@babel/helper-annotate-as-pure': 7.22.5
'@babel/helper-environment-visitor': 7.24.6
'@babel/helper-function-name': 7.24.6
'@babel/helper-member-expression-to-functions': 7.23.0
'@babel/helper-optimise-call-expression': 7.22.5
- '@babel/helper-replace-supers': 7.22.20(@babel/core@7.26.0)
+ '@babel/helper-replace-supers': 7.22.20(@babel/core@7.28.5)
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
'@babel/helper-split-export-declaration': 7.24.6
semver: 6.3.1
- '@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.26.0)':
+ '@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
'@babel/helper-annotate-as-pure': 7.22.5
regexpu-core: 5.3.2
semver: 6.3.1
- '@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.26.0)':
+ '@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-compilation-targets': 7.25.9
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-plugin-utils': 7.27.1
debug: 4.4.3
lodash.debounce: 4.0.8
resolve: 1.22.8
transitivePeerDependencies:
- supports-color
- '@babel/helper-environment-visitor@7.22.20': {}
-
'@babel/helper-environment-visitor@7.24.6': {}
'@babel/helper-function-name@7.24.6':
dependencies:
- '@babel/template': 7.24.6
- '@babel/types': 7.24.6
+ '@babel/template': 7.27.2
+ '@babel/types': 7.28.5
'@babel/helper-globals@7.28.0': {}
'@babel/helper-hoist-variables@7.24.6':
dependencies:
- '@babel/types': 7.24.6
+ '@babel/types': 7.28.5
'@babel/helper-member-expression-to-functions@7.23.0':
dependencies:
- '@babel/types': 7.26.0
-
- '@babel/helper-module-imports@7.22.15':
- dependencies:
- '@babel/types': 7.23.6
-
- '@babel/helper-module-imports@7.24.6':
- dependencies:
- '@babel/types': 7.26.0
-
- '@babel/helper-module-imports@7.25.9':
- dependencies:
- '@babel/traverse': 7.25.9
- '@babel/types': 7.26.0
- transitivePeerDependencies:
- - supports-color
+ '@babel/types': 7.28.5
'@babel/helper-module-imports@7.27.1':
dependencies:
@@ -11205,51 +11209,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@babel/helper-module-transforms@7.23.3(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-module-imports': 7.22.15
- '@babel/helper-simple-access': 7.22.5
- '@babel/helper-split-export-declaration': 7.22.6
- '@babel/helper-validator-identifier': 7.22.20
-
- '@babel/helper-module-transforms@7.24.6(@babel/core@7.24.6)':
- dependencies:
- '@babel/core': 7.24.6
- '@babel/helper-environment-visitor': 7.24.6
- '@babel/helper-module-imports': 7.24.6
- '@babel/helper-simple-access': 7.24.6
- '@babel/helper-split-export-declaration': 7.24.6
- '@babel/helper-validator-identifier': 7.24.6
-
- '@babel/helper-module-transforms@7.26.0(@babel/core@7.24.5)':
- dependencies:
- '@babel/core': 7.24.5
- '@babel/helper-module-imports': 7.25.9
- '@babel/helper-validator-identifier': 7.25.9
- '@babel/traverse': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-module-imports': 7.25.9
- '@babel/helper-validator-identifier': 7.25.9
- '@babel/traverse': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-module-imports': 7.25.9
- '@babel/helper-validator-identifier': 7.25.9
- '@babel/traverse': 7.25.9
- transitivePeerDependencies:
- - supports-color
-
'@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
@@ -11261,111 +11220,61 @@ snapshots:
'@babel/helper-optimise-call-expression@7.22.5':
dependencies:
- '@babel/types': 7.26.0
-
- '@babel/helper-plugin-utils@7.24.0': {}
+ '@babel/types': 7.28.5
'@babel/helper-plugin-utils@7.25.9': {}
'@babel/helper-plugin-utils@7.27.1': {}
- '@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.26.0)':
+ '@babel/helper-plugin-utils@7.28.6': {}
+
+ '@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
'@babel/helper-annotate-as-pure': 7.22.5
'@babel/helper-environment-visitor': 7.24.6
'@babel/helper-wrap-function': 7.22.20
- '@babel/helper-replace-supers@7.22.20(@babel/core@7.26.0)':
+ '@babel/helper-replace-supers@7.22.20(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
'@babel/helper-environment-visitor': 7.24.6
'@babel/helper-member-expression-to-functions': 7.23.0
'@babel/helper-optimise-call-expression': 7.22.5
- '@babel/helper-simple-access@7.22.5':
- dependencies:
- '@babel/types': 7.24.0
-
'@babel/helper-simple-access@7.24.6':
dependencies:
- '@babel/types': 7.26.0
+ '@babel/types': 7.28.5
'@babel/helper-skip-transparent-expression-wrappers@7.22.5':
dependencies:
- '@babel/types': 7.26.0
-
- '@babel/helper-split-export-declaration@7.22.6':
- dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.28.5
'@babel/helper-split-export-declaration@7.24.6':
dependencies:
- '@babel/types': 7.24.6
-
- '@babel/helper-string-parser@7.23.4': {}
-
- '@babel/helper-string-parser@7.24.1': {}
-
- '@babel/helper-string-parser@7.24.6': {}
+ '@babel/types': 7.28.5
'@babel/helper-string-parser@7.25.9': {}
'@babel/helper-string-parser@7.27.1': {}
- '@babel/helper-validator-identifier@7.22.20': {}
-
- '@babel/helper-validator-identifier@7.24.6': {}
-
'@babel/helper-validator-identifier@7.25.9': {}
'@babel/helper-validator-identifier@7.28.5': {}
- '@babel/helper-validator-option@7.25.9': {}
-
'@babel/helper-validator-option@7.27.1': {}
'@babel/helper-wrap-function@7.22.20':
dependencies:
'@babel/helper-function-name': 7.24.6
- '@babel/template': 7.25.9
- '@babel/types': 7.26.0
-
- '@babel/helpers@7.24.6':
- dependencies:
- '@babel/template': 7.25.9
- '@babel/types': 7.26.0
-
- '@babel/helpers@7.26.0':
- dependencies:
- '@babel/template': 7.25.9
- '@babel/types': 7.26.0
-
- '@babel/helpers@7.27.0':
- dependencies:
- '@babel/template': 7.27.0
- '@babel/types': 7.27.0
+ '@babel/template': 7.27.2
+ '@babel/types': 7.28.5
'@babel/helpers@7.28.4':
dependencies:
'@babel/template': 7.27.2
'@babel/types': 7.28.5
- '@babel/highlight@7.24.2':
- dependencies:
- '@babel/helper-validator-identifier': 7.22.20
- chalk: 2.4.2
- js-tokens: 4.0.0
- picocolors: 1.0.0
-
- '@babel/parser@7.24.5':
- dependencies:
- '@babel/types': 7.26.0
-
- '@babel/parser@7.26.2':
- dependencies:
- '@babel/types': 7.26.0
-
'@babel/parser@7.27.0':
dependencies:
'@babel/types': 7.27.0
@@ -11374,522 +11283,402 @@ snapshots:
dependencies:
'@babel/types': 7.28.5
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.26.0)
+ '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.28.5)
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.26.0)':
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
'@babel/helper-environment-visitor': 7.24.6
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-proposal-decorators@7.23.7(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-decorators': 7.23.3(@babel/core@7.28.5)
+
+ '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+
+ '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-proposal-decorators@7.23.7(@babel/core@7.26.0)':
+ '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-decorators': 7.23.3(@babel/core@7.26.0)
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)':
+ '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
-
- '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.5)':
- dependencies:
- '@babel/core': 7.24.5
- '@babel/helper-plugin-utils': 7.25.9
- optional: true
-
- '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.6)':
- dependencies:
- '@babel/core': 7.24.6
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)':
+ '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-decorators@7.23.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.5)':
+ '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.24.5
- '@babel/helper-plugin-utils': 7.25.9
- optional: true
-
- '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.6)':
- dependencies:
- '@babel/core': 7.24.6
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.5)':
+ '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.24.5
- '@babel/helper-plugin-utils': 7.25.9
- optional: true
-
- '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.6)':
- dependencies:
- '@babel/core': 7.24.6
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)':
+ '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0)':
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-decorators@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.26.0)':
+ '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.26.0)':
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.24.0
-
- '@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.5)':
+ '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.24.5
- '@babel/helper-plugin-utils': 7.25.9
- optional: true
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.6)':
+ '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.24.6
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)':
+ '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.5)':
+ '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.24.5
- '@babel/helper-plugin-utils': 7.25.9
- optional: true
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.6)':
+ '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.24.6
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.6)':
+ '@babel/plugin-transform-async-generator-functions@7.23.7(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.24.6
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.5)':
- dependencies:
- '@babel/core': 7.24.5
- '@babel/helper-plugin-utils': 7.25.9
- optional: true
-
- '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.6)':
- dependencies:
- '@babel/core': 7.24.6
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.5)':
- dependencies:
- '@babel/core': 7.24.5
- '@babel/helper-plugin-utils': 7.25.9
- optional: true
-
- '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.6)':
- dependencies:
- '@babel/core': 7.24.6
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.5)':
- dependencies:
- '@babel/core': 7.24.5
- '@babel/helper-plugin-utils': 7.25.9
- optional: true
-
- '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.6)':
- dependencies:
- '@babel/core': 7.24.6
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.5)':
- dependencies:
- '@babel/core': 7.24.5
- '@babel/helper-plugin-utils': 7.25.9
- optional: true
-
- '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.6)':
- dependencies:
- '@babel/core': 7.24.6
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.5)':
- dependencies:
- '@babel/core': 7.24.5
- '@babel/helper-plugin-utils': 7.25.9
- optional: true
-
- '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.6)':
- dependencies:
- '@babel/core': 7.24.6
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.5)':
- dependencies:
- '@babel/core': 7.24.5
- '@babel/helper-plugin-utils': 7.25.9
- optional: true
-
- '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.6)':
- dependencies:
- '@babel/core': 7.24.6
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.5)':
- dependencies:
- '@babel/core': 7.24.5
- '@babel/helper-plugin-utils': 7.25.9
- optional: true
-
- '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.6)':
- dependencies:
- '@babel/core': 7.24.6
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.6)':
- dependencies:
- '@babel/core': 7.24.6
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
-
- '@babel/plugin-transform-async-generator-functions@7.23.7(@babel/core@7.26.0)':
- dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
'@babel/helper-environment-visitor': 7.24.6
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.26.0)
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.0)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.28.5)
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5)
- '@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-module-imports': 7.25.9
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.26.0)
+ '@babel/core': 7.28.5
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.28.5)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.26.0)':
+ '@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.26.0)':
+ '@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.0)
+ '@babel/core': 7.28.5
+ '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.5)
- '@babel/plugin-transform-classes@7.23.8(@babel/core@7.26.0)':
+ '@babel/plugin-transform-classes@7.23.8(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
'@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-compilation-targets': 7.25.9
+ '@babel/helper-compilation-targets': 7.27.2
'@babel/helper-environment-visitor': 7.24.6
'@babel/helper-function-name': 7.24.6
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-replace-supers': 7.22.20(@babel/core@7.26.0)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-replace-supers': 7.22.20(@babel/core@7.28.5)
'@babel/helper-split-export-declaration': 7.24.6
globals: 11.12.0
- '@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/template': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/template': 7.27.2
- '@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.26.0)':
+ '@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.0)
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.28.5)
- '@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
'@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.26.0)':
+ '@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.26.0)
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.28.5)
- '@babel/plugin-transform-for-of@7.23.6(@babel/core@7.26.0)':
+ '@babel/plugin-transform-for-of@7.23.6(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- '@babel/plugin-transform-function-name@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-function-name@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-compilation-targets': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-compilation-targets': 7.27.2
'@babel/helper-function-name': 7.24.6
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.26.0)':
+ '@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.0)
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5)
- '@babel/plugin-transform-literals@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-literals@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.26.0)':
+ '@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.0)
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5)
- '@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-module-transforms': 7.23.3(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.24.0
- '@babel/helper-simple-access': 7.22.5
+ '@babel/core': 7.28.5
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-simple-access': 7.24.6
+ transitivePeerDependencies:
+ - supports-color
- '@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
'@babel/helper-hoist-variables': 7.24.6
- '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-validator-identifier': 7.25.9
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.26.0)':
+ '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-new-target@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-new-target@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.26.0)':
+ '@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0)
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5)
- '@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.26.0)':
+ '@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0)
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5)
- '@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.26.0)':
+ '@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.28.5)':
dependencies:
- '@babel/compat-data': 7.26.2
- '@babel/core': 7.26.0
- '@babel/helper-compilation-targets': 7.25.9
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0)
- '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.26.0)
+ '@babel/compat-data': 7.28.5
+ '@babel/core': 7.28.5
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.28.5)
- '@babel/plugin-transform-object-super@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-object-super@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-replace-supers': 7.22.20(@babel/core@7.26.0)
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-replace-supers': 7.22.20(@babel/core@7.28.5)
- '@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.26.0)':
+ '@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.0)
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5)
- '@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.26.0)':
+ '@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5)
- '@babel/plugin-transform-parameters@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-parameters@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.26.0)':
+ '@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
'@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0)
+ '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5)
- '@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)':
dependencies:
@@ -11901,246 +11690,202 @@ snapshots:
'@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
regenerator-transform: 0.15.2
- '@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-runtime@7.23.7(@babel/core@7.26.0)':
+ '@babel/plugin-transform-runtime@7.23.7(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-module-imports': 7.25.9
- '@babel/helper-plugin-utils': 7.25.9
- babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.26.0)
- babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.26.0)
- babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.26.0)
+ '@babel/core': 7.28.5
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.28.5)
+ babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.28.5)
+ babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.28.5)
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-spread@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-spread@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- '@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-typescript@7.23.6(@babel/core@7.26.0)':
+ '@babel/plugin-transform-typescript@7.23.6(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
+ '@babel/core': 7.28.5
'@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.26.0)
+ '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.28.5)
- '@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.26.0)':
+ '@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.26.0)
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/preset-env@7.23.8(@babel/core@7.26.0)':
+ '@babel/preset-env@7.23.8(@babel/core@7.28.5)':
dependencies:
- '@babel/compat-data': 7.26.2
- '@babel/core': 7.26.0
- '@babel/helper-compilation-targets': 7.25.9
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-validator-option': 7.25.9
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.26.0)
- '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.0)
- '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.0)
- '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.0)
- '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.0)
- '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.26.0)
- '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0)
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.0)
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.0)
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0)
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0)
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0)
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.0)
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0)
- '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0)
- '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0)
- '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.0)
- '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-async-generator-functions': 7.23.7(@babel/core@7.26.0)
- '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.26.0)
- '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.26.0)
- '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.26.0)
- '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.26.0)
- '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.26.0)
- '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.26.0)
- '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.26.0)
- '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.26.0)
- '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.26.0)
- '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.26.0)
- '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.26.0)
- '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.26.0)
- '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.26.0)
- '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.26.0)
- '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.26.0)
- '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.26.0)
- '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.0)
- babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.26.0)
- babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.26.0)
- babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.26.0)
+ '@babel/compat-data': 7.28.5
+ '@babel/core': 7.28.5
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-validator-option': 7.27.1
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.28.5)
+ '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5)
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.5)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.5)
+ '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5)
+ '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.5)
+ '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-async-generator-functions': 7.23.7(@babel/core@7.28.5)
+ '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.28.5)
+ '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.28.5)
+ '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.28.5)
+ '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.5)
+ babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.28.5)
+ babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.28.5)
+ babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.28.5)
core-js-compat: 3.35.0
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)':
+ '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/types': 7.26.0
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/types': 7.28.5
esutils: 2.0.3
- '@babel/preset-typescript@7.23.3(@babel/core@7.26.0)':
+ '@babel/preset-typescript@7.23.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/helper-validator-option': 7.25.9
- '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.26.0)
- '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.26.0)
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-validator-option': 7.27.1
+ '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.28.5)
+ transitivePeerDependencies:
+ - supports-color
'@babel/regjsgen@0.8.0': {}
- '@babel/runtime@7.23.7':
+ '@babel/runtime@7.26.10':
dependencies:
regenerator-runtime: 0.14.1
- '@babel/runtime@7.25.6':
- dependencies:
- regenerator-runtime: 0.14.1
-
- '@babel/template@7.24.6':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/parser': 7.26.2
- '@babel/types': 7.26.0
-
- '@babel/template@7.25.9':
- dependencies:
- '@babel/code-frame': 7.26.2
- '@babel/parser': 7.26.2
- '@babel/types': 7.26.0
-
- '@babel/template@7.27.0':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/parser': 7.27.0
- '@babel/types': 7.27.0
-
'@babel/template@7.27.2':
dependencies:
'@babel/code-frame': 7.27.1
'@babel/parser': 7.28.5
'@babel/types': 7.28.5
- '@babel/traverse@7.25.9':
- dependencies:
- '@babel/code-frame': 7.26.2
- '@babel/generator': 7.26.2
- '@babel/parser': 7.26.2
- '@babel/template': 7.25.9
- '@babel/types': 7.26.0
- debug: 4.4.0
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/traverse@7.27.0':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.27.0
- '@babel/parser': 7.27.0
- '@babel/template': 7.27.0
- '@babel/types': 7.27.0
- debug: 4.4.3
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
-
'@babel/traverse@7.28.5':
dependencies:
'@babel/code-frame': 7.27.1
@@ -12153,29 +11898,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@babel/types@7.23.6':
- dependencies:
- '@babel/helper-string-parser': 7.23.4
- '@babel/helper-validator-identifier': 7.22.20
- to-fast-properties: 2.0.0
-
- '@babel/types@7.24.0':
- dependencies:
- '@babel/helper-string-parser': 7.24.1
- '@babel/helper-validator-identifier': 7.22.20
- to-fast-properties: 2.0.0
-
- '@babel/types@7.24.6':
- dependencies:
- '@babel/helper-string-parser': 7.24.6
- '@babel/helper-validator-identifier': 7.24.6
- to-fast-properties: 2.0.0
-
- '@babel/types@7.26.0':
- dependencies:
- '@babel/helper-string-parser': 7.25.9
- '@babel/helper-validator-identifier': 7.25.9
-
'@babel/types@7.27.0':
dependencies:
'@babel/helper-string-parser': 7.25.9
@@ -12196,6 +11918,11 @@ snapshots:
'@braintree/sanitize-url@7.1.1': {}
+ '@cacheable/utils@2.3.4':
+ dependencies:
+ hashery: 1.4.0
+ keyv: 5.6.0
+
'@casl/ability@6.8.0':
dependencies:
'@ucast/mongo2js': 1.3.4
@@ -12211,12 +11938,12 @@ snapshots:
dependencies:
'@chevrotain/gast': 11.0.3
'@chevrotain/types': 11.0.3
- lodash-es: 4.17.21
+ lodash-es: 4.17.23
'@chevrotain/gast@11.0.3':
dependencies:
'@chevrotain/types': 11.0.3
- lodash-es: 4.17.21
+ lodash-es: 4.17.23
'@chevrotain/regexp-to-ast@11.0.3': {}
@@ -12260,19 +11987,25 @@ snapshots:
'@emnapi/wasi-threads': 1.0.1
tslib: 2.8.1
- '@emnapi/runtime@1.2.0':
+ '@emnapi/core@1.8.1':
dependencies:
+ '@emnapi/wasi-threads': 1.1.0
tslib: 2.8.1
+ optional: true
'@emnapi/runtime@1.5.0':
dependencies:
tslib: 2.8.1
- optional: true
'@emnapi/wasi-threads@1.0.1':
dependencies:
tslib: 2.8.1
+ '@emnapi/wasi-threads@1.1.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@emoji-mart/data@1.2.1': {}
'@emoji-mart/react@1.1.1(emoji-mart@5.6.0)(react@18.3.1)':
@@ -12280,227 +12013,154 @@ snapshots:
emoji-mart: 5.6.0
react: 18.3.1
- '@esbuild/aix-ppc64@0.19.11':
- optional: true
-
'@esbuild/aix-ppc64@0.25.0':
optional: true
- '@esbuild/android-arm64@0.19.11':
- optional: true
-
'@esbuild/android-arm64@0.25.0':
optional: true
- '@esbuild/android-arm@0.19.11':
- optional: true
-
'@esbuild/android-arm@0.25.0':
optional: true
- '@esbuild/android-x64@0.19.11':
- optional: true
-
'@esbuild/android-x64@0.25.0':
optional: true
- '@esbuild/darwin-arm64@0.19.11':
- optional: true
-
'@esbuild/darwin-arm64@0.25.0':
optional: true
- '@esbuild/darwin-x64@0.19.11':
- optional: true
-
'@esbuild/darwin-x64@0.25.0':
optional: true
- '@esbuild/freebsd-arm64@0.19.11':
- optional: true
-
'@esbuild/freebsd-arm64@0.25.0':
optional: true
- '@esbuild/freebsd-x64@0.19.11':
- optional: true
-
'@esbuild/freebsd-x64@0.25.0':
optional: true
- '@esbuild/linux-arm64@0.19.11':
- optional: true
-
'@esbuild/linux-arm64@0.25.0':
optional: true
- '@esbuild/linux-arm@0.19.11':
- optional: true
-
'@esbuild/linux-arm@0.25.0':
optional: true
- '@esbuild/linux-ia32@0.19.11':
- optional: true
-
'@esbuild/linux-ia32@0.25.0':
optional: true
- '@esbuild/linux-loong64@0.19.11':
- optional: true
-
'@esbuild/linux-loong64@0.25.0':
optional: true
- '@esbuild/linux-mips64el@0.19.11':
- optional: true
-
'@esbuild/linux-mips64el@0.25.0':
optional: true
- '@esbuild/linux-ppc64@0.19.11':
- optional: true
-
'@esbuild/linux-ppc64@0.25.0':
optional: true
- '@esbuild/linux-riscv64@0.19.11':
- optional: true
-
'@esbuild/linux-riscv64@0.25.0':
optional: true
- '@esbuild/linux-s390x@0.19.11':
- optional: true
-
'@esbuild/linux-s390x@0.25.0':
optional: true
- '@esbuild/linux-x64@0.19.11':
- optional: true
-
'@esbuild/linux-x64@0.25.0':
optional: true
'@esbuild/netbsd-arm64@0.25.0':
optional: true
- '@esbuild/netbsd-x64@0.19.11':
- optional: true
-
'@esbuild/netbsd-x64@0.25.0':
optional: true
'@esbuild/openbsd-arm64@0.25.0':
optional: true
- '@esbuild/openbsd-x64@0.19.11':
- optional: true
-
'@esbuild/openbsd-x64@0.25.0':
optional: true
- '@esbuild/sunos-x64@0.19.11':
- optional: true
-
'@esbuild/sunos-x64@0.25.0':
optional: true
- '@esbuild/win32-arm64@0.19.11':
- optional: true
-
'@esbuild/win32-arm64@0.25.0':
optional: true
- '@esbuild/win32-ia32@0.19.11':
- optional: true
-
'@esbuild/win32-ia32@0.25.0':
optional: true
- '@esbuild/win32-x64@0.19.11':
- optional: true
-
'@esbuild/win32-x64@0.25.0':
optional: true
- '@eslint-community/eslint-utils@4.4.0(eslint@9.15.0(jiti@1.21.0))':
+ '@eslint-community/eslint-utils@4.4.0(eslint@9.39.2(jiti@2.4.2))':
dependencies:
- eslint: 9.15.0(jiti@1.21.0)
+ eslint: 9.39.2(jiti@2.4.2)
eslint-visitor-keys: 3.4.3
- '@eslint-community/eslint-utils@4.4.0(eslint@9.20.1(jiti@1.21.0))':
+ '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.4.2))':
dependencies:
- eslint: 9.20.1(jiti@1.21.0)
+ eslint: 9.39.2(jiti@2.4.2)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
- '@eslint/config-array@0.19.0':
+ '@eslint/config-array@0.21.1':
dependencies:
- '@eslint/object-schema': 2.1.4
- debug: 4.3.4
+ '@eslint/object-schema': 2.1.7
+ debug: 4.4.3
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
- '@eslint/core@0.11.0':
+ '@eslint/config-helpers@0.4.2':
+ dependencies:
+ '@eslint/core': 0.17.0
+
+ '@eslint/core@0.17.0':
dependencies:
'@types/json-schema': 7.0.15
- '@eslint/core@0.9.0': {}
-
- '@eslint/eslintrc@3.2.0':
+ '@eslint/eslintrc@3.3.3':
dependencies:
ajv: 6.12.6
- debug: 4.3.4
- espree: 10.3.0
+ debug: 4.4.3
+ espree: 10.4.0
globals: 14.0.0
ignore: 5.3.1
import-fresh: 3.3.0
- js-yaml: 4.1.0
+ js-yaml: 4.1.1
minimatch: 3.1.2
strip-json-comments: 3.1.1
transitivePeerDependencies:
- supports-color
- '@eslint/js@9.15.0': {}
-
'@eslint/js@9.16.0': {}
'@eslint/js@9.20.0': {}
- '@eslint/object-schema@2.1.4': {}
+ '@eslint/js@9.39.2': {}
- '@eslint/plugin-kit@0.2.3':
+ '@eslint/object-schema@2.1.7': {}
+
+ '@eslint/plugin-kit@0.4.1':
dependencies:
+ '@eslint/core': 0.17.0
levn: 0.4.1
- '@eslint/plugin-kit@0.2.6':
- dependencies:
- '@eslint/core': 0.11.0
- levn: 0.4.1
-
- '@excalidraw/common@0.18.0-c158187':
+ '@excalidraw/common@0.18.0-3a5ef40':
dependencies:
tinycolor2: 1.6.0
- '@excalidraw/element@0.18.0-c158187':
+ '@excalidraw/element@0.18.0-3a5ef40':
dependencies:
- '@excalidraw/common': 0.18.0-c158187
- '@excalidraw/math': 0.18.0-c158187
+ '@excalidraw/common': 0.18.0-3a5ef40
+ '@excalidraw/math': 0.18.0-3a5ef40
- '@excalidraw/excalidraw@0.18.0-c158187(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@excalidraw/excalidraw@0.18.0-3a5ef40(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@braintree/sanitize-url': 6.0.2
- '@excalidraw/common': 0.18.0-c158187
- '@excalidraw/element': 0.18.0-c158187
+ '@excalidraw/common': 0.18.0-3a5ef40
+ '@excalidraw/element': 0.18.0-3a5ef40
'@excalidraw/laser-pointer': 1.3.1
- '@excalidraw/math': 0.18.0-c158187
- '@excalidraw/mermaid-to-excalidraw': 1.1.3(react@18.3.1)
+ '@excalidraw/math': 0.18.0-3a5ef40
+ '@excalidraw/mermaid-to-excalidraw': 2.0.0-rfc3
'@excalidraw/random-username': 1.1.0
- '@radix-ui/react-popover': 1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-tabs': 1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
browser-fs-access: 0.29.1
canvas-roundrect-polyfill: 0.0.1
clsx: 1.1.1
@@ -12514,7 +12174,6 @@ snapshots:
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
@@ -12523,6 +12182,7 @@ snapshots:
png-chunks-extract: 1.0.0
points-on-curve: 1.0.1
pwacompat: 2.0.17
+ radix-ui: 1.4.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
roughjs: 4.6.4
@@ -12538,25 +12198,24 @@ snapshots:
'@excalidraw/markdown-to-text@0.1.2': {}
- '@excalidraw/math@0.18.0-c158187':
+ '@excalidraw/math@0.18.0-3a5ef40':
dependencies:
- '@excalidraw/common': 0.18.0-c158187
+ '@excalidraw/common': 0.18.0-3a5ef40
- '@excalidraw/mermaid-to-excalidraw@1.1.3(react@18.3.1)':
+ '@excalidraw/mermaid-to-excalidraw@2.0.0-rfc3':
dependencies:
'@excalidraw/markdown-to-text': 0.1.2
- mermaid: 10.9.4
+ '@mermaid-js/parser': 0.6.3
+ mermaid: 11.12.2
nanoid: 4.0.2
- react-split: 2.0.14(react@18.3.1)
transitivePeerDependencies:
- - react
- supports-color
'@excalidraw/random-username@1.1.0': {}
'@fastify/accept-negotiator@2.0.1': {}
- '@fastify/ajv-compiler@4.0.2':
+ '@fastify/ajv-compiler@4.0.5':
dependencies:
ajv: 8.17.1
ajv-formats: 3.0.1(ajv@8.17.1)
@@ -12593,12 +12252,12 @@ snapshots:
dependencies:
dequal: 2.0.3
- '@fastify/multipart@9.3.0':
+ '@fastify/multipart@9.4.0':
dependencies:
'@fastify/busboy': 3.1.1
'@fastify/deepmerge': 3.1.0
'@fastify/error': 4.0.0
- fastify-plugin: 5.0.1
+ fastify-plugin: 5.1.0
secure-json-parse: 4.0.0
'@fastify/proxy-addr@5.0.0':
@@ -12614,14 +12273,14 @@ snapshots:
http-errors: 2.0.0
mime: 3.0.0
- '@fastify/static@8.3.0':
+ '@fastify/static@9.0.0':
dependencies:
'@fastify/accept-negotiator': 2.0.1
'@fastify/send': 4.1.0
- content-disposition: 0.5.4
- fastify-plugin: 5.0.1
+ content-disposition: 1.0.1
+ fastify-plugin: 5.1.0
fastq: 1.17.1
- glob: 11.0.1
+ glob: 10.5.0
'@floating-ui/core@1.7.3':
dependencies:
@@ -12637,12 +12296,6 @@ snapshots:
'@floating-ui/core': 1.7.3
'@floating-ui/utils': 0.2.10
- '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@floating-ui/dom': 1.7.3
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
-
'@floating-ui/react-dom@2.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@floating-ui/dom': 1.7.4
@@ -12659,13 +12312,13 @@ snapshots:
'@floating-ui/utils@0.2.10': {}
- '@hocuspocus/common@3.4.3':
+ '@hocuspocus/common@3.4.4':
dependencies:
lib0: 0.2.117
- '@hocuspocus/provider@3.4.3(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29)':
+ '@hocuspocus/provider@3.4.4(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29)':
dependencies:
- '@hocuspocus/common': 3.4.3
+ '@hocuspocus/common': 3.4.4
'@lifeomic/attempt': 3.0.3
lib0: 0.2.117
ws: 8.19.0
@@ -12675,9 +12328,9 @@ snapshots:
- bufferutil
- utf-8-validate
- '@hocuspocus/server@3.4.3(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29)':
+ '@hocuspocus/server@3.4.4(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29)':
dependencies:
- '@hocuspocus/common': 3.4.3
+ '@hocuspocus/common': 3.4.4
async-lock: 1.4.1
async-mutex: 0.5.0
kleur: 4.1.5
@@ -12689,7 +12342,7 @@ snapshots:
- bufferutil
- utf-8-validate
- '@hocuspocus/transformer@3.4.3(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(y-prosemirror@1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29)':
+ '@hocuspocus/transformer@3.4.4(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(y-prosemirror@1.3.7(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29)':
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
'@tiptap/pm': 3.17.1
@@ -12708,7 +12361,7 @@ snapshots:
'@humanwhocodes/retry@0.3.0': {}
- '@humanwhocodes/retry@0.4.1': {}
+ '@humanwhocodes/retry@0.4.3': {}
'@iconify/types@2.0.0': {}
@@ -12725,91 +12378,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@img/sharp-darwin-arm64@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-darwin-arm64': 1.2.0
- optional: true
-
- '@img/sharp-darwin-x64@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-darwin-x64': 1.2.0
- optional: true
-
- '@img/sharp-libvips-darwin-arm64@1.2.0':
- optional: true
-
- '@img/sharp-libvips-darwin-x64@1.2.0':
- optional: true
-
- '@img/sharp-libvips-linux-arm64@1.2.0':
- optional: true
-
- '@img/sharp-libvips-linux-arm@1.2.0':
- optional: true
-
- '@img/sharp-libvips-linux-ppc64@1.2.0':
- optional: true
-
- '@img/sharp-libvips-linux-s390x@1.2.0':
- optional: true
-
- '@img/sharp-libvips-linux-x64@1.2.0':
- optional: true
-
- '@img/sharp-libvips-linuxmusl-arm64@1.2.0':
- optional: true
-
- '@img/sharp-libvips-linuxmusl-x64@1.2.0':
- optional: true
-
- '@img/sharp-linux-arm64@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-linux-arm64': 1.2.0
- optional: true
-
- '@img/sharp-linux-arm@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-linux-arm': 1.2.0
- optional: true
-
- '@img/sharp-linux-ppc64@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-linux-ppc64': 1.2.0
- optional: true
-
- '@img/sharp-linux-s390x@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-linux-s390x': 1.2.0
- optional: true
-
- '@img/sharp-linux-x64@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-linux-x64': 1.2.0
- optional: true
-
- '@img/sharp-linuxmusl-arm64@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-linuxmusl-arm64': 1.2.0
- optional: true
-
- '@img/sharp-linuxmusl-x64@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-linuxmusl-x64': 1.2.0
- optional: true
-
- '@img/sharp-wasm32@0.34.3':
- dependencies:
- '@emnapi/runtime': 1.5.0
- optional: true
-
- '@img/sharp-win32-arm64@0.34.3':
- optional: true
-
- '@img/sharp-win32-ia32@0.34.3':
- optional: true
-
- '@img/sharp-win32-x64@0.34.3':
- optional: true
+ '@inquirer/ansi@1.0.2': {}
'@inquirer/checkbox@4.1.2(@types/node@22.13.4)':
dependencies:
@@ -12821,6 +12390,23 @@ snapshots:
optionalDependencies:
'@types/node': 22.13.4
+ '@inquirer/checkbox@4.3.2(@types/node@22.13.4)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/core': 10.3.2(@types/node@22.13.4)
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@22.13.4)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.13.4
+
+ '@inquirer/confirm@5.1.21(@types/node@22.13.4)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.13.4)
+ '@inquirer/type': 3.0.10(@types/node@22.13.4)
+ optionalDependencies:
+ '@types/node': 22.13.4
+
'@inquirer/confirm@5.1.6(@types/node@22.13.4)':
dependencies:
'@inquirer/core': 10.1.7(@types/node@22.13.4)
@@ -12841,6 +12427,27 @@ snapshots:
optionalDependencies:
'@types/node': 22.13.4
+ '@inquirer/core@10.3.2(@types/node@22.13.4)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@22.13.4)
+ cli-width: 4.1.0
+ mute-stream: 2.0.0
+ signal-exit: 4.1.0
+ wrap-ansi: 6.2.0
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.13.4
+
+ '@inquirer/editor@4.2.23(@types/node@22.13.4)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.13.4)
+ '@inquirer/external-editor': 1.0.3(@types/node@22.13.4)
+ '@inquirer/type': 3.0.10(@types/node@22.13.4)
+ optionalDependencies:
+ '@types/node': 22.13.4
+
'@inquirer/editor@4.2.7(@types/node@22.13.4)':
dependencies:
'@inquirer/core': 10.1.7(@types/node@22.13.4)
@@ -12849,6 +12456,14 @@ snapshots:
optionalDependencies:
'@types/node': 22.13.4
+ '@inquirer/expand@4.0.23(@types/node@22.13.4)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.13.4)
+ '@inquirer/type': 3.0.10(@types/node@22.13.4)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.13.4
+
'@inquirer/expand@4.0.9(@types/node@22.13.4)':
dependencies:
'@inquirer/core': 10.1.7(@types/node@22.13.4)
@@ -12857,8 +12472,17 @@ snapshots:
optionalDependencies:
'@types/node': 22.13.4
+ '@inquirer/external-editor@1.0.3(@types/node@22.13.4)':
+ dependencies:
+ chardet: 2.1.1
+ iconv-lite: 0.7.2
+ optionalDependencies:
+ '@types/node': 22.13.4
+
'@inquirer/figures@1.0.10': {}
+ '@inquirer/figures@1.0.15': {}
+
'@inquirer/input@4.1.6(@types/node@22.13.4)':
dependencies:
'@inquirer/core': 10.1.7(@types/node@22.13.4)
@@ -12866,6 +12490,20 @@ snapshots:
optionalDependencies:
'@types/node': 22.13.4
+ '@inquirer/input@4.3.1(@types/node@22.13.4)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.13.4)
+ '@inquirer/type': 3.0.10(@types/node@22.13.4)
+ optionalDependencies:
+ '@types/node': 22.13.4
+
+ '@inquirer/number@3.0.23(@types/node@22.13.4)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.13.4)
+ '@inquirer/type': 3.0.10(@types/node@22.13.4)
+ optionalDependencies:
+ '@types/node': 22.13.4
+
'@inquirer/number@3.0.9(@types/node@22.13.4)':
dependencies:
'@inquirer/core': 10.1.7(@types/node@22.13.4)
@@ -12873,6 +12511,14 @@ snapshots:
optionalDependencies:
'@types/node': 22.13.4
+ '@inquirer/password@4.0.23(@types/node@22.13.4)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/core': 10.3.2(@types/node@22.13.4)
+ '@inquirer/type': 3.0.10(@types/node@22.13.4)
+ optionalDependencies:
+ '@types/node': 22.13.4
+
'@inquirer/password@4.0.9(@types/node@22.13.4)':
dependencies:
'@inquirer/core': 10.1.7(@types/node@22.13.4)
@@ -12881,18 +12527,19 @@ snapshots:
optionalDependencies:
'@types/node': 22.13.4
- '@inquirer/prompts@7.2.1(@types/node@22.13.4)':
+ '@inquirer/prompts@7.10.1(@types/node@22.13.4)':
dependencies:
- '@inquirer/checkbox': 4.1.2(@types/node@22.13.4)
- '@inquirer/confirm': 5.1.6(@types/node@22.13.4)
- '@inquirer/editor': 4.2.7(@types/node@22.13.4)
- '@inquirer/expand': 4.0.9(@types/node@22.13.4)
- '@inquirer/input': 4.1.6(@types/node@22.13.4)
- '@inquirer/number': 3.0.9(@types/node@22.13.4)
- '@inquirer/password': 4.0.9(@types/node@22.13.4)
- '@inquirer/rawlist': 4.0.9(@types/node@22.13.4)
- '@inquirer/search': 3.0.9(@types/node@22.13.4)
- '@inquirer/select': 4.0.9(@types/node@22.13.4)
+ '@inquirer/checkbox': 4.3.2(@types/node@22.13.4)
+ '@inquirer/confirm': 5.1.21(@types/node@22.13.4)
+ '@inquirer/editor': 4.2.23(@types/node@22.13.4)
+ '@inquirer/expand': 4.0.23(@types/node@22.13.4)
+ '@inquirer/input': 4.3.1(@types/node@22.13.4)
+ '@inquirer/number': 3.0.23(@types/node@22.13.4)
+ '@inquirer/password': 4.0.23(@types/node@22.13.4)
+ '@inquirer/rawlist': 4.1.11(@types/node@22.13.4)
+ '@inquirer/search': 3.2.2(@types/node@22.13.4)
+ '@inquirer/select': 4.4.2(@types/node@22.13.4)
+ optionalDependencies:
'@types/node': 22.13.4
'@inquirer/prompts@7.3.2(@types/node@22.13.4)':
@@ -12918,6 +12565,14 @@ snapshots:
optionalDependencies:
'@types/node': 22.13.4
+ '@inquirer/rawlist@4.1.11(@types/node@22.13.4)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.13.4)
+ '@inquirer/type': 3.0.10(@types/node@22.13.4)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.13.4
+
'@inquirer/search@3.0.9(@types/node@22.13.4)':
dependencies:
'@inquirer/core': 10.1.7(@types/node@22.13.4)
@@ -12927,6 +12582,15 @@ snapshots:
optionalDependencies:
'@types/node': 22.13.4
+ '@inquirer/search@3.2.2(@types/node@22.13.4)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.13.4)
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@22.13.4)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.13.4
+
'@inquirer/select@4.0.9(@types/node@22.13.4)':
dependencies:
'@inquirer/core': 10.1.7(@types/node@22.13.4)
@@ -12937,6 +12601,20 @@ snapshots:
optionalDependencies:
'@types/node': 22.13.4
+ '@inquirer/select@4.4.2(@types/node@22.13.4)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/core': 10.3.2(@types/node@22.13.4)
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@22.13.4)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.13.4
+
+ '@inquirer/type@3.0.10(@types/node@22.13.4)':
+ optionalDependencies:
+ '@types/node': 22.13.4
+
'@inquirer/type@3.0.4(@types/node@22.13.4)':
optionalDependencies:
'@types/node': 22.13.4
@@ -12945,6 +12623,12 @@ snapshots:
'@ioredis/commands@1.4.0': {}
+ '@isaacs/balanced-match@4.0.1': {}
+
+ '@isaacs/brace-expansion@5.0.1':
+ dependencies:
+ '@isaacs/balanced-match': 4.0.1
+
'@isaacs/cliui@8.0.2':
dependencies:
string-width: 5.1.2
@@ -12959,171 +12643,188 @@ snapshots:
camelcase: 5.3.1
find-up: 4.1.0
get-package-type: 0.1.0
- js-yaml: 3.14.1
+ js-yaml: 3.14.2
resolve-from: 5.0.0
'@istanbuljs/schema@0.1.3': {}
- '@jest/console@29.7.0':
+ '@jest/console@30.2.0':
dependencies:
- '@jest/types': 29.6.3
+ '@jest/types': 30.2.0
'@types/node': 22.19.1
chalk: 4.1.2
- jest-message-util: 29.7.0
- jest-util: 29.7.0
+ jest-message-util: 30.2.0
+ jest-util: 30.2.0
slash: 3.0.0
- '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))':
+ '@jest/core@30.2.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))':
dependencies:
- '@jest/console': 29.7.0
- '@jest/reporters': 29.7.0
- '@jest/test-result': 29.7.0
- '@jest/transform': 29.7.0
- '@jest/types': 29.6.3
+ '@jest/console': 30.2.0
+ '@jest/pattern': 30.0.1
+ '@jest/reporters': 30.2.0
+ '@jest/test-result': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
'@types/node': 22.19.1
ansi-escapes: 4.3.2
chalk: 4.1.2
- ci-info: 3.9.0
- exit: 0.1.2
+ ci-info: 4.4.0
+ exit-x: 0.2.2
graceful-fs: 4.2.11
- jest-changed-files: 29.7.0
- jest-config: 29.7.0(@types/node@22.19.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))
- jest-haste-map: 29.7.0
- jest-message-util: 29.7.0
- jest-regex-util: 29.6.3
- jest-resolve: 29.7.0
- jest-resolve-dependencies: 29.7.0
- jest-runner: 29.7.0
- jest-runtime: 29.7.0
- jest-snapshot: 29.7.0
- jest-util: 29.7.0
- jest-validate: 29.7.0
- jest-watcher: 29.7.0
- micromatch: 4.0.5
- pretty-format: 29.7.0
+ jest-changed-files: 30.2.0
+ jest-config: 30.2.0(@types/node@22.19.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))
+ jest-haste-map: 30.2.0
+ jest-message-util: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-resolve: 30.2.0
+ jest-resolve-dependencies: 30.2.0
+ jest-runner: 30.2.0
+ jest-runtime: 30.2.0
+ jest-snapshot: 30.2.0
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+ jest-watcher: 30.2.0
+ micromatch: 4.0.8
+ pretty-format: 30.2.0
slash: 3.0.0
- strip-ansi: 6.0.1
transitivePeerDependencies:
- babel-plugin-macros
+ - esbuild-register
- supports-color
- ts-node
- '@jest/environment@29.7.0':
+ '@jest/diff-sequences@30.0.1': {}
+
+ '@jest/environment@30.2.0':
dependencies:
- '@jest/fake-timers': 29.7.0
- '@jest/types': 29.6.3
+ '@jest/fake-timers': 30.2.0
+ '@jest/types': 30.2.0
'@types/node': 22.19.1
- jest-mock: 29.7.0
+ jest-mock: 30.2.0
- '@jest/expect-utils@29.7.0':
+ '@jest/expect-utils@30.2.0':
dependencies:
- jest-get-type: 29.6.3
+ '@jest/get-type': 30.1.0
- '@jest/expect@29.7.0':
+ '@jest/expect@30.2.0':
dependencies:
- expect: 29.7.0
- jest-snapshot: 29.7.0
+ expect: 30.2.0
+ jest-snapshot: 30.2.0
transitivePeerDependencies:
- supports-color
- '@jest/fake-timers@29.7.0':
+ '@jest/fake-timers@30.2.0':
dependencies:
- '@jest/types': 29.6.3
- '@sinonjs/fake-timers': 10.3.0
+ '@jest/types': 30.2.0
+ '@sinonjs/fake-timers': 13.0.5
'@types/node': 22.19.1
- jest-message-util: 29.7.0
- jest-mock: 29.7.0
- jest-util: 29.7.0
+ jest-message-util: 30.2.0
+ jest-mock: 30.2.0
+ jest-util: 30.2.0
- '@jest/globals@29.7.0':
+ '@jest/get-type@30.1.0': {}
+
+ '@jest/globals@30.2.0':
dependencies:
- '@jest/environment': 29.7.0
- '@jest/expect': 29.7.0
- '@jest/types': 29.6.3
- jest-mock: 29.7.0
+ '@jest/environment': 30.2.0
+ '@jest/expect': 30.2.0
+ '@jest/types': 30.2.0
+ jest-mock: 30.2.0
transitivePeerDependencies:
- supports-color
- '@jest/reporters@29.7.0':
+ '@jest/pattern@30.0.1':
+ dependencies:
+ '@types/node': 22.19.1
+ jest-regex-util: 30.0.1
+
+ '@jest/reporters@30.2.0':
dependencies:
'@bcoe/v8-coverage': 0.2.3
- '@jest/console': 29.7.0
- '@jest/test-result': 29.7.0
- '@jest/transform': 29.7.0
- '@jest/types': 29.6.3
- '@jridgewell/trace-mapping': 0.3.25
+ '@jest/console': 30.2.0
+ '@jest/test-result': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ '@jridgewell/trace-mapping': 0.3.31
'@types/node': 22.19.1
chalk: 4.1.2
collect-v8-coverage: 1.0.2
- exit: 0.1.2
- glob: 7.2.3
+ exit-x: 0.2.2
+ glob: 10.5.0
graceful-fs: 4.2.11
istanbul-lib-coverage: 3.2.2
istanbul-lib-instrument: 6.0.2
istanbul-lib-report: 3.0.1
- istanbul-lib-source-maps: 4.0.1
+ istanbul-lib-source-maps: 5.0.6
istanbul-reports: 3.1.7
- jest-message-util: 29.7.0
- jest-util: 29.7.0
- jest-worker: 29.7.0
+ jest-message-util: 30.2.0
+ jest-util: 30.2.0
+ jest-worker: 30.2.0
slash: 3.0.0
string-length: 4.0.2
- strip-ansi: 6.0.1
v8-to-istanbul: 9.2.0
transitivePeerDependencies:
- supports-color
- '@jest/schemas@29.6.3':
+ '@jest/schemas@30.0.5':
dependencies:
- '@sinclair/typebox': 0.27.8
+ '@sinclair/typebox': 0.34.48
- '@jest/source-map@29.6.3':
+ '@jest/snapshot-utils@30.2.0':
dependencies:
- '@jridgewell/trace-mapping': 0.3.25
+ '@jest/types': 30.2.0
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ natural-compare: 1.4.0
+
+ '@jest/source-map@30.0.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
callsites: 3.1.0
graceful-fs: 4.2.11
- '@jest/test-result@29.7.0':
+ '@jest/test-result@30.2.0':
dependencies:
- '@jest/console': 29.7.0
- '@jest/types': 29.6.3
+ '@jest/console': 30.2.0
+ '@jest/types': 30.2.0
'@types/istanbul-lib-coverage': 2.0.6
collect-v8-coverage: 1.0.2
- '@jest/test-sequencer@29.7.0':
+ '@jest/test-sequencer@30.2.0':
dependencies:
- '@jest/test-result': 29.7.0
+ '@jest/test-result': 30.2.0
graceful-fs: 4.2.11
- jest-haste-map: 29.7.0
+ jest-haste-map: 30.2.0
slash: 3.0.0
- '@jest/transform@29.7.0':
+ '@jest/transform@30.2.0':
dependencies:
- '@babel/core': 7.24.6
- '@jest/types': 29.6.3
- '@jridgewell/trace-mapping': 0.3.25
- babel-plugin-istanbul: 6.1.1
+ '@babel/core': 7.28.5
+ '@jest/types': 30.2.0
+ '@jridgewell/trace-mapping': 0.3.31
+ babel-plugin-istanbul: 7.0.1
chalk: 4.1.2
convert-source-map: 2.0.0
fast-json-stable-stringify: 2.1.0
graceful-fs: 4.2.11
- jest-haste-map: 29.7.0
- jest-regex-util: 29.6.3
- jest-util: 29.7.0
+ jest-haste-map: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-util: 30.2.0
micromatch: 4.0.8
- pirates: 4.0.6
+ pirates: 4.0.7
slash: 3.0.0
- write-file-atomic: 4.0.2
+ write-file-atomic: 5.0.1
transitivePeerDependencies:
- supports-color
- '@jest/types@29.6.3':
+ '@jest/types@30.2.0':
dependencies:
- '@jest/schemas': 29.6.3
+ '@jest/pattern': 30.0.1
+ '@jest/schemas': 30.0.5
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
'@types/node': 22.19.1
- '@types/yargs': 17.0.32
+ '@types/yargs': 17.0.35
chalk: 4.1.2
'@joplin/turndown-plugin-gfm@1.0.56': {}
@@ -13147,15 +12848,13 @@ snapshots:
'@jridgewell/gen-mapping@0.3.5':
dependencies:
'@jridgewell/set-array': 1.2.1
- '@jridgewell/sourcemap-codec': 1.4.15
- '@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.31
'@jridgewell/remapping@2.3.5':
dependencies:
'@jridgewell/gen-mapping': 0.3.5
- '@jridgewell/trace-mapping': 0.3.25
-
- '@jridgewell/resolve-uri@3.1.1': {}
+ '@jridgewell/trace-mapping': 0.3.31
'@jridgewell/resolve-uri@3.1.2': {}
@@ -13163,18 +12862,11 @@ snapshots:
'@jridgewell/source-map@0.3.6':
dependencies:
- '@jridgewell/gen-mapping': 0.3.5
- '@jridgewell/trace-mapping': 0.3.25
-
- '@jridgewell/sourcemap-codec@1.4.15': {}
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
'@jridgewell/sourcemap-codec@1.5.0': {}
- '@jridgewell/trace-mapping@0.3.25':
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.4.15
-
'@jridgewell/trace-mapping@0.3.31':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
@@ -13182,21 +12874,19 @@ snapshots:
'@jridgewell/trace-mapping@0.3.9':
dependencies:
- '@jridgewell/resolve-uri': 3.1.1
- '@jridgewell/sourcemap-codec': 1.4.15
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
- '@keyv/serialize@1.0.3':
- dependencies:
- buffer: 6.0.3
+ '@keyv/serialize@1.1.1': {}
- '@langchain/core@1.1.13(@opentelemetry/api@1.9.0)(openai@6.2.0(ws@8.19.0)(zod@4.3.5))':
+ '@langchain/core@1.1.18(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.19.0)(zod@4.3.6))':
dependencies:
'@cfworker/json-schema': 4.1.1
ansi-styles: 5.2.0
camelcase: 6.3.0
decamelize: 1.2.0
js-tiktoken: 1.0.21
- langsmith: 0.4.6(@opentelemetry/api@1.9.0)(openai@6.2.0(ws@8.19.0)(zod@4.3.5))
+ langsmith: 0.4.12(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.19.0)(zod@4.3.6))
mustache: 4.2.0
p-queue: 6.6.2
uuid: 10.0.0
@@ -13207,9 +12897,9 @@ snapshots:
- '@opentelemetry/sdk-trace-base'
- openai
- '@langchain/textsplitters@1.0.1(@langchain/core@1.1.13(@opentelemetry/api@1.9.0)(openai@6.2.0(ws@8.19.0)(zod@4.3.5)))':
+ '@langchain/textsplitters@1.0.1(@langchain/core@1.1.18(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.19.0)(zod@4.3.6)))':
dependencies:
- '@langchain/core': 1.1.13(@opentelemetry/api@1.9.0)(openai@6.2.0(ws@8.19.0)(zod@4.3.5))
+ '@langchain/core': 1.1.18(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.19.0)(zod@4.3.6))
js-tiktoken: 1.0.21
'@lifeomic/attempt@3.0.3': {}
@@ -13218,10 +12908,10 @@ snapshots:
'@lukeed/ms@2.0.2': {}
- '@mantine/core@8.3.12(@mantine/hooks@8.3.12(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@mantine/core@8.3.14(@mantine/hooks@8.3.14(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@floating-ui/react': 0.27.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@mantine/hooks': 8.3.12(react@18.3.1)
+ '@mantine/hooks': 8.3.14(react@18.3.1)
clsx: 2.1.1
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@@ -13232,50 +12922,50 @@ snapshots:
transitivePeerDependencies:
- '@types/react'
- '@mantine/dates@8.3.12(@mantine/core@8.3.12(@mantine/hooks@8.3.12(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.12(react@18.3.1))(dayjs@1.11.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@mantine/dates@8.3.14(@mantine/core@8.3.14(@mantine/hooks@8.3.14(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.14(react@18.3.1))(dayjs@1.11.19)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@mantine/core': 8.3.12(@mantine/hooks@8.3.12(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@mantine/hooks': 8.3.12(react@18.3.1)
+ '@mantine/core': 8.3.14(@mantine/hooks@8.3.14(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@mantine/hooks': 8.3.14(react@18.3.1)
clsx: 2.1.1
dayjs: 1.11.19
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- '@mantine/form@8.3.12(react@18.3.1)':
+ '@mantine/form@8.3.14(react@18.3.1)':
dependencies:
fast-deep-equal: 3.1.3
klona: 2.0.6
react: 18.3.1
- '@mantine/hooks@8.3.12(react@18.3.1)':
+ '@mantine/hooks@8.3.14(react@18.3.1)':
dependencies:
react: 18.3.1
- '@mantine/modals@8.3.12(@mantine/core@8.3.12(@mantine/hooks@8.3.12(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.12(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@mantine/modals@8.3.14(@mantine/core@8.3.14(@mantine/hooks@8.3.14(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.14(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@mantine/core': 8.3.12(@mantine/hooks@8.3.12(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@mantine/hooks': 8.3.12(react@18.3.1)
+ '@mantine/core': 8.3.14(@mantine/hooks@8.3.14(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@mantine/hooks': 8.3.14(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- '@mantine/notifications@8.3.12(@mantine/core@8.3.12(@mantine/hooks@8.3.12(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.12(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@mantine/notifications@8.3.14(@mantine/core@8.3.14(@mantine/hooks@8.3.14(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.14(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@mantine/core': 8.3.12(@mantine/hooks@8.3.12(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@mantine/hooks': 8.3.12(react@18.3.1)
- '@mantine/store': 8.3.12(react@18.3.1)
+ '@mantine/core': 8.3.14(@mantine/hooks@8.3.14(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@mantine/hooks': 8.3.14(react@18.3.1)
+ '@mantine/store': 8.3.14(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@mantine/spotlight@8.3.12(@mantine/core@8.3.12(@mantine/hooks@8.3.12(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.12(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@mantine/spotlight@8.3.14(@mantine/core@8.3.14(@mantine/hooks@8.3.14(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.14(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@mantine/core': 8.3.12(@mantine/hooks@8.3.12(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@mantine/hooks': 8.3.12(react@18.3.1)
- '@mantine/store': 8.3.12(react@18.3.1)
+ '@mantine/core': 8.3.14(@mantine/hooks@8.3.14(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@mantine/hooks': 8.3.14(react@18.3.1)
+ '@mantine/store': 8.3.14(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- '@mantine/store@8.3.12(react@18.3.1)':
+ '@mantine/store@8.3.14(react@18.3.1)':
dependencies:
react: 18.3.1
@@ -13345,53 +13035,59 @@ snapshots:
'@napi-rs/canvas-win32-x64-msvc': 0.1.82
optional: true
+ '@napi-rs/wasm-runtime@0.2.12':
+ dependencies:
+ '@emnapi/core': 1.8.1
+ '@emnapi/runtime': 1.5.0
+ '@tybys/wasm-util': 0.10.1
+ optional: true
+
'@napi-rs/wasm-runtime@0.2.4':
dependencies:
'@emnapi/core': 1.2.0
- '@emnapi/runtime': 1.2.0
+ '@emnapi/runtime': 1.5.0
'@tybys/wasm-util': 0.9.0
- '@nestjs-labs/nestjs-ioredis@11.0.4(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)(ioredis@5.4.1)':
+ '@nestjs-labs/nestjs-ioredis@11.0.4(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(ioredis@5.4.1)':
dependencies:
'@nestjs/common': 11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
- '@nestjs/core': 11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/core': 11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
ioredis: 5.4.1
tslib: 2.8.1
- '@nestjs/bull-shared@11.0.4(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)':
+ '@nestjs/bull-shared@11.0.4(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)':
dependencies:
'@nestjs/common': 11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
- '@nestjs/core': 11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/core': 11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
tslib: 2.8.1
- '@nestjs/bullmq@11.0.4(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)(bullmq@5.65.0)':
+ '@nestjs/bullmq@11.0.4(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(bullmq@5.65.0)':
dependencies:
- '@nestjs/bull-shared': 11.0.4(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)
+ '@nestjs/bull-shared': 11.0.4(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)
'@nestjs/common': 11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
- '@nestjs/core': 11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/core': 11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
bullmq: 5.65.0
tslib: 2.8.1
- '@nestjs/cli@11.0.4(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)':
+ '@nestjs/cli@11.0.16(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)':
dependencies:
- '@angular-devkit/core': 19.1.7(chokidar@4.0.3)
- '@angular-devkit/schematics': 19.1.7(chokidar@4.0.3)
- '@angular-devkit/schematics-cli': 19.1.7(@types/node@22.13.4)(chokidar@4.0.3)
- '@inquirer/prompts': 7.3.2(@types/node@22.13.4)
- '@nestjs/schematics': 11.0.1(chokidar@4.0.3)(typescript@5.7.3)
- ansis: 3.15.0
+ '@angular-devkit/core': 19.2.19(chokidar@4.0.3)
+ '@angular-devkit/schematics': 19.2.19(chokidar@4.0.3)
+ '@angular-devkit/schematics-cli': 19.2.19(@types/node@22.13.4)(chokidar@4.0.3)
+ '@inquirer/prompts': 7.10.1(@types/node@22.13.4)
+ '@nestjs/schematics': 11.0.1(chokidar@4.0.3)(typescript@5.9.3)
+ ansis: 4.2.0
chokidar: 4.0.3
cli-table3: 0.6.5
commander: 4.1.1
- fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.5.25(@swc/helpers@0.5.5)))
- glob: 11.0.1
+ fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.5.25(@swc/helpers@0.5.5)))
+ glob: 10.5.0
node-emoji: 1.11.0
ora: 5.4.1
- tree-kill: 1.2.2
tsconfig-paths: 4.2.0
tsconfig-paths-webpack-plugin: 4.2.0
- typescript: 5.7.3
- webpack: 5.98.0(@swc/core@1.5.25(@swc/helpers@0.5.5))
+ typescript: 5.9.3
+ webpack: 5.104.1(@swc/core@1.5.25(@swc/helpers@0.5.5))
webpack-node-externals: 3.0.0
optionalDependencies:
'@swc/core': 1.5.25(@swc/helpers@0.5.5)
@@ -13421,10 +13117,10 @@ snapshots:
'@nestjs/common': 11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
dotenv: 16.4.7
dotenv-expand: 12.0.1
- lodash: 4.17.21
+ lodash: 4.17.23
rxjs: 7.8.2
- '@nestjs/core@11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)':
+ '@nestjs/core@11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)':
dependencies:
'@nestjs/common': 11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nuxt/opencollective': 0.4.1
@@ -13436,12 +13132,12 @@ snapshots:
tslib: 2.8.1
uid: 2.0.2
optionalDependencies:
- '@nestjs/websockets': 11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)(@nestjs/platform-socket.io@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/websockets': 11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(@nestjs/platform-socket.io@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
- '@nestjs/event-emitter@3.0.1(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)':
+ '@nestjs/event-emitter@3.0.1(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)':
dependencies:
'@nestjs/common': 11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
- '@nestjs/core': 11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/core': 11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
eventemitter2: 6.4.9
'@nestjs/jwt@11.0.0(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))':
@@ -13463,27 +13159,27 @@ snapshots:
'@nestjs/common': 11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
passport: 0.7.0
- '@nestjs/platform-fastify@11.1.11(@fastify/static@8.3.0)(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)':
+ '@nestjs/platform-fastify@11.1.13(@fastify/static@9.0.0)(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)':
dependencies:
'@fastify/cors': 11.2.0
'@fastify/formbody': 8.0.2
'@nestjs/common': 11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
- '@nestjs/core': 11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/core': 11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
fast-querystring: 1.1.2
- fastify: 5.6.2
+ fastify: 5.7.4
fastify-plugin: 5.1.0
- find-my-way: 9.3.0
+ find-my-way: 9.4.0
light-my-request: 6.6.0
path-to-regexp: 8.3.0
reusify: 1.1.0
tslib: 2.8.1
optionalDependencies:
- '@fastify/static': 8.3.0
+ '@fastify/static': 9.0.0
- '@nestjs/platform-socket.io@11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.11)(rxjs@7.8.2)':
+ '@nestjs/platform-socket.io@11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.13)(rxjs@7.8.2)':
dependencies:
'@nestjs/common': 11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
- '@nestjs/websockets': 11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)(@nestjs/platform-socket.io@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/websockets': 11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(@nestjs/platform-socket.io@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
rxjs: 7.8.2
socket.io: 4.8.3
tslib: 2.8.1
@@ -13492,10 +13188,10 @@ snapshots:
- supports-color
- utf-8-validate
- '@nestjs/schedule@6.1.0(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)':
+ '@nestjs/schedule@6.1.0(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)':
dependencies:
'@nestjs/common': 11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
- '@nestjs/core': 11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/core': 11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
cron: 4.3.5
'@nestjs/schematics@11.0.1(chokidar@4.0.3)(typescript@5.7.3)':
@@ -13509,61 +13205,43 @@ snapshots:
transitivePeerDependencies:
- chokidar
- '@nestjs/terminus@11.0.0(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)':
+ '@nestjs/schematics@11.0.1(chokidar@4.0.3)(typescript@5.9.3)':
+ dependencies:
+ '@angular-devkit/core': 19.1.7(chokidar@4.0.3)
+ '@angular-devkit/schematics': 19.1.7(chokidar@4.0.3)
+ comment-json: 4.2.5
+ jsonc-parser: 3.3.1
+ pluralize: 8.0.0
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - chokidar
+
+ '@nestjs/terminus@11.0.0(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)':
dependencies:
'@nestjs/common': 11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
- '@nestjs/core': 11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/core': 11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
boxen: 5.1.2
check-disk-space: 3.4.0
reflect-metadata: 0.2.2
rxjs: 7.8.2
- '@nestjs/testing@11.0.10(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)':
+ '@nestjs/testing@11.0.10(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)':
dependencies:
'@nestjs/common': 11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
- '@nestjs/core': 11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/core': 11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
tslib: 2.8.1
- '@nestjs/websockets@11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)(@nestjs/platform-socket.io@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)':
+ '@nestjs/websockets@11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(@nestjs/platform-socket.io@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)':
dependencies:
'@nestjs/common': 11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
- '@nestjs/core': 11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/core': 11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
iterare: 1.2.1
object-hash: 3.0.0
reflect-metadata: 0.2.2
rxjs: 7.8.2
tslib: 2.8.1
optionalDependencies:
- '@nestjs/platform-socket.io': 11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.11)(rxjs@7.8.2)
-
- '@next/env@14.2.10': {}
-
- '@next/swc-darwin-arm64@14.2.10':
- optional: true
-
- '@next/swc-darwin-x64@14.2.10':
- optional: true
-
- '@next/swc-linux-arm64-gnu@14.2.10':
- optional: true
-
- '@next/swc-linux-arm64-musl@14.2.10':
- optional: true
-
- '@next/swc-linux-x64-gnu@14.2.10':
- optional: true
-
- '@next/swc-linux-x64-musl@14.2.10':
- optional: true
-
- '@next/swc-win32-arm64-msvc@14.2.10':
- optional: true
-
- '@next/swc-win32-ia32-msvc@14.2.10':
- optional: true
-
- '@next/swc-win32-x64-msvc@14.2.10':
- optional: true
+ '@nestjs/platform-socket.io': 11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.13)(rxjs@7.8.2)
'@noble/hashes@1.8.0': {}
@@ -13611,97 +13289,92 @@ snapshots:
dependencies:
consola: 3.4.0
- '@nx/devkit@20.4.5(nx@20.4.5(@swc/core@1.5.25(@swc/helpers@0.5.5)))':
+ '@nx/devkit@22.5.0(nx@22.5.0)':
dependencies:
+ '@zkochan/js-yaml': 0.0.7
ejs: 3.1.10
enquirer: 2.3.6
- ignore: 5.3.1
- minimatch: 9.0.3
- nx: 20.4.5(@swc/core@1.5.25(@swc/helpers@0.5.5))
+ minimatch: 10.1.1
+ nx: 22.5.0
semver: 7.7.3
- tmp: 0.2.1
tslib: 2.8.1
yargs-parser: 21.1.1
- '@nx/js@20.4.5(@babel/traverse@7.28.5)(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.19.1)(nx@20.4.5(@swc/core@1.5.25(@swc/helpers@0.5.5)))(typescript@5.7.3)':
+ '@nx/js@22.5.0(@babel/traverse@7.28.5)(nx@22.5.0)':
dependencies:
- '@babel/core': 7.26.0
- '@babel/plugin-proposal-decorators': 7.23.7(@babel/core@7.26.0)
- '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.26.0)
- '@babel/plugin-transform-runtime': 7.23.7(@babel/core@7.26.0)
- '@babel/preset-env': 7.23.8(@babel/core@7.26.0)
- '@babel/preset-typescript': 7.23.3(@babel/core@7.26.0)
- '@babel/runtime': 7.25.6
- '@nx/devkit': 20.4.5(nx@20.4.5(@swc/core@1.5.25(@swc/helpers@0.5.5)))
- '@nx/workspace': 20.4.5(@swc/core@1.5.25(@swc/helpers@0.5.5))
+ '@babel/core': 7.28.5
+ '@babel/plugin-proposal-decorators': 7.23.7(@babel/core@7.28.5)
+ '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-runtime': 7.23.7(@babel/core@7.28.5)
+ '@babel/preset-env': 7.23.8(@babel/core@7.28.5)
+ '@babel/preset-typescript': 7.23.3(@babel/core@7.28.5)
+ '@babel/runtime': 7.26.10
+ '@nx/devkit': 22.5.0(nx@22.5.0)
+ '@nx/workspace': 22.5.0
'@zkochan/js-yaml': 0.0.7
- babel-plugin-const-enum: 1.2.0(@babel/core@7.26.0)
+ babel-plugin-const-enum: 1.2.0(@babel/core@7.28.5)
babel-plugin-macros: 3.1.0
- babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.26.0)(@babel/traverse@7.28.5)
+ babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.28.5)(@babel/traverse@7.28.5)
chalk: 4.1.2
columnify: 1.6.0
detect-port: 1.5.1
- enquirer: 2.3.6
ignore: 5.3.1
js-tokens: 4.0.0
jsonc-parser: 3.2.0
- minimatch: 9.0.3
- npm-package-arg: 11.0.1
npm-run-path: 4.0.1
- ora: 5.3.0
- semver: 7.7.2
+ picocolors: 1.1.1
+ picomatch: 4.0.2
+ semver: 7.7.3
source-map-support: 0.5.19
- tinyglobby: 0.2.12
- ts-node: 10.9.1(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.19.1)(typescript@5.7.3)
- tsconfig-paths: 4.2.0
- tslib: 2.8.0
+ tinyglobby: 0.2.15
+ tslib: 2.8.1
transitivePeerDependencies:
- '@babel/traverse'
- '@swc-node/register'
- '@swc/core'
- - '@swc/wasm'
- - '@types/node'
- debug
- nx
- supports-color
- - typescript
- '@nx/nx-darwin-arm64@20.4.5':
+ '@nx/nx-darwin-arm64@22.5.0':
optional: true
- '@nx/nx-darwin-x64@20.4.5':
+ '@nx/nx-darwin-x64@22.5.0':
optional: true
- '@nx/nx-freebsd-x64@20.4.5':
+ '@nx/nx-freebsd-x64@22.5.0':
optional: true
- '@nx/nx-linux-arm-gnueabihf@20.4.5':
+ '@nx/nx-linux-arm-gnueabihf@22.5.0':
optional: true
- '@nx/nx-linux-arm64-gnu@20.4.5':
+ '@nx/nx-linux-arm64-gnu@22.5.0':
optional: true
- '@nx/nx-linux-arm64-musl@20.4.5':
+ '@nx/nx-linux-arm64-musl@22.5.0':
optional: true
- '@nx/nx-linux-x64-gnu@20.4.5':
+ '@nx/nx-linux-x64-gnu@22.5.0':
optional: true
- '@nx/nx-linux-x64-musl@20.4.5':
+ '@nx/nx-linux-x64-musl@22.5.0':
optional: true
- '@nx/nx-win32-arm64-msvc@20.4.5':
+ '@nx/nx-win32-arm64-msvc@22.5.0':
optional: true
- '@nx/nx-win32-x64-msvc@20.4.5':
+ '@nx/nx-win32-x64-msvc@22.5.0':
optional: true
- '@nx/workspace@20.4.5(@swc/core@1.5.25(@swc/helpers@0.5.5))':
+ '@nx/workspace@22.5.0':
dependencies:
- '@nx/devkit': 20.4.5(nx@20.4.5(@swc/core@1.5.25(@swc/helpers@0.5.5)))
+ '@nx/devkit': 22.5.0(nx@22.5.0)
+ '@zkochan/js-yaml': 0.0.7
chalk: 4.1.2
enquirer: 2.3.6
- nx: 20.4.5(@swc/core@1.5.25(@swc/helpers@0.5.5))
+ nx: 22.5.0
+ picomatch: 4.0.2
+ semver: 7.7.3
tslib: 2.8.1
yargs-parser: 21.1.1
transitivePeerDependencies:
@@ -13709,244 +13382,868 @@ snapshots:
- '@swc/core'
- debug
- '@one-ini/wasm@0.1.1': {}
+ '@opentelemetry/api-logs@0.208.0':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
'@opentelemetry/api@1.9.0': {}
+ '@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/semantic-conventions': 1.39.0
+
+ '@opentelemetry/core@2.5.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/semantic-conventions': 1.39.0
+
+ '@opentelemetry/exporter-logs-otlp-http@0.208.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/api-logs': 0.208.0
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/otlp-exporter-base': 0.208.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0)
+
+ '@opentelemetry/otlp-exporter-base@0.208.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0)
+
+ '@opentelemetry/otlp-transformer@0.208.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/api-logs': 0.208.0
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-metrics': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0)
+ protobufjs: 7.5.4
+
+ '@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/semantic-conventions': 1.39.0
+
+ '@opentelemetry/resources@2.5.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/semantic-conventions': 1.39.0
+
+ '@opentelemetry/sdk-logs@0.208.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/api-logs': 0.208.0
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
+
+ '@opentelemetry/sdk-metrics@2.2.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
+
+ '@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/semantic-conventions': 1.39.0
+
+ '@opentelemetry/semantic-conventions@1.39.0': {}
+
+ '@paralleldrive/cuid2@2.3.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
'@pinojs/redact@0.4.0': {}
'@pkgjs/parseargs@0.11.0':
optional: true
- '@radix-ui/primitive@1.1.1': {}
+ '@pkgr/core@0.2.9': {}
- '@radix-ui/react-arrow@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@posthog/core@1.22.0':
dependencies:
- '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ cross-spawn: 7.0.5
+
+ '@posthog/types@1.345.5': {}
+
+ '@protobufjs/aspromise@1.1.2': {}
+
+ '@protobufjs/base64@1.1.2': {}
+
+ '@protobufjs/codegen@2.0.4': {}
+
+ '@protobufjs/eventemitter@1.1.0': {}
+
+ '@protobufjs/fetch@1.1.0':
+ dependencies:
+ '@protobufjs/aspromise': 1.1.2
+ '@protobufjs/inquire': 1.1.0
+
+ '@protobufjs/float@1.0.2': {}
+
+ '@protobufjs/inquire@1.1.0': {}
+
+ '@protobufjs/path@1.1.2': {}
+
+ '@protobufjs/pool@1.1.0': {}
+
+ '@protobufjs/utf8@1.1.0': {}
+
+ '@radix-ui/number@1.1.1': {}
+
+ '@radix-ui/primitive@1.1.3': {}
+
+ '@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.12
'@types/react-dom': 18.3.1
- '@radix-ui/react-collection@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@radix-ui/react-accordion@1.2.12(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-slot': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.12
'@types/react-dom': 18.3.1
- '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.12)(react@18.3.1)':
+ '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.12
-
- '@radix-ui/react-context@1.1.1(@types/react@18.3.12)(react@18.3.1)':
- dependencies:
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.12
-
- '@radix-ui/react-direction@1.1.0(@types/react@18.3.12)(react@18.3.1)':
- dependencies:
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.12
-
- '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/primitive': 1.1.1
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-dialog': 1.1.15(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.2.3(@types/react@18.3.12)(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.12
'@types/react-dom': 18.3.1
- '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.12)(react@18.3.1)':
+ '@radix-ui/react-arrow@1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- react: 18.3.1
- optionalDependencies:
- '@types/react': 18.3.12
-
- '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
- dependencies:
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.12
'@types/react-dom': 18.3.1
- '@radix-ui/react-id@1.1.0(@types/react@18.3.12)(react@18.3.1)':
+ '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-avatar@1.1.10(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-checkbox@1.3.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-collapsible@1.1.12(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-collection@1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.2.3(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.12)(react@18.3.1)':
dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1)
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.12
- '@radix-ui/react-popover@1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@radix-ui/react-context-menu@2.2.16(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@radix-ui/primitive': 1.1.1
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-slot': 1.1.2(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-context@1.1.2(@types/react@18.3.12)(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.12
+
+ '@radix-ui/react-dialog@1.1.15(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.2.3(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
aria-hidden: 1.2.4
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- react-remove-scroll: 2.6.3(@types/react@18.3.12)(react@18.3.1)
+ react-remove-scroll: 2.7.2(@types/react@18.3.12)(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.12
'@types/react-dom': 18.3.1
- '@radix-ui/react-popper@1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@radix-ui/react-direction@1.1.1(@types/react@18.3.12)(react@18.3.1)':
dependencies:
- '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-arrow': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/rect': 1.1.0
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.12
+
+ '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@18.3.12)(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.12
'@types/react-dom': 18.3.1
- '@radix-ui/react-portal@1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.12
'@types/react-dom': 18.3.1
- '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@radix-ui/react-focus-guards@1.1.3(@types/react@18.3.12)(react@18.3.1)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.12
+
+ '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.12)(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.12
'@types/react-dom': 18.3.1
- '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@radix-ui/react-form@0.1.8(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@radix-ui/react-slot': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-label': 2.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.12
'@types/react-dom': 18.3.1
- '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@radix-ui/react-hover-card@1.1.15(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@radix-ui/primitive': 1.1.1
- '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.12
'@types/react-dom': 18.3.1
- '@radix-ui/react-slot@1.1.2(@types/react@18.3.12)(react@18.3.1)':
+ '@radix-ui/react-id@1.1.1(@types/react@18.3.12)(react@18.3.1)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.12)(react@18.3.1)
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.12
- '@radix-ui/react-tabs@1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@radix-ui/react-label@2.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@radix-ui/primitive': 1.1.1
- '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1)
- '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.12
'@types/react-dom': 18.3.1
- '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.12)(react@18.3.1)':
+ '@radix-ui/react-menu@2.1.16(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.2.3(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ aria-hidden: 1.2.4
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-remove-scroll: 2.7.2(@types/react@18.3.12)(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-menubar@1.1.16(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-one-time-password-field@0.1.8(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/number': 1.1.1
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-password-toggle-field@0.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-popover@1.1.15(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.2.3(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ aria-hidden: 1.2.4
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-remove-scroll: 2.7.2(@types/react@18.3.12)(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-popper@1.2.8(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@floating-ui/react-dom': 2.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-arrow': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-rect': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/rect': 1.1.1
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-portal@1.1.9(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-presence@1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-primitive@2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-slot': 1.2.3(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-progress@1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-radio-group@1.3.8(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/number': 1.1.1
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-select@2.2.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/number': 1.1.1
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.2.3(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ aria-hidden: 1.2.4
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-remove-scroll: 2.7.2(@types/react@18.3.12)(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-separator@1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-slider@1.3.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/number': 1.1.1
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-slot@1.2.3(@types/react@18.3.12)(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.12
+
+ '@radix-ui/react-switch@1.2.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-tabs@1.1.13(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-toast@1.2.15(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-toggle': 1.1.10(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-toggle@1.1.10(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-toolbar@1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-separator': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-tooltip@1.2.8(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.2.3(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.3.12)(react@18.3.1)':
dependencies:
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.12
- '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.12)(react@18.3.1)':
+ '@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.3.12)(react@18.3.1)':
dependencies:
- '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.12)(react@18.3.1)
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.12
- '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.12)(react@18.3.1)':
+ '@radix-ui/react-use-effect-event@0.0.2(@types/react@18.3.12)(react@18.3.1)':
dependencies:
- '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.12)(react@18.3.1)
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.12
- '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.12)(react@18.3.1)':
+ '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@18.3.12)(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.12
+
+ '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@18.3.12)(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+ use-sync-external-store: 1.6.0(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+
+ '@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.3.12)(react@18.3.1)':
dependencies:
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.12
- '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.12)(react@18.3.1)':
+ '@radix-ui/react-use-previous@1.1.1(@types/react@18.3.12)(react@18.3.1)':
dependencies:
- '@radix-ui/rect': 1.1.0
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.12
- '@radix-ui/react-use-size@1.1.0(@types/react@18.3.12)(react@18.3.1)':
+ '@radix-ui/react-use-rect@1.1.1(@types/react@18.3.12)(react@18.3.1)':
dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/rect': 1.1.1
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.12
- '@radix-ui/rect@1.1.0': {}
+ '@radix-ui/react-use-size@1.1.1(@types/react@18.3.12)(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.12
+
+ '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
+ '@radix-ui/rect@1.1.1': {}
'@react-dnd/asap@4.0.1': {}
@@ -13954,115 +14251,127 @@ snapshots:
'@react-dnd/shallowequal@2.0.0': {}
- '@react-email/body@0.0.10(react@18.3.1)':
+ '@react-email/body@0.2.1(react@18.3.1)':
dependencies:
react: 18.3.1
- '@react-email/button@0.0.18(react@18.3.1)':
+ '@react-email/button@0.2.1(react@18.3.1)':
dependencies:
react: 18.3.1
- '@react-email/code-block@0.0.10(react@18.3.1)':
+ '@react-email/code-block@0.2.1(react@18.3.1)':
dependencies:
- prismjs: 1.29.0
+ prismjs: 1.30.0
react: 18.3.1
- '@react-email/code-inline@0.0.4(react@18.3.1)':
+ '@react-email/code-inline@0.0.6(react@18.3.1)':
dependencies:
react: 18.3.1
- '@react-email/column@0.0.12(react@18.3.1)':
+ '@react-email/column@0.0.14(react@18.3.1)':
dependencies:
react: 18.3.1
- '@react-email/components@0.0.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@react-email/components@1.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@react-email/body': 0.0.10(react@18.3.1)
- '@react-email/button': 0.0.18(react@18.3.1)
- '@react-email/code-block': 0.0.10(react@18.3.1)
- '@react-email/code-inline': 0.0.4(react@18.3.1)
- '@react-email/column': 0.0.12(react@18.3.1)
- '@react-email/container': 0.0.14(react@18.3.1)
- '@react-email/font': 0.0.8(react@18.3.1)
- '@react-email/head': 0.0.11(react@18.3.1)
- '@react-email/heading': 0.0.14(react@18.3.1)
- '@react-email/hr': 0.0.10(react@18.3.1)
- '@react-email/html': 0.0.10(react@18.3.1)
- '@react-email/img': 0.0.10(react@18.3.1)
- '@react-email/link': 0.0.11(react@18.3.1)
- '@react-email/markdown': 0.0.12(react@18.3.1)
- '@react-email/preview': 0.0.11(react@18.3.1)
- '@react-email/render': 1.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@react-email/row': 0.0.11(react@18.3.1)
- '@react-email/section': 0.0.15(react@18.3.1)
- '@react-email/tailwind': 1.0.2(react@18.3.1)
- '@react-email/text': 0.0.10(react@18.3.1)
+ '@react-email/body': 0.2.1(react@18.3.1)
+ '@react-email/button': 0.2.1(react@18.3.1)
+ '@react-email/code-block': 0.2.1(react@18.3.1)
+ '@react-email/code-inline': 0.0.6(react@18.3.1)
+ '@react-email/column': 0.0.14(react@18.3.1)
+ '@react-email/container': 0.0.16(react@18.3.1)
+ '@react-email/font': 0.0.10(react@18.3.1)
+ '@react-email/head': 0.0.13(react@18.3.1)
+ '@react-email/heading': 0.0.16(react@18.3.1)
+ '@react-email/hr': 0.0.12(react@18.3.1)
+ '@react-email/html': 0.0.12(react@18.3.1)
+ '@react-email/img': 0.0.12(react@18.3.1)
+ '@react-email/link': 0.0.13(react@18.3.1)
+ '@react-email/markdown': 0.0.18(react@18.3.1)
+ '@react-email/preview': 0.0.14(react@18.3.1)
+ '@react-email/render': 2.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@react-email/row': 0.0.13(react@18.3.1)
+ '@react-email/section': 0.0.17(react@18.3.1)
+ '@react-email/tailwind': 2.0.4(@react-email/body@0.2.1(react@18.3.1))(@react-email/button@0.2.1(react@18.3.1))(@react-email/code-block@0.2.1(react@18.3.1))(@react-email/code-inline@0.0.6(react@18.3.1))(@react-email/container@0.0.16(react@18.3.1))(@react-email/heading@0.0.16(react@18.3.1))(@react-email/hr@0.0.12(react@18.3.1))(@react-email/img@0.0.12(react@18.3.1))(@react-email/link@0.0.13(react@18.3.1))(@react-email/preview@0.0.14(react@18.3.1))(@react-email/text@0.1.6(react@18.3.1))(react@18.3.1)
+ '@react-email/text': 0.1.6(react@18.3.1)
react: 18.3.1
transitivePeerDependencies:
- react-dom
- '@react-email/container@0.0.14(react@18.3.1)':
+ '@react-email/container@0.0.16(react@18.3.1)':
dependencies:
react: 18.3.1
- '@react-email/font@0.0.8(react@18.3.1)':
+ '@react-email/font@0.0.10(react@18.3.1)':
dependencies:
react: 18.3.1
- '@react-email/head@0.0.11(react@18.3.1)':
+ '@react-email/head@0.0.13(react@18.3.1)':
dependencies:
react: 18.3.1
- '@react-email/heading@0.0.14(react@18.3.1)':
+ '@react-email/heading@0.0.16(react@18.3.1)':
dependencies:
react: 18.3.1
- '@react-email/hr@0.0.10(react@18.3.1)':
+ '@react-email/hr@0.0.12(react@18.3.1)':
dependencies:
react: 18.3.1
- '@react-email/html@0.0.10(react@18.3.1)':
+ '@react-email/html@0.0.12(react@18.3.1)':
dependencies:
react: 18.3.1
- '@react-email/img@0.0.10(react@18.3.1)':
+ '@react-email/img@0.0.12(react@18.3.1)':
dependencies:
react: 18.3.1
- '@react-email/link@0.0.11(react@18.3.1)':
+ '@react-email/link@0.0.13(react@18.3.1)':
dependencies:
react: 18.3.1
- '@react-email/markdown@0.0.12(react@18.3.1)':
+ '@react-email/markdown@0.0.18(react@18.3.1)':
dependencies:
- md-to-react-email: 5.0.2(react@18.3.1)
+ marked: 15.0.12
react: 18.3.1
- '@react-email/preview@0.0.11(react@18.3.1)':
+ '@react-email/preview@0.0.14(react@18.3.1)':
dependencies:
react: 18.3.1
- '@react-email/render@1.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@react-email/render@2.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
html-to-text: 9.0.5
- js-beautify: 1.15.1
+ prettier: 3.8.1
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- react-promise-suspense: 0.3.4
- '@react-email/row@0.0.11(react@18.3.1)':
+ '@react-email/row@0.0.13(react@18.3.1)':
dependencies:
react: 18.3.1
- '@react-email/section@0.0.15(react@18.3.1)':
+ '@react-email/section@0.0.17(react@18.3.1)':
dependencies:
react: 18.3.1
- '@react-email/tailwind@1.0.2(react@18.3.1)':
+ '@react-email/tailwind@2.0.4(@react-email/body@0.2.1(react@18.3.1))(@react-email/button@0.2.1(react@18.3.1))(@react-email/code-block@0.2.1(react@18.3.1))(@react-email/code-inline@0.0.6(react@18.3.1))(@react-email/container@0.0.16(react@18.3.1))(@react-email/heading@0.0.16(react@18.3.1))(@react-email/hr@0.0.12(react@18.3.1))(@react-email/img@0.0.12(react@18.3.1))(@react-email/link@0.0.13(react@18.3.1))(@react-email/preview@0.0.14(react@18.3.1))(@react-email/text@0.1.6(react@18.3.1))(react@18.3.1)':
dependencies:
+ '@react-email/text': 0.1.6(react@18.3.1)
react: 18.3.1
+ tailwindcss: 4.1.18
+ optionalDependencies:
+ '@react-email/body': 0.2.1(react@18.3.1)
+ '@react-email/button': 0.2.1(react@18.3.1)
+ '@react-email/code-block': 0.2.1(react@18.3.1)
+ '@react-email/code-inline': 0.0.6(react@18.3.1)
+ '@react-email/container': 0.0.16(react@18.3.1)
+ '@react-email/heading': 0.0.16(react@18.3.1)
+ '@react-email/hr': 0.0.12(react@18.3.1)
+ '@react-email/img': 0.0.12(react@18.3.1)
+ '@react-email/link': 0.0.13(react@18.3.1)
+ '@react-email/preview': 0.0.14(react@18.3.1)
- '@react-email/text@0.0.10(react@18.3.1)':
+ '@react-email/text@0.1.6(react@18.3.1)':
dependencies:
react: 18.3.1
@@ -14141,7 +14450,7 @@ snapshots:
domhandler: 5.0.3
selderee: 0.11.0
- '@sinclair/typebox@0.27.8': {}
+ '@sinclair/typebox@0.34.48': {}
'@sindresorhus/slugify@1.1.0':
dependencies:
@@ -14157,258 +14466,258 @@ snapshots:
dependencies:
type-detect: 4.0.8
- '@sinonjs/fake-timers@10.3.0':
+ '@sinonjs/fake-timers@13.0.5':
dependencies:
'@sinonjs/commons': 3.0.1
- '@smithy/abort-controller@3.1.9':
+ '@smithy/abort-controller@4.2.8':
dependencies:
- '@smithy/types': 3.7.2
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/chunked-blob-reader-native@3.0.1':
+ '@smithy/chunked-blob-reader-native@4.2.1':
dependencies:
- '@smithy/util-base64': 3.0.0
+ '@smithy/util-base64': 4.3.0
tslib: 2.8.1
- '@smithy/chunked-blob-reader@4.0.0':
+ '@smithy/chunked-blob-reader@5.2.0':
dependencies:
tslib: 2.8.1
- '@smithy/config-resolver@3.0.13':
+ '@smithy/config-resolver@4.4.6':
dependencies:
- '@smithy/node-config-provider': 3.1.12
- '@smithy/types': 3.7.2
- '@smithy/util-config-provider': 3.0.0
- '@smithy/util-middleware': 3.0.11
+ '@smithy/node-config-provider': 4.3.8
+ '@smithy/types': 4.12.0
+ '@smithy/util-config-provider': 4.2.0
+ '@smithy/util-endpoints': 3.2.8
+ '@smithy/util-middleware': 4.2.8
tslib: 2.8.1
- '@smithy/core@2.5.7':
+ '@smithy/core@3.22.1':
dependencies:
- '@smithy/middleware-serde': 3.0.11
- '@smithy/protocol-http': 4.1.8
- '@smithy/types': 3.7.2
- '@smithy/util-body-length-browser': 3.0.0
- '@smithy/util-middleware': 3.0.11
- '@smithy/util-stream': 3.3.4
- '@smithy/util-utf8': 3.0.0
+ '@smithy/middleware-serde': 4.2.9
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/types': 4.12.0
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-body-length-browser': 4.2.0
+ '@smithy/util-middleware': 4.2.8
+ '@smithy/util-stream': 4.5.11
+ '@smithy/util-utf8': 4.2.0
+ '@smithy/uuid': 1.1.0
tslib: 2.8.1
- '@smithy/credential-provider-imds@3.2.8':
+ '@smithy/credential-provider-imds@4.2.8':
dependencies:
- '@smithy/node-config-provider': 3.1.12
- '@smithy/property-provider': 3.1.11
- '@smithy/types': 3.7.2
- '@smithy/url-parser': 3.0.11
+ '@smithy/node-config-provider': 4.3.8
+ '@smithy/property-provider': 4.2.8
+ '@smithy/types': 4.12.0
+ '@smithy/url-parser': 4.2.8
tslib: 2.8.1
- '@smithy/eventstream-codec@3.1.10':
+ '@smithy/eventstream-codec@4.2.8':
dependencies:
'@aws-crypto/crc32': 5.2.0
- '@smithy/types': 3.7.2
- '@smithy/util-hex-encoding': 3.0.0
+ '@smithy/types': 4.12.0
+ '@smithy/util-hex-encoding': 4.2.0
tslib: 2.8.1
- '@smithy/eventstream-serde-browser@3.0.14':
+ '@smithy/eventstream-serde-browser@4.2.8':
dependencies:
- '@smithy/eventstream-serde-universal': 3.0.13
- '@smithy/types': 3.7.2
+ '@smithy/eventstream-serde-universal': 4.2.8
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/eventstream-serde-config-resolver@3.0.11':
+ '@smithy/eventstream-serde-config-resolver@4.3.8':
dependencies:
- '@smithy/types': 3.7.2
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/eventstream-serde-node@3.0.13':
+ '@smithy/eventstream-serde-node@4.2.8':
dependencies:
- '@smithy/eventstream-serde-universal': 3.0.13
- '@smithy/types': 3.7.2
+ '@smithy/eventstream-serde-universal': 4.2.8
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/eventstream-serde-universal@3.0.13':
+ '@smithy/eventstream-serde-universal@4.2.8':
dependencies:
- '@smithy/eventstream-codec': 3.1.10
- '@smithy/types': 3.7.2
+ '@smithy/eventstream-codec': 4.2.8
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/fetch-http-handler@4.1.3':
+ '@smithy/fetch-http-handler@5.3.9':
dependencies:
- '@smithy/protocol-http': 4.1.8
- '@smithy/querystring-builder': 3.0.11
- '@smithy/types': 3.7.2
- '@smithy/util-base64': 3.0.0
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/querystring-builder': 4.2.8
+ '@smithy/types': 4.12.0
+ '@smithy/util-base64': 4.3.0
tslib: 2.8.1
- '@smithy/hash-blob-browser@3.1.10':
+ '@smithy/hash-blob-browser@4.2.9':
dependencies:
- '@smithy/chunked-blob-reader': 4.0.0
- '@smithy/chunked-blob-reader-native': 3.0.1
- '@smithy/types': 3.7.2
+ '@smithy/chunked-blob-reader': 5.2.0
+ '@smithy/chunked-blob-reader-native': 4.2.1
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/hash-node@3.0.11':
+ '@smithy/hash-node@4.2.8':
dependencies:
- '@smithy/types': 3.7.2
- '@smithy/util-buffer-from': 3.0.0
- '@smithy/util-utf8': 3.0.0
+ '@smithy/types': 4.12.0
+ '@smithy/util-buffer-from': 4.2.0
+ '@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@smithy/hash-stream-node@3.1.10':
+ '@smithy/hash-stream-node@4.2.8':
dependencies:
- '@smithy/types': 3.7.2
- '@smithy/util-utf8': 3.0.0
+ '@smithy/types': 4.12.0
+ '@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@smithy/invalid-dependency@3.0.11':
+ '@smithy/invalid-dependency@4.2.8':
dependencies:
- '@smithy/types': 3.7.2
+ '@smithy/types': 4.12.0
tslib: 2.8.1
'@smithy/is-array-buffer@2.2.0':
dependencies:
tslib: 2.8.1
- '@smithy/is-array-buffer@3.0.0':
+ '@smithy/is-array-buffer@4.2.0':
dependencies:
tslib: 2.8.1
- '@smithy/md5-js@3.0.11':
+ '@smithy/md5-js@4.2.8':
dependencies:
- '@smithy/types': 3.7.2
- '@smithy/util-utf8': 3.0.0
+ '@smithy/types': 4.12.0
+ '@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@smithy/middleware-content-length@3.0.13':
+ '@smithy/middleware-content-length@4.2.8':
dependencies:
- '@smithy/protocol-http': 4.1.8
- '@smithy/types': 3.7.2
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/middleware-endpoint@3.2.8':
+ '@smithy/middleware-endpoint@4.4.13':
dependencies:
- '@smithy/core': 2.5.7
- '@smithy/middleware-serde': 3.0.11
- '@smithy/node-config-provider': 3.1.12
- '@smithy/shared-ini-file-loader': 3.1.12
- '@smithy/types': 3.7.2
- '@smithy/url-parser': 3.0.11
- '@smithy/util-middleware': 3.0.11
+ '@smithy/core': 3.22.1
+ '@smithy/middleware-serde': 4.2.9
+ '@smithy/node-config-provider': 4.3.8
+ '@smithy/shared-ini-file-loader': 4.4.3
+ '@smithy/types': 4.12.0
+ '@smithy/url-parser': 4.2.8
+ '@smithy/util-middleware': 4.2.8
tslib: 2.8.1
- '@smithy/middleware-retry@3.0.34':
+ '@smithy/middleware-retry@4.4.30':
dependencies:
- '@smithy/node-config-provider': 3.1.12
- '@smithy/protocol-http': 4.1.8
- '@smithy/service-error-classification': 3.0.11
- '@smithy/smithy-client': 3.7.0
- '@smithy/types': 3.7.2
- '@smithy/util-middleware': 3.0.11
- '@smithy/util-retry': 3.0.11
- tslib: 2.8.1
- uuid: 9.0.1
-
- '@smithy/middleware-serde@3.0.11':
- dependencies:
- '@smithy/types': 3.7.2
+ '@smithy/node-config-provider': 4.3.8
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/service-error-classification': 4.2.8
+ '@smithy/smithy-client': 4.11.2
+ '@smithy/types': 4.12.0
+ '@smithy/util-middleware': 4.2.8
+ '@smithy/util-retry': 4.2.8
+ '@smithy/uuid': 1.1.0
tslib: 2.8.1
- '@smithy/middleware-stack@3.0.11':
+ '@smithy/middleware-serde@4.2.9':
dependencies:
- '@smithy/types': 3.7.2
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/node-config-provider@3.1.12':
+ '@smithy/middleware-stack@4.2.8':
dependencies:
- '@smithy/property-provider': 3.1.11
- '@smithy/shared-ini-file-loader': 3.1.12
- '@smithy/types': 3.7.2
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/node-http-handler@3.3.3':
+ '@smithy/node-config-provider@4.3.8':
dependencies:
- '@smithy/abort-controller': 3.1.9
- '@smithy/protocol-http': 4.1.8
- '@smithy/querystring-builder': 3.0.11
- '@smithy/types': 3.7.2
+ '@smithy/property-provider': 4.2.8
+ '@smithy/shared-ini-file-loader': 4.4.3
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/property-provider@3.1.11':
+ '@smithy/node-http-handler@4.4.9':
dependencies:
- '@smithy/types': 3.7.2
+ '@smithy/abort-controller': 4.2.8
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/querystring-builder': 4.2.8
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/protocol-http@4.1.8':
+ '@smithy/property-provider@4.2.8':
dependencies:
- '@smithy/types': 3.7.2
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/querystring-builder@3.0.11':
+ '@smithy/protocol-http@5.3.8':
dependencies:
- '@smithy/types': 3.7.2
- '@smithy/util-uri-escape': 3.0.0
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/querystring-parser@3.0.11':
+ '@smithy/querystring-builder@4.2.8':
dependencies:
- '@smithy/types': 3.7.2
+ '@smithy/types': 4.12.0
+ '@smithy/util-uri-escape': 4.2.0
tslib: 2.8.1
- '@smithy/service-error-classification@3.0.11':
+ '@smithy/querystring-parser@4.2.8':
dependencies:
- '@smithy/types': 3.7.2
-
- '@smithy/shared-ini-file-loader@3.1.12':
- dependencies:
- '@smithy/types': 3.7.2
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/signature-v4@4.2.4':
+ '@smithy/service-error-classification@4.2.8':
dependencies:
- '@smithy/is-array-buffer': 3.0.0
- '@smithy/protocol-http': 4.1.8
- '@smithy/types': 3.7.2
- '@smithy/util-hex-encoding': 3.0.0
- '@smithy/util-middleware': 3.0.11
- '@smithy/util-uri-escape': 3.0.0
- '@smithy/util-utf8': 3.0.0
+ '@smithy/types': 4.12.0
+
+ '@smithy/shared-ini-file-loader@4.4.3':
+ dependencies:
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/smithy-client@3.7.0':
+ '@smithy/signature-v4@5.3.8':
dependencies:
- '@smithy/core': 2.5.7
- '@smithy/middleware-endpoint': 3.2.8
- '@smithy/middleware-stack': 3.0.11
- '@smithy/protocol-http': 4.1.8
- '@smithy/types': 3.7.2
- '@smithy/util-stream': 3.3.4
+ '@smithy/is-array-buffer': 4.2.0
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/types': 4.12.0
+ '@smithy/util-hex-encoding': 4.2.0
+ '@smithy/util-middleware': 4.2.8
+ '@smithy/util-uri-escape': 4.2.0
+ '@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@smithy/types@3.7.2':
+ '@smithy/smithy-client@4.11.2':
+ dependencies:
+ '@smithy/core': 3.22.1
+ '@smithy/middleware-endpoint': 4.4.13
+ '@smithy/middleware-stack': 4.2.8
+ '@smithy/protocol-http': 5.3.8
+ '@smithy/types': 4.12.0
+ '@smithy/util-stream': 4.5.11
+ tslib: 2.8.1
+
+ '@smithy/types@4.12.0':
dependencies:
tslib: 2.8.1
- '@smithy/types@4.3.0':
+ '@smithy/url-parser@4.2.8':
+ dependencies:
+ '@smithy/querystring-parser': 4.2.8
+ '@smithy/types': 4.12.0
+ tslib: 2.8.1
+
+ '@smithy/util-base64@4.3.0':
+ dependencies:
+ '@smithy/util-buffer-from': 4.2.0
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+
+ '@smithy/util-body-length-browser@4.2.0':
dependencies:
tslib: 2.8.1
- '@smithy/url-parser@3.0.11':
- dependencies:
- '@smithy/querystring-parser': 3.0.11
- '@smithy/types': 3.7.2
- tslib: 2.8.1
-
- '@smithy/util-base64@3.0.0':
- dependencies:
- '@smithy/util-buffer-from': 3.0.0
- '@smithy/util-utf8': 3.0.0
- tslib: 2.8.1
-
- '@smithy/util-body-length-browser@3.0.0':
- dependencies:
- tslib: 2.8.1
-
- '@smithy/util-body-length-node@3.0.0':
+ '@smithy/util-body-length-node@4.2.1':
dependencies:
tslib: 2.8.1
@@ -14417,66 +14726,65 @@ snapshots:
'@smithy/is-array-buffer': 2.2.0
tslib: 2.8.1
- '@smithy/util-buffer-from@3.0.0':
+ '@smithy/util-buffer-from@4.2.0':
dependencies:
- '@smithy/is-array-buffer': 3.0.0
+ '@smithy/is-array-buffer': 4.2.0
tslib: 2.8.1
- '@smithy/util-config-provider@3.0.0':
+ '@smithy/util-config-provider@4.2.0':
dependencies:
tslib: 2.8.1
- '@smithy/util-defaults-mode-browser@3.0.34':
+ '@smithy/util-defaults-mode-browser@4.3.29':
dependencies:
- '@smithy/property-provider': 3.1.11
- '@smithy/smithy-client': 3.7.0
- '@smithy/types': 3.7.2
- bowser: 2.11.0
+ '@smithy/property-provider': 4.2.8
+ '@smithy/smithy-client': 4.11.2
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/util-defaults-mode-node@3.0.34':
+ '@smithy/util-defaults-mode-node@4.2.32':
dependencies:
- '@smithy/config-resolver': 3.0.13
- '@smithy/credential-provider-imds': 3.2.8
- '@smithy/node-config-provider': 3.1.12
- '@smithy/property-provider': 3.1.11
- '@smithy/smithy-client': 3.7.0
- '@smithy/types': 3.7.2
+ '@smithy/config-resolver': 4.4.6
+ '@smithy/credential-provider-imds': 4.2.8
+ '@smithy/node-config-provider': 4.3.8
+ '@smithy/property-provider': 4.2.8
+ '@smithy/smithy-client': 4.11.2
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/util-endpoints@2.1.7':
+ '@smithy/util-endpoints@3.2.8':
dependencies:
- '@smithy/node-config-provider': 3.1.12
- '@smithy/types': 3.7.2
+ '@smithy/node-config-provider': 4.3.8
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/util-hex-encoding@3.0.0':
+ '@smithy/util-hex-encoding@4.2.0':
dependencies:
tslib: 2.8.1
- '@smithy/util-middleware@3.0.11':
+ '@smithy/util-middleware@4.2.8':
dependencies:
- '@smithy/types': 3.7.2
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/util-retry@3.0.11':
+ '@smithy/util-retry@4.2.8':
dependencies:
- '@smithy/service-error-classification': 3.0.11
- '@smithy/types': 3.7.2
+ '@smithy/service-error-classification': 4.2.8
+ '@smithy/types': 4.12.0
tslib: 2.8.1
- '@smithy/util-stream@3.3.4':
+ '@smithy/util-stream@4.5.11':
dependencies:
- '@smithy/fetch-http-handler': 4.1.3
- '@smithy/node-http-handler': 3.3.3
- '@smithy/types': 3.7.2
- '@smithy/util-base64': 3.0.0
- '@smithy/util-buffer-from': 3.0.0
- '@smithy/util-hex-encoding': 3.0.0
- '@smithy/util-utf8': 3.0.0
+ '@smithy/fetch-http-handler': 5.3.9
+ '@smithy/node-http-handler': 4.4.9
+ '@smithy/types': 4.12.0
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-buffer-from': 4.2.0
+ '@smithy/util-hex-encoding': 4.2.0
+ '@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@smithy/util-uri-escape@3.0.0':
+ '@smithy/util-uri-escape@4.2.0':
dependencies:
tslib: 2.8.1
@@ -14485,15 +14793,19 @@ snapshots:
'@smithy/util-buffer-from': 2.2.0
tslib: 2.8.1
- '@smithy/util-utf8@3.0.0':
+ '@smithy/util-utf8@4.2.0':
dependencies:
- '@smithy/util-buffer-from': 3.0.0
+ '@smithy/util-buffer-from': 4.2.0
tslib: 2.8.1
- '@smithy/util-waiter@3.2.0':
+ '@smithy/util-waiter@4.2.8':
+ dependencies:
+ '@smithy/abort-controller': 4.2.8
+ '@smithy/types': 4.12.0
+ tslib: 2.8.1
+
+ '@smithy/uuid@1.1.0':
dependencies:
- '@smithy/abort-controller': 3.1.9
- '@smithy/types': 3.7.2
tslib: 2.8.1
'@socket.io/component-emitter@3.1.0': {}
@@ -14542,7 +14854,7 @@ snapshots:
'@swc/core@1.5.25(@swc/helpers@0.5.5)':
dependencies:
'@swc/counter': 0.1.3
- '@swc/types': 0.1.7
+ '@swc/types': 0.1.25
optionalDependencies:
'@swc/core-darwin-arm64': 1.5.25
'@swc/core-darwin-x64': 1.5.25
@@ -14557,14 +14869,16 @@ snapshots:
'@swc/helpers': 0.5.5
optional: true
- '@swc/counter@0.1.3': {}
+ '@swc/counter@0.1.3':
+ optional: true
'@swc/helpers@0.5.5':
dependencies:
'@swc/counter': 0.1.3
tslib: 2.8.1
+ optional: true
- '@swc/types@0.1.7':
+ '@swc/types@0.1.25':
dependencies:
'@swc/counter': 0.1.3
optional: true
@@ -14576,10 +14890,10 @@ snapshots:
'@tabler/icons@3.36.1': {}
- '@tanstack/eslint-plugin-query@5.62.1(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2)':
+ '@tanstack/eslint-plugin-query@5.62.1(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2)':
dependencies:
- '@typescript-eslint/utils': 8.17.0(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2)
- eslint: 9.15.0(jiti@1.21.0)
+ '@typescript-eslint/utils': 8.17.0(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2)
+ eslint: 9.39.2(jiti@2.4.2)
transitivePeerDependencies:
- supports-color
- typescript
@@ -14599,7 +14913,7 @@ snapshots:
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
- '@tiptap/extension-bold@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))':
+ '@tiptap/extension-bold@3.17.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))':
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
@@ -14623,17 +14937,17 @@ snapshots:
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
- '@tiptap/extension-collaboration-caret@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29))':
+ '@tiptap/extension-collaboration-caret@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29))':
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
'@tiptap/pm': 3.17.1
- '@tiptap/y-tiptap': 3.0.1(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29)
+ '@tiptap/y-tiptap': 3.0.2(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29)
- '@tiptap/extension-collaboration@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29)':
+ '@tiptap/extension-collaboration@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29)':
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
'@tiptap/pm': 3.17.1
- '@tiptap/y-tiptap': 3.0.1(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29)
+ '@tiptap/y-tiptap': 3.0.2(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29)
yjs: 13.6.29
'@tiptap/extension-color@3.17.1(@tiptap/extension-text-style@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)))':
@@ -14644,22 +14958,22 @@ snapshots:
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
- '@tiptap/extension-dropcursor@3.17.1(@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))':
+ '@tiptap/extension-dropcursor@3.19.0(@tiptap/extensions@3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))':
dependencies:
- '@tiptap/extensions': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
+ '@tiptap/extensions': 3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
- '@tiptap/extension-floating-menu@3.17.1(@floating-ui/dom@1.7.3)(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)':
+ '@tiptap/extension-floating-menu@3.19.0(@floating-ui/dom@1.7.3)(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)':
dependencies:
'@floating-ui/dom': 1.7.3
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
'@tiptap/pm': 3.17.1
optional: true
- '@tiptap/extension-gapcursor@3.17.1(@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))':
+ '@tiptap/extension-gapcursor@3.19.0(@tiptap/extensions@3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))':
dependencies:
- '@tiptap/extensions': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
+ '@tiptap/extensions': 3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
- '@tiptap/extension-hard-break@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))':
+ '@tiptap/extension-hard-break@3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))':
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
@@ -14671,11 +14985,11 @@ snapshots:
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
- '@tiptap/extension-history@3.17.1(@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))':
+ '@tiptap/extension-history@3.17.1(@tiptap/extensions@3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))':
dependencies:
- '@tiptap/extensions': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
+ '@tiptap/extensions': 3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
- '@tiptap/extension-horizontal-rule@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)':
+ '@tiptap/extension-horizontal-rule@3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)':
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
'@tiptap/pm': 3.17.1
@@ -14684,7 +14998,7 @@ snapshots:
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
- '@tiptap/extension-italic@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))':
+ '@tiptap/extension-italic@3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))':
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
@@ -14694,11 +15008,11 @@ snapshots:
'@tiptap/pm': 3.17.1
linkifyjs: 4.3.2
- '@tiptap/extension-list-item@3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))':
+ '@tiptap/extension-list-item@3.19.0(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))':
dependencies:
'@tiptap/extension-list': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
- '@tiptap/extension-list-keymap@3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))':
+ '@tiptap/extension-list-keymap@3.19.0(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))':
dependencies:
'@tiptap/extension-list': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
@@ -14707,19 +15021,19 @@ snapshots:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
'@tiptap/pm': 3.17.1
- '@tiptap/extension-ordered-list@3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))':
+ '@tiptap/extension-ordered-list@3.19.0(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))':
dependencies:
'@tiptap/extension-list': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
- '@tiptap/extension-paragraph@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))':
+ '@tiptap/extension-paragraph@3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))':
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
- '@tiptap/extension-placeholder@3.17.1(@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))':
+ '@tiptap/extension-placeholder@3.17.1(@tiptap/extensions@3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))':
dependencies:
- '@tiptap/extensions': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
+ '@tiptap/extensions': 3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
- '@tiptap/extension-strike@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))':
+ '@tiptap/extension-strike@3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))':
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
@@ -14754,11 +15068,11 @@ snapshots:
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
- '@tiptap/extension-underline@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))':
+ '@tiptap/extension-underline@3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))':
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
- '@tiptap/extension-unique-id@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)':
+ '@tiptap/extension-unique-id@3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)':
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
'@tiptap/pm': 3.17.1
@@ -14768,7 +15082,7 @@ snapshots:
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
- '@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)':
+ '@tiptap/extensions@3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)':
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
'@tiptap/pm': 3.17.1
@@ -14813,7 +15127,7 @@ snapshots:
use-sync-external-store: 1.6.0(react@18.3.1)
optionalDependencies:
'@tiptap/extension-bubble-menu': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
- '@tiptap/extension-floating-menu': 3.17.1(@floating-ui/dom@1.7.3)(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
+ '@tiptap/extension-floating-menu': 3.19.0(@floating-ui/dom@1.7.3)(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
transitivePeerDependencies:
- '@floating-ui/dom'
@@ -14821,27 +15135,27 @@ snapshots:
dependencies:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
'@tiptap/extension-blockquote': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
- '@tiptap/extension-bold': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
+ '@tiptap/extension-bold': 3.17.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
'@tiptap/extension-bullet-list': 3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))
'@tiptap/extension-code': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
'@tiptap/extension-code-block': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
'@tiptap/extension-document': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
- '@tiptap/extension-dropcursor': 3.17.1(@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))
- '@tiptap/extension-gapcursor': 3.17.1(@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))
- '@tiptap/extension-hard-break': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
+ '@tiptap/extension-dropcursor': 3.19.0(@tiptap/extensions@3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))
+ '@tiptap/extension-gapcursor': 3.19.0(@tiptap/extensions@3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))
+ '@tiptap/extension-hard-break': 3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
'@tiptap/extension-heading': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
- '@tiptap/extension-horizontal-rule': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
- '@tiptap/extension-italic': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
+ '@tiptap/extension-horizontal-rule': 3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
+ '@tiptap/extension-italic': 3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
'@tiptap/extension-link': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
'@tiptap/extension-list': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
- '@tiptap/extension-list-item': 3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))
- '@tiptap/extension-list-keymap': 3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))
- '@tiptap/extension-ordered-list': 3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))
- '@tiptap/extension-paragraph': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
- '@tiptap/extension-strike': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
+ '@tiptap/extension-list-item': 3.19.0(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))
+ '@tiptap/extension-list-keymap': 3.19.0(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))
+ '@tiptap/extension-ordered-list': 3.19.0(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))
+ '@tiptap/extension-paragraph': 3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
+ '@tiptap/extension-strike': 3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
'@tiptap/extension-text': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
- '@tiptap/extension-underline': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
- '@tiptap/extensions': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
+ '@tiptap/extension-underline': 3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))
+ '@tiptap/extensions': 3.19.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)
'@tiptap/pm': 3.17.1
'@tiptap/suggestion@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)':
@@ -14849,7 +15163,7 @@ snapshots:
'@tiptap/core': 3.17.1(@tiptap/pm@3.17.1)
'@tiptap/pm': 3.17.1
- '@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29)':
+ '@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.40.0)(y-protocols@1.0.6(yjs@13.6.29))(yjs@13.6.29)':
dependencies:
lib0: 0.2.117
prosemirror-model: 1.25.1
@@ -14875,6 +15189,11 @@ snapshots:
'@tsconfig/node16@1.0.4': {}
+ '@tybys/wasm-util@0.10.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@tybys/wasm-util@0.9.0':
dependencies:
tslib: 2.8.1
@@ -14908,6 +15227,8 @@ snapshots:
dependencies:
'@types/node': 22.19.1
+ '@types/blueimp-load-image@5.16.6': {}
+
'@types/body-parser@1.19.5':
dependencies:
'@types/connect': 3.4.38
@@ -15053,17 +15374,13 @@ snapshots:
'@types/eslint-scope@3.7.7':
dependencies:
'@types/eslint': 8.56.10
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
'@types/eslint@8.56.10':
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
'@types/json-schema': 7.0.15
- '@types/estree@1.0.6': {}
-
- '@types/estree@1.0.7': {}
-
'@types/estree@1.0.8': {}
'@types/express-serve-static-core@4.17.43':
@@ -15096,10 +15413,6 @@ snapshots:
'@types/geojson@7946.0.14': {}
- '@types/graceful-fs@4.1.9':
- dependencies:
- '@types/node': 22.19.1
-
'@types/hast@3.0.4':
dependencies:
'@types/unist': 3.0.2
@@ -15116,10 +15429,10 @@ snapshots:
dependencies:
'@types/istanbul-lib-report': 3.0.3
- '@types/jest@29.5.14':
+ '@types/jest@30.0.0':
dependencies:
- expect: 29.7.0
- pretty-format: 29.7.0
+ expect: 30.2.0
+ pretty-format: 30.2.0
'@types/js-cookie@3.0.6': {}
@@ -15148,10 +15461,6 @@ snapshots:
'@types/linkify-it': 5.0.0
'@types/mdurl': 2.0.0
- '@types/mdast@3.0.15':
- dependencies:
- '@types/unist': 2.0.11
-
'@types/mdurl@2.0.0': {}
'@types/methods@1.1.4': {}
@@ -15256,7 +15565,7 @@ snapshots:
'@types/methods': 1.1.4
'@types/node': 22.19.1
- '@types/supertest@6.0.2':
+ '@types/supertest@6.0.3':
dependencies:
'@types/methods': 1.1.4
'@types/superagent': 8.1.6
@@ -15266,8 +15575,6 @@ snapshots:
'@types/turndown@5.0.6': {}
- '@types/unist@2.0.11': {}
-
'@types/unist@3.0.2': {}
'@types/use-sync-external-store@0.0.6': {}
@@ -15296,7 +15603,7 @@ snapshots:
'@types/yargs-parser@21.0.3': {}
- '@types/yargs@17.0.32':
+ '@types/yargs@17.0.35':
dependencies:
'@types/yargs-parser': 21.0.3
@@ -15304,15 +15611,15 @@ snapshots:
dependencies:
'@types/node': 22.19.1
- '@typescript-eslint/eslint-plugin@8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2))(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2)':
+ '@typescript-eslint/eslint-plugin@8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2))(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2)':
dependencies:
'@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.17.0(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2)
+ '@typescript-eslint/parser': 8.17.0(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2)
'@typescript-eslint/scope-manager': 8.17.0
- '@typescript-eslint/type-utils': 8.17.0(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2)
- '@typescript-eslint/utils': 8.17.0(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2)
+ '@typescript-eslint/type-utils': 8.17.0(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.17.0(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2)
'@typescript-eslint/visitor-keys': 8.17.0
- eslint: 9.15.0(jiti@1.21.0)
+ eslint: 9.39.2(jiti@2.4.2)
graphemer: 1.4.0
ignore: 5.3.1
natural-compare: 1.4.0
@@ -15322,15 +15629,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.20.1(jiti@1.21.0))(typescript@5.7.3))(eslint@9.20.1(jiti@1.21.0))(typescript@5.7.3)':
+ '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.3))(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.3)':
dependencies:
'@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.24.1(eslint@9.20.1(jiti@1.21.0))(typescript@5.7.3)
+ '@typescript-eslint/parser': 8.24.1(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.3)
'@typescript-eslint/scope-manager': 8.24.1
- '@typescript-eslint/type-utils': 8.24.1(eslint@9.20.1(jiti@1.21.0))(typescript@5.7.3)
- '@typescript-eslint/utils': 8.24.1(eslint@9.20.1(jiti@1.21.0))(typescript@5.7.3)
+ '@typescript-eslint/type-utils': 8.24.1(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.3)
+ '@typescript-eslint/utils': 8.24.1(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.3)
'@typescript-eslint/visitor-keys': 8.24.1
- eslint: 9.20.1(jiti@1.21.0)
+ eslint: 9.39.2(jiti@2.4.2)
graphemer: 1.4.0
ignore: 5.3.1
natural-compare: 1.4.0
@@ -15339,27 +15646,27 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.17.0(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2)':
+ '@typescript-eslint/parser@8.17.0(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2)':
dependencies:
'@typescript-eslint/scope-manager': 8.17.0
'@typescript-eslint/types': 8.17.0
'@typescript-eslint/typescript-estree': 8.17.0(typescript@5.7.2)
'@typescript-eslint/visitor-keys': 8.17.0
debug: 4.4.0
- eslint: 9.15.0(jiti@1.21.0)
+ eslint: 9.39.2(jiti@2.4.2)
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.24.1(eslint@9.20.1(jiti@1.21.0))(typescript@5.7.3)':
+ '@typescript-eslint/parser@8.24.1(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.3)':
dependencies:
'@typescript-eslint/scope-manager': 8.24.1
'@typescript-eslint/types': 8.24.1
'@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3)
'@typescript-eslint/visitor-keys': 8.24.1
debug: 4.4.0
- eslint: 9.20.1(jiti@1.21.0)
+ eslint: 9.39.2(jiti@2.4.2)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
@@ -15374,24 +15681,24 @@ snapshots:
'@typescript-eslint/types': 8.24.1
'@typescript-eslint/visitor-keys': 8.24.1
- '@typescript-eslint/type-utils@8.17.0(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2)':
+ '@typescript-eslint/type-utils@8.17.0(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2)':
dependencies:
'@typescript-eslint/typescript-estree': 8.17.0(typescript@5.7.2)
- '@typescript-eslint/utils': 8.17.0(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.17.0(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2)
debug: 4.4.3
- eslint: 9.15.0(jiti@1.21.0)
+ eslint: 9.39.2(jiti@2.4.2)
ts-api-utils: 1.3.0(typescript@5.7.2)
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/type-utils@8.24.1(eslint@9.20.1(jiti@1.21.0))(typescript@5.7.3)':
+ '@typescript-eslint/type-utils@8.24.1(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.3)':
dependencies:
'@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3)
- '@typescript-eslint/utils': 8.24.1(eslint@9.20.1(jiti@1.21.0))(typescript@5.7.3)
+ '@typescript-eslint/utils': 8.24.1(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.3)
debug: 4.4.3
- eslint: 9.20.1(jiti@1.21.0)
+ eslint: 9.39.2(jiti@2.4.2)
ts-api-utils: 2.0.1(typescript@5.7.3)
typescript: 5.7.3
transitivePeerDependencies:
@@ -15430,25 +15737,25 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.17.0(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2)':
+ '@typescript-eslint/utils@8.17.0(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2)':
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@9.15.0(jiti@1.21.0))
+ '@eslint-community/eslint-utils': 4.4.0(eslint@9.39.2(jiti@2.4.2))
'@typescript-eslint/scope-manager': 8.17.0
'@typescript-eslint/types': 8.17.0
'@typescript-eslint/typescript-estree': 8.17.0(typescript@5.7.2)
- eslint: 9.15.0(jiti@1.21.0)
+ eslint: 9.39.2(jiti@2.4.2)
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.24.1(eslint@9.20.1(jiti@1.21.0))(typescript@5.7.3)':
+ '@typescript-eslint/utils@8.24.1(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.1(jiti@1.21.0))
+ '@eslint-community/eslint-utils': 4.4.0(eslint@9.39.2(jiti@2.4.2))
'@typescript-eslint/scope-manager': 8.24.1
'@typescript-eslint/types': 8.24.1
'@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3)
- eslint: 9.20.1(jiti@1.21.0)
+ eslint: 9.39.2(jiti@2.4.2)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
@@ -15479,9 +15786,70 @@ snapshots:
dependencies:
'@ucast/core': 1.10.2
+ '@ungap/structured-clone@1.3.0': {}
+
+ '@unrs/resolver-binding-android-arm-eabi@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-android-arm64@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-darwin-arm64@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-darwin-x64@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-freebsd-x64@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm64-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm64-musl@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-x64-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-x64-musl@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-wasm32-wasi@1.11.1':
+ dependencies:
+ '@napi-rs/wasm-runtime': 0.2.12
+ optional: true
+
+ '@unrs/resolver-binding-win32-arm64-msvc@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-win32-ia32-msvc@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-win32-x64-msvc@1.11.1':
+ optional: true
+
'@vercel/oidc@3.1.0': {}
- '@vitejs/plugin-react@5.1.1(vite@7.2.4(@types/node@22.19.1)(jiti@1.21.0)(less@4.2.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))':
+ '@vitejs/plugin-react@5.1.1(vite@7.2.4(@types/node@22.19.1)(jiti@2.4.2)(less@4.2.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))':
dependencies:
'@babel/core': 7.28.5
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5)
@@ -15489,7 +15857,7 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-beta.47
'@types/babel__core': 7.20.5
react-refresh: 0.18.0
- vite: 7.2.4(@types/node@22.19.1)(jiti@1.21.0)(less@4.2.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
+ vite: 7.2.4(@types/node@22.19.1)(jiti@2.4.2)(less@4.2.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
transitivePeerDependencies:
- supports-color
@@ -15581,15 +15949,13 @@ snapshots:
'@yarnpkg/parsers@3.0.2':
dependencies:
- js-yaml: 3.14.1
+ js-yaml: 3.14.2
tslib: 2.8.1
'@zkochan/js-yaml@0.0.7':
dependencies:
argparse: 2.0.1
- abbrev@2.0.0: {}
-
abstract-logging@2.0.1: {}
accepts@1.3.8:
@@ -15597,16 +15963,16 @@ snapshots:
mime-types: 2.1.35
negotiator: 0.6.3
- acorn-jsx@5.3.2(acorn@8.14.0):
+ acorn-import-phases@1.0.4(acorn@8.15.0):
dependencies:
- acorn: 8.14.0
+ acorn: 8.15.0
+
+ acorn-jsx@5.3.2(acorn@8.15.0):
+ dependencies:
+ acorn: 8.15.0
acorn-walk@8.3.2: {}
- acorn@8.11.3: {}
-
- acorn@8.14.0: {}
-
acorn@8.15.0: {}
address@1.2.2: {}
@@ -15617,26 +15983,27 @@ snapshots:
transitivePeerDependencies:
- supports-color
- ai-sdk-ollama@3.1.1(ai@6.0.38(zod@4.3.5))(zod@4.3.5):
+ ai-sdk-ollama@3.7.0(ai@6.0.86(zod@4.3.6))(zod@4.3.6):
dependencies:
- '@ai-sdk/provider': 3.0.4
- '@ai-sdk/provider-utils': 4.0.8(zod@4.3.5)
- ai: 6.0.38(zod@4.3.5)
+ '@ai-sdk/provider': 3.0.8
+ '@ai-sdk/provider-utils': 4.0.15(zod@4.3.6)
+ ai: 6.0.86(zod@4.3.6)
+ jsonrepair: 3.13.2
ollama: 0.6.3
transitivePeerDependencies:
- zod
- ai@6.0.38(zod@4.3.5):
+ ai@6.0.86(zod@4.3.6):
dependencies:
- '@ai-sdk/gateway': 3.0.16(zod@4.3.5)
- '@ai-sdk/provider': 3.0.4
- '@ai-sdk/provider-utils': 4.0.8(zod@4.3.5)
+ '@ai-sdk/gateway': 3.0.46(zod@4.3.6)
+ '@ai-sdk/provider': 3.0.8
+ '@ai-sdk/provider-utils': 4.0.15(zod@4.3.6)
'@opentelemetry/api': 1.9.0
- zod: 4.3.5
+ zod: 4.3.6
- ajv-formats@2.1.1(ajv@8.12.0):
+ ajv-formats@2.1.1(ajv@8.17.1):
optionalDependencies:
- ajv: 8.12.0
+ ajv: 8.17.1
ajv-formats@3.0.1(ajv@8.17.1):
optionalDependencies:
@@ -15646,9 +16013,9 @@ snapshots:
dependencies:
ajv: 6.12.6
- ajv-keywords@5.1.0(ajv@8.12.0):
+ ajv-keywords@5.1.0(ajv@8.17.1):
dependencies:
- ajv: 8.12.0
+ ajv: 8.17.1
fast-deep-equal: 3.1.3
ajv@6.12.6:
@@ -15658,13 +16025,6 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
- ajv@8.12.0:
- dependencies:
- fast-deep-equal: 3.1.3
- json-schema-traverse: 1.0.0
- require-from-string: 2.0.2
- uri-js: 4.4.1
-
ajv@8.17.1:
dependencies:
fast-deep-equal: 3.1.3
@@ -15700,7 +16060,7 @@ snapshots:
ansi-styles@6.2.1: {}
- ansis@3.15.0: {}
+ ansis@4.2.0: {}
anymatch@3.1.3:
dependencies:
@@ -15773,7 +16133,7 @@ snapshots:
define-properties: 1.2.1
es-abstract: 1.23.5
es-errors: 1.3.0
- get-intrinsic: 1.2.4
+ get-intrinsic: 1.3.0
is-array-buffer: 3.0.4
is-shared-array-buffer: 1.0.3
@@ -15795,6 +16155,11 @@ snapshots:
atomic-sleep@1.0.0: {}
+ atomically@2.1.1:
+ dependencies:
+ stubborn-fs: 2.0.0
+ when-exit: 2.1.5
+
available-typed-arrays@1.0.7:
dependencies:
possible-typed-array-names: 1.0.0
@@ -15804,149 +16169,111 @@ snapshots:
'@fastify/error': 4.0.0
fastq: 1.17.1
- axios@1.13.2:
+ axios@1.13.5:
dependencies:
- follow-redirects: 1.15.6
+ follow-redirects: 1.15.11
form-data: 4.0.5
proxy-from-env: 1.1.0
transitivePeerDependencies:
- debug
- babel-jest@29.7.0(@babel/core@7.24.5):
+ babel-jest@30.2.0(@babel/core@7.28.5):
dependencies:
- '@babel/core': 7.24.5
- '@jest/transform': 29.7.0
+ '@babel/core': 7.28.5
+ '@jest/transform': 30.2.0
'@types/babel__core': 7.20.5
- babel-plugin-istanbul: 6.1.1
- babel-preset-jest: 29.6.3(@babel/core@7.24.5)
- chalk: 4.1.2
- graceful-fs: 4.2.11
- slash: 3.0.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- babel-jest@29.7.0(@babel/core@7.24.6):
- dependencies:
- '@babel/core': 7.24.6
- '@jest/transform': 29.7.0
- '@types/babel__core': 7.20.5
- babel-plugin-istanbul: 6.1.1
- babel-preset-jest: 29.6.3(@babel/core@7.24.6)
+ babel-plugin-istanbul: 7.0.1
+ babel-preset-jest: 30.2.0(@babel/core@7.28.5)
chalk: 4.1.2
graceful-fs: 4.2.11
slash: 3.0.0
transitivePeerDependencies:
- supports-color
- babel-plugin-const-enum@1.2.0(@babel/core@7.26.0):
+ babel-plugin-const-enum@1.2.0(@babel/core@7.28.5):
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
- '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.26.0)
- '@babel/traverse': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.28.5)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
- babel-plugin-istanbul@6.1.1:
+ babel-plugin-istanbul@7.0.1:
dependencies:
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/helper-plugin-utils': 7.28.6
'@istanbuljs/load-nyc-config': 1.1.0
'@istanbuljs/schema': 0.1.3
- istanbul-lib-instrument: 5.2.1
+ istanbul-lib-instrument: 6.0.2
test-exclude: 6.0.0
transitivePeerDependencies:
- supports-color
- babel-plugin-jest-hoist@29.6.3:
+ babel-plugin-jest-hoist@30.2.0:
dependencies:
- '@babel/template': 7.25.9
- '@babel/types': 7.27.0
'@types/babel__core': 7.20.5
- '@types/babel__traverse': 7.20.5
babel-plugin-macros@3.1.0:
dependencies:
- '@babel/runtime': 7.25.6
+ '@babel/runtime': 7.26.10
cosmiconfig: 7.1.0
resolve: 1.22.8
- babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.26.0):
+ babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.28.5):
dependencies:
- '@babel/compat-data': 7.26.2
- '@babel/core': 7.26.0
- '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.26.0)
+ '@babel/compat-data': 7.28.5
+ '@babel/core': 7.28.5
+ '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.28.5)
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.26.0):
+ babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.28.5):
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.26.0)
+ '@babel/core': 7.28.5
+ '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.28.5)
core-js-compat: 3.35.0
transitivePeerDependencies:
- supports-color
- babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.26.0):
+ babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.28.5):
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.26.0)
+ '@babel/core': 7.28.5
+ '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.28.5)
transitivePeerDependencies:
- supports-color
- babel-plugin-transform-typescript-metadata@0.3.2(@babel/core@7.26.0)(@babel/traverse@7.28.5):
+ babel-plugin-transform-typescript-metadata@0.3.2(@babel/core@7.28.5)(@babel/traverse@7.28.5):
dependencies:
- '@babel/core': 7.26.0
- '@babel/helper-plugin-utils': 7.25.9
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
optionalDependencies:
'@babel/traverse': 7.28.5
- babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.5):
+ babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.5):
dependencies:
- '@babel/core': 7.24.5
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5)
- '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.5)
- '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.5)
- '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.5)
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5)
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5)
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5)
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5)
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5)
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5)
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5)
- '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.5)
- optional: true
+ '@babel/core': 7.28.5
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5)
+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.5)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.5)
+ '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.28.5)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5)
- babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.6):
+ babel-preset-jest@30.2.0(@babel/core@7.28.5):
dependencies:
- '@babel/core': 7.24.6
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.6)
- '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.6)
- '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.6)
- '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.6)
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.6)
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.6)
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.6)
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.6)
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.6)
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.6)
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.6)
- '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.6)
-
- babel-preset-jest@29.6.3(@babel/core@7.24.5):
- dependencies:
- '@babel/core': 7.24.5
- babel-plugin-jest-hoist: 29.6.3
- babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.5)
- optional: true
-
- babel-preset-jest@29.6.3(@babel/core@7.24.6):
- dependencies:
- '@babel/core': 7.24.6
- babel-plugin-jest-hoist: 29.6.3
- babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.6)
+ '@babel/core': 7.28.5
+ babel-plugin-jest-hoist: 30.2.0
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5)
balanced-match@1.0.2: {}
@@ -15956,6 +16283,8 @@ snapshots:
base64url@3.0.1: {}
+ baseline-browser-mapping@2.9.19: {}
+
bcrypt@6.0.0:
dependencies:
node-addon-api: 8.5.0
@@ -15971,6 +16300,8 @@ snapshots:
bluebird@3.4.7: {}
+ blueimp-load-image@5.16.0: {}
+
boolbase@1.0.0: {}
bowser@2.11.0: {}
@@ -15986,19 +16317,15 @@ snapshots:
widest-line: 3.1.0
wrap-ansi: 7.0.0
- brace-expansion@1.1.11:
+ brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
- brace-expansion@2.0.1:
+ brace-expansion@2.0.2:
dependencies:
balanced-match: 1.0.2
- braces@3.0.2:
- dependencies:
- fill-range: 7.0.1
-
braces@3.0.3:
dependencies:
fill-range: 7.1.1
@@ -16012,6 +16339,14 @@ snapshots:
node-releases: 2.0.18
update-browserslist-db: 1.1.1(browserslist@4.24.2)
+ browserslist@4.28.1:
+ dependencies:
+ baseline-browser-mapping: 2.9.19
+ caniuse-lite: 1.0.30001769
+ electron-to-chromium: 1.5.286
+ node-releases: 2.0.27
+ update-browserslist-db: 1.2.3(browserslist@4.28.1)
+
bs-logger@0.2.6:
dependencies:
fast-json-stable-stringify: 2.1.0
@@ -16036,15 +16371,6 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
- buffer@6.0.3:
- dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
-
- builtins@5.0.1:
- dependencies:
- semver: 7.7.3
-
bullmq@5.65.0:
dependencies:
cron-parser: 4.9.0
@@ -16057,15 +16383,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- busboy@1.6.0:
- dependencies:
- streamsearch: 1.1.0
-
bytes@3.1.2: {}
- cache-manager@6.4.3:
+ cache-manager@7.2.8:
dependencies:
- keyv: 5.3.3
+ '@cacheable/utils': 2.3.4
+ keyv: 5.6.0
call-bind-apply-helpers@1.0.2:
dependencies:
@@ -16077,9 +16400,14 @@ snapshots:
es-define-property: 1.0.0
es-errors: 1.3.0
function-bind: 1.1.2
- get-intrinsic: 1.2.4
+ get-intrinsic: 1.3.0
set-function-length: 1.2.2
+ call-bound@1.0.4:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ get-intrinsic: 1.3.0
+
callsites@3.1.0: {}
camelcase-css@2.0.1: {}
@@ -16090,6 +16418,8 @@ snapshots:
caniuse-lite@1.0.30001684: {}
+ caniuse-lite@1.0.30001769: {}
+
canvas-roundrect-polyfill@0.0.1: {}
chalk@2.4.2:
@@ -16103,12 +16433,14 @@ snapshots:
ansi-styles: 4.3.0
supports-color: 7.2.0
+ chalk@5.6.2: {}
+
char-regex@1.0.2: {}
- character-entities@2.0.2: {}
-
chardet@0.7.0: {}
+ chardet@2.1.1: {}
+
check-disk-space@3.4.0: {}
cheerio-select@2.1.0:
@@ -16137,7 +16469,7 @@ snapshots:
chevrotain-allstar@0.3.1(chevrotain@11.0.3):
dependencies:
chevrotain: 11.0.3
- lodash-es: 4.17.21
+ lodash-es: 4.17.23
chevrotain@11.0.3:
dependencies:
@@ -16146,7 +16478,7 @@ snapshots:
'@chevrotain/regexp-to-ast': 11.0.3
'@chevrotain/types': 11.0.3
'@chevrotain/utils': 11.0.3
- lodash-es: 4.17.21
+ lodash-es: 4.17.23
chokidar@3.6.0:
dependencies:
@@ -16166,9 +16498,13 @@ snapshots:
chrome-trace-event@1.0.3: {}
- ci-info@3.9.0: {}
+ ci-info@4.4.0: {}
- cjs-module-lexer@1.2.3: {}
+ citty@0.1.6:
+ dependencies:
+ consola: 3.4.2
+
+ cjs-module-lexer@2.2.0: {}
class-transformer@0.5.1: {}
@@ -16184,6 +16520,10 @@ snapshots:
dependencies:
restore-cursor: 3.1.0
+ cli-cursor@5.0.0:
+ dependencies:
+ restore-cursor: 5.1.0
+
cli-spinners@2.6.1: {}
cli-spinners@2.9.2: {}
@@ -16196,8 +16536,6 @@ snapshots:
cli-width@4.1.0: {}
- client-only@0.0.1: {}
-
cliui@6.0.0:
dependencies:
string-width: 4.2.3
@@ -16234,16 +16572,6 @@ snapshots:
color-name@1.1.4: {}
- color-string@1.9.1:
- dependencies:
- color-name: 1.1.4
- simple-swizzle: 0.2.4
-
- color@4.2.3:
- dependencies:
- color-convert: 2.0.1
- color-string: 1.9.1
-
colorette@2.0.20: {}
columnify@1.6.0:
@@ -16255,10 +16583,10 @@ snapshots:
dependencies:
delayed-stream: 1.0.0
- commander@10.0.1: {}
-
commander@11.1.0: {}
+ commander@13.1.0: {}
+
commander@2.20.3: {}
commander@4.1.1: {}
@@ -16282,34 +16610,43 @@ snapshots:
concurrently@9.1.2:
dependencies:
chalk: 4.1.2
- lodash: 4.17.21
+ lodash: 4.17.23
rxjs: 7.8.2
shell-quote: 1.8.1
supports-color: 8.1.1
tree-kill: 1.2.2
yargs: 17.7.2
+ conf@15.1.0:
+ dependencies:
+ ajv: 8.17.1
+ ajv-formats: 3.0.1(ajv@8.17.1)
+ atomically: 2.1.1
+ debounce-fn: 6.0.0
+ dot-prop: 10.1.0
+ env-paths: 3.0.0
+ json-schema-typed: 8.0.2
+ semver: 7.7.3
+ uint8array-extras: 1.5.0
+
confbox@0.1.8: {}
confbox@0.2.2: {}
- config-chain@1.1.13:
- dependencies:
- ini: 1.3.8
- proto-list: 1.2.4
-
consola@3.4.0: {}
+ consola@3.4.2: {}
+
console-table-printer@2.14.6:
dependencies:
simple-wcswidth: 1.1.2
- content-disposition@0.5.4:
- dependencies:
- safe-buffer: 5.2.1
+ content-disposition@1.0.1: {}
convert-source-map@2.0.0: {}
+ cookie-signature@1.2.2: {}
+
cookie@0.7.2: {}
cookie@1.1.1: {}
@@ -16350,41 +16687,26 @@ snapshots:
path-type: 4.0.0
yaml: 1.10.2
- cosmiconfig@8.3.6(typescript@5.7.3):
+ cosmiconfig@8.3.6(typescript@5.9.3):
dependencies:
import-fresh: 3.3.0
- js-yaml: 4.1.0
+ js-yaml: 4.1.1
parse-json: 5.2.0
path-type: 4.0.0
optionalDependencies:
- typescript: 5.7.3
+ typescript: 5.9.3
cosmiconfig@9.0.0(typescript@5.7.3):
dependencies:
env-paths: 2.2.1
import-fresh: 3.3.0
- js-yaml: 4.1.0
+ js-yaml: 4.1.1
parse-json: 5.2.0
optionalDependencies:
typescript: 5.7.3
crc-32@0.3.0: {}
- create-jest@29.7.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3)):
- dependencies:
- '@jest/types': 29.6.3
- chalk: 4.1.2
- exit: 0.1.2
- graceful-fs: 4.2.11
- jest-config: 29.7.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))
- jest-util: 29.7.0
- prompts: 2.4.2
- transitivePeerDependencies:
- - '@types/node'
- - babel-plugin-macros
- - supports-color
- - ts-node
-
create-require@1.1.1: {}
crelt@1.0.6: {}
@@ -16400,7 +16722,7 @@ snapshots:
cross-env@7.0.3:
dependencies:
- cross-spawn: 7.0.3
+ cross-spawn: 7.0.5
cross-fetch@4.0.0:
dependencies:
@@ -16408,13 +16730,7 @@ snapshots:
transitivePeerDependencies:
- encoding
- cross-spawn@7.0.3:
- dependencies:
- path-key: 3.1.1
- shebang-command: 2.0.0
- which: 2.0.2
-
- cross-spawn@7.0.6:
+ cross-spawn@7.0.5:
dependencies:
path-key: 3.1.1
shebang-command: 2.0.0
@@ -16618,15 +16934,10 @@ snapshots:
d3-transition: 3.0.1(d3-selection@3.0.0)
d3-zoom: 3.0.0
- dagre-d3-es@7.0.10:
- dependencies:
- d3: 7.9.0
- lodash-es: 4.17.21
-
dagre-d3-es@7.0.13:
dependencies:
d3: 7.9.0
- lodash-es: 4.17.21
+ lodash-es: 4.17.23
data-urls@5.0.0:
dependencies:
@@ -16655,10 +16966,12 @@ snapshots:
dateformat@4.6.3: {}
- dayjs@1.11.13: {}
-
dayjs@1.11.19: {}
+ debounce-fn@6.0.0:
+ dependencies:
+ mimic-function: 5.0.1
+
debounce@2.0.0: {}
debug@4.3.4:
@@ -16685,11 +16998,7 @@ snapshots:
decimal.js@10.4.3: {}
- decode-named-character-reference@1.1.0:
- dependencies:
- character-entities: 2.0.2
-
- dedent@1.5.1(babel-plugin-macros@3.1.0):
+ dedent@1.7.1(babel-plugin-macros@3.1.0):
optionalDependencies:
babel-plugin-macros: 3.1.0
@@ -16703,7 +17012,7 @@ snapshots:
define-data-property@1.1.4:
dependencies:
- es-define-property: 1.0.0
+ es-define-property: 1.0.1
es-errors: 1.3.0
gopd: 1.2.0
@@ -16727,8 +17036,6 @@ snapshots:
dequal@2.0.3: {}
- detect-libc@2.0.4: {}
-
detect-newline@3.1.0: {}
detect-node-es@1.1.0: {}
@@ -16736,7 +17043,7 @@ snapshots:
detect-port@1.5.1:
dependencies:
address: 1.2.2
- debug: 4.4.0
+ debug: 4.4.3
transitivePeerDependencies:
- supports-color
@@ -16749,13 +17056,11 @@ snapshots:
asap: 2.0.6
wrappy: 1.0.2
- diff-sequences@29.6.3: {}
+ diff@3.5.1: {}
- diff@3.5.0: {}
+ diff@4.0.4: {}
- diff@4.0.2: {}
-
- diff@5.2.0: {}
+ diff@8.0.3: {}
dijkstrajs@1.0.3: {}
@@ -16773,7 +17078,7 @@ snapshots:
dom-helpers@5.2.1:
dependencies:
- '@babel/runtime': 7.25.6
+ '@babel/runtime': 7.26.10
csstype: 3.1.3
dom-serializer@2.0.0:
@@ -16788,9 +17093,7 @@ snapshots:
dependencies:
domelementtype: 2.3.0
- dompurify@3.1.6: {}
-
- dompurify@3.2.6:
+ dompurify@3.3.1:
optionalDependencies:
'@types/trusted-types': 2.0.7
@@ -16800,6 +17103,10 @@ snapshots:
domelementtype: 2.3.0
domhandler: 5.0.3
+ dot-prop@10.1.0:
+ dependencies:
+ type-fest: 5.4.4
+
dotenv-expand@11.0.6:
dependencies:
dotenv: 16.4.7
@@ -16812,11 +17119,9 @@ snapshots:
dependencies:
dotenv: 16.4.7
- dotenv@16.4.5: {}
-
dotenv@16.4.7: {}
- dotenv@17.2.3: {}
+ dotenv@17.2.4: {}
duck@0.1.12:
dependencies:
@@ -16834,25 +17139,20 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
- editorconfig@1.0.4:
- dependencies:
- '@one-ini/wasm': 0.1.1
- commander: 10.0.1
- minimatch: 9.0.1
- semver: 7.7.3
-
ejs@3.1.10:
dependencies:
jake: 10.8.7
- electron-to-chromium@1.5.65: {}
+ electron-to-chromium@1.5.286: {}
- elkjs@0.9.3: {}
+ electron-to-chromium@1.5.65: {}
emittery@0.13.1: {}
emoji-mart@5.6.0: {}
+ emoji-regex@10.6.0: {}
+
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}
@@ -16871,7 +17171,7 @@ snapshots:
'@socket.io/component-emitter': 3.1.0
debug: 4.3.7
engine.io-parser: 5.2.2
- ws: 8.17.1
+ ws: 8.19.0
xmlhttprequest-ssl: 2.1.2
transitivePeerDependencies:
- bufferutil
@@ -16891,7 +17191,7 @@ snapshots:
cors: 2.8.5
debug: 4.3.7
engine.io-parser: 5.2.2
- ws: 8.17.1
+ ws: 8.19.0
transitivePeerDependencies:
- bufferutil
- supports-color
@@ -16900,7 +17200,12 @@ snapshots:
enhanced-resolve@5.17.1:
dependencies:
graceful-fs: 4.2.11
- tapable: 2.2.1
+ tapable: 2.3.0
+
+ enhanced-resolve@5.19.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.3.0
enquirer@2.3.6:
dependencies:
@@ -16912,6 +17217,8 @@ snapshots:
env-paths@2.2.1: {}
+ env-paths@3.0.0: {}
+
errno@0.1.8:
dependencies:
prr: 1.0.1
@@ -16933,10 +17240,10 @@ snapshots:
es-define-property: 1.0.0
es-errors: 1.3.0
es-object-atoms: 1.0.0
- es-set-tostringtag: 2.0.3
+ es-set-tostringtag: 2.1.0
es-to-primitive: 1.3.0
function.prototype.name: 1.1.6
- get-intrinsic: 1.2.4
+ get-intrinsic: 1.3.0
get-symbol-description: 1.0.2
globalthis: 1.0.4
gopd: 1.2.0
@@ -16972,7 +17279,7 @@ snapshots:
es-define-property@1.0.0:
dependencies:
- get-intrinsic: 1.2.4
+ get-intrinsic: 1.3.0
es-define-property@1.0.1: {}
@@ -16996,7 +17303,7 @@ snapshots:
iterator.prototype: 1.1.3
safe-array-concat: 1.1.2
- es-module-lexer@1.4.2: {}
+ es-module-lexer@2.0.0: {}
es-object-atoms@1.0.0:
dependencies:
@@ -17008,7 +17315,7 @@ snapshots:
es-set-tostringtag@2.0.3:
dependencies:
- get-intrinsic: 1.2.4
+ get-intrinsic: 1.3.0
has-tostringtag: 1.0.2
hasown: 2.0.2
@@ -17031,32 +17338,6 @@ snapshots:
es6-promise-pool@2.5.0: {}
- esbuild@0.19.11:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.19.11
- '@esbuild/android-arm': 0.19.11
- '@esbuild/android-arm64': 0.19.11
- '@esbuild/android-x64': 0.19.11
- '@esbuild/darwin-arm64': 0.19.11
- '@esbuild/darwin-x64': 0.19.11
- '@esbuild/freebsd-arm64': 0.19.11
- '@esbuild/freebsd-x64': 0.19.11
- '@esbuild/linux-arm': 0.19.11
- '@esbuild/linux-arm64': 0.19.11
- '@esbuild/linux-ia32': 0.19.11
- '@esbuild/linux-loong64': 0.19.11
- '@esbuild/linux-mips64el': 0.19.11
- '@esbuild/linux-ppc64': 0.19.11
- '@esbuild/linux-riscv64': 0.19.11
- '@esbuild/linux-s390x': 0.19.11
- '@esbuild/linux-x64': 0.19.11
- '@esbuild/netbsd-x64': 0.19.11
- '@esbuild/openbsd-x64': 0.19.11
- '@esbuild/sunos-x64': 0.19.11
- '@esbuild/win32-arm64': 0.19.11
- '@esbuild/win32-ia32': 0.19.11
- '@esbuild/win32-x64': 0.19.11
-
esbuild@0.25.0:
optionalDependencies:
'@esbuild/aix-ppc64': 0.25.0
@@ -17097,19 +17378,19 @@ snapshots:
escape-string-regexp@4.0.0: {}
- eslint-config-prettier@10.0.1(eslint@9.20.1(jiti@1.21.0)):
+ eslint-config-prettier@10.0.1(eslint@9.39.2(jiti@2.4.2)):
dependencies:
- eslint: 9.20.1(jiti@1.21.0)
+ eslint: 9.39.2(jiti@2.4.2)
- eslint-plugin-react-hooks@5.1.0(eslint@9.15.0(jiti@1.21.0)):
+ eslint-plugin-react-hooks@5.1.0(eslint@9.39.2(jiti@2.4.2)):
dependencies:
- eslint: 9.15.0(jiti@1.21.0)
+ eslint: 9.39.2(jiti@2.4.2)
- eslint-plugin-react-refresh@0.4.16(eslint@9.15.0(jiti@1.21.0)):
+ eslint-plugin-react-refresh@0.4.16(eslint@9.39.2(jiti@2.4.2)):
dependencies:
- eslint: 9.15.0(jiti@1.21.0)
+ eslint: 9.39.2(jiti@2.4.2)
- eslint-plugin-react@7.37.2(eslint@9.15.0(jiti@1.21.0)):
+ eslint-plugin-react@7.37.2(eslint@9.39.2(jiti@2.4.2)):
dependencies:
array-includes: 3.1.8
array.prototype.findlast: 1.2.5
@@ -17117,7 +17398,7 @@ snapshots:
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
es-iterator-helpers: 1.2.0
- eslint: 9.15.0(jiti@1.21.0)
+ eslint: 9.39.2(jiti@2.4.2)
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
@@ -17136,7 +17417,7 @@ snapshots:
esrecurse: 4.3.0
estraverse: 4.3.0
- eslint-scope@8.2.0:
+ eslint-scope@8.4.0:
dependencies:
esrecurse: 4.3.0
estraverse: 5.3.0
@@ -17145,28 +17426,30 @@ snapshots:
eslint-visitor-keys@4.2.0: {}
- eslint@9.15.0(jiti@1.21.0):
+ eslint-visitor-keys@4.2.1: {}
+
+ eslint@9.39.2(jiti@2.4.2):
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@9.15.0(jiti@1.21.0))
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.4.2))
'@eslint-community/regexpp': 4.12.1
- '@eslint/config-array': 0.19.0
- '@eslint/core': 0.9.0
- '@eslint/eslintrc': 3.2.0
- '@eslint/js': 9.15.0
- '@eslint/plugin-kit': 0.2.3
+ '@eslint/config-array': 0.21.1
+ '@eslint/config-helpers': 0.4.2
+ '@eslint/core': 0.17.0
+ '@eslint/eslintrc': 3.3.3
+ '@eslint/js': 9.39.2
+ '@eslint/plugin-kit': 0.4.1
'@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1
- '@humanwhocodes/retry': 0.4.1
- '@types/estree': 1.0.6
- '@types/json-schema': 7.0.15
+ '@humanwhocodes/retry': 0.4.3
+ '@types/estree': 1.0.8
ajv: 6.12.6
chalk: 4.1.2
- cross-spawn: 7.0.6
- debug: 4.3.4
+ cross-spawn: 7.0.5
+ debug: 4.4.3
escape-string-regexp: 4.0.0
- eslint-scope: 8.2.0
- eslint-visitor-keys: 4.2.0
- espree: 10.3.0
+ eslint-scope: 8.4.0
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
esquery: 1.5.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
@@ -17182,56 +17465,15 @@ snapshots:
natural-compare: 1.4.0
optionator: 0.9.3
optionalDependencies:
- jiti: 1.21.0
+ jiti: 2.4.2
transitivePeerDependencies:
- supports-color
- eslint@9.20.1(jiti@1.21.0):
+ espree@10.4.0:
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.1(jiti@1.21.0))
- '@eslint-community/regexpp': 4.12.1
- '@eslint/config-array': 0.19.0
- '@eslint/core': 0.11.0
- '@eslint/eslintrc': 3.2.0
- '@eslint/js': 9.20.0
- '@eslint/plugin-kit': 0.2.6
- '@humanfs/node': 0.16.6
- '@humanwhocodes/module-importer': 1.0.1
- '@humanwhocodes/retry': 0.4.1
- '@types/estree': 1.0.6
- '@types/json-schema': 7.0.15
- ajv: 6.12.6
- chalk: 4.1.2
- cross-spawn: 7.0.6
- debug: 4.3.7
- escape-string-regexp: 4.0.0
- eslint-scope: 8.2.0
- eslint-visitor-keys: 4.2.0
- espree: 10.3.0
- esquery: 1.5.0
- esutils: 2.0.3
- fast-deep-equal: 3.1.3
- file-entry-cache: 8.0.0
- find-up: 5.0.0
- glob-parent: 6.0.2
- ignore: 5.3.1
- imurmurhash: 0.1.4
- is-glob: 4.0.3
- json-stable-stringify-without-jsonify: 1.0.1
- lodash.merge: 4.6.2
- minimatch: 3.1.2
- natural-compare: 1.4.0
- optionator: 0.9.3
- optionalDependencies:
- jiti: 1.21.0
- transitivePeerDependencies:
- - supports-color
-
- espree@10.3.0:
- dependencies:
- acorn: 8.14.0
- acorn-jsx: 5.3.2(acorn@8.14.0)
- eslint-visitor-keys: 4.2.0
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ eslint-visitor-keys: 4.2.1
esprima@4.0.1: {}
@@ -17259,7 +17501,7 @@ snapshots:
execa@5.1.1:
dependencies:
- cross-spawn: 7.0.6
+ cross-spawn: 7.0.5
get-stream: 6.0.1
human-signals: 2.1.0
is-stream: 2.0.1
@@ -17269,15 +17511,16 @@ snapshots:
signal-exit: 3.0.7
strip-final-newline: 2.0.0
- exit@0.1.2: {}
+ exit-x@0.2.2: {}
- expect@29.7.0:
+ expect@30.2.0:
dependencies:
- '@jest/expect-utils': 29.7.0
- jest-get-type: 29.6.3
- jest-matcher-utils: 29.7.0
- jest-message-util: 29.7.0
- jest-util: 29.7.0
+ '@jest/expect-utils': 30.2.0
+ '@jest/get-type': 30.1.0
+ jest-matcher-utils: 30.2.0
+ jest-message-util: 30.2.0
+ jest-mock: 30.2.0
+ jest-util: 30.2.0
exsolve@1.0.7: {}
@@ -17285,14 +17528,12 @@ snapshots:
dependencies:
chardet: 0.7.0
iconv-lite: 0.4.24
- tmp: 0.0.33
+ tmp: 0.2.5
fast-copy@4.0.2: {}
fast-decode-uri-component@1.0.1: {}
- fast-deep-equal@2.0.1: {}
-
fast-deep-equal@3.1.3: {}
fast-equals@5.3.4: {}
@@ -17326,24 +17567,24 @@ snapshots:
fast-uri@3.0.6: {}
- fast-xml-parser@4.4.1:
+ fast-xml-parser@5.3.4:
dependencies:
- strnum: 1.0.5
+ strnum: 2.1.2
fastify-plugin@5.0.1: {}
fastify-plugin@5.1.0: {}
- fastify@5.6.2:
+ fastify@5.7.4:
dependencies:
- '@fastify/ajv-compiler': 4.0.2
+ '@fastify/ajv-compiler': 4.0.5
'@fastify/error': 4.0.0
'@fastify/fast-json-stringify-compiler': 5.0.2
'@fastify/proxy-addr': 5.0.0
abstract-logging: 2.0.1
avvio: 9.1.0
fast-json-stringify: 6.0.1
- find-my-way: 9.3.0
+ find-my-way: 9.4.0
light-my-request: 6.6.0
pino: 10.1.0
process-warning: 5.0.0
@@ -17360,10 +17601,6 @@ snapshots:
dependencies:
bser: 2.1.1
- fdir@6.4.3(picomatch@4.0.2):
- optionalDependencies:
- picomatch: 4.0.2
-
fdir@6.5.0(picomatch@4.0.3):
optionalDependencies:
picomatch: 4.0.3
@@ -17393,15 +17630,11 @@ snapshots:
dependencies:
minimatch: 5.1.6
- fill-range@7.0.1:
- dependencies:
- to-regex-range: 5.0.1
-
fill-range@7.1.1:
dependencies:
to-regex-range: 5.0.1
- find-my-way@9.3.0:
+ find-my-way@9.4.0:
dependencies:
fast-deep-equal: 3.1.3
fast-querystring: 1.1.2
@@ -17426,7 +17659,7 @@ snapshots:
flatted@3.2.9: {}
- follow-redirects@1.15.6: {}
+ follow-redirects@1.15.11: {}
for-each@0.3.3:
dependencies:
@@ -17434,15 +17667,15 @@ snapshots:
foreground-child@3.1.1:
dependencies:
- cross-spawn: 7.0.3
+ cross-spawn: 7.0.5
signal-exit: 4.1.0
- fork-ts-checker-webpack-plugin@9.0.2(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.5.25(@swc/helpers@0.5.5))):
+ fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.5.25(@swc/helpers@0.5.5))):
dependencies:
- '@babel/code-frame': 7.26.2
+ '@babel/code-frame': 7.27.1
chalk: 4.1.2
- chokidar: 3.6.0
- cosmiconfig: 8.3.6(typescript@5.7.3)
+ chokidar: 4.0.3
+ cosmiconfig: 8.3.6(typescript@5.9.3)
deepmerge: 4.3.1
fs-extra: 10.1.0
memfs: 3.5.3
@@ -17451,14 +17684,8 @@ snapshots:
schema-utils: 3.3.0
semver: 7.7.3
tapable: 2.2.1
- typescript: 5.7.3
- webpack: 5.98.0(@swc/core@1.5.25(@swc/helpers@0.5.5))
-
- form-data@4.0.0:
- dependencies:
- asynckit: 0.4.0
- combined-stream: 1.0.8
- mime-types: 2.1.35
+ typescript: 5.9.3
+ webpack: 5.104.1(@swc/core@1.5.25(@swc/helpers@0.5.5))
form-data@4.0.5:
dependencies:
@@ -17468,10 +17695,10 @@ snapshots:
hasown: 2.0.2
mime-types: 2.1.35
- formidable@3.5.1:
+ formidable@3.5.4:
dependencies:
+ '@paralleldrive/cuid2': 2.3.1
dezalgo: 1.0.4
- hexoid: 1.0.0
once: 1.4.0
fractional-indexing-jittered@1.0.0: {}
@@ -17480,7 +17707,7 @@ snapshots:
front-matter@4.0.2:
dependencies:
- js-yaml: 3.14.1
+ js-yaml: 3.14.2
fs-constants@1.0.0: {}
@@ -17498,8 +17725,6 @@ snapshots:
fs-monkey@1.0.5: {}
- fs.realpath@1.0.0: {}
-
fsevents@2.3.3:
optional: true
@@ -17520,6 +17745,8 @@ snapshots:
get-caller-file@2.0.5: {}
+ get-east-asian-width@1.4.0: {}
+
get-intrinsic@1.2.4:
dependencies:
es-errors: 1.3.0
@@ -17556,7 +17783,7 @@ snapshots:
dependencies:
call-bind: 1.0.7
es-errors: 1.3.0
- get-intrinsic: 1.2.4
+ get-intrinsic: 1.3.0
get-tsconfig@4.7.5:
dependencies:
@@ -17565,7 +17792,7 @@ snapshots:
git-diff@2.0.6:
dependencies:
chalk: 2.4.2
- diff: 3.5.0
+ diff: 3.5.1
loglevel: 1.9.1
shelljs: 0.8.5
shelljs.exec: 1.1.8
@@ -17580,15 +17807,7 @@ snapshots:
glob-to-regexp@0.4.1: {}
- glob@10.3.4:
- dependencies:
- foreground-child: 3.1.1
- jackspeak: 2.3.6
- minimatch: 9.0.4
- minipass: 7.1.2
- path-scurry: 1.11.1
-
- glob@10.4.5:
+ glob@10.5.0:
dependencies:
foreground-child: 3.1.1
jackspeak: 3.4.3
@@ -17597,24 +17816,6 @@ snapshots:
package-json-from-dist: 1.0.0
path-scurry: 1.11.1
- glob@11.0.1:
- dependencies:
- foreground-child: 3.1.1
- jackspeak: 4.0.3
- minimatch: 10.0.1
- minipass: 7.1.2
- package-json-from-dist: 1.0.0
- path-scurry: 2.0.0
-
- glob@7.2.3:
- dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 3.1.2
- once: 1.4.0
- path-is-absolute: 1.0.1
-
globals@11.12.0: {}
globals@14.0.0: {}
@@ -17638,6 +17839,15 @@ snapshots:
hachure-fill@0.5.2: {}
+ handlebars@4.7.8:
+ dependencies:
+ minimist: 1.2.8
+ neo-async: 2.6.2
+ source-map: 0.6.1
+ wordwrap: 1.0.0
+ optionalDependencies:
+ uglify-js: 3.19.3
+
happy-dom@20.1.0:
dependencies:
'@types/node': 20.19.19
@@ -17669,7 +17879,11 @@ snapshots:
has-tostringtag@1.0.2:
dependencies:
- has-symbols: 1.0.3
+ has-symbols: 1.1.0
+
+ hashery@1.4.0:
+ dependencies:
+ hookified: 1.15.1
hasown@2.0.2:
dependencies:
@@ -17677,8 +17891,6 @@ snapshots:
help-me@5.0.0: {}
- hexoid@1.0.0: {}
-
highlight.js@11.11.1: {}
highlightjs-sap-abap@0.3.0: {}
@@ -17687,9 +17899,7 @@ snapshots:
dependencies:
react-is: 16.13.1
- hosted-git-info@7.0.1:
- dependencies:
- lru-cache: 10.4.3
+ hookified@1.15.1: {}
html-encoding-sniffer@4.0.0:
dependencies:
@@ -17757,7 +17967,7 @@ snapshots:
i18next@23.16.8:
dependencies:
- '@babel/runtime': 7.25.6
+ '@babel/runtime': 7.26.10
iconv-lite@0.4.24:
dependencies:
@@ -17767,10 +17977,16 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
+ iconv-lite@0.7.2:
+ dependencies:
+ safer-buffer: 2.1.2
+
ieee754@1.2.1: {}
ignore@5.3.1: {}
+ ignore@7.0.5: {}
+
image-blob-reduce@3.0.1:
dependencies:
pica: 7.1.1
@@ -17789,27 +18005,20 @@ snapshots:
parent-module: 1.0.1
resolve-from: 4.0.0
- import-local@3.1.0:
+ import-local@3.2.0:
dependencies:
pkg-dir: 4.2.0
resolve-cwd: 3.0.0
imurmurhash@0.1.4: {}
- inflight@1.0.6:
- dependencies:
- once: 1.4.0
- wrappy: 1.0.2
-
inherits@2.0.4: {}
- ini@1.3.8: {}
-
internal-slot@1.0.7:
dependencies:
es-errors: 1.3.0
hasown: 2.0.2
- side-channel: 1.0.6
+ side-channel: 1.1.0
internmap@1.0.1: {}
@@ -17854,12 +18063,10 @@ snapshots:
is-array-buffer@3.0.4:
dependencies:
call-bind: 1.0.7
- get-intrinsic: 1.2.4
+ get-intrinsic: 1.3.0
is-arrayish@0.2.1: {}
- is-arrayish@0.3.4: {}
-
is-async-function@2.0.0:
dependencies:
has-tostringtag: 1.0.2
@@ -17913,6 +18120,8 @@ snapshots:
is-interactive@1.0.0: {}
+ is-interactive@2.0.0: {}
+
is-map@2.0.3: {}
is-negative-zero@2.0.3: {}
@@ -17949,7 +18158,7 @@ snapshots:
is-symbol@1.1.0:
dependencies:
call-bind: 1.0.7
- has-symbols: 1.0.3
+ has-symbols: 1.1.0
safe-regex-test: 1.0.3
is-typed-array@1.1.13:
@@ -17958,6 +18167,10 @@ snapshots:
is-unicode-supported@0.1.0: {}
+ is-unicode-supported@1.3.0: {}
+
+ is-unicode-supported@2.1.0: {}
+
is-weakmap@2.0.2: {}
is-weakref@1.0.2:
@@ -17967,7 +18180,7 @@ snapshots:
is-weakset@2.0.3:
dependencies:
call-bind: 1.0.7
- get-intrinsic: 1.2.4
+ get-intrinsic: 1.3.0
is-what@3.14.1:
optional: true
@@ -17986,20 +18199,10 @@ snapshots:
istanbul-lib-coverage@3.2.2: {}
- istanbul-lib-instrument@5.2.1:
- dependencies:
- '@babel/core': 7.26.10
- '@babel/parser': 7.26.2
- '@istanbuljs/schema': 0.1.3
- istanbul-lib-coverage: 3.2.2
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
istanbul-lib-instrument@6.0.2:
dependencies:
- '@babel/core': 7.26.10
- '@babel/parser': 7.26.2
+ '@babel/core': 7.28.5
+ '@babel/parser': 7.28.5
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
semver: 7.7.3
@@ -18012,11 +18215,11 @@ snapshots:
make-dir: 4.0.0
supports-color: 7.2.0
- istanbul-lib-source-maps@4.0.1:
+ istanbul-lib-source-maps@5.0.6:
dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
debug: 4.4.3
istanbul-lib-coverage: 3.2.2
- source-map: 0.6.1
transitivePeerDependencies:
- supports-color
@@ -18030,27 +18233,17 @@ snapshots:
iterator.prototype@1.1.3:
dependencies:
define-properties: 1.2.1
- get-intrinsic: 1.2.4
+ get-intrinsic: 1.3.0
has-symbols: 1.0.3
reflect.getprototypeof: 1.0.7
set-function-name: 2.0.2
- jackspeak@2.3.6:
- dependencies:
- '@isaacs/cliui': 8.0.2
- optionalDependencies:
- '@pkgjs/parseargs': 0.11.0
-
jackspeak@3.4.3:
dependencies:
'@isaacs/cliui': 8.0.2
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
- jackspeak@4.0.3:
- dependencies:
- '@isaacs/cliui': 8.0.2
-
jake@10.8.7:
dependencies:
async: 3.2.5
@@ -18058,79 +18251,81 @@ snapshots:
filelist: 1.0.4
minimatch: 3.1.2
- jest-changed-files@29.7.0:
+ jest-changed-files@30.2.0:
dependencies:
execa: 5.1.1
- jest-util: 29.7.0
+ jest-util: 30.2.0
p-limit: 3.1.0
- jest-circus@29.7.0(babel-plugin-macros@3.1.0):
+ jest-circus@30.2.0(babel-plugin-macros@3.1.0):
dependencies:
- '@jest/environment': 29.7.0
- '@jest/expect': 29.7.0
- '@jest/test-result': 29.7.0
- '@jest/types': 29.6.3
+ '@jest/environment': 30.2.0
+ '@jest/expect': 30.2.0
+ '@jest/test-result': 30.2.0
+ '@jest/types': 30.2.0
'@types/node': 22.19.1
chalk: 4.1.2
co: 4.6.0
- dedent: 1.5.1(babel-plugin-macros@3.1.0)
+ dedent: 1.7.1(babel-plugin-macros@3.1.0)
is-generator-fn: 2.1.0
- jest-each: 29.7.0
- jest-matcher-utils: 29.7.0
- jest-message-util: 29.7.0
- jest-runtime: 29.7.0
- jest-snapshot: 29.7.0
- jest-util: 29.7.0
+ jest-each: 30.2.0
+ jest-matcher-utils: 30.2.0
+ jest-message-util: 30.2.0
+ jest-runtime: 30.2.0
+ jest-snapshot: 30.2.0
+ jest-util: 30.2.0
p-limit: 3.1.0
- pretty-format: 29.7.0
- pure-rand: 6.1.0
+ pretty-format: 30.2.0
+ pure-rand: 7.0.1
slash: 3.0.0
stack-utils: 2.0.6
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
- jest-cli@29.7.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3)):
+ jest-cli@30.2.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3)):
dependencies:
- '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))
- '@jest/test-result': 29.7.0
- '@jest/types': 29.6.3
+ '@jest/core': 30.2.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))
+ '@jest/test-result': 30.2.0
+ '@jest/types': 30.2.0
chalk: 4.1.2
- create-jest: 29.7.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))
- exit: 0.1.2
- import-local: 3.1.0
- jest-config: 29.7.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))
- jest-util: 29.7.0
- jest-validate: 29.7.0
+ exit-x: 0.2.2
+ import-local: 3.2.0
+ jest-config: 30.2.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
yargs: 17.7.2
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
+ - esbuild-register
- supports-color
- ts-node
- jest-config@29.7.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3)):
+ jest-config@30.2.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3)):
dependencies:
- '@babel/core': 7.24.6
- '@jest/test-sequencer': 29.7.0
- '@jest/types': 29.6.3
- babel-jest: 29.7.0(@babel/core@7.24.6)
+ '@babel/core': 7.28.5
+ '@jest/get-type': 30.1.0
+ '@jest/pattern': 30.0.1
+ '@jest/test-sequencer': 30.2.0
+ '@jest/types': 30.2.0
+ babel-jest: 30.2.0(@babel/core@7.28.5)
chalk: 4.1.2
- ci-info: 3.9.0
+ ci-info: 4.4.0
deepmerge: 4.3.1
- glob: 7.2.3
+ glob: 10.5.0
graceful-fs: 4.2.11
- jest-circus: 29.7.0(babel-plugin-macros@3.1.0)
- jest-environment-node: 29.7.0
- jest-get-type: 29.6.3
- jest-regex-util: 29.6.3
- jest-resolve: 29.7.0
- jest-runner: 29.7.0
- jest-util: 29.7.0
- jest-validate: 29.7.0
+ jest-circus: 30.2.0(babel-plugin-macros@3.1.0)
+ jest-docblock: 30.2.0
+ jest-environment-node: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-resolve: 30.2.0
+ jest-runner: 30.2.0
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
micromatch: 4.0.8
parse-json: 5.2.0
- pretty-format: 29.7.0
+ pretty-format: 30.2.0
slash: 3.0.0
strip-json-comments: 3.1.1
optionalDependencies:
@@ -18140,28 +18335,30 @@ snapshots:
- babel-plugin-macros
- supports-color
- jest-config@29.7.0(@types/node@22.19.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3)):
+ jest-config@30.2.0(@types/node@22.19.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3)):
dependencies:
- '@babel/core': 7.24.6
- '@jest/test-sequencer': 29.7.0
- '@jest/types': 29.6.3
- babel-jest: 29.7.0(@babel/core@7.24.6)
+ '@babel/core': 7.28.5
+ '@jest/get-type': 30.1.0
+ '@jest/pattern': 30.0.1
+ '@jest/test-sequencer': 30.2.0
+ '@jest/types': 30.2.0
+ babel-jest: 30.2.0(@babel/core@7.28.5)
chalk: 4.1.2
- ci-info: 3.9.0
+ ci-info: 4.4.0
deepmerge: 4.3.1
- glob: 7.2.3
+ glob: 10.5.0
graceful-fs: 4.2.11
- jest-circus: 29.7.0(babel-plugin-macros@3.1.0)
- jest-environment-node: 29.7.0
- jest-get-type: 29.6.3
- jest-regex-util: 29.6.3
- jest-resolve: 29.7.0
- jest-runner: 29.7.0
- jest-util: 29.7.0
- jest-validate: 29.7.0
+ jest-circus: 30.2.0(babel-plugin-macros@3.1.0)
+ jest-docblock: 30.2.0
+ jest-environment-node: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-resolve: 30.2.0
+ jest-runner: 30.2.0
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
micromatch: 4.0.8
parse-json: 5.2.0
- pretty-format: 29.7.0
+ pretty-format: 30.2.0
slash: 3.0.0
strip-json-comments: 3.1.1
optionalDependencies:
@@ -18171,212 +18368,211 @@ snapshots:
- babel-plugin-macros
- supports-color
- jest-diff@29.7.0:
+ jest-diff@30.2.0:
dependencies:
+ '@jest/diff-sequences': 30.0.1
+ '@jest/get-type': 30.1.0
chalk: 4.1.2
- diff-sequences: 29.6.3
- jest-get-type: 29.6.3
- pretty-format: 29.7.0
+ pretty-format: 30.2.0
- jest-docblock@29.7.0:
+ jest-docblock@30.2.0:
dependencies:
detect-newline: 3.1.0
- jest-each@29.7.0:
+ jest-each@30.2.0:
dependencies:
- '@jest/types': 29.6.3
+ '@jest/get-type': 30.1.0
+ '@jest/types': 30.2.0
chalk: 4.1.2
- jest-get-type: 29.6.3
- jest-util: 29.7.0
- pretty-format: 29.7.0
+ jest-util: 30.2.0
+ pretty-format: 30.2.0
- jest-environment-node@29.7.0:
+ jest-environment-node@30.2.0:
dependencies:
- '@jest/environment': 29.7.0
- '@jest/fake-timers': 29.7.0
- '@jest/types': 29.6.3
+ '@jest/environment': 30.2.0
+ '@jest/fake-timers': 30.2.0
+ '@jest/types': 30.2.0
'@types/node': 22.19.1
- jest-mock: 29.7.0
- jest-util: 29.7.0
+ jest-mock: 30.2.0
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
- jest-get-type@29.6.3: {}
-
- jest-haste-map@29.7.0:
+ jest-haste-map@30.2.0:
dependencies:
- '@jest/types': 29.6.3
- '@types/graceful-fs': 4.1.9
+ '@jest/types': 30.2.0
'@types/node': 22.19.1
anymatch: 3.1.3
fb-watchman: 2.0.2
graceful-fs: 4.2.11
- jest-regex-util: 29.6.3
- jest-util: 29.7.0
- jest-worker: 29.7.0
+ jest-regex-util: 30.0.1
+ jest-util: 30.2.0
+ jest-worker: 30.2.0
micromatch: 4.0.8
walker: 1.0.8
optionalDependencies:
fsevents: 2.3.3
- jest-leak-detector@29.7.0:
+ jest-leak-detector@30.2.0:
dependencies:
- jest-get-type: 29.6.3
- pretty-format: 29.7.0
+ '@jest/get-type': 30.1.0
+ pretty-format: 30.2.0
- jest-matcher-utils@29.7.0:
+ jest-matcher-utils@30.2.0:
dependencies:
+ '@jest/get-type': 30.1.0
chalk: 4.1.2
- jest-diff: 29.7.0
- jest-get-type: 29.6.3
- pretty-format: 29.7.0
+ jest-diff: 30.2.0
+ pretty-format: 30.2.0
- jest-message-util@29.7.0:
+ jest-message-util@30.2.0:
dependencies:
- '@babel/code-frame': 7.24.2
- '@jest/types': 29.6.3
+ '@babel/code-frame': 7.27.1
+ '@jest/types': 30.2.0
'@types/stack-utils': 2.0.3
chalk: 4.1.2
graceful-fs: 4.2.11
micromatch: 4.0.8
- pretty-format: 29.7.0
+ pretty-format: 30.2.0
slash: 3.0.0
stack-utils: 2.0.6
- jest-mock@29.7.0:
+ jest-mock@30.2.0:
dependencies:
- '@jest/types': 29.6.3
+ '@jest/types': 30.2.0
'@types/node': 22.19.1
- jest-util: 29.7.0
+ jest-util: 30.2.0
- jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
+ jest-pnp-resolver@1.2.3(jest-resolve@30.2.0):
optionalDependencies:
- jest-resolve: 29.7.0
+ jest-resolve: 30.2.0
- jest-regex-util@29.6.3: {}
+ jest-regex-util@30.0.1: {}
- jest-resolve-dependencies@29.7.0:
+ jest-resolve-dependencies@30.2.0:
dependencies:
- jest-regex-util: 29.6.3
- jest-snapshot: 29.7.0
+ jest-regex-util: 30.0.1
+ jest-snapshot: 30.2.0
transitivePeerDependencies:
- supports-color
- jest-resolve@29.7.0:
+ jest-resolve@30.2.0:
dependencies:
chalk: 4.1.2
graceful-fs: 4.2.11
- jest-haste-map: 29.7.0
- jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0)
- jest-util: 29.7.0
- jest-validate: 29.7.0
- resolve: 1.22.8
- resolve.exports: 2.0.2
+ jest-haste-map: 30.2.0
+ jest-pnp-resolver: 1.2.3(jest-resolve@30.2.0)
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
slash: 3.0.0
+ unrs-resolver: 1.11.1
- jest-runner@29.7.0:
+ jest-runner@30.2.0:
dependencies:
- '@jest/console': 29.7.0
- '@jest/environment': 29.7.0
- '@jest/test-result': 29.7.0
- '@jest/transform': 29.7.0
- '@jest/types': 29.6.3
+ '@jest/console': 30.2.0
+ '@jest/environment': 30.2.0
+ '@jest/test-result': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
'@types/node': 22.19.1
chalk: 4.1.2
emittery: 0.13.1
+ exit-x: 0.2.2
graceful-fs: 4.2.11
- jest-docblock: 29.7.0
- jest-environment-node: 29.7.0
- jest-haste-map: 29.7.0
- jest-leak-detector: 29.7.0
- jest-message-util: 29.7.0
- jest-resolve: 29.7.0
- jest-runtime: 29.7.0
- jest-util: 29.7.0
- jest-watcher: 29.7.0
- jest-worker: 29.7.0
+ jest-docblock: 30.2.0
+ jest-environment-node: 30.2.0
+ jest-haste-map: 30.2.0
+ jest-leak-detector: 30.2.0
+ jest-message-util: 30.2.0
+ jest-resolve: 30.2.0
+ jest-runtime: 30.2.0
+ jest-util: 30.2.0
+ jest-watcher: 30.2.0
+ jest-worker: 30.2.0
p-limit: 3.1.0
source-map-support: 0.5.13
transitivePeerDependencies:
- supports-color
- jest-runtime@29.7.0:
+ jest-runtime@30.2.0:
dependencies:
- '@jest/environment': 29.7.0
- '@jest/fake-timers': 29.7.0
- '@jest/globals': 29.7.0
- '@jest/source-map': 29.6.3
- '@jest/test-result': 29.7.0
- '@jest/transform': 29.7.0
- '@jest/types': 29.6.3
+ '@jest/environment': 30.2.0
+ '@jest/fake-timers': 30.2.0
+ '@jest/globals': 30.2.0
+ '@jest/source-map': 30.0.1
+ '@jest/test-result': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
'@types/node': 22.19.1
chalk: 4.1.2
- cjs-module-lexer: 1.2.3
+ cjs-module-lexer: 2.2.0
collect-v8-coverage: 1.0.2
- glob: 7.2.3
+ glob: 10.5.0
graceful-fs: 4.2.11
- jest-haste-map: 29.7.0
- jest-message-util: 29.7.0
- jest-mock: 29.7.0
- jest-regex-util: 29.6.3
- jest-resolve: 29.7.0
- jest-snapshot: 29.7.0
- jest-util: 29.7.0
+ jest-haste-map: 30.2.0
+ jest-message-util: 30.2.0
+ jest-mock: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-resolve: 30.2.0
+ jest-snapshot: 30.2.0
+ jest-util: 30.2.0
slash: 3.0.0
strip-bom: 4.0.0
transitivePeerDependencies:
- supports-color
- jest-snapshot@29.7.0:
+ jest-snapshot@30.2.0:
dependencies:
- '@babel/core': 7.24.6
- '@babel/generator': 7.24.1
- '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.6)
- '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.6)
- '@babel/types': 7.24.0
- '@jest/expect-utils': 29.7.0
- '@jest/transform': 29.7.0
- '@jest/types': 29.6.3
- babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.6)
+ '@babel/core': 7.28.5
+ '@babel/generator': 7.28.5
+ '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.5)
+ '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.28.5)
+ '@babel/types': 7.28.5
+ '@jest/expect-utils': 30.2.0
+ '@jest/get-type': 30.1.0
+ '@jest/snapshot-utils': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5)
chalk: 4.1.2
- expect: 29.7.0
+ expect: 30.2.0
graceful-fs: 4.2.11
- jest-diff: 29.7.0
- jest-get-type: 29.6.3
- jest-matcher-utils: 29.7.0
- jest-message-util: 29.7.0
- jest-util: 29.7.0
- natural-compare: 1.4.0
- pretty-format: 29.7.0
+ jest-diff: 30.2.0
+ jest-matcher-utils: 30.2.0
+ jest-message-util: 30.2.0
+ jest-util: 30.2.0
+ pretty-format: 30.2.0
semver: 7.7.3
+ synckit: 0.11.12
transitivePeerDependencies:
- supports-color
- jest-util@29.7.0:
+ jest-util@30.2.0:
dependencies:
- '@jest/types': 29.6.3
+ '@jest/types': 30.2.0
'@types/node': 22.19.1
chalk: 4.1.2
- ci-info: 3.9.0
+ ci-info: 4.4.0
graceful-fs: 4.2.11
- picomatch: 2.3.1
+ picomatch: 4.0.3
- jest-validate@29.7.0:
+ jest-validate@30.2.0:
dependencies:
- '@jest/types': 29.6.3
+ '@jest/get-type': 30.1.0
+ '@jest/types': 30.2.0
camelcase: 6.3.0
chalk: 4.1.2
- jest-get-type: 29.6.3
leven: 3.1.0
- pretty-format: 29.7.0
+ pretty-format: 30.2.0
- jest-watcher@29.7.0:
+ jest-watcher@30.2.0:
dependencies:
- '@jest/test-result': 29.7.0
- '@jest/types': 29.6.3
+ '@jest/test-result': 30.2.0
+ '@jest/types': 30.2.0
'@types/node': 22.19.1
ansi-escapes: 4.3.2
chalk: 4.1.2
emittery: 0.13.1
- jest-util: 29.7.0
+ jest-util: 30.2.0
string-length: 4.0.2
jest-worker@27.5.1:
@@ -18385,27 +18581,28 @@ snapshots:
merge-stream: 2.0.0
supports-color: 8.1.1
- jest-worker@29.7.0:
+ jest-worker@30.2.0:
dependencies:
'@types/node': 22.19.1
- jest-util: 29.7.0
+ '@ungap/structured-clone': 1.3.0
+ jest-util: 30.2.0
merge-stream: 2.0.0
supports-color: 8.1.1
- jest@29.7.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3)):
+ jest@30.2.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3)):
dependencies:
- '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))
- '@jest/types': 29.6.3
- import-local: 3.1.0
- jest-cli: 29.7.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))
+ '@jest/core': 30.2.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))
+ '@jest/types': 30.2.0
+ import-local: 3.2.0
+ jest-cli: 30.2.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
+ - esbuild-register
- supports-color
- ts-node
- jiti@1.21.0:
- optional: true
+ jiti@2.4.2: {}
jose@4.15.9: {}
@@ -18433,14 +18630,6 @@ snapshots:
joycon@3.1.1: {}
- js-beautify@1.15.1:
- dependencies:
- config-chain: 1.1.13
- editorconfig: 1.0.4
- glob: 10.4.5
- js-cookie: 3.0.5
- nopt: 7.2.0
-
js-cookie@3.0.5: {}
js-tiktoken@1.0.21:
@@ -18449,12 +18638,12 @@ snapshots:
js-tokens@4.0.0: {}
- js-yaml@3.14.1:
+ js-yaml@3.14.2:
dependencies:
argparse: 1.0.10
esprima: 4.0.1
- js-yaml@4.1.0:
+ js-yaml@4.1.1:
dependencies:
argparse: 2.0.1
@@ -18463,7 +18652,7 @@ snapshots:
cssstyle: 4.2.1
data-urls: 5.0.0
decimal.js: 10.4.3
- form-data: 4.0.0
+ form-data: 4.0.5
html-encoding-sniffer: 4.0.0
http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.5
@@ -18488,8 +18677,6 @@ snapshots:
jsesc@0.5.0: {}
- jsesc@2.5.2: {}
-
jsesc@3.0.2: {}
json-buffer@3.0.1: {}
@@ -18504,6 +18691,8 @@ snapshots:
json-schema-traverse@1.0.0: {}
+ json-schema-typed@8.0.2: {}
+
json-schema@0.4.0: {}
json-stable-stringify-without-jsonify@1.0.1: {}
@@ -18520,6 +18709,8 @@ snapshots:
optionalDependencies:
graceful-fs: 4.2.11
+ jsonrepair@3.13.2: {}
+
jsonwebtoken@9.0.3:
dependencies:
jws: 4.0.1
@@ -18568,9 +18759,9 @@ snapshots:
dependencies:
json-buffer: 3.0.1
- keyv@5.3.3:
+ keyv@5.6.0:
dependencies:
- '@keyv/serialize': 1.0.3
+ '@keyv/serialize': 1.1.1
khroma@2.1.0: {}
@@ -18586,14 +18777,14 @@ snapshots:
dependencies:
chalk: 4.1.2
cosmiconfig: 9.0.0(typescript@5.7.3)
- dotenv: 17.2.3
+ dotenv: 17.2.4
dotenv-expand: 12.0.3
git-diff: 2.0.6
kysely: 0.28.2
micromatch: 4.0.8
minimist: 1.2.8
pluralize: 8.0.0
- zod: 4.3.5
+ zod: 4.3.6
optionalDependencies:
pg: 8.16.3
transitivePeerDependencies:
@@ -18620,7 +18811,7 @@ snapshots:
vscode-languageserver-textdocument: 1.0.12
vscode-uri: 3.0.8
- langsmith@0.4.6(@opentelemetry/api@1.9.0)(openai@6.2.0(ws@8.19.0)(zod@4.3.5)):
+ langsmith@0.4.12(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.19.0)(zod@4.3.6)):
dependencies:
'@types/uuid': 10.0.0
chalk: 4.1.2
@@ -18630,7 +18821,8 @@ snapshots:
uuid: 10.0.0
optionalDependencies:
'@opentelemetry/api': 1.9.0
- openai: 6.2.0(ws@8.19.0)(zod@4.3.5)
+ '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0)
+ openai: 6.2.0(ws@8.19.0)(zod@4.3.6)
layout-base@1.0.2: {}
@@ -18699,7 +18891,7 @@ snapshots:
load-esm@1.0.3: {}
- loader-runner@4.3.0: {}
+ loader-runner@4.3.1: {}
local-pkg@1.1.2:
dependencies:
@@ -18715,7 +18907,7 @@ snapshots:
dependencies:
p-locate: 5.0.0
- lodash-es@4.17.21: {}
+ lodash-es@4.17.23: {}
lodash.debounce@4.0.8: {}
@@ -18745,15 +18937,27 @@ snapshots:
lodash.throttle@4.1.1: {}
- lodash@4.17.21: {}
+ lodash@4.17.23: {}
log-symbols@4.1.0:
dependencies:
chalk: 4.1.2
is-unicode-supported: 0.1.0
+ log-symbols@6.0.0:
+ dependencies:
+ chalk: 5.6.2
+ is-unicode-supported: 1.3.0
+
+ log-symbols@7.0.1:
+ dependencies:
+ is-unicode-supported: 2.1.0
+ yoctocolors: 2.1.2
+
loglevel@1.9.1: {}
+ long@5.3.2: {}
+
loose-envify@1.4.0:
dependencies:
js-tokens: 4.0.0
@@ -18772,8 +18976,6 @@ snapshots:
lru-cache@10.4.3: {}
- lru-cache@11.0.2: {}
-
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
@@ -18819,12 +19021,12 @@ snapshots:
underscore: 1.13.7
xmlbuilder: 10.1.1
- mantine-form-zod-resolver@1.3.0(@mantine/form@8.3.12(react@18.3.1))(zod@3.25.76):
+ mantine-form-zod-resolver@1.3.0(@mantine/form@8.3.14(react@18.3.1))(zod@3.25.76):
dependencies:
- '@mantine/form': 8.3.12(react@18.3.1)
+ '@mantine/form': 8.3.14(react@18.3.1)
zod: 3.25.76
- markdown-it@14.1.0:
+ markdown-it@14.1.1:
dependencies:
argparse: 2.0.1
entities: 4.5.0
@@ -18835,38 +19037,12 @@ snapshots:
marked@13.0.3: {}
+ marked@15.0.12: {}
+
marked@16.4.2: {}
- marked@7.0.4: {}
-
math-intrinsics@1.1.0: {}
- md-to-react-email@5.0.2(react@18.3.1):
- dependencies:
- marked: 7.0.4
- react: 18.3.1
-
- mdast-util-from-markdown@1.3.1:
- dependencies:
- '@types/mdast': 3.0.15
- '@types/unist': 2.0.11
- decode-named-character-reference: 1.1.0
- mdast-util-to-string: 3.2.0
- micromark: 3.2.0
- micromark-util-decode-numeric-character-reference: 1.1.0
- micromark-util-decode-string: 1.1.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- unist-util-stringify-position: 3.0.3
- uvu: 0.5.6
- transitivePeerDependencies:
- - supports-color
-
- mdast-util-to-string@3.2.0:
- dependencies:
- '@types/mdast': 3.0.15
-
mdurl@2.0.0: {}
memfs@3.5.3:
@@ -18879,31 +19055,6 @@ snapshots:
merge2@1.4.1: {}
- mermaid@10.9.4:
- dependencies:
- '@braintree/sanitize-url': 6.0.2
- '@types/d3-scale': 4.0.8
- '@types/d3-scale-chromatic': 3.0.3
- cytoscape: 3.30.2
- cytoscape-cose-bilkent: 4.1.0(cytoscape@3.30.2)
- d3: 7.9.0
- d3-sankey: 0.12.3
- dagre-d3-es: 7.0.10
- dayjs: 1.11.13
- dompurify: 3.1.6
- elkjs: 0.9.3
- katex: 0.16.27
- khroma: 2.1.0
- lodash-es: 4.17.21
- mdast-util-from-markdown: 1.3.1
- non-layered-tidy-tree-layout: 2.0.2
- stylis: 4.3.6
- ts-dedent: 2.2.0
- uuid: 9.0.1
- web-worker: 1.5.0
- transitivePeerDependencies:
- - supports-color
-
mermaid@11.12.2:
dependencies:
'@braintree/sanitize-url': 7.1.1
@@ -18917,10 +19068,10 @@ snapshots:
d3-sankey: 0.12.3
dagre-d3-es: 7.0.13
dayjs: 1.11.19
- dompurify: 3.2.6
+ dompurify: 3.3.1
katex: 0.16.27
khroma: 2.1.0
- lodash-es: 4.17.21
+ lodash-es: 4.17.23
marked: 16.4.2
roughjs: 4.6.6
stylis: 4.3.6
@@ -18931,144 +19082,6 @@ snapshots:
methods@1.1.2: {}
- micromark-core-commonmark@1.1.0:
- dependencies:
- decode-named-character-reference: 1.1.0
- micromark-factory-destination: 1.1.0
- micromark-factory-label: 1.1.0
- micromark-factory-space: 1.1.0
- micromark-factory-title: 1.1.0
- micromark-factory-whitespace: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-chunked: 1.1.0
- micromark-util-classify-character: 1.1.0
- micromark-util-html-tag-name: 1.2.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-resolve-all: 1.1.0
- micromark-util-subtokenize: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
-
- micromark-factory-destination@1.1.0:
- dependencies:
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
-
- micromark-factory-label@1.1.0:
- dependencies:
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
-
- micromark-factory-space@1.1.0:
- dependencies:
- micromark-util-character: 1.2.0
- micromark-util-types: 1.1.0
-
- micromark-factory-title@1.1.0:
- dependencies:
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
-
- micromark-factory-whitespace@1.1.0:
- dependencies:
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
-
- micromark-util-character@1.2.0:
- dependencies:
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
-
- micromark-util-chunked@1.1.0:
- dependencies:
- micromark-util-symbol: 1.1.0
-
- micromark-util-classify-character@1.1.0:
- dependencies:
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
-
- micromark-util-combine-extensions@1.1.0:
- dependencies:
- micromark-util-chunked: 1.1.0
- micromark-util-types: 1.1.0
-
- micromark-util-decode-numeric-character-reference@1.1.0:
- dependencies:
- micromark-util-symbol: 1.1.0
-
- micromark-util-decode-string@1.1.0:
- dependencies:
- decode-named-character-reference: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-decode-numeric-character-reference: 1.1.0
- micromark-util-symbol: 1.1.0
-
- micromark-util-encode@1.1.0: {}
-
- micromark-util-html-tag-name@1.2.0: {}
-
- micromark-util-normalize-identifier@1.1.0:
- dependencies:
- micromark-util-symbol: 1.1.0
-
- micromark-util-resolve-all@1.1.0:
- dependencies:
- micromark-util-types: 1.1.0
-
- micromark-util-sanitize-uri@1.2.0:
- dependencies:
- micromark-util-character: 1.2.0
- micromark-util-encode: 1.1.0
- micromark-util-symbol: 1.1.0
-
- micromark-util-subtokenize@1.1.0:
- dependencies:
- micromark-util-chunked: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
-
- micromark-util-symbol@1.1.0: {}
-
- micromark-util-types@1.1.0: {}
-
- micromark@3.2.0:
- dependencies:
- '@types/debug': 4.1.12
- debug: 4.4.3
- decode-named-character-reference: 1.1.0
- micromark-core-commonmark: 1.1.0
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-chunked: 1.1.0
- micromark-util-combine-extensions: 1.1.0
- micromark-util-decode-numeric-character-reference: 1.1.0
- micromark-util-encode: 1.1.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-resolve-all: 1.1.0
- micromark-util-sanitize-uri: 1.2.0
- micromark-util-subtokenize: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
- transitivePeerDependencies:
- - supports-color
-
- micromatch@4.0.5:
- dependencies:
- braces: 3.0.2
- picomatch: 2.3.1
-
micromatch@4.0.8:
dependencies:
braces: 3.0.3
@@ -19076,10 +19089,16 @@ snapshots:
mime-db@1.52.0: {}
+ mime-db@1.54.0: {}
+
mime-types@2.1.35:
dependencies:
mime-db: 1.52.0
+ mime-types@3.0.2:
+ dependencies:
+ mime-db: 1.54.0
+
mime@1.6.0:
optional: true
@@ -19089,29 +19108,23 @@ snapshots:
mimic-fn@2.1.0: {}
- minimatch@10.0.1:
+ mimic-function@5.0.1: {}
+
+ minimatch@10.1.1:
dependencies:
- brace-expansion: 2.0.1
+ '@isaacs/brace-expansion': 5.0.1
minimatch@3.1.2:
dependencies:
- brace-expansion: 1.1.11
+ brace-expansion: 1.1.12
minimatch@5.1.6:
dependencies:
- brace-expansion: 2.0.1
-
- minimatch@9.0.1:
- dependencies:
- brace-expansion: 2.0.1
-
- minimatch@9.0.3:
- dependencies:
- brace-expansion: 2.0.1
+ brace-expansion: 2.0.2
minimatch@9.0.4:
dependencies:
- brace-expansion: 2.0.1
+ brace-expansion: 2.0.2
minimist@1.2.8: {}
@@ -19126,8 +19139,6 @@ snapshots:
pkg-types: 1.3.1
ufo: 1.6.1
- mri@1.2.0: {}
-
ms@2.1.2: {}
ms@2.1.3: {}
@@ -19167,22 +19178,24 @@ snapshots:
nanoid@4.0.2: {}
+ napi-postinstall@0.3.4: {}
+
natural-compare@1.4.0: {}
needle@3.3.1:
dependencies:
iconv-lite: 0.6.3
- sax: 1.4.1
+ sax: 1.4.4
optional: true
negotiator@0.6.3: {}
neo-async@2.6.2: {}
- nestjs-kysely@1.2.0(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)(kysely@0.28.2)(reflect-metadata@0.2.2):
+ nestjs-kysely@1.2.0(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(kysely@0.28.2)(reflect-metadata@0.2.2):
dependencies:
'@nestjs/common': 11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
- '@nestjs/core': 11.1.11(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/core': 11.1.13(@nestjs/common@11.1.11(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
kysely: 0.28.2
reflect-metadata: 0.2.2
@@ -19193,40 +19206,13 @@ snapshots:
pino-http: 11.0.0
rxjs: 7.8.2
- next@14.2.10(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.51.0):
- dependencies:
- '@next/env': 14.2.10
- '@swc/helpers': 0.5.5
- busboy: 1.6.0
- caniuse-lite: 1.0.30001684
- graceful-fs: 4.2.11
- postcss: 8.4.31
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- styled-jsx: 5.1.1(@babel/core@7.24.5)(babel-plugin-macros@3.1.0)(react@18.3.1)
- optionalDependencies:
- '@next/swc-darwin-arm64': 14.2.10
- '@next/swc-darwin-x64': 14.2.10
- '@next/swc-linux-arm64-gnu': 14.2.10
- '@next/swc-linux-arm64-musl': 14.2.10
- '@next/swc-linux-x64-gnu': 14.2.10
- '@next/swc-linux-x64-musl': 14.2.10
- '@next/swc-win32-arm64-msvc': 14.2.10
- '@next/swc-win32-ia32-msvc': 14.2.10
- '@next/swc-win32-x64-msvc': 14.2.10
- '@opentelemetry/api': 1.9.0
- sass: 1.51.0
- transitivePeerDependencies:
- - '@babel/core'
- - babel-plugin-macros
-
node-abort-controller@3.1.1: {}
node-addon-api@8.5.0: {}
node-emoji@1.11.0:
dependencies:
- lodash: 4.17.21
+ lodash: 4.17.23
node-fetch@2.7.0:
dependencies:
@@ -19243,25 +19229,14 @@ snapshots:
node-releases@2.0.18: {}
+ node-releases@2.0.27: {}
+
nodemailer@7.0.12: {}
- non-layered-tidy-tree-layout@2.0.2: {}
-
- nopt@7.2.0:
- dependencies:
- abbrev: 2.0.0
-
normalize-path@3.0.0: {}
notepack.io@3.0.1: {}
- npm-package-arg@11.0.1:
- dependencies:
- hosted-git-info: 7.0.1
- proc-log: 3.0.0
- semver: 7.7.3
- validate-npm-package-name: 5.0.0
-
npm-run-path@4.0.1:
dependencies:
path-key: 3.1.1
@@ -19272,57 +19247,66 @@ snapshots:
nwsapi@2.2.16: {}
- nx@20.4.5(@swc/core@1.5.25(@swc/helpers@0.5.5)):
+ nx@22.5.0:
dependencies:
'@napi-rs/wasm-runtime': 0.2.4
'@yarnpkg/lockfile': 1.1.0
'@yarnpkg/parsers': 3.0.2
'@zkochan/js-yaml': 0.0.7
- axios: 1.13.2
- chalk: 4.1.2
+ axios: 1.13.5
cli-cursor: 3.1.0
cli-spinners: 2.6.1
cliui: 8.0.1
- dotenv: 16.4.5
+ dotenv: 16.4.7
dotenv-expand: 11.0.6
+ ejs: 3.1.10
enquirer: 2.3.6
figures: 3.2.0
flat: 5.0.2
front-matter: 4.0.2
- ignore: 5.3.1
- jest-diff: 29.7.0
+ ignore: 7.0.5
+ jest-diff: 30.2.0
jsonc-parser: 3.2.0
lines-and-columns: 2.0.3
- minimatch: 9.0.3
+ minimatch: 10.1.1
node-machine-id: 1.1.12
npm-run-path: 4.0.1
open: 8.4.2
ora: 5.3.0
+ picocolors: 1.1.1
resolve.exports: 2.0.3
- semver: 7.7.2
+ semver: 7.7.3
string-width: 4.2.3
tar-stream: 2.2.0
- tmp: 0.2.1
+ tmp: 0.2.5
+ tree-kill: 1.2.2
tsconfig-paths: 4.2.0
- tslib: 2.8.0
+ tslib: 2.8.1
yaml: 2.7.0
yargs: 17.7.2
yargs-parser: 21.1.1
optionalDependencies:
- '@nx/nx-darwin-arm64': 20.4.5
- '@nx/nx-darwin-x64': 20.4.5
- '@nx/nx-freebsd-x64': 20.4.5
- '@nx/nx-linux-arm-gnueabihf': 20.4.5
- '@nx/nx-linux-arm64-gnu': 20.4.5
- '@nx/nx-linux-arm64-musl': 20.4.5
- '@nx/nx-linux-x64-gnu': 20.4.5
- '@nx/nx-linux-x64-musl': 20.4.5
- '@nx/nx-win32-arm64-msvc': 20.4.5
- '@nx/nx-win32-x64-msvc': 20.4.5
- '@swc/core': 1.5.25(@swc/helpers@0.5.5)
+ '@nx/nx-darwin-arm64': 22.5.0
+ '@nx/nx-darwin-x64': 22.5.0
+ '@nx/nx-freebsd-x64': 22.5.0
+ '@nx/nx-linux-arm-gnueabihf': 22.5.0
+ '@nx/nx-linux-arm64-gnu': 22.5.0
+ '@nx/nx-linux-arm64-musl': 22.5.0
+ '@nx/nx-linux-x64-gnu': 22.5.0
+ '@nx/nx-linux-x64-musl': 22.5.0
+ '@nx/nx-win32-arm64-msvc': 22.5.0
+ '@nx/nx-win32-x64-msvc': 22.5.0
transitivePeerDependencies:
- debug
+ nypm@0.6.2:
+ dependencies:
+ citty: 0.1.6
+ consola: 3.4.2
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+ tinyexec: 1.0.1
+
oauth@0.10.0: {}
object-assign@4.1.1: {}
@@ -19377,7 +19361,9 @@ snapshots:
dependencies:
mimic-fn: 2.1.0
- open-color@1.9.1: {}
+ onetime@7.0.0:
+ dependencies:
+ mimic-function: 5.0.1
open@8.4.2:
dependencies:
@@ -19385,10 +19371,10 @@ snapshots:
is-docker: 2.2.1
is-wsl: 2.2.0
- openai@6.2.0(ws@8.19.0)(zod@4.3.5):
+ openai@6.2.0(ws@8.19.0)(zod@4.3.6):
optionalDependencies:
ws: 8.19.0
- zod: 4.3.5
+ zod: 4.3.6
optional: true
openid-client@5.7.1:
@@ -19434,9 +19420,19 @@ snapshots:
strip-ansi: 6.0.1
wcwidth: 1.0.1
- orderedmap@2.1.1: {}
+ ora@8.2.0:
+ dependencies:
+ chalk: 5.6.2
+ cli-cursor: 5.0.0
+ cli-spinners: 2.9.2
+ is-interactive: 2.0.0
+ is-unicode-supported: 2.1.0
+ log-symbols: 6.0.0
+ stdin-discarder: 0.2.2
+ string-width: 7.2.0
+ strip-ansi: 7.1.0
- os-tmpdir@1.0.2: {}
+ orderedmap@2.1.1: {}
otpauth@9.4.1:
dependencies:
@@ -19559,11 +19555,6 @@ snapshots:
lru-cache: 10.4.3
minipass: 7.1.2
- path-scurry@2.0.0:
- dependencies:
- lru-cache: 11.0.2
- minipass: 7.1.2
-
path-to-regexp@8.3.0: {}
path-type@4.0.0: {}
@@ -19582,21 +19573,21 @@ snapshots:
perfect-freehand@1.2.0: {}
- pg-cloudflare@1.2.7:
+ pg-cloudflare@1.3.0:
optional: true
- pg-connection-string@2.9.1:
+ pg-connection-string@2.11.0:
optional: true
pg-int8@1.0.1:
optional: true
- pg-pool@3.10.1(pg@8.16.3):
+ pg-pool@3.11.0(pg@8.16.3):
dependencies:
pg: 8.16.3
optional: true
- pg-protocol@1.10.3:
+ pg-protocol@1.11.0:
optional: true
pg-tsquery@8.4.2: {}
@@ -19605,20 +19596,20 @@ snapshots:
dependencies:
pg-int8: 1.0.1
postgres-array: 2.0.0
- postgres-bytea: 1.0.0
+ postgres-bytea: 1.0.1
postgres-date: 1.0.7
postgres-interval: 1.2.0
optional: true
pg@8.16.3:
dependencies:
- pg-connection-string: 2.9.1
- pg-pool: 3.10.1(pg@8.16.3)
- pg-protocol: 1.10.3
+ pg-connection-string: 2.11.0
+ pg-pool: 3.11.0(pg@8.16.3)
+ pg-protocol: 1.11.0
pg-types: 2.2.0
pgpass: 1.0.5
optionalDependencies:
- pg-cloudflare: 1.2.7
+ pg-cloudflare: 1.3.0
optional: true
pgpass@1.0.5:
@@ -19636,10 +19627,6 @@ snapshots:
object-assign: 4.1.1
webworkify: 1.5.0
- picocolors@1.0.0: {}
-
- picocolors@1.0.1: {}
-
picocolors@1.1.1: {}
picomatch@2.3.1: {}
@@ -19698,7 +19685,7 @@ snapshots:
sonic-boom: 4.0.1
thread-stream: 3.0.2
- pirates@4.0.6: {}
+ pirates@4.0.7: {}
pkg-dir@4.2.0:
dependencies:
@@ -19775,12 +19762,6 @@ snapshots:
dependencies:
postcss: 8.4.49
- postcss@8.4.31:
- dependencies:
- nanoid: 3.3.11
- picocolors: 1.1.1
- source-map-js: 1.2.1
-
postcss@8.4.49:
dependencies:
nanoid: 3.3.7
@@ -19796,7 +19777,7 @@ snapshots:
postgres-array@2.0.0:
optional: true
- postgres-bytea@1.0.0:
+ postgres-bytea@1.0.1:
optional: true
postgres-date@1.0.7:
@@ -19809,20 +19790,29 @@ snapshots:
postgres@3.4.8: {}
- posthog-js@1.255.1:
+ posthog-js@1.345.5:
dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/api-logs': 0.208.0
+ '@opentelemetry/exporter-logs-otlp-http': 0.208.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0)
+ '@posthog/core': 1.22.0
+ '@posthog/types': 1.345.5
core-js: 3.43.0
+ dompurify: 3.3.1
fflate: 0.4.8
- preact: 10.26.9
- web-vitals: 4.2.4
+ preact: 10.28.3
+ query-selector-shadow-dom: 1.0.1
+ web-vitals: 5.1.0
postmark@4.0.5:
dependencies:
- axios: 1.13.2
+ axios: 1.13.5
transitivePeerDependencies:
- debug
- preact@10.26.9: {}
+ preact@10.28.3: {}
prelude-ls@1.2.1: {}
@@ -19830,15 +19820,15 @@ snapshots:
prettier@3.5.1: {}
- pretty-format@29.7.0:
+ prettier@3.8.1: {}
+
+ pretty-format@30.2.0:
dependencies:
- '@jest/schemas': 29.6.3
+ '@jest/schemas': 30.0.5
ansi-styles: 5.2.0
- react-is: 18.2.0
+ react-is: 18.3.1
- prismjs@1.29.0: {}
-
- proc-log@3.0.0: {}
+ prismjs@1.30.0: {}
process-nextick-args@2.0.1: {}
@@ -19904,7 +19894,7 @@ snapshots:
prosemirror-markdown@1.13.1:
dependencies:
'@types/markdown-it': 14.1.2
- markdown-it: 14.1.0
+ markdown-it: 14.1.1
prosemirror-model: 1.25.1
prosemirror-menu@1.2.4:
@@ -19960,7 +19950,20 @@ snapshots:
prosemirror-state: 1.4.3
prosemirror-transform: 1.10.4
- proto-list@1.2.4: {}
+ protobufjs@7.5.4:
+ dependencies:
+ '@protobufjs/aspromise': 1.1.2
+ '@protobufjs/base64': 1.1.2
+ '@protobufjs/codegen': 2.0.4
+ '@protobufjs/eventemitter': 1.1.0
+ '@protobufjs/fetch': 1.1.0
+ '@protobufjs/float': 1.0.2
+ '@protobufjs/inquire': 1.1.0
+ '@protobufjs/path': 1.1.2
+ '@protobufjs/pool': 1.1.0
+ '@protobufjs/utf8': 1.1.0
+ '@types/node': 22.19.1
+ long: 5.3.2
proxy-from-env@1.1.0: {}
@@ -19976,7 +19979,7 @@ snapshots:
punycode@2.3.1: {}
- pure-rand@6.1.0: {}
+ pure-rand@7.0.1: {}
pwacompat@2.0.17: {}
@@ -19986,16 +19989,81 @@ snapshots:
pngjs: 5.0.0
yargs: 15.4.1
- qs@6.12.0:
+ qs@6.14.2:
dependencies:
- side-channel: 1.0.6
+ side-channel: 1.1.0
quansync@0.2.11: {}
+ query-selector-shadow-dom@1.0.1: {}
+
queue-microtask@1.2.3: {}
quick-format-unescaped@4.0.4: {}
+ radix-ui@1.4.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-accessible-icon': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-accordion': 1.2.12(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-arrow': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-aspect-ratio': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-avatar': 1.1.10(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-context-menu': 2.2.16(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-dialog': 1.1.15(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-form': 0.1.8(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-hover-card': 1.1.15(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-label': 2.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-menubar': 1.1.16(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-one-time-password-field': 0.1.8(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-password-toggle-field': 0.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-popover': 1.1.15(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-progress': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-select': 2.2.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-separator': 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slider': 1.3.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.2.3(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-switch': 1.2.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-tabs': 1.1.13(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-toast': 1.2.15(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-toggle': 1.1.10(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.12)(react@18.3.1)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.12
+ '@types/react-dom': 18.3.1
+
randombytes@2.1.0:
dependencies:
safe-buffer: 5.2.1
@@ -20047,36 +20115,33 @@ snapshots:
dependencies:
react: 18.3.1
- react-email@3.0.2(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.51.0):
+ react-email@5.2.8:
dependencies:
- '@babel/core': 7.24.5
- '@babel/parser': 7.24.5
- chalk: 4.1.2
+ '@babel/parser': 7.28.5
+ '@babel/traverse': 7.28.5
chokidar: 4.0.3
- commander: 11.1.0
+ commander: 13.1.0
+ conf: 15.1.0
debounce: 2.0.0
- esbuild: 0.19.11
- glob: 10.3.4
- log-symbols: 4.1.0
- mime-types: 2.1.35
- next: 14.2.10(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.51.0)
+ esbuild: 0.25.0
+ glob: 10.5.0
+ jiti: 2.4.2
+ log-symbols: 7.0.1
+ mime-types: 3.0.2
normalize-path: 3.0.0
- ora: 5.4.1
- socket.io: 4.8.0
+ nypm: 0.6.2
+ ora: 8.2.0
+ prompts: 2.4.2
+ socket.io: 4.8.3
+ tsconfig-paths: 4.2.0
transitivePeerDependencies:
- - '@opentelemetry/api'
- - '@playwright/test'
- - babel-plugin-macros
- bufferutil
- - react
- - react-dom
- - sass
- supports-color
- utf-8-validate
react-error-boundary@4.1.2(react@18.3.1):
dependencies:
- '@babel/runtime': 7.23.7
+ '@babel/runtime': 7.26.10
react: 18.3.1
react-fast-compare@3.2.2: {}
@@ -20090,7 +20155,7 @@ snapshots:
react-i18next@15.0.1(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- '@babel/runtime': 7.25.6
+ '@babel/runtime': 7.26.10
html-parse-stringify: 3.0.1
i18next: 23.16.8
react: 18.3.1
@@ -20099,17 +20164,13 @@ snapshots:
react-is@16.13.1: {}
- react-is@18.2.0: {}
+ react-is@18.3.1: {}
react-number-format@5.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- react-promise-suspense@0.3.4:
- dependencies:
- fast-deep-equal: 2.0.1
-
react-refresh@0.18.0: {}
react-remove-scroll-bar@2.3.8(@types/react@18.3.12)(react@18.3.1):
@@ -20120,17 +20181,6 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.12
- react-remove-scroll@2.6.3(@types/react@18.3.12)(react@18.3.1):
- dependencies:
- react: 18.3.1
- react-remove-scroll-bar: 2.3.8(@types/react@18.3.12)(react@18.3.1)
- react-style-singleton: 2.2.3(@types/react@18.3.12)(react@18.3.1)
- tslib: 2.8.1
- use-callback-ref: 1.3.3(@types/react@18.3.12)(react@18.3.1)
- use-sidecar: 1.1.3(@types/react@18.3.12)(react@18.3.1)
- optionalDependencies:
- '@types/react': 18.3.12
-
react-remove-scroll@2.7.2(@types/react@18.3.12)(react@18.3.1):
dependencies:
react: 18.3.1
@@ -20156,12 +20206,6 @@ snapshots:
optionalDependencies:
react-dom: 18.3.1(react@18.3.1)
- react-split@2.0.14(react@18.3.1):
- dependencies:
- prop-types: 15.8.1
- react: 18.3.1
- split.js: 1.6.5
-
react-style-singleton@2.2.3(@types/react@18.3.12)(react@18.3.1):
dependencies:
get-nonce: 1.0.1
@@ -20172,7 +20216,7 @@ snapshots:
react-textarea-autosize@8.5.9(@types/react@18.3.12)(react@18.3.1):
dependencies:
- '@babel/runtime': 7.25.6
+ '@babel/runtime': 7.26.10
react: 18.3.1
use-composed-ref: 1.3.0(react@18.3.1)
use-latest: 1.2.1(@types/react@18.3.12)(react@18.3.1)
@@ -20181,7 +20225,7 @@ snapshots:
react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- '@babel/runtime': 7.25.6
+ '@babel/runtime': 7.26.10
dom-helpers: 5.2.1
loose-envify: 1.4.0
prop-types: 15.8.1
@@ -20190,7 +20234,7 @@ snapshots:
react-window@1.8.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- '@babel/runtime': 7.25.6
+ '@babel/runtime': 7.26.10
memoize-one: 5.2.1
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@@ -20235,7 +20279,7 @@ snapshots:
redux@4.2.1:
dependencies:
- '@babel/runtime': 7.25.6
+ '@babel/runtime': 7.26.10
redux@5.0.1: {}
@@ -20247,7 +20291,7 @@ snapshots:
define-properties: 1.2.1
es-abstract: 1.23.5
es-errors: 1.3.0
- get-intrinsic: 1.2.4
+ get-intrinsic: 1.3.0
gopd: 1.2.0
which-builtin-type: 1.2.0
@@ -20261,7 +20305,7 @@ snapshots:
regenerator-transform@0.15.2:
dependencies:
- '@babel/runtime': 7.25.6
+ '@babel/runtime': 7.26.10
regexp.prototype.flags@1.5.3:
dependencies:
@@ -20301,8 +20345,6 @@ snapshots:
resolve-pkg-maps@1.0.0: {}
- resolve.exports@2.0.2: {}
-
resolve.exports@2.0.3: {}
resolve@1.22.8:
@@ -20322,17 +20364,20 @@ snapshots:
onetime: 5.1.2
signal-exit: 3.0.7
+ restore-cursor@5.1.0:
+ dependencies:
+ onetime: 7.0.0
+ signal-exit: 4.1.0
+
ret@0.5.0: {}
reusify@1.0.4: {}
reusify@1.1.0: {}
- rfdc@1.3.1: {}
+ rfc6902@5.1.2: {}
- rimraf@3.0.2:
- dependencies:
- glob: 7.2.3
+ rfdc@1.3.1: {}
robust-predicates@3.0.2: {}
@@ -20398,14 +20443,10 @@ snapshots:
dependencies:
tslib: 2.8.1
- sade@1.8.1:
- dependencies:
- mri: 1.2.0
-
safe-array-concat@1.1.2:
dependencies:
call-bind: 1.0.7
- get-intrinsic: 1.2.4
+ get-intrinsic: 1.3.0
has-symbols: 1.0.3
isarray: 2.0.5
@@ -20439,6 +20480,9 @@ snapshots:
sax@1.4.1: {}
+ sax@1.4.4:
+ optional: true
+
saxes@6.0.0:
dependencies:
xmlchars: 2.2.0
@@ -20453,12 +20497,12 @@ snapshots:
ajv: 6.12.6
ajv-keywords: 3.5.2(ajv@6.12.6)
- schema-utils@4.3.0:
+ schema-utils@4.3.3:
dependencies:
'@types/json-schema': 7.0.15
- ajv: 8.12.0
- ajv-formats: 2.1.1(ajv@8.12.0)
- ajv-keywords: 5.1.0(ajv@8.12.0)
+ ajv: 8.17.1
+ ajv-formats: 2.1.1(ajv@8.17.1)
+ ajv-keywords: 5.1.0(ajv@8.17.1)
scimmy@1.3.5(patch_hash=775d80f86830b2c5dd1a250c9802c10f8fc3da3c7898373de5aa0c23993d1673): {}
@@ -20490,7 +20534,7 @@ snapshots:
define-data-property: 1.1.4
es-errors: 1.3.0
function-bind: 1.1.2
- get-intrinsic: 1.2.4
+ get-intrinsic: 1.3.0
gopd: 1.2.0
has-property-descriptors: 1.0.2
@@ -20507,35 +20551,6 @@ snapshots:
shallowequal@1.1.0: {}
- sharp@0.34.3:
- dependencies:
- color: 4.2.3
- detect-libc: 2.0.4
- semver: 7.7.2
- optionalDependencies:
- '@img/sharp-darwin-arm64': 0.34.3
- '@img/sharp-darwin-x64': 0.34.3
- '@img/sharp-libvips-darwin-arm64': 1.2.0
- '@img/sharp-libvips-darwin-x64': 1.2.0
- '@img/sharp-libvips-linux-arm': 1.2.0
- '@img/sharp-libvips-linux-arm64': 1.2.0
- '@img/sharp-libvips-linux-ppc64': 1.2.0
- '@img/sharp-libvips-linux-s390x': 1.2.0
- '@img/sharp-libvips-linux-x64': 1.2.0
- '@img/sharp-libvips-linuxmusl-arm64': 1.2.0
- '@img/sharp-libvips-linuxmusl-x64': 1.2.0
- '@img/sharp-linux-arm': 0.34.3
- '@img/sharp-linux-arm64': 0.34.3
- '@img/sharp-linux-ppc64': 0.34.3
- '@img/sharp-linux-s390x': 0.34.3
- '@img/sharp-linux-x64': 0.34.3
- '@img/sharp-linuxmusl-arm64': 0.34.3
- '@img/sharp-linuxmusl-x64': 0.34.3
- '@img/sharp-wasm32': 0.34.3
- '@img/sharp-win32-arm64': 0.34.3
- '@img/sharp-win32-ia32': 0.34.3
- '@img/sharp-win32-x64': 0.34.3
-
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
@@ -20548,25 +20563,49 @@ snapshots:
shelljs@0.8.5:
dependencies:
- glob: 7.2.3
+ glob: 10.5.0
interpret: 1.4.0
rechoir: 0.6.2
+ side-channel-list@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.3
+
+ side-channel-map@1.0.1:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.3
+
+ side-channel-weakmap@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.3
+ side-channel-map: 1.0.1
+
side-channel@1.0.6:
dependencies:
call-bind: 1.0.7
es-errors: 1.3.0
- get-intrinsic: 1.2.4
+ get-intrinsic: 1.3.0
object-inspect: 1.13.3
+ side-channel@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.3
+ side-channel-list: 1.0.0
+ side-channel-map: 1.0.1
+ side-channel-weakmap: 1.0.2
+
signal-exit@3.0.7: {}
signal-exit@4.1.0: {}
- simple-swizzle@0.2.4:
- dependencies:
- is-arrayish: 0.3.4
-
simple-wcswidth@1.1.2: {}
sisteransi@1.0.5: {}
@@ -20578,7 +20617,7 @@ snapshots:
socket.io-adapter@2.5.4:
dependencies:
debug: 4.3.7
- ws: 8.11.0
+ ws: 8.19.0
transitivePeerDependencies:
- bufferutil
- supports-color
@@ -20602,20 +20641,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- socket.io@4.8.0:
- dependencies:
- accepts: 1.3.8
- base64id: 2.0.0
- cors: 2.8.5
- debug: 4.3.7
- engine.io: 6.6.2
- socket.io-adapter: 2.5.4
- socket.io-parser: 4.2.4
- transitivePeerDependencies:
- - bufferutil
- - supports-color
- - utf-8-validate
-
socket.io@4.8.3:
dependencies:
accepts: 1.3.8
@@ -20655,8 +20680,6 @@ snapshots:
source-map@0.7.4: {}
- split.js@1.6.5: {}
-
split2@4.2.0: {}
sprintf-js@1.0.3: {}
@@ -20669,13 +20692,13 @@ snapshots:
statuses@2.0.1: {}
+ stdin-discarder@0.2.2: {}
+
stream-browserify@3.0.0:
dependencies:
inherits: 2.0.4
readable-stream: 3.6.2
- streamsearch@1.1.0: {}
-
strict-event-emitter-types@2.0.0: {}
string-length@4.0.2:
@@ -20695,6 +20718,12 @@ snapshots:
emoji-regex: 9.2.2
strip-ansi: 7.1.0
+ string-width@7.2.0:
+ dependencies:
+ emoji-regex: 10.6.0
+ get-east-asian-width: 1.4.0
+ strip-ansi: 7.1.0
+
string.prototype.matchall@4.0.11:
dependencies:
call-bind: 1.0.7
@@ -20720,19 +20749,19 @@ snapshots:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.23.5
- es-object-atoms: 1.0.0
+ es-object-atoms: 1.1.1
string.prototype.trimend@1.0.8:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
- es-object-atoms: 1.0.0
+ es-object-atoms: 1.1.1
string.prototype.trimstart@1.0.8:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
- es-object-atoms: 1.0.0
+ es-object-atoms: 1.1.1
string_decoder@1.1.1:
dependencies:
@@ -20763,21 +20792,19 @@ snapshots:
stripe@17.5.0:
dependencies:
'@types/node': 22.19.1
- qs: 6.12.0
+ qs: 6.14.2
- strnum@1.0.5: {}
+ strnum@2.1.2: {}
strtok3@10.3.4:
dependencies:
'@tokenizer/token': 0.3.0
- styled-jsx@5.1.1(@babel/core@7.24.5)(babel-plugin-macros@3.1.0)(react@18.3.1):
+ stubborn-fs@2.0.0:
dependencies:
- client-only: 0.0.1
- react: 18.3.1
- optionalDependencies:
- '@babel/core': 7.24.5
- babel-plugin-macros: 3.1.0
+ stubborn-utils: 1.0.2
+
+ stubborn-utils@1.0.2: {}
stylis@4.3.6: {}
@@ -20785,24 +20812,25 @@ snapshots:
dependencies:
postcss: 8.4.49
- superagent@9.0.2:
+ superagent@10.3.0:
dependencies:
component-emitter: 1.3.1
cookiejar: 2.1.4
- debug: 4.3.4
+ debug: 4.4.3
fast-safe-stringify: 2.1.1
- form-data: 4.0.0
- formidable: 3.5.1
+ form-data: 4.0.5
+ formidable: 3.5.4
methods: 1.1.2
mime: 2.6.0
- qs: 6.12.0
+ qs: 6.14.2
transitivePeerDependencies:
- supports-color
- supertest@7.0.0:
+ supertest@7.2.2:
dependencies:
+ cookie-signature: 1.2.2
methods: 1.1.2
- superagent: 9.0.2
+ superagent: 10.3.0
transitivePeerDependencies:
- supports-color
@@ -20824,10 +20852,20 @@ snapshots:
symbol-tree@3.2.4: {}
+ synckit@0.11.12:
+ dependencies:
+ '@pkgr/core': 0.2.9
+
tabbable@6.2.0: {}
+ tagged-tag@1.0.0: {}
+
+ tailwindcss@4.1.18: {}
+
tapable@2.2.1: {}
+ tapable@2.3.0: {}
+
tar-stream@2.2.0:
dependencies:
bl: 4.1.0
@@ -20836,28 +20874,28 @@ snapshots:
inherits: 2.0.4
readable-stream: 3.6.2
- terser-webpack-plugin@5.3.11(@swc/core@1.5.25(@swc/helpers@0.5.5))(webpack@5.98.0(@swc/core@1.5.25(@swc/helpers@0.5.5))):
+ terser-webpack-plugin@5.3.16(@swc/core@1.5.25(@swc/helpers@0.5.5))(webpack@5.104.1(@swc/core@1.5.25(@swc/helpers@0.5.5))):
dependencies:
- '@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/trace-mapping': 0.3.31
jest-worker: 27.5.1
- schema-utils: 4.3.0
+ schema-utils: 4.3.3
serialize-javascript: 6.0.2
terser: 5.39.0
- webpack: 5.98.0(@swc/core@1.5.25(@swc/helpers@0.5.5))
+ webpack: 5.104.1(@swc/core@1.5.25(@swc/helpers@0.5.5))
optionalDependencies:
'@swc/core': 1.5.25(@swc/helpers@0.5.5)
terser@5.39.0:
dependencies:
'@jridgewell/source-map': 0.3.6
- acorn: 8.14.0
+ acorn: 8.15.0
commander: 2.20.3
source-map-support: 0.5.21
test-exclude@6.0.0:
dependencies:
'@istanbuljs/schema': 0.1.3
- glob: 7.2.3
+ glob: 10.5.0
minimatch: 3.1.2
thread-stream@3.0.2:
@@ -20868,11 +20906,6 @@ snapshots:
tinyexec@1.0.1: {}
- tinyglobby@0.2.12:
- dependencies:
- fdir: 6.4.3(picomatch@4.0.2)
- picomatch: 4.0.2
-
tinyglobby@0.2.15:
dependencies:
fdir: 6.5.0(picomatch@4.0.3)
@@ -20888,20 +20921,12 @@ snapshots:
tmp-promise@3.0.3:
dependencies:
- tmp: 0.2.1
+ tmp: 0.2.5
- tmp@0.0.33:
- dependencies:
- os-tmpdir: 1.0.2
-
- tmp@0.2.1:
- dependencies:
- rimraf: 3.0.2
+ tmp@0.2.5: {}
tmpl@1.0.5: {}
- to-fast-properties@2.0.0: {}
-
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
@@ -20946,54 +20971,35 @@ snapshots:
ts-dedent@2.2.0: {}
- ts-jest@29.2.5(@babel/core@7.24.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.5))(jest@29.7.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3)))(typescript@5.7.3):
+ ts-jest@29.4.6(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@30.2.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3)))(typescript@5.7.3):
dependencies:
bs-logger: 0.2.6
- ejs: 3.1.10
fast-json-stable-stringify: 2.1.0
- jest: 29.7.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))
- jest-util: 29.7.0
+ handlebars: 4.7.8
+ jest: 30.2.0(@types/node@22.13.4)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3))
json5: 2.2.3
lodash.memoize: 4.1.2
make-error: 1.3.6
- semver: 7.7.2
+ semver: 7.7.3
+ type-fest: 4.41.0
typescript: 5.7.3
yargs-parser: 21.1.1
optionalDependencies:
- '@babel/core': 7.24.5
- '@jest/transform': 29.7.0
- '@jest/types': 29.6.3
- babel-jest: 29.7.0(@babel/core@7.24.5)
+ '@babel/core': 7.28.5
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ babel-jest: 30.2.0(@babel/core@7.28.5)
+ jest-util: 30.2.0
- ts-loader@9.5.2(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.5.25(@swc/helpers@0.5.5))):
+ ts-loader@9.5.4(typescript@5.7.3)(webpack@5.104.1(@swc/core@1.5.25(@swc/helpers@0.5.5))):
dependencies:
chalk: 4.1.2
- enhanced-resolve: 5.17.1
+ enhanced-resolve: 5.19.0
micromatch: 4.0.8
- semver: 7.7.2
+ semver: 7.7.3
source-map: 0.7.4
typescript: 5.7.3
- webpack: 5.98.0(@swc/core@1.5.25(@swc/helpers@0.5.5))
-
- ts-node@10.9.1(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.19.1)(typescript@5.7.3):
- dependencies:
- '@cspotcode/source-map-support': 0.8.1
- '@tsconfig/node10': 1.0.9
- '@tsconfig/node12': 1.0.11
- '@tsconfig/node14': 1.0.3
- '@tsconfig/node16': 1.0.4
- '@types/node': 22.19.1
- acorn: 8.14.0
- acorn-walk: 8.3.2
- arg: 4.1.3
- create-require: 1.1.1
- diff: 4.0.2
- make-error: 1.3.6
- typescript: 5.7.3
- v8-compile-cache-lib: 3.0.1
- yn: 3.1.1
- optionalDependencies:
- '@swc/core': 1.5.25(@swc/helpers@0.5.5)
+ webpack: 5.104.1(@swc/core@1.5.25(@swc/helpers@0.5.5))
ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.13.4)(typescript@5.7.3):
dependencies:
@@ -21003,11 +21009,11 @@ snapshots:
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 22.13.4
- acorn: 8.11.3
+ acorn: 8.15.0
acorn-walk: 8.3.2
arg: 4.1.3
create-require: 1.1.1
- diff: 4.0.2
+ diff: 4.0.4
make-error: 1.3.6
typescript: 5.7.3
v8-compile-cache-lib: 3.0.1
@@ -21030,8 +21036,6 @@ snapshots:
tseep@1.3.1: {}
- tslib@2.8.0: {}
-
tslib@2.8.1: {}
tsx@4.19.3:
@@ -21061,6 +21065,10 @@ snapshots:
type-fest@4.41.0: {}
+ type-fest@5.4.4:
+ dependencies:
+ tagged-tag: 1.0.0
+
typed-array-buffer@1.0.2:
dependencies:
call-bind: 1.0.7
@@ -21094,23 +21102,23 @@ snapshots:
possible-typed-array-names: 1.0.0
reflect.getprototypeof: 1.0.7
- typescript-eslint@8.17.0(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2):
+ typescript-eslint@8.17.0(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2))(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2)
- '@typescript-eslint/parser': 8.17.0(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2)
- '@typescript-eslint/utils': 8.17.0(eslint@9.15.0(jiti@1.21.0))(typescript@5.7.2)
- eslint: 9.15.0(jiti@1.21.0)
+ '@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2))(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2)
+ '@typescript-eslint/parser': 8.17.0(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.17.0(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.2)
+ eslint: 9.39.2(jiti@2.4.2)
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
- typescript-eslint@8.24.1(eslint@9.20.1(jiti@1.21.0))(typescript@5.7.3):
+ typescript-eslint@8.24.1(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.3):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.20.1(jiti@1.21.0))(typescript@5.7.3))(eslint@9.20.1(jiti@1.21.0))(typescript@5.7.3)
- '@typescript-eslint/parser': 8.24.1(eslint@9.20.1(jiti@1.21.0))(typescript@5.7.3)
- '@typescript-eslint/utils': 8.24.1(eslint@9.20.1(jiti@1.21.0))(typescript@5.7.3)
- eslint: 9.20.1(jiti@1.21.0)
+ '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.3))(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.3)
+ '@typescript-eslint/parser': 8.24.1(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.3)
+ '@typescript-eslint/utils': 8.24.1(eslint@9.39.2(jiti@2.4.2))(typescript@5.7.3)
+ eslint: 9.39.2(jiti@2.4.2)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
@@ -21119,10 +21127,12 @@ snapshots:
typescript@5.7.3: {}
- typesense@2.1.0(@babel/runtime@7.25.6):
+ typescript@5.9.3: {}
+
+ typesense@2.1.0(@babel/runtime@7.26.10):
dependencies:
- '@babel/runtime': 7.25.6
- axios: 1.13.2
+ '@babel/runtime': 7.26.10
+ axios: 1.13.5
loglevel: 1.9.1
tslib: 2.8.1
transitivePeerDependencies:
@@ -21132,6 +21142,9 @@ snapshots:
ufo@1.6.1: {}
+ uglify-js@3.19.3:
+ optional: true
+
uid2@0.0.4: {}
uid2@1.0.0: {}
@@ -21142,11 +21155,13 @@ snapshots:
uint8array-extras@1.4.0: {}
+ uint8array-extras@1.5.0: {}
+
unbox-primitive@1.0.2:
dependencies:
call-bind: 1.0.7
has-bigints: 1.0.2
- has-symbols: 1.0.3
+ has-symbols: 1.1.0
which-boxed-primitive: 1.1.0
underscore@1.13.7: {}
@@ -21168,18 +21183,44 @@ snapshots:
unicode-property-aliases-ecmascript@2.1.0: {}
- unist-util-stringify-position@3.0.3:
- dependencies:
- '@types/unist': 2.0.11
-
universalify@2.0.1: {}
+ unrs-resolver@1.11.1:
+ dependencies:
+ napi-postinstall: 0.3.4
+ optionalDependencies:
+ '@unrs/resolver-binding-android-arm-eabi': 1.11.1
+ '@unrs/resolver-binding-android-arm64': 1.11.1
+ '@unrs/resolver-binding-darwin-arm64': 1.11.1
+ '@unrs/resolver-binding-darwin-x64': 1.11.1
+ '@unrs/resolver-binding-freebsd-x64': 1.11.1
+ '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1
+ '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1
+ '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-arm64-musl': 1.11.1
+ '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1
+ '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-x64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-x64-musl': 1.11.1
+ '@unrs/resolver-binding-wasm32-wasi': 1.11.1
+ '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1
+ '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1
+ '@unrs/resolver-binding-win32-x64-msvc': 1.11.1
+
update-browserslist-db@1.1.1(browserslist@4.24.2):
dependencies:
browserslist: 4.24.2
escalade: 3.2.0
picocolors: 1.1.1
+ update-browserslist-db@1.2.3(browserslist@4.28.1):
+ dependencies:
+ browserslist: 4.28.1
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
uri-js@4.4.1:
dependencies:
punycode: 2.3.1
@@ -21234,32 +21275,19 @@ snapshots:
uuid@11.1.0: {}
- uuid@9.0.1: {}
-
- uvu@0.5.6:
- dependencies:
- dequal: 2.0.3
- diff: 5.2.0
- kleur: 4.1.5
- sade: 1.8.1
-
v8-compile-cache-lib@3.0.1: {}
v8-to-istanbul@9.2.0:
dependencies:
- '@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/trace-mapping': 0.3.31
'@types/istanbul-lib-coverage': 2.0.6
convert-source-map: 2.0.0
- validate-npm-package-name@5.0.0:
- dependencies:
- builtins: 5.0.1
-
validator@13.15.23: {}
vary@1.1.2: {}
- vite@7.2.4(@types/node@22.19.1)(jiti@1.21.0)(less@4.2.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0):
+ vite@7.2.4(@types/node@22.19.1)(jiti@2.4.2)(less@4.2.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0):
dependencies:
esbuild: 0.25.0
fdir: 6.5.0(picomatch@4.0.3)
@@ -21270,7 +21298,7 @@ snapshots:
optionalDependencies:
'@types/node': 22.19.1
fsevents: 2.3.3
- jiti: 1.21.0
+ jiti: 2.4.2
less: 4.2.0
terser: 5.39.0
tsx: 4.19.3
@@ -21305,7 +21333,7 @@ snapshots:
dependencies:
makeerror: 1.0.12
- watchpack@2.4.1:
+ watchpack@2.5.1:
dependencies:
glob-to-regexp: 0.4.1
graceful-fs: 4.2.11
@@ -21314,9 +21342,7 @@ snapshots:
dependencies:
defaults: 1.0.4
- web-vitals@4.2.4: {}
-
- web-worker@1.5.0: {}
+ web-vitals@5.1.0: {}
webidl-conversions@3.0.1: {}
@@ -21324,33 +21350,35 @@ snapshots:
webpack-node-externals@3.0.0: {}
- webpack-sources@3.2.3: {}
+ webpack-sources@3.3.3: {}
- webpack@5.98.0(@swc/core@1.5.25(@swc/helpers@0.5.5)):
+ webpack@5.104.1(@swc/core@1.5.25(@swc/helpers@0.5.5)):
dependencies:
'@types/eslint-scope': 3.7.7
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
+ '@types/json-schema': 7.0.15
'@webassemblyjs/ast': 1.14.1
'@webassemblyjs/wasm-edit': 1.14.1
'@webassemblyjs/wasm-parser': 1.14.1
- acorn: 8.14.0
- browserslist: 4.24.2
+ acorn: 8.15.0
+ acorn-import-phases: 1.0.4(acorn@8.15.0)
+ browserslist: 4.28.1
chrome-trace-event: 1.0.3
- enhanced-resolve: 5.17.1
- es-module-lexer: 1.4.2
+ enhanced-resolve: 5.19.0
+ es-module-lexer: 2.0.0
eslint-scope: 5.1.1
events: 3.3.0
glob-to-regexp: 0.4.1
graceful-fs: 4.2.11
json-parse-even-better-errors: 2.3.1
- loader-runner: 4.3.0
+ loader-runner: 4.3.1
mime-types: 2.1.35
neo-async: 2.6.2
- schema-utils: 4.3.0
- tapable: 2.2.1
- terser-webpack-plugin: 5.3.11(@swc/core@1.5.25(@swc/helpers@0.5.5))(webpack@5.98.0(@swc/core@1.5.25(@swc/helpers@0.5.5)))
- watchpack: 2.4.1
- webpack-sources: 3.2.3
+ schema-utils: 4.3.3
+ tapable: 2.3.0
+ terser-webpack-plugin: 5.3.16(@swc/core@1.5.25(@swc/helpers@0.5.5))(webpack@5.104.1(@swc/core@1.5.25(@swc/helpers@0.5.5)))
+ watchpack: 2.5.1
+ webpack-sources: 3.3.3
transitivePeerDependencies:
- '@swc/core'
- esbuild
@@ -21383,6 +21411,8 @@ snapshots:
tr46: 0.0.3
webidl-conversions: 3.0.1
+ when-exit@2.1.5: {}
+
which-boxed-primitive@1.1.0:
dependencies:
is-bigint: 1.1.0
@@ -21432,6 +21462,8 @@ snapshots:
dependencies:
string-width: 4.2.3
+ wordwrap@1.0.0: {}
+
wrap-ansi@6.2.0:
dependencies:
ansi-styles: 4.3.0
@@ -21452,14 +21484,10 @@ snapshots:
wrappy@1.0.2: {}
- write-file-atomic@4.0.2:
+ write-file-atomic@5.0.1:
dependencies:
imurmurhash: 0.1.4
- signal-exit: 3.0.7
-
- ws@8.11.0: {}
-
- ws@8.17.1: {}
+ signal-exit: 4.1.0
ws@8.19.0: {}
@@ -21580,13 +21608,17 @@ snapshots:
yoctocolors-cjs@2.1.2: {}
+ yoctocolors-cjs@2.1.3: {}
+
+ yoctocolors@2.1.2: {}
+
zod@3.25.76: {}
- zod@4.3.5: {}
+ zod@4.3.6: {}
zustand@4.5.6(@types/react@18.3.12)(react@18.3.1):
dependencies:
- use-sync-external-store: 1.2.2(react@18.3.1)
+ use-sync-external-store: 1.6.0(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.12
react: 18.3.1