diff --git a/apps/app/languine.lock b/apps/app/languine.lock
index 688b365ad8..451153e8a0 100644
--- a/apps/app/languine.lock
+++ b/apps/app/languine.lock
@@ -454,6 +454,19 @@ files:
vendor.empty_states.no_results.description: d7fd5c52726c5016a59fb01e74069441
vendor.empty_states.no_results.description_with_filters: 2b70f835ed5a08e817ec9388ce25b41a
errors.unexpected: 325a357f60b95f37fec18b15cb39fbb0
+ editor.ai.thinking: aba464039b337eb2e75c2520039de58f
+ editor.ai.thinking_spinner: aba464039b337eb2e75c2520039de58f
+ editor.ai.edit_or_generate: 7d46fd8c65c35acb13973849b035cc53
+ editor.ai.tell_ai_what_to_do_next: 44de6614358c04f76015a3c9646b3f8f
+ editor.ai.request_limit_reached: 73b31a4d9ba135f8ef97768899c18836
+ editor.ai_selector.improve: 92769395d4986d32c599e0eff5824cb3
+ editor.ai_selector.fix: a71ef487bc9bac7c65fd3ff8a7b4fe0d
+ editor.ai_selector.shorter: 73c9649c6a97008d3ae6880e8350b334
+ editor.ai_selector.longer: e0737d9beb7fa3a5541f275b76139d86
+ editor.ai_selector.continue: 29f3b5417ce466da5ac5720ce6e28d4f
+ editor.ai_selector.replace: 05fdc089c4c320832588a69475ff5e79
+ editor.ai_selector.insert: 3005820694a4944d91c4c4e8b8a016d3
+ editor.ai_selector.discard: d94b42030b9785fd754d5c1754961269
src/locales/es.ts:
language.title: c88b33a3250b4e28f34e1ececba69206
language.description: b74d060770289b75ba34d38ea1e05251
diff --git a/apps/app/package.json b/apps/app/package.json
index 8f350a730d..560dc976ae 100644
--- a/apps/app/package.json
+++ b/apps/app/package.json
@@ -14,32 +14,13 @@
"@bubba/notifications": "workspace:*",
"@date-fns/tz": "^1.2.0",
"@hookform/resolvers": "^3.10.0",
- "@liveblocks/client": "^2.18.1",
- "@liveblocks/node": "^2.18.1",
- "@liveblocks/react": "^2.18.1",
- "@liveblocks/react-tiptap": "^2.18.1",
- "@liveblocks/react-ui": "^2.18.1",
- "@nangohq/frontend": "^0.48.4",
- "@nangohq/node": "^0.48.4",
"@novu/headless": "^2.6.5",
"@novu/react": "^2.6.5",
"@prisma/instrumentation": "^6.3.1",
"@tanstack/react-query": "^5.66.0",
"@tanstack/react-table": "^8.21.2",
- "@tiptap/extension-bullet-list": "^2.11.5",
- "@tiptap/extension-heading": "^2.11.5",
- "@tiptap/extension-list-item": "^2.11.5",
- "@tiptap/extension-ordered-list": "^2.11.5",
- "@tiptap/extension-table": "^2.11.5",
- "@tiptap/extension-table-cell": "^2.11.5",
- "@tiptap/extension-table-header": "^2.11.5",
- "@tiptap/extension-table-row": "^2.11.5",
- "@tiptap/html": "^2.11.5",
- "@tiptap/react": "^2.11.5",
- "@tiptap/starter-kit": "^2.11.5",
"@trigger.dev/react-hooks": "3.3.13",
"@trigger.dev/sdk": "3.3.13",
- "@types/xml2js": "^0.4.14",
"@uploadthing/react": "^7.2.0",
"@upstash/ratelimit": "^2.0.5",
"argon2": "^0.41.1",
@@ -58,7 +39,6 @@
"next-intl": "^3.26.3",
"next-safe-action": "^7.10.3",
"next-themes": "^0.4.4",
- "novel": "^1.0.2",
"novu": "^2.6.5",
"nuqs": "^2.3.2",
"playwright-core": "^1.50.1",
@@ -78,8 +58,6 @@
"resend": "^4.1.2",
"sonner": "^1.7.4",
"stripe": "^17.6.0",
- "tiptap-extension-global-drag-handle": "^0.1.18",
- "tiptap-markdown": "^0.8.10",
"ts-pattern": "^5.6.2",
"uploadthing": "^7.5.0",
"use-debounce": "^10.0.4",
diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/policies/[id]/layout.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/policies/[id]/layout.tsx
index 756f4e5049..13e511a661 100644
--- a/apps/app/src/app/[locale]/(app)/(dashboard)/policies/[id]/layout.tsx
+++ b/apps/app/src/app/[locale]/(app)/(dashboard)/policies/[id]/layout.tsx
@@ -1,11 +1,5 @@
import { auth } from "@/auth";
import { redirect } from "next/navigation";
-import "@liveblocks/react-ui/styles.css";
-import "@liveblocks/react-tiptap/styles.css";
-import "@bubba/ui/globals.css";
-import "@bubba/ui/text-editor";
-import "@bubba/ui/prosemirror";
-import { Providers } from "./providers";
export default async function Layout({
children,
@@ -27,9 +21,7 @@ export default async function Layout({
return (
-
- {children}
-
+
{children}
);
}
diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/policies/[id]/page.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/policies/[id]/page.tsx
index 7bf99bf417..6db6485731 100644
--- a/apps/app/src/app/[locale]/(app)/(dashboard)/policies/[id]/page.tsx
+++ b/apps/app/src/app/[locale]/(app)/(dashboard)/policies/[id]/page.tsx
@@ -1,11 +1,7 @@
"use client";
-import AdvancedEditor from "@/components/editor/advanced-editor";
-import { DocumentSpinner } from "@/components/editor/spinner";
-import { PolicyOverview } from "@/components/policies/policy-overview";
import { Button } from "@bubba/ui/button";
import { Separator } from "@bubba/ui/separator";
-import { ClientSideSuspense } from "@liveblocks/react";
import { useAction } from "next-safe-action/hooks";
import { useParams } from "next/navigation";
import type { JSONContent } from "novel";
@@ -48,9 +44,7 @@ export default function PolicyPage() {
diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/policies/[id]/providers.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/policies/[id]/providers.tsx
deleted file mode 100644
index d5f6a26598..0000000000
--- a/apps/app/src/app/[locale]/(app)/(dashboard)/policies/[id]/providers.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-"use client";
-
-import { LiveblocksProvider, RoomProvider } from "@liveblocks/react";
-import { useSession } from "next-auth/react";
-import { redirect } from "next/navigation";
-import type { JSONContent } from "novel";
-import type { PropsWithChildren } from "react";
-import { usePolicy } from "../hooks/usePolicy";
-
-interface ProvidersProps extends PropsWithChildren {
- policyId: string;
-}
-
-export function Providers({ children, policyId }: ProvidersProps) {
- const { data: session } = useSession();
- const { data: policy } = usePolicy({ policyId });
-
- if (!policyId || !session?.user?.organizationId) {
- redirect("/policies");
- }
-
- const content = policy?.content as JSONContent;
- const roomId = `liveblocks:policies:${session.user.organizationId}:${policyId}`;
-
- return (
- {
- const searchParams = new URLSearchParams(
- userIds.map((userId) => ["userIds", userId]),
- );
- const response = await fetch(`/api/liveblocks/users?${searchParams}`);
-
- if (!response.ok) {
- throw new Error("Problem resolving users");
- }
-
- const users = await response.json();
- return users;
- }}
- resolveMentionSuggestions={async ({ text }) => {
- const response = await fetch(
- `/api/liveblocks/users/search?text=${encodeURIComponent(text)}`,
- );
-
- if (!response.ok) {
- throw new Error("Problem resolving mention suggestions");
- }
-
- const userIds = await response.json();
- return userIds;
- }}
- >
-
- {children}
-
-
- );
-}
diff --git a/apps/app/src/app/api/liveblocks/route.ts b/apps/app/src/app/api/liveblocks/route.ts
deleted file mode 100644
index 3efc0cd89f..0000000000
--- a/apps/app/src/app/api/liveblocks/route.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { auth } from "@/auth";
-import { Liveblocks } from "@liveblocks/node";
-import type { NextRequest } from "next/server";
-
-const liveblocks = new Liveblocks({
- secret: process.env.LIVEBLOCKS_SECRET_KEY!,
-});
-
-export async function POST(request: NextRequest) {
- const user = await auth();
-
- if (!user) {
- return new Response("Unauthorized", { status: 401 });
- }
-
- const organizationId = user.user?.organizationId;
-
- if (!organizationId) {
- return new Response("Unauthorized", { status: 401 });
- }
-
- const session = liveblocks.prepareSession(`${user.user?.id}`, {
- userInfo: {
- name: user.user?.full_name ?? "",
- color: "#000000",
- image: user.user?.avatar_url ?? "",
- },
- });
-
- session.allow(`liveblocks:policies:${organizationId}:*`, session.FULL_ACCESS);
-
- const { body, status } = await session.authorize();
- return new Response(body, { status });
-}
diff --git a/apps/app/src/app/api/liveblocks/users/route.ts b/apps/app/src/app/api/liveblocks/users/route.ts
deleted file mode 100644
index 7c74e33c8f..0000000000
--- a/apps/app/src/app/api/liveblocks/users/route.ts
+++ /dev/null
@@ -1,84 +0,0 @@
-import { rateLimit } from "@/lib/rate-limit";
-import { db } from "@bubba/db";
-import { unstable_cache } from "next/cache";
-import { type NextRequest, NextResponse } from "next/server";
-import { z } from "zod";
-
-interface UserResponse {
- id: string;
- name: string | null;
- email: string | null;
- image: string | null;
-}
-
-const querySchema = z.object({
- userIds: z.array(z.string().min(1)).min(1).max(100),
-});
-
-export async function GET(request: NextRequest) {
- try {
- const limiter = await rateLimit(request);
-
- if (!limiter.success) {
- return new NextResponse("Too Many Requests", { status: 429 });
- }
-
- const { searchParams } = new URL(request.url);
-
- const userIds = searchParams.getAll("userIds");
- const result = querySchema.safeParse({ userIds });
-
- if (!result.success) {
- return NextResponse.json(
- { error: "Invalid userIds parameter", details: result.error.format() },
- { status: 400 }
- );
- }
-
- const users = await Promise.all(
- result.data.userIds.map((id) => getUserWithCache(id))
- );
-
- const validUsers = users.filter((user): user is UserResponse => user !== null);
-
- if (validUsers.length === 0) {
- return NextResponse.json(
- { error: "No valid users found" },
- { status: 404 }
- );
- }
-
- return NextResponse.json(validUsers, {
- status: 200,
- headers: {
- 'Cache-Control': 'public, s-maxage=60, stale-while-revalidate=30'
- }
- });
- } catch (error) {
- console.error("[LIVEBLOCKS_USERS]", error);
- return NextResponse.json(
- { error: "Internal Server Error" },
- { status: 500 }
- );
- }
-}
-
-const getUserWithCache = unstable_cache(
- async (id: string): Promise => {
- const user = await db.user.findUnique({
- where: { id },
- select: {
- id: true,
- name: true,
- email: true,
- image: true,
- },
- });
- return user;
- },
- ["user-data"],
- {
- revalidate: 300,
- tags: ["user-data"],
- }
-);
diff --git a/apps/app/src/app/api/liveblocks/users/search/route.ts b/apps/app/src/app/api/liveblocks/users/search/route.ts
deleted file mode 100644
index edd9d0f77b..0000000000
--- a/apps/app/src/app/api/liveblocks/users/search/route.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-import { auth } from "@/auth";
-import { rateLimit } from "@/lib/rate-limit";
-import { db } from "@bubba/db";
-import { unstable_cache } from "next/cache";
-import { type NextRequest, NextResponse } from "next/server";
-
-export async function GET(request: NextRequest) {
- try {
- const limiter = await rateLimit(request);
- const session = await auth();
-
- if (!limiter.success) {
- return new NextResponse("Too Many Requests", { status: 429 });
- }
-
- const { searchParams } = new URL(request.url);
- const text = searchParams.get("text");
-
- if (!session) {
- return new NextResponse("Unauthorized", { status: 401 });
- }
-
- const organizationId = session.user?.organizationId;
-
- if (!organizationId) {
- return new NextResponse("Unauthorized", { status: 401 });
- }
-
- const filteredUserIds = (await getUsers(organizationId))
- .filter((user: any) => {
- return user.name?.toLowerCase().includes(text?.toLowerCase() ?? "");
- })
- .map((user: any) => user.id);
-
- return NextResponse.json(filteredUserIds, {
- status: 200,
- headers: {
- 'Cache-Control': 'public, s-maxage=60, stale-while-revalidate=30'
- }
- });
- } catch (error) {
- console.error("[LIVEBLOCKS_USERS_SEARCH]", error);
- return NextResponse.json(
- { error: "Internal Server Error" },
- { status: 500 }
- );
- }
-}
-
-const getUsers = unstable_cache(
- async (organizationId: string) => {
- const users = await db.organizationMember.findMany({
- where: {
- organizationId: organizationId,
- },
- select: {
- user: {
- select: {
- id: true,
- name: true,
- image: true,
- }
- }
- }
- })
-
- return users;
- },
- ["users-list"],
- {
- revalidate: 300,
- tags: ["users-list"],
- }
-);
diff --git a/apps/app/src/components/editor/advanced-editor.tsx b/apps/app/src/components/editor/advanced-editor.tsx
deleted file mode 100644
index 7c9973764b..0000000000
--- a/apps/app/src/components/editor/advanced-editor.tsx
+++ /dev/null
@@ -1,139 +0,0 @@
-"use client";
-
-import { Separator } from "@bubba/ui/separator";
-import { useLiveblocksExtension } from "@liveblocks/react-tiptap";
-import { useSyncStatus } from "@liveblocks/react/suspense";
-import type { Extensions, JSONContent } from "@tiptap/react";
-import {
- EditorCommand,
- EditorCommandEmpty,
- EditorCommandItem,
- EditorCommandList,
- EditorContent,
- EditorRoot,
-} from "novel";
-import { ImageResizer, handleCommandNavigation } from "novel";
-import { handleImageDrop, handleImagePaste } from "novel";
-import { useState } from "react";
-import { defaultExtensions } from "./extensions";
-import GenerativeMenuSwitch from "./generative/generative-menu-switch";
-import { uploadFn } from "./image-upload";
-import { AddCommentSelector } from "./selectors/add-comment-selector";
-import { ColorSelector } from "./selectors/color-selector";
-import { LinkSelector } from "./selectors/link-selector";
-import { MathSelector } from "./selectors/math-selector";
-import { NodeSelector } from "./selectors/node-selector";
-import { TextButtons } from "./selectors/text-buttons";
-import { slashCommand, suggestionItems } from "./slash-command";
-import { Threads } from "./threads";
-
-export default function AdvancedEditor() {
- const liveblocks = useLiveblocksExtension({
- offlineSupport_experimental: true,
- });
-
- const extensions: Extensions = [
- ...defaultExtensions,
- slashCommand,
- liveblocks,
- ] as Extensions;
- const [charsCount, setCharsCount] = useState();
-
- const [openNode, setOpenNode] = useState(false);
- const [openColor, setOpenColor] = useState(false);
- const [openLink, setOpenLink] = useState(false);
- const [openAI, setOpenAI] = useState(false);
-
- const syncStatus = useSyncStatus({ smooth: true });
-
- return (
-
-
-
- {syncStatus === "synchronizing" ? "Unsaved" : "Saved"}
-
-
- {charsCount} Words
-
-
-
- handleCommandNavigation(event),
- },
- handlePaste: (view, event) =>
- handleImagePaste(view, event, uploadFn),
- handleDrop: (view, event, _slice, moved) =>
- handleImageDrop(view, event, moved, uploadFn),
- attributes: {
- class:
- "prose dark:prose-invert prose-headings:font-title font-default focus:outline-none max-w-full",
- },
- }}
- onUpdate={({ editor }) =>
- setCharsCount(editor.storage.characterCount.words())
- }
- slotAfter={}
- immediatelyRender={false}
- >
-
-
-
- No results
-
-
- {suggestionItems.map((item: any) => (
- {
- if (!item?.command) {
- return;
- }
-
- item.command(val);
- }}
- className="flex w-full items-center space-x-2 rounded-md px-2 py-1 text-left text-sm hover:bg-accent aria-selected:bg-accent"
- key={item.title}
- >
-
- {item.icon}
-
-
-
{item.title}
-
- {item.description}
-
-
-
- ))}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/apps/app/src/components/editor/avatars.tsx b/apps/app/src/components/editor/avatars.tsx
deleted file mode 100644
index 9afb62b44c..0000000000
--- a/apps/app/src/components/editor/avatars.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-"use client";
-
-import { useOthers, useSelf } from "@liveblocks/react/suspense";
-
-export function Avatars() {
- const users = useOthers();
- const currentUser = useSelf();
-
- return (
-
- {users.map(({ connectionId, info }) => {
- return (
-
- );
- })}
-
- {currentUser && (
-
- )}
-
- );
-}
-
-export function Avatar({ picture, name }: { picture: string; name: string }) {
- return (
-
-

-
- );
-}
diff --git a/apps/app/src/components/editor/default-content.ts b/apps/app/src/components/editor/default-content.ts
deleted file mode 100644
index 3ed5da6171..0000000000
--- a/apps/app/src/components/editor/default-content.ts
+++ /dev/null
@@ -1,356 +0,0 @@
-export const defaultEditorContent = {
- type: "doc",
- content: [
- {
- type: "heading",
- attrs: { level: 2 },
- content: [{ type: "text", text: "Introducing Novel" }],
- },
- {
- type: "paragraph",
- content: [
- {
- type: "text",
- marks: [
- {
- type: "link",
- attrs: {
- href: "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/steven-tey/novel",
- target: "_blank",
- },
- },
- ],
- text: "Novel",
- },
- {
- type: "text",
- text: " is a Notion-style WYSIWYG editor with AI-powered autocompletion. Built with ",
- },
- {
- type: "text",
- marks: [
- {
- type: "link",
- attrs: {
- href: "https://tiptap.dev/",
- target: "_blank",
- },
- },
- ],
- text: "Tiptap",
- },
- { type: "text", text: " + " },
- {
- type: "text",
- marks: [
- {
- type: "link",
- attrs: {
- href: "https://sdk.vercel.ai/docs",
- target: "_blank",
- },
- },
- ],
- text: "Vercel AI SDK",
- },
- { type: "text", text: "." },
- ],
- },
- {
- type: "heading",
- attrs: { level: 3 },
- content: [{ type: "text", text: "Installation" }],
- },
- {
- type: "codeBlock",
- attrs: { language: null },
- content: [{ type: "text", text: "npm i novel" }],
- },
- {
- type: "heading",
- attrs: { level: 3 },
- content: [{ type: "text", text: "Usage" }],
- },
- {
- type: "codeBlock",
- attrs: { language: null },
- content: [
- {
- type: "text",
- text: 'import { Editor } from "novel";\n\nexport default function App() {\n return (\n \n )\n}',
- },
- ],
- },
- {
- type: "heading",
- attrs: { level: 3 },
- content: [{ type: "text", text: "Features" }],
- },
- {
- type: "orderedList",
- attrs: { tight: true, start: 1 },
- content: [
- {
- type: "listItem",
- content: [
- {
- type: "paragraph",
- content: [{ type: "text", text: "Slash menu & bubble menu" }],
- },
- ],
- },
- {
- type: "listItem",
- content: [
- {
- type: "paragraph",
- content: [
- { type: "text", text: "AI autocomplete (type " },
- { type: "text", marks: [{ type: "code" }], text: "++" },
- {
- type: "text",
- text: " to activate, or select from slash menu)",
- },
- ],
- },
- ],
- },
- {
- type: "listItem",
- content: [
- {
- type: "paragraph",
- content: [
- {
- type: "text",
- text: "Image uploads (drag & drop / copy & paste, or select from slash menu) ",
- },
- ],
- },
- ],
- },
- {
- type: "listItem",
- content: [
- {
- type: "paragraph",
- content: [
- {
- type: "text",
- text: "Add tweets from the command slash menu:",
- },
- ],
- },
- {
- type: "twitter",
- attrs: {
- src: "https://x.com/elonmusk/status/1800759252224729577",
- },
- },
- ],
- },
- {
- type: "listItem",
- content: [
- {
- type: "paragraph",
- content: [
- {
- type: "text",
- text: "Mathematical symbols with LaTeX expression:",
- },
- ],
- },
- {
- type: "orderedList",
- attrs: {
- tight: true,
- start: 1,
- },
- content: [
- {
- type: "listItem",
- content: [
- {
- type: "paragraph",
- content: [
- {
- type: "math",
- attrs: {
- latex: "E = mc^2",
- },
- },
- ],
- },
- ],
- },
- {
- type: "listItem",
- content: [
- {
- type: "paragraph",
- content: [
- {
- type: "math",
- attrs: {
- latex: "a^2 = \\sqrt{b^2 + c^2}",
- },
- },
- ],
- },
- ],
- },
- {
- type: "listItem",
- content: [
- {
- type: "paragraph",
- content: [
- {
- type: "math",
- attrs: {
- latex:
- "\\hat{f} (\\xi)=\\int_{-\\infty}^{\\infty}f(x)e^{-2\\pi ix\\xi}dx",
- },
- },
- ],
- },
- ],
- },
- {
- type: "listItem",
- content: [
- {
- type: "paragraph",
- content: [
- {
- type: "math",
- attrs: {
- latex:
- "A=\\begin{bmatrix}a&b\\\\c&d \\end{bmatrix}",
- },
- },
- ],
- },
- ],
- },
- {
- type: "listItem",
- content: [
- {
- type: "paragraph",
- content: [
- {
- type: "math",
- attrs: {
- latex: "\\sum_{i=0}^n x_i",
- },
- },
- ],
- },
- ],
- },
- ],
- },
- ],
- },
- ],
- },
- {
- type: "image",
- attrs: {
- src: "https://public.blob.vercel-storage.com/pJrjXbdONOnAeZAZ/banner-2wQk82qTwyVgvlhTW21GIkWgqPGD2C.png",
- alt: "banner.png",
- title: "banner.png",
- width: null,
- height: null,
- },
- },
- { type: "horizontalRule" },
- {
- type: "heading",
- attrs: { level: 3 },
- content: [{ type: "text", text: "Learn more" }],
- },
- {
- type: "taskList",
- content: [
- {
- type: "taskItem",
- attrs: { checked: false },
- content: [
- {
- type: "paragraph",
- content: [
- { type: "text", text: "Star us on " },
- {
- type: "text",
- marks: [
- {
- type: "link",
- attrs: {
- href: "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/steven-tey/novel",
- target: "_blank",
- },
- },
- ],
- text: "GitHub",
- },
- ],
- },
- ],
- },
- {
- type: "taskItem",
- attrs: { checked: false },
- content: [
- {
- type: "paragraph",
- content: [
- { type: "text", text: "Install the " },
- {
- type: "text",
- marks: [
- {
- type: "link",
- attrs: {
- href: "https://www.npmjs.com/package/novel",
- target: "_blank",
- },
- },
- ],
- text: "NPM package",
- },
- ],
- },
- ],
- },
- {
- type: "taskItem",
- attrs: { checked: false },
- content: [
- {
- type: "paragraph",
- content: [
- {
- type: "text",
- marks: [
- {
- type: "link",
- attrs: {
- href: "https://vercel.com/templates/next.js/novel",
- target: "_blank",
- },
- },
- ],
- text: "Deploy your own",
- },
- { type: "text", text: " to Vercel" },
- ],
- },
- ],
- },
- ],
- },
- ],
-};
diff --git a/apps/app/src/components/editor/extensions.ts b/apps/app/src/components/editor/extensions.ts
deleted file mode 100644
index d17230c16c..0000000000
--- a/apps/app/src/components/editor/extensions.ts
+++ /dev/null
@@ -1,140 +0,0 @@
-import {
- AIHighlight,
- CharacterCount,
- CodeBlockLowlight,
- Color,
- CustomKeymap,
- GlobalDragHandle,
- HighlightExtension,
- HorizontalRule,
- Mathematics,
- Placeholder,
- StarterKit,
- TaskItem,
- TaskList,
- TextStyle,
- TiptapLink,
- TiptapUnderline,
- Twitter,
- Youtube,
-} from "novel";
-
-import { cx } from "class-variance-authority";
-import { common, createLowlight } from "lowlight";
-
-const aiHighlight = AIHighlight;
-const placeholder = Placeholder;
-const tiptapLink = TiptapLink.configure({
- HTMLAttributes: {
- class: cx(
- "text-muted-foreground underline underline-offset-[3px] hover:text-primary transition-colors cursor-pointer"
- ),
- },
-});
-
-const taskList = TaskList.configure({
- HTMLAttributes: {
- class: cx("not-prose pl-2"),
- },
-});
-const taskItem = TaskItem.configure({
- HTMLAttributes: {
- class: cx("flex gap-2 items-start my-4"),
- },
- nested: true,
-});
-
-const horizontalRule = HorizontalRule.configure({
- HTMLAttributes: {
- class: cx("mt-4 mb-6 border-t border-muted-foreground"),
- },
-});
-
-const starterKit = StarterKit.configure({
- // The Liveblocks extension comes with its own history handling
- history: false,
-
- bulletList: {
- HTMLAttributes: {
- class: cx("list-disc list-outside leading-3 -mt-2"),
- },
- },
- orderedList: {
- HTMLAttributes: {
- class: cx("list-decimal list-outside leading-3 -mt-2"),
- },
- },
- listItem: {
- HTMLAttributes: {
- class: cx("leading-normal -mb-2"),
- },
- },
- blockquote: {
- HTMLAttributes: {
- class: cx("border-l-4 border-primary"),
- },
- },
- codeBlock: false,
- code: {
- HTMLAttributes: {
- class: cx("rounded-md bg-muted px-1.5 py-1 font-mono font-medium"),
- spellcheck: "false",
- },
- },
- horizontalRule: false,
- dropcursor: {
- color: "#DBEAFE",
- width: 4,
- },
- gapcursor: false,
-});
-
-const codeBlockLowlight = CodeBlockLowlight.configure({
- lowlight: createLowlight(common),
-});
-
-const youtube = Youtube.configure({
- HTMLAttributes: {
- class: cx("rounded-lg border border-muted"),
- },
- inline: false,
-});
-
-const twitter = Twitter.configure({
- HTMLAttributes: {
- class: cx("not-prose"),
- },
- inline: false,
-});
-
-const mathematics = Mathematics.configure({
- HTMLAttributes: {
- class: cx("text-foreground rounded p-1 hover:bg-accent cursor-pointer"),
- },
- katexOptions: {
- throwOnError: false,
- },
-});
-
-const characterCount = CharacterCount.configure();
-
-export const defaultExtensions = [
- starterKit,
- placeholder,
- tiptapLink,
- taskList,
- taskItem,
- horizontalRule,
- aiHighlight,
- codeBlockLowlight,
- youtube,
- twitter,
- mathematics,
- characterCount,
- TiptapUnderline,
- HighlightExtension,
- TextStyle,
- Color,
- CustomKeymap,
- GlobalDragHandle,
-];
\ No newline at end of file
diff --git a/apps/app/src/components/editor/generative/ai-completion-command.tsx b/apps/app/src/components/editor/generative/ai-completion-command.tsx
deleted file mode 100644
index 254e6ed12f..0000000000
--- a/apps/app/src/components/editor/generative/ai-completion-command.tsx
+++ /dev/null
@@ -1,74 +0,0 @@
-import { CommandGroup, CommandItem, CommandSeparator } from "@bubba/ui/command";
-import { Check, TextQuote, TrashIcon } from "lucide-react";
-import { useEditor } from "novel";
-
-const AICompletionCommands = ({
- completion,
- onDiscard,
-}: {
- completion: string;
- onDiscard: () => void;
-}) => {
- const { editor } = useEditor();
- return (
- <>
-
- {
- if (!editor) {
- return;
- }
-
- const selection = editor.view.state.selection;
-
- editor
- .chain()
- .focus()
- .insertContentAt(
- {
- from: selection.from,
- to: selection.to,
- },
- completion,
- )
- .run();
- }}
- >
-
- Replace selection
-
- {
- if (!editor) {
- return;
- }
-
- const selection = editor.view.state.selection;
- editor
- .chain()
- .focus()
- .insertContentAt(selection.to + 1, completion)
- .run();
- }}
- >
-
- Insert below
-
-
-
-
-
-
-
- Discard
-
-
- >
- );
-};
-
-export default AICompletionCommands;
diff --git a/apps/app/src/components/editor/generative/ai-selector-commands.tsx b/apps/app/src/components/editor/generative/ai-selector-commands.tsx
deleted file mode 100644
index da4a2d0831..0000000000
--- a/apps/app/src/components/editor/generative/ai-selector-commands.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-import { CommandGroup, CommandItem, CommandSeparator } from "@bubba/ui/command";
-import {
- ArrowDownWideNarrow,
- CheckCheck,
- RefreshCcwDot,
- StepForward,
- WrapText,
-} from "lucide-react";
-import { useEditor } from "novel";
-import { getPrevText } from "novel";
-
-const options = [
- {
- value: "improve",
- label: "Improve writing",
- icon: RefreshCcwDot,
- },
-
- {
- value: "fix",
- label: "Fix grammar",
- icon: CheckCheck,
- },
- {
- value: "shorter",
- label: "Make shorter",
- icon: ArrowDownWideNarrow,
- },
- {
- value: "longer",
- label: "Make longer",
- icon: WrapText,
- },
-];
-
-interface AISelectorCommandsProps {
- onSelect: (value: string, option: string) => void;
-}
-
-const AISelectorCommands = ({ onSelect }: AISelectorCommandsProps) => {
- const { editor } = useEditor();
-
- return (
- <>
-
- {options.map((option) => (
- {
- if (!editor) {
- return;
- }
-
- const slice = editor.state.selection.content();
- const text = editor.storage.markdown.serializer.serialize(
- slice.content,
- );
- onSelect(text, value);
- }}
- className="flex gap-2 px-4"
- key={option.value}
- value={option.value}
- >
-
- {option.label}
-
- ))}
-
-
-
- {
- if (!editor) {
- return;
- }
-
- const pos = editor.state.selection.from;
-
- const text = getPrevText(editor, pos);
- onSelect(text, "continue");
- }}
- value="continue"
- className="gap-2 px-4"
- >
-
- Continue writing
-
-
- >
- );
-};
-
-export default AISelectorCommands;
diff --git a/apps/app/src/components/editor/generative/ai-selector.tsx b/apps/app/src/components/editor/generative/ai-selector.tsx
deleted file mode 100644
index 82cbc8431a..0000000000
--- a/apps/app/src/components/editor/generative/ai-selector.tsx
+++ /dev/null
@@ -1,134 +0,0 @@
-"use client";
-
-import { Button } from "@bubba/ui/button";
-import { Command, CommandInput } from "@bubba/ui/command";
-import { ScrollArea } from "@bubba/ui/scroll-area";
-import { useCompletion } from "ai/react";
-import { ArrowUp } from "lucide-react";
-import { useEditor } from "novel";
-import { addAIHighlight } from "novel";
-import { useState } from "react";
-import Markdown from "react-markdown";
-import { toast } from "sonner";
-import CrazySpinner from "../ui/icons/crazy-spinner";
-import Magic from "../ui/icons/magic";
-import AICompletionCommands from "./ai-completion-command";
-import AISelectorCommands from "./ai-selector-commands";
-//TODO: I think it makes more sense to create a custom Tiptap extension for this functionality https://tiptap.dev/docs/editor/ai/introduction
-
-interface AISelectorProps {
- open: boolean;
- onOpenChange: (open: boolean) => void;
-}
-
-export function AISelector({ onOpenChange }: AISelectorProps) {
- const { editor } = useEditor();
- const [inputValue, setInputValue] = useState("");
-
- const { completion, complete, isLoading } = useCompletion({
- // id: "novel",
- api: "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/api/generate",
- onResponse: (response) => {
- if (response.status === 429) {
- toast.error("You have reached your request limit for the day.");
- return;
- }
- },
- onError: (e) => {
- toast.error(e.message);
- },
- });
-
- const hasCompletion = completion.length > 0;
-
- return (
-
- {hasCompletion && (
-
- )}
-
- {isLoading && (
-
-
- AI is thinking
-
-
-
-
- )}
- {!isLoading && (
- <>
-
-
{
- if (!editor) {
- return;
- }
-
- addAIHighlight(editor);
- }}
- />
-
-
- {hasCompletion ? (
- {
- if (!editor) {
- return;
- }
-
- editor.chain().unsetHighlight().focus().run();
- onOpenChange(false);
- }}
- completion={completion}
- />
- ) : (
-
- complete(value, { body: { option } })
- }
- />
- )}
- >
- )}
-
- );
-}
diff --git a/apps/app/src/components/editor/generative/generative-menu-switch.tsx b/apps/app/src/components/editor/generative/generative-menu-switch.tsx
deleted file mode 100644
index 0d96d602ff..0000000000
--- a/apps/app/src/components/editor/generative/generative-menu-switch.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-import { Button } from "@bubba/ui/button";
-import { EditorBubble, useEditor } from "novel";
-import { removeAIHighlight } from "novel";
-import { Fragment, type ReactNode, useEffect } from "react";
-import Magic from "../ui/icons/magic";
-import { AISelector } from "./ai-selector";
-
-interface GenerativeMenuSwitchProps {
- children: ReactNode;
- open: boolean;
- onOpenChange: (open: boolean) => void;
-}
-const GenerativeMenuSwitch = ({
- children,
- open,
- onOpenChange,
-}: GenerativeMenuSwitchProps) => {
- const { editor } = useEditor();
-
- useEffect(() => {
- if (!open && editor) removeAIHighlight(editor);
- }, [open]);
-
- return (
- {
- if (!editor) {
- return;
- }
-
- onOpenChange(false);
- editor.chain().unsetHighlight().run();
- },
- }}
- className="flex w-fit max-w-[90vw] overflow-hidden rounded-md border border-muted bg-background shadow-xl"
- >
- {open && }
- {!open && (
-
-
- {children}
-
- )}
-
- );
-};
-
-export default GenerativeMenuSwitch;
diff --git a/apps/app/src/components/editor/image-upload.ts b/apps/app/src/components/editor/image-upload.ts
deleted file mode 100644
index 31fc89b6fd..0000000000
--- a/apps/app/src/components/editor/image-upload.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { createImageUpload } from "novel";
-import { toast } from "sonner";
-
-const onUpload = (file: File) => {
- const promise = fetch("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/api/upload", {
- method: "POST",
- headers: {
- "content-type": file?.type || "application/octet-stream",
- "x-vercel-filename": file?.name || "image.png",
- },
- body: file,
- });
-
- return new Promise((resolve, reject) => {
- toast.promise(
- promise.then(async (res) => {
- // Successfully uploaded image
- if (res.status === 200) {
- const { url } = (await res.json()) as { url: string };
- // preload the image
- const image = new Image();
- image.src = url;
- image.onload = () => {
- resolve(url);
- };
- // No blob store configured
- } else if (res.status === 401) {
- resolve(file);
- throw new Error("`BLOB_READ_WRITE_TOKEN` environment variable not found, reading image locally instead.");
- // Unknown error
- } else {
- throw new Error("Error uploading image. Please try again.");
- }
- }),
- {
- loading: "Uploading image...",
- success: "Image uploaded successfully.",
- error: (e) => {
- reject(e);
- return e.message;
- },
- },
- );
- });
-};
-
-export const uploadFn = createImageUpload({
- onUpload,
- validateFn: (file) => {
- if (!file.type.includes("image/")) {
- toast.error("File type not supported.");
- return false;
- }
- if (file.size / 1024 / 1024 > 20) {
- toast.error("File size too big (max 20MB).");
- return false;
- }
- return true;
- },
-});
\ No newline at end of file
diff --git a/apps/app/src/components/editor/selectors/add-comment-selector.tsx b/apps/app/src/components/editor/selectors/add-comment-selector.tsx
deleted file mode 100644
index e440b576cb..0000000000
--- a/apps/app/src/components/editor/selectors/add-comment-selector.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import { Button } from "@bubba/ui/button";
-import { cn } from "@bubba/ui/cn";
-import { MessageSquarePlus } from "lucide-react";
-import { useEditor } from "novel";
-
-export const AddCommentSelector = () => {
- const { editor } = useEditor();
-
- if (!editor) return null;
-
- return (
-
- );
-};
diff --git a/apps/app/src/components/editor/selectors/color-selector.tsx b/apps/app/src/components/editor/selectors/color-selector.tsx
deleted file mode 100644
index 248e1518db..0000000000
--- a/apps/app/src/components/editor/selectors/color-selector.tsx
+++ /dev/null
@@ -1,192 +0,0 @@
-import { Check, ChevronDown } from "lucide-react";
-import { EditorBubbleItem, useEditor } from "novel";
-
-import { Button } from "@bubba/ui/button";
-import { Popover, PopoverContent, PopoverTrigger } from "@bubba/ui/popover";
-export interface BubbleColorMenuItem {
- name: string;
- color: string;
-}
-
-const TEXT_COLORS: BubbleColorMenuItem[] = [
- {
- name: "Default",
- color: "var(--novel-black)",
- },
- {
- name: "Purple",
- color: "#9333EA",
- },
- {
- name: "Red",
- color: "#E00000",
- },
- {
- name: "Yellow",
- color: "#EAB308",
- },
- {
- name: "Blue",
- color: "#2563EB",
- },
- {
- name: "Green",
- color: "#008A00",
- },
- {
- name: "Orange",
- color: "#FFA500",
- },
- {
- name: "Pink",
- color: "#BA4081",
- },
- {
- name: "Gray",
- color: "#A8A29E",
- },
-];
-
-const HIGHLIGHT_COLORS: BubbleColorMenuItem[] = [
- {
- name: "Default",
- color: "var(--novel-highlight-default)",
- },
- {
- name: "Purple",
- color: "var(--novel-highlight-purple)",
- },
- {
- name: "Red",
- color: "var(--novel-highlight-red)",
- },
- {
- name: "Yellow",
- color: "var(--novel-highlight-yellow)",
- },
- {
- name: "Blue",
- color: "var(--novel-highlight-blue)",
- },
- {
- name: "Green",
- color: "var(--novel-highlight-green)",
- },
- {
- name: "Orange",
- color: "var(--novel-highlight-orange)",
- },
- {
- name: "Pink",
- color: "var(--novel-highlight-pink)",
- },
- {
- name: "Gray",
- color: "var(--novel-highlight-gray)",
- },
-];
-
-interface ColorSelectorProps {
- open: boolean;
- onOpenChange: (open: boolean) => void;
-}
-
-export const ColorSelector = ({ open, onOpenChange }: ColorSelectorProps) => {
- const { editor } = useEditor();
-
- if (!editor) return null;
- const activeColorItem = TEXT_COLORS.find(({ color }) =>
- editor.isActive("textStyle", { color }),
- );
-
- const activeHighlightItem = HIGHLIGHT_COLORS.find(({ color }) =>
- editor.isActive("highlight", { color }),
- );
-
- return (
-
-
-
-
-
-
-
-
- Color
-
- {TEXT_COLORS.map(({ name, color }) => (
-
{
- editor.commands.unsetAIHighlight();
- name !== "Default" &&
- editor
- .chain()
- .focus()
- .setAIHighlight({ color: color || "" })
- .run();
- onOpenChange(false);
- }}
- className="flex cursor-pointer items-center justify-between px-2 py-1 text-sm hover:bg-accent"
- >
-
-
- ))}
-
-
-
- Background
-
- {HIGHLIGHT_COLORS.map(({ name, color }) => (
-
{
- editor.commands.unsetAIHighlight();
- name !== "Default" &&
- editor.chain().focus().setAIHighlight({ color }).run();
- onOpenChange(false);
- }}
- className="flex cursor-pointer items-center justify-between px-2 py-1 text-sm hover:bg-accent"
- >
-
- {editor.isActive("aiHighlight", { color }) && (
-
- )}
-
- ))}
-
-
-
- );
-};
diff --git a/apps/app/src/components/editor/selectors/link-selector.tsx b/apps/app/src/components/editor/selectors/link-selector.tsx
deleted file mode 100644
index 03ca5a0af2..0000000000
--- a/apps/app/src/components/editor/selectors/link-selector.tsx
+++ /dev/null
@@ -1,108 +0,0 @@
-import { Button } from "@bubba/ui/button";
-import { cn } from "@bubba/ui/cn";
-import { PopoverContent } from "@bubba/ui/popover";
-import { Popover, PopoverTrigger } from "@radix-ui/react-popover";
-import { Check, Trash } from "lucide-react";
-import { useEditor } from "novel";
-import { useEffect, useRef } from "react";
-
-export function isValidUrl(url: string) {
- try {
- new URL(url);
- return true;
- } catch (_e) {
- return false;
- }
-}
-export function getUrlFromString(str: string) {
- if (isValidUrl(str)) return str;
- try {
- if (str.includes(".") && !str.includes(" ")) {
- return new URL(`https://${str}`).toString();
- }
- } catch (_e) {
- return null;
- }
-}
-interface LinkSelectorProps {
- open: boolean;
- onOpenChange: (open: boolean) => void;
-}
-
-export const LinkSelector = ({ open, onOpenChange }: LinkSelectorProps) => {
- const inputRef = useRef(null);
- const { editor } = useEditor();
-
- // Autofocus on input by default
- useEffect(() => {
- inputRef.current?.focus();
- });
- if (!editor) return null;
-
- return (
-
-
-
-
-
-
-
-
- );
-};
diff --git a/apps/app/src/components/editor/selectors/math-selector.tsx b/apps/app/src/components/editor/selectors/math-selector.tsx
deleted file mode 100644
index e2f48e6ca1..0000000000
--- a/apps/app/src/components/editor/selectors/math-selector.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { Button } from "@bubba/ui/button";
-import { cn } from "@bubba/ui/cn";
-import { SigmaIcon } from "lucide-react";
-import { useEditor } from "novel";
-
-export const MathSelector = () => {
- const { editor } = useEditor();
-
- if (!editor) return null;
-
- return (
-
- );
-};
diff --git a/apps/app/src/components/editor/selectors/node-selector.tsx b/apps/app/src/components/editor/selectors/node-selector.tsx
deleted file mode 100644
index 56405baa54..0000000000
--- a/apps/app/src/components/editor/selectors/node-selector.tsx
+++ /dev/null
@@ -1,147 +0,0 @@
-import {
- Check,
- CheckSquare,
- ChevronDown,
- Code,
- Heading1,
- Heading2,
- Heading3,
- ListOrdered,
- type LucideIcon,
- TextIcon,
- TextQuote,
-} from "lucide-react";
-import { EditorBubbleItem, useEditor } from "novel";
-
-import { Button } from "@bubba/ui/button";
-import { PopoverContent, PopoverTrigger } from "@bubba/ui/popover";
-import { Popover } from "@radix-ui/react-popover";
-
-export type SelectorItem = {
- name: string;
- icon: LucideIcon;
- command: (editor: ReturnType["editor"]) => void;
- isActive: (editor: ReturnType["editor"]) => boolean;
-};
-
-const items: SelectorItem[] = [
- {
- name: "Text",
- icon: TextIcon,
- command: (editor) => editor?.chain().focus().clearNodes().run(),
- // I feel like there has to be a more efficient way to do this – feel free to PR if you know how!
- isActive: (editor) =>
- (editor?.isActive("paragraph") ?? false) &&
- !(editor?.isActive("bulletList") ?? false) &&
- !(editor?.isActive("orderedList") ?? false),
- },
- {
- name: "Heading 1",
- icon: Heading1,
- command: (editor) =>
- editor?.chain().focus().clearNodes().toggleHeading({ level: 1 }).run(),
- isActive: (editor) => editor?.isActive("heading", { level: 1 }) ?? false,
- },
- {
- name: "Heading 2",
- icon: Heading2,
- command: (editor) =>
- editor?.chain().focus().clearNodes().toggleHeading({ level: 2 }).run(),
- isActive: (editor) => editor?.isActive("heading", { level: 2 }) ?? false,
- },
- {
- name: "Heading 3",
- icon: Heading3,
- command: (editor) =>
- editor?.chain().focus().clearNodes().toggleHeading({ level: 3 }).run(),
- isActive: (editor) => editor?.isActive("heading", { level: 3 }) ?? false,
- },
- {
- name: "To-do List",
- icon: CheckSquare,
- command: (editor) =>
- //@ts-ignore
- editor
- ?.chain()
- .focus()
- .clearNodes()
- //@ts-ignore
- .toggleTaskList()
- .run(),
- isActive: (editor) => editor?.isActive("taskItem") ?? false,
- },
- {
- name: "Bullet List",
- icon: ListOrdered,
- command: (editor) =>
- editor?.chain().focus().clearNodes().toggleBulletList().run(),
- isActive: (editor) => editor?.isActive("bulletList") ?? false,
- },
- {
- name: "Numbered List",
- icon: ListOrdered,
- command: (editor) =>
- editor?.chain().focus().clearNodes().toggleOrderedList().run(),
- isActive: (editor) => editor?.isActive("orderedList") ?? false,
- },
- {
- name: "Quote",
- icon: TextQuote,
- command: (editor) =>
- editor?.chain().focus().clearNodes().toggleBlockquote().run(),
- isActive: (editor) => editor?.isActive("blockquote") ?? false,
- },
- {
- name: "Code",
- icon: Code,
- command: (editor) =>
- editor?.chain().focus().clearNodes().toggleCodeBlock().run(),
- isActive: (editor) => editor?.isActive("codeBlock") ?? false,
- },
-];
-interface NodeSelectorProps {
- open: boolean;
- onOpenChange: (open: boolean) => void;
-}
-
-export const NodeSelector = ({ open, onOpenChange }: NodeSelectorProps) => {
- const { editor } = useEditor();
- if (!editor) return null;
- const activeItem = items.filter((item) => item.isActive(editor)).pop() ?? {
- name: "Multiple",
- };
-
- return (
-
-
-
-
-
- {items.map((item) => (
- {
- item.command(editor);
- onOpenChange(false);
- }}
- className="flex cursor-pointer items-center justify-between rounded-sm px-2 py-1 text-sm hover:bg-accent"
- >
-
- {activeItem.name === item.name && }
-
- ))}
-
-
- );
-};
diff --git a/apps/app/src/components/editor/selectors/text-buttons.tsx b/apps/app/src/components/editor/selectors/text-buttons.tsx
deleted file mode 100644
index f2adf6c37a..0000000000
--- a/apps/app/src/components/editor/selectors/text-buttons.tsx
+++ /dev/null
@@ -1,84 +0,0 @@
-import { Button } from "@bubba/ui/button";
-import { cn } from "@bubba/ui/cn";
-import {
- BoldIcon,
- CodeIcon,
- ItalicIcon,
- StrikethroughIcon,
- UnderlineIcon,
-} from "lucide-react";
-import { EditorBubbleItem, useEditor } from "novel";
-import type { SelectorItem } from "./node-selector";
-
-export const TextButtons = () => {
- const { editor } = useEditor();
- if (!editor) return null;
- const items: SelectorItem[] = [
- {
- name: "bold",
- isActive: (editor) => editor?.isActive("bold") ?? false,
- command: (editor) => {
- if (editor) editor.chain().focus().toggleBold().run();
- },
- icon: BoldIcon,
- },
- {
- name: "italic",
- isActive: (editor) => editor?.isActive("italic") ?? false,
- command: (editor) => {
- if (editor) editor.chain().focus().toggleItalic().run();
- },
- icon: ItalicIcon,
- },
- {
- name: "underline",
- isActive: (editor) => editor?.isActive("underline") ?? false,
- command: (editor) => {
- //@ts-ignore
- if (editor) editor.chain().focus().toggleUnderline().run();
- },
- icon: UnderlineIcon,
- },
- {
- name: "strike",
- isActive: (editor) => editor?.isActive("strike") ?? false,
- command: (editor) => {
- if (editor) editor.chain().focus().toggleStrike().run();
- },
- icon: StrikethroughIcon,
- },
- {
- name: "code",
- isActive: (editor) => editor?.isActive("code") ?? false,
- command: (editor) => {
- if (editor) editor.chain().focus().toggleCode().run();
- },
- icon: CodeIcon,
- },
- ];
- return (
-
- {items.map((item) => (
- {
- item.command(editor);
- }}
- >
-
-
- ))}
-
- );
-};
diff --git a/apps/app/src/components/editor/slash-command.tsx b/apps/app/src/components/editor/slash-command.tsx
deleted file mode 100644
index 27c7bc5628..0000000000
--- a/apps/app/src/components/editor/slash-command.tsx
+++ /dev/null
@@ -1,196 +0,0 @@
-import {
- CheckSquare,
- Code,
- Heading1,
- Heading2,
- Heading3,
- ImageIcon,
- List,
- ListOrdered,
- Text,
- TextQuote,
- Twitter,
- Youtube,
-} from "lucide-react";
-import { createSuggestionItems } from "novel";
-import { Command, renderItems } from "novel";
-
-export const suggestionItems = createSuggestionItems([
- {
- title: "Text",
- description: "Just start typing with plain text.",
- searchTerms: ["p", "paragraph"],
- icon: ,
- command: ({ editor, range }) => {
- editor
- .chain()
- .focus()
- .deleteRange(range)
- .toggleNode("paragraph", "paragraph")
- .run();
- },
- },
- {
- title: "To-do List",
- description: "Track tasks with a to-do list.",
- searchTerms: ["todo", "task", "list", "check", "checkbox"],
- icon: ,
- command: ({ editor, range }) => {
- editor.chain().focus().deleteRange(range).toggleTaskList().run();
- },
- },
- {
- title: "Heading 1",
- description: "Big section heading.",
- searchTerms: ["title", "big", "large"],
- icon: ,
- command: ({ editor, range }) => {
- editor
- .chain()
- .focus()
- .deleteRange(range)
- .setNode("heading", { level: 1 })
- .run();
- },
- },
- {
- title: "Heading 2",
- description: "Medium section heading.",
- searchTerms: ["subtitle", "medium"],
- icon: ,
- command: ({ editor, range }) => {
- editor
- .chain()
- .focus()
- .deleteRange(range)
- .setNode("heading", { level: 2 })
- .run();
- },
- },
- {
- title: "Heading 3",
- description: "Small section heading.",
- searchTerms: ["subtitle", "small"],
- icon: ,
- command: ({ editor, range }) => {
- editor
- .chain()
- .focus()
- .deleteRange(range)
- .setNode("heading", { level: 3 })
- .run();
- },
- },
- {
- title: "Bullet List",
- description: "Create a simple bullet list.",
- searchTerms: ["unordered", "point"],
- icon:
,
- command: ({ editor, range }) => {
- editor.chain().focus().deleteRange(range).toggleBulletList().run();
- },
- },
- {
- title: "Numbered List",
- description: "Create a list with numbering.",
- searchTerms: ["ordered"],
- icon: ,
- command: ({ editor, range }) => {
- editor.chain().focus().deleteRange(range).toggleOrderedList().run();
- },
- },
- {
- title: "Quote",
- description: "Capture a quote.",
- searchTerms: ["blockquote"],
- icon: ,
- command: ({ editor, range }) =>
- editor
- .chain()
- .focus()
- .deleteRange(range)
- .toggleNode("paragraph", "paragraph")
- .toggleBlockquote()
- .run(),
- },
- {
- title: "Code",
- description: "Capture a code snippet.",
- searchTerms: ["codeblock"],
- icon: ,
- command: ({ editor, range }) =>
- editor.chain().focus().deleteRange(range).toggleCodeBlock().run(),
- },
- {
- title: "Youtube",
- description: "Embed a Youtube video.",
- searchTerms: ["video", "youtube", "embed"],
- icon: ,
- command: ({ editor, range }) => {
- const videoLink = prompt("Please enter Youtube Video Link");
-
- if (!videoLink) {
- return;
- }
-
- //From https://regexr.com/3dj5t
- const ytregex = new RegExp(
- /^((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu.be))(\/(?:[\w\-]+\?v=|embed\/|v\/)?)([\w\-]+)(\S+)?$/,
- );
-
- if (ytregex.test(videoLink)) {
- editor
- .chain()
- .focus()
- .deleteRange(range)
- .setYoutubeVideo({
- src: videoLink,
- })
- .run();
- } else {
- if (videoLink !== null) {
- alert("Please enter a correct Youtube Video Link");
- }
- }
- },
- },
- {
- title: "Twitter",
- description: "Embed a Tweet.",
- searchTerms: ["twitter", "embed"],
- icon: ,
- command: ({ editor, range }) => {
- const tweetLink = prompt("Please enter Twitter Link");
-
- if (!tweetLink) {
- return;
- }
-
- const tweetRegex = new RegExp(
- /^https?:\/\/(www\.)?x\.com\/([a-zA-Z0-9_]{1,15})(\/status\/(\d+))?(\/\S*)?$/,
- );
-
- if (tweetRegex.test(tweetLink)) {
- editor
- .chain()
- .focus()
- .deleteRange(range)
- .setTweet({
- src: tweetLink,
- })
- .run();
- } else {
- if (tweetLink !== null) {
- alert("Please enter a correct Twitter Link");
- }
- }
- },
- },
-]);
-
-export const slashCommand = Command.configure({
- suggestion: {
- items: () => suggestionItems,
- render: renderItems,
- },
-});
diff --git a/apps/app/src/components/editor/spinner.tsx b/apps/app/src/components/editor/spinner.tsx
deleted file mode 100644
index 6db9e20351..0000000000
--- a/apps/app/src/components/editor/spinner.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-"use client";
-
-import clsx from "clsx";
-import type { ComponentProps } from "react";
-
-export interface Props extends ComponentProps<"svg"> {
- size?: number;
-}
-
-function Spinner({ size = 16, className, ...props }: Props) {
- return (
-
- );
-}
-
-export function DocumentSpinner() {
- return (
-
-
-
- );
-}
diff --git a/apps/app/src/components/editor/threads.tsx b/apps/app/src/components/editor/threads.tsx
deleted file mode 100644
index d2826443ca..0000000000
--- a/apps/app/src/components/editor/threads.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-import { FloatingComposer, FloatingThreads } from "@liveblocks/react-tiptap";
-import { useThreads } from "@liveblocks/react/suspense";
-import { useEditor } from "novel";
-import { useSyncExternalStore } from "react";
-
-export function Threads() {
- const { editor } = useEditor();
- const { threads } = useThreads({ query: { resolved: false } });
-
- if (!editor) {
- return null;
- }
-
- return (
- <>
-
-
- >
- );
-}
-
-export function useIsMobile() {
- return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
-}
-
-function subscribe(callback: () => void) {
- const query = window.matchMedia("(max-width: 1279px)");
-
- query.addEventListener("change", callback);
- return () => query.removeEventListener("change", callback);
-}
-
-function getSnapshot() {
- const query = window.matchMedia("(max-width: 1279px)");
- return query.matches;
-}
diff --git a/apps/app/src/components/editor/ui/icons/crazy-spinner.tsx b/apps/app/src/components/editor/ui/icons/crazy-spinner.tsx
deleted file mode 100644
index 2f0e7c823d..0000000000
--- a/apps/app/src/components/editor/ui/icons/crazy-spinner.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-const CrazySpinner = () => {
- return (
-
- );
-};
-
-export default CrazySpinner;
diff --git a/apps/app/src/components/editor/ui/icons/font-default.tsx b/apps/app/src/components/editor/ui/icons/font-default.tsx
deleted file mode 100644
index bf29e4b513..0000000000
--- a/apps/app/src/components/editor/ui/icons/font-default.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-export default function FontDefault({ className }: { className?: string }) {
- return (
-
- );
-}
diff --git a/apps/app/src/components/editor/ui/icons/font-mono.tsx b/apps/app/src/components/editor/ui/icons/font-mono.tsx
deleted file mode 100644
index 6e7b301bf4..0000000000
--- a/apps/app/src/components/editor/ui/icons/font-mono.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-export default function FontMono({ className }: { className?: string }) {
- return (
-
- );
-}
diff --git a/apps/app/src/components/editor/ui/icons/font-serif.tsx b/apps/app/src/components/editor/ui/icons/font-serif.tsx
deleted file mode 100644
index 92225a36a7..0000000000
--- a/apps/app/src/components/editor/ui/icons/font-serif.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-export default function FontSerif({ className }: { className?: string }) {
- return (
-
- );
-}
diff --git a/apps/app/src/components/editor/ui/icons/index.tsx b/apps/app/src/components/editor/ui/icons/index.tsx
deleted file mode 100644
index 5b2844627c..0000000000
--- a/apps/app/src/components/editor/ui/icons/index.tsx
+++ /dev/null
@@ -1,3 +0,0 @@
-export { default as FontDefault } from "./font-default";
-export { default as FontSerif } from "./font-serif";
-export { default as FontMono } from "./font-mono";
diff --git a/apps/app/src/components/editor/ui/icons/loading-circle.tsx b/apps/app/src/components/editor/ui/icons/loading-circle.tsx
deleted file mode 100644
index 2a63811748..0000000000
--- a/apps/app/src/components/editor/ui/icons/loading-circle.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-export default function LoadingCircle({ dimensions }: { dimensions?: string }) {
- return (
-
- );
-}
diff --git a/apps/app/src/components/editor/ui/icons/magic.tsx b/apps/app/src/components/editor/ui/icons/magic.tsx
deleted file mode 100644
index 410346f7ec..0000000000
--- a/apps/app/src/components/editor/ui/icons/magic.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-export default function Magic({ className }: { className: string }) {
- return (
-
- );
-}
diff --git a/apps/app/src/components/policies/policy-overview.tsx b/apps/app/src/components/policies/policy-overview.tsx
index e746f198b5..4c2335aa23 100644
--- a/apps/app/src/components/policies/policy-overview.tsx
+++ b/apps/app/src/components/policies/policy-overview.tsx
@@ -4,12 +4,9 @@ import { publishPolicy } from "@/app/[locale]/(app)/(dashboard)/policies/[id]/ac
import { usePolicy } from "@/app/[locale]/(app)/(dashboard)/policies/hooks/usePolicy";
import { Button } from "@bubba/ui/button";
import { Separator } from "@bubba/ui/separator";
-import { ClientSideSuspense } from "@liveblocks/react";
-import type { JSONContent } from "@tiptap/react";
import { useAction } from "next-safe-action/hooks";
+import type { JSONContent } from "novel";
import { toast } from "sonner";
-import AdvancedEditor from "../editor/advanced-editor";
-import { DocumentSpinner } from "../editor/spinner";
export function PolicyOverview({ policyId }: { policyId: string }) {
const { data: policy } = usePolicy({ policyId });
@@ -43,9 +40,7 @@ export function PolicyOverview({ policyId }: { policyId: string }) {
diff --git a/apps/app/src/locales/en.ts b/apps/app/src/locales/en.ts
index dae169735c..ff1d17efe8 100644
--- a/apps/app/src/locales/en.ts
+++ b/apps/app/src/locales/en.ts
@@ -713,4 +713,23 @@ export default {
errors: {
unexpected: "Something went wrong, please try again",
},
+ editor: {
+ ai: {
+ thinking: "AI is thinking",
+ thinking_spinner: "AI is thinking",
+ edit_or_generate: "Edit or generate...",
+ tell_ai_what_to_do_next: "Tell AI what to do next",
+ request_limit_reached: "You have reached your request limit for the day.",
+ },
+ ai_selector: {
+ improve: "Improve writing",
+ fix: "Fix grammar",
+ shorter: "Make shorter",
+ longer: "Make longer",
+ continue: "Continue writing",
+ replace: "Replace selection",
+ insert: "Insert below",
+ discard: "Discard",
+ },
+ },
} as const;
diff --git a/apps/app/src/locales/es.ts b/apps/app/src/locales/es.ts
index a94f7846d7..320fea504e 100644
--- a/apps/app/src/locales/es.ts
+++ b/apps/app/src/locales/es.ts
@@ -691,5 +691,24 @@ export default {
frameworks: {
overview: "Marcos"
}
+ },
+ editor: {
+ ai: {
+ thinking: "La IA está pensando",
+ thinking_spinner: "La IA está pensando",
+ edit_or_generate: "Editar o generar...",
+ tell_ai_what_to_do_next: "Dile a la IA qué hacer a continuación",
+ request_limit_reached: "Has alcanzado tu límite de solicitudes para el día."
+ },
+ ai_selector: {
+ improve: "Mejorar la redacción",
+ fix: "Corregir la gramática",
+ shorter: "Hacer más corto",
+ longer: "Hacer más largo",
+ "continue": "Continuar escribiendo",
+ replace: "Reemplazar selección",
+ insert: "Insertar abajo",
+ discard: "Descartar"
+ }
}
} as const;
diff --git a/apps/app/src/locales/fr.ts b/apps/app/src/locales/fr.ts
index 489d4b145b..da7e4f5689 100644
--- a/apps/app/src/locales/fr.ts
+++ b/apps/app/src/locales/fr.ts
@@ -691,5 +691,24 @@ export default {
frameworks: {
overview: "Cadres"
}
+ },
+ editor: {
+ ai: {
+ thinking: "L'IA réfléchit",
+ thinking_spinner: "L'IA réfléchit",
+ edit_or_generate: "Modifier ou générer...",
+ tell_ai_what_to_do_next: "Dites à l'IA quoi faire ensuite",
+ request_limit_reached: "Vous avez atteint votre limite de demandes pour la journée."
+ },
+ ai_selector: {
+ improve: "Améliorer l'écriture",
+ fix: "Corriger la grammaire",
+ shorter: "Rendre plus court",
+ longer: "Rendre plus long",
+ "continue": "Continuer à écrire",
+ replace: "Remplacer la sélection",
+ insert: "Insérer ci-dessous",
+ discard: "Jeter"
+ }
}
} as const;
diff --git a/apps/app/src/locales/no.ts b/apps/app/src/locales/no.ts
index 3fdf5d2fa7..bcb52d5ebd 100644
--- a/apps/app/src/locales/no.ts
+++ b/apps/app/src/locales/no.ts
@@ -691,5 +691,24 @@ export default {
frameworks: {
overview: "Rammeverk"
}
+ },
+ editor: {
+ ai: {
+ thinking: "AI tenker",
+ thinking_spinner: "AI tenker",
+ edit_or_generate: "Rediger eller generer...",
+ tell_ai_what_to_do_next: "Fortell AI hva den skal gjøre neste gang",
+ request_limit_reached: "Du har nådd forespørselgrensen for dagen."
+ },
+ ai_selector: {
+ improve: "Forbedre skriving",
+ fix: "Rett grammatikk",
+ shorter: "Gjør kortere",
+ longer: "Gjør lengre",
+ "continue": "Fortsett å skrive",
+ replace: "Erstatt valg",
+ insert: "Sett inn under",
+ discard: "Forkast"
+ }
}
} as const;
diff --git a/apps/app/src/locales/pt.ts b/apps/app/src/locales/pt.ts
index f648dfe3b5..f524a7b4e2 100644
--- a/apps/app/src/locales/pt.ts
+++ b/apps/app/src/locales/pt.ts
@@ -691,5 +691,24 @@ export default {
frameworks: {
overview: "Estruturas"
}
+ },
+ editor: {
+ ai: {
+ thinking: "A IA está pensando",
+ thinking_spinner: "A IA está pensando",
+ edit_or_generate: "Editar ou gerar...",
+ tell_ai_what_to_do_next: "Diga à IA o que fazer a seguir",
+ request_limit_reached: "Você atingiu seu limite de solicitações para o dia."
+ },
+ ai_selector: {
+ improve: "Melhorar a escrita",
+ fix: "Corrigir gramática",
+ shorter: "Tornar mais curto",
+ longer: "Tornar mais longo",
+ "continue": "Continuar escrevendo",
+ replace: "Substituir seleção",
+ insert: "Inserir abaixo",
+ discard: "Descartar"
+ }
}
} as const;
diff --git a/bun.lock b/bun.lock
index 3a3088705c..6d6ba9b8a1 100644
--- a/bun.lock
+++ b/bun.lock
@@ -36,17 +36,6 @@
"@prisma/instrumentation": "^6.3.1",
"@tanstack/react-query": "^5.66.0",
"@tanstack/react-table": "^8.21.2",
- "@tiptap/extension-bullet-list": "^2.11.5",
- "@tiptap/extension-heading": "^2.11.5",
- "@tiptap/extension-list-item": "^2.11.5",
- "@tiptap/extension-ordered-list": "^2.11.5",
- "@tiptap/extension-table": "^2.11.5",
- "@tiptap/extension-table-cell": "^2.11.5",
- "@tiptap/extension-table-header": "^2.11.5",
- "@tiptap/extension-table-row": "^2.11.5",
- "@tiptap/html": "^2.11.5",
- "@tiptap/react": "^2.11.5",
- "@tiptap/starter-kit": "^2.11.5",
"@trigger.dev/react-hooks": "3.3.13",
"@trigger.dev/sdk": "3.3.13",
"@types/xml2js": "^0.4.14",
@@ -335,7 +324,7 @@
"@babel/core": ["@babel/core@7.24.5", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.2", "@babel/generator": "^7.24.5", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.24.5", "@babel/helpers": "^7.24.5", "@babel/parser": "^7.24.5", "@babel/template": "^7.24.0", "@babel/traverse": "^7.24.5", "@babel/types": "^7.24.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA=="],
- "@babel/generator": ["@babel/generator@7.26.8", "", { "dependencies": { "@babel/parser": "^7.26.8", "@babel/types": "^7.26.8", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, "sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA=="],
+ "@babel/generator": ["@babel/generator@7.26.9", "", { "dependencies": { "@babel/parser": "^7.26.9", "@babel/types": "^7.26.9", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg=="],
"@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.26.5", "", { "dependencies": { "@babel/compat-data": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA=="],
@@ -349,17 +338,17 @@
"@babel/helper-validator-option": ["@babel/helper-validator-option@7.25.9", "", {}, "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw=="],
- "@babel/helpers": ["@babel/helpers@7.26.7", "", { "dependencies": { "@babel/template": "^7.25.9", "@babel/types": "^7.26.7" } }, "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A=="],
+ "@babel/helpers": ["@babel/helpers@7.26.9", "", { "dependencies": { "@babel/template": "^7.26.9", "@babel/types": "^7.26.9" } }, "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA=="],
"@babel/parser": ["@babel/parser@7.24.5", "", { "bin": "./bin/babel-parser.js" }, "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg=="],
- "@babel/runtime": ["@babel/runtime@7.26.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ=="],
+ "@babel/runtime": ["@babel/runtime@7.26.9", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg=="],
- "@babel/template": ["@babel/template@7.26.8", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/parser": "^7.26.8", "@babel/types": "^7.26.8" } }, "sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q=="],
+ "@babel/template": ["@babel/template@7.26.9", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/parser": "^7.26.9", "@babel/types": "^7.26.9" } }, "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA=="],
- "@babel/traverse": ["@babel/traverse@7.26.8", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.26.8", "@babel/parser": "^7.26.8", "@babel/template": "^7.26.8", "@babel/types": "^7.26.8", "debug": "^4.3.1", "globals": "^11.1.0" } }, "sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA=="],
+ "@babel/traverse": ["@babel/traverse@7.26.9", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.26.9", "@babel/parser": "^7.26.9", "@babel/template": "^7.26.9", "@babel/types": "^7.26.9", "debug": "^4.3.1", "globals": "^11.1.0" } }, "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg=="],
- "@babel/types": ["@babel/types@7.26.8", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA=="],
+ "@babel/types": ["@babel/types@7.26.9", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw=="],
"@biomejs/biome": ["@biomejs/biome@1.9.4", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "1.9.4", "@biomejs/cli-darwin-x64": "1.9.4", "@biomejs/cli-linux-arm64": "1.9.4", "@biomejs/cli-linux-arm64-musl": "1.9.4", "@biomejs/cli-linux-x64": "1.9.4", "@biomejs/cli-linux-x64-musl": "1.9.4", "@biomejs/cli-win32-arm64": "1.9.4", "@biomejs/cli-win32-x64": "1.9.4" }, "bin": { "biome": "bin/biome" } }, "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog=="],
@@ -701,7 +690,7 @@
"@opentelemetry/exporter-zipkin": ["@opentelemetry/exporter-zipkin@1.25.1", "", { "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/resources": "1.25.1", "@opentelemetry/sdk-trace-base": "1.25.1", "@opentelemetry/semantic-conventions": "1.25.1" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw=="],
- "@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.1", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.1", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-SgHEKXoVxOjc20ZYusPG3Fh+RLIZTSa4x8QtD3NfgAUDyqdFFS9W1F2ZVbZkqDCdyMcQG02Ok4duUGLHJXHgbA=="],
+ "@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="],
"@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.52.1", "", { "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/otlp-transformer": "0.52.1" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ=="],
@@ -951,7 +940,7 @@
"@remirror/core-constants": ["@remirror/core-constants@3.0.0", "", {}, "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg=="],
- "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.34.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg=="],
+ "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.34.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-jq87CjmgL9YIKvs8ybtIC98s/M3HdbqXhllcy9EdLV0yMg1DpxES2gr65nNy7ObNo/vZ/MrOTxt0bE5LinL6mA=="],
"@scena/dragscroll": ["@scena/dragscroll@1.4.0", "", { "dependencies": { "@daybrush/utils": "^1.6.0", "@scena/event-emitter": "^1.0.2" } }, "sha512-3O8daaZD9VXA9CP3dra6xcgt/qrm0mg0xJCwiX6druCteQ9FFsXffkF8PrqxY4Z4VJ58fFKEa0RlKqbsi/XnRA=="],
@@ -1069,14 +1058,6 @@
"@tiptap/extension-strike": ["@tiptap/extension-strike@2.11.5", "", { "peerDependencies": { "@tiptap/core": "^2.7.0" } }, "sha512-PVfUiCqrjvsLpbIoVlegSY8RlkR64F1Rr2RYmiybQfGbg+AkSZXDeO0eIrc03//4gua7D9DfIozHmAKv1KN3ow=="],
- "@tiptap/extension-table": ["@tiptap/extension-table@2.11.5", "", { "peerDependencies": { "@tiptap/core": "^2.7.0", "@tiptap/pm": "^2.7.0" } }, "sha512-NKXLhKWdAdURklm98YkCd2ai4fh8jY8HS/+X2s/2QiQt8Z98CU1keCm35fJEEExM234iB/hCqG5vY4JgTc0Tvw=="],
-
- "@tiptap/extension-table-cell": ["@tiptap/extension-table-cell@2.11.5", "", { "peerDependencies": { "@tiptap/core": "^2.7.0" } }, "sha512-S967Au0pgeULstP3FaasOf/LEh72p61Ooh1PcUMF/az4x8EeGgpcEUARpVUxsGxLFvogv6LmhPHZdtcGgdHcBw=="],
-
- "@tiptap/extension-table-header": ["@tiptap/extension-table-header@2.11.5", "", { "peerDependencies": { "@tiptap/core": "^2.7.0" } }, "sha512-O1iBtzZP1XZDi4h1Xmgq1T63il+fpKPvBIMZ0JJH9TyCw5i5rcrMLL2dyy5zaWK3BFRJuYBNSke4c+VWnr/g6w=="],
-
- "@tiptap/extension-table-row": ["@tiptap/extension-table-row@2.11.5", "", { "peerDependencies": { "@tiptap/core": "^2.7.0" } }, "sha512-+/VWhCuW24BcM5aaIc/f0bC6ZR1Q5gnuqw13MIo7gyPx7iIY6BXK8roGiZSs8wYAN4uBEf3EKFm0bSZwQuAeyg=="],
-
"@tiptap/extension-task-item": ["@tiptap/extension-task-item@2.11.5", "", { "peerDependencies": { "@tiptap/core": "^2.7.0", "@tiptap/pm": "^2.7.0" } }, "sha512-Xvvww8cleM6fcNejP916vzhL31yJnAmuBvABsOV0kHGtAqkqUVCSDcN/1qjI4ihVNeIWEJBHDczjDfZzvLy1xA=="],
"@tiptap/extension-task-list": ["@tiptap/extension-task-list@2.11.5", "", { "peerDependencies": { "@tiptap/core": "^2.7.0" } }, "sha512-DJpIrBu/bjXYmyYoWQDH2GkpvRmizT9Fvbx5MscFYyfmSsYryD3vRBtCDz08gviwoRII+pFBrG4Ynb0XuQ7DsA=="],
@@ -1089,8 +1070,6 @@
"@tiptap/extension-youtube": ["@tiptap/extension-youtube@2.11.5", "", { "peerDependencies": { "@tiptap/core": "^2.7.0" } }, "sha512-9XEH/zx/FlL/liJsncstcze98C73iupCbWlhAfC8+9O0wDmHEwaFyLSj+5LDqozWwzFnJmFOy7uZXfOY90kWGg=="],
- "@tiptap/html": ["@tiptap/html@2.11.5", "", { "dependencies": { "zeed-dom": "^0.15.1" }, "peerDependencies": { "@tiptap/core": "^2.7.0", "@tiptap/pm": "^2.7.0" } }, "sha512-B7ZuFV4Z6JytBhcj4865yGldPite+xX7O3X4hBUNoPpxhDf7BD+lSOgeZabZteQPnP6TKKqFT50q/Wll2t8eGQ=="],
-
"@tiptap/pm": ["@tiptap/pm@2.11.5", "", { "dependencies": { "prosemirror-changeset": "^2.2.1", "prosemirror-collab": "^1.3.1", "prosemirror-commands": "^1.6.2", "prosemirror-dropcursor": "^1.8.1", "prosemirror-gapcursor": "^1.3.2", "prosemirror-history": "^1.4.1", "prosemirror-inputrules": "^1.4.0", "prosemirror-keymap": "^1.2.2", "prosemirror-markdown": "^1.13.1", "prosemirror-menu": "^1.2.4", "prosemirror-model": "^1.23.0", "prosemirror-schema-basic": "^1.2.3", "prosemirror-schema-list": "^1.4.1", "prosemirror-state": "^1.4.3", "prosemirror-tables": "^1.6.3", "prosemirror-trailing-node": "^3.0.0", "prosemirror-transform": "^1.10.2", "prosemirror-view": "^1.37.0" } }, "sha512-z9JFtqc5ZOsdQLd9vRnXfTCQ8v5ADAfRt9Nm7SqP6FUHII8E1hs38ACzf5xursmth/VonJYb5+73Pqxk1hGIPw=="],
"@tiptap/react": ["@tiptap/react@2.11.5", "", { "dependencies": { "@tiptap/extension-bubble-menu": "^2.11.5", "@tiptap/extension-floating-menu": "^2.11.5", "@types/use-sync-external-store": "^0.0.6", "fast-deep-equal": "^3", "use-sync-external-store": "^1" }, "peerDependencies": { "@tiptap/core": "^2.7.0", "@tiptap/pm": "^2.7.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Dp8eHL1G+R/C4+QzAczyb3t1ovexEIZx9ln7SGEM+cT1KHKAw9XGPRgsp92+NQaYI+EdEb/YqoBOSzQcd18/OQ=="],
@@ -1173,7 +1152,7 @@
"@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="],
- "@types/node": ["@types/node@22.13.2", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-Z+r8y3XL9ZpI2EY52YYygAFmo2/oWfNSj4BCpAXE2McAexDk8VcnBMGC9Djn9gTKt4d2T/hhXqmPzo4hfIXtTg=="],
+ "@types/node": ["@types/node@22.13.4", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg=="],
"@types/node-fetch": ["@types/node-fetch@2.6.12", "", { "dependencies": { "@types/node": "*", "form-data": "^4.0.0" } }, "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA=="],
@@ -1221,7 +1200,7 @@
"@uploadthing/mime-types": ["@uploadthing/mime-types@0.3.4", "", {}, "sha512-EB0o0a4y++UJFMLqS8LDVhSQgXUllG6t5fwl5cbmOM0Uay8YY5Nc/JjFwzJ8wccdIKz4oYwQW7EOSfUyaMPbfw=="],
- "@uploadthing/react": ["@uploadthing/react@7.2.0", "", { "dependencies": { "@uploadthing/shared": "7.1.6", "file-selector": "0.6.0" }, "peerDependencies": { "next": "15.1.3", "react": "^17.0.2 || ^18.0.0 || ^19.0.0", "uploadthing": "^7.2.0" }, "optionalPeers": ["next"] }, "sha512-qnLL47+qBwXUtgu4DHWMQSNTEhX+JCqE0QmgZu1Hi85xxbmMYALO9O8xUQgujNWbuccCWRoXCznKUvS7pkM9Lw=="],
+ "@uploadthing/react": ["@uploadthing/react@7.2.1", "", { "dependencies": { "@uploadthing/shared": "7.1.6", "file-selector": "0.6.0" }, "peerDependencies": { "next": "*", "react": "^17.0.2 || ^18.0.0 || ^19.0.0", "uploadthing": "^7.2.0" }, "optionalPeers": ["next"] }, "sha512-X8iUJDOFyT9DonfZkxx3ngWvr4iz47tmXT7pC0209YT+Odfmq/sd/a0w7UcFrCiYIV1CL0xD97ynRDTN3LX48Q=="],
"@uploadthing/shared": ["@uploadthing/shared@7.1.6", "", { "dependencies": { "@uploadthing/mime-types": "0.3.4", "effect": "3.12.0", "sqids": "^0.3.0" } }, "sha512-7EyTxaGiTIdyqCwNQFryo0LR4eZgyClq31igrjGrXHkxSlXnurphybjzB6AVD73UBPVGCfbtOK0lloduhsMNlg=="],
@@ -1415,7 +1394,7 @@
"chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="],
- "chromium-bidi": ["chromium-bidi@1.2.0", "", { "dependencies": { "mitt": "^3.0.1", "zod": "^3.24.1" }, "peerDependencies": { "devtools-protocol": "*" } }, "sha512-XtdJ1GSN6S3l7tO7F77GhNsw0K367p0IsLYf2yZawCVAKKC3lUvDhPdMVrB2FNhmhfW43QGYbEX3Wg6q0maGwQ=="],
+ "chromium-bidi": ["chromium-bidi@1.3.0", "", { "dependencies": { "mitt": "^3.0.1", "zod": "^3.24.1" }, "peerDependencies": { "devtools-protocol": "*" } }, "sha512-G3x1bkST13kmbL7+dT/oRkNH/7C4UqG+0YQpmySrzXspyOhYgDNc6lhSGpj3cuexvH25WTENhTYq2Tt9JRXtbw=="],
"cjs-module-lexer": ["cjs-module-lexer@1.4.3", "", {}, "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q=="],
@@ -1503,8 +1482,6 @@
"css-to-mat": ["css-to-mat@1.1.1", "", { "dependencies": { "@daybrush/utils": "^1.13.0", "@scena/matrix": "^1.0.0" } }, "sha512-kvpxFYZb27jRd2vium35G7q5XZ2WJ9rWjDUMNT36M3Hc41qCrLXFM5iEKMGXcrPsKfXEN+8l/riB4QzwwwiEyQ=="],
- "css-what": ["css-what@6.1.0", "", {}, "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw=="],
-
"cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="],
"cssstyle": ["cssstyle@4.2.1", "", { "dependencies": { "@asamuzakjp/css-color": "^2.8.2", "rrweb-cssom": "^0.8.0" } }, "sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw=="],
@@ -1641,7 +1618,7 @@
"effect": ["effect@3.12.0", "", { "dependencies": { "fast-check": "^3.23.1" } }, "sha512-b/u9s3b9HfTo0qygVouegP0hkbiuxRIeaCe1ppf8P88hPyl6lKCbErtn7Az4jG7LuU7f0Wgm4c8WXbMcL2j8+g=="],
- "electron-to-chromium": ["electron-to-chromium@1.5.98", "", {}, "sha512-bI/LbtRBxU2GzK7KK5xxFd2y9Lf9XguHooPYbcXWy6wUoT8NMnffsvRhPmSeUHLSDKAEtKuTaEtK4Ms15zkIEA=="],
+ "electron-to-chromium": ["electron-to-chromium@1.5.101", "", {}, "sha512-L0ISiQrP/56Acgu4/i/kfPwWSgrzYZUnQrC0+QPFuhqlLP1Ir7qzPPDVS9BcKIyWTRU8+o6CC8dKw38tSWhYIA=="],
"embla-carousel": ["embla-carousel@8.5.2", "", {}, "sha512-xQ9oVLrun/eCG/7ru3R+I5bJ7shsD8fFwLEY7yPe27/+fDHCNj0OT5EoG5ZbFyOxOcG6yTwW8oTz/dWyFnyGpg=="],
@@ -1663,7 +1640,7 @@
"engine.io-parser": ["engine.io-parser@5.2.3", "", {}, "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q=="],
- "entities": ["entities@5.0.0", "", {}, "sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA=="],
+ "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
"es-abstract": ["es-abstract@1.23.9", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.3", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.0", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-regex": "^1.2.1", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.0", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.3", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.3", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.18" } }, "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA=="],
@@ -1785,7 +1762,7 @@
"forever-agent": ["forever-agent@0.6.1", "", {}, "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="],
- "form-data": ["form-data@4.0.1", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw=="],
+ "form-data": ["form-data@4.0.2", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.12" } }, "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w=="],
"form-data-encoder": ["form-data-encoder@1.7.2", "", {}, "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A=="],
@@ -2129,7 +2106,7 @@
"ky": ["ky@1.7.5", "", {}, "sha512-HzhziW6sc5m0pwi5M196+7cEBtbt0lCYi67wNsiwMUmz833wloE0gbzJPWKs1gliFKQb34huItDQX97LyOdPdA=="],
- "languine": ["languine@3.0.4", "", { "dependencies": { "@clack/prompts": "^0.10.0", "@trigger.dev/sdk": "3.3.13", "@trpc/client": "11.0.0-rc.700", "@trpc/server": "11.0.0-rc.700", "@types/xml2js": "^0.4.14", "chalk": "^5.4.1", "csv-parse": "^5.6.0", "csv-stringify": "^6.5.2", "dedent": "^1.5.3", "dotenv": "^16.4.7", "fast-glob": "^3.3.3", "fast-xml-parser": "^4.5.1", "gettext-parser": "^8.0.0", "jsdom": "^26.0.0", "json2php": "^0.0.12", "json5": "^2.2.3", "jsonrepair": "^3.11.2", "open": "^10.1.0", "php-parser": "^3.1.5", "plist": "^3.1.0", "preferred-pm": "^4.1.1", "properties": "^1.2.1", "rambda": "^9.4.2", "simple-git": "^3.27.0", "superjson": "^2.2.2", "table-layout": "^4.1.1", "xliff": "^6.2.1", "xml2js": "^0.6.2", "yaml": "^2.7.0", "zod": "^3.24.1" }, "bin": { "languine": "dist/index.js" } }, "sha512-2Uca/25GVHng0OWXBluXtdhaR890L0i2H1JElNE1iYQNSpRsaawry1crxXyShR7lIlG4YiEn5vrXA1pS5wkz1w=="],
+ "languine": ["languine@3.0.6", "", { "dependencies": { "@clack/prompts": "^0.10.0", "@trigger.dev/sdk": "3.3.13", "@trpc/client": "11.0.0-rc.700", "@trpc/server": "11.0.0-rc.700", "@types/xml2js": "^0.4.14", "chalk": "^5.4.1", "csv-parse": "^5.6.0", "csv-stringify": "^6.5.2", "dedent": "^1.5.3", "dotenv": "^16.4.7", "fast-glob": "^3.3.3", "fast-xml-parser": "^4.5.1", "gettext-parser": "^8.0.0", "jsdom": "^26.0.0", "json2php": "^0.0.12", "json5": "^2.2.3", "jsonrepair": "^3.11.2", "open": "^10.1.0", "php-parser": "^3.1.5", "plist": "^3.1.0", "preferred-pm": "^4.1.1", "properties": "^1.2.1", "rambda": "^9.4.2", "simple-git": "^3.27.0", "superjson": "^2.2.2", "table-layout": "^4.1.1", "xliff": "^6.2.1", "xml2js": "^0.6.2", "yaml": "^2.7.0", "zod": "^3.24.1" }, "bin": { "languine": "dist/index.js" } }, "sha512-iqc1Nnw0SqzLfWkgMnBApR4EwRoJu7zJTuuNp7owV/6duq3dxNao6LT3QDQXs1qoQBuZg5tTHoN9gUd6Efw6PA=="],
"leac": ["leac@0.6.0", "", {}, "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg=="],
@@ -2341,7 +2318,7 @@
"mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="],
- "nanoid": ["nanoid@5.0.9", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q=="],
+ "nanoid": ["nanoid@5.1.0", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-zDAl/llz8Ue/EblwSYwdxGBYfj46IM1dhjVi8dyp9LQffoIGxJEAHj2oeZ4uNcgycSRcQ83CnfcZqEJzVDLcDw=="],
"negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="],
@@ -2397,7 +2374,7 @@
"oauth-sign": ["oauth-sign@0.9.0", "", {}, "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="],
- "oauth4webapi": ["oauth4webapi@3.1.4", "", {}, "sha512-eVfN3nZNbok2s/ROifO0UAc5G8nRoLSbrcKJ09OqmucgnhXEfdIQOR4gq1eJH1rN3gV7rNw62bDEgftsgFtBEg=="],
+ "oauth4webapi": ["oauth4webapi@3.1.5", "", {}, "sha512-/V8tb1vgltQWIV8abvFfK1VVLhNcg5nYp8XTjwGc69eP66+rnHl0ttBLL5VrEJ/oNCrM37+JoVuHpiLNhnTdzw=="],
"object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="],
@@ -2539,9 +2516,9 @@
"postgres-range": ["postgres-range@1.1.4", "", {}, "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w=="],
- "posthog-js": ["posthog-js@1.217.2", "", { "dependencies": { "core-js": "^3.38.1", "fflate": "^0.4.8", "preact": "^10.19.3", "web-vitals": "^4.2.0" } }, "sha512-3KC+UjI0UT5zh8kAOVqe/AfvRjBMKynRIBQNlv0TXnfpZG0+h3r/1ONecDgCCGLs/a/55SJCExrugDlx+HPH3w=="],
+ "posthog-js": ["posthog-js@1.218.2", "", { "dependencies": { "core-js": "^3.38.1", "fflate": "^0.4.8", "preact": "^10.19.3", "web-vitals": "^4.2.0" } }, "sha512-C3IRqrdeYdFPiUmj2wI+k+Skr56Co9vhXufv3LirNQC6kAc5FVq//VQVK1i4Xf8PlZYsaqREl0QI5M/CihU3wA=="],
- "posthog-node": ["posthog-node@4.5.2", "", { "dependencies": { "axios": "^1.7.4" } }, "sha512-dncxqeXUDwjr4UD9pYanPWsG7jQPe01ctTm7KqKAi5a9GeH3cEICHyw5Qw2SPXfcA6MZLypuFoCTPET/NOfDzw=="],
+ "posthog-node": ["posthog-node@4.6.0", "", { "dependencies": { "axios": "^1.7.4" } }, "sha512-Dq6sBTeBXfK0Ez9OWAl+lhUcSInGUshxtoe0b26gFZtnV4byWTEZtwitKB6Xel9wYx3pNHixKOTSIHC/6a6CIA=="],
"preact": ["preact@10.25.4", "", {}, "sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA=="],
@@ -2629,7 +2606,7 @@
"punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="],
- "puppeteer-core": ["puppeteer-core@24.2.0", "", { "dependencies": { "@puppeteer/browsers": "2.7.1", "chromium-bidi": "1.2.0", "debug": "^4.4.0", "devtools-protocol": "0.0.1402036", "typed-query-selector": "^2.12.0", "ws": "^8.18.0" } }, "sha512-e4A4/xqWdd4kcE6QVHYhJ+Qlx/+XpgjP4d8OwBx0DJoY/nkIRhSgYmKQnv7+XSs1ofBstalt+XPGrkaz4FoXOQ=="],
+ "puppeteer-core": ["puppeteer-core@24.2.1", "", { "dependencies": { "@puppeteer/browsers": "2.7.1", "chromium-bidi": "1.3.0", "debug": "^4.4.0", "devtools-protocol": "0.0.1402036", "typed-query-selector": "^2.12.0", "ws": "^8.18.0" } }, "sha512-bCypUh3WXzETafv1TCFAjIUnI8BiQ/d+XvEfEXDLcIMm9CAvROqnBmbt79yBjwasoDZsgfXnUmIJU7Y27AalVQ=="],
"pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="],
@@ -2703,7 +2680,7 @@
"readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="],
- "readdirp": ["readdirp@4.1.1", "", {}, "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw=="],
+ "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="],
"recharts": ["recharts@2.15.1", "", { "dependencies": { "clsx": "^2.0.0", "eventemitter3": "^4.0.1", "lodash": "^4.17.21", "react-is": "^18.3.1", "react-smooth": "^4.0.4", "recharts-scale": "^0.4.4", "tiny-invariant": "^1.3.1", "victory-vendor": "^36.6.8" }, "peerDependencies": { "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-v8PUTUlyiDe56qUj82w/EDVuzEFXwEHp9/xOowGAZwfLjB9uAy3GllQVIYMWF6nU+qibx85WF75zD7AjqoT54Q=="],
@@ -2935,7 +2912,7 @@
"supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="],
- "svelte": ["svelte@5.20.0", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "@jridgewell/sourcemap-codec": "^1.5.0", "@types/estree": "^1.0.5", "acorn": "^8.12.1", "acorn-typescript": "^1.4.13", "aria-query": "^5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "esm-env": "^1.2.1", "esrap": "^1.4.3", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-04HJfFLaTwTyEKdPm3vYGdaD/8ZAHcd9SEBufq0FZNIrdzJWdM1usVdm4KIlzzDfM5+aMzio6BBhpXPoPGuMjg=="],
+ "svelte": ["svelte@5.20.1", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "@jridgewell/sourcemap-codec": "^1.5.0", "@types/estree": "^1.0.5", "acorn": "^8.12.1", "acorn-typescript": "^1.4.13", "aria-query": "^5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "esm-env": "^1.2.1", "esrap": "^1.4.3", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-aCARru2WTdzJl55Ws8SK27+kvQwd8tijl4kY7NoDUXUHtTHhxMa8Lf6QNZKmU7cuPu3jjFloDO1j5HgYJNIIWg=="],
"swr": ["swr@2.3.2", "", { "dependencies": { "dequal": "^2.0.3", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-RosxFpiabojs75IwQ316DGoDRmOqtiAj0tg8wCcbEu4CiLZBs/a9QNtHV7TUfDXmmlgqij/NqzKq/eLelyv9xA=="],
@@ -3069,6 +3046,8 @@
"unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="],
+ "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="],
+
"undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="],
"unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="],
@@ -3091,7 +3070,7 @@
"update-browserslist-db": ["update-browserslist-db@1.1.2", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg=="],
- "uploadthing": ["uploadthing@7.5.0", "", { "dependencies": { "@effect/platform": "0.72.0", "@standard-schema/spec": "1.0.0-beta.4", "@uploadthing/mime-types": "0.3.4", "@uploadthing/shared": "7.1.6", "effect": "3.12.0" }, "peerDependencies": { "express": "*", "h3": "*", "tailwindcss": "^3.0.0 || ^4.0.0-beta.0" }, "optionalPeers": ["express", "h3", "tailwindcss"] }, "sha512-GRYpNEx/dvL2TA8aPeAHXE8x0Ywvx4FmTWNpZ0hwh7qE/YLzonU/LxeL6tjfmLPe672IEwV2M4FkhtIZDTs6kQ=="],
+ "uploadthing": ["uploadthing@7.5.1", "", { "dependencies": { "@effect/platform": "0.72.0", "@standard-schema/spec": "1.0.0-beta.4", "@uploadthing/mime-types": "0.3.4", "@uploadthing/shared": "7.1.6", "effect": "3.12.0" }, "peerDependencies": { "express": "*", "h3": "*", "tailwindcss": "^3.0.0 || ^4.0.0-beta.0" }, "optionalPeers": ["express", "h3", "tailwindcss"] }, "sha512-p5VxxT4i7LYLiKE+FgtMnIztvDfgZ1IptY62PF2YpgvxFccIbX/OXx8OcW/psjKCmPC7PXEt3e9d+bduYJOmDw=="],
"uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="],
@@ -3223,8 +3202,6 @@
"yjs": ["yjs@13.6.23", "", { "dependencies": { "lib0": "^0.2.99" } }, "sha512-ExtnT5WIOVpkL56bhLeisG/N5c4fmzKn4k0ROVfJa5TY2QHbH7F0Wu2T5ZhR7ErsFWQEFafyrnSI8TPKVF9Few=="],
- "zeed-dom": ["zeed-dom@0.15.1", "", { "dependencies": { "css-what": "^6.1.0", "entities": "^5.0.0" } }, "sha512-dtZ0aQSFyZmoJS0m06/xBN1SazUBPL5HpzlAcs/KcRW0rzadYw12deQBjeMhGKMMeGEp7bA9vmikMLaO4exBcg=="],
-
"zimmerframe": ["zimmerframe@1.1.2", "", {}, "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w=="],
"zod": ["zod@3.24.2", "", {}, "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ=="],
@@ -3259,13 +3236,13 @@
"@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
- "@babel/generator/@babel/parser": ["@babel/parser@7.26.8", "", { "dependencies": { "@babel/types": "^7.26.8" }, "bin": "./bin/babel-parser.js" }, "sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw=="],
+ "@babel/generator/@babel/parser": ["@babel/parser@7.26.9", "", { "dependencies": { "@babel/types": "^7.26.9" }, "bin": "./bin/babel-parser.js" }, "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A=="],
"@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
- "@babel/template/@babel/parser": ["@babel/parser@7.26.8", "", { "dependencies": { "@babel/types": "^7.26.8" }, "bin": "./bin/babel-parser.js" }, "sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw=="],
+ "@babel/template/@babel/parser": ["@babel/parser@7.26.9", "", { "dependencies": { "@babel/types": "^7.26.9" }, "bin": "./bin/babel-parser.js" }, "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A=="],
- "@babel/traverse/@babel/parser": ["@babel/parser@7.26.8", "", { "dependencies": { "@babel/types": "^7.26.8" }, "bin": "./bin/babel-parser.js" }, "sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw=="],
+ "@babel/traverse/@babel/parser": ["@babel/parser@7.26.9", "", { "dependencies": { "@babel/types": "^7.26.9" }, "bin": "./bin/babel-parser.js" }, "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A=="],
"@browserbasehq/sdk/@types/node": ["@types/node@18.19.76", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-yvR7Q9LdPz2vGpmpJX5LolrgRdWvB67MJKDPSgIIzpFbaf9a1j/f5DnLp5VDyHGMR0QZHlTr1afsD87QCXFHKw=="],
@@ -3293,7 +3270,7 @@
"@novu/ntfr-client/zod": ["zod@3.22.3", "", {}, "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug=="],
- "@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.1", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-I4PHczeujhQAQv6ZBzqHYEUiggZL4IdSMixtVD3EYqbdrjujE7kRfI5QohjlPoJm8BvenoW5YaTMWRrbpot6tg=="],
+ "@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="],
"@opentelemetry/sdk-node/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.52.1", "", { "dependencies": { "@opentelemetry/api-logs": "0.52.1", "@types/shimmer": "^1.0.2", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw=="],
@@ -3329,19 +3306,15 @@
"@trigger.dev/core/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="],
- "@trigger.dev/react-hooks/@trigger.dev/core": ["@trigger.dev/core@3.3.15", "", { "dependencies": { "@electric-sql/client": "1.0.0-beta.1", "@google-cloud/precise-date": "^4.0.0", "@jsonhero/path": "^1.0.21", "@opentelemetry/api": "1.9.0", "@opentelemetry/api-logs": "0.52.1", "@opentelemetry/exporter-logs-otlp-http": "0.52.1", "@opentelemetry/exporter-trace-otlp-http": "0.52.1", "@opentelemetry/instrumentation": "0.52.1", "@opentelemetry/resources": "1.25.1", "@opentelemetry/sdk-logs": "0.52.1", "@opentelemetry/sdk-node": "0.52.1", "@opentelemetry/sdk-trace-base": "1.25.1", "@opentelemetry/sdk-trace-node": "1.25.1", "@opentelemetry/semantic-conventions": "1.25.1", "dequal": "^2.0.3", "eventsource": "^3.0.5", "eventsource-parser": "^3.0.0", "execa": "^8.0.1", "humanize-duration": "^3.27.3", "jose": "^5.4.0", "nanoid": "^3.3.4", "socket.io-client": "4.7.5", "superjson": "^2.2.1", "zod": "3.23.8", "zod-error": "1.5.0", "zod-validation-error": "^1.5.0" } }, "sha512-q5Vei+eBsDgO4QxMfYNiaS1v6hziw+QzfX9x3eCeqEisx32XPoLHumgHFiZlvABTY2sayJbuuMH0HC6Nr3D60A=="],
-
"@trigger.dev/sdk/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="],
"@trigger.dev/sdk/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="],
"@uploadthing/react/file-selector": ["file-selector@0.6.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw=="],
- "@vue/compiler-core/@babel/parser": ["@babel/parser@7.26.8", "", { "dependencies": { "@babel/types": "^7.26.8" }, "bin": "./bin/babel-parser.js" }, "sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw=="],
-
- "@vue/compiler-core/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
+ "@vue/compiler-core/@babel/parser": ["@babel/parser@7.26.9", "", { "dependencies": { "@babel/types": "^7.26.9" }, "bin": "./bin/babel-parser.js" }, "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A=="],
- "@vue/compiler-sfc/@babel/parser": ["@babel/parser@7.26.8", "", { "dependencies": { "@babel/types": "^7.26.8" }, "bin": "./bin/babel-parser.js" }, "sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw=="],
+ "@vue/compiler-sfc/@babel/parser": ["@babel/parser@7.26.9", "", { "dependencies": { "@babel/types": "^7.26.9" }, "bin": "./bin/babel-parser.js" }, "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A=="],
"accepts/negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="],
@@ -3371,8 +3344,6 @@
"data-urls/whatwg-url": ["whatwg-url@14.1.1", "", { "dependencies": { "tr46": "^5.0.0", "webidl-conversions": "^7.0.0" } }, "sha512-mDGf9diDad/giZ/Sm9Xi2YcyzaFpbdLpJPr+E9fSkyQ7KpQD4SdFcugkRQYzhmfI4KeV4Qpnn2sKPdo+kmsgRQ=="],
- "dom-serializer/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
-
"editorconfig/commander": ["commander@10.0.1", "", {}, "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug=="],
"editorconfig/minimatch": ["minimatch@9.0.1", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w=="],
@@ -3417,8 +3388,6 @@
"get-uri/data-uri-to-buffer": ["data-uri-to-buffer@6.0.2", "", {}, "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw=="],
- "htmlparser2/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
-
"inquirer/ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="],
"ip-address/jsbn": ["jsbn@1.1.0", "", {}, "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="],
@@ -3445,8 +3414,6 @@
"markdown-it/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
- "markdown-it/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
-
"md-to-react-email/marked": ["marked@7.0.4", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-t8eP0dXRJMtMvBojtkcsA7n48BkauktUKzfkPSCq85ZMTJ0v76Rke4DYz01omYpPTUh4p/f7HePgRo3ebG8+QQ=="],
"mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="],
@@ -3479,8 +3446,6 @@
"parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="],
- "parse5/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
-
"path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
"plist/xmlbuilder": ["xmlbuilder@15.1.1", "", {}, "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="],
@@ -3551,9 +3516,9 @@
"verror/core-util-is": ["core-util-is@1.0.2", "", {}, "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="],
- "web/@trigger.dev/build": ["@trigger.dev/build@3.3.15", "", { "dependencies": { "@trigger.dev/core": "3.3.15", "pkg-types": "^1.1.3", "tinyglobby": "^0.2.2", "tsconfck": "3.1.3" } }, "sha512-4PpAl8PNZ3bQNlxakEcmiLZT+PRqsqU/fshrAHNvQ2K/4TLheuPdLvzy1EVwVSj3ADHT5R1TP9PWIP72FS+VBg=="],
+ "web/@trigger.dev/build": ["@trigger.dev/build@3.3.16", "", { "dependencies": { "@trigger.dev/core": "3.3.16", "pkg-types": "^1.1.3", "tinyglobby": "^0.2.2", "tsconfck": "3.1.3" } }, "sha512-PATGwN8bvDlOESmOgJO3mofulxActkSClBCdlsTT3NYzT6umFFXOieWzq5fLrPpaHsujrkazTERSiHOEdxEXxw=="],
- "web/@trigger.dev/sdk": ["@trigger.dev/sdk@3.3.15", "", { "dependencies": { "@opentelemetry/api": "1.9.0", "@opentelemetry/api-logs": "0.52.1", "@opentelemetry/semantic-conventions": "1.25.1", "@trigger.dev/core": "3.3.15", "chalk": "^5.2.0", "cronstrue": "^2.21.0", "debug": "^4.3.4", "evt": "^2.4.13", "slug": "^6.0.0", "terminal-link": "^3.0.0", "ulid": "^2.3.0", "uuid": "^9.0.0", "ws": "^8.11.0" }, "peerDependencies": { "zod": "^3.0.0" } }, "sha512-W03G6GbTabkwI2UgUQCmM/0xjQ2bcpoBx2Xn56la3UgkC5pb8H6nEtmcLodr7YFGAycnHvHpwShRQ/SFAeBtNQ=="],
+ "web/@trigger.dev/sdk": ["@trigger.dev/sdk@3.3.16", "", { "dependencies": { "@opentelemetry/api": "1.9.0", "@opentelemetry/api-logs": "0.52.1", "@opentelemetry/semantic-conventions": "1.25.1", "@trigger.dev/core": "3.3.16", "chalk": "^5.2.0", "cronstrue": "^2.21.0", "debug": "^4.3.4", "evt": "^2.4.13", "slug": "^6.0.0", "terminal-link": "^3.0.0", "ulid": "^2.3.0", "uncrypto": "^0.1.3", "uuid": "^9.0.0", "ws": "^8.11.0" }, "peerDependencies": { "zod": "^3.0.0" } }, "sha512-vObHP0P5ugyZNKiAOLTD1rWeHKiX97K82aj06HaOceRZxwztbBnuhD3AXAODISvroKguySUcrLDCMOSTpXUung=="],
"web/lucide-react": ["lucide-react@0.469.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-28vvUnnKQ/dBwiCQtwJw7QauYnE7yd2Cyp4tTTJpvglX4EMpbflcdBgrgToX2j71B3YvugK/NH3BGUk+E/p/Fw=="],
@@ -3599,34 +3564,24 @@
"@slack/bolt/@slack/web-api/eventemitter3": ["eventemitter3@3.1.2", "", {}, "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q=="],
- "@slack/bolt/@slack/web-api/form-data": ["form-data@2.5.2", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12", "safe-buffer": "^5.2.1" } }, "sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q=="],
+ "@slack/bolt/@slack/web-api/form-data": ["form-data@2.5.3", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.35", "safe-buffer": "^5.2.1" } }, "sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ=="],
"@slack/bolt/@slack/web-api/is-stream": ["is-stream@1.1.0", "", {}, "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ=="],
"@slack/oauth/@slack/web-api/eventemitter3": ["eventemitter3@3.1.2", "", {}, "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q=="],
- "@slack/oauth/@slack/web-api/form-data": ["form-data@2.5.2", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12", "safe-buffer": "^5.2.1" } }, "sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q=="],
+ "@slack/oauth/@slack/web-api/form-data": ["form-data@2.5.3", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.35", "safe-buffer": "^5.2.1" } }, "sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ=="],
"@slack/oauth/@slack/web-api/is-stream": ["is-stream@1.1.0", "", {}, "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ=="],
"@slack/socket-mode/@slack/web-api/eventemitter3": ["eventemitter3@3.1.2", "", {}, "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q=="],
- "@slack/socket-mode/@slack/web-api/form-data": ["form-data@2.5.2", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12", "safe-buffer": "^5.2.1" } }, "sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q=="],
+ "@slack/socket-mode/@slack/web-api/form-data": ["form-data@2.5.3", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.35", "safe-buffer": "^5.2.1" } }, "sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ=="],
"@slack/socket-mode/@slack/web-api/is-stream": ["is-stream@1.1.0", "", {}, "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ=="],
"@trigger.dev/core/socket.io-client/debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="],
- "@trigger.dev/react-hooks/@trigger.dev/core/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.52.1", "", { "dependencies": { "@opentelemetry/api-logs": "0.52.1", "@types/shimmer": "^1.0.2", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw=="],
-
- "@trigger.dev/react-hooks/@trigger.dev/core/eventsource-parser": ["eventsource-parser@3.0.0", "", {}, "sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA=="],
-
- "@trigger.dev/react-hooks/@trigger.dev/core/nanoid": ["nanoid@3.3.8", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w=="],
-
- "@trigger.dev/react-hooks/@trigger.dev/core/socket.io-client": ["socket.io-client@4.7.5", "", { "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", "engine.io-client": "~6.5.2", "socket.io-parser": "~4.2.4" } }, "sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ=="],
-
- "@trigger.dev/react-hooks/@trigger.dev/core/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="],
-
"ai/@ai-sdk/provider-utils/nanoid": ["nanoid@3.3.8", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w=="],
"are-we-there-yet/readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="],
@@ -3735,16 +3690,14 @@
"tailwindcss/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="],
- "web/@trigger.dev/build/@trigger.dev/core": ["@trigger.dev/core@3.3.15", "", { "dependencies": { "@electric-sql/client": "1.0.0-beta.1", "@google-cloud/precise-date": "^4.0.0", "@jsonhero/path": "^1.0.21", "@opentelemetry/api": "1.9.0", "@opentelemetry/api-logs": "0.52.1", "@opentelemetry/exporter-logs-otlp-http": "0.52.1", "@opentelemetry/exporter-trace-otlp-http": "0.52.1", "@opentelemetry/instrumentation": "0.52.1", "@opentelemetry/resources": "1.25.1", "@opentelemetry/sdk-logs": "0.52.1", "@opentelemetry/sdk-node": "0.52.1", "@opentelemetry/sdk-trace-base": "1.25.1", "@opentelemetry/sdk-trace-node": "1.25.1", "@opentelemetry/semantic-conventions": "1.25.1", "dequal": "^2.0.3", "eventsource": "^3.0.5", "eventsource-parser": "^3.0.0", "execa": "^8.0.1", "humanize-duration": "^3.27.3", "jose": "^5.4.0", "nanoid": "^3.3.4", "socket.io-client": "4.7.5", "superjson": "^2.2.1", "zod": "3.23.8", "zod-error": "1.5.0", "zod-validation-error": "^1.5.0" } }, "sha512-q5Vei+eBsDgO4QxMfYNiaS1v6hziw+QzfX9x3eCeqEisx32XPoLHumgHFiZlvABTY2sayJbuuMH0HC6Nr3D60A=="],
+ "web/@trigger.dev/build/@trigger.dev/core": ["@trigger.dev/core@3.3.16", "", { "dependencies": { "@electric-sql/client": "1.0.0-beta.1", "@google-cloud/precise-date": "^4.0.0", "@jsonhero/path": "^1.0.21", "@opentelemetry/api": "1.9.0", "@opentelemetry/api-logs": "0.52.1", "@opentelemetry/exporter-logs-otlp-http": "0.52.1", "@opentelemetry/exporter-trace-otlp-http": "0.52.1", "@opentelemetry/instrumentation": "0.52.1", "@opentelemetry/resources": "1.25.1", "@opentelemetry/sdk-logs": "0.52.1", "@opentelemetry/sdk-node": "0.52.1", "@opentelemetry/sdk-trace-base": "1.25.1", "@opentelemetry/sdk-trace-node": "1.25.1", "@opentelemetry/semantic-conventions": "1.25.1", "dequal": "^2.0.3", "eventsource": "^3.0.5", "eventsource-parser": "^3.0.0", "execa": "^8.0.1", "humanize-duration": "^3.27.3", "jose": "^5.4.0", "nanoid": "^3.3.4", "socket.io-client": "4.7.5", "superjson": "^2.2.1", "zod": "3.23.8", "zod-error": "1.5.0", "zod-validation-error": "^1.5.0" } }, "sha512-OCxl9A7QvqLnGlnl195p8lw0pTY7hJQyaY35Sdy2GuYcm28ktwzx3F2Iu3ulgcmDlKQTpf1VZsSA5wP/enRRpQ=="],
- "web/@trigger.dev/sdk/@trigger.dev/core": ["@trigger.dev/core@3.3.15", "", { "dependencies": { "@electric-sql/client": "1.0.0-beta.1", "@google-cloud/precise-date": "^4.0.0", "@jsonhero/path": "^1.0.21", "@opentelemetry/api": "1.9.0", "@opentelemetry/api-logs": "0.52.1", "@opentelemetry/exporter-logs-otlp-http": "0.52.1", "@opentelemetry/exporter-trace-otlp-http": "0.52.1", "@opentelemetry/instrumentation": "0.52.1", "@opentelemetry/resources": "1.25.1", "@opentelemetry/sdk-logs": "0.52.1", "@opentelemetry/sdk-node": "0.52.1", "@opentelemetry/sdk-trace-base": "1.25.1", "@opentelemetry/sdk-trace-node": "1.25.1", "@opentelemetry/semantic-conventions": "1.25.1", "dequal": "^2.0.3", "eventsource": "^3.0.5", "eventsource-parser": "^3.0.0", "execa": "^8.0.1", "humanize-duration": "^3.27.3", "jose": "^5.4.0", "nanoid": "^3.3.4", "socket.io-client": "4.7.5", "superjson": "^2.2.1", "zod": "3.23.8", "zod-error": "1.5.0", "zod-validation-error": "^1.5.0" } }, "sha512-q5Vei+eBsDgO4QxMfYNiaS1v6hziw+QzfX9x3eCeqEisx32XPoLHumgHFiZlvABTY2sayJbuuMH0HC6Nr3D60A=="],
+ "web/@trigger.dev/sdk/@trigger.dev/core": ["@trigger.dev/core@3.3.16", "", { "dependencies": { "@electric-sql/client": "1.0.0-beta.1", "@google-cloud/precise-date": "^4.0.0", "@jsonhero/path": "^1.0.21", "@opentelemetry/api": "1.9.0", "@opentelemetry/api-logs": "0.52.1", "@opentelemetry/exporter-logs-otlp-http": "0.52.1", "@opentelemetry/exporter-trace-otlp-http": "0.52.1", "@opentelemetry/instrumentation": "0.52.1", "@opentelemetry/resources": "1.25.1", "@opentelemetry/sdk-logs": "0.52.1", "@opentelemetry/sdk-node": "0.52.1", "@opentelemetry/sdk-trace-base": "1.25.1", "@opentelemetry/sdk-trace-node": "1.25.1", "@opentelemetry/semantic-conventions": "1.25.1", "dequal": "^2.0.3", "eventsource": "^3.0.5", "eventsource-parser": "^3.0.0", "execa": "^8.0.1", "humanize-duration": "^3.27.3", "jose": "^5.4.0", "nanoid": "^3.3.4", "socket.io-client": "4.7.5", "superjson": "^2.2.1", "zod": "3.23.8", "zod-error": "1.5.0", "zod-validation-error": "^1.5.0" } }, "sha512-OCxl9A7QvqLnGlnl195p8lw0pTY7hJQyaY35Sdy2GuYcm28ktwzx3F2Iu3ulgcmDlKQTpf1VZsSA5wP/enRRpQ=="],
"web/@trigger.dev/sdk/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="],
"web/@trigger.dev/sdk/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="],
- "@trigger.dev/react-hooks/@trigger.dev/core/socket.io-client/debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="],
-
"cmdk/@radix-ui/react-dialog/@radix-ui/react-dismissable-layer/@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.0.0", "", { "dependencies": { "@babel/runtime": "^7.13.10" }, "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0" } }, "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg=="],
"cmdk/@radix-ui/react-dialog/@radix-ui/react-dismissable-layer/@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.0.0", "", { "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-use-callback-ref": "1.0.0" }, "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0" } }, "sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg=="],
diff --git a/packages/ui/src/components/command.tsx b/packages/ui/src/components/command.tsx
index d01b869c05..abf218d8f3 100644
--- a/packages/ui/src/components/command.tsx
+++ b/packages/ui/src/components/command.tsx
@@ -43,7 +43,7 @@ const CommandInput = React.forwardRef<
=10.0.0", "@types/node@>=12", "@types/node@>=13.7.0", "@types/node@>=18.0.0", "@types/node@>=8.1.0", "@types/node@^22.10.6", "@types/node@^22.13.2":
- version "22.13.2"
- resolved "https://registry.npmjs.org/@types/node/-/node-22.13.2.tgz"
- integrity sha512-Z+r8y3XL9ZpI2EY52YYygAFmo2/oWfNSj4BCpAXE2McAexDk8VcnBMGC9Djn9gTKt4d2T/hhXqmPzo4hfIXtTg==
+ version "22.13.4"
+ resolved "https://registry.npmjs.org/@types/node/-/node-22.13.4.tgz"
+ integrity sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==
dependencies:
undici-types "~6.20.0"
@@ -3773,8 +3748,8 @@
resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz"
integrity sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==
dependencies:
- form-data "^4.0.0"
"@types/node" "*"
+ form-data "^4.0.0"
"@types/pg@8.11.6":
version "8.11.6"
@@ -3911,9 +3886,9 @@
integrity sha512-EB0o0a4y++UJFMLqS8LDVhSQgXUllG6t5fwl5cbmOM0Uay8YY5Nc/JjFwzJ8wccdIKz4oYwQW7EOSfUyaMPbfw==
"@uploadthing/react@^7.2.0":
- version "7.2.0"
- resolved "https://registry.npmjs.org/@uploadthing/react/-/react-7.2.0.tgz"
- integrity sha512-qnLL47+qBwXUtgu4DHWMQSNTEhX+JCqE0QmgZu1Hi85xxbmMYALO9O8xUQgujNWbuccCWRoXCznKUvS7pkM9Lw==
+ version "7.2.1"
+ resolved "https://registry.npmjs.org/@uploadthing/react/-/react-7.2.1.tgz"
+ integrity sha512-X8iUJDOFyT9DonfZkxx3ngWvr4iz47tmXT7pC0209YT+Odfmq/sd/a0w7UcFrCiYIV1CL0xD97ynRDTN3LX48Q==
dependencies:
"@uploadthing/shared" "7.1.6"
file-selector "0.6.0"
@@ -4667,10 +4642,10 @@ chokidar@^4.0.1:
dependencies:
readdirp "^4.0.1"
-chromium-bidi@1.2.0:
- version "1.2.0"
- resolved "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-1.2.0.tgz"
- integrity sha512-XtdJ1GSN6S3l7tO7F77GhNsw0K367p0IsLYf2yZawCVAKKC3lUvDhPdMVrB2FNhmhfW43QGYbEX3Wg6q0maGwQ==
+chromium-bidi@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-1.3.0.tgz"
+ integrity sha512-G3x1bkST13kmbL7+dT/oRkNH/7C4UqG+0YQpmySrzXspyOhYgDNc6lhSGpj3cuexvH25WTENhTYq2Tt9JRXtbw==
dependencies:
mitt "^3.0.1"
zod "^3.24.1"
@@ -4815,11 +4790,12 @@ commander@11.1.0:
resolved "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz"
integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==
-"comp.ai@apps/app":
+comp.ai@^workspace:apps/app:
version "workspace:apps/app"
resolved "workspace:apps/app"
devDependencies:
"@bubba/db" "workspace:*"
+ devDependencies:
"@trigger.dev/build" "3.3.13"
"@types/node" "^22.13.2"
"@types/react" "^19.0.8"
@@ -4829,7 +4805,9 @@ commander@11.1.0:
typescript "^5.7.3"
dependencies:
"@browserbasehq/sdk" "^2.3.0"
+ dependencies:
"@bubba/notifications" "workspace:*"
+ dependencies:
"@date-fns/tz" "^1.2.0"
"@hookform/resolvers" "^3.10.0"
"@liveblocks/client" "^2.18.1"
@@ -4844,17 +4822,6 @@ commander@11.1.0:
"@prisma/instrumentation" "^6.3.1"
"@tanstack/react-query" "^5.66.0"
"@tanstack/react-table" "^8.21.2"
- "@tiptap/extension-bullet-list" "^2.11.5"
- "@tiptap/extension-heading" "^2.11.5"
- "@tiptap/extension-list-item" "^2.11.5"
- "@tiptap/extension-ordered-list" "^2.11.5"
- "@tiptap/extension-table" "^2.11.5"
- "@tiptap/extension-table-cell" "^2.11.5"
- "@tiptap/extension-table-header" "^2.11.5"
- "@tiptap/extension-table-row" "^2.11.5"
- "@tiptap/html" "^2.11.5"
- "@tiptap/react" "^2.11.5"
- "@tiptap/starter-kit" "^2.11.5"
"@trigger.dev/react-hooks" "3.3.13"
"@trigger.dev/sdk" "3.3.13"
"@types/xml2js" "^0.4.14"
@@ -5066,11 +5033,6 @@ css-to-mat@^1.1.1:
"@daybrush/utils" "^1.13.0"
"@scena/matrix" "^1.0.0"
-css-what@^6.1.0:
- version "6.1.0"
- resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz"
- integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
-
cssesc@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz"
@@ -5526,9 +5488,9 @@ effect@3.12.0, effect@^3.12.0:
fast-check "^3.23.1"
electron-to-chromium@^1.5.73:
- version "1.5.98"
- resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.98.tgz"
- integrity sha512-bI/LbtRBxU2GzK7KK5xxFd2y9Lf9XguHooPYbcXWy6wUoT8NMnffsvRhPmSeUHLSDKAEtKuTaEtK4Ms15zkIEA==
+ version "1.5.101"
+ resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.101.tgz"
+ integrity sha512-L0ISiQrP/56Acgu4/i/kfPwWSgrzYZUnQrC0+QPFuhqlLP1Ir7qzPPDVS9BcKIyWTRU8+o6CC8dKw38tSWhYIA==
embla-carousel@8.5.2:
version "8.5.2"
@@ -5618,11 +5580,6 @@ entities@^4.2.0, entities@^4.4.0, entities@^4.5.0:
resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
-entities@^5.0.0:
- version "5.0.0"
- resolved "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz"
- integrity sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==
-
es-abstract@^1.22.1, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9:
version "1.23.9"
resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz"
@@ -6188,22 +6145,24 @@ form-data@~2.3.2:
mime-types "^2.1.12"
form-data@^2.5.0:
- version "2.5.2"
- resolved "https://registry.npmjs.org/form-data/-/form-data-2.5.2.tgz"
- integrity sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==
+ version "2.5.3"
+ resolved "https://registry.npmjs.org/form-data/-/form-data-2.5.3.tgz"
+ integrity sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ==
dependencies:
asynckit "^0.4.0"
- combined-stream "^1.0.6"
- mime-types "^2.1.12"
+ combined-stream "^1.0.8"
+ es-set-tostringtag "^2.1.0"
+ mime-types "^2.1.35"
safe-buffer "^5.2.1"
form-data@^4.0.0, form-data@^4.0.1:
- version "4.0.1"
- resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz"
- integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==
+ version "4.0.2"
+ resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz"
+ integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
+ es-set-tostringtag "^2.1.0"
mime-types "^2.1.12"
form-data-encoder@1.7.2:
@@ -7512,9 +7471,9 @@ ky@^1.2.0, ky@^1.7.5:
integrity sha512-HzhziW6sc5m0pwi5M196+7cEBtbt0lCYi67wNsiwMUmz833wloE0gbzJPWKs1gliFKQb34huItDQX97LyOdPdA==
languine@^3.0.4:
- version "3.0.4"
- resolved "https://registry.npmjs.org/languine/-/languine-3.0.4.tgz"
- integrity sha512-2Uca/25GVHng0OWXBluXtdhaR890L0i2H1JElNE1iYQNSpRsaawry1crxXyShR7lIlG4YiEn5vrXA1pS5wkz1w==
+ version "3.0.6"
+ resolved "https://registry.npmjs.org/languine/-/languine-3.0.6.tgz"
+ integrity sha512-iqc1Nnw0SqzLfWkgMnBApR4EwRoJu7zJTuuNp7owV/6duq3dxNao6LT3QDQXs1qoQBuZg5tTHoN9gUd6Efw6PA==
dependencies:
"@clack/prompts" "^0.10.0"
"@trigger.dev/sdk" "3.3.13"
@@ -8283,7 +8242,7 @@ mime-db@1.52.0:
resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
-mime-types@2.1.35, mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34:
+mime-types@2.1.35, mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34:
version "2.1.35"
resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
@@ -8423,9 +8382,9 @@ nanoid@^3.3.4, nanoid@^3.3.6, nanoid@^3.3.7, nanoid@^3.3.8:
integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==
nanoid@^5.0.7:
- version "5.0.9"
- resolved "https://registry.npmjs.org/nanoid/-/nanoid-5.0.9.tgz"
- integrity sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==
+ version "5.1.0"
+ resolved "https://registry.npmjs.org/nanoid/-/nanoid-5.1.0.tgz"
+ integrity sha512-zDAl/llz8Ue/EblwSYwdxGBYfj46IM1dhjVi8dyp9LQffoIGxJEAHj2oeZ4uNcgycSRcQ83CnfcZqEJzVDLcDw==
negotiator@0.6.3:
version "0.6.3"
@@ -8470,7 +8429,7 @@ next@15.0.4:
postcss "8.4.31"
styled-jsx "5.1.6"
-next@15.1.3, "next@>= 14.0.0", next@>=12, next@>=13.2.0, next@>=14.2.0, "next@^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0", "next@^13.0.0 || ^14.0.0 || ^15.0.0", "next@^14.0.0-0 || ^15.0.0-0", next@^15.1.7:
+next@*, "next@>= 14.0.0", next@>=12, next@>=13.2.0, next@>=14.2.0, "next@^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0", "next@^13.0.0 || ^14.0.0 || ^15.0.0", "next@^14.0.0-0 || ^15.0.0-0", next@^15.1.7:
version "15.1.7"
resolved "https://registry.npmjs.org/next/-/next-15.1.7.tgz"
integrity sha512-GNeINPGS9c6OZKCvKypbL8GTsT5GhWPp4DM0fzkXJuXMilOO2EeFxuAY6JZbtk6XIl6Ws10ag3xRINDjSO5+wg==
@@ -8715,9 +8674,9 @@ oauth-sign@~0.9.0:
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
oauth4webapi@^3.0.0, oauth4webapi@^3.1.1:
- version "3.1.4"
- resolved "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.1.4.tgz"
- integrity sha512-eVfN3nZNbok2s/ROifO0UAc5G8nRoLSbrcKJ09OqmucgnhXEfdIQOR4gq1eJH1rN3gV7rNw62bDEgftsgFtBEg==
+ version "3.1.5"
+ resolved "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.1.5.tgz"
+ integrity sha512-/V8tb1vgltQWIV8abvFfK1VVLhNcg5nYp8XTjwGc69eP66+rnHl0ttBLL5VrEJ/oNCrM37+JoVuHpiLNhnTdzw==
object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
@@ -9243,9 +9202,9 @@ postgres-range@^1.1.1:
integrity sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==
posthog-js@^1.215.3, posthog-js@^1.217.2:
- version "1.217.2"
- resolved "https://registry.npmjs.org/posthog-js/-/posthog-js-1.217.2.tgz"
- integrity sha512-3KC+UjI0UT5zh8kAOVqe/AfvRjBMKynRIBQNlv0TXnfpZG0+h3r/1ONecDgCCGLs/a/55SJCExrugDlx+HPH3w==
+ version "1.218.2"
+ resolved "https://registry.npmjs.org/posthog-js/-/posthog-js-1.218.2.tgz"
+ integrity sha512-C3IRqrdeYdFPiUmj2wI+k+Skr56Co9vhXufv3LirNQC6kAc5FVq//VQVK1i4Xf8PlZYsaqREl0QI5M/CihU3wA==
dependencies:
core-js "^3.38.1"
fflate "^0.4.8"
@@ -9253,9 +9212,9 @@ posthog-js@^1.215.3, posthog-js@^1.217.2:
web-vitals "^4.2.0"
posthog-node@^4.4.1, posthog-node@^4.5.2:
- version "4.5.2"
- resolved "https://registry.npmjs.org/posthog-node/-/posthog-node-4.5.2.tgz"
- integrity sha512-dncxqeXUDwjr4UD9pYanPWsG7jQPe01ctTm7KqKAi5a9GeH3cEICHyw5Qw2SPXfcA6MZLypuFoCTPET/NOfDzw==
+ version "4.6.0"
+ resolved "https://registry.npmjs.org/posthog-node/-/posthog-node-4.6.0.tgz"
+ integrity sha512-Dq6sBTeBXfK0Ez9OWAl+lhUcSInGUshxtoe0b26gFZtnV4byWTEZtwitKB6Xel9wYx3pNHixKOTSIHC/6a6CIA==
dependencies:
axios "^1.7.4"
@@ -9612,12 +9571,12 @@ punycode.js@^2.3.1:
integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==
puppeteer-core@^24.2.0:
- version "24.2.0"
- resolved "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.2.0.tgz"
- integrity sha512-e4A4/xqWdd4kcE6QVHYhJ+Qlx/+XpgjP4d8OwBx0DJoY/nkIRhSgYmKQnv7+XSs1ofBstalt+XPGrkaz4FoXOQ==
+ version "24.2.1"
+ resolved "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.2.1.tgz"
+ integrity sha512-bCypUh3WXzETafv1TCFAjIUnI8BiQ/d+XvEfEXDLcIMm9CAvROqnBmbt79yBjwasoDZsgfXnUmIJU7Y27AalVQ==
dependencies:
"@puppeteer/browsers" "2.7.1"
- chromium-bidi "1.2.0"
+ chromium-bidi "1.3.0"
debug "^4.4.0"
devtools-protocol "0.0.1402036"
typed-query-selector "^2.12.0"
@@ -9983,9 +9942,9 @@ readdirp@~3.6.0:
picomatch "^2.2.1"
readdirp@^4.0.1:
- version "4.1.1"
- resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz"
- integrity sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==
+ version "4.1.2"
+ resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz"
+ integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==
recharts@^2.12.7:
version "2.15.1"
@@ -10974,9 +10933,9 @@ supports-preserve-symlinks-flag@^1.0.0:
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
"svelte@^3.0.0 || ^4.0.0 || ^5.0.0", "svelte@^4.0.0 || ^5.0.0-next.0":
- version "5.20.0"
- resolved "https://registry.npmjs.org/svelte/-/svelte-5.20.0.tgz"
- integrity sha512-04HJfFLaTwTyEKdPm3vYGdaD/8ZAHcd9SEBufq0FZNIrdzJWdM1usVdm4KIlzzDfM5+aMzio6BBhpXPoPGuMjg==
+ version "5.20.1"
+ resolved "https://registry.npmjs.org/svelte/-/svelte-5.20.1.tgz"
+ integrity sha512-aCARru2WTdzJl55Ws8SK27+kvQwd8tijl4kY7NoDUXUHtTHhxMa8Lf6QNZKmU7cuPu3jjFloDO1j5HgYJNIIWg==
dependencies:
"@ampproject/remapping" "^2.3.0"
"@jridgewell/sourcemap-codec" "^1.5.0"
@@ -11472,6 +11431,11 @@ unbox-primitive@^1.1.0:
has-symbols "^1.1.0"
which-boxed-primitive "^1.1.1"
+uncrypto@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz"
+ integrity sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==
+
undici-types@~5.26.4:
version "5.26.5"
resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz"
@@ -11559,9 +11523,9 @@ update-browserslist-db@^1.1.1:
picocolors "^1.1.1"
uploadthing@^7.2.0, uploadthing@^7.5.0:
- version "7.5.0"
- resolved "https://registry.npmjs.org/uploadthing/-/uploadthing-7.5.0.tgz"
- integrity sha512-GRYpNEx/dvL2TA8aPeAHXE8x0Ywvx4FmTWNpZ0hwh7qE/YLzonU/LxeL6tjfmLPe672IEwV2M4FkhtIZDTs6kQ==
+ version "7.5.1"
+ resolved "https://registry.npmjs.org/uploadthing/-/uploadthing-7.5.1.tgz"
+ integrity sha512-p5VxxT4i7LYLiKE+FgtMnIztvDfgZ1IptY62PF2YpgvxFccIbX/OXx8OcW/psjKCmPC7PXEt3e9d+bduYJOmDw==
dependencies:
"@effect/platform" "0.72.0"
"@standard-schema/spec" "1.0.0-beta.4"
@@ -11755,7 +11719,7 @@ wcwidth@^1.0.1:
dependencies:
defaults "^1.0.3"
-"web@apps/web":
+web@^workspace:apps/web:
version "workspace:apps/web"
resolved "workspace:apps/web"
devDependencies:
@@ -12119,14 +12083,6 @@ yjs@^13.0.0, yjs@^13.5.38, yjs@^13.6.1, yjs@^13.6.18:
dependencies:
lib0 "^0.2.99"
-zeed-dom@^0.15.1:
- version "0.15.1"
- resolved "https://registry.npmjs.org/zeed-dom/-/zeed-dom-0.15.1.tgz"
- integrity sha512-dtZ0aQSFyZmoJS0m06/xBN1SazUBPL5HpzlAcs/KcRW0rzadYw12deQBjeMhGKMMeGEp7bA9vmikMLaO4exBcg==
- dependencies:
- css-what "^6.1.0"
- entities "^5.0.0"
-
zimmerframe@^1.1.2:
version "1.1.2"
resolved "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz"