From c7880e328fb4b76342f585111f802d7cf0e38eb0 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Tue, 22 Sep 2026 19:09:25 +0800 Subject: [PATCH] Add a live preview markdown editor for explorer (#50717) ## Context We've gotten some requests for a better markdown editing experience in the Explorer so this PR adds a proper live preview markdown editor, similar UX to how you'd edit notion or obsidian documents. Opting to use `lexical` as the main library to support this UI for its size and composability without going too low level like prose mirror image Actual file changes are just this size excluding the package-lock image ## Changes involved This adjusts the UX for markdown cells a little - Clicking on a markdown cell immediately allows you to edit - Instead of the existing behaviour which requires a double click to enter "Edit" state - Editing doesn't eject you into a monaco editor, but rather inline editor - Nicer transition - Clicking out of the cell persists the cell's content - No more "Cancel" or "Save" buttons ## To test - [ ] Verify that editing markdown cells are still working - [ ] Verify that tabs do get marked with unsaved changes if you edit a markdown cell ## Summary by CodeRabbit - **New Features** - Replaced the previous Markdown editing workflow with an always-visible inline editor. - Added rich Markdown editing for headings, lists, links, blockquotes, code blocks, inline code, and text formatting. - Changes are saved automatically when leaving the editor. - Markdown formatting shortcuts take precedence within the editor. - **Bug Fixes** - Avoids unnecessary saves when content has not changed. - **Tests** - Added coverage verifying Markdown formatting conversions remain consistent and repeatable. --- .../interfaces/Explorer/MarkdownCell.tsx | 136 +--- .../ui/MarkdownEditor/MarkdownEditor.theme.ts | 11 + .../ui/MarkdownEditor/MarkdownEditor.tsx | 191 +++++ .../MarkdownEditor.utils.test.ts | 50 ++ .../ui/MarkdownEditor/MarkdownEditor.utils.ts | 23 + apps/studio/package.json | 8 + pnpm-lock.yaml | 669 ++++++++++++++++-- 7 files changed, 922 insertions(+), 166 deletions(-) create mode 100644 apps/studio/components/ui/MarkdownEditor/MarkdownEditor.theme.ts create mode 100644 apps/studio/components/ui/MarkdownEditor/MarkdownEditor.tsx create mode 100644 apps/studio/components/ui/MarkdownEditor/MarkdownEditor.utils.test.ts create mode 100644 apps/studio/components/ui/MarkdownEditor/MarkdownEditor.utils.ts diff --git a/apps/studio/components/interfaces/Explorer/MarkdownCell.tsx b/apps/studio/components/interfaces/Explorer/MarkdownCell.tsx index f9dc2cad062..bf7edc160ba 100644 --- a/apps/studio/components/interfaces/Explorer/MarkdownCell.tsx +++ b/apps/studio/components/interfaces/Explorer/MarkdownCell.tsx @@ -1,15 +1,10 @@ -import { Edit } from 'lucide-react' -import { useState } from 'react' -import { Button, cn } from 'ui' +import { cn } from 'ui' -import { Markdown } from '../Markdown' import { AddCellDropdown } from './AddCellDropdown' import { MoveCellDropdownContent } from './MoveCellDropdownContent' -import { ButtonTooltip } from '@/components/ui/ButtonTooltip' -import { CodeEditor } from '@/components/ui/CodeEditor/CodeEditor' +import { MarkdownEditor } from '@/components/ui/MarkdownEditor/MarkdownEditor' import { SortableSection } from '@/components/ui/SortableSection' import { type MarkdownCell as MarkdownCellSchema } from '@/data/content/notebooks/notebook-schema' -import { useLatest } from '@/hooks/misc/useLatest' import { useCurrentNotebook, useNotebooksStateSnapshot } from '@/state/notebooks/notebooks-state' interface MarkdownCellProps { @@ -17,39 +12,20 @@ interface MarkdownCellProps { onEdit?: () => void } -// [Joshen] handleUpdateMarkdown could be shifted into notebook-state as a updateCell action - export const MarkdownCell = ({ cell, onEdit }: MarkdownCellProps) => { const snap = useNotebooksStateSnapshot() const currentNotebook = useCurrentNotebook() const cells = currentNotebook?.notebook.content?.cells ?? [] - const [value, setValue] = useState(cell.text) - const [isEditing, setIsEditing] = useState(false) - - const valueRef = useLatest(value) - - const handleStartEditing = () => { - setValue(cell.text) - setIsEditing(true) - } - - const handleCancel = () => { - setIsEditing(false) - } - - const handleUpdateMarkdown = (cellId: string, text: string) => { + const handleUpdateMarkdown = (text: string) => { const notebookId = currentNotebook?.notebook.id - if (!notebookId) return + if (!notebookId || text === cell.text) return onEdit?.() - const nextCells = cells.map((c) => (c._id === cellId ? { ...c, text } : c)) + const nextCells = cells.map((c) => (c._id === cell._id ? { ...c, text } : c)) snap.updateCells({ id: notebookId, cells: nextCells }) - setIsEditing(false) } - const handleUpdateMarkdownRef = useLatest(handleUpdateMarkdown) - return ( { gripDropdownContent={} gripClassName="mt-1.5 sm:opacity-0 group-hover:opacity-100 has-[[data-state=open]]:opacity-100 transition" > - {isEditing ? ( -
- setValue(e ?? '')} - className="h-[150px]" - options={{ quickSuggestions: false, wordBasedSuggestions: 'off' }} - onMount={(editor, monaco) => { - editor.addCommand( - monaco.KeyCode.Escape, - handleCancel, - [ - 'editorTextFocus', - '!editorHasSelection', - '!editorHasMultipleSelections', - '!suggestWidgetVisible', - '!findWidgetVisible', - '!parameterHintsVisible', - '!renameInputVisible', - '!inSnippetMode', - '!accessibilityHelpWidgetVisible', - '!inlineSuggestionVisible', - ].join(' && ') - ) - editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter, () => - handleUpdateMarkdownRef.current(cell._id, valueRef.current) - ) - editor.onDidBlurEditorWidget(() => - handleUpdateMarkdownRef.current(cell._id, valueRef.current) - ) - }} - /> -
-

Markdown

-
- - -
-
-
- ) : ( -
- } - onClick={handleStartEditing} - tooltip={{ content: { side: 'bottom', text: 'Edit' } }} - /> - {cell.text ? ( - h1]:mb-2 [&>h2]:mb-2', - '[&_ol>li]:pl-3', - '[--tw-prose-body:var(--foreground-muted)]', - '[--tw-prose-headings:var(--foreground-default)]', - '[--tw-prose-links:var(--foreground-muted)]', - '[--tw-prose-bold:var(--foreground-muted)]', - '[--tw-prose-quotes:var(--foreground-muted)]' - )} - > - {cell.text} - - ) : ( -

This cell has no content

- )} -
- )} +
+ +
) } diff --git a/apps/studio/components/ui/MarkdownEditor/MarkdownEditor.theme.ts b/apps/studio/components/ui/MarkdownEditor/MarkdownEditor.theme.ts new file mode 100644 index 00000000000..2a5a374ccb1 --- /dev/null +++ b/apps/studio/components/ui/MarkdownEditor/MarkdownEditor.theme.ts @@ -0,0 +1,11 @@ +import type { EditorThemeClasses } from 'lexical' + +export const markdownEditorTheme: EditorThemeClasses = { + code: 'block whitespace-pre-wrap rounded-md bg-surface-200 px-3 py-2 font-mono text-xs before:content-none after:content-none', + list: { + listitem: 'before:top-1/2 before:-translate-y-1/2 [ol>&]:before:content-[counter(item)]', + }, + text: { + strikethrough: 'line-through', + }, +} diff --git a/apps/studio/components/ui/MarkdownEditor/MarkdownEditor.tsx b/apps/studio/components/ui/MarkdownEditor/MarkdownEditor.tsx new file mode 100644 index 00000000000..c2d8961daed --- /dev/null +++ b/apps/studio/components/ui/MarkdownEditor/MarkdownEditor.tsx @@ -0,0 +1,191 @@ +import { + $convertFromMarkdownString, + $convertToMarkdownString, + registerMarkdownShortcuts, +} from '@lexical/markdown' +import { LexicalComposer } from '@lexical/react/LexicalComposer' +import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext' +import { ContentEditable } from '@lexical/react/LexicalContentEditable' +import { EditorRefPlugin } from '@lexical/react/LexicalEditorRefPlugin' +import { LexicalErrorBoundary } from '@lexical/react/LexicalErrorBoundary' +import { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin' +import { LinkPlugin } from '@lexical/react/LexicalLinkPlugin' +import { ListPlugin } from '@lexical/react/LexicalListPlugin' +import { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin' +import { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin' +import { TabIndentationPlugin } from '@lexical/react/LexicalTabIndentationPlugin' +import type { LexicalEditor } from 'lexical' +import { useEffect, useRef, type RefObject } from 'react' +import { cn } from 'ui' + +import { markdownEditorTheme } from './MarkdownEditor.theme' +import { MARKDOWN_EDITOR_NODES, MARKDOWN_TRANSFORMERS } from './MarkdownEditor.utils' + +interface MarkdownEditorProps { + value: string + onChange?: (markdown: string) => void + onBlur?: (markdown: string) => void + placeholder?: string + autoFocus?: boolean + className?: string +} + +const MarkdownClassName = cn( + 'outline-none', + 'prose prose-sm max-w-none px-3 py-2 text-muted-foreground prose-headings:text-foreground', + '[&>h1]:mb-2 [&>h2]:mb-2', + '[&_ol>li]:pl-3 [&_ol>li]:my-0', + '[&_ul>li]:my-0', + '[--tw-prose-body:var(--foreground-muted)]', + '[--tw-prose-headings:var(--foreground-default)]', + '[--tw-prose-links:var(--foreground-muted)]', + '[--tw-prose-bold:var(--foreground-muted)]', + '[--tw-prose-quotes:var(--foreground-muted)]' +) + +const EDITOR_OWNED_SHORTCUT_KEYS = new Set(['b', 'i', 'u', 'z']) + +const isEditorOwnedShortcut = (event: Pick) => + (event.metaKey || event.ctrlKey) && EDITOR_OWNED_SHORTCUT_KEYS.has(event.key.toLowerCase()) + +const EditorKeyboardShortcutsPlugin = () => { + const [editor] = useLexicalComposerContext() + + useEffect(() => { + const unregisterMarkdownShortcuts = registerMarkdownShortcuts(editor, MARKDOWN_TRANSFORMERS) + + /** + * [Joshen] This just ensures that the markdown editor shortcuts take precedence. + * e.g Cmd+I to italicize a text should not toggle the inline editor panel + */ + const unregisterRootListener = editor.registerRootListener((rootElement) => { + if (!rootElement) return + + const handleKeyDown = (event: KeyboardEvent) => { + if (isEditorOwnedShortcut(event)) event.stopPropagation() + } + rootElement.addEventListener('keydown', handleKeyDown) + return () => rootElement.removeEventListener('keydown', handleKeyDown) + }) + + return () => { + unregisterMarkdownShortcuts() + unregisterRootListener() + } + }, [editor]) + + return null +} + +const SyncExternalValuePlugin = ({ + value, + isFocused, + lastKnownValueRef, +}: { + value: string + isFocused: () => boolean + lastKnownValueRef: RefObject +}) => { + const [editor] = useLexicalComposerContext() + + useEffect(() => { + if (value === lastKnownValueRef.current || isFocused()) return + lastKnownValueRef.current = value + editor.update(() => $convertFromMarkdownString(value, MARKDOWN_TRANSFORMERS)) + }, [editor, value, isFocused, lastKnownValueRef]) + + return null +} + +/** + * [Joshen] Deliberately omitted support for MD tables for now, can investigate separately + * Also deliberately having this in components/ui for now since Explorer is its only consumer + * Can shift to packages/ui if deem necessary (e.g if a second consumer needs it - e.g + * TextEditor in the side panel for the table editor when editing a text cell) + */ +export const MarkdownEditor = ({ + value, + onChange, + onBlur, + placeholder, + autoFocus, + className, +}: MarkdownEditorProps) => { + const isFocusedRef = useRef(false) + const editorRef = useRef(null) + const lastKnownValueRef = useRef(value) + + const initialConfig = { + namespace: 'MarkdownEditor', + theme: markdownEditorTheme, + nodes: MARKDOWN_EDITOR_NODES, + onError: (error: Error) => { + throw error + }, + editorState: () => $convertFromMarkdownString(value, MARKDOWN_TRANSFORMERS), + } + + const handleBlur = () => { + isFocusedRef.current = false + if (!onBlur) return + editorRef.current?.getEditorState().read(() => { + const markdown = $convertToMarkdownString(MARKDOWN_TRANSFORMERS) + lastKnownValueRef.current = markdown + onBlur(markdown) + }) + } + + const placeholderProps = placeholder + ? { + 'aria-placeholder': placeholder, + placeholder: ( +
+ {placeholder} +
+ ), + } + : { 'aria-placeholder': undefined, placeholder: null } + + return ( + + +
+ { + isFocusedRef.current = true + }} + onBlur={handleBlur} + {...placeholderProps} + /> + } + ErrorBoundary={LexicalErrorBoundary} + /> + + + + + + isFocusedRef.current} + lastKnownValueRef={lastKnownValueRef} + /> + {onChange && ( + + editorState.read(() => { + const markdown = $convertToMarkdownString(MARKDOWN_TRANSFORMERS) + lastKnownValueRef.current = markdown + onChange(markdown) + }) + } + /> + )} +
+
+ ) +} diff --git a/apps/studio/components/ui/MarkdownEditor/MarkdownEditor.utils.test.ts b/apps/studio/components/ui/MarkdownEditor/MarkdownEditor.utils.test.ts new file mode 100644 index 00000000000..315722f0ac2 --- /dev/null +++ b/apps/studio/components/ui/MarkdownEditor/MarkdownEditor.utils.test.ts @@ -0,0 +1,50 @@ +import { createHeadlessEditor } from '@lexical/headless' +import { $convertFromMarkdownString, $convertToMarkdownString } from '@lexical/markdown' +import { describe, expect, it } from 'vitest' + +import { MARKDOWN_EDITOR_NODES, MARKDOWN_TRANSFORMERS } from './MarkdownEditor.utils' + +function roundTrip(markdown: string): string { + const editor = createHeadlessEditor({ + nodes: MARKDOWN_EDITOR_NODES, + onError: (error) => { + throw error + }, + }) + editor.update(() => $convertFromMarkdownString(markdown, MARKDOWN_TRANSFORMERS), { + discrete: true, + }) + + let result = '' + editor.getEditorState().read(() => { + result = $convertToMarkdownString(MARKDOWN_TRANSFORMERS) + }) + return result +} + +describe('MarkdownEditor markdown <-> editor state round trip', () => { + it.each([ + ['heading', '# Heading one'], + ['sub-heading', '## Heading two'], + ['bold', 'Some **bold** text'], + ['italic', 'Some *italic* text'], + ['strikethrough', 'Some ~~struck out~~ text'], + ['inline code', 'Some `inline code` text'], + ['blockquote', '> A quote'], + ['unordered list', '- one\n- two\n- three'], + ['ordered list', '1. one\n2. two\n3. three'], + ['link', '[Supabase](https://supabase.com)'], + ['fenced code block', '```\nconst x = 1\n```'], + ['fenced code block with language', '```ts\nconst x = 1\n```'], + ])('round-trips %s unchanged', (_name, markdown) => { + expect(roundTrip(markdown)).toBe(markdown) + }) + + it('is idempotent on a second round trip', () => { + const markdown = + '# Title\n\nSome **bold** and *italic* text with a [link](https://supabase.com).\n\n- one\n- two' + const once = roundTrip(markdown) + const twice = roundTrip(once) + expect(twice).toBe(once) + }) +}) diff --git a/apps/studio/components/ui/MarkdownEditor/MarkdownEditor.utils.ts b/apps/studio/components/ui/MarkdownEditor/MarkdownEditor.utils.ts new file mode 100644 index 00000000000..a2d2da614f5 --- /dev/null +++ b/apps/studio/components/ui/MarkdownEditor/MarkdownEditor.utils.ts @@ -0,0 +1,23 @@ +import { CodeNode } from '@lexical/code' +import { LinkNode } from '@lexical/link' +import { ListItemNode, ListNode } from '@lexical/list' +import { TRANSFORMERS } from '@lexical/markdown' +import { HeadingNode, QuoteNode } from '@lexical/rich-text' +import type { Klass, LexicalNode } from 'lexical' + +/** + * [Joshen] Passthrough export here in case we want to expand more transformers + * in the future - the default TRANSFORMERS cover the basics like headings, blockquotes, + * lists, code blocks, links, and standard text formats. + * If we'd like to support tables for example then we can expand this const + */ +export const MARKDOWN_TRANSFORMERS = TRANSFORMERS + +export const MARKDOWN_EDITOR_NODES: Klass[] = [ + HeadingNode, + QuoteNode, + ListNode, + ListItemNode, + CodeNode, + LinkNode, +] diff --git a/apps/studio/package.json b/apps/studio/package.json index 3670612a3f5..a80d7938e70 100644 --- a/apps/studio/package.json +++ b/apps/studio/package.json @@ -53,6 +53,12 @@ "@hcaptcha/react-hcaptcha": "^1.12.0", "@heroicons/react": "^2.1.3", "@hookform/resolvers": "^3.1.1", + "@lexical/code": "0.51.0", + "@lexical/link": "0.51.0", + "@lexical/list": "0.51.0", + "@lexical/markdown": "0.51.0", + "@lexical/react": "0.51.0", + "@lexical/rich-text": "0.51.0", "@mjackson/multipart-parser": "^0.10.1", "@modelcontextprotocol/sdk": "^1.29.0", "@modelcontextprotocol/server": "^2.0.0", @@ -116,6 +122,7 @@ "idb": "^8.0.2", "ip-num": "^1.5.1", "json-logic-js": "^2.0.2", + "lexical": "0.51.0", "libpg-query": "17.6.0", "lodash": "catalog:", "lodash-es": "catalog:", @@ -168,6 +175,7 @@ "@faker-js/faker": "^9.9.0", "@graphql-codegen/cli": "5.0.5", "@graphql-typed-document-node/core": "^3.2.0", + "@lexical/headless": "0.51.0", "@tailwindcss/postcss": "^4.2.4", "@tailwindcss/vite": "4.2.4", "@tanstack/devtools-vite": "^0.6.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 09f0f6b7900..bd68dc21baa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -593,7 +593,7 @@ importers: version: 7.29.7(supports-color@8.1.1) '@graphiql/toolkit': specifier: ^0.9.1 - version: 0.9.1(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.0))(graphql@16.11.0) + version: 0.9.1(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.3))(graphql@16.11.0) '@graphql-codegen/cli': specifier: 5.0.5 version: 5.0.5(@parcel/watcher@2.5.6)(@types/node@22.13.14)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(supports-color@8.1.1)(typescript@6.0.2) @@ -674,7 +674,7 @@ importers: version: 13.2.2 graphiql: specifier: ^4.0.2 - version: 4.0.2(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.0))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + version: 4.0.2(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.3))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -725,7 +725,7 @@ importers: version: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) apps/kb: dependencies: @@ -795,7 +795,7 @@ importers: version: 4.2.4 vitest: specifier: 'catalog:' - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@7.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@7.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) apps/learn: dependencies: @@ -996,6 +996,24 @@ importers: '@hookform/resolvers': specifier: ^3.1.1 version: 3.3.1(react-hook-form@7.72.1(react@19.2.6)) + '@lexical/code': + specifier: 0.51.0 + version: 0.51.0(typescript@6.0.2) + '@lexical/link': + specifier: 0.51.0 + version: 0.51.0(typescript@6.0.2) + '@lexical/list': + specifier: 0.51.0 + version: 0.51.0(typescript@6.0.2) + '@lexical/markdown': + specifier: 0.51.0 + version: 0.51.0(typescript@6.0.2) + '@lexical/react': + specifier: 0.51.0 + version: 0.51.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(typescript@6.0.2)(yjs@13.6.29) + '@lexical/rich-text': + specifier: 0.51.0 + version: 0.51.0(typescript@6.0.2) '@mjackson/multipart-parser': specifier: ^0.10.1 version: 0.10.1 @@ -1185,6 +1203,9 @@ importers: json-logic-js: specifier: ^2.0.2 version: 2.0.2 + lexical: + specifier: 0.51.0 + version: 0.51.0(typescript@6.0.2) libpg-query: specifier: 17.6.0 version: 17.6.0 @@ -1336,6 +1357,9 @@ importers: '@graphql-typed-document-node/core': specifier: ^3.2.0 version: 3.2.0(graphql@16.11.0) + '@lexical/headless': + specifier: 0.51.0 + version: 0.51.0(typescript@6.0.2) '@tailwindcss/postcss': specifier: ^4.2.4 version: 4.2.4 @@ -1479,7 +1503,7 @@ importers: version: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) apps/ui-library: dependencies: @@ -1738,7 +1762,7 @@ importers: version: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) apps/www: dependencies: @@ -2060,7 +2084,7 @@ importers: version: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) zod: specifier: 'catalog:' version: 3.25.76 @@ -2273,7 +2297,7 @@ importers: version: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/api-types: devDependencies: @@ -2391,7 +2415,7 @@ importers: version: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/config: dependencies: @@ -2480,7 +2504,7 @@ importers: version: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/eslint-config-supabase: devDependencies: @@ -2621,7 +2645,7 @@ importers: version: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/shared-data: dependencies: @@ -2769,7 +2793,7 @@ importers: version: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/ui-patterns: dependencies: @@ -2992,7 +3016,7 @@ importers: version: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages: @@ -4292,24 +4316,45 @@ packages: '@floating-ui/core@1.5.0': resolution: {integrity: sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==} + '@floating-ui/core@1.8.0': + resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} + '@floating-ui/dom@1.5.3': resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==} + '@floating-ui/dom@1.8.0': + resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} + '@floating-ui/react-dom@2.1.3': resolution: {integrity: sha512-huMBfiU9UnQ2oBwIhgzyIiSpVgvlDstU8CX0AF+wS+KzmYMs0J2a3GwuFHV1Lz+jlrQGeC1fF+Nv0QoumyV0bA==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' + '@floating-ui/react-dom@2.1.9': + resolution: {integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + '@floating-ui/react@0.26.28': resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' + '@floating-ui/react@0.27.20': + resolution: {integrity: sha512-CMqMy7OaXl9W0eq1Uy7L7i2Y/anPvHmFmESd2CEw0t5YvZhcVCeo4MBevAmswRllX7Y2dEidA4ozGPunLSTQpw==} + peerDependencies: + react: '>=17.0.0' + react-dom: '>=17.0.0' + '@floating-ui/utils@0.1.6': resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} + '@floating-ui/utils@0.2.12': + resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} + '@floating-ui/utils@0.2.9': resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} @@ -5181,6 +5226,214 @@ packages: '@kwsites/promise-deferred@1.1.1': resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} + '@lexical/a11y@0.51.0': + resolution: {integrity: sha512-aqu9N0iMqTSXwf3T/FRHsozltAdRWjT0jaPVnjn4GJtmYx4GnIeSPK7i9IMIIc1Kkfh0Rm98iBIez6Dt7JZnEg==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/clipboard@0.51.0': + resolution: {integrity: sha512-EkEn9PfNLkEFkyoF14eXxSdbFEud7uc6pcJ7tIY+AvuTYWOsSuTGpoT6ibKZ5KbqyW/168BjML+zUJLtViZHXw==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/code-core@0.51.0': + resolution: {integrity: sha512-D35OqZF2cY78jSRNu/v/IjyEP8qY6dOfjKUBZISJcLkJBHnJAxiWMF1+J2I3dTuu8OvKRib2+uNgzEg/VuTOsQ==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/code@0.51.0': + resolution: {integrity: sha512-migAY4bBDyrZ+YDYky4n5Wu2ggpzkct4bf9Q4Y+L5t4/vJSCYs/x/qCqqNWmBXZF2or6bLCRUQmVRXxwj+lzfw==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/devtools-core@0.51.0': + resolution: {integrity: sha512-VpRcsvbA0fy7NGndMmMyTC0FgCuRqqwNK14/qA+qCmUZSt1jdqS2rYHo2BhOB8T8GgnX9fNeWav2xyro3FsvNA==} + peerDependencies: + react: '>=18.x' + react-dom: '>=18.x' + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/dragon@0.51.0': + resolution: {integrity: sha512-GmjO3YIU3Xhk4xJlYCEQ1Zn8pg6Ya1RfnwRZu3FghS2kYKAgmYJx6wYnGFomeDufqH6U83a+94Nenbe9Lr6Gwg==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/extension@0.51.0': + resolution: {integrity: sha512-PR1cKenPgRh8QKeyAlPz5KY60kxnV624UGOVZ2W4GrZjUtvCx4eKgVu/Pw1TuuK/aSLBCY1f6VxMF3hhs+CD+w==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/hashtag@0.51.0': + resolution: {integrity: sha512-w9HlDGZOQ2ZqqVF0Xfqtd/ZmuQz2BlAb9ksHO73dlc+R5wvHZi4LDRsS/QRpo/5EOHYbbQtw5vtTqv8KNby+VA==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/headless@0.51.0': + resolution: {integrity: sha512-/ziRSEcbTQ0Sw2TEKxGUEj+BhVB1h+2xJS5CU0FvaLxioTvpKsl8XNrKpe3Dr5szzet8Fe3m1FG37YIQNFjEDA==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/history@0.51.0': + resolution: {integrity: sha512-dymiLsX003GoXTn06Nt9mZXbJhMRdB9qSvg+PEBtqUDMKCGEJ+qT0w+NsbF+MW1VOV8Qzs9nayk2lwklx0526g==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/html@0.51.0': + resolution: {integrity: sha512-NxtL45rsai+o+XxWzXA6+EJSKnvDaTUN1ETRb9fQiyvS3NtWRnNjJm1Z4SNNNCzlguMMBWiRmEjD2PwOQgMBVg==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/internal@0.51.0': + resolution: {integrity: sha512-4f0k20V92koqXFpYPiu9MobSQuhTXtSL6RvQSjGKq4QOUMaNl+P5nNtvf2PN732ch/hEkWM7ZBw0WVlAmg9pxg==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/link@0.51.0': + resolution: {integrity: sha512-c4TQ4sZgakp0gPdILly2w8j26qXyTJJ61i9q8LkC8gpA/1S7+t17IGHXPNrpk3DdH0kcZJn0Wph5ElRw/LfOCw==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/list@0.51.0': + resolution: {integrity: sha512-AynEi2R3nZLDqBJ/Y+HUYNLKBEaXPMLrFqkZzX8329lLD39Bqy9Nc58F1j02GkuPnjNpyE/0IXWXbOkqnVau7Q==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/mark@0.51.0': + resolution: {integrity: sha512-GjG2Y0woSSBiSp+VAWjKVUh0htQ83/Z01vUkMMQvSdqPBKA4eWaTuLnOM6hJNrHLD8hW2k8I2MZ1Z7M8aDRoig==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/markdown@0.51.0': + resolution: {integrity: sha512-8hMPl6lwNOsR4KOaffeCRApbwwGV6adzujFwC5mKFt8nXk034yS8paQ8mgSZBOdkGctL9I2wLRz6RZFaPBTc2g==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/overflow@0.51.0': + resolution: {integrity: sha512-GbikMPObf6PqNp/2c8FjsdW5+RDlC74QU8utToMfTKzbC8fCDCDR8HRhFW06T4Qd9JDzfow4740acIOOEhXl0Q==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/plain-text@0.51.0': + resolution: {integrity: sha512-tE182/JBraYrciMecafgRX8Qn/VSa4vZRJUqcz2FmuwTaJ5TYUZEVpnnlumtQdBuXLWxs4Xvig2N0ia82KQJ0Q==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/react@0.51.0': + resolution: {integrity: sha512-ykHRrtUVQ845ym8N6vvjqhwokHFEDDmremLhHpaOe/mUR+GhJg8dDD5JEJcwOCWQWkkW+Df4Lx6cOt2TgZmjRg==} + peerDependencies: + react: '>=18.x' + react-dom: '>=18.x' + typescript: '>=5.2' + yjs: '>=13.5.37' + peerDependenciesMeta: + typescript: + optional: true + yjs: + optional: true + + '@lexical/rich-text@0.51.0': + resolution: {integrity: sha512-ke5vvVmPSEu0GA0hnDXdvhTsii0d8AGr6loVMAehgNR51eYenOZsm5toPqf4QTQo0MlKXsJh4z7gKZ0qJi8n6g==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/selection@0.51.0': + resolution: {integrity: sha512-nkZH9MkNX2m2DBSBVeKVpau/OV7bkHKeUsSaim22yPYiKRncXlRZFLH/avI6joOh6mDt3gGVVBP2BUnKw+duNA==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/table@0.51.0': + resolution: {integrity: sha512-WvSP2roluVv0FKF18OYyjVaBroJmqax/Q2YOCrHHZKUI200wDcH3dzwDxjQjiVWdotugWC4QuwIvd0vyHrDn0g==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/text@0.51.0': + resolution: {integrity: sha512-a29O+Th8gzXKNlBl8VZAMGPAiznX7JOPmi5RdiouF8HjojoIiBORcYNsfIaCUTxT9kQ9FVPrMkJM2l9aOFoAuA==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/utils@0.51.0': + resolution: {integrity: sha512-x2tGha3n3Slf6tdHXAcbg+vk8zoKK94Y3auVzJ7pE77UEUdxnMd6B4fk953oQgTkJHFwgVFX/bUgThsJEGW4Ew==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + + '@lexical/yjs@0.51.0': + resolution: {integrity: sha512-RlFqGutcAcHlQoUmxj1VE6gKkVnII+1wuFNSCOhW3MauhbSzO6Lprt65C31bcfXyYCcN7ZlliOE10PfEeRer2g==} + peerDependencies: + typescript: '>=5.2' + yjs: '>=13.5.37' + peerDependenciesMeta: + typescript: + optional: true + '@lezer/common@1.2.3': resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==} @@ -6212,6 +6465,9 @@ packages: '@posthog/types@1.409.1': resolution: {integrity: sha512-lA2sSGQUdVknSQl93uN9eUXDwkCMjAuthq24GONGHzMWwVygsKNHlWCnlJsVv2giDokj2p1NopO4zsE2S7gYjA==} + '@preact/signals-core@1.14.4': + resolution: {integrity: sha512-HNB6HYeYKhQbJ1aKl+YRjrS4+QWHLKX6qKoUsfS/m0vqzsVaEBiZiaKbG/e+NKk2ch5ALQr/ihWaMHxiCuuWHA==} + '@radix-ui/number@1.1.1': resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} @@ -9121,6 +9377,9 @@ packages: '@types/webxr@0.5.20': resolution: {integrity: sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg==} + '@types/whatwg-mimetype@3.0.2': + resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==} + '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} @@ -10245,6 +10504,10 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer-image-size@0.6.4: + resolution: {integrity: sha512-nEh+kZOPY1w+gcCMobZ6ETUp9WfibndnosbpwB1iJk/8Gt5ZF2bhS6+B6bPYz424KtwsR6Rflc3tCz1/ghX2dQ==} + engines: {node: '>=4.0'} + buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -12184,9 +12447,6 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.4.2: - resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} - flatted@3.4.4: resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==} @@ -12661,6 +12921,10 @@ packages: hachure-fill@0.5.2: resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} + happy-dom@20.14.5: + resolution: {integrity: sha512-x/RzkpWO40bTjIoT30iQtt64FLLmH/iRcUCN2X//bLx7H3ifkdfPXyqsro/OYtqzIAhiLMMA7mmiOR9C3NOKjQ==} + engines: {node: '>=20.0.0'} + harden-react-markdown@1.1.2: resolution: {integrity: sha512-4VRzZUz/2oV07ugbEhQHG8elHhqqqiYHjaU4Y5Y3pf7+0kzVDJhcdAS/3SdAOKsAscT+YoPhiEMmTUnVktjDrw==} peerDependencies: @@ -13631,6 +13895,14 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lexical@0.51.0: + resolution: {integrity: sha512-uwThveE7nnR3ewETt9q7KBgbXVwtx7ZntJXWbonI/IrrdF7VtIbAGgqJcYxPchkQVjIppIzNoWaFolDd9Yph0g==} + peerDependencies: + typescript: '>=5.2' + peerDependenciesMeta: + typescript: + optional: true + lib0@0.2.117: resolution: {integrity: sha512-DeXj9X5xDCjgKLU/7RR+/HQEVzuuEUiwldwOGsHK/sfAfELGWEyTcf0x+uOvCvK3O2zPmZePXWL85vtia6GyZw==} engines: {node: '>=16'} @@ -18444,6 +18716,10 @@ packages: engines: {node: '>=18'} deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} @@ -20438,17 +20714,32 @@ snapshots: dependencies: '@floating-ui/utils': 0.1.6 + '@floating-ui/core@1.8.0': + dependencies: + '@floating-ui/utils': 0.2.12 + '@floating-ui/dom@1.5.3': dependencies: '@floating-ui/core': 1.5.0 '@floating-ui/utils': 0.1.6 + '@floating-ui/dom@1.8.0': + dependencies: + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 + '@floating-ui/react-dom@2.1.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@floating-ui/dom': 1.5.3 react: 19.2.6 react-dom: 19.2.6(react@19.2.6) + '@floating-ui/react-dom@2.1.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@floating-ui/dom': 1.8.0 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + '@floating-ui/react@0.26.28(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@floating-ui/react-dom': 2.1.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -20457,13 +20748,23 @@ snapshots: react-dom: 19.2.6(react@19.2.6) tabbable: 6.2.0 + '@floating-ui/react@0.27.20(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@floating-ui/react-dom': 2.1.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@floating-ui/utils': 0.2.12 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + tabbable: 6.2.0 + '@floating-ui/utils@0.1.6': {} + '@floating-ui/utils@0.2.12': {} + '@floating-ui/utils@0.2.9': {} - '@graphiql/plugin-doc-explorer@0.0.1(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.0))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@graphiql/plugin-doc-explorer@0.0.1(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.3))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@graphiql/react': 0.32.0(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.0))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@graphiql/react': 0.32.0(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.3))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@headlessui/react': 2.2.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) graphql: 16.11.0 react: 19.2.6 @@ -20491,10 +20792,10 @@ snapshots: - immer - use-sync-external-store - '@graphiql/plugin-history@0.0.2(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.0))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@graphiql/plugin-history@0.0.2(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.3))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@graphiql/react': 0.32.0(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.0))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@graphiql/toolkit': 0.11.3(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.0))(graphql@16.11.0) + '@graphiql/react': 0.32.0(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.3))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@graphiql/toolkit': 0.11.3(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.3))(graphql@16.11.0) react: 19.2.6 react-compiler-runtime: 19.1.0-rc.1(react@19.2.6) react-dom: 19.2.6(react@19.2.6) @@ -20523,9 +20824,9 @@ snapshots: - immer - use-sync-external-store - '@graphiql/react@0.32.0(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.0))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@graphiql/react@0.32.0(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.3))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@graphiql/toolkit': 0.11.3(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.0))(graphql@16.11.0) + '@graphiql/toolkit': 0.11.3(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.3))(graphql@16.11.0) '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -20593,23 +20894,23 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@graphiql/toolkit@0.11.3(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.0))(graphql@16.11.0)': + '@graphiql/toolkit@0.11.3(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.3))(graphql@16.11.0)': dependencies: '@n1ru4l/push-pull-async-iterable-iterator': 3.2.0 graphql: 16.11.0 meros: 1.3.0(@types/node@22.13.14) optionalDependencies: - graphql-ws: 6.0.4(graphql@16.11.0)(ws@8.21.0) + graphql-ws: 6.0.4(graphql@16.11.0)(ws@8.21.3) transitivePeerDependencies: - '@types/node' - '@graphiql/toolkit@0.9.1(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.0))(graphql@16.11.0)': + '@graphiql/toolkit@0.9.1(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.3))(graphql@16.11.0)': dependencies: '@n1ru4l/push-pull-async-iterable-iterator': 3.2.0 graphql: 16.11.0 meros: 1.3.0(@types/node@22.13.14) optionalDependencies: - graphql-ws: 6.0.4(graphql@16.11.0)(ws@8.21.0) + graphql-ws: 6.0.4(graphql@16.11.0)(ws@8.21.3) transitivePeerDependencies: - '@types/node' @@ -21532,6 +21833,257 @@ snapshots: '@kwsites/promise-deferred@1.1.1': {} + '@lexical/a11y@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/extension': 0.51.0(typescript@6.0.2) + '@lexical/utils': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/clipboard@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/extension': 0.51.0(typescript@6.0.2) + '@lexical/html': 0.51.0(typescript@6.0.2) + '@lexical/internal': 0.51.0(typescript@6.0.2) + '@lexical/list': 0.51.0(typescript@6.0.2) + '@lexical/selection': 0.51.0(typescript@6.0.2) + '@lexical/utils': 0.51.0(typescript@6.0.2) + '@types/trusted-types': 2.0.7 + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/code-core@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/extension': 0.51.0(typescript@6.0.2) + '@lexical/html': 0.51.0(typescript@6.0.2) + '@lexical/internal': 0.51.0(typescript@6.0.2) + '@lexical/utils': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/code@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/code-core': 0.51.0(typescript@6.0.2) + '@lexical/extension': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/devtools-core@0.51.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(typescript@6.0.2)': + dependencies: + '@lexical/html': 0.51.0(typescript@6.0.2) + '@lexical/link': 0.51.0(typescript@6.0.2) + '@lexical/mark': 0.51.0(typescript@6.0.2) + '@lexical/table': 0.51.0(typescript@6.0.2) + '@lexical/utils': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/dragon@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/extension': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/extension@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/internal': 0.51.0(typescript@6.0.2) + '@lexical/utils': 0.51.0(typescript@6.0.2) + '@preact/signals-core': 1.14.4 + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/hashtag@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/text': 0.51.0(typescript@6.0.2) + '@lexical/utils': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/headless@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/internal': 0.51.0(typescript@6.0.2) + happy-dom: 20.14.5 + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@lexical/history@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/extension': 0.51.0(typescript@6.0.2) + '@lexical/utils': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/html@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/extension': 0.51.0(typescript@6.0.2) + '@lexical/internal': 0.51.0(typescript@6.0.2) + '@lexical/selection': 0.51.0(typescript@6.0.2) + '@lexical/utils': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/internal@0.51.0(typescript@6.0.2)': + optionalDependencies: + typescript: 6.0.2 + + '@lexical/link@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/a11y': 0.51.0(typescript@6.0.2) + '@lexical/extension': 0.51.0(typescript@6.0.2) + '@lexical/html': 0.51.0(typescript@6.0.2) + '@lexical/internal': 0.51.0(typescript@6.0.2) + '@lexical/utils': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/list@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/extension': 0.51.0(typescript@6.0.2) + '@lexical/html': 0.51.0(typescript@6.0.2) + '@lexical/internal': 0.51.0(typescript@6.0.2) + '@lexical/utils': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/mark@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/utils': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/markdown@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/code-core': 0.51.0(typescript@6.0.2) + '@lexical/internal': 0.51.0(typescript@6.0.2) + '@lexical/link': 0.51.0(typescript@6.0.2) + '@lexical/list': 0.51.0(typescript@6.0.2) + '@lexical/rich-text': 0.51.0(typescript@6.0.2) + '@lexical/selection': 0.51.0(typescript@6.0.2) + '@lexical/text': 0.51.0(typescript@6.0.2) + '@lexical/utils': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/overflow@0.51.0(typescript@6.0.2)': + dependencies: + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/plain-text@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/clipboard': 0.51.0(typescript@6.0.2) + '@lexical/dragon': 0.51.0(typescript@6.0.2) + '@lexical/extension': 0.51.0(typescript@6.0.2) + '@lexical/selection': 0.51.0(typescript@6.0.2) + '@lexical/utils': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/react@0.51.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(typescript@6.0.2)(yjs@13.6.29)': + dependencies: + '@floating-ui/react': 0.27.20(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@lexical/a11y': 0.51.0(typescript@6.0.2) + '@lexical/devtools-core': 0.51.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(typescript@6.0.2) + '@lexical/dragon': 0.51.0(typescript@6.0.2) + '@lexical/extension': 0.51.0(typescript@6.0.2) + '@lexical/hashtag': 0.51.0(typescript@6.0.2) + '@lexical/history': 0.51.0(typescript@6.0.2) + '@lexical/internal': 0.51.0(typescript@6.0.2) + '@lexical/link': 0.51.0(typescript@6.0.2) + '@lexical/list': 0.51.0(typescript@6.0.2) + '@lexical/mark': 0.51.0(typescript@6.0.2) + '@lexical/markdown': 0.51.0(typescript@6.0.2) + '@lexical/overflow': 0.51.0(typescript@6.0.2) + '@lexical/plain-text': 0.51.0(typescript@6.0.2) + '@lexical/rich-text': 0.51.0(typescript@6.0.2) + '@lexical/table': 0.51.0(typescript@6.0.2) + '@lexical/text': 0.51.0(typescript@6.0.2) + '@lexical/utils': 0.51.0(typescript@6.0.2) + '@lexical/yjs': 0.51.0(typescript@6.0.2)(yjs@13.6.29) + lexical: 0.51.0(typescript@6.0.2) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + optionalDependencies: + typescript: 6.0.2 + yjs: 13.6.29 + + '@lexical/rich-text@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/a11y': 0.51.0(typescript@6.0.2) + '@lexical/clipboard': 0.51.0(typescript@6.0.2) + '@lexical/dragon': 0.51.0(typescript@6.0.2) + '@lexical/extension': 0.51.0(typescript@6.0.2) + '@lexical/html': 0.51.0(typescript@6.0.2) + '@lexical/selection': 0.51.0(typescript@6.0.2) + '@lexical/utils': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/selection@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/internal': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/table@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/clipboard': 0.51.0(typescript@6.0.2) + '@lexical/extension': 0.51.0(typescript@6.0.2) + '@lexical/html': 0.51.0(typescript@6.0.2) + '@lexical/internal': 0.51.0(typescript@6.0.2) + '@lexical/utils': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/text@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/internal': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/utils@0.51.0(typescript@6.0.2)': + dependencies: + '@lexical/internal': 0.51.0(typescript@6.0.2) + '@lexical/selection': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + + '@lexical/yjs@0.51.0(typescript@6.0.2)(yjs@13.6.29)': + dependencies: + '@lexical/internal': 0.51.0(typescript@6.0.2) + '@lexical/selection': 0.51.0(typescript@6.0.2) + lexical: 0.51.0(typescript@6.0.2) + yjs: 13.6.29 + optionalDependencies: + typescript: 6.0.2 + '@lezer/common@1.2.3': {} '@lezer/css@1.1.10': @@ -22695,6 +23247,8 @@ snapshots: '@posthog/types@1.409.1': {} + '@preact/signals-core@1.14.4': {} + '@radix-ui/number@1.1.1': {} '@radix-ui/primitive@1.1.3': {} @@ -25428,7 +25982,7 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 optionalDependencies: - vitest: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + vitest: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) '@testing-library/react@16.3.3(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: @@ -25865,8 +26419,7 @@ snapshots: fflate: 0.8.3 meshoptimizer: 0.18.1 - '@types/trusted-types@2.0.7': - optional: true + '@types/trusted-types@2.0.7': {} '@types/unist@2.0.8': {} @@ -25880,6 +26433,8 @@ snapshots: '@types/webxr@0.5.20': {} + '@types/whatwg-mimetype@3.0.2': {} + '@types/ws@8.18.1': dependencies: '@types/node': 22.13.14 @@ -26267,7 +26822,7 @@ snapshots: obug: 2.1.4 std-env: 4.2.0 tinyrainbow: 3.1.1 - vitest: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + vitest: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) '@vitest/istanbul-lib-coverage@1.0.1': {} @@ -26309,7 +26864,7 @@ snapshots: pathe: 2.0.3 sirv: 3.0.2 tinyrainbow: 3.1.1 - vitest: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + vitest: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) '@vitest/utils@5.0.0': dependencies: @@ -27316,6 +27871,10 @@ snapshots: buffer-from@1.1.2: {} + buffer-image-size@0.6.4: + dependencies: + '@types/node': 22.13.14 + buffer@5.7.1: dependencies: base64-js: 1.5.1 @@ -29531,11 +30090,9 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.4.2 + flatted: 3.4.4 keyv: 4.5.4 - flatted@3.4.2: {} - flatted@3.4.4: {} flattie@1.1.1: {} @@ -29861,11 +30418,11 @@ snapshots: graceful-fs@4.2.11: {} - graphiql@4.0.2(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.0))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + graphiql@4.0.2(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.3))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - '@graphiql/plugin-doc-explorer': 0.0.1(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.0))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@graphiql/plugin-history': 0.0.2(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.0))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@graphiql/react': 0.32.0(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.0))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@graphiql/plugin-doc-explorer': 0.0.1(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.3))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@graphiql/plugin-history': 0.0.2(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.3))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@graphiql/react': 0.32.0(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.4.0)(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.3))(graphql@16.11.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) graphql: 16.11.0 react: 19.2.6 react-compiler-runtime: 19.1.0-rc.1(react@19.2.6) @@ -29958,13 +30515,6 @@ snapshots: dependencies: graphql: 16.11.0 - graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.0): - dependencies: - graphql: 16.11.0 - optionalDependencies: - ws: 8.21.0 - optional: true - graphql-ws@6.0.4(graphql@16.11.0)(ws@8.21.3): dependencies: graphql: 16.11.0 @@ -30033,6 +30583,19 @@ snapshots: hachure-fill@0.5.2: {} + happy-dom@20.14.5: + dependencies: + '@types/node': 22.13.14 + '@types/whatwg-mimetype': 3.0.2 + '@types/ws': 8.18.1 + buffer-image-size: 0.6.4 + entities: 7.0.1 + whatwg-mimetype: 3.0.0 + ws: 8.21.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + harden-react-markdown@1.1.2(react-markdown@10.1.0(@types/react@19.2.14)(react@19.2.6)(supports-color@8.1.1))(react@19.2.6): dependencies: react: 19.2.6 @@ -31068,6 +31631,12 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lexical@0.51.0(typescript@6.0.2): + dependencies: + '@lexical/internal': 0.51.0(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 + lib0@0.2.117: dependencies: isomorphic.js: 0.2.5 @@ -37091,7 +37660,7 @@ snapshots: optionalDependencies: vite: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) - vitest@5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)): + vitest@5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)): dependencies: '@types/chai': 5.2.2 '@vitest/mocker': 5.0.0(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) @@ -37112,11 +37681,12 @@ snapshots: '@types/node': 22.13.14 '@vitest/coverage-v8': 5.0.0(vitest@5.0.0) '@vitest/ui': 5.0.0(vitest@5.0.0) + happy-dom: 20.14.5 jsdom: 28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1) transitivePeerDependencies: - msw - vitest@5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@7.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)): + vitest@5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@7.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)): dependencies: '@types/chai': 5.2.2 '@vitest/mocker': 5.0.0(msw@2.11.3(@types/node@22.13.14)(typescript@7.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) @@ -37137,6 +37707,7 @@ snapshots: '@types/node': 22.13.14 '@vitest/coverage-v8': 5.0.0(vitest@5.0.0) '@vitest/ui': 5.0.0(vitest@5.0.0) + happy-dom: 20.14.5 jsdom: 28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1) transitivePeerDependencies: - msw @@ -37302,6 +37873,8 @@ snapshots: dependencies: iconv-lite: 0.6.3 + whatwg-mimetype@3.0.0: {} + whatwg-mimetype@4.0.0: {} whatwg-mimetype@5.0.0: {}