From 5601d795afb3667ce904fd8821819a81c27529e5 Mon Sep 17 00:00:00 2001 From: Lewis Carhart Date: Sat, 15 Feb 2025 20:53:06 +0000 Subject: [PATCH 1/9] fix: type errors on editor --- .../src/components/editor/advanced-editor.tsx | 10 +++- .../generative/ai-completion-command.tsx | 9 ++-- .../generative/ai-selector-commands.tsx | 52 ++++++++++--------- .../editor/generative/ai-selector.tsx | 13 ++--- apps/app/src/locales/en.ts | 19 +++++++ packages/ui/src/components/command.tsx | 2 +- packages/ui/src/text-editor.css | 1 + 7 files changed, 69 insertions(+), 37 deletions(-) diff --git a/apps/app/src/components/editor/advanced-editor.tsx b/apps/app/src/components/editor/advanced-editor.tsx index 7c9973764b..fe2abd12e6 100644 --- a/apps/app/src/components/editor/advanced-editor.tsx +++ b/apps/app/src/components/editor/advanced-editor.tsx @@ -26,12 +26,18 @@ import { NodeSelector } from "./selectors/node-selector"; import { TextButtons } from "./selectors/text-buttons"; import { slashCommand, suggestionItems } from "./slash-command"; import { Threads } from "./threads"; +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"; export default function AdvancedEditor() { const liveblocks = useLiveblocksExtension({ offlineSupport_experimental: true, }); + //@ts-ignore tiptap errors const extensions: Extensions = [ ...defaultExtensions, slashCommand, @@ -47,7 +53,7 @@ export default function AdvancedEditor() { const syncStatus = useSyncStatus({ smooth: true }); return ( -
+
{syncStatus === "synchronizing" ? "Unsaved" : "Saved"} @@ -76,7 +82,7 @@ export default function AdvancedEditor() { handleImageDrop(view, event, moved, uploadFn), attributes: { class: - "prose dark:prose-invert prose-headings:font-title font-default focus:outline-none max-w-full", + "overflow-hidden prose dark:prose-invert prose-headings:font-title font-default focus:outline-none max-w-full", }, }} onUpdate={({ editor }) => diff --git a/apps/app/src/components/editor/generative/ai-completion-command.tsx b/apps/app/src/components/editor/generative/ai-completion-command.tsx index 254e6ed12f..66536773e1 100644 --- a/apps/app/src/components/editor/generative/ai-completion-command.tsx +++ b/apps/app/src/components/editor/generative/ai-completion-command.tsx @@ -1,3 +1,4 @@ +import { useI18n } from "@/locales/client"; import { CommandGroup, CommandItem, CommandSeparator } from "@bubba/ui/command"; import { Check, TextQuote, TrashIcon } from "lucide-react"; import { useEditor } from "novel"; @@ -10,6 +11,8 @@ const AICompletionCommands = ({ onDiscard: () => void; }) => { const { editor } = useEditor(); + const t = useI18n(); + return ( <> @@ -37,7 +40,7 @@ const AICompletionCommands = ({ }} > - Replace selection + {t("editor.ai_selector.replace")} - Insert below + {t("editor.ai_selector.insert")} @@ -64,7 +67,7 @@ const AICompletionCommands = ({ - Discard + {t("editor.ai_selector.discard")} diff --git a/apps/app/src/components/editor/generative/ai-selector-commands.tsx b/apps/app/src/components/editor/generative/ai-selector-commands.tsx index da4a2d0831..c4e8f26abd 100644 --- a/apps/app/src/components/editor/generative/ai-selector-commands.tsx +++ b/apps/app/src/components/editor/generative/ai-selector-commands.tsx @@ -1,3 +1,4 @@ +import { useI18n } from "@/locales/client"; import { CommandGroup, CommandItem, CommandSeparator } from "@bubba/ui/command"; import { ArrowDownWideNarrow, @@ -9,36 +10,37 @@ import { 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(); + const t = useI18n(); + + const options = [ + { + value: "improve", + label: t("editor.ai_selector.improve"), + icon: RefreshCcwDot, + }, + + { + value: "fix", + label: t("editor.ai_selector.fix"), + icon: CheckCheck, + }, + { + value: "shorter", + label: t("editor.ai_selector.shorter"), + icon: ArrowDownWideNarrow, + }, + { + value: "longer", + label: t("editor.ai_selector.longer"), + icon: WrapText, + }, + ]; return ( <> @@ -82,7 +84,7 @@ const AISelectorCommands = ({ onSelect }: AISelectorCommandsProps) => { className="gap-2 px-4" > - Continue writing + {t("editor.ai_selector.continue")} diff --git a/apps/app/src/components/editor/generative/ai-selector.tsx b/apps/app/src/components/editor/generative/ai-selector.tsx index 82cbc8431a..2f7ba45857 100644 --- a/apps/app/src/components/editor/generative/ai-selector.tsx +++ b/apps/app/src/components/editor/generative/ai-selector.tsx @@ -1,5 +1,6 @@ "use client"; +import { useI18n } from "@/locales/client"; import { Button } from "@bubba/ui/button"; import { Command, CommandInput } from "@bubba/ui/command"; import { ScrollArea } from "@bubba/ui/scroll-area"; @@ -14,7 +15,6 @@ 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; @@ -22,15 +22,16 @@ interface AISelectorProps { } export function AISelector({ onOpenChange }: AISelectorProps) { + const t = useI18n(); + 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."); + toast.error(t("editor.ai.request_limit_reached")); return; } }, @@ -56,7 +57,7 @@ export function AISelector({ onOpenChange }: AISelectorProps) { {isLoading && (
- AI is thinking + {t("editor.ai.thinking")}
@@ -71,8 +72,8 @@ export function AISelector({ onOpenChange }: AISelectorProps) { autoFocus placeholder={ hasCompletion - ? "Tell AI what to do next" - : "Ask AI to edit or generate..." + ? t("editor.ai.tell_ai_what_to_do_next") + : t("editor.ai.edit_or_generate") } onFocus={() => { if (!editor) { 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/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< Date: Sat, 15 Feb 2025 20:53:47 +0000 Subject: [PATCH 2/9] chore: (i18n) update translations using Languine.ai --- apps/app/languine.lock | 13 +++++++++++++ apps/app/src/locales/es.ts | 19 +++++++++++++++++++ apps/app/src/locales/fr.ts | 19 +++++++++++++++++++ apps/app/src/locales/no.ts | 19 +++++++++++++++++++ apps/app/src/locales/pt.ts | 19 +++++++++++++++++++ 5 files changed, 89 insertions(+) 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/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; From d7dbb8a8364388e375a2c4a53ec6b22b69dc4031 Mon Sep 17 00:00:00 2001 From: Lewis Carhart Date: Sat, 15 Feb 2025 20:54:02 +0000 Subject: [PATCH 3/9] fix: type errors on editor --- apps/app/src/components/editor/advanced-editor.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/app/src/components/editor/advanced-editor.tsx b/apps/app/src/components/editor/advanced-editor.tsx index fe2abd12e6..1ed860cd00 100644 --- a/apps/app/src/components/editor/advanced-editor.tsx +++ b/apps/app/src/components/editor/advanced-editor.tsx @@ -70,6 +70,7 @@ export default function AdvancedEditor() {
Date: Sat, 15 Feb 2025 21:07:32 +0000 Subject: [PATCH 4/9] fix: type errors --- apps/app/package.json | 11 - .../src/components/editor/advanced-editor.tsx | 4 +- .../generative/ai-selector-commands.tsx | 2 +- bun.lock | 123 +++---- yarn.lock | 318 ++++++++---------- 5 files changed, 178 insertions(+), 280 deletions(-) diff --git a/apps/app/package.json b/apps/app/package.json index 8f350a730d..2aa6e6a7ff 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -26,17 +26,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", diff --git a/apps/app/src/components/editor/advanced-editor.tsx b/apps/app/src/components/editor/advanced-editor.tsx index 1ed860cd00..ca0fca060a 100644 --- a/apps/app/src/components/editor/advanced-editor.tsx +++ b/apps/app/src/components/editor/advanced-editor.tsx @@ -3,7 +3,7 @@ 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 type { Extensions } from "@tiptap/react"; import { EditorCommand, EditorCommandEmpty, @@ -70,7 +70,7 @@ export default function AdvancedEditor() {
{ } const slice = editor.state.selection.content(); - const text = editor.storage.markdown.serializer.serialize( + const text = editor.storage.markdown?.serializer?.serialize( slice.content, ); onSelect(text, value); 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/yarn.lock b/yarn.lock index c7b7bbb2fa..eab585eb99 100644 --- a/yarn.lock +++ b/yarn.lock @@ -182,13 +182,13 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.24.5", "@babel/generator@^7.26.8": - version "7.26.8" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.26.8.tgz" - integrity sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA== +"@babel/generator@^7.24.5", "@babel/generator@^7.26.9": + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz" + integrity sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg== dependencies: - "@babel/parser" "^7.26.8" - "@babel/types" "^7.26.8" + "@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" @@ -237,58 +237,58 @@ integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== "@babel/helpers@^7.24.5": - version "7.26.7" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz" - integrity sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A== + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz" + integrity sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA== dependencies: - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.7" + "@babel/template" "^7.26.9" + "@babel/types" "^7.26.9" "@babel/parser@7.24.5", "@babel/parser@^7.24.5": version "7.24.5" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz" integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg== -"@babel/parser@^7.25.3", "@babel/parser@^7.26.8": - version "7.26.8" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.26.8.tgz" - integrity sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw== +"@babel/parser@^7.25.3", "@babel/parser@^7.26.9": + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz" + integrity sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A== dependencies: - "@babel/types" "^7.26.8" + "@babel/types" "^7.26.9" "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.20.13", "@babel/runtime@^7.26.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": - version "7.26.7" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz" - integrity sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ== + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz" + integrity sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.24.0", "@babel/template@^7.25.9", "@babel/template@^7.26.8": - version "7.26.8" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.26.8.tgz" - integrity sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q== +"@babel/template@^7.24.0", "@babel/template@^7.26.9": + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz" + integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA== dependencies: "@babel/code-frame" "^7.26.2" - "@babel/parser" "^7.26.8" - "@babel/types" "^7.26.8" + "@babel/parser" "^7.26.9" + "@babel/types" "^7.26.9" "@babel/traverse@^7.24.5", "@babel/traverse@^7.25.9": - version "7.26.8" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.8.tgz" - integrity sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA== + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz" + integrity sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg== 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" + "@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" -"@babel/types@^7.24.5", "@babel/types@^7.25.9", "@babel/types@^7.26.7", "@babel/types@^7.26.8": - version "7.26.8" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.26.8.tgz" - integrity sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA== +"@babel/types@^7.24.5", "@babel/types@^7.25.9", "@babel/types@^7.26.9": + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz" + integrity sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw== dependencies: "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" @@ -360,18 +360,19 @@ formdata-node "^4.3.2" node-fetch "^2.6.7" -"@bubba/analytics@packages/analytics": +"@bubba/analytics@^workspace:packages/analytics": version "workspace:packages/analytics" resolved "workspace:packages/analytics" dependencies: posthog-js "^1.215.3" posthog-node "^4.4.1" -"@bubba/db@packages/db", "@bubba/db@workspace:*": +"@bubba/db@^workspace:packages/db", "@bubba/db@workspace:*": version "workspace:packages/db" resolved "workspace:packages/db" devDependencies: "@bubba/tsconfig" "workspace:*" + devDependencies: typescript "^5.7.3" dependencies: "@auth/prisma-adapter" "^2.7.4" @@ -381,7 +382,7 @@ "@prisma/extension-accelerate" "^1.2.2" prisma "^6.3.1" -"@bubba/email@packages/email": +"@bubba/email@^workspace:packages/email": version "workspace:packages/email" resolved "workspace:packages/email" devDependencies: @@ -401,7 +402,7 @@ react-email "3.0.4" responsive-react-email "^0.0.5" -"@bubba/integrations@packages/integrations": +"@bubba/integrations@^workspace:packages/integrations": version "workspace:packages/integrations" resolved "workspace:packages/integrations" devDependencies: @@ -415,14 +416,14 @@ sharp "^0.33.5" zod "^3.24.2" -"@bubba/kv@packages/kv": +"@bubba/kv@^workspace:packages/kv": version "workspace:packages/kv" resolved "workspace:packages/kv" dependencies: "@upstash/redis" "^1.34.2" server-only "^0.0.1" -"@bubba/notifications@packages/notifications", "@bubba/notifications@workspace:*": +"@bubba/notifications@^workspace:packages/notifications", "@bubba/notifications@workspace:*": version "workspace:packages/notifications" resolved "workspace:packages/notifications" devDependencies: @@ -431,11 +432,11 @@ "@novu/node" "^2.0.1" nanoid "^5.0.7" -"@bubba/tsconfig@packages/tsconfig", "@bubba/tsconfig@workspace:*": +"@bubba/tsconfig@^workspace:packages/tsconfig", "@bubba/tsconfig@workspace:*": version "workspace:packages/tsconfig" resolved "workspace:packages/tsconfig" -"@bubba/ui@packages/ui", "@bubba/ui@workspace:*": +"@bubba/ui@^workspace:packages/ui", "@bubba/ui@workspace:*": version "workspace:packages/ui" resolved "workspace:packages/ui" devDependencies: @@ -499,7 +500,7 @@ use-callback-ref "^1.3.3" vaul "^1.0.0" -"@bubba/utils@packages/utils", "@bubba/utils@workspace:*": +"@bubba/utils@^workspace:packages/utils", "@bubba/utils@workspace:*": version "workspace:packages/utils" resolved "workspace:packages/utils" devDependencies: @@ -1556,10 +1557,10 @@ dependencies: "@opentelemetry/api" "^1.0.0" -"@opentelemetry/api-logs@0.57.1": - version "0.57.1" - resolved "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.1.tgz" - integrity sha512-I4PHczeujhQAQv6ZBzqHYEUiggZL4IdSMixtVD3EYqbdrjujE7kRfI5QohjlPoJm8BvenoW5YaTMWRrbpot6tg== +"@opentelemetry/api-logs@0.57.2": + version "0.57.2" + resolved "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz" + integrity sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A== dependencies: "@opentelemetry/api" "^1.3.0" @@ -1643,11 +1644,11 @@ shimmer "^1.2.1" "@opentelemetry/instrumentation@^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0": - version "0.57.1" - resolved "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.57.1.tgz" - integrity sha512-SgHEKXoVxOjc20ZYusPG3Fh+RLIZTSa4x8QtD3NfgAUDyqdFFS9W1F2ZVbZkqDCdyMcQG02Ok4duUGLHJXHgbA== + version "0.57.2" + resolved "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.57.2.tgz" + integrity sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg== dependencies: - "@opentelemetry/api-logs" "0.57.1" + "@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" @@ -2855,9 +2856,9 @@ integrity sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg== "@rollup/rollup-darwin-arm64@^4.18.1": - version "4.34.6" - resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz" - integrity sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg== + version "4.34.7" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.7.tgz" + integrity sha512-jq87CjmgL9YIKvs8ybtIC98s/M3HdbqXhllcy9EdLV0yMg1DpxES2gr65nNy7ObNo/vZ/MrOTxt0bE5LinL6mA== "@scena/dragscroll@^1.4.0": version "1.4.0" @@ -3277,26 +3278,6 @@ resolved "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.11.5.tgz" integrity sha512-PVfUiCqrjvsLpbIoVlegSY8RlkR64F1Rr2RYmiybQfGbg+AkSZXDeO0eIrc03//4gua7D9DfIozHmAKv1KN3ow== -"@tiptap/extension-table@^2.11.5": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-table/-/extension-table-2.11.5.tgz" - integrity sha512-NKXLhKWdAdURklm98YkCd2ai4fh8jY8HS/+X2s/2QiQt8Z98CU1keCm35fJEEExM234iB/hCqG5vY4JgTc0Tvw== - -"@tiptap/extension-table-cell@^2.11.5": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-table-cell/-/extension-table-cell-2.11.5.tgz" - integrity sha512-S967Au0pgeULstP3FaasOf/LEh72p61Ooh1PcUMF/az4x8EeGgpcEUARpVUxsGxLFvogv6LmhPHZdtcGgdHcBw== - -"@tiptap/extension-table-header@^2.11.5": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-table-header/-/extension-table-header-2.11.5.tgz" - integrity sha512-O1iBtzZP1XZDi4h1Xmgq1T63il+fpKPvBIMZ0JJH9TyCw5i5rcrMLL2dyy5zaWK3BFRJuYBNSke4c+VWnr/g6w== - -"@tiptap/extension-table-row@^2.11.5": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-table-row/-/extension-table-row-2.11.5.tgz" - integrity sha512-+/VWhCuW24BcM5aaIc/f0bC6ZR1Q5gnuqw13MIo7gyPx7iIY6BXK8roGiZSs8wYAN4uBEf3EKFm0bSZwQuAeyg== - "@tiptap/extension-task-item@^2.11.2": version "2.11.5" resolved "https://registry.npmjs.org/@tiptap/extension-task-item/-/extension-task-item-2.11.5.tgz" @@ -3327,13 +3308,6 @@ resolved "https://registry.npmjs.org/@tiptap/extension-youtube/-/extension-youtube-2.11.5.tgz" integrity sha512-9XEH/zx/FlL/liJsncstcze98C73iupCbWlhAfC8+9O0wDmHEwaFyLSj+5LDqozWwzFnJmFOy7uZXfOY90kWGg== -"@tiptap/html@^2.11.5": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/html/-/html-2.11.5.tgz" - integrity sha512-B7ZuFV4Z6JytBhcj4865yGldPite+xX7O3X4hBUNoPpxhDf7BD+lSOgeZabZteQPnP6TKKqFT50q/Wll2t8eGQ== - dependencies: - zeed-dom "^0.15.1" - "@tiptap/pm@^2.11.2", "@tiptap/pm@^2.11.5", "@tiptap/pm@^2.7.0", "@tiptap/pm@^2.7.2", "@tiptap/pm@^2.9.1": version "2.11.5" resolved "https://registry.npmjs.org/@tiptap/pm/-/pm-2.11.5.tgz" @@ -3358,7 +3332,7 @@ prosemirror-transform "^1.10.2" prosemirror-view "^1.37.0" -"@tiptap/react@^2.11.2", "@tiptap/react@^2.11.5", "@tiptap/react@^2.7.2", "@tiptap/react@^2.9.1": +"@tiptap/react@^2.11.2", "@tiptap/react@^2.7.2", "@tiptap/react@^2.9.1": version "2.11.5" resolved "https://registry.npmjs.org/@tiptap/react/-/react-2.11.5.tgz" integrity sha512-Dp8eHL1G+R/C4+QzAczyb3t1ovexEIZx9ln7SGEM+cT1KHKAw9XGPRgsp92+NQaYI+EdEb/YqoBOSzQcd18/OQ== @@ -3369,7 +3343,7 @@ fast-deep-equal "^3" use-sync-external-store "^1" -"@tiptap/starter-kit@^2.11.2", "@tiptap/starter-kit@^2.11.5", "@tiptap/starter-kit@^2.9.1": +"@tiptap/starter-kit@^2.11.2", "@tiptap/starter-kit@^2.9.1": version "2.11.5" resolved "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.11.5.tgz" integrity sha512-SLI7Aj2ruU1t//6Mk8f+fqW+18uTqpdfLUJYgwu0CkqBckrkRZYZh6GVLk/02k3H2ki7QkFxiFbZrdbZdng0JA== @@ -3417,16 +3391,16 @@ tsconfck "3.1.3" "@trigger.dev/build@^3.3.15": - version "3.3.15" - resolved "https://registry.npmjs.org/@trigger.dev/build/-/build-3.3.15.tgz" - integrity sha512-4PpAl8PNZ3bQNlxakEcmiLZT+PRqsqU/fshrAHNvQ2K/4TLheuPdLvzy1EVwVSj3ADHT5R1TP9PWIP72FS+VBg== + version "3.3.16" + resolved "https://registry.npmjs.org/@trigger.dev/build/-/build-3.3.16.tgz" + integrity sha512-PATGwN8bvDlOESmOgJO3mofulxActkSClBCdlsTT3NYzT6umFFXOieWzq5fLrPpaHsujrkazTERSiHOEdxEXxw== dependencies: - "@trigger.dev/core" "3.3.15" + "@trigger.dev/core" "3.3.16" pkg-types "^1.1.3" tinyglobby "^0.2.2" tsconfck "3.1.3" -"@trigger.dev/core@3.3.13": +"@trigger.dev/core@3.3.13", "@trigger.dev/core@^3.3.13": version "3.3.13" resolved "https://registry.npmjs.org/@trigger.dev/core/-/core-3.3.13.tgz" integrity sha512-3VU4YMS+RVCkfVXeUKSWlkVszgFK44tIknR9sHLYgetI714L3tgH47XBXJ3+/ZV5Y9Vvv6O6pRIuV7EEhzbexg== @@ -3458,10 +3432,10 @@ zod-error "1.5.0" zod-validation-error "^1.5.0" -"@trigger.dev/core@3.3.15", "@trigger.dev/core@^3.3.13": - version "3.3.15" - resolved "https://registry.npmjs.org/@trigger.dev/core/-/core-3.3.15.tgz" - integrity sha512-q5Vei+eBsDgO4QxMfYNiaS1v6hziw+QzfX9x3eCeqEisx32XPoLHumgHFiZlvABTY2sayJbuuMH0HC6Nr3D60A== +"@trigger.dev/core@3.3.16": + version "3.3.16" + resolved "https://registry.npmjs.org/@trigger.dev/core/-/core-3.3.16.tgz" + integrity sha512-OCxl9A7QvqLnGlnl195p8lw0pTY7hJQyaY35Sdy2GuYcm28ktwzx3F2Iu3ulgcmDlKQTpf1VZsSA5wP/enRRpQ== dependencies: "@electric-sql/client" "1.0.0-beta.1" "@google-cloud/precise-date" "^4.0.0" @@ -3518,14 +3492,14 @@ ws "^8.11.0" "@trigger.dev/sdk@^3.3.15": - version "3.3.15" - resolved "https://registry.npmjs.org/@trigger.dev/sdk/-/sdk-3.3.15.tgz" - integrity sha512-W03G6GbTabkwI2UgUQCmM/0xjQ2bcpoBx2Xn56la3UgkC5pb8H6nEtmcLodr7YFGAycnHvHpwShRQ/SFAeBtNQ== + version "3.3.16" + resolved "https://registry.npmjs.org/@trigger.dev/sdk/-/sdk-3.3.16.tgz" + integrity sha512-vObHP0P5ugyZNKiAOLTD1rWeHKiX97K82aj06HaOceRZxwztbBnuhD3AXAODISvroKguySUcrLDCMOSTpXUung== dependencies: "@opentelemetry/api" "1.9.0" "@opentelemetry/api-logs" "0.52.1" "@opentelemetry/semantic-conventions" "1.25.1" - "@trigger.dev/core" "3.3.15" + "@trigger.dev/core" "3.3.16" chalk "^5.2.0" cronstrue "^2.21.0" debug "^4.3.4" @@ -3533,6 +3507,7 @@ 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" @@ -3762,9 +3737,9 @@ undici-types "~5.26.4" "@types/node@*", "@types/node@>=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" From 50bb0acb4ea96ab4144499c0d9f12dac2ed2ff17 Mon Sep 17 00:00:00 2001 From: Lewis Carhart Date: Sat, 15 Feb 2025 21:13:57 +0000 Subject: [PATCH 5/9] fix: type errors --- apps/app/src/components/editor/generative/ai-selector.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/app/src/components/editor/generative/ai-selector.tsx b/apps/app/src/components/editor/generative/ai-selector.tsx index 2f7ba45857..685bf3b845 100644 --- a/apps/app/src/components/editor/generative/ai-selector.tsx +++ b/apps/app/src/components/editor/generative/ai-selector.tsx @@ -97,7 +97,7 @@ export function AISelector({ onOpenChange }: AISelectorProps) { }).then(() => setInputValue("")); const slice = editor.state.selection.content(); - const text = editor.storage.markdown.serializer.serialize( + const text = editor.storage?.markdown?.serializer?.serialize( slice.content, ); @@ -116,7 +116,7 @@ export function AISelector({ onOpenChange }: AISelectorProps) { return; } - editor.chain().unsetHighlight().focus().run(); + editor.chain().unsetHighlight()?.focus()?.run(); onOpenChange(false); }} completion={completion} From 960b8e3ef527cbaf930c4205ac75153c9663f836 Mon Sep 17 00:00:00 2001 From: Lewis Carhart Date: Sat, 15 Feb 2025 21:22:10 +0000 Subject: [PATCH 6/9] feat: removed tiptap, novel because they suck --- apps/app/package.json | 11 - .../(dashboard)/policies/[id]/layout.tsx | 5 +- .../(app)/(dashboard)/policies/[id]/page.tsx | 8 +- .../(dashboard)/policies/[id]/providers.tsx | 59 --- .../src/components/editor/advanced-editor.tsx | 146 ------- apps/app/src/components/editor/avatars.tsx | 43 --- .../src/components/editor/default-content.ts | 356 ------------------ apps/app/src/components/editor/extensions.ts | 140 ------- .../generative/ai-completion-command.tsx | 77 ---- .../generative/ai-selector-commands.tsx | 94 ----- .../editor/generative/ai-selector.tsx | 135 ------- .../generative/generative-menu-switch.tsx | 58 --- .../app/src/components/editor/image-upload.ts | 60 --- .../editor/selectors/add-comment-selector.tsx | 29 -- .../editor/selectors/color-selector.tsx | 192 ---------- .../editor/selectors/link-selector.tsx | 108 ------ .../editor/selectors/math-selector.tsx | 35 -- .../editor/selectors/node-selector.tsx | 147 -------- .../editor/selectors/text-buttons.tsx | 84 ----- .../src/components/editor/slash-command.tsx | 196 ---------- apps/app/src/components/editor/spinner.tsx | 37 -- apps/app/src/components/editor/threads.tsx | 36 -- .../editor/ui/icons/crazy-spinner.tsx | 11 - .../editor/ui/icons/font-default.tsx | 15 - .../components/editor/ui/icons/font-mono.tsx | 22 -- .../components/editor/ui/icons/font-serif.tsx | 23 -- .../src/components/editor/ui/icons/index.tsx | 3 - .../editor/ui/icons/loading-circle.tsx | 20 - .../src/components/editor/ui/icons/magic.tsx | 32 -- 29 files changed, 2 insertions(+), 2180 deletions(-) delete mode 100644 apps/app/src/app/[locale]/(app)/(dashboard)/policies/[id]/providers.tsx delete mode 100644 apps/app/src/components/editor/advanced-editor.tsx delete mode 100644 apps/app/src/components/editor/avatars.tsx delete mode 100644 apps/app/src/components/editor/default-content.ts delete mode 100644 apps/app/src/components/editor/extensions.ts delete mode 100644 apps/app/src/components/editor/generative/ai-completion-command.tsx delete mode 100644 apps/app/src/components/editor/generative/ai-selector-commands.tsx delete mode 100644 apps/app/src/components/editor/generative/ai-selector.tsx delete mode 100644 apps/app/src/components/editor/generative/generative-menu-switch.tsx delete mode 100644 apps/app/src/components/editor/image-upload.ts delete mode 100644 apps/app/src/components/editor/selectors/add-comment-selector.tsx delete mode 100644 apps/app/src/components/editor/selectors/color-selector.tsx delete mode 100644 apps/app/src/components/editor/selectors/link-selector.tsx delete mode 100644 apps/app/src/components/editor/selectors/math-selector.tsx delete mode 100644 apps/app/src/components/editor/selectors/node-selector.tsx delete mode 100644 apps/app/src/components/editor/selectors/text-buttons.tsx delete mode 100644 apps/app/src/components/editor/slash-command.tsx delete mode 100644 apps/app/src/components/editor/spinner.tsx delete mode 100644 apps/app/src/components/editor/threads.tsx delete mode 100644 apps/app/src/components/editor/ui/icons/crazy-spinner.tsx delete mode 100644 apps/app/src/components/editor/ui/icons/font-default.tsx delete mode 100644 apps/app/src/components/editor/ui/icons/font-mono.tsx delete mode 100644 apps/app/src/components/editor/ui/icons/font-serif.tsx delete mode 100644 apps/app/src/components/editor/ui/icons/index.tsx delete mode 100644 apps/app/src/components/editor/ui/icons/loading-circle.tsx delete mode 100644 apps/app/src/components/editor/ui/icons/magic.tsx diff --git a/apps/app/package.json b/apps/app/package.json index 2aa6e6a7ff..560dc976ae 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -14,13 +14,6 @@ "@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", @@ -28,7 +21,6 @@ "@tanstack/react-table": "^8.21.2", "@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", @@ -47,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", @@ -67,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..6dc3a03810 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 @@ -5,7 +5,6 @@ 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 +26,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() {
- }> - - + Editor
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/components/editor/advanced-editor.tsx b/apps/app/src/components/editor/advanced-editor.tsx deleted file mode 100644 index ca0fca060a..0000000000 --- a/apps/app/src/components/editor/advanced-editor.tsx +++ /dev/null @@ -1,146 +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 } 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"; -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"; - -export default function AdvancedEditor() { - const liveblocks = useLiveblocksExtension({ - offlineSupport_experimental: true, - }); - - //@ts-ignore tiptap errors - 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: - "overflow-hidden 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 ( -
- {name} -
- ); -} 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 66536773e1..0000000000 --- a/apps/app/src/components/editor/generative/ai-completion-command.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import { useI18n } from "@/locales/client"; -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(); - const t = useI18n(); - - return ( - <> - - { - if (!editor) { - return; - } - - const selection = editor.view.state.selection; - - editor - .chain() - .focus() - .insertContentAt( - { - from: selection.from, - to: selection.to, - }, - completion, - ) - .run(); - }} - > - - {t("editor.ai_selector.replace")} - - { - if (!editor) { - return; - } - - const selection = editor.view.state.selection; - editor - .chain() - .focus() - .insertContentAt(selection.to + 1, completion) - .run(); - }} - > - - {t("editor.ai_selector.insert")} - - - - - - - - {t("editor.ai_selector.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 dcbf2ee374..0000000000 --- a/apps/app/src/components/editor/generative/ai-selector-commands.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { useI18n } from "@/locales/client"; -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"; - -interface AISelectorCommandsProps { - onSelect: (value: string, option: string) => void; -} - -const AISelectorCommands = ({ onSelect }: AISelectorCommandsProps) => { - const { editor } = useEditor(); - const t = useI18n(); - - const options = [ - { - value: "improve", - label: t("editor.ai_selector.improve"), - icon: RefreshCcwDot, - }, - - { - value: "fix", - label: t("editor.ai_selector.fix"), - icon: CheckCheck, - }, - { - value: "shorter", - label: t("editor.ai_selector.shorter"), - icon: ArrowDownWideNarrow, - }, - { - value: "longer", - label: t("editor.ai_selector.longer"), - icon: WrapText, - }, - ]; - - 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" - > - - {t("editor.ai_selector.continue")} - - - - ); -}; - -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 685bf3b845..0000000000 --- a/apps/app/src/components/editor/generative/ai-selector.tsx +++ /dev/null @@ -1,135 +0,0 @@ -"use client"; - -import { useI18n } from "@/locales/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"; - -interface AISelectorProps { - open: boolean; - onOpenChange: (open: boolean) => void; -} - -export function AISelector({ onOpenChange }: AISelectorProps) { - const t = useI18n(); - - const { editor } = useEditor(); - const [inputValue, setInputValue] = useState(""); - - const { completion, complete, isLoading } = useCompletion({ - api: "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/api/generate", - onResponse: (response) => { - if (response.status === 429) { - toast.error(t("editor.ai.request_limit_reached")); - return; - } - }, - onError: (e) => { - toast.error(e.message); - }, - }); - - const hasCompletion = completion.length > 0; - - return ( - - {hasCompletion && ( -
- -
- {completion} -
-
-
- )} - - {isLoading && ( -
- - {t("editor.ai.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" - > -
-
- A -
- {name} -
-
- ))} -
-
-
- 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" - > -
-
- A -
- {name} -
- {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 ( - - - - - -
{ - const target = e.currentTarget as HTMLFormElement; - e.preventDefault(); - const input = target[0] as HTMLInputElement; - const url = getUrlFromString(input.value); - if (url) { - //@ts-ignore - editor.chain().focus().setLink({ href: url }).run(); - onOpenChange(false); - } - }} - className="flex p-1 " - > - - {editor.getAttributes("link").href ? ( - - ) : ( - - )} -
-
-
- ); -}; 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" - > -
-
- -
- {item.name} -
- {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 ( - - Font Default Icon - - - - ); -} 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 ( - - Font Mono Icon - - - - ); -} 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 ( - - Font Serif Icon - - - - - ); -} 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 ( - - Magic AI icon - - - - - - ); -} From 575f0ee35af0fce072e32b88356c13e93f706fbd Mon Sep 17 00:00:00 2001 From: Lewis Carhart Date: Sat, 15 Feb 2025 21:24:21 +0000 Subject: [PATCH 7/9] feat: removed liveblocks api' --- apps/app/src/app/api/liveblocks/route.ts | 34 -------- .../app/src/app/api/liveblocks/users/route.ts | 84 ------------------- .../app/api/liveblocks/users/search/route.ts | 74 ---------------- 3 files changed, 192 deletions(-) delete mode 100644 apps/app/src/app/api/liveblocks/route.ts delete mode 100644 apps/app/src/app/api/liveblocks/users/route.ts delete mode 100644 apps/app/src/app/api/liveblocks/users/search/route.ts 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"], - } -); From d32f44708ccc8ca583fb0f7cd96e73a97dd0de01 Mon Sep 17 00:00:00 2001 From: Lewis Carhart Date: Sat, 15 Feb 2025 21:27:57 +0000 Subject: [PATCH 8/9] feat: removed liveblock styles --- .../app/[locale]/(app)/(dashboard)/policies/[id]/layout.tsx | 5 ----- 1 file changed, 5 deletions(-) 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 6dc3a03810..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,10 +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"; export default async function Layout({ children, From 1e54c99cebc8aba3aefc63498d7ac3d2b21d1a8e Mon Sep 17 00:00:00 2001 From: Lewis Carhart Date: Sat, 15 Feb 2025 21:31:39 +0000 Subject: [PATCH 9/9] feat: removed policy overview --- apps/app/src/components/policies/policy-overview.tsx | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) 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 }) {
- }> - - + Editor