From 433a1ea4c4ac24ee1451faec9f84ce749dbc0338 Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Thu, 22 Jan 2026 17:59:40 +0530 Subject: [PATCH 01/48] feat: add basic textEditor Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- packages/frappe-ui-react/package.json | 3 + .../frappe-ui-react/src/components/index.ts | 2 +- .../src/components/textEditor/index.ts | 2 + .../src/components/textEditor/index.tsx | 16 - .../textEditor/texEditor.stories.tsx | 44 ++ .../src/components/textEditor/textEditor.css | 141 +++++ .../src/components/textEditor/textEditor.tsx | 32 + .../src/components/textEditor/types.ts | 18 + packages/frappe-ui-react/src/utils/index.ts | 1 + .../src/utils/normalizeClasses.ts | 23 + pnpm-lock.yaml | 591 ++++++++++++++++++ 11 files changed, 856 insertions(+), 17 deletions(-) create mode 100644 packages/frappe-ui-react/src/components/textEditor/index.ts delete mode 100644 packages/frappe-ui-react/src/components/textEditor/index.tsx create mode 100644 packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx create mode 100644 packages/frappe-ui-react/src/components/textEditor/textEditor.css create mode 100644 packages/frappe-ui-react/src/components/textEditor/textEditor.tsx create mode 100644 packages/frappe-ui-react/src/components/textEditor/types.ts create mode 100644 packages/frappe-ui-react/src/utils/normalizeClasses.ts diff --git a/packages/frappe-ui-react/package.json b/packages/frappe-ui-react/package.json index ff2a0183..225273a6 100644 --- a/packages/frappe-ui-react/package.json +++ b/packages/frappe-ui-react/package.json @@ -46,6 +46,9 @@ "@floating-ui/react": "^0.27.13", "@headlessui/react": "^2.2.6", "@popperjs/core": "^2.11.8", + "@tiptap/pm": "^3.16.0", + "@tiptap/react": "^3.16.0", + "@tiptap/starter-kit": "^3.16.0", "clsx": "^2.1.1", "dayjs": "^1.11.13", "dompurify": "^3.3.1", diff --git a/packages/frappe-ui-react/src/components/index.ts b/packages/frappe-ui-react/src/components/index.ts index dc7053e8..bf7ac6d7 100644 --- a/packages/frappe-ui-react/src/components/index.ts +++ b/packages/frappe-ui-react/src/components/index.ts @@ -32,7 +32,7 @@ export { default as TabButtons } from "./tabButtons"; export * from "./tabs"; export * from "./textInput"; export * from "./textarea"; -export { default as TextEditor } from "./textEditor"; +export * from "./textEditor"; export * from "./toast"; export * from "./tooltip"; export * from "./tree"; diff --git a/packages/frappe-ui-react/src/components/textEditor/index.ts b/packages/frappe-ui-react/src/components/textEditor/index.ts new file mode 100644 index 00000000..aff81e01 --- /dev/null +++ b/packages/frappe-ui-react/src/components/textEditor/index.ts @@ -0,0 +1,2 @@ +export { default as TextEditor } from "./textEditor"; +export * from "./types"; diff --git a/packages/frappe-ui-react/src/components/textEditor/index.tsx b/packages/frappe-ui-react/src/components/textEditor/index.tsx deleted file mode 100644 index 1bc4c71b..00000000 --- a/packages/frappe-ui-react/src/components/textEditor/index.tsx +++ /dev/null @@ -1,16 +0,0 @@ -export interface TextEditorProps { - allowImageUpload?: boolean; - allowVideoUpload?: boolean; - className?: string; - hideToolbar?: boolean; - onChange: (value: string) => void; - value?: string; - placeholder?: string; -} - -/* eslint-disable @typescript-eslint/no-unused-vars */ -const TextEditor = (_props: TextEditorProps) => { - return
; -}; - -export default TextEditor; diff --git a/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx b/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx new file mode 100644 index 00000000..b5e461b7 --- /dev/null +++ b/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx @@ -0,0 +1,44 @@ +import type { Meta, StoryObj } from "@storybook/react-vite"; +import TextEditor from "./textEditor"; + +import { useState } from "react"; + +const meta: Meta = { + title: "Components/TextEditor", + component: TextEditor, + parameters: { + docs: { source: { type: "dynamic" } }, + layout: "centered", + }, + tags: ["autodocs"], + argTypes: { + content: { + control: "text", + description: "HTML content of the editor", + }, + }, +}; + +export default meta; +type Story = StoryObj; +export const Basic: Story = { + args: { + editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", + }, + render: function BasicRender(args) { + const [content, setContent] = useState(`
+

Heading 2

+

+ This is a paragraph with bold and italic text. +

+
    +
  • Item 1
  • +
  • Item 2
  • +
`); + return ( +
+ +
+ ); + }, +}; diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.css b/packages/frappe-ui-react/src/components/textEditor/textEditor.css new file mode 100644 index 00000000..b17456c7 --- /dev/null +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.css @@ -0,0 +1,141 @@ +/* Typography prose color variables override */ +.prose { + --tw-prose-body: var(--color-ink-gray-8); + --tw-prose-headings: var(--color-ink-gray-9); + --tw-prose-lead: var(--color-ink-gray-5); + --tw-prose-links: var(--color-ink-gray-9); + --tw-prose-bold: var(--color-ink-gray-9); + --tw-prose-counters: var(--color-ink-gray-4); + --tw-prose-bullets: var(--color-ink-gray-2); + --tw-prose-hr: var(--color-ink-gray-1); + --tw-prose-quotes: var(--color-ink-gray-8); + --tw-prose-quote-borders: var(--color-ink-gray-1); + --tw-prose-captions: var(--color-ink-gray-4); + --tw-prose-kbd: var(--color-ink-gray-9); + --tw-prose-code: var(--color-ink-gray-9); + --tw-prose-pre-code: var(--color-ink-gray-1); + --tw-prose-pre-bg: var(--color-ink-gray-8); + --tw-prose-th-borders: var(--color-ink-gray-2); + --tw-prose-td-borders: var(--color-ink-gray-1); +} + +.ProseMirror { + outline: none; + caret-color: var(--color-ink-gray-9); + word-break: break-word; +} + +/* Firefox */ +.ProseMirror-focused:focus-visible { + outline: none; +} + +/* Placeholder */ +.ProseMirror:not(.ProseMirror-focused) p.is-editor-empty::before { + content: attr(data-placeholder); + float: left; + color: var(--color-ink-gray-4); + pointer-events: none; + height: 0; +} + +.ProseMirror-selectednode video, +img.ProseMirror-selectednode { + outline: 2px solid var(--color-outline-gray-2); +} + +/* Table styles */ +.prose table p { + margin: 0; +} + +/* Prosemirror specific table styles */ +.ProseMirror table .selectedCell:after { + z-index: 2; + position: absolute; + content: ''; + left: 0; + right: 0; + top: 0; + bottom: 0; + pointer-events: none; + background: var(--color-ink-blue-1); + opacity: 0.3; +} + +.ProseMirror table .column-resize-handle { + position: absolute; + right: -1px; + top: 0; + bottom: -2px; + width: 4px; + background-color: var(--color-ink-blue-2); + pointer-events: none; +} + +.ProseMirror ul[data-type='taskList'] { + list-style: none; + padding: 0; +} + +.ProseMirror ul[data-type='taskList'] li { + align-items: flex-start; + display: flex; + margin: 0; +} + +.ProseMirror ul[data-type='taskList'] li > label { + flex: 0 0 auto; + margin-right: 0.5rem; + margin-top: 0.25rem; + height: 1lh; + display: flex; + align-items: center; + user-select: none; +} + +.ProseMirror ul[data-type='taskList'] li > div { + flex: 1 1 auto; + margin-bottom: 0; +} + +.ProseMirror ul[data-type='taskList'] li > div > p { + margin: 0.25rem 0; +} + +.ProseMirror ul[data-type='taskList'] ul[data-type='taskList'] { + margin: 0; +} + +.ProseMirror ul[data-type='taskList'] input[type='checkbox'] { + cursor: pointer; + width: 14px; + height: 14px; + border-radius: 4px; + color: var(--color-ink-gray-9); +} + +.resize-cursor { + cursor: ew-resize; + cursor: col-resize; +} + +.tag-item, +.tag-suggestion-active { + background-color: var(--color-surface-gray-1, #f8f8f8); + color: inherit; + border: 1px solid transparent; + padding: 0px 2px; + border-radius: 4px; + font-size: 1em; + white-space: nowrap; + cursor: default; +} + +.tag-item.ProseMirror-selectednode { + border-color: var(--color-outline-gray-3, #c7c7c7); +} + +.tag-suggestion-active { + background-color: var(--color-surface-gray-2, #f3f3f3); +} diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx new file mode 100644 index 00000000..6fc7fb4a --- /dev/null +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx @@ -0,0 +1,32 @@ +/** + * External dependencies. + */ +import { EditorContent, useEditor } from "@tiptap/react"; +import StarterKit from "@tiptap/starter-kit"; +import clsx from "clsx"; + +/** + * Internal dependencies. + */ +import "./textEditor.css"; +import { normalizeClasses } from "../../utils"; +import type { TextEditorProps } from "./types"; + +const TextEditor = ({ content, editorClass = "" }: TextEditorProps) => { + const editor = useEditor({ + content, + editorProps: { + attributes: { + class: clsx( + "prose prose-table:table-fixed prose-td:p-2 prose-th:p-2 prose-td:border prose-th:border prose-td:border-outline-gray-2 prose-th:border-outline-gray-2 prose-td:relative prose-th:relative prose-th:bg-surface-gray-2 border-outline-gray-1", + normalizeClasses(editorClass) + ), + }, + }, + extensions: [StarterKit], + }); + + return ; +}; + +export default TextEditor; diff --git a/packages/frappe-ui-react/src/components/textEditor/types.ts b/packages/frappe-ui-react/src/components/textEditor/types.ts new file mode 100644 index 00000000..08466a0d --- /dev/null +++ b/packages/frappe-ui-react/src/components/textEditor/types.ts @@ -0,0 +1,18 @@ +import type { Editor } from "@tiptap/react"; + +export interface TextEditorProps { + content?: string | null; + placeholder?: string | (() => string); + editorClass?: string | string[] | Record; + editable?: boolean; + autofocus?: boolean; + bubbleMenu?: boolean; + bubbleMenuOptions?: Record; + fixedMenu?: boolean; + floatingMenu?: boolean; + onChange?: (content: string) => void; + onFocus?: (event: FocusEvent) => void; + onBlur?: (event: FocusEvent) => void; + onTransaction?: (editor: Editor) => void; + className?: string; +} diff --git a/packages/frappe-ui-react/src/utils/index.ts b/packages/frappe-ui-react/src/utils/index.ts index 930359c2..b138daab 100644 --- a/packages/frappe-ui-react/src/utils/index.ts +++ b/packages/frappe-ui-react/src/utils/index.ts @@ -2,3 +2,4 @@ export { default as noop } from "./noop"; export * from "./debounce"; export * from "./fileUploadHandler"; export * from "./htmlAttrsToJsx"; +export * from "./normalizeClasses"; diff --git a/packages/frappe-ui-react/src/utils/normalizeClasses.ts b/packages/frappe-ui-react/src/utils/normalizeClasses.ts new file mode 100644 index 00000000..1bf01185 --- /dev/null +++ b/packages/frappe-ui-react/src/utils/normalizeClasses.ts @@ -0,0 +1,23 @@ +/** + * Normalizes a given input of class names into a single string. + * + * This utility function accepts a variety of input types (string, array, or object) + * and converts them into a space-separated string of class names. + * + * @param cls - The input class names, which can be: + * - A string: Returned as-is. + * - An array of strings: Joined into a single string with spaces. + * - An object: Keys with truthy values are included in the resulting string. + * @returns A space-separated string of class names. + */ +export function normalizeClasses(cls: string | string[] | object): string { + if (typeof cls === "string") return cls; + if (Array.isArray(cls)) return cls.join(" "); + if (typeof cls === "object") { + return Object.entries(cls) + .filter(([, value]) => value) + .map(([key]) => key) + .join(" "); + } + return ""; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f3679267..f4d29d42 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -165,6 +165,15 @@ importers: '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 + '@tiptap/pm': + specifier: ^3.16.0 + version: 3.16.0 + '@tiptap/react': + specifier: ^3.16.0 + version: 3.16.0(@floating-ui/dom@1.7.4)(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@tiptap/starter-kit': + specifier: ^3.16.0 + version: 3.16.0 clsx: specifier: ^2.1.1 version: 2.1.1 @@ -1554,6 +1563,9 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@remirror/core-constants@3.0.0': + resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==} + '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} @@ -1989,6 +2001,155 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' + '@tiptap/core@3.16.0': + resolution: {integrity: sha512-XegRaNuoQ/guzBQU2xHxOwFXXrtoXW9tiyXDhssSqylvZmBVSlRIPNHA6ArkHBKm6ehLf6+6Y9fF3uky1yCXYQ==} + peerDependencies: + '@tiptap/pm': ^3.16.0 + + '@tiptap/extension-blockquote@3.16.0': + resolution: {integrity: sha512-c1bhJ3KDFXyNcMweiBzu0LouBXfUC/sUMtaEafQePR98BVu+d0tmWXcGlfVarGVoRyCYFa1mHpkgtxp4SS3lag==} + peerDependencies: + '@tiptap/core': ^3.16.0 + + '@tiptap/extension-bold@3.16.0': + resolution: {integrity: sha512-S61wtChbOigk2bklCJ2uEa8jbAnI9ChbW4d1z/Uv/Hr6eWo42vVBtjNZKFOsiBPDajFZbOfnvekGs731jNrHKg==} + peerDependencies: + '@tiptap/core': ^3.16.0 + + '@tiptap/extension-bubble-menu@3.16.0': + resolution: {integrity: sha512-nFL7FMu1LjZ5ZGf4U3tw56JLj/SpLysZvHQ1EneGB+90TEI/WReOvTY9VwH1egGWwrl7/OvQuGKclbuLIsy+BA==} + peerDependencies: + '@tiptap/core': ^3.16.0 + '@tiptap/pm': ^3.16.0 + + '@tiptap/extension-bullet-list@3.16.0': + resolution: {integrity: sha512-GjKssVf9241GLdshdYRzPPApWQIB+7GJy0TZgx7bWmFUVgypYxDoE/rQRmvb3Fhup836bgfpfUzStevJ6eIClw==} + peerDependencies: + '@tiptap/extension-list': ^3.16.0 + + '@tiptap/extension-code-block@3.16.0': + resolution: {integrity: sha512-hAsXe6fIBsvIMWlVEXKLEzFQ8h6VUEBWqEEFIQgq+SpZCkGX+KzVmFXd5V2aDqb+BoOyqYiA2w1d/frBBxVEpw==} + peerDependencies: + '@tiptap/core': ^3.16.0 + '@tiptap/pm': ^3.16.0 + + '@tiptap/extension-code@3.16.0': + resolution: {integrity: sha512-U8/bz/1BhQ39LJgUqJ8u1HzLcYdtubUWVAVC8seteLz1vIhXkTyfAC8478KQ+YdIDkMzAs+0vxk5BsWcWG16zQ==} + peerDependencies: + '@tiptap/core': ^3.16.0 + + '@tiptap/extension-document@3.16.0': + resolution: {integrity: sha512-vOwBnJIonYmmFVMEnnE1jwoUMq0P/9BcaUocIG9o5iFRTV38I8YGn8n6DiE1pjSeLXRpLrXl6LLwdOMBJewhBg==} + peerDependencies: + '@tiptap/core': ^3.16.0 + + '@tiptap/extension-dropcursor@3.16.0': + resolution: {integrity: sha512-n9Gbt99K9oBChjp8puF0ffAJtBF6ZVjydG5u5QO2Z8sHNE+Hn6ARfgZqLjr11ZF4b+mLShqsmyROmITNf73W+A==} + peerDependencies: + '@tiptap/extensions': ^3.16.0 + + '@tiptap/extension-floating-menu@3.16.0': + resolution: {integrity: sha512-cokYXL8EkW+CFIlke70GLL7iKetUtYEp87muMG9oflczyj0BjmGAbO7Mskm+bcQBhxZ0dIYILTqKn2bNBvCDFw==} + peerDependencies: + '@floating-ui/dom': ^1.0.0 + '@tiptap/core': ^3.16.0 + '@tiptap/pm': ^3.16.0 + + '@tiptap/extension-gapcursor@3.16.0': + resolution: {integrity: sha512-8dxE4bkfn6Jog/JHDxN/kzcRbyJB7HyFqCKdiTq0f4atzysmnEUuMswwlwMPaErkzlETD6B8NEEtMknEUqowGA==} + peerDependencies: + '@tiptap/extensions': ^3.16.0 + + '@tiptap/extension-hard-break@3.16.0': + resolution: {integrity: sha512-nwUTixlHYo9V1lfOYsRi2JiAYCRC7pObB3Kt7rEeMxB3XmcRcSpHtxYs6r+TvifsLFys8RG5wOFXIV/YXZHcDg==} + peerDependencies: + '@tiptap/core': ^3.16.0 + + '@tiptap/extension-heading@3.16.0': + resolution: {integrity: sha512-du4d1Ukvhr1zvPWlU/HS3NMlRswzGRSNDNfCFUhdYgQoHOSnUXshnlKD3E5H0EHfL9UwT4JFyqAT3+1ZnahkdA==} + peerDependencies: + '@tiptap/core': ^3.16.0 + + '@tiptap/extension-horizontal-rule@3.16.0': + resolution: {integrity: sha512-yyKl45UCH55pIf8G4bHiUNFxggipRVT276c3t9vrkXU6BkJhzfxxcIc5svWkiThDjdYmJs1FfVCYAtGSuKiSyA==} + peerDependencies: + '@tiptap/core': ^3.16.0 + '@tiptap/pm': ^3.16.0 + + '@tiptap/extension-italic@3.16.0': + resolution: {integrity: sha512-SVNnkRUK6G+dQse5Ms8Q/wudSTh37O94p02RDc3KneEtBk6wkokqCLuwKnWLPhlEqsuOku+wTD9DSJdvoRlq9w==} + peerDependencies: + '@tiptap/core': ^3.16.0 + + '@tiptap/extension-link@3.16.0': + resolution: {integrity: sha512-WPPJLtGXQadBVVwH6gcMpaXIgfvFF9NGpE2IVqleVKR3Epv2Rd4aWd4oyAdrT8KU9G6dzMXZfkrB8aArTDKxYQ==} + peerDependencies: + '@tiptap/core': ^3.16.0 + '@tiptap/pm': ^3.16.0 + + '@tiptap/extension-list-item@3.16.0': + resolution: {integrity: sha512-kshssUZEPoosPWbJNQEFJnVV3iPwsDU9l/RCdHJB5SE+aNWJyUk5hQ/YwngEHjV7rS+RnAuhbrcB5swgyzROuA==} + peerDependencies: + '@tiptap/extension-list': ^3.16.0 + + '@tiptap/extension-list-keymap@3.16.0': + resolution: {integrity: sha512-AU3J9W6uo835ZdxiGmrYx1KUymzvfkU4d278X0OBAfujORXkbDNlo9er8pOrOpgXNxgtnlH32lWR4bWyKdUgwA==} + peerDependencies: + '@tiptap/extension-list': ^3.16.0 + + '@tiptap/extension-list@3.16.0': + resolution: {integrity: sha512-tpjWGugfI0XYR9iG/QlYYtCY35TFWHNwGKc94wN4s7NmAjB4xlwdTkTZQ6PdZ39x1SeHkRjxAka+6GcBIoOHGQ==} + peerDependencies: + '@tiptap/core': ^3.16.0 + '@tiptap/pm': ^3.16.0 + + '@tiptap/extension-ordered-list@3.16.0': + resolution: {integrity: sha512-mNKqwEgiXSMi5afGtnodsptveukpr3GqcGsw2fqJFyNq9SITznjiiuQfULtzVnayC8qHsk0Zzbpzf0zvdHlypg==} + peerDependencies: + '@tiptap/extension-list': ^3.16.0 + + '@tiptap/extension-paragraph@3.16.0': + resolution: {integrity: sha512-JHn3ev7US5FxtQFyEOeQ8XfvKcR5NiHkwDH2Gcwe+0ttpA/Qrrr5XN3tJIgI3rXfR5DjxArq/QO0OTVBm3xlJA==} + peerDependencies: + '@tiptap/core': ^3.16.0 + + '@tiptap/extension-strike@3.16.0': + resolution: {integrity: sha512-l5/4+gii53kET7ETyYpbTumoQdZ6HwJLUcDlGHutLZlBCaZPxFTi5qgHQBhNq5KAzRH3LVJeb0fEeMi+yCZBQA==} + peerDependencies: + '@tiptap/core': ^3.16.0 + + '@tiptap/extension-text@3.16.0': + resolution: {integrity: sha512-KTewoX4wZq95cKnjBbogRwBFoGgM6qUg1yjCQ/M6Ajkp4Mtp8Iki9EiAxtfk76b/wtXFf3DsDhFOeVqgKyYbYg==} + peerDependencies: + '@tiptap/core': ^3.16.0 + + '@tiptap/extension-underline@3.16.0': + resolution: {integrity: sha512-obXAPgHVZocMaW6HtKyCYsN4CxHogWr23gioyEQcpIX0LeegHDqxkoPrjIPX6Tn1isDyvXchcSKWHEfiHO3ZOA==} + peerDependencies: + '@tiptap/core': ^3.16.0 + + '@tiptap/extensions@3.16.0': + resolution: {integrity: sha512-0iVrn0FHcHIRMdsQLQbf16NgYrKz+Sup/8dDMVBy1QoHn5Hb51QZABqXJTZ6u7My34b4fNZrSggzBAE7l7N/pA==} + peerDependencies: + '@tiptap/core': ^3.16.0 + '@tiptap/pm': ^3.16.0 + + '@tiptap/pm@3.16.0': + resolution: {integrity: sha512-FMxZ6Tc5ONKa/EByDV8lswct6YW2lF/wn11zqXmrfBZhdG7UQPTijpSwb6TCqaO5GOHmixaIaDPj+zimUREHQA==} + + '@tiptap/react@3.16.0': + resolution: {integrity: sha512-r1R19Ma4zxGt8ImiNOqSArAnWO239KUI9tTVeelgTyekPj7643lO8GbtuXJfAeWGPduDIpcAgR/Dd4NKieetiA==} + peerDependencies: + '@tiptap/core': ^3.16.0 + '@tiptap/pm': ^3.16.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + '@types/react-dom': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@tiptap/starter-kit@3.16.0': + resolution: {integrity: sha512-eWi+77SgKyhSx91Hmn32ER+gPN6FfInGtod4A+XxSG+LqS/sn6kpUEdowYrnqiZzhUXZCSTSJvC+UcMUZHOkxQ==} + '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -2040,6 +2201,15 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} @@ -2072,6 +2242,9 @@ packages: '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/use-sync-external-store@0.0.6': + resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} + '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -2608,6 +2781,9 @@ packages: typescript: optional: true + crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + cross-spawn@6.0.6: resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} engines: {node: '>=4.8'} @@ -2939,6 +3115,10 @@ packages: fast-equals@4.0.3: resolution: {integrity: sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg==} + fast-equals@5.4.0: + resolution: {integrity: sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==} + engines: {node: '>=6.0.0'} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -3655,6 +3835,12 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + + linkifyjs@4.3.2: + resolution: {integrity: sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==} + lint-staged@16.2.7: resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==} engines: {node: '>=20.17'} @@ -3745,10 +3931,17 @@ packages: makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + memorystream@0.3.1: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} @@ -3880,6 +4073,9 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + orderedmap@2.1.1: + resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} + own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} @@ -4062,6 +4258,68 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + prosemirror-changeset@2.3.1: + resolution: {integrity: sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==} + + prosemirror-collab@1.3.1: + resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==} + + prosemirror-commands@1.7.1: + resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==} + + prosemirror-dropcursor@1.8.2: + resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==} + + prosemirror-gapcursor@1.4.0: + resolution: {integrity: sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ==} + + prosemirror-history@1.5.0: + resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==} + + prosemirror-inputrules@1.5.1: + resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==} + + prosemirror-keymap@1.2.3: + resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==} + + prosemirror-markdown@1.13.3: + resolution: {integrity: sha512-3E+Et6cdXIH0EgN2tGYQ+EBT7N4kMiZFsW+hzx+aPtOmADDHWCdd2uUQb7yklJrfUYUOjEEu22BiN6UFgPe4cQ==} + + prosemirror-menu@1.2.5: + resolution: {integrity: sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==} + + prosemirror-model@1.25.4: + resolution: {integrity: sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==} + + prosemirror-schema-basic@1.2.4: + resolution: {integrity: sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==} + + prosemirror-schema-list@1.5.1: + resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} + + prosemirror-state@1.4.4: + resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==} + + prosemirror-tables@1.8.5: + resolution: {integrity: sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==} + + prosemirror-trailing-node@3.0.0: + resolution: {integrity: sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==} + peerDependencies: + prosemirror-model: ^1.22.1 + prosemirror-state: ^1.4.2 + prosemirror-view: ^1.33.8 + + prosemirror-transform@1.11.0: + resolution: {integrity: sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw==} + + prosemirror-view@1.41.5: + resolution: {integrity: sha512-UDQbIPnDrjE8tqUBbPmCOZgtd75htE6W3r0JCmY9bL6W1iemDM37MZEKC49d+tdQ0v/CKx4gjxLoLsfkD2NiZA==} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -4200,6 +4458,9 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rope-sequence@1.3.4: + resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} + rrweb-cssom@0.8.0: resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} @@ -4609,6 +4870,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} @@ -4746,6 +5010,9 @@ packages: jsdom: optional: true + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -6370,6 +6637,8 @@ snapshots: dependencies: react: 19.2.3 + '@remirror/core-constants@3.0.0': {} + '@rolldown/pluginutils@1.0.0-beta.27': {} '@rollup/pluginutils@5.3.0(rollup@4.56.0)': @@ -6749,6 +7018,183 @@ snapshots: dependencies: '@testing-library/dom': 10.4.1 + '@tiptap/core@3.16.0(@tiptap/pm@3.16.0)': + dependencies: + '@tiptap/pm': 3.16.0 + + '@tiptap/extension-blockquote@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + + '@tiptap/extension-bold@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + + '@tiptap/extension-bubble-menu@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)': + dependencies: + '@floating-ui/dom': 1.7.4 + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + '@tiptap/pm': 3.16.0 + optional: true + + '@tiptap/extension-bullet-list@3.16.0(@tiptap/extension-list@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))': + dependencies: + '@tiptap/extension-list': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0) + + '@tiptap/extension-code-block@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + '@tiptap/pm': 3.16.0 + + '@tiptap/extension-code@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + + '@tiptap/extension-document@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + + '@tiptap/extension-dropcursor@3.16.0(@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))': + dependencies: + '@tiptap/extensions': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0) + + '@tiptap/extension-floating-menu@3.16.0(@floating-ui/dom@1.7.4)(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)': + dependencies: + '@floating-ui/dom': 1.7.4 + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + '@tiptap/pm': 3.16.0 + optional: true + + '@tiptap/extension-gapcursor@3.16.0(@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))': + dependencies: + '@tiptap/extensions': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0) + + '@tiptap/extension-hard-break@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + + '@tiptap/extension-heading@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + + '@tiptap/extension-horizontal-rule@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + '@tiptap/pm': 3.16.0 + + '@tiptap/extension-italic@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + + '@tiptap/extension-link@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + '@tiptap/pm': 3.16.0 + linkifyjs: 4.3.2 + + '@tiptap/extension-list-item@3.16.0(@tiptap/extension-list@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))': + dependencies: + '@tiptap/extension-list': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0) + + '@tiptap/extension-list-keymap@3.16.0(@tiptap/extension-list@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))': + dependencies: + '@tiptap/extension-list': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0) + + '@tiptap/extension-list@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + '@tiptap/pm': 3.16.0 + + '@tiptap/extension-ordered-list@3.16.0(@tiptap/extension-list@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0))': + dependencies: + '@tiptap/extension-list': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0) + + '@tiptap/extension-paragraph@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + + '@tiptap/extension-strike@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + + '@tiptap/extension-text@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + + '@tiptap/extension-underline@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + + '@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + '@tiptap/pm': 3.16.0 + + '@tiptap/pm@3.16.0': + dependencies: + prosemirror-changeset: 2.3.1 + prosemirror-collab: 1.3.1 + prosemirror-commands: 1.7.1 + prosemirror-dropcursor: 1.8.2 + prosemirror-gapcursor: 1.4.0 + prosemirror-history: 1.5.0 + prosemirror-inputrules: 1.5.1 + prosemirror-keymap: 1.2.3 + prosemirror-markdown: 1.13.3 + prosemirror-menu: 1.2.5 + prosemirror-model: 1.25.4 + prosemirror-schema-basic: 1.2.4 + prosemirror-schema-list: 1.5.1 + prosemirror-state: 1.4.4 + prosemirror-tables: 1.8.5 + prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5) + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.5 + + '@tiptap/react@3.16.0(@floating-ui/dom@1.7.4)(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + '@tiptap/pm': 3.16.0 + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + '@types/use-sync-external-store': 0.0.6 + fast-equals: 5.4.0 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + use-sync-external-store: 1.6.0(react@19.2.3) + optionalDependencies: + '@tiptap/extension-bubble-menu': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0) + '@tiptap/extension-floating-menu': 3.16.0(@floating-ui/dom@1.7.4)(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0) + transitivePeerDependencies: + - '@floating-ui/dom' + + '@tiptap/starter-kit@3.16.0': + dependencies: + '@tiptap/core': 3.16.0(@tiptap/pm@3.16.0) + '@tiptap/extension-blockquote': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0)) + '@tiptap/extension-bold': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0)) + '@tiptap/extension-bullet-list': 3.16.0(@tiptap/extension-list@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)) + '@tiptap/extension-code': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0)) + '@tiptap/extension-code-block': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0) + '@tiptap/extension-document': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0)) + '@tiptap/extension-dropcursor': 3.16.0(@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)) + '@tiptap/extension-gapcursor': 3.16.0(@tiptap/extensions@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)) + '@tiptap/extension-hard-break': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0)) + '@tiptap/extension-heading': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0)) + '@tiptap/extension-horizontal-rule': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0) + '@tiptap/extension-italic': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0)) + '@tiptap/extension-link': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0) + '@tiptap/extension-list': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0) + '@tiptap/extension-list-item': 3.16.0(@tiptap/extension-list@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)) + '@tiptap/extension-list-keymap': 3.16.0(@tiptap/extension-list@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)) + '@tiptap/extension-ordered-list': 3.16.0(@tiptap/extension-list@3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0)) + '@tiptap/extension-paragraph': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0)) + '@tiptap/extension-strike': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0)) + '@tiptap/extension-text': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0)) + '@tiptap/extension-underline': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0)) + '@tiptap/extensions': 3.16.0(@tiptap/core@3.16.0(@tiptap/pm@3.16.0))(@tiptap/pm@3.16.0) + '@tiptap/pm': 3.16.0 + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 @@ -6813,6 +7259,15 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/linkify-it@5.0.0': {} + + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + + '@types/mdurl@2.0.0': {} + '@types/mdx@2.0.13': {} '@types/node@24.10.9': @@ -6842,6 +7297,8 @@ snapshots: '@types/trusted-types@2.0.7': optional: true + '@types/use-sync-external-store@0.0.6': {} + '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.35': @@ -7424,6 +7881,8 @@ snapshots: optionalDependencies: typescript: 5.9.3 + crelt@1.0.6: {} + cross-spawn@6.0.6: dependencies: nice-try: 1.0.5 @@ -7866,6 +8325,8 @@ snapshots: fast-equals@4.0.3: {} + fast-equals@5.4.0: {} + fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} @@ -8749,6 +9210,12 @@ snapshots: lines-and-columns@1.2.4: {} + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + + linkifyjs@4.3.2: {} + lint-staged@16.2.7: dependencies: commander: 14.0.2 @@ -8849,8 +9316,19 @@ snapshots: dependencies: tmpl: 1.0.5 + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + math-intrinsics@1.1.0: {} + mdurl@2.0.0: {} + memorystream@0.3.1: {} merge-stream@2.0.0: {} @@ -8974,6 +9452,8 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + orderedmap@2.1.1: {} + own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 @@ -9135,6 +9615,111 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 + prosemirror-changeset@2.3.1: + dependencies: + prosemirror-transform: 1.11.0 + + prosemirror-collab@1.3.1: + dependencies: + prosemirror-state: 1.4.4 + + prosemirror-commands@1.7.1: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + + prosemirror-dropcursor@1.8.2: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.5 + + prosemirror-gapcursor@1.4.0: + dependencies: + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-view: 1.41.5 + + prosemirror-history@1.5.0: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.5 + rope-sequence: 1.3.4 + + prosemirror-inputrules@1.5.1: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + + prosemirror-keymap@1.2.3: + dependencies: + prosemirror-state: 1.4.4 + w3c-keyname: 2.2.8 + + prosemirror-markdown@1.13.3: + dependencies: + '@types/markdown-it': 14.1.2 + markdown-it: 14.1.0 + prosemirror-model: 1.25.4 + + prosemirror-menu@1.2.5: + dependencies: + crelt: 1.0.6 + prosemirror-commands: 1.7.1 + prosemirror-history: 1.5.0 + prosemirror-state: 1.4.4 + + prosemirror-model@1.25.4: + dependencies: + orderedmap: 2.1.1 + + prosemirror-schema-basic@1.2.4: + dependencies: + prosemirror-model: 1.25.4 + + prosemirror-schema-list@1.5.1: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + + prosemirror-state@1.4.4: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.5 + + prosemirror-tables@1.8.5: + dependencies: + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.5 + + prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5): + dependencies: + '@remirror/core-constants': 3.0.0 + escape-string-regexp: 4.0.0 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-view: 1.41.5 + + prosemirror-transform@1.11.0: + dependencies: + prosemirror-model: 1.25.4 + + prosemirror-view@1.41.5: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + + punycode.js@2.3.1: {} + punycode@2.3.1: {} pure-rand@7.0.1: {} @@ -9321,6 +9906,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.56.0 fsevents: 2.3.3 + rope-sequence@1.3.4: {} + rrweb-cssom@0.8.0: {} safe-array-concat@1.1.3: @@ -9762,6 +10349,8 @@ snapshots: typescript@5.9.3: {} + uc.micro@2.1.0: {} + unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 @@ -9930,6 +10519,8 @@ snapshots: - tsx - yaml + w3c-keyname@2.2.8: {} + w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 From 50e356addbbd53d606665a711daa4c56cee628eb Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Sat, 24 Jan 2026 22:36:57 +0530 Subject: [PATCH 02/48] feat: add basic text editing features in text editor Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- packages/frappe-ui-react/package.json | 4 + .../components/textEditor/menu/commands.ts | 152 +++++++++++++++++ .../components/textEditor/menu/fixedMenu.tsx | 14 ++ .../src/components/textEditor/menu/menu.tsx | 153 ++++++++++++++++++ .../src/components/textEditor/textEditor.tsx | 23 ++- .../src/components/textEditor/types.ts | 8 + packages/frappe-ui-react/src/theme.css | 1 + 7 files changed, 352 insertions(+), 3 deletions(-) create mode 100644 packages/frappe-ui-react/src/components/textEditor/menu/commands.ts create mode 100644 packages/frappe-ui-react/src/components/textEditor/menu/fixedMenu.tsx create mode 100644 packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx diff --git a/packages/frappe-ui-react/package.json b/packages/frappe-ui-react/package.json index 225273a6..a09958c8 100644 --- a/packages/frappe-ui-react/package.json +++ b/packages/frappe-ui-react/package.json @@ -46,6 +46,9 @@ "@floating-ui/react": "^0.27.13", "@headlessui/react": "^2.2.6", "@popperjs/core": "^2.11.8", + "@tiptap/extension-list": "^3.17.1", + "@tiptap/extension-task-list": "^3.17.0", + "@tiptap/extension-text-align": "^3.17.1", "@tiptap/pm": "^3.16.0", "@tiptap/react": "^3.16.0", "@tiptap/starter-kit": "^3.16.0", @@ -67,6 +70,7 @@ "tailwindcss": "^4.1.18" }, "devDependencies": { + "@tailwindcss/typography": "^0.5.19", "@types/feather-icons": "^4.29.4", "@types/node": "^24.1.0", "@types/react-grid-layout": "^1.3.5" diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/commands.ts b/packages/frappe-ui-react/src/components/textEditor/menu/commands.ts new file mode 100644 index 00000000..a04c9177 --- /dev/null +++ b/packages/frappe-ui-react/src/components/textEditor/menu/commands.ts @@ -0,0 +1,152 @@ +/** + * External dependencies. + */ +import { + AlignCenterIcon, + AlignLeftIcon, + AlignRightIcon, + BoldIcon, + Heading1Icon, + Heading2Icon, + Heading3Icon, + Heading4Icon, + Heading5Icon, + Heading6Icon, + ItalicIcon, + ListCheckIcon, + ListIcon, + ListOrderedIcon, + TextIcon, +} from "lucide-react"; + +/** + * Internal dependencies. + */ +import type { EditorCommand } from "../types"; + +export const COMMANDS_KEYS = [ + "paragraph", + "heading_1", + "heading_2", + "heading_3", + "heading_4", + "heading_5", + "heading_6", + "bold", + "italic", + "bullet_list", + "numbered_list", + "task_list", + "align_left", + "align_center", + "align_right", +] as const; + +export type TYPE_COMMANDS_KEYS = (typeof COMMANDS_KEYS)[number]; + +export const COMMANDS: Record = { + paragraph: { + label: "Paragraph", + icon: TextIcon, + action: (editor) => editor.chain().focus().setParagraph().run(), + isActive: (editor) => editor.isActive("paragraph"), + }, + heading_1: { + label: "Heading 1", + text: "H1", + icon: Heading1Icon, + action: (editor) => + editor.chain().focus().toggleHeading({ level: 1 }).run(), + isActive: (editor) => editor.isActive("heading", { level: 1 }), + }, + heading_2: { + label: "Heading 2", + text: "H2", + icon: Heading2Icon, + action: (editor) => + editor.chain().focus().toggleHeading({ level: 2 }).run(), + isActive: (editor) => editor.isActive("heading", { level: 2 }), + }, + heading_3: { + label: "Heading 3", + text: "H3", + icon: Heading3Icon, + action: (editor) => + editor.chain().focus().toggleHeading({ level: 3 }).run(), + isActive: (editor) => editor.isActive("heading", { level: 3 }), + }, + heading_4: { + label: "Heading 4", + text: "H4", + icon: Heading4Icon, + action: (editor) => + editor.chain().focus().toggleHeading({ level: 4 }).run(), + isActive: (editor) => editor.isActive("heading", { level: 4 }), + }, + heading_5: { + label: "Heading 5", + text: "H5", + icon: Heading5Icon, + action: (editor) => + editor.chain().focus().toggleHeading({ level: 5 }).run(), + isActive: (editor) => editor.isActive("heading", { level: 5 }), + }, + heading_6: { + label: "Heading 6", + text: "H6", + icon: Heading6Icon, + action: (editor) => + editor.chain().focus().toggleHeading({ level: 6 }).run(), + isActive: (editor) => editor.isActive("heading", { level: 6 }), + }, + bold: { + label: "Bold", + icon: BoldIcon, + action: (editor) => editor.chain().focus().toggleBold().run(), + isActive: (editor) => editor.isActive("bold"), + }, + italic: { + label: "Italic", + icon: ItalicIcon, + action: (editor) => editor.chain().focus().toggleItalic().run(), + isActive: (editor) => editor.isActive("italic"), + }, + bullet_list: { + label: "Bullet List", + icon: ListIcon, + action: (editor) => editor.chain().focus().toggleBulletList().run(), + isActive: (editor) => editor.isActive("bulletList"), + }, + numbered_list: { + label: "Numbered List", + icon: ListOrderedIcon, + action: (editor) => editor.chain().focus().toggleOrderedList().run(), + isActive: (editor) => editor.isActive("orderedList"), + }, + task_list: { + label: "Task List", + icon: ListCheckIcon, + action: (editor) => editor.chain().focus().toggleTaskList().run(), + isActive: (editor) => editor.isActive("taskList"), + }, + align_center: { + label: "Align Center", + icon: AlignCenterIcon, + action: (editor) => editor.chain().focus().setTextAlign("center").run(), + isActive: (editor) => editor.isActive({ textAlign: "center" }), + }, + align_left: { + label: "Align Left", + icon: AlignLeftIcon, + action: (editor) => editor.chain().focus().setTextAlign("left").run(), + isActive: (editor) => editor.isActive({ textAlign: "left" }), + }, + align_right: { + label: "Align Right", + icon: AlignRightIcon, + action: (editor) => editor.chain().focus().setTextAlign("right").run(), + isActive: (editor) => editor.isActive({ textAlign: "right" }), + }, +}; + +export default COMMANDS; diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/fixedMenu.tsx b/packages/frappe-ui-react/src/components/textEditor/menu/fixedMenu.tsx new file mode 100644 index 00000000..f6d6944f --- /dev/null +++ b/packages/frappe-ui-react/src/components/textEditor/menu/fixedMenu.tsx @@ -0,0 +1,14 @@ +/** + * External dependencies. + */ + +/** + * Internal dependencies. + */ +import Menu from "./menu"; + +const FixedMenu = () => { + return ; +}; + +export default FixedMenu; diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx b/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx new file mode 100644 index 00000000..6f61efa4 --- /dev/null +++ b/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx @@ -0,0 +1,153 @@ +/** + * External dependencies. + */ + +import { useCurrentEditor, useEditorState } from "@tiptap/react"; +import clsx from "clsx"; + +/** + * Internal dependencies. + */ +import COMMANDS, { type TYPE_COMMANDS_KEYS } from "./commands"; +import type { EditorCommand } from "../types"; +import { Popover } from "../../popover"; + +export interface MenuProps { + className?: string; +} + +const DEFAULT_COMMANDS: Array< + TYPE_COMMANDS_KEYS | "separator" | Array +> = [ + [ + "heading_1", + "heading_2", + "heading_3", + "heading_4", + "heading_5", + "heading_6", + ], + "paragraph", + "separator", + "bold", + "italic", + "separator", + "bullet_list", + "numbered_list", + "task_list", + "separator", + "align_left", + "align_center", + "align_right", + "separator", +]; + +const Menu = ({ className }: MenuProps) => { + const { editor } = useCurrentEditor(); + const editorState = useEditorState({ + editor, + selector: (ctx) => ({ + selection: ctx?.editor?.state?.selection, + focused: ctx?.editor?.state?.selection, + }), + }); + + const isButtonActive = (button: EditorCommand): boolean => { + if (editor && editorState && editorState.focused && button.isActive) { + return button.isActive(editor); + } + return false; + }; + + if (!editor) { + return null; + } + + return ( +
+ {DEFAULT_COMMANDS.map((command_key, index) => { + if (Array.isArray(command_key)) { + const activeCommand = editorState?.focused + ? command_key.find((b) => COMMANDS[b].isActive(editor)) || + command_key[0] + : command_key[0]; + + const ActiveIcon = COMMANDS[activeCommand].icon; + + return ( +
+ ( + + )} + body={({ close }) => ( +
    + {command_key.map((command_key, optionIndex) => { + const command = COMMANDS[command_key]; + return ( +
  • + +
  • + ); + })} +
+ )} + /> +
+ ); + } + if (command_key == "separator") { + return ( +
+ ); + } + const command: EditorCommand = COMMANDS[command_key]; + const label = command.label; + const Icon = command.icon; + return ( + + ); + })} +
+ ); +}; + +export default Menu; diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx index 6fc7fb4a..5a161bc3 100644 --- a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx @@ -1,8 +1,10 @@ /** * External dependencies. */ -import { EditorContent, useEditor } from "@tiptap/react"; +import { EditorContent, EditorContext, useEditor } from "@tiptap/react"; import StarterKit from "@tiptap/starter-kit"; +import { TaskItem, TaskList } from "@tiptap/extension-list"; +import TextAlign from "@tiptap/extension-text-align"; import clsx from "clsx"; /** @@ -11,6 +13,7 @@ import clsx from "clsx"; import "./textEditor.css"; import { normalizeClasses } from "../../utils"; import type { TextEditorProps } from "./types"; +import FixedMenu from "./menu/fixedMenu"; const TextEditor = ({ content, editorClass = "" }: TextEditorProps) => { const editor = useEditor({ @@ -23,10 +26,24 @@ const TextEditor = ({ content, editorClass = "" }: TextEditorProps) => { ), }, }, - extensions: [StarterKit], + extensions: [ + StarterKit, + TaskList, + TaskItem.configure({ + nested: true, + }), + TextAlign.configure({ + types: ["heading", "paragraph"], + }), + ], }); - return ; + return ( + + + + + ); }; export default TextEditor; diff --git a/packages/frappe-ui-react/src/components/textEditor/types.ts b/packages/frappe-ui-react/src/components/textEditor/types.ts index 08466a0d..7479f2a3 100644 --- a/packages/frappe-ui-react/src/components/textEditor/types.ts +++ b/packages/frappe-ui-react/src/components/textEditor/types.ts @@ -16,3 +16,11 @@ export interface TextEditorProps { onTransaction?: (editor: Editor) => void; className?: string; } + +export interface EditorCommand { + label: string; + text?: string; + icon: React.ComponentType<{ className?: string }>; + action: (editor: Editor) => void; + isActive: (editor: Editor) => boolean; +} diff --git a/packages/frappe-ui-react/src/theme.css b/packages/frappe-ui-react/src/theme.css index 9d8a1e5a..05ad3c20 100644 --- a/packages/frappe-ui-react/src/theme.css +++ b/packages/frappe-ui-react/src/theme.css @@ -1,5 +1,6 @@ @import url("https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap"); @import "tailwindcss"; +@plugin "@tailwindcss/typography"; @config './utils/tailwind.config.cjs'; @source './components'; From 01a90b1c9feb18d827549e6801dc69322d7a80ed Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Sat, 24 Jan 2026 23:42:15 +0530 Subject: [PATCH 03/48] feat: add font color and highlight option Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- packages/frappe-ui-react/package.json | 32 +++-- .../textEditor/menu/commands/fontColor.tsx | 132 ++++++++++++++++++ .../menu/{commands.ts => commands/index.ts} | 12 +- .../src/components/textEditor/menu/menu.tsx | 27 +++- .../textEditor/texEditor.stories.tsx | 2 +- .../src/components/textEditor/textEditor.tsx | 4 + .../src/components/textEditor/types.ts | 8 +- 7 files changed, 197 insertions(+), 20 deletions(-) create mode 100644 packages/frappe-ui-react/src/components/textEditor/menu/commands/fontColor.tsx rename packages/frappe-ui-react/src/components/textEditor/menu/{commands.ts => commands/index.ts} (92%) diff --git a/packages/frappe-ui-react/package.json b/packages/frappe-ui-react/package.json index a09958c8..bdc293d8 100644 --- a/packages/frappe-ui-react/package.json +++ b/packages/frappe-ui-react/package.json @@ -42,37 +42,39 @@ "publish:remote": "pnpm publish" }, "dependencies": { - "@base-ui/react": "^1.0.0", - "@floating-ui/react": "^0.27.13", - "@headlessui/react": "^2.2.6", + "@base-ui/react": "^1.1.0", + "@floating-ui/react": "^0.27.16", + "@headlessui/react": "^2.2.9", "@popperjs/core": "^2.11.8", + "@tiptap/extension-highlight": "^3.17.1", "@tiptap/extension-list": "^3.17.1", - "@tiptap/extension-task-list": "^3.17.0", + "@tiptap/extension-task-list": "^3.17.1", "@tiptap/extension-text-align": "^3.17.1", - "@tiptap/pm": "^3.16.0", - "@tiptap/react": "^3.16.0", - "@tiptap/starter-kit": "^3.16.0", + "@tiptap/extension-text-style": "^3.17.1", + "@tiptap/pm": "^3.17.1", + "@tiptap/react": "^3.17.1", + "@tiptap/starter-kit": "^3.17.1", "clsx": "^2.1.1", - "dayjs": "^1.11.13", + "dayjs": "^1.11.19", "dompurify": "^3.3.1", "echarts": "^6.0.0", "feather-icons": "^4.29.2", - "lodash": "^4.17.21", - "lodash-es": "^4.17.21", + "lodash": "^4.17.23", + "lodash-es": "^4.17.23", "lodash.clonedeep": "^4.5.0", "lodash.isequal": "^4.5.0", "lucide-react": "^0.539.0", - "react": "^19.1.0", + "react": "^19.2.3", "react-dom": "^19.2.3", - "react-grid-layout": "^1.5.2", + "react-grid-layout": "^1.5.3", "react-resizable": "^3.1.3", - "styled-components": "^6.1.19", + "styled-components": "^6.3.8", "tailwindcss": "^4.1.18" }, "devDependencies": { "@tailwindcss/typography": "^0.5.19", "@types/feather-icons": "^4.29.4", - "@types/node": "^24.1.0", - "@types/react-grid-layout": "^1.3.5" + "@types/node": "^24.10.9", + "@types/react-grid-layout": "^1.3.6" } } diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/commands/fontColor.tsx b/packages/frappe-ui-react/src/components/textEditor/menu/commands/fontColor.tsx new file mode 100644 index 00000000..1b80e49a --- /dev/null +++ b/packages/frappe-ui-react/src/components/textEditor/menu/commands/fontColor.tsx @@ -0,0 +1,132 @@ +/** + * External dependencies. + */ +import clsx from "clsx"; +import { useCurrentEditor } from "@tiptap/react"; + +/** + * Internal dependencies. + */ +import { Popover } from "../../../popover"; +import { Tooltip } from "../../../tooltip"; + +interface FontColorProps { + children: (props: { + isActive?: boolean; + onClick?: () => void; + }) => React.ReactNode; +} + +const foregroundColors: string[] = [ + "#171717", + "#cc2929", + "#d45a08", + "#d1930d", + "#0f814a", + "#13564f", + "#0b9e92", + "#007be0", + "#8642c2", + "#cf3a96", + "#343434", +]; + +const backgroundColors: string[] = [ + "#000000b8", + "#ffe7e7", + "#ffefe4", + "#fff7d3", + "#e4faeb", + "#e6f7f4", + "#ddf7ff", + "#e6f4ff", + "#f6e9ff", + "#fde8f5", + "#d4d4d4", +]; + +const FontColor = ({ children }: FontColorProps) => { + const { editor } = useCurrentEditor(); + + const setForegroundColor = (color: string) => { + if (!editor) { + return; + } + editor.chain().focus().setColor(color).run(); + }; + + const setBackgroundColor = (color: string) => { + if (!editor) { + return; + } + editor.chain().focus().setHighlight({ color }).run(); + }; + + return ( + + children({ + isActive: isOpen, + onClick: () => togglePopover(), + }) + } + body={({ close }) => ( +
+
+
Text Color
+
+ {foregroundColors.map((color) => ( +
+ + + +
+ ))} +
+
Background Color
+
+ {backgroundColors.map((color) => ( +
+ + + +
+ ))} +
+
+
+ )} + /> + ); +}; + +export default FontColor; diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/commands.ts b/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts similarity index 92% rename from packages/frappe-ui-react/src/components/textEditor/menu/commands.ts rename to packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts index a04c9177..03a70ea9 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/commands.ts +++ b/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts @@ -5,6 +5,7 @@ import { AlignCenterIcon, AlignLeftIcon, AlignRightIcon, + BaselineIcon, BoldIcon, Heading1Icon, Heading2Icon, @@ -22,7 +23,8 @@ import { /** * Internal dependencies. */ -import type { EditorCommand } from "../types"; +import type { EditorCommand } from "../../types"; +import FontColor from "./fontColor"; export const COMMANDS_KEYS = [ "paragraph", @@ -40,6 +42,7 @@ export const COMMANDS_KEYS = [ "align_left", "align_center", "align_right", + "font_color", ] as const; export type TYPE_COMMANDS_KEYS = (typeof COMMANDS_KEYS)[number]; @@ -147,6 +150,13 @@ export const COMMANDS: Record = { action: (editor) => editor.chain().focus().setTextAlign("right").run(), isActive: (editor) => editor.isActive({ textAlign: "right" }), }, + font_color: { + label: "Font Color", + icon: BaselineIcon, + isActive: (editor) => + editor.isActive("textStyle") || editor.isActive("highlight"), + component: FontColor, + }, }; export default COMMANDS; diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx b/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx index 6f61efa4..c6614b8b 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx @@ -40,6 +40,7 @@ const DEFAULT_COMMANDS: Array< "align_center", "align_right", "separator", + "font_color", ]; const Menu = ({ className }: MenuProps) => { @@ -105,7 +106,7 @@ const Menu = ({ className }: MenuProps) => { }} title={command.label} > - + {command.label} @@ -127,7 +128,29 @@ const Menu = ({ className }: MenuProps) => { >
); } + const command: EditorCommand = COMMANDS[command_key]; + + if (command.component) { + return ( + + {({ isActive, onClick }) => ( + + )} + + ); + } const label = command.label; const Icon = command.icon; return ( @@ -139,7 +162,7 @@ const Menu = ({ className }: MenuProps) => { ? "bg-surface-gray-3" : "hover:bg-surface-gray-2" )} - onClick={() => command.action(editor)} + onClick={() => command.action?.(editor)} title={label} > diff --git a/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx b/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx index b5e461b7..78189aee 100644 --- a/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx @@ -36,7 +36,7 @@ export const Basic: Story = {
  • Item 2
  • `); return ( -
    +
    ); diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx index 5a161bc3..9855c895 100644 --- a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx @@ -5,6 +5,8 @@ import { EditorContent, EditorContext, useEditor } from "@tiptap/react"; import StarterKit from "@tiptap/starter-kit"; import { TaskItem, TaskList } from "@tiptap/extension-list"; import TextAlign from "@tiptap/extension-text-align"; +import Highlight from "@tiptap/extension-highlight"; +import { TextStyleKit } from "@tiptap/extension-text-style"; import clsx from "clsx"; /** @@ -35,6 +37,8 @@ const TextEditor = ({ content, editorClass = "" }: TextEditorProps) => { TextAlign.configure({ types: ["heading", "paragraph"], }), + TextStyleKit, + Highlight.configure({ multicolor: true }), ], }); diff --git a/packages/frappe-ui-react/src/components/textEditor/types.ts b/packages/frappe-ui-react/src/components/textEditor/types.ts index 7479f2a3..50f1c6db 100644 --- a/packages/frappe-ui-react/src/components/textEditor/types.ts +++ b/packages/frappe-ui-react/src/components/textEditor/types.ts @@ -21,6 +21,12 @@ export interface EditorCommand { label: string; text?: string; icon: React.ComponentType<{ className?: string }>; - action: (editor: Editor) => void; + action?: (editor: Editor) => void; isActive: (editor: Editor) => boolean; + component?: React.ComponentType<{ + children: (props: { + isActive?: boolean; + onClick?: () => void; + }) => React.ReactNode; + }>; } From 71338529c3ba0fe18c71c2141e1175098df985e5 Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Sun, 25 Jan 2026 00:27:21 +0530 Subject: [PATCH 04/48] refactor: command folder Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- .../menu/{commands.ts => commands/index.ts} | 22 +------------ .../textEditor/menu/commands/types.ts | 32 +++++++++++++++++++ .../src/components/textEditor/menu/menu.tsx | 4 +-- .../src/components/textEditor/types.ts | 11 ++----- 4 files changed, 38 insertions(+), 31 deletions(-) rename packages/frappe-ui-react/src/components/textEditor/menu/{commands.ts => commands/index.ts} (90%) create mode 100644 packages/frappe-ui-react/src/components/textEditor/menu/commands/types.ts diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/commands.ts b/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts similarity index 90% rename from packages/frappe-ui-react/src/components/textEditor/menu/commands.ts rename to packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts index a04c9177..9c093777 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/commands.ts +++ b/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts @@ -22,27 +22,7 @@ import { /** * Internal dependencies. */ -import type { EditorCommand } from "../types"; - -export const COMMANDS_KEYS = [ - "paragraph", - "heading_1", - "heading_2", - "heading_3", - "heading_4", - "heading_5", - "heading_6", - "bold", - "italic", - "bullet_list", - "numbered_list", - "task_list", - "align_left", - "align_center", - "align_right", -] as const; - -export type TYPE_COMMANDS_KEYS = (typeof COMMANDS_KEYS)[number]; +import type { TYPE_COMMANDS_KEYS, EditorCommand } from "./types"; export const COMMANDS: Record = { paragraph: { diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/commands/types.ts b/packages/frappe-ui-react/src/components/textEditor/menu/commands/types.ts new file mode 100644 index 00000000..cb2160c1 --- /dev/null +++ b/packages/frappe-ui-react/src/components/textEditor/menu/commands/types.ts @@ -0,0 +1,32 @@ +/** + * External dependencies. + */ +import type { Editor } from "@tiptap/react"; + +export const COMMANDS_KEYS = [ + "paragraph", + "heading_1", + "heading_2", + "heading_3", + "heading_4", + "heading_5", + "heading_6", + "bold", + "italic", + "bullet_list", + "numbered_list", + "task_list", + "align_left", + "align_center", + "align_right", +] as const; + +export type TYPE_COMMANDS_KEYS = (typeof COMMANDS_KEYS)[number]; + +export interface EditorCommand { + label: string; + text?: string; + icon: React.ComponentType<{ className?: string }>; + action: (editor: Editor) => void; + isActive: (editor: Editor) => boolean; +} diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx b/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx index 6f61efa4..f106778f 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx @@ -8,9 +8,9 @@ import clsx from "clsx"; /** * Internal dependencies. */ -import COMMANDS, { type TYPE_COMMANDS_KEYS } from "./commands"; -import type { EditorCommand } from "../types"; +import COMMANDS from "./commands"; import { Popover } from "../../popover"; +import type { TYPE_COMMANDS_KEYS, EditorCommand } from "./commands/types"; export interface MenuProps { className?: string; diff --git a/packages/frappe-ui-react/src/components/textEditor/types.ts b/packages/frappe-ui-react/src/components/textEditor/types.ts index 7479f2a3..e39d9cca 100644 --- a/packages/frappe-ui-react/src/components/textEditor/types.ts +++ b/packages/frappe-ui-react/src/components/textEditor/types.ts @@ -1,3 +1,6 @@ +/** + * External dependencies. + */ import type { Editor } from "@tiptap/react"; export interface TextEditorProps { @@ -16,11 +19,3 @@ export interface TextEditorProps { onTransaction?: (editor: Editor) => void; className?: string; } - -export interface EditorCommand { - label: string; - text?: string; - icon: React.ComponentType<{ className?: string }>; - action: (editor: Editor) => void; - isActive: (editor: Editor) => boolean; -} From 0e477a502debfbaf69155b26e494c9544b94576f Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Sun, 25 Jan 2026 00:33:08 +0530 Subject: [PATCH 05/48] fix: merge issues Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- .../src/components/textEditor/menu/commands/index.ts | 1 + .../src/components/textEditor/menu/commands/types.ts | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts b/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts index 4953212f..5f9b5ab7 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts +++ b/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts @@ -24,6 +24,7 @@ import { * Internal dependencies. */ import type { TYPE_COMMANDS_KEYS, EditorCommand } from "./types"; +import FontColor from "./fontColor"; export const COMMANDS: Record = { paragraph: { diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/commands/types.ts b/packages/frappe-ui-react/src/components/textEditor/menu/commands/types.ts index a95b12a8..e33c1147 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/commands/types.ts +++ b/packages/frappe-ui-react/src/components/textEditor/menu/commands/types.ts @@ -19,6 +19,7 @@ export const COMMANDS_KEYS = [ "align_left", "align_center", "align_right", + "font_color", ] as const; export type TYPE_COMMANDS_KEYS = (typeof COMMANDS_KEYS)[number]; @@ -27,7 +28,7 @@ export interface EditorCommand { label: string; text?: string; icon: React.ComponentType<{ className?: string }>; - action: (editor: Editor) => void; + action?: (editor: Editor) => void; isActive: (editor: Editor) => boolean; component?: React.ComponentType<{ children: (props: { From a1f4dfb053dbeeb29bb12b2329abb0490bd5fac6 Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Mon, 26 Jan 2026 11:28:34 +0530 Subject: [PATCH 06/48] feat: add strikethrough option Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- packages/frappe-ui-react/package.json | 1 + .../src/components/textEditor/menu/commands/index.ts | 7 +++++++ .../src/components/textEditor/menu/commands/types.ts | 1 + .../src/components/textEditor/menu/menu.tsx | 1 + .../src/components/textEditor/textEditor.tsx | 2 ++ 5 files changed, 12 insertions(+) diff --git a/packages/frappe-ui-react/package.json b/packages/frappe-ui-react/package.json index a09958c8..252bba81 100644 --- a/packages/frappe-ui-react/package.json +++ b/packages/frappe-ui-react/package.json @@ -47,6 +47,7 @@ "@headlessui/react": "^2.2.6", "@popperjs/core": "^2.11.8", "@tiptap/extension-list": "^3.17.1", + "@tiptap/extension-strike": "^3.17.1", "@tiptap/extension-task-list": "^3.17.0", "@tiptap/extension-text-align": "^3.17.1", "@tiptap/pm": "^3.16.0", diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts b/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts index 9c093777..7c376bb5 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts +++ b/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts @@ -16,6 +16,7 @@ import { ListCheckIcon, ListIcon, ListOrderedIcon, + StrikethroughIcon, TextIcon, } from "lucide-react"; @@ -127,6 +128,12 @@ export const COMMANDS: Record = { action: (editor) => editor.chain().focus().setTextAlign("right").run(), isActive: (editor) => editor.isActive({ textAlign: "right" }), }, + strike: { + label: "Strike", + icon: StrikethroughIcon, + action: (editor) => editor.chain().focus().toggleStrike().run(), + isActive: (editor) => editor.isActive("strike"), + }, }; export default COMMANDS; diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/commands/types.ts b/packages/frappe-ui-react/src/components/textEditor/menu/commands/types.ts index cb2160c1..9b113688 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/commands/types.ts +++ b/packages/frappe-ui-react/src/components/textEditor/menu/commands/types.ts @@ -19,6 +19,7 @@ export const COMMANDS_KEYS = [ "align_left", "align_center", "align_right", + "strike", ] as const; export type TYPE_COMMANDS_KEYS = (typeof COMMANDS_KEYS)[number]; diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx b/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx index f106778f..efcf60e8 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx @@ -31,6 +31,7 @@ const DEFAULT_COMMANDS: Array< "separator", "bold", "italic", + "strike", "separator", "bullet_list", "numbered_list", diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx index 5a161bc3..a8b577f7 100644 --- a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx @@ -5,6 +5,7 @@ import { EditorContent, EditorContext, useEditor } from "@tiptap/react"; import StarterKit from "@tiptap/starter-kit"; import { TaskItem, TaskList } from "@tiptap/extension-list"; import TextAlign from "@tiptap/extension-text-align"; +import Strike from "@tiptap/extension-strike"; import clsx from "clsx"; /** @@ -35,6 +36,7 @@ const TextEditor = ({ content, editorClass = "" }: TextEditorProps) => { TextAlign.configure({ types: ["heading", "paragraph"], }), + Strike, ], }); From 58aea4c03963d1e49d8985b6dd067301b8090f10 Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Mon, 26 Jan 2026 11:36:22 +0530 Subject: [PATCH 07/48] style-fix: fix order for options Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- .../src/components/textEditor/menu/commands/index.ts | 4 ++-- .../frappe-ui-react/src/components/textEditor/menu/menu.tsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts b/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts index 7c376bb5..88320058 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts +++ b/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts @@ -17,7 +17,7 @@ import { ListIcon, ListOrderedIcon, StrikethroughIcon, - TextIcon, + TypeIcon, } from "lucide-react"; /** @@ -28,7 +28,7 @@ import type { TYPE_COMMANDS_KEYS, EditorCommand } from "./types"; export const COMMANDS: Record = { paragraph: { label: "Paragraph", - icon: TextIcon, + icon: TypeIcon, action: (editor) => editor.chain().focus().setParagraph().run(), isActive: (editor) => editor.isActive("paragraph"), }, diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx b/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx index efcf60e8..5c394921 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx @@ -19,6 +19,7 @@ export interface MenuProps { const DEFAULT_COMMANDS: Array< TYPE_COMMANDS_KEYS | "separator" | Array > = [ + "paragraph", [ "heading_1", "heading_2", @@ -27,7 +28,6 @@ const DEFAULT_COMMANDS: Array< "heading_5", "heading_6", ], - "paragraph", "separator", "bold", "italic", @@ -135,7 +135,7 @@ const Menu = ({ className }: MenuProps) => { )} body={({ close }) => (
      {command_key.map((command_key, optionIndex) => { const command = COMMANDS[command_key]; + const isDisabled = command.isDisabled?.(editor); + if (isDisabled) { + return null; + } return (
    • ); })} diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx index a8b577f7..b26524cd 100644 --- a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx @@ -6,6 +6,7 @@ import StarterKit from "@tiptap/starter-kit"; import { TaskItem, TaskList } from "@tiptap/extension-list"; import TextAlign from "@tiptap/extension-text-align"; import Strike from "@tiptap/extension-strike"; +import { TableKit } from "@tiptap/extension-table"; import clsx from "clsx"; /** @@ -37,6 +38,7 @@ const TextEditor = ({ content, editorClass = "" }: TextEditorProps) => { types: ["heading", "paragraph"], }), Strike, + TableKit, ], }); From 11db0cafc54d6abed8105dd1998e8a21e04045f4 Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Mon, 26 Jan 2026 19:36:19 +0530 Subject: [PATCH 16/48] feat: bind event handling Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- .../src/components/textEditor/textEditor.tsx | 21 ++++++++++++++++++- .../src/components/textEditor/types.ts | 4 +++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx index a8b577f7..2f46573f 100644 --- a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx @@ -16,7 +16,14 @@ import { normalizeClasses } from "../../utils"; import type { TextEditorProps } from "./types"; import FixedMenu from "./menu/fixedMenu"; -const TextEditor = ({ content, editorClass = "" }: TextEditorProps) => { +const TextEditor = ({ + content, + editorClass = "", + onChange, + onFocus, + onBlur, + onTransaction, +}: TextEditorProps) => { const editor = useEditor({ content, editorProps: { @@ -38,6 +45,18 @@ const TextEditor = ({ content, editorClass = "" }: TextEditorProps) => { }), Strike, ], + onUpdate: ({ editor }) => { + onChange?.(editor.getHTML()); + }, + onFocus: ({ event }) => { + onFocus?.(event); + }, + onBlur: ({ event }) => { + onBlur?.(event); + }, + onTransaction: () => { + onTransaction?.(editor); + }, }); return ( diff --git a/packages/frappe-ui-react/src/components/textEditor/types.ts b/packages/frappe-ui-react/src/components/textEditor/types.ts index e39d9cca..0ca90619 100644 --- a/packages/frappe-ui-react/src/components/textEditor/types.ts +++ b/packages/frappe-ui-react/src/components/textEditor/types.ts @@ -4,6 +4,7 @@ import type { Editor } from "@tiptap/react"; export interface TextEditorProps { + // Props content?: string | null; placeholder?: string | (() => string); editorClass?: string | string[] | Record; @@ -13,9 +14,10 @@ export interface TextEditorProps { bubbleMenuOptions?: Record; fixedMenu?: boolean; floatingMenu?: boolean; + className?: string; + // Events onChange?: (content: string) => void; onFocus?: (event: FocusEvent) => void; onBlur?: (event: FocusEvent) => void; onTransaction?: (editor: Editor) => void; - className?: string; } From 8e5772d750d6d73004b787beae5be132bc27ce17 Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Mon, 26 Jan 2026 19:40:36 +0530 Subject: [PATCH 17/48] feat: add placeholder handling Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- packages/frappe-ui-react/package.json | 1 + .../src/components/textEditor/textEditor.tsx | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/packages/frappe-ui-react/package.json b/packages/frappe-ui-react/package.json index 4807c29e..41e6cf1e 100644 --- a/packages/frappe-ui-react/package.json +++ b/packages/frappe-ui-react/package.json @@ -47,6 +47,7 @@ "@headlessui/react": "^2.2.9", "@popperjs/core": "^2.11.8", "@tiptap/extension-list": "^3.17.1", + "@tiptap/extension-placeholder": "^3.17.1", "@tiptap/extension-strike": "^3.17.1", "@tiptap/extension-task-list": "^3.17.1", "@tiptap/extension-text-align": "^3.17.1", diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx index 2f46573f..5dfcd87d 100644 --- a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx @@ -15,9 +15,11 @@ import "./textEditor.css"; import { normalizeClasses } from "../../utils"; import type { TextEditorProps } from "./types"; import FixedMenu from "./menu/fixedMenu"; +import Placeholder from "@tiptap/extension-placeholder"; const TextEditor = ({ content, + placeholder = "", editorClass = "", onChange, onFocus, @@ -36,6 +38,10 @@ const TextEditor = ({ }, extensions: [ StarterKit, + Placeholder.configure({ + placeholder: + typeof placeholder === "function" ? placeholder() : placeholder, + }), TaskList, TaskItem.configure({ nested: true, From 26615af7109cc043654bf4001e43ac6076989057 Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Mon, 26 Jan 2026 19:41:44 +0530 Subject: [PATCH 18/48] feat: bind editable prop Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- .../frappe-ui-react/src/components/textEditor/textEditor.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx index 5dfcd87d..f30a2ec1 100644 --- a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx @@ -21,6 +21,7 @@ const TextEditor = ({ content, placeholder = "", editorClass = "", + editable = true, onChange, onFocus, onBlur, @@ -28,6 +29,7 @@ const TextEditor = ({ }: TextEditorProps) => { const editor = useEditor({ content, + editable, editorProps: { attributes: { class: clsx( From f7abf8a10052eba0409c796166f36ecf307ac77c Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Mon, 26 Jan 2026 19:45:45 +0530 Subject: [PATCH 19/48] feat: bind more props Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- .../src/components/textEditor/textEditor.tsx | 9 ++++++++- .../frappe-ui-react/src/components/textEditor/types.ts | 10 ++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx index f30a2ec1..e0ca5d09 100644 --- a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx @@ -22,6 +22,9 @@ const TextEditor = ({ placeholder = "", editorClass = "", editable = true, + autofocus = false, + extensions = [], + starterKitOptions = {}, onChange, onFocus, onBlur, @@ -30,6 +33,7 @@ const TextEditor = ({ const editor = useEditor({ content, editable, + autofocus, editorProps: { attributes: { class: clsx( @@ -39,7 +43,9 @@ const TextEditor = ({ }, }, extensions: [ - StarterKit, + StarterKit.configure({ + ...starterKitOptions, + }), Placeholder.configure({ placeholder: typeof placeholder === "function" ? placeholder() : placeholder, @@ -52,6 +58,7 @@ const TextEditor = ({ types: ["heading", "paragraph"], }), Strike, + ...extensions, ], onUpdate: ({ editor }) => { onChange?.(editor.getHTML()); diff --git a/packages/frappe-ui-react/src/components/textEditor/types.ts b/packages/frappe-ui-react/src/components/textEditor/types.ts index 0ca90619..7b35b815 100644 --- a/packages/frappe-ui-react/src/components/textEditor/types.ts +++ b/packages/frappe-ui-react/src/components/textEditor/types.ts @@ -1,7 +1,8 @@ /** * External dependencies. */ -import type { Editor } from "@tiptap/react"; +import type { Editor, Extension } from "@tiptap/react"; +import type { StarterKitOptions } from "@tiptap/starter-kit"; export interface TextEditorProps { // Props @@ -10,11 +11,8 @@ export interface TextEditorProps { editorClass?: string | string[] | Record; editable?: boolean; autofocus?: boolean; - bubbleMenu?: boolean; - bubbleMenuOptions?: Record; - fixedMenu?: boolean; - floatingMenu?: boolean; - className?: string; + extensions?: Extension[]; + starterKitOptions?: Partial; // Events onChange?: (content: string) => void; onFocus?: (event: FocusEvent) => void; From 1d5367d61da268fc2742a8c6863c65582138d83d Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Mon, 26 Jan 2026 19:52:50 +0530 Subject: [PATCH 20/48] feat: partially bind fixed menu prop Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- .../src/components/textEditor/texEditor.stories.tsx | 7 ++++++- .../src/components/textEditor/textEditor.tsx | 4 +++- .../frappe-ui-react/src/components/textEditor/types.ts | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx b/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx index b5e461b7..da2bcc13 100644 --- a/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx @@ -37,7 +37,12 @@ export const Basic: Story = {
    `); return (
    - +
    ); }, diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx index e0ca5d09..e0100bb1 100644 --- a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx @@ -25,6 +25,7 @@ const TextEditor = ({ autofocus = false, extensions = [], starterKitOptions = {}, + fixedMenu = false, onChange, onFocus, onBlur, @@ -76,7 +77,8 @@ const TextEditor = ({ return ( - + {fixedMenu && } + ); diff --git a/packages/frappe-ui-react/src/components/textEditor/types.ts b/packages/frappe-ui-react/src/components/textEditor/types.ts index 7b35b815..a1f20f70 100644 --- a/packages/frappe-ui-react/src/components/textEditor/types.ts +++ b/packages/frappe-ui-react/src/components/textEditor/types.ts @@ -13,6 +13,7 @@ export interface TextEditorProps { autofocus?: boolean; extensions?: Extension[]; starterKitOptions?: Partial; + fixedMenu?: boolean; // Events onChange?: (content: string) => void; onFocus?: (event: FocusEvent) => void; From d09ed0ea7b1be5b2be2d708ee41370ce33f540b4 Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Mon, 26 Jan 2026 19:58:45 +0530 Subject: [PATCH 21/48] feat: bind slots Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- .../src/components/textEditor/textEditor.tsx | 8 ++++++-- .../frappe-ui-react/src/components/textEditor/types.ts | 7 ++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx index e0100bb1..d9d622b3 100644 --- a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx @@ -30,6 +30,9 @@ const TextEditor = ({ onFocus, onBlur, onTransaction, + Top, + Editor, + Bottom, }: TextEditorProps) => { const editor = useEditor({ content, @@ -77,9 +80,10 @@ const TextEditor = ({ return ( + {Top && } {fixedMenu && } - - + {Editor ? : } + {Bottom && } ); }; diff --git a/packages/frappe-ui-react/src/components/textEditor/types.ts b/packages/frappe-ui-react/src/components/textEditor/types.ts index a1f20f70..b8165118 100644 --- a/packages/frappe-ui-react/src/components/textEditor/types.ts +++ b/packages/frappe-ui-react/src/components/textEditor/types.ts @@ -1,8 +1,9 @@ /** * External dependencies. */ -import type { Editor, Extension } from "@tiptap/react"; +import { Editor, type Extension } from "@tiptap/react"; import type { StarterKitOptions } from "@tiptap/starter-kit"; +import type { FC } from "react"; export interface TextEditorProps { // Props @@ -19,4 +20,8 @@ export interface TextEditorProps { onFocus?: (event: FocusEvent) => void; onBlur?: (event: FocusEvent) => void; onTransaction?: (editor: Editor) => void; + // Slots + Top?: FC; + Editor?: FC<{ editor: Editor }>; + Bottom?: FC; } From c3d46af33a61dfbdfbe6d0f5ad4721ad37be0ad0 Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Tue, 27 Jan 2026 10:51:39 +0530 Subject: [PATCH 22/48] chore: update lock file --- pnpm-lock.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba350dc9..9ab042e6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -168,6 +168,9 @@ importers: '@tiptap/extension-list': specifier: ^3.17.1 version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) + '@tiptap/extension-placeholder': + specifier: ^3.17.1 + version: 3.17.1(@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)) '@tiptap/extension-strike': specifier: ^3.17.1 version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)) @@ -2133,6 +2136,11 @@ packages: peerDependencies: '@tiptap/core': ^3.17.1 + '@tiptap/extension-placeholder@3.17.1': + resolution: {integrity: sha512-cE8Rij5/1t4KnWE7GaDewhBek9DKNB+97yrxyggMegILg6v195hOmOkRZkyfnFMYZoBDlrfSAtX9wBvbZBqIsg==} + peerDependencies: + '@tiptap/extensions': ^3.17.1 + '@tiptap/extension-strike@3.17.1': resolution: {integrity: sha512-c6fS6YIhxoU55etlJgM0Xqker+jn7I1KC7GVu6ljmda8I00K3/lOLZgvFUNPmgp8EJWtyTctj+3D3D+PaZaFAA==} peerDependencies: @@ -7160,6 +7168,10 @@ snapshots: dependencies: '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) + '@tiptap/extension-placeholder@3.17.1(@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))': + dependencies: + '@tiptap/extensions': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) + '@tiptap/extension-strike@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))': dependencies: '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) From 1e468751949f59c005c343af10d7409c8fbacbf8 Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Tue, 27 Jan 2026 11:05:55 +0530 Subject: [PATCH 23/48] chore: update lock file --- pnpm-lock.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ab042e6..e6f5f2b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -165,6 +165,9 @@ importers: '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 + '@tiptap/extension-horizontal-rule': + specifier: ^3.17.1 + version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) '@tiptap/extension-list': specifier: ^3.17.1 version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) From bf30f1dd6516e34eb522466adcdbac324ae2aeb7 Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Tue, 27 Jan 2026 11:39:02 +0530 Subject: [PATCH 24/48] chore: fix lock file --- pnpm-lock.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ab042e6..08d00d8e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -174,6 +174,9 @@ importers: '@tiptap/extension-strike': specifier: ^3.17.1 version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)) + '@tiptap/extension-table': + specifier: ^3.17.1 + version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) '@tiptap/extension-task-list': specifier: ^3.17.1 version: 3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)) @@ -2146,6 +2149,12 @@ packages: peerDependencies: '@tiptap/core': ^3.17.1 + '@tiptap/extension-table@3.17.1': + resolution: {integrity: sha512-FuAMdmM330tHJUYT5IV2ooFRqtXf+0D8llcE9nIQQCXKL4J0pfGSOIm40LVpunYgx2pV8SSCL51qTBuEmR84tQ==} + peerDependencies: + '@tiptap/core': ^3.17.1 + '@tiptap/pm': ^3.17.1 + '@tiptap/extension-task-list@3.17.1': resolution: {integrity: sha512-EiJjlfNioQub9G6SZ83b/1+5VhVtlHStQN7+BTIsA9EhRAeKwge0KtO1oMIzFkDryd9mki9GQx/D+eek2CNsYw==} peerDependencies: @@ -7176,6 +7185,11 @@ snapshots: dependencies: '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) + '@tiptap/extension-table@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)': + dependencies: + '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) + '@tiptap/pm': 3.17.1 + '@tiptap/extension-task-list@3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))': dependencies: '@tiptap/extension-list': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) From c4b0ac64cfbd14c39742aa0fcc8bdf83338aed05 Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Tue, 27 Jan 2026 17:07:36 +0530 Subject: [PATCH 25/48] chore: load typography plugin Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- packages/frappe-ui-react/src/utils/tailwind.config.cjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frappe-ui-react/src/utils/tailwind.config.cjs b/packages/frappe-ui-react/src/utils/tailwind.config.cjs index 21cc402a..93e09861 100644 --- a/packages/frappe-ui-react/src/utils/tailwind.config.cjs +++ b/packages/frappe-ui-react/src/utils/tailwind.config.cjs @@ -9,5 +9,5 @@ module.exports = { theme: { extend, }, - plugins: [], + plugins: [require("@tailwindcss/typography")], }; From f928a8292ae5a39d1e2c37d1049ee7b8c70f927e Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Tue, 27 Jan 2026 17:24:28 +0530 Subject: [PATCH 26/48] fix:story Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- .../src/components/textEditor/menu/menu.tsx | 3 +- .../textEditor/texEditor.stories.tsx | 64 +++++++++++--- .../src/components/textEditor/textEditor.tsx | 88 ++++++++++--------- .../src/components/textEditor/types.ts | 2 +- 4 files changed, 99 insertions(+), 58 deletions(-) diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx b/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx index 5c394921..04697f47 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx @@ -1,7 +1,6 @@ /** * External dependencies. */ - import { useCurrentEditor, useEditorState } from "@tiptap/react"; import clsx from "clsx"; @@ -67,7 +66,7 @@ const Menu = ({ className }: MenuProps) => { return (
    diff --git a/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx b/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx index da2bcc13..c6809b4f 100644 --- a/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx @@ -1,8 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import TextEditor from "./textEditor"; -import { useState } from "react"; - const meta: Meta = { title: "Components/TextEditor", component: TextEditor, @@ -16,6 +14,50 @@ const meta: Meta = { control: "text", description: "HTML content of the editor", }, + placeholder: { + control: "text", + description: "Placeholder text when editor is empty", + }, + editorClass: { + control: "text", + description: "CSS classes to apply to the editor content area", + }, + editable: { + control: "boolean", + description: "Whether the editor is editable", + }, + autofocus: { + control: "boolean", + description: "Whether to autofocus the editor on mount", + }, + extensions: { + control: false, + description: "Additional TipTap extensions", + }, + starterkitOptions: { + control: "object", + description: "Configuration for StarterKit extension", + }, + fixedMenu: { + control: "boolean", + description: "Show fixed menu toolbar", + }, + onChange: { + action: "changed", + description: "Callback when content changes", + }, + onFocus: { + action: "focused", + description: "Callback when editor receives focus", + }, + onBlur: { + action: "blurred", + description: "Callback when editor loses focus", + }, + onTransaction: { + control: false, + description: "Callback on editor transaction", + }, }, }; @@ -23,10 +65,7 @@ export default meta; type Story = StoryObj; export const Basic: Story = { args: { - editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", - }, - render: function BasicRender(args) { - const [content, setContent] = useState(`
    + content: `

    Heading 2

    This is a paragraph with bold and italic text. @@ -34,15 +73,14 @@ export const Basic: Story = {

    • Item 1
    • Item 2
    • -
    `); + `, + editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", + fixedMenu: true, + }, + render: function BasicRender(args) { return (
    - +
    ); }, diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx index d9d622b3..140a2e29 100644 --- a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx @@ -24,7 +24,7 @@ const TextEditor = ({ editable = true, autofocus = false, extensions = [], - starterKitOptions = {}, + starterkitOptions = {}, fixedMenu = false, onChange, onFocus, @@ -34,49 +34,53 @@ const TextEditor = ({ Editor, Bottom, }: TextEditorProps) => { - const editor = useEditor({ - content, - editable, - autofocus, - editorProps: { - attributes: { - class: clsx( - "prose prose-table:table-fixed prose-td:p-2 prose-th:p-2 prose-td:border prose-th:border prose-td:border-outline-gray-2 prose-th:border-outline-gray-2 prose-td:relative prose-th:relative prose-th:bg-surface-gray-2 border-outline-gray-1", - normalizeClasses(editorClass) - ), + const editor = useEditor( + { + content, + editable, + autofocus, + editorProps: { + attributes: { + class: clsx( + "prose prose-table:table-fixed prose-td:p-2 prose-th:p-2 prose-td:border prose-th:border prose-td:border-outline-gray-2 prose-th:border-outline-gray-2 prose-td:relative prose-th:relative prose-th:bg-surface-gray-2 border-outline-gray-1", + normalizeClasses(editorClass) + ), + }, + }, + extensions: [ + StarterKit.configure({ + strike: false, + ...starterkitOptions, + }), + Placeholder.configure({ + placeholder: + typeof placeholder === "function" ? placeholder() : placeholder, + }), + TaskList, + TaskItem.configure({ + nested: true, + }), + TextAlign.configure({ + types: ["heading", "paragraph"], + }), + Strike, + ...extensions, + ], + onUpdate: ({ editor }) => { + onChange?.(editor.getHTML()); + }, + onFocus: ({ event }) => { + onFocus?.(event); + }, + onBlur: ({ event }) => { + onBlur?.(event); + }, + onTransaction: () => { + onTransaction?.(editor); }, }, - extensions: [ - StarterKit.configure({ - ...starterKitOptions, - }), - Placeholder.configure({ - placeholder: - typeof placeholder === "function" ? placeholder() : placeholder, - }), - TaskList, - TaskItem.configure({ - nested: true, - }), - TextAlign.configure({ - types: ["heading", "paragraph"], - }), - Strike, - ...extensions, - ], - onUpdate: ({ editor }) => { - onChange?.(editor.getHTML()); - }, - onFocus: ({ event }) => { - onFocus?.(event); - }, - onBlur: ({ event }) => { - onBlur?.(event); - }, - onTransaction: () => { - onTransaction?.(editor); - }, - }); + [content, editable, autofocus, editorClass, starterkitOptions, extensions] + ); return ( diff --git a/packages/frappe-ui-react/src/components/textEditor/types.ts b/packages/frappe-ui-react/src/components/textEditor/types.ts index b8165118..6388efbe 100644 --- a/packages/frappe-ui-react/src/components/textEditor/types.ts +++ b/packages/frappe-ui-react/src/components/textEditor/types.ts @@ -13,7 +13,7 @@ export interface TextEditorProps { editable?: boolean; autofocus?: boolean; extensions?: Extension[]; - starterKitOptions?: Partial; + starterkitOptions?: Partial; fixedMenu?: boolean; // Events onChange?: (content: string) => void; From 07745aee70d6d8ece7ca098e4553fa9fa09c25c0 Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Tue, 27 Jan 2026 17:27:58 +0530 Subject: [PATCH 27/48] fix: add callbacks to dependency array Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- .../src/components/textEditor/textEditor.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx index 140a2e29..f3855baf 100644 --- a/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.tsx @@ -79,7 +79,18 @@ const TextEditor = ({ onTransaction?.(editor); }, }, - [content, editable, autofocus, editorClass, starterkitOptions, extensions] + [ + content, + editable, + autofocus, + editorClass, + starterkitOptions, + extensions, + onChange, + onFocus, + onBlur, + onTransaction, + ] ); return ( From 0f8cdb3a9b2294787477f62618e5da59addf90cf Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Wed, 28 Jan 2026 13:36:24 +0530 Subject: [PATCH 28/48] refactor: update editor command type Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- .../src/components/textEditor/menu/commands/types.ts | 9 +++++++-- .../src/components/textEditor/menu/menu.tsx | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/commands/types.ts b/packages/frappe-ui-react/src/components/textEditor/menu/commands/types.ts index 9b113688..e633c3f5 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/commands/types.ts +++ b/packages/frappe-ui-react/src/components/textEditor/menu/commands/types.ts @@ -2,6 +2,7 @@ * External dependencies. */ import type { Editor } from "@tiptap/react"; +import type { JSX } from "react"; export const COMMANDS_KEYS = [ "paragraph", @@ -20,6 +21,7 @@ export const COMMANDS_KEYS = [ "align_center", "align_right", "strike", + "iframe", ] as const; export type TYPE_COMMANDS_KEYS = (typeof COMMANDS_KEYS)[number]; @@ -27,7 +29,10 @@ export type TYPE_COMMANDS_KEYS = (typeof COMMANDS_KEYS)[number]; export interface EditorCommand { label: string; text?: string; - icon: React.ComponentType<{ className?: string }>; - action: (editor: Editor) => void; + icon: ({ className }: { className?: string }) => JSX.Element; + action?: (editor: Editor) => void; isActive: (editor: Editor) => boolean; + component?: React.FC<{ + editor: Editor; + }>; } diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx b/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx index 04697f47..4c883597 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx @@ -100,7 +100,7 @@ const Menu = ({ className }: MenuProps) => { - -
    + ))}
    Background Color
    {backgroundColors.map((color) => ( -
    - - - +
    +
    ))}
    From d45fd4c891c52caaefc65548f537be744a8892cf Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Thu, 29 Jan 2026 17:02:02 +0530 Subject: [PATCH 38/48] style-fix: border color in font color popover Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- .../src/components/textEditor/menu/commands/fontColor.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/commands/fontColor.tsx b/packages/frappe-ui-react/src/components/textEditor/menu/commands/fontColor.tsx index 41fe4e5b..37a1291e 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/commands/fontColor.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/menu/commands/fontColor.tsx @@ -108,7 +108,10 @@ const FontColor = ({ children }: FontColorProps) => { title={color.name} aria-label={color.name} className={clsx( - "flex shrink-0 h-5 w-5 items-center justify-center rounded border border-outline-gray-1 text-base" + "flex shrink-0 h-5 w-5 items-center justify-center rounded border border-outline-gray-1 text-base", + { + "border-transparent": color.name !== "Default", + } )} style={{ backgroundColor: color.value, From 0c6e1e87047ea102b913ba109e1ad460123eac67 Mon Sep 17 00:00:00 2001 From: Aditya Dhade Date: Fri, 30 Jan 2026 16:31:38 +0530 Subject: [PATCH 39/48] chore: fix styles --- .../src/components/textEditor/textEditor.css | 81 ++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.css b/packages/frappe-ui-react/src/components/textEditor/textEditor.css index 2a99f2a8..662c056f 100644 --- a/packages/frappe-ui-react/src/components/textEditor/textEditor.css +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.css @@ -19,6 +19,86 @@ --tw-prose-td-borders: var(--color-ink-gray-1); } +/* Heading font weights */ +.prose h1, +.prose h2, +.prose h3, +.prose h4, +.prose h5, +.prose h1 strong, +.prose h2 strong, +.prose h3 strong, +.prose h4 strong, +.prose h5 strong { + font-weight: 600; +} + +/* Image alignment */ +.prose img[data-align='right'] { + margin-left: auto; + margin-right: 0; +} + +.prose img[data-align='center'] { + margin-left: auto; + margin-right: auto; +} + +/* Small prose variant */ +.prose-sm { + font-size: 14px; + font-weight: 420; + line-height: 1.5; + letter-spacing: 0.02em; +} + +.prose-sm h1 { + font-size: calc(20 / 14 * 1em); +} + +.prose-sm h2 { + font-size: calc(18 / 14 * 1em); +} + +.prose-sm h3 { + font-size: calc(16 / 14 * 1em); +} + +.prose-sm h4 { + font-size: calc(14 / 14 * 1em); +} + +.prose-sm h5 { + font-size: calc(13 / 14 * 1em); +} + +.prose-sm p { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} + +.prose-sm ul > li, +.prose-sm ol > li { + margin: 0.5rem 0; +} + +.prose-sm ul > li > p, +.prose-sm ul > li > p:first-child:last-child, +.prose-sm ol > li > p, +.prose-sm ol > li > p:first-child:last-child { + margin: 0.5rem 0; +} + +.prose-sm ul > li > p:first-child, +.prose-sm ol > li > p:first-child { + margin-top: 0.5rem; +} + +.prose-sm ul > li > p:last-child, +.prose-sm ol > li > p:last-child { + margin-bottom: 0.5rem; +} + .ProseMirror { outline: none; caret-color: var(--color-ink-gray-9); @@ -139,4 +219,3 @@ img.ProseMirror-selectednode { .tag-suggestion-active { background-color: var(--color-surface-gray-2, #f3f3f3); } - From 693ea611641f1be5de9f9462f84188d042e667ed Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Fri, 30 Jan 2026 18:17:11 +0530 Subject: [PATCH 40/48] chore: address copilot reviews Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- .../src/components/textEditor/menu/commands/index.ts | 4 ++-- .../frappe-ui-react/src/components/textEditor/menu/menu.tsx | 6 +++--- .../src/components/textEditor/texEditor.stories.tsx | 1 + 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts b/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts index 3f47eb96..49bd6e70 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts +++ b/packages/frappe-ui-react/src/components/textEditor/menu/commands/index.ts @@ -159,7 +159,7 @@ export const COMMANDS: Record = { label: "Horizontal Rule", icon: SeparatorHorizontal, action: (editor) => editor.chain().focus().setHorizontalRule().run(), - isActive: (editor) => editor.isActive("strike"), + isActive: (editor) => editor.isActive("horizontalRule"), }, insert_table: { label: "Insert Table", @@ -258,7 +258,7 @@ export const COMMANDS: Record = { isActive: () => false, }, redo: { - label: "Undo", + label: "Redo", icon: Redo2Icon, action: (editor) => editor.chain().focus().redo().run(), isDisabled: (editor) => !editor.can().redo(), diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx b/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx index 0caeca41..b223ad7a 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/menu/menu.tsx @@ -65,9 +65,9 @@ const Menu = ({ className }: MenuProps) => { const { editor } = useCurrentEditor(); const editorState = useEditorState({ editor, - selector: (ctx) => ({ - selection: ctx?.editor?.state?.selection, - focused: ctx?.editor?.state?.selection, + selector: ({ editor }) => ({ + selection: editor?.state?.selection, + focused: editor?.isFocused ?? false, }), }); diff --git a/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx b/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx index fafb3261..5dc485f2 100644 --- a/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx @@ -78,6 +78,7 @@ export const Basic: Story = {
    import { Button } from '@rtcamp/frappe-ui-react'
     const value = ref(true);
    +
    `, editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", fixedMenu: true, From 5387e4cd3eb9a3f1b1c345f42849108bc673ea73 Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Fri, 30 Jan 2026 18:37:58 +0530 Subject: [PATCH 41/48] fix: file name Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- .../textEditor/{texEditor.stories.tsx => textEditor.stories.tsx} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/frappe-ui-react/src/components/textEditor/{texEditor.stories.tsx => textEditor.stories.tsx} (100%) diff --git a/packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.stories.tsx similarity index 100% rename from packages/frappe-ui-react/src/components/textEditor/texEditor.stories.tsx rename to packages/frappe-ui-react/src/components/textEditor/textEditor.stories.tsx From 9830c8a34c12c4fb38804544c112b7e3b5ac6420 Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Mon, 2 Feb 2026 12:34:40 +0530 Subject: [PATCH 42/48] chore: add few interaction tests Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- .../textEditor/menu/commands/fontColor.tsx | 4 +- .../src/components/textEditor/menu/menu.tsx | 13 +- .../textEditor/textEditor.stories.tsx | 197 +++++++++++++++++- 3 files changed, 202 insertions(+), 12 deletions(-) diff --git a/packages/frappe-ui-react/src/components/textEditor/menu/commands/fontColor.tsx b/packages/frappe-ui-react/src/components/textEditor/menu/commands/fontColor.tsx index 37a1291e..c7b885f3 100644 --- a/packages/frappe-ui-react/src/components/textEditor/menu/commands/fontColor.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/menu/commands/fontColor.tsx @@ -105,8 +105,8 @@ const FontColor = ({ children }: FontColorProps) => { {backgroundColors.map((color) => (
    + )} body={({ close }) => (
      @@ -121,6 +126,8 @@ const Menu = ({ className }: MenuProps) => { return (
    -
    - `, +
    +`; + +export default meta; +type Story = StoryObj; + +export const Basic: Story = { + args: { + content: CONTENT, editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", fixedMenu: true, }, @@ -91,3 +96,179 @@ const value = ref(true); ); }, }; + +export const EditorHeading: Story = { + args: { + content: CONTENT, + editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", + fixedMenu: true, + }, + render: function BasicRender(args) { + return ( +
    + +
    + ); + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + // Select the text to apply the heading + const text = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + await userEvent.tripleClick(text); + + // Find the heading dropdown or button + const headingButton = await canvas.findByRole("button", { + name: "heading", + }); + await userEvent.click(headingButton); + + // Select a heading option (e.g., Heading 2). Popups are outside canvas + const headingOption = await screen.findByRole("menuitem", { + name: /heading 2/i, + }); + await userEvent.click(headingOption); + + const newText = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + + expect(newText.tagName).toBe("H2"); + }, +}; + +export const EditorBold: Story = { + args: { + content: CONTENT, + editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", + fixedMenu: true, + }, + render: function BasicRender(args) { + return ( +
    + +
    + ); + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + // Select the text to apply bold formatting + const text = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + await userEvent.tripleClick(text); + + // Find the bold button + const boldButton = await screen.findByTitle("Bold"); + await userEvent.click(boldButton); + + // Verify the text is bold + const boldText = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + + expect(boldText).toHaveStyle("font-weight: 600"); + }, +}; + +export const EditorItalic: Story = { + args: { + content: CONTENT, + editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", + fixedMenu: true, + }, + render: function BasicRender(args) { + return ( +
    + +
    + ); + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const text = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + await userEvent.tripleClick(text); + const button = await screen.findByTitle("Italic"); + await userEvent.click(button); + + const newText = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + + expect(newText).toHaveStyle("font-style: italic"); + }, +}; + +export const EditorStrike: Story = { + args: { + content: CONTENT, + editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", + fixedMenu: true, + }, + render: function BasicRender(args) { + return ( +
    + +
    + ); + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const text = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + await userEvent.tripleClick(text); + const button = await screen.findByTitle("Strike"); + await userEvent.click(button); + + const newText = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + + expect(newText.tagName).toBe("S"); + }, +}; + +export const EditorFontColor: Story = { + args: { + content: CONTENT, + editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", + fixedMenu: true, + }, + render: function BasicRender(args) { + return ( +
    + +
    + ); + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const text = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + await userEvent.tripleClick(text); + + const button = await screen.findByTitle("Font Color"); + await userEvent.click(button); + + const colorButton = await screen.findByTitle("Red"); + await userEvent.click(colorButton); + + await userEvent.click(button); + + const highlightButton = await screen.findByTitle("Highlight Red"); + await userEvent.click(highlightButton); + + const newText = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + + expect(newText).toHaveStyle("color: rgb(204, 41, 41)"); + expect(newText.tagName).toBe("MARK"); + expect(newText).toHaveStyle("background-color: #ffe7e7"); + }, +}; From 1df57783f70a5ddd9c255db0c63518545dd4de11 Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Mon, 2 Feb 2026 12:39:17 +0530 Subject: [PATCH 43/48] chore: hide interaction test in production Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- .../src/components/textEditor/textEditor.stories.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.stories.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.stories.tsx index 7757db8e..d32c294d 100644 --- a/packages/frappe-ui-react/src/components/textEditor/textEditor.stories.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.stories.tsx @@ -98,6 +98,7 @@ export const Basic: Story = { }; export const EditorHeading: Story = { + tags: ["!dev"], args: { content: CONTENT, editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", @@ -139,6 +140,7 @@ export const EditorHeading: Story = { }; export const EditorBold: Story = { + tags: ["!dev"], args: { content: CONTENT, editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", @@ -173,6 +175,7 @@ export const EditorBold: Story = { }; export const EditorItalic: Story = { + tags: ["!dev"], args: { content: CONTENT, editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", @@ -203,6 +206,7 @@ export const EditorItalic: Story = { }; export const EditorStrike: Story = { + tags: ["!dev"], args: { content: CONTENT, editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", @@ -233,6 +237,7 @@ export const EditorStrike: Story = { }; export const EditorFontColor: Story = { + tags: ["!dev"], args: { content: CONTENT, editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", From b2b4043ca73fd943b6fbdafe91c656b827c4aa2a Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Mon, 2 Feb 2026 13:43:47 +0530 Subject: [PATCH 44/48] chore: add dependencies Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- package.json | 4 +++- pnpm-lock.yaml | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index aa8fc671..e71b3a98 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,9 @@ "*.yml": "prettier --write" }, "dependencies": { - "react-docgen-typescript": "^2.4.0" + "react": "^19.2.4", + "react-docgen-typescript": "^2.4.0", + "react-dom": "^19.2.4" }, "packageManager": "pnpm@10.13.1" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0b8c6c29..16f29098 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,9 +8,18 @@ importers: .: dependencies: + and: + specifier: ^0.0.3 + version: 0.0.3 + react: + specifier: ^19.2.4 + version: 19.2.4 react-docgen-typescript: specifier: ^2.4.0 version: 2.4.0(typescript@5.9.3) + react-dom: + specifier: ^19.2.4 + version: 19.2.4(react@19.2.4) devDependencies: '@babel/plugin-transform-react-jsx': specifier: ^7.22.5 @@ -2590,6 +2599,9 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + and@0.0.3: + resolution: {integrity: sha512-ns0tgq+jQFbDhAu5wrE+M7V87E4L3N8ZTJfRKVxafi7g0BSEM6JnwhL57HyR1XMHBeRfGPWZxq+SH1bZeUTiTw==} + ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -7792,6 +7804,8 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + and@0.0.3: {} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 From 1ad40f4d7bf7db33b11dc98ab733160aa2f6b659 Mon Sep 17 00:00:00 2001 From: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> Date: Mon, 2 Feb 2026 13:54:54 +0530 Subject: [PATCH 45/48] chore: move deps Signed-off-by: ayushnirwal <53055971+ayushnirwal@users.noreply.github.com> --- package.json | 6 +++--- pnpm-lock.yaml | 20 ++++++-------------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index e71b3a98..357c2721 100644 --- a/package.json +++ b/package.json @@ -68,6 +68,8 @@ "npm-run-all": "^4.1.5", "playwright": "^1.57.0", "prettier": "^3.7.4", + "react-dom": "^19.2.4", + "react": "^19.2.4", "rimraf": "^6.1.2", "storybook": "^9.1.17", "typescript": "~5.9.3", @@ -88,9 +90,7 @@ "*.yml": "prettier --write" }, "dependencies": { - "react": "^19.2.4", - "react-docgen-typescript": "^2.4.0", - "react-dom": "^19.2.4" + "react-docgen-typescript": "^2.4.0" }, "packageManager": "pnpm@10.13.1" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 16f29098..32f9019d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,18 +8,9 @@ importers: .: dependencies: - and: - specifier: ^0.0.3 - version: 0.0.3 - react: - specifier: ^19.2.4 - version: 19.2.4 react-docgen-typescript: specifier: ^2.4.0 version: 2.4.0(typescript@5.9.3) - react-dom: - specifier: ^19.2.4 - version: 19.2.4(react@19.2.4) devDependencies: '@babel/plugin-transform-react-jsx': specifier: ^7.22.5 @@ -135,6 +126,12 @@ importers: prettier: specifier: ^3.7.4 version: 3.8.1 + react: + specifier: ^19.2.4 + version: 19.2.4 + react-dom: + specifier: ^19.2.4 + version: 19.2.4(react@19.2.4) rimraf: specifier: ^6.1.2 version: 6.1.2 @@ -2599,9 +2596,6 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - and@0.0.3: - resolution: {integrity: sha512-ns0tgq+jQFbDhAu5wrE+M7V87E4L3N8ZTJfRKVxafi7g0BSEM6JnwhL57HyR1XMHBeRfGPWZxq+SH1bZeUTiTw==} - ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -7804,8 +7798,6 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - and@0.0.3: {} - ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 From 73ac3c544130ae2bc6481b6a5ee188336428b1b7 Mon Sep 17 00:00:00 2001 From: Aditya Dhade Date: Mon, 2 Feb 2026 14:59:46 +0530 Subject: [PATCH 46/48] fix: storybook config --- .storybook/main.ts | 38 ++- .../textEditor.interactions.stories.tsx | 258 ++++++++++++++++++ .../textEditor/textEditor.stories.tsx | 183 ------------- 3 files changed, 285 insertions(+), 194 deletions(-) create mode 100644 packages/frappe-ui-react/src/components/textEditor/textEditor.interactions.stories.tsx diff --git a/.storybook/main.ts b/.storybook/main.ts index 1371a1cc..51e847f3 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -5,17 +5,30 @@ import path, { dirname, join } from "path"; const require = createRequire(import.meta.url); const config: StorybookConfig = { - stories: [ - "../*.mdx", - "../**/src/**/*.mdx", - "../**/src/**/*.stories.@(js|jsx|mjs|ts|tsx)", - ], - addons: [ - getAbsolutePath("@storybook/addon-docs"), - getAbsolutePath("@storybook/addon-a11y"), - getAbsolutePath("@storybook/addon-themes"), - getAbsolutePath("@storybook/addon-vitest"), - ], + stories: + process.env.NODE_ENV === "production" + ? [ + "../*.mdx", + "../**/src/**/*.mdx", + "../**/src/**/!(*.interactions).stories.@(js|jsx|mjs|ts|tsx)", + ] + : [ + "../*.mdx", + "../**/src/**/*.mdx", + "../**/src/**/*.stories.@(js|jsx|mjs|ts|tsx)", + ], + addons: + process.env.NODE_ENV === "production" + ? [ + getAbsolutePath("@storybook/addon-docs"), + getAbsolutePath("@storybook/addon-themes"), + ] + : [ + getAbsolutePath("@storybook/addon-docs"), + getAbsolutePath("@storybook/addon-a11y"), + getAbsolutePath("@storybook/addon-themes"), + getAbsolutePath("@storybook/addon-vitest"), + ], framework: { name: getAbsolutePath("@storybook/react-vite"), options: {}, @@ -43,6 +56,9 @@ const config: StorybookConfig = { prop.parent ? !/node_modules/.test(prop.parent.fileName) : true, }, }, + features: { + interactions: process.env.NODE_ENV !== "production", + }, }; export default config; diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.interactions.stories.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.interactions.stories.tsx new file mode 100644 index 00000000..bd83fd21 --- /dev/null +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.interactions.stories.tsx @@ -0,0 +1,258 @@ +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { screen, userEvent, expect } from "@storybook/test"; +import TextEditor from "./textEditor"; +import { within } from "@storybook/test"; + +const meta: Meta = { + title: "Components/TextEditor/Interactions", + component: TextEditor, + parameters: { + docs: { source: { type: "dynamic" } }, + layout: "centered", + }, + argTypes: { + content: { + control: "text", + description: "HTML content of the editor", + }, + placeholder: { + control: "text", + description: "Placeholder text when editor is empty", + }, + editorClass: { + control: "text", + description: "CSS classes to apply to the editor content area", + }, + editable: { + control: "boolean", + description: "Whether the editor is editable", + }, + autofocus: { + control: "boolean", + description: "Whether to autofocus the editor on mount", + }, + extensions: { + control: false, + description: "Additional TipTap extensions", + }, + starterkitOptions: { + control: "object", + description: "Configuration for StarterKit extension", + }, + fixedMenu: { + control: "boolean", + description: "Show fixed menu toolbar", + }, + onChange: { + action: "changed", + description: "Callback when content changes", + }, + onFocus: { + action: "focused", + description: "Callback when editor receives focus", + }, + onBlur: { + action: "blurred", + description: "Callback when editor loses focus", + }, + onTransaction: { + control: false, + description: "Callback on editor transaction", + }, + }, +}; + +const CONTENT: string = ` +
    +

    Heading 2

    +

    + This is a paragraph with bold and italic text. +

    +
      +
    • Item 1
    • +
    • Item 2
    • +
    +
    import { Button } from '@rtcamp/frappe-ui-react'
    +const value = ref(true);
    + +
    +`; + +export default meta; +type Story = StoryObj; + +export const EditorHeading: Story = { + args: { + content: CONTENT, + editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", + fixedMenu: true, + }, + render: function BasicRender(args) { + return ( +
    + +
    + ); + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + // Select the text to apply the heading + const text = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + await userEvent.tripleClick(text); + + // Find the heading dropdown or button + const headingButton = await canvas.findByRole("button", { + name: "heading", + }); + await userEvent.click(headingButton); + + // Select a heading option (e.g., Heading 2). Popups are outside canvas + const headingOption = await screen.findByRole("menuitem", { + name: /heading 2/i, + }); + await userEvent.click(headingOption); + + const newText = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + + expect(newText.tagName).toBe("H2"); + }, +}; + +export const EditorBold: Story = { + args: { + content: CONTENT, + editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", + fixedMenu: true, + }, + render: function BasicRender(args) { + return ( +
    + +
    + ); + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + // Select the text to apply bold formatting + const text = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + await userEvent.tripleClick(text); + + // Find the bold button + const boldButton = await screen.findByTitle("Bold"); + await userEvent.click(boldButton); + + // Verify the text is bold + const boldText = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + + expect(boldText).toHaveStyle("font-weight: 600"); + }, +}; + +export const EditorItalic: Story = { + args: { + content: CONTENT, + editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", + fixedMenu: true, + }, + render: function BasicRender(args) { + return ( +
    + +
    + ); + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const text = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + await userEvent.tripleClick(text); + const button = await screen.findByTitle("Italic"); + await userEvent.click(button); + + const newText = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + + expect(newText).toHaveStyle("font-style: italic"); + }, +}; + +export const EditorStrike: Story = { + args: { + content: CONTENT, + editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", + fixedMenu: true, + }, + render: function BasicRender(args) { + return ( +
    + +
    + ); + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const text = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + await userEvent.tripleClick(text); + const button = await screen.findByTitle("Strike"); + await userEvent.click(button); + + const newText = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + + expect(newText.tagName).toBe("S"); + }, +}; + +export const EditorFontColor: Story = { + args: { + content: CONTENT, + editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", + fixedMenu: true, + }, + render: function BasicRender(args) { + return ( +
    + +
    + ); + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const text = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + await userEvent.tripleClick(text); + + const button = await screen.findByTitle("Font Color"); + await userEvent.click(button); + + const colorButton = await screen.findByTitle("Red"); + await userEvent.click(colorButton); + + await userEvent.click(button); + + const highlightButton = await screen.findByTitle("Highlight Red"); + await userEvent.click(highlightButton); + + const newText = canvas.getByText((content) => { + return content.includes("paragraph"); + }); + + expect(newText).toHaveStyle("color: rgb(204, 41, 41)"); + expect(newText.tagName).toBe("MARK"); + expect(newText).toHaveStyle("background-color: #ffe7e7"); + }, +}; diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.stories.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.stories.tsx index d32c294d..e5e46013 100644 --- a/packages/frappe-ui-react/src/components/textEditor/textEditor.stories.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.stories.tsx @@ -1,7 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import { screen, userEvent, expect } from "@storybook/test"; import TextEditor from "./textEditor"; -import { within } from "@storybook/test"; const meta: Meta = { title: "Components/TextEditor", @@ -96,184 +94,3 @@ export const Basic: Story = { ); }, }; - -export const EditorHeading: Story = { - tags: ["!dev"], - args: { - content: CONTENT, - editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", - fixedMenu: true, - }, - render: function BasicRender(args) { - return ( -
    - -
    - ); - }, - play: async ({ canvasElement }) => { - const canvas = within(canvasElement); - // Select the text to apply the heading - const text = canvas.getByText((content) => { - return content.includes("paragraph"); - }); - await userEvent.tripleClick(text); - - // Find the heading dropdown or button - const headingButton = await canvas.findByRole("button", { - name: "heading", - }); - await userEvent.click(headingButton); - - // Select a heading option (e.g., Heading 2). Popups are outside canvas - const headingOption = await screen.findByRole("menuitem", { - name: /heading 2/i, - }); - await userEvent.click(headingOption); - - const newText = canvas.getByText((content) => { - return content.includes("paragraph"); - }); - - expect(newText.tagName).toBe("H2"); - }, -}; - -export const EditorBold: Story = { - tags: ["!dev"], - args: { - content: CONTENT, - editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", - fixedMenu: true, - }, - render: function BasicRender(args) { - return ( -
    - -
    - ); - }, - play: async ({ canvasElement }) => { - const canvas = within(canvasElement); - // Select the text to apply bold formatting - const text = canvas.getByText((content) => { - return content.includes("paragraph"); - }); - await userEvent.tripleClick(text); - - // Find the bold button - const boldButton = await screen.findByTitle("Bold"); - await userEvent.click(boldButton); - - // Verify the text is bold - const boldText = canvas.getByText((content) => { - return content.includes("paragraph"); - }); - - expect(boldText).toHaveStyle("font-weight: 600"); - }, -}; - -export const EditorItalic: Story = { - tags: ["!dev"], - args: { - content: CONTENT, - editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", - fixedMenu: true, - }, - render: function BasicRender(args) { - return ( -
    - -
    - ); - }, - play: async ({ canvasElement }) => { - const canvas = within(canvasElement); - const text = canvas.getByText((content) => { - return content.includes("paragraph"); - }); - await userEvent.tripleClick(text); - const button = await screen.findByTitle("Italic"); - await userEvent.click(button); - - const newText = canvas.getByText((content) => { - return content.includes("paragraph"); - }); - - expect(newText).toHaveStyle("font-style: italic"); - }, -}; - -export const EditorStrike: Story = { - tags: ["!dev"], - args: { - content: CONTENT, - editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", - fixedMenu: true, - }, - render: function BasicRender(args) { - return ( -
    - -
    - ); - }, - play: async ({ canvasElement }) => { - const canvas = within(canvasElement); - const text = canvas.getByText((content) => { - return content.includes("paragraph"); - }); - await userEvent.tripleClick(text); - const button = await screen.findByTitle("Strike"); - await userEvent.click(button); - - const newText = canvas.getByText((content) => { - return content.includes("paragraph"); - }); - - expect(newText.tagName).toBe("S"); - }, -}; - -export const EditorFontColor: Story = { - tags: ["!dev"], - args: { - content: CONTENT, - editorClass: "prose-sm min-h-[4rem] border rounded-b-lg border-t-0 p-2", - fixedMenu: true, - }, - render: function BasicRender(args) { - return ( -
    - -
    - ); - }, - play: async ({ canvasElement }) => { - const canvas = within(canvasElement); - const text = canvas.getByText((content) => { - return content.includes("paragraph"); - }); - await userEvent.tripleClick(text); - - const button = await screen.findByTitle("Font Color"); - await userEvent.click(button); - - const colorButton = await screen.findByTitle("Red"); - await userEvent.click(colorButton); - - await userEvent.click(button); - - const highlightButton = await screen.findByTitle("Highlight Red"); - await userEvent.click(highlightButton); - - const newText = canvas.getByText((content) => { - return content.includes("paragraph"); - }); - - expect(newText).toHaveStyle("color: rgb(204, 41, 41)"); - expect(newText.tagName).toBe("MARK"); - expect(newText).toHaveStyle("background-color: #ffe7e7"); - }, -}; From e04d09c823e8c4bf5682ae027ed03fcb9932342d Mon Sep 17 00:00:00 2001 From: Aditya Dhade Date: Mon, 2 Feb 2026 15:03:01 +0530 Subject: [PATCH 47/48] chore: update dependencies for tailwindcss typography --- packages/frappe-ui-react/package.json | 4 ++-- pnpm-lock.yaml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/frappe-ui-react/package.json b/packages/frappe-ui-react/package.json index 00a5fd86..2fe1be81 100644 --- a/packages/frappe-ui-react/package.json +++ b/packages/frappe-ui-react/package.json @@ -46,14 +46,15 @@ "@floating-ui/react": "^0.27.16", "@headlessui/react": "^2.2.9", "@popperjs/core": "^2.11.8", + "@tailwindcss/typography": "^0.5.19", "@tiptap/extension-code-block-lowlight": "^3.17.1", "@tiptap/extension-highlight": "^3.17.1", "@tiptap/extension-list": "^3.17.1", - "@tiptap/extension-text-style": "^3.17.1", "@tiptap/extension-placeholder": "^3.17.1", "@tiptap/extension-table": "^3.17.1", "@tiptap/extension-task-list": "^3.17.1", "@tiptap/extension-text-align": "^3.17.1", + "@tiptap/extension-text-style": "^3.17.1", "@tiptap/pm": "^3.17.1", "@tiptap/react": "^3.17.1", "@tiptap/starter-kit": "^3.17.1", @@ -76,7 +77,6 @@ "tailwindcss": "^4.1.18" }, "devDependencies": { - "@tailwindcss/typography": "^0.5.19", "@types/feather-icons": "^4.29.4", "@types/node": "^24.10.9", "@types/react-grid-layout": "^1.3.6" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 32f9019d..ca7d3364 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -168,6 +168,9 @@ importers: '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 + '@tailwindcss/typography': + specifier: ^0.5.19 + version: 0.5.19(tailwindcss@4.1.18) '@tiptap/extension-code-block-lowlight': specifier: ^3.17.1 version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/extension-code-block@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(highlight.js@11.11.1)(lowlight@3.3.0) @@ -253,9 +256,6 @@ importers: specifier: ^4.1.18 version: 4.1.18 devDependencies: - '@tailwindcss/typography': - specifier: ^0.5.19 - version: 0.5.19(tailwindcss@4.1.18) '@types/feather-icons': specifier: ^4.29.4 version: 4.29.4 From b6387d82e1dfa7c7182ee280c4b8df6287daa44e Mon Sep 17 00:00:00 2001 From: Aditya Dhade Date: Mon, 2 Feb 2026 15:13:14 +0530 Subject: [PATCH 48/48] chore: remove `@storybook/test` dependency --- package.json | 1 - .../src/components/switch/switch.stories.tsx | 6 - .../textEditor.interactions.stories.tsx | 3 +- pnpm-lock.yaml | 2072 ++++++++--------- 4 files changed, 954 insertions(+), 1128 deletions(-) diff --git a/package.json b/package.json index 357c2721..cf782c46 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,6 @@ "@storybook/addon-themes": "^9.1.10", "@storybook/addon-vitest": "^9.1.17", "@storybook/react-vite": "^9.1.3", - "@storybook/test": "^8.6.15", "@tailwindcss/vite": "^4.1.11", "@testing-library/jest-dom": "^6.8.0", "@testing-library/react": "^16.3.0", diff --git a/packages/frappe-ui-react/src/components/switch/switch.stories.tsx b/packages/frappe-ui-react/src/components/switch/switch.stories.tsx index c524adf9..ea0773e8 100644 --- a/packages/frappe-ui-react/src/components/switch/switch.stories.tsx +++ b/packages/frappe-ui-react/src/components/switch/switch.stories.tsx @@ -1,7 +1,6 @@ import { useState } from "react"; import type { Meta, StoryObj } from "@storybook/react-vite"; import Switch from "./switch"; -import { screen, userEvent, expect } from "@storybook/test"; const sizes = ["sm", "md"] as const; @@ -164,9 +163,4 @@ export const Classes: Story = {
    ); }, - play: async () => { - const switchElement = screen.getByRole("switch"); - await userEvent.click(switchElement); - expect(switchElement).toHaveAttribute("aria-checked", "true"); - }, }; diff --git a/packages/frappe-ui-react/src/components/textEditor/textEditor.interactions.stories.tsx b/packages/frappe-ui-react/src/components/textEditor/textEditor.interactions.stories.tsx index bd83fd21..417155e6 100644 --- a/packages/frappe-ui-react/src/components/textEditor/textEditor.interactions.stories.tsx +++ b/packages/frappe-ui-react/src/components/textEditor/textEditor.interactions.stories.tsx @@ -1,7 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import { screen, userEvent, expect } from "@storybook/test"; +import { screen, userEvent, expect, within } from "storybook/test"; import TextEditor from "./textEditor"; -import { within } from "@storybook/test"; const meta: Meta = { title: "Components/TextEditor/Interactions", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ca7d3364..7593b1a5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,16 +14,16 @@ importers: devDependencies: '@babel/plugin-transform-react-jsx': specifier: ^7.22.5 - version: 7.28.6(@babel/core@7.28.6) + version: 7.28.6(@babel/core@7.29.0) '@babel/preset-env': specifier: ^7.22.5 - version: 7.28.6(@babel/core@7.28.6) + version: 7.29.0(@babel/core@7.29.0) '@babel/preset-react': specifier: ^7.22.5 - version: 7.28.5(@babel/core@7.28.6) + version: 7.28.5(@babel/core@7.29.0) '@babel/preset-typescript': specifier: ^7.22.5 - version: 7.28.5(@babel/core@7.28.6) + version: 7.28.5(@babel/core@7.29.0) '@eslint/js': specifier: ^9.30.1 version: 9.39.2 @@ -41,10 +41,7 @@ importers: version: 9.1.17(@vitest/browser@3.2.4)(@vitest/runner@3.2.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)))(vitest@3.2.4) '@storybook/react-vite': specifier: ^9.1.3 - version: 9.1.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.57.0)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)))(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)) - '@storybook/test': - specifier: ^8.6.15 - version: 8.6.15(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))) + version: 9.1.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.57.1)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)))(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)) '@tailwindcss/vite': specifier: ^4.1.11 version: 4.1.18(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)) @@ -71,16 +68,16 @@ importers: version: 4.7.0(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)) '@vitest/browser': specifier: ^3.2.4 - version: 3.2.4(playwright@1.58.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))(vitest@3.2.4) + version: 3.2.4(playwright@1.58.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))(vitest@3.2.4) '@vitest/coverage-v8': specifier: ^3.2.4 version: 3.2.4(@vitest/browser@3.2.4)(vitest@3.2.4) babel-jest: specifier: ^30.1.2 - version: 30.2.0(@babel/core@7.28.6) + version: 30.2.0(@babel/core@7.29.0) babel-plugin-styled-components: specifier: ^2.1.4 - version: 2.1.4(@babel/core@7.28.6)(styled-components@6.3.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) + version: 2.1.4(@babel/core@7.29.0)(styled-components@6.3.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) baseline-browser-mapping: specifier: ^2.9.15 version: 2.9.19 @@ -101,7 +98,7 @@ importers: version: 9.1.17(eslint@9.39.2(jiti@2.6.1))(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)))(typescript@5.9.3) globals: specifier: ^17.0.0 - version: 17.2.0 + version: 17.3.0 husky: specifier: ^9.1.7 version: 9.1.7 @@ -122,7 +119,7 @@ importers: version: 4.1.5 playwright: specifier: ^1.57.0 - version: 1.58.0 + version: 1.58.1 prettier: specifier: ^3.7.4 version: 3.8.1 @@ -149,7 +146,7 @@ importers: version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2) vite-plugin-svgr: specifier: ^4.3.0 - version: 4.5.0(rollup@4.57.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)) + version: 4.5.0(rollup@4.57.1)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)) vitest: specifier: ^3.2.4 version: 3.2.4(@types/node@24.10.9)(@vitest/browser@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(yaml@2.8.2) @@ -158,13 +155,13 @@ importers: dependencies: '@base-ui/react': specifier: ^1.1.0 - version: 1.1.0(@types/react@19.2.10)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 1.1.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@floating-ui/react': specifier: ^0.27.16 - version: 0.27.16(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 0.27.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@headlessui/react': specifier: ^2.2.9 - version: 2.2.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 2.2.9(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 @@ -173,37 +170,37 @@ importers: version: 0.5.19(tailwindcss@4.1.18) '@tiptap/extension-code-block-lowlight': specifier: ^3.17.1 - version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/extension-code-block@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(highlight.js@11.11.1)(lowlight@3.3.0) + version: 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/extension-code-block@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(highlight.js@11.11.1)(lowlight@3.3.0) '@tiptap/extension-highlight': specifier: ^3.17.1 - version: 3.18.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)) + version: 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0)) '@tiptap/extension-list': specifier: ^3.17.1 - version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) + version: 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) '@tiptap/extension-placeholder': specifier: ^3.17.1 - version: 3.17.1(@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)) + version: 3.18.0(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)) '@tiptap/extension-table': specifier: ^3.17.1 - version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) + version: 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) '@tiptap/extension-task-list': specifier: ^3.17.1 - version: 3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)) + version: 3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)) '@tiptap/extension-text-align': specifier: ^3.17.1 - version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)) + version: 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0)) '@tiptap/extension-text-style': specifier: ^3.17.1 - version: 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)) + version: 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0)) '@tiptap/pm': specifier: ^3.17.1 - version: 3.17.1 + version: 3.18.0 '@tiptap/react': specifier: ^3.17.1 - version: 3.17.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tiptap/starter-kit': specifier: ^3.17.1 - version: 3.17.1 + version: 3.18.0 clsx: specifier: ^2.1.1 version: 2.1.1 @@ -236,22 +233,22 @@ importers: version: 3.3.0 lucide-react: specifier: ^0.539.0 - version: 0.539.0(react@19.2.3) + version: 0.539.0(react@19.2.4) react: specifier: ^19.2.3 - version: 19.2.3 + version: 19.2.4 react-dom: specifier: ^19.2.3 - version: 19.2.3(react@19.2.3) + version: 19.2.4(react@19.2.4) react-grid-layout: specifier: ^1.5.3 - version: 1.5.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 1.5.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react-resizable: specifier: ^3.1.3 - version: 3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 3.1.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) styled-components: specifier: ^6.3.8 - version: 6.3.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 6.3.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) tailwindcss: specifier: ^4.1.18 version: 4.1.18 @@ -278,20 +275,20 @@ packages: '@asamuzakjp/css-color@3.2.0': resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} - '@babel/code-frame@7.28.6': - resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==} + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.6': - resolution: {integrity: sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==} + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.6': - resolution: {integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==} + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.6': - resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==} + '@babel/generator@7.29.0': + resolution: {integrity: sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.27.3': @@ -381,8 +378,8 @@ packages: resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.6': - resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==} + '@babel/parser@7.29.0': + resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} engines: {node: '>=6.0.0'} hasBin: true @@ -531,8 +528,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.28.6': - resolution: {integrity: sha512-9knsChgsMzBV5Yh3kkhrZNxH3oCYAfMBkNNaVN4cP2RVlFPe8wYdwwcnOsAbkdDoV9UjFtOXWrWB52M8W4jNeA==} + '@babel/plugin-transform-async-generator-functions@7.29.0': + resolution: {integrity: sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -597,8 +594,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.28.6': - resolution: {integrity: sha512-5suVoXjC14lUN6ZL9OLKIHCNVWCrqGqlmEp/ixdXjvgnEl/kauLvvMO/Xw9NyMc95Joj1AeLVPVMvibBgSoFlA==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0': + resolution: {integrity: sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -675,8 +672,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.28.5': - resolution: {integrity: sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==} + '@babel/plugin-transform-modules-systemjs@7.29.0': + resolution: {integrity: sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -687,8 +684,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': - resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==} + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0': + resolution: {integrity: sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -795,8 +792,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.28.6': - resolution: {integrity: sha512-eZhoEZHYQLL5uc1gS5e9/oTknS0sSSAtd5TkKMUp3J+S/CaUjagc0kOUPsEbDmMeva0nC3WWl4SxVY6+OBuxfw==} + '@babel/plugin-transform-regenerator@7.29.0': + resolution: {integrity: sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -873,8 +870,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.28.6': - resolution: {integrity: sha512-GaTI4nXDrs7l0qaJ6Rg06dtOXTBCG6TMDB44zbqofCIC4PqC7SEvmFFtpxzCDw9W5aJ7RKVshgXTLvLdBFV/qw==} + '@babel/preset-env@7.29.0': + resolution: {integrity: sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -904,12 +901,12 @@ packages: resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.6': - resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==} + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.6': - resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} '@base-ui/react@1.1.0': @@ -1336,14 +1333,14 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@floating-ui/core@1.7.3': - resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + '@floating-ui/core@1.7.4': + resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} - '@floating-ui/dom@1.7.4': - resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} + '@floating-ui/dom@1.7.5': + resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} - '@floating-ui/react-dom@2.1.6': - resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} + '@floating-ui/react-dom@2.1.7': + resolution: {integrity: sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -1354,8 +1351,8 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/react@0.27.16': - resolution: {integrity: sha512-9O8N4SeG2z++TSM8QA/KTeKFBVCNEz/AGS7gWPJf6KFRzmRWixFRnCnkPHRDwSVZW6QPDO6uT0P2SpWNKCc9/g==} + '@floating-ui/react@0.27.17': + resolution: {integrity: sha512-LGVZKHwmWGg6MRHjLLgsfyaX2y2aCNgnD1zT/E6B+/h+vxg+nIJUqHPAlTzsHDyqdgEpJ1Np5kxWuFEErXzoGg==} peerDependencies: react: '>=17.0.0' react-dom: '>=17.0.0' @@ -1602,128 +1599,128 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.57.0': - resolution: {integrity: sha512-tPgXB6cDTndIe1ah7u6amCI1T0SsnlOuKgg10Xh3uizJk4e5M1JGaUMk7J4ciuAUcFpbOiNhm2XIjP9ON0dUqA==} + '@rollup/rollup-android-arm-eabi@4.57.1': + resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.57.0': - resolution: {integrity: sha512-sa4LyseLLXr1onr97StkU1Nb7fWcg6niokTwEVNOO7awaKaoRObQ54+V/hrF/BP1noMEaaAW6Fg2d/CfLiq3Mg==} + '@rollup/rollup-android-arm64@4.57.1': + resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.57.0': - resolution: {integrity: sha512-/NNIj9A7yLjKdmkx5dC2XQ9DmjIECpGpwHoGmA5E1AhU0fuICSqSWScPhN1yLCkEdkCwJIDu2xIeLPs60MNIVg==} + '@rollup/rollup-darwin-arm64@4.57.1': + resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.57.0': - resolution: {integrity: sha512-xoh8abqgPrPYPr7pTYipqnUi1V3em56JzE/HgDgitTqZBZ3yKCWI+7KUkceM6tNweyUKYru1UMi7FC060RyKwA==} + '@rollup/rollup-darwin-x64@4.57.1': + resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.57.0': - resolution: {integrity: sha512-PCkMh7fNahWSbA0OTUQ2OpYHpjZZr0hPr8lId8twD7a7SeWrvT3xJVyza+dQwXSSq4yEQTMoXgNOfMCsn8584g==} + '@rollup/rollup-freebsd-arm64@4.57.1': + resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.57.0': - resolution: {integrity: sha512-1j3stGx+qbhXql4OCDZhnK7b01s6rBKNybfsX+TNrEe9JNq4DLi1yGiR1xW+nL+FNVvI4D02PUnl6gJ/2y6WJA==} + '@rollup/rollup-freebsd-x64@4.57.1': + resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.57.0': - resolution: {integrity: sha512-eyrr5W08Ms9uM0mLcKfM/Uzx7hjhz2bcjv8P2uynfj0yU8GGPdz8iYrBPhiLOZqahoAMB8ZiolRZPbbU2MAi6Q==} + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.57.0': - resolution: {integrity: sha512-Xds90ITXJCNyX9pDhqf85MKWUI4lqjiPAipJ8OLp8xqI2Ehk+TCVhF9rvOoN8xTbcafow3QOThkNnrM33uCFQA==} + '@rollup/rollup-linux-arm-musleabihf@4.57.1': + resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.57.0': - resolution: {integrity: sha512-Xws2KA4CLvZmXjy46SQaXSejuKPhwVdaNinldoYfqruZBaJHqVo6hnRa8SDo9z7PBW5x84SH64+izmldCgbezw==} + '@rollup/rollup-linux-arm64-gnu@4.57.1': + resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.57.0': - resolution: {integrity: sha512-hrKXKbX5FdaRJj7lTMusmvKbhMJSGWJ+w++4KmjiDhpTgNlhYobMvKfDoIWecy4O60K6yA4SnztGuNTQF+Lplw==} + '@rollup/rollup-linux-arm64-musl@4.57.1': + resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.57.0': - resolution: {integrity: sha512-6A+nccfSDGKsPm00d3xKcrsBcbqzCTAukjwWK6rbuAnB2bHaL3r9720HBVZ/no7+FhZLz/U3GwwZZEh6tOSI8Q==} + '@rollup/rollup-linux-loong64-gnu@4.57.1': + resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loong64-musl@4.57.0': - resolution: {integrity: sha512-4P1VyYUe6XAJtQH1Hh99THxr0GKMMwIXsRNOceLrJnaHTDgk1FTcTimDgneRJPvB3LqDQxUmroBclQ1S0cIJwQ==} + '@rollup/rollup-linux-loong64-musl@4.57.1': + resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.57.0': - resolution: {integrity: sha512-8Vv6pLuIZCMcgXre6c3nOPhE0gjz1+nZP6T+hwWjr7sVH8k0jRkH+XnfjjOTglyMBdSKBPPz54/y1gToSKwrSQ==} + '@rollup/rollup-linux-ppc64-gnu@4.57.1': + resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-ppc64-musl@4.57.0': - resolution: {integrity: sha512-r1te1M0Sm2TBVD/RxBPC6RZVwNqUTwJTA7w+C/IW5v9Ssu6xmxWEi+iJQlpBhtUiT1raJ5b48pI8tBvEjEFnFA==} + '@rollup/rollup-linux-ppc64-musl@4.57.1': + resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.57.0': - resolution: {integrity: sha512-say0uMU/RaPm3CDQLxUUTF2oNWL8ysvHkAjcCzV2znxBr23kFfaxocS9qJm+NdkRhF8wtdEEAJuYcLPhSPbjuQ==} + '@rollup/rollup-linux-riscv64-gnu@4.57.1': + resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.57.0': - resolution: {integrity: sha512-/MU7/HizQGsnBREtRpcSbSV1zfkoxSTR7wLsRmBPQ8FwUj5sykrP1MyJTvsxP5KBq9SyE6kH8UQQQwa0ASeoQQ==} + '@rollup/rollup-linux-riscv64-musl@4.57.1': + resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.57.0': - resolution: {integrity: sha512-Q9eh+gUGILIHEaJf66aF6a414jQbDnn29zeu0eX3dHMuysnhTvsUvZTCAyZ6tJhUjnvzBKE4FtuaYxutxRZpOg==} + '@rollup/rollup-linux-s390x-gnu@4.57.1': + resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.57.0': - resolution: {integrity: sha512-OR5p5yG5OKSxHReWmwvM0P+VTPMwoBS45PXTMYaskKQqybkS3Kmugq1W+YbNWArF8/s7jQScgzXUhArzEQ7x0A==} + '@rollup/rollup-linux-x64-gnu@4.57.1': + resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.57.0': - resolution: {integrity: sha512-XeatKzo4lHDsVEbm1XDHZlhYZZSQYym6dg2X/Ko0kSFgio+KXLsxwJQprnR48GvdIKDOpqWqssC3iBCjoMcMpw==} + '@rollup/rollup-linux-x64-musl@4.57.1': + resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} cpu: [x64] os: [linux] - '@rollup/rollup-openbsd-x64@4.57.0': - resolution: {integrity: sha512-Lu71y78F5qOfYmubYLHPcJm74GZLU6UJ4THkf/a1K7Tz2ycwC2VUbsqbJAXaR6Bx70SRdlVrt2+n5l7F0agTUw==} + '@rollup/rollup-openbsd-x64@4.57.1': + resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.57.0': - resolution: {integrity: sha512-v5xwKDWcu7qhAEcsUubiav7r+48Uk/ENWdr82MBZZRIm7zThSxCIVDfb3ZeRRq9yqk+oIzMdDo6fCcA5DHfMyA==} + '@rollup/rollup-openharmony-arm64@4.57.1': + resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.57.0': - resolution: {integrity: sha512-XnaaaSMGSI6Wk8F4KK3QP7GfuuhjGchElsVerCplUuxRIzdvZ7hRBpLR0omCmw+kI2RFJB80nenhOoGXlJ5TfQ==} + '@rollup/rollup-win32-arm64-msvc@4.57.1': + resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.57.0': - resolution: {integrity: sha512-3K1lP+3BXY4t4VihLw5MEg6IZD3ojSYzqzBG571W3kNQe4G4CcFpSUQVgurYgib5d+YaCjeFow8QivWp8vuSvA==} + '@rollup/rollup-win32-ia32-msvc@4.57.1': + resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.57.0': - resolution: {integrity: sha512-MDk610P/vJGc5L5ImE4k5s+GZT3en0KoK1MKPXCRgzmksAMk79j4h3k1IerxTNqwDLxsGxStEZVBqG0gIqZqoA==} + '@rollup/rollup-win32-x64-gnu@4.57.1': + resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.57.0': - resolution: {integrity: sha512-Zv7v6q6aV+VslnpwzqKAmrk5JdVkLUzok2208ZXGipjb+msxBr/fJPZyeEXiFgH7k62Ak0SLIfxQRZQvTuf7rQ==} + '@rollup/rollup-win32-x64-msvc@4.57.1': + resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} cpu: [x64] os: [win32] @@ -1793,11 +1790,6 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - '@storybook/instrumenter@8.6.15': - resolution: {integrity: sha512-TvHR/+yyIAOp/1bLulFai2kkhIBtAlBw7J6Jd9DKyInoGhTWNE1G1Y61jD5GWXX29AlwaHfzGUaX5NL1K+FJpg==} - peerDependencies: - storybook: ^8.6.15 - '@storybook/react-dom-shim@9.1.17': resolution: {integrity: sha512-Ss/lNvAy0Ziynu+KniQIByiNuyPz3dq7tD62hqSC/pHw190X+M7TKU3zcZvXhx2AQx1BYyxtdSHIZapb+P5mxQ==} peerDependencies: @@ -1826,11 +1818,6 @@ packages: typescript: optional: true - '@storybook/test@8.6.15': - resolution: {integrity: sha512-EwquDRUDVvWcZds3T2abmB5wSN/Vattal4YtZ6fpBlIUqONV4o/cOBX39cFfQSUCBrIXIjQ6RmapQCHK/PvBYw==} - peerDependencies: - storybook: ^8.6.15 - '@svgr/babel-plugin-add-jsx-attribute@8.0.0': resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} engines: {node: '>=14'} @@ -2006,18 +1993,10 @@ packages: '@tanstack/virtual-core@3.13.18': resolution: {integrity: sha512-Mx86Hqu1k39icq2Zusq+Ey2J6dDWTjDvEv43PJtRCoEYTLyfaPnxIQ6iy7YAOK0NV/qOEmZQ/uCufrppZxTgcg==} - '@testing-library/dom@10.4.0': - resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} - engines: {node: '>=18'} - '@testing-library/dom@10.4.1': resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} engines: {node: '>=18'} - '@testing-library/jest-dom@6.5.0': - resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==} - engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - '@testing-library/jest-dom@6.9.1': resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} @@ -2037,206 +2016,200 @@ packages: '@types/react-dom': optional: true - '@testing-library/user-event@14.5.2': - resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} - engines: {node: '>=12', npm: '>=6'} - peerDependencies: - '@testing-library/dom': '>=7.21.4' - '@testing-library/user-event@14.6.1': resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@testing-library/dom': '>=7.21.4' - '@tiptap/core@3.17.1': - resolution: {integrity: sha512-f8hB9MzXqsuXoF9qXEDEH5Fb3VgwhEFMBMfk9EKN88l5adri6oM8mt2XOWVxVVssjpEW0177zXSLPKWzoS/vrw==} + '@tiptap/core@3.18.0': + resolution: {integrity: sha512-Gczd4GbK1DNgy/QUPElMVozoa0GW9mW8E31VIi7Q4a9PHHz8PcrxPmuWwtJ2q0PF8MWpOSLuBXoQTWaXZRPRnQ==} peerDependencies: - '@tiptap/pm': ^3.17.1 + '@tiptap/pm': ^3.18.0 - '@tiptap/extension-blockquote@3.17.1': - resolution: {integrity: sha512-X4jU/fllJQ8QbjCHUafU4QIHBobyXP3yGBoOcXxUaKlWbLvUs0SQTREM3n6/86m2YyAxwTPG1cn3Xypf42DMAQ==} + '@tiptap/extension-blockquote@3.18.0': + resolution: {integrity: sha512-1HjEoM5vZDfFnq2OodNpW13s56a9pbl7jolUv1V9FrE3X5s7n0HCfDzIVpT7z1HgTdPtlN5oSt5uVyBwuwSUfA==} peerDependencies: - '@tiptap/core': ^3.17.1 + '@tiptap/core': ^3.18.0 - '@tiptap/extension-bold@3.17.1': - resolution: {integrity: sha512-PZmrljcVBziJkQDXT/QJv4ESxVVQ0iRH+ruTzPda56Kk4h2310cSXGjI33W7rlCikGPoBAAjY/inujm46YB4bw==} + '@tiptap/extension-bold@3.18.0': + resolution: {integrity: sha512-xUgOvHCdGXh9Lfxd7DtgsSr0T/egIwBllWHIBWDjQEQQ0b+ICn+0+i703btHMB4hjdduZtgVDrhK8jAW3U6swA==} peerDependencies: - '@tiptap/core': ^3.17.1 + '@tiptap/core': ^3.18.0 - '@tiptap/extension-bubble-menu@3.17.1': - resolution: {integrity: sha512-z3E8biLiWlzZJwNHnB6j/ZyBdFrJmpl1lqKHc72JqahUHZvidZHdCOYssvR3fc6IaI7MXV13XY1DXUdFbatnaw==} + '@tiptap/extension-bubble-menu@3.18.0': + resolution: {integrity: sha512-9kYG1fVYQcA3Kp5Bq96lrKCp9oLpQqceDsK688r7iT1yymQlBPMunaqaqb5ZLQGhnNYbhfG+8xcQsvEKjklErA==} peerDependencies: - '@tiptap/core': ^3.17.1 - '@tiptap/pm': ^3.17.1 + '@tiptap/core': ^3.18.0 + '@tiptap/pm': ^3.18.0 - '@tiptap/extension-bullet-list@3.17.1': - resolution: {integrity: sha512-2zw17XHruOJQK7ntLVq0PmOLajFhvQ+U4/qTfJnV3VOsHkm+2GPAksFe7I7+X0XmSmDru0pcT339Yywx/6Aykw==} + '@tiptap/extension-bullet-list@3.18.0': + resolution: {integrity: sha512-8sEpY0nxAGGFDYlF+WVFPKX00X2dAAjmoi0+2eWvK990PdQqwXrQsRs7pkUbpE2mDtATV8+GlDXk9KDkK/ZXhA==} peerDependencies: - '@tiptap/extension-list': ^3.17.1 + '@tiptap/extension-list': ^3.18.0 - '@tiptap/extension-code-block-lowlight@3.17.1': - resolution: {integrity: sha512-qdFDob6efjYp5aWD19Ac1fTN14l3WQbrHbopGbNhruSkXVj5LccwIHS2dgStSLHVHQcoot3YMEWEnauzprN51w==} + '@tiptap/extension-code-block-lowlight@3.18.0': + resolution: {integrity: sha512-euUvh9r1KNSua9X4VdMS6lcWgUkcd0YznCFhp4b5gSqT5/5F7tGlvEg5mNpBeNhOIreDQV6zfBc7HvLfh7cLEA==} peerDependencies: - '@tiptap/core': ^3.17.1 - '@tiptap/extension-code-block': ^3.17.1 - '@tiptap/pm': ^3.17.1 + '@tiptap/core': ^3.18.0 + '@tiptap/extension-code-block': ^3.18.0 + '@tiptap/pm': ^3.18.0 highlight.js: ^11 lowlight: ^2 || ^3 - '@tiptap/extension-code-block@3.17.1': - resolution: {integrity: sha512-h4i+Y/cN7nMi0Tmlp6V1w4dI7NTqrUFSr1W/vMqnq4vn+c6jvm35KubKU5ry/1qQp8KfndDA02BtVQiMx6DmpA==} + '@tiptap/extension-code-block@3.18.0': + resolution: {integrity: sha512-fCx1oT95ikGfoizw+XCjeglQxlLK4lWgUcB4Dcn5TdaCoFBQMEaZs7Q0jVajxxxULnyArkg60uarc1ac/IF2Hw==} peerDependencies: - '@tiptap/core': ^3.17.1 - '@tiptap/pm': ^3.17.1 + '@tiptap/core': ^3.18.0 + '@tiptap/pm': ^3.18.0 - '@tiptap/extension-code@3.17.1': - resolution: {integrity: sha512-4W0x1ZZqSnIVzQV0/b5VR0bktef2HykH5I/Czzir9yqoZ5zV2cLrMVuLvdFNgRIckU60tQLmHrfKWLF50OY0ew==} + '@tiptap/extension-code@3.18.0': + resolution: {integrity: sha512-0SU53O0NRmdtRM2Hgzm372dVoHjs2F40o/dtB7ls4kocf4W89FyWeC2R6ZsFQqcXisNh9RTzLtYfbNyizGuZIw==} peerDependencies: - '@tiptap/core': ^3.17.1 + '@tiptap/core': ^3.18.0 - '@tiptap/extension-document@3.17.1': - resolution: {integrity: sha512-F7Q5HoAU383HWFa6AXZQ5N6t6lTJzVjYM8z93XrtH/2GzDFwy1UmDSrsXqvgznedBLAOgCNVTNh9PjXpLoOUbg==} + '@tiptap/extension-document@3.18.0': + resolution: {integrity: sha512-e0hOGrjTMpCns8IC5p+c5CEiE1BBmFBFL+RpIxU/fjT2SaZ7q2xsFguBu94lQDT0cD6fdZokFRpGwEMxZNVGCg==} peerDependencies: - '@tiptap/core': ^3.17.1 + '@tiptap/core': ^3.18.0 - '@tiptap/extension-dropcursor@3.17.1': - resolution: {integrity: sha512-EKJYPb7OSk3p9mX1SmHt4ccw89w1P1d55hC8aPtZJ6jxAUd5MSuVwvEEVz7LGldUZD9HZz9WFQ0Sv9U73Bpkmw==} + '@tiptap/extension-dropcursor@3.18.0': + resolution: {integrity: sha512-pIW/K9fGth221dkfA5SInHcqfnCr0aG9LGkRiEh4gwM4cf6ceUBrvcD+QlemSZ4q9oktNGJmXT+sEXVOQ8QoeQ==} peerDependencies: - '@tiptap/extensions': ^3.17.1 + '@tiptap/extensions': ^3.18.0 - '@tiptap/extension-floating-menu@3.17.1': - resolution: {integrity: sha512-zYkoYsxp+cZ8tBDODm4E8hnSaMTdDWKJuCQWY2Ep14oMPkAkSJr8sCLL1tOnNSAnhGwLJQtRLkZ41nvUEP6xKA==} + '@tiptap/extension-floating-menu@3.18.0': + resolution: {integrity: sha512-a2cBQi0I/X0o3a9b+adwJvkdxLzQzJIkP9dc/v25qGTSCjC1+ycois5WQOn8T4T8t4g/fAH1UOXEWnkWyTxLIg==} peerDependencies: '@floating-ui/dom': ^1.0.0 - '@tiptap/core': ^3.17.1 - '@tiptap/pm': ^3.17.1 + '@tiptap/core': ^3.18.0 + '@tiptap/pm': ^3.18.0 - '@tiptap/extension-gapcursor@3.17.1': - resolution: {integrity: sha512-xItmJZTi+Z6UbLBhpBBL9RZDNbDXf+ntWVgblAmxtpyEyNh5k5tkM6IP9SJRhk92uVfnFpH9qkGo66a537I8QA==} + '@tiptap/extension-gapcursor@3.18.0': + resolution: {integrity: sha512-covioXPPHX3SnlTwC/1rcHUHAc7/JFd4vN0kZQmZmvGHlxqq2dPmtrPh8D7TuDuhG0k/3Z6i8dJFP0phfRAhuA==} peerDependencies: - '@tiptap/extensions': ^3.17.1 + '@tiptap/extensions': ^3.18.0 - '@tiptap/extension-hard-break@3.17.1': - resolution: {integrity: sha512-28FZPUho1Q2AB3ka5SVEVib5f9dMKbE1kewLZeRIOQ5FuFNholGIPL5X1tKcwGW7G3A7Y0fGxeNmIZJ3hrqhzA==} + '@tiptap/extension-hard-break@3.18.0': + resolution: {integrity: sha512-IXLiOHEmbU2Wn1jFRZC6apMxiJQvSRWhwoiubAvRxyiPSnFTeaEgT8Qgo5DjwB39NckP+o7XX7RrgzlkwdFPQQ==} peerDependencies: - '@tiptap/core': ^3.17.1 + '@tiptap/core': ^3.18.0 - '@tiptap/extension-heading@3.17.1': - resolution: {integrity: sha512-rT+Su/YnHdlikg8f78t6RXlc1sVSfp7B0fdJdtFgS2e6BBYJQoDMp5L9nt54RR9Yy953aDW2sko7NArUCb8log==} + '@tiptap/extension-heading@3.18.0': + resolution: {integrity: sha512-MTamVnYsFWVndLSq5PRQ7ZmbF6AExsFS9uIvGtUAwuhzvR4of/WHh6wpvWYjA+BLXTWRrfuGHaZTl7UXBN13fg==} peerDependencies: - '@tiptap/core': ^3.17.1 + '@tiptap/core': ^3.18.0 '@tiptap/extension-highlight@3.18.0': resolution: {integrity: sha512-syk2WsqfcZN+QZ8AS97hu7atqaLYi8MHQQRrjgO9z+CQzlA7qrTHFl9VF54vfCMQV3arVZlO/qLqFxDZ05tWyw==} peerDependencies: '@tiptap/core': ^3.18.0 - '@tiptap/extension-horizontal-rule@3.17.1': - resolution: {integrity: sha512-CHG6LBtxV+3qj5EcCRVlpvSW5udKD6KbnXIGhP+Tvy+OabLGzO4HNxz3+duDE0pMR4eKX1libsnqffj0vq7mnQ==} + '@tiptap/extension-horizontal-rule@3.18.0': + resolution: {integrity: sha512-fEq7DwwQZ496RHNbMQypBVNqoWnhDEERbzWMBqlmfCfc/0FvJrHtsQkk3k4lgqMYqmBwym3Wp0SrRYiyKCPGTw==} peerDependencies: - '@tiptap/core': ^3.17.1 - '@tiptap/pm': ^3.17.1 + '@tiptap/core': ^3.18.0 + '@tiptap/pm': ^3.18.0 - '@tiptap/extension-italic@3.17.1': - resolution: {integrity: sha512-unfRLmvf680Y0UkBToUcrDkSEKO/wAjd3nQ7CNPMfAc8m+ZMReXkcgLpeVvnDEiHNsJ0PlYSW7a45tnQD9HQdg==} + '@tiptap/extension-italic@3.18.0': + resolution: {integrity: sha512-1C4nB08psiRo0BPxAbpYq8peUOKnjQWtBCLPbE6B9ToTK3vmUk0AZTqLO11FvokuM1GF5l2Lg3sKrKFuC2hcjQ==} peerDependencies: - '@tiptap/core': ^3.17.1 + '@tiptap/core': ^3.18.0 - '@tiptap/extension-link@3.17.1': - resolution: {integrity: sha512-5kdN7vms5hMXtjiophUkgvzy8dNGvGSmol1Sawh30TEPrgXc93Ayj7YyGZlbimInKZcD8q+Od/FFc+wkrof3nA==} + '@tiptap/extension-link@3.18.0': + resolution: {integrity: sha512-1J28C4+fKAMQi7q/UsTjAmgmKTnzjExXY98hEBneiVzFDxqF69n7+Vb7nVTNAIhmmJkZMA0DEcMhSiQC/1/u4A==} peerDependencies: - '@tiptap/core': ^3.17.1 - '@tiptap/pm': ^3.17.1 + '@tiptap/core': ^3.18.0 + '@tiptap/pm': ^3.18.0 - '@tiptap/extension-list-item@3.17.1': - resolution: {integrity: sha512-Qjj4oIa44cTX0E6aw/4+wleqX21t5jMDxeSqP5uQ8Q3IdD1GoR5+yo+41XAHELaeZOXLHLkAIbzIxik3pOqO8w==} + '@tiptap/extension-list-item@3.18.0': + resolution: {integrity: sha512-auTSt+NXoUnT0xofzFa+FnXsrW1TPdT1OB3U1OqQCIWkumZqL45A8OK9kpvyQsWj/xJ8fy1iZwFlKXPtxjLd2w==} peerDependencies: - '@tiptap/extension-list': ^3.17.1 + '@tiptap/extension-list': ^3.18.0 - '@tiptap/extension-list-keymap@3.17.1': - resolution: {integrity: sha512-zRidxbkJNe/j3nZpOGLnPeVdyciUM8MM+NHhxcjVKoNDA+/zEBfjXJ1dKC4UBsnSr4AS/3SCWBYHGXOoSqdUaA==} + '@tiptap/extension-list-keymap@3.18.0': + resolution: {integrity: sha512-ZzO5r/cW7G0zpL/eM69WPnMpzb0YsSjtI60CYGA0iQDRJnK9INvxu0RU0ewM2faqqwASmtjuNJac+Fjk6scdXg==} peerDependencies: - '@tiptap/extension-list': ^3.17.1 + '@tiptap/extension-list': ^3.18.0 - '@tiptap/extension-list@3.17.1': - resolution: {integrity: sha512-LHKIxmXe5Me+vJZKhiwMBGHlApaBIAduNMRUpm5mkY7ER/m96zKR0VqrJd4LjVVH2iDvck5h1Ka4396MHWlKNg==} + '@tiptap/extension-list@3.18.0': + resolution: {integrity: sha512-9lQBo45HNqIFcLEHAk+CY3W51eMMxIJjWbthm2CwEWr4PB3+922YELlvq8JcLH1nVFkBVpmBFmQe/GxgnCkzwQ==} peerDependencies: - '@tiptap/core': ^3.17.1 - '@tiptap/pm': ^3.17.1 + '@tiptap/core': ^3.18.0 + '@tiptap/pm': ^3.18.0 - '@tiptap/extension-ordered-list@3.17.1': - resolution: {integrity: sha512-pahAXbVajqX0Y51Zge9jKZlCtPV1oiq5Fbzs7gHF80KICIKf44i/AsUvfdJyT2N5/8kZrAMQHEiU/UgTMrhM3w==} + '@tiptap/extension-ordered-list@3.18.0': + resolution: {integrity: sha512-5bUAfklYLS5o6qvLLfreGyGvD1JKXqOQF0YntLyPuCGrXv7+XjPWQL2BmEf59fOn2UPT2syXLQ1WN5MHTArRzg==} peerDependencies: - '@tiptap/extension-list': ^3.17.1 + '@tiptap/extension-list': ^3.18.0 - '@tiptap/extension-paragraph@3.17.1': - resolution: {integrity: sha512-Vl+xAlINaPtX8XTPvPmeveYMEIMLs8gA7ItcKpyyo4cCzAfVCY3DKuWzOkQGUf7DKrhyJQZhpgLNMaq+h5sTSw==} + '@tiptap/extension-paragraph@3.18.0': + resolution: {integrity: sha512-uvFhdwiur4NhhUdBmDsajxjGAIlg5qga55fYag2DzOXxIQE2M7/aVMRkRpuJzb88GY4EHSh8rY34HgMK2FJt2Q==} peerDependencies: - '@tiptap/core': ^3.17.1 + '@tiptap/core': ^3.18.0 - '@tiptap/extension-placeholder@3.17.1': - resolution: {integrity: sha512-cE8Rij5/1t4KnWE7GaDewhBek9DKNB+97yrxyggMegILg6v195hOmOkRZkyfnFMYZoBDlrfSAtX9wBvbZBqIsg==} + '@tiptap/extension-placeholder@3.18.0': + resolution: {integrity: sha512-jhN1Xa+MpfrTcCYZsFSvZYpUuMutPTC20ms0IsH1yN0y9tbAS+T6PHPC+dsvyAinYdA8yKElM6OO+jpyz4X1cw==} peerDependencies: - '@tiptap/extensions': ^3.17.1 + '@tiptap/extensions': ^3.18.0 - '@tiptap/extension-strike@3.17.1': - resolution: {integrity: sha512-c6fS6YIhxoU55etlJgM0Xqker+jn7I1KC7GVu6ljmda8I00K3/lOLZgvFUNPmgp8EJWtyTctj+3D3D+PaZaFAA==} + '@tiptap/extension-strike@3.18.0': + resolution: {integrity: sha512-kl/fa68LZg8NWUqTkRTfgyCx+IGqozBmzJxQDc1zxurrIU+VFptDV9UuZim587sbM2KGjCi/PNPjPGk1Uu0PVg==} peerDependencies: - '@tiptap/core': ^3.17.1 + '@tiptap/core': ^3.18.0 - '@tiptap/extension-table@3.17.1': - resolution: {integrity: sha512-FuAMdmM330tHJUYT5IV2ooFRqtXf+0D8llcE9nIQQCXKL4J0pfGSOIm40LVpunYgx2pV8SSCL51qTBuEmR84tQ==} + '@tiptap/extension-table@3.18.0': + resolution: {integrity: sha512-04BQYiSKxhy33Pd7UFZchW8UYH0FOts8LCwel11n507w2lNd/wbYMTI2A5AfOEOXvr6Xwx/jOWX4MWuhMqiZwQ==} peerDependencies: - '@tiptap/core': ^3.17.1 - '@tiptap/pm': ^3.17.1 + '@tiptap/core': ^3.18.0 + '@tiptap/pm': ^3.18.0 - '@tiptap/extension-task-list@3.17.1': - resolution: {integrity: sha512-EiJjlfNioQub9G6SZ83b/1+5VhVtlHStQN7+BTIsA9EhRAeKwge0KtO1oMIzFkDryd9mki9GQx/D+eek2CNsYw==} + '@tiptap/extension-task-list@3.18.0': + resolution: {integrity: sha512-/znJ9/B4dBa4PizWtKFbVyuR7ROnlQA2HngL9Z5IvZQUlru1djpVfU4nuUImOkRWg4H7CRV5i2xL21JkcS57UA==} peerDependencies: - '@tiptap/extension-list': ^3.17.1 + '@tiptap/extension-list': ^3.18.0 - '@tiptap/extension-text-align@3.17.1': - resolution: {integrity: sha512-CyJbZf823dqPZ/1zwRsza5pk/NQwFZwILdFYLVkV88I4+Ua9YVztI9kmwTB6dJyuKT4kTc7nhQHdaa957alGZQ==} + '@tiptap/extension-text-align@3.18.0': + resolution: {integrity: sha512-NEd2IUgOymKPmGOnxum4hLRbdQyBlK1Cmkt8QGIrmatovPrw2PtWmHVZ6foNChsi/r932dKVfqZ/uMUh8QUppQ==} peerDependencies: - '@tiptap/core': ^3.17.1 + '@tiptap/core': ^3.18.0 - '@tiptap/extension-text-style@3.17.1': - resolution: {integrity: sha512-TCMsEU92r/TfZkN8AKo/WIcJ1uNq/5NiZxloq5drF1HXxDDjwliurgwBw3OTGUlKQmer0N9hV0AAePY/G+5Akw==} + '@tiptap/extension-text-style@3.18.0': + resolution: {integrity: sha512-4HNTzkRGP+9YL8ccCRHFwH469GN6/NKefFAzYZjh2l8JOrPgiYqIlu7Tc+q9w1L5m8f6sC5DBQfGOsgWxuM3GQ==} peerDependencies: - '@tiptap/core': ^3.17.1 + '@tiptap/core': ^3.18.0 - '@tiptap/extension-text@3.17.1': - resolution: {integrity: sha512-rGml96vokQbvPB+w6L3+WKyYJWwqELaLdFUr1WMgg+py5uNYGJYAExYNAbDb5biWJBrX9GgMlCaNeiJj849L1w==} + '@tiptap/extension-text@3.18.0': + resolution: {integrity: sha512-9TvctdnBCwK/zyTi9kS7nGFNl5OvGM8xE0u38ZmQw5t79JOqJHgOroyqMjw8LHK/1PWrozfNCmsZbpq4IZuKXw==} peerDependencies: - '@tiptap/core': ^3.17.1 + '@tiptap/core': ^3.18.0 - '@tiptap/extension-underline@3.17.1': - resolution: {integrity: sha512-6RdBzmkg6DYs0EqPyoqLGkISXzCnPqM/q3A6nh3EmFmORcIDfuNmcidvA6EImebK8KQGmtZKsRhQSnK4CNQ39g==} + '@tiptap/extension-underline@3.18.0': + resolution: {integrity: sha512-009IeXURNJ/sm1pBqbj+2YQgjQaBtNlJR3dbl6xu49C+qExqCmI7klhKQuwsVVGLR7ahsYlp7d9RlftnhCXIcQ==} peerDependencies: - '@tiptap/core': ^3.17.1 + '@tiptap/core': ^3.18.0 - '@tiptap/extensions@3.17.1': - resolution: {integrity: sha512-aQ4WA5bdRpv9yPQ6rRdiqwlMZ1eJw1HyEaNPQhOr2HVhQ0EqSDIOEXF4ymCveGAHxXbxNvtQ+4t1ymQEikGfXA==} + '@tiptap/extensions@3.18.0': + resolution: {integrity: sha512-uSRIE9HGshBN6NRFR3LX2lZqBLvX92SgU5A9AvUbJD4MqU63E+HdruJnRjsVlX3kPrmbIDowxrzXlUcg3K0USQ==} peerDependencies: - '@tiptap/core': ^3.17.1 - '@tiptap/pm': ^3.17.1 + '@tiptap/core': ^3.18.0 + '@tiptap/pm': ^3.18.0 - '@tiptap/pm@3.17.1': - resolution: {integrity: sha512-UyVLkN8axV/zop6Se2DCBJRu5DM21X0XEQvwEC5P/vk8eC9OcQZ3FLtxeYy2ZjpAZUzBGLw0/BGsmEip/n7olw==} + '@tiptap/pm@3.18.0': + resolution: {integrity: sha512-8RoI5gW0xBVCsuxahpK8vx7onAw6k2/uR3hbGBBnH+HocDMaAZKot3nTyY546ij8ospIC1mnQ7k4BhVUZesZDQ==} - '@tiptap/react@3.17.1': - resolution: {integrity: sha512-Hn/pIP3HG9xYnhI3iGrfVhgQhfIdOaEBSxOFzJ37patqSOlIoP5aZH/b2HZ4vgo5DdRlV56q7WtRC+vLIw4Neg==} + '@tiptap/react@3.18.0': + resolution: {integrity: sha512-VC20YhoiWe2E03D1BRH+AVMgXeA7li+bzIoaBtpK9+AdizAC+TvWCb2I/9mQCy9m31zGYTD0vv0e7bVlJi+aKA==} peerDependencies: - '@tiptap/core': ^3.17.1 - '@tiptap/pm': ^3.17.1 + '@tiptap/core': ^3.18.0 + '@tiptap/pm': ^3.18.0 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 '@types/react-dom': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tiptap/starter-kit@3.17.1': - resolution: {integrity: sha512-3vBGqag9mwuQoWTrfQlULtHeoFs7k/2Q8CREf3Y79hv2fqAXTvTOKlWYPSgZhiGVMp6Dti7BDiE9Y1QpvAat2g==} + '@tiptap/starter-kit@3.18.0': + resolution: {integrity: sha512-LctpCelqI/5nHEeZgCPiwI1MmTjGr6YCIBGWmS5s4DJE7NfevEkwomR/C05QKdVUwPhpCXIMeS1+h/RYqRo1KA==} '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -2532,9 +2505,6 @@ packages: '@vitest/browser': optional: true - '@vitest/expect@2.0.5': - resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} - '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} @@ -2549,12 +2519,6 @@ packages: vite: optional: true - '@vitest/pretty-format@2.0.5': - resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} - - '@vitest/pretty-format@2.1.9': - resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} - '@vitest/pretty-format@3.2.4': resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} @@ -2564,18 +2528,9 @@ packages: '@vitest/snapshot@3.2.4': resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - '@vitest/spy@2.0.5': - resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} - '@vitest/spy@3.2.4': resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/utils@2.0.5': - resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} - - '@vitest/utils@2.1.9': - resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} - '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} @@ -2661,8 +2616,8 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} - ast-v8-to-istanbul@0.3.10: - resolution: {integrity: sha512-p4K7vMz2ZSk3wN8l5o3y2bJAoZXT3VuJI5OLTATY/01CYWumWvwkUw0SqDBnNq6IiTO3qDa1eSQDibAV8g7XOQ==} + ast-v8-to-istanbul@0.3.11: + resolution: {integrity: sha512-Qya9fkoofMjCBNVdWINMjB5KZvkYfaO9/anwkWnjxibpWUxo5iHl2sOdP7/uAqaRuUYuoo8rDwnbaaKVFxoUvw==} async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} @@ -2695,8 +2650,8 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-corejs3@0.13.0: - resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==} + babel-plugin-polyfill-corejs3@0.14.0: + resolution: {integrity: sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -2784,8 +2739,8 @@ packages: camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - caniuse-lite@1.0.30001766: - resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==} + caniuse-lite@1.0.30001767: + resolution: {integrity: sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==} chai@5.3.3: resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} @@ -2795,10 +2750,6 @@ packages: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} - chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -2811,8 +2762,8 @@ packages: resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} - ci-info@4.3.1: - resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} cjs-module-lexer@2.2.0: @@ -2860,8 +2811,8 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - commander@14.0.2: - resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} engines: {node: '>=20'} concat-map@0.0.1: @@ -3025,8 +2976,8 @@ packages: echarts@6.0.0: resolution: {integrity: sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==} - electron-to-chromium@1.5.279: - resolution: {integrity: sha512-0bblUU5UNdOt5G7XqGiJtpZMONma6WAfq9vsFmtn9x1+joAObr6x1chfqyxFSDCAFwFhCQDrqeAr6MYdpwJ9Hg==} + electron-to-chromium@1.5.283: + resolution: {integrity: sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==} emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -3366,8 +3317,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@17.2.0: - resolution: {integrity: sha512-tovnCz/fEq+Ripoq+p/gN1u7l6A7wwkoBT9pRCzTHzsD/LvADIzXZdjmRymh5Ztf0DYC3Rwg5cZRYjxzBmzbWg==} + globals@17.3.0: + resolution: {integrity: sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==} engines: {node: '>=18'} globalthis@1.0.4: @@ -3808,6 +3759,9 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + js-tokens@10.0.0: + resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -4317,13 +4271,13 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - playwright-core@1.58.0: - resolution: {integrity: sha512-aaoB1RWrdNi3//rOeKuMiS65UCcgOVljU46At6eFcOFPFHWtd2weHRRow6z/n+Lec0Lvu0k9ZPKJSjPugikirw==} + playwright-core@1.58.1: + resolution: {integrity: sha512-bcWzOaTxcW+VOOGBCQgnaKToLJ65d6AqfLVKEWvexyS3AS6rbXl+xdpYRMGSRBClPvyj44njOWoxjNdL/H9UNg==} engines: {node: '>=18'} hasBin: true - playwright@1.58.0: - resolution: {integrity: sha512-2SVA0sbPktiIY/MCOPX8e86ehA/e+tDNq+e5Y8qjKYti2Z/JG7xnronT/TXTIkKbYGWlCbuucZ6dziEgkoEjQQ==} + playwright@1.58.1: + resolution: {integrity: sha512-+2uTZHxSCcxjvGc5C891LrS1/NlxglGxzrC4seZiVjcYVQfUa87wBL6rTDqzGjuoWNjnBzRqKmF6zRYGMvQUaQ==} engines: {node: '>=18'} hasBin: true @@ -4452,11 +4406,6 @@ packages: resolution: {integrity: sha512-+NRMYs2DyTP4/tqWz371Oo50JqmWltR1h2gcdgUMAWZJIAvrd0/SqlCfx7tpzpl/s36rzw6qH2MjoNrxtRNYhA==} engines: {node: ^20.9.0 || >=22} - react-dom@19.2.3: - resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} - peerDependencies: - react: ^19.2.3 - react-dom@19.2.4: resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} peerDependencies: @@ -4493,10 +4442,6 @@ packages: react: '>= 16.3' react-dom: '>= 16.3' - react@19.2.3: - resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} - engines: {node: '>=0.10.0'} - react@19.2.4: resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} @@ -4578,8 +4523,8 @@ packages: engines: {node: 20 || >=22} hasBin: true - rollup@4.57.0: - resolution: {integrity: sha512-e5lPJi/aui4TO1LpAXIRLySmwXSE8k3b9zoGfd42p67wzxog4WHjiZF3M2uheQih4DGyc25QEV4yRBbpueNiUA==} + rollup@4.57.1: + resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -4901,18 +4846,10 @@ packages: resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} engines: {node: ^18.0.0 || >=20.0.0} - tinyrainbow@1.2.0: - resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} - engines: {node: '>=14.0.0'} - tinyrainbow@2.0.0: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} - engines: {node: '>=14.0.0'} - tinyspy@4.0.4: resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} @@ -5301,25 +5238,25 @@ snapshots: '@csstools/css-tokenizer': 3.0.4 lru-cache: 10.4.3 - '@babel/code-frame@7.28.6': + '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.6': {} + '@babel/compat-data@7.29.0': {} - '@babel/core@7.28.6': + '@babel/core@7.29.0': dependencies: - '@babel/code-frame': 7.28.6 - '@babel/generator': 7.28.6 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helpers': 7.28.6 - '@babel/parser': 7.28.6 + '@babel/parser': 7.29.0 '@babel/template': 7.28.6 - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -5329,49 +5266,49 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.28.6': + '@babel/generator@7.29.0': dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@babel/helper-compilation-targets@7.28.6': dependencies: - '@babel/compat-data': 7.28.6 + '@babel/compat-data': 7.29.0 '@babel/helper-validator-option': 7.27.1 browserslist: 4.28.1 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.28.6)': + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.6) + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.28.6)': + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.28.6)': + '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 debug: 4.4.3 @@ -5384,55 +5321,55 @@ snapshots: '@babel/helper-member-expression-to-functions@7.28.5': dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.28.6': dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)': + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@babel/helper-plugin-utils@7.28.6': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.6)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.6 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.28.6(@babel/core@7.28.6)': + '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -5445,641 +5382,641 @@ snapshots: '@babel/helper-wrap-function@7.28.6': dependencies: '@babel/template': 7.28.6 - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helpers@7.28.6': dependencies: '@babel/template': 7.28.6 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 - '@babel/parser@7.28.6': + '@babel/parser@7.29.0': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.28.6)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.28.6) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.6)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.6)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.6)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.6)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.6)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.6)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.6)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.6)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.6)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.6)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.6)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.6)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.6)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.6)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.6)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.6)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-async-generator-functions@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.6) - '@babel/traverse': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.6) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.6) - '@babel/traverse': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/template': 7.28.6 - '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.6)': + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.6) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.28.5(@babel/core@7.28.6)': + '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.6) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.6) - '@babel/traverse': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.6) + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.6)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.6)': + '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6) - '@babel/types': 7.28.6 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-regenerator@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-spread@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.28.6) + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/preset-env@7.28.6(@babel/core@7.28.6)': + '@babel/preset-env@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/compat-data': 7.28.6 - '@babel/core': 7.28.6 + '@babel/compat-data': 7.29.0 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.28.6) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.6) - '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.6) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-async-generator-functions': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.6) - '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-modules-systemjs': 7.28.5(@babel/core@7.28.6) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.6) - '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-regenerator': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.28.6) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.6) - babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.28.6) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.6) - babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.28.6) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0) + '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.0) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.14.0(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.29.0) core-js-compat: 3.48.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.6)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 esutils: 2.0.3 - '@babel/preset-react@7.28.5(@babel/core@7.28.6)': + '@babel/preset-react@7.28.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.6) - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.6) + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.28.5(@babel/core@7.28.6)': + '@babel/preset-typescript@7.28.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.28.6) + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -6087,49 +6024,49 @@ snapshots: '@babel/template@7.28.6': dependencies: - '@babel/code-frame': 7.28.6 - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 - '@babel/traverse@7.28.6': + '@babel/traverse@7.29.0': dependencies: - '@babel/code-frame': 7.28.6 - '@babel/generator': 7.28.6 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.0 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.6 + '@babel/parser': 7.29.0 '@babel/template': 7.28.6 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.28.6': + '@babel/types@7.29.0': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@base-ui/react@1.1.0(@types/react@19.2.10)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@base-ui/react@1.1.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 - '@base-ui/utils': 0.2.4(@types/react@19.2.10)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@floating-ui/react-dom': 2.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@base-ui/utils': 0.2.4(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@floating-ui/react-dom': 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@floating-ui/utils': 0.2.10 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) reselect: 5.1.1 tabbable: 6.4.0 - use-sync-external-store: 1.6.0(react@19.2.3) + use-sync-external-store: 1.6.0(react@19.2.4) optionalDependencies: '@types/react': 19.2.10 - '@base-ui/utils@0.2.4(@types/react@19.2.10)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@base-ui/utils@0.2.4(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 '@floating-ui/utils': 0.2.10 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) reselect: 5.1.1 - use-sync-external-store: 1.6.0(react@19.2.3) + use-sync-external-store: 1.6.0(react@19.2.4) optionalDependencies: '@types/react': 19.2.10 @@ -6383,48 +6320,48 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@floating-ui/core@1.7.3': + '@floating-ui/core@1.7.4': dependencies: '@floating-ui/utils': 0.2.10 - '@floating-ui/dom@1.7.4': + '@floating-ui/dom@1.7.5': dependencies: - '@floating-ui/core': 1.7.3 + '@floating-ui/core': 1.7.4 '@floating-ui/utils': 0.2.10 - '@floating-ui/react-dom@2.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@floating-ui/react-dom@2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@floating-ui/dom': 1.7.4 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + '@floating-ui/dom': 1.7.5 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) - '@floating-ui/react@0.26.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@floating-ui/react@0.26.28(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@floating-ui/react-dom': 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@floating-ui/utils': 0.2.10 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) tabbable: 6.4.0 - '@floating-ui/react@0.27.16(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@floating-ui/react@0.27.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@floating-ui/react-dom': 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@floating-ui/utils': 0.2.10 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) tabbable: 6.4.0 '@floating-ui/utils@0.2.10': {} - '@headlessui/react@2.2.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@headlessui/react@2.2.9(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@floating-ui/react': 0.26.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@tanstack/react-virtual': 3.13.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - use-sync-external-store: 1.6.0(react@19.2.3) + '@floating-ui/react': 0.26.28(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@react-aria/focus': 3.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@react-aria/interactions': 3.26.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/react-virtual': 3.13.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + use-sync-external-store: 1.6.0(react@19.2.4) '@humanfs/core@0.19.1': {} @@ -6482,7 +6419,7 @@ snapshots: '@types/node': 24.10.9 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 4.3.1 + ci-info: 4.4.0 exit-x: 0.2.2 graceful-fs: 4.2.11 jest-changed-files: 30.2.0 @@ -6628,7 +6565,7 @@ snapshots: '@jest/transform@30.2.0': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@jest/types': 30.2.0 '@jridgewell/trace-mapping': 0.3.31 babel-plugin-istanbul: 7.0.1 @@ -6706,140 +6643,140 @@ snapshots: '@popperjs/core@2.11.8': {} - '@react-aria/focus@3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@react-aria/focus@3.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) + '@react-aria/interactions': 3.26.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@react-aria/utils': 3.32.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@react-types/shared': 3.32.1(react@19.2.4) '@swc/helpers': 0.5.18 clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) - '@react-aria/interactions@3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@react-aria/interactions@3.26.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@react-aria/ssr': 3.9.10(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@react-aria/ssr': 3.9.10(react@19.2.4) + '@react-aria/utils': 3.32.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@react-stately/flags': 3.1.2 - '@react-types/shared': 3.32.1(react@19.2.3) + '@react-types/shared': 3.32.1(react@19.2.4) '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) - '@react-aria/ssr@3.9.10(react@19.2.3)': + '@react-aria/ssr@3.9.10(react@19.2.4)': dependencies: '@swc/helpers': 0.5.18 - react: 19.2.3 + react: 19.2.4 - '@react-aria/utils@3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@react-aria/utils@3.32.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@react-aria/ssr': 3.9.10(react@19.2.3) + '@react-aria/ssr': 3.9.10(react@19.2.4) '@react-stately/flags': 3.1.2 - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) + '@react-stately/utils': 3.11.0(react@19.2.4) + '@react-types/shared': 3.32.1(react@19.2.4) '@swc/helpers': 0.5.18 clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) '@react-stately/flags@3.1.2': dependencies: '@swc/helpers': 0.5.18 - '@react-stately/utils@3.11.0(react@19.2.3)': + '@react-stately/utils@3.11.0(react@19.2.4)': dependencies: '@swc/helpers': 0.5.18 - react: 19.2.3 + react: 19.2.4 - '@react-types/shared@3.32.1(react@19.2.3)': + '@react-types/shared@3.32.1(react@19.2.4)': dependencies: - react: 19.2.3 + react: 19.2.4 '@remirror/core-constants@3.0.0': {} '@rolldown/pluginutils@1.0.0-beta.27': {} - '@rollup/pluginutils@5.3.0(rollup@4.57.0)': + '@rollup/pluginutils@5.3.0(rollup@4.57.1)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.57.0 + rollup: 4.57.1 - '@rollup/rollup-android-arm-eabi@4.57.0': + '@rollup/rollup-android-arm-eabi@4.57.1': optional: true - '@rollup/rollup-android-arm64@4.57.0': + '@rollup/rollup-android-arm64@4.57.1': optional: true - '@rollup/rollup-darwin-arm64@4.57.0': + '@rollup/rollup-darwin-arm64@4.57.1': optional: true - '@rollup/rollup-darwin-x64@4.57.0': + '@rollup/rollup-darwin-x64@4.57.1': optional: true - '@rollup/rollup-freebsd-arm64@4.57.0': + '@rollup/rollup-freebsd-arm64@4.57.1': optional: true - '@rollup/rollup-freebsd-x64@4.57.0': + '@rollup/rollup-freebsd-x64@4.57.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.57.0': + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.57.0': + '@rollup/rollup-linux-arm-musleabihf@4.57.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.57.0': + '@rollup/rollup-linux-arm64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.57.0': + '@rollup/rollup-linux-arm64-musl@4.57.1': optional: true - '@rollup/rollup-linux-loong64-gnu@4.57.0': + '@rollup/rollup-linux-loong64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-loong64-musl@4.57.0': + '@rollup/rollup-linux-loong64-musl@4.57.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.57.0': + '@rollup/rollup-linux-ppc64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-ppc64-musl@4.57.0': + '@rollup/rollup-linux-ppc64-musl@4.57.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.57.0': + '@rollup/rollup-linux-riscv64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.57.0': + '@rollup/rollup-linux-riscv64-musl@4.57.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.57.0': + '@rollup/rollup-linux-s390x-gnu@4.57.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.57.0': + '@rollup/rollup-linux-x64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-x64-musl@4.57.0': + '@rollup/rollup-linux-x64-musl@4.57.1': optional: true - '@rollup/rollup-openbsd-x64@4.57.0': + '@rollup/rollup-openbsd-x64@4.57.1': optional: true - '@rollup/rollup-openharmony-arm64@4.57.0': + '@rollup/rollup-openharmony-arm64@4.57.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.57.0': + '@rollup/rollup-win32-arm64-msvc@4.57.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.57.0': + '@rollup/rollup-win32-ia32-msvc@4.57.1': optional: true - '@rollup/rollup-win32-x64-gnu@4.57.0': + '@rollup/rollup-win32-x64-gnu@4.57.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.57.0': + '@rollup/rollup-win32-x64-msvc@4.57.1': optional: true '@sinclair/typebox@0.27.8': {} @@ -6886,7 +6823,7 @@ snapshots: storybook: 9.1.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)) ts-dedent: 2.2.0 optionalDependencies: - '@vitest/browser': 3.2.4(playwright@1.58.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))(vitest@3.2.4) + '@vitest/browser': 3.2.4(playwright@1.58.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))(vitest@3.2.4) '@vitest/runner': 3.2.4 vitest: 3.2.4(@types/node@24.10.9)(@vitest/browser@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(yaml@2.8.2) transitivePeerDependencies: @@ -6912,22 +6849,16 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - '@storybook/instrumenter@8.6.15(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)))': - dependencies: - '@storybook/global': 5.0.0 - '@vitest/utils': 2.1.9 - storybook: 9.1.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)) - '@storybook/react-dom-shim@9.1.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)))': dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) storybook: 9.1.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)) - '@storybook/react-vite@9.1.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.57.0)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)))(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))': + '@storybook/react-vite@9.1.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.57.1)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)))(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))': dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)) - '@rollup/pluginutils': 5.3.0(rollup@4.57.0) + '@rollup/pluginutils': 5.3.0(rollup@4.57.1) '@storybook/builder-vite': 9.1.17(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)) '@storybook/react': 9.1.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)))(typescript@5.9.3) find-up: 7.0.0 @@ -6954,65 +6885,54 @@ snapshots: optionalDependencies: typescript: 5.9.3 - '@storybook/test@8.6.15(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)))': - dependencies: - '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.6.15(storybook@9.1.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))) - '@testing-library/dom': 10.4.0 - '@testing-library/jest-dom': 6.5.0 - '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) - '@vitest/expect': 2.0.5 - '@vitest/spy': 2.0.5 - storybook: 9.1.17(@testing-library/dom@10.4.1)(prettier@3.8.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)) - - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-preset@8.1.0(@babel/core@7.28.6)': + '@svgr/babel-preset@8.1.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.28.6) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.0) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.0) '@svgr/core@8.1.0(typescript@5.9.3)': dependencies: - '@babel/core': 7.28.6 - '@svgr/babel-preset': 8.1.0(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) camelcase: 6.3.0 cosmiconfig: 8.3.6(typescript@5.9.3) snake-case: 3.0.4 @@ -7022,13 +6942,13 @@ snapshots: '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 entities: 4.5.0 '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))': dependencies: - '@babel/core': 7.28.6 - '@svgr/babel-preset': 8.1.0(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) '@svgr/core': 8.1.0(typescript@5.9.3) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 @@ -7112,28 +7032,17 @@ snapshots: tailwindcss: 4.1.18 vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2) - '@tanstack/react-virtual@3.13.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@tanstack/react-virtual@3.13.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@tanstack/virtual-core': 3.13.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) '@tanstack/virtual-core@3.13.18': {} - '@testing-library/dom@10.4.0': - dependencies: - '@babel/code-frame': 7.28.6 - '@babel/runtime': 7.28.6 - '@types/aria-query': 5.0.4 - aria-query: 5.3.0 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - '@testing-library/dom@10.4.1': dependencies: - '@babel/code-frame': 7.28.6 + '@babel/code-frame': 7.29.0 '@babel/runtime': 7.28.6 '@types/aria-query': 5.0.4 aria-query: 5.3.0 @@ -7142,16 +7051,6 @@ snapshots: picocolors: 1.1.1 pretty-format: 27.5.1 - '@testing-library/jest-dom@6.5.0': - dependencies: - '@adobe/css-tools': 4.4.4 - aria-query: 5.3.2 - chalk: 3.0.0 - css.escape: 1.5.1 - dom-accessibility-api: 0.6.3 - lodash: 4.17.23 - redent: 3.0.0 - '@testing-library/jest-dom@6.9.1': dependencies: '@adobe/css-tools': 4.4.4 @@ -7171,160 +7070,156 @@ snapshots: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': - dependencies: - '@testing-library/dom': 10.4.0 - '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': dependencies: '@testing-library/dom': 10.4.1 - '@tiptap/core@3.17.1(@tiptap/pm@3.17.1)': + '@tiptap/core@3.18.0(@tiptap/pm@3.18.0)': dependencies: - '@tiptap/pm': 3.17.1 + '@tiptap/pm': 3.18.0 - '@tiptap/extension-blockquote@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))': + '@tiptap/extension-blockquote@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) - '@tiptap/extension-bold@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))': + '@tiptap/extension-bold@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) - '@tiptap/extension-bubble-menu@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)': + '@tiptap/extension-bubble-menu@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: - '@floating-ui/dom': 1.7.4 - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) - '@tiptap/pm': 3.17.1 + '@floating-ui/dom': 1.7.5 + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/pm': 3.18.0 optional: true - '@tiptap/extension-bullet-list@3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))': + '@tiptap/extension-bullet-list@3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/extension-list': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) + '@tiptap/extension-list': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) - '@tiptap/extension-code-block-lowlight@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/extension-code-block@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(highlight.js@11.11.1)(lowlight@3.3.0)': + '@tiptap/extension-code-block-lowlight@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/extension-code-block@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(highlight.js@11.11.1)(lowlight@3.3.0)': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) - '@tiptap/extension-code-block': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) - '@tiptap/pm': 3.17.1 + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/extension-code-block': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) + '@tiptap/pm': 3.18.0 highlight.js: 11.11.1 lowlight: 3.3.0 - '@tiptap/extension-code-block@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)': + '@tiptap/extension-code-block@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) - '@tiptap/pm': 3.17.1 + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/pm': 3.18.0 - '@tiptap/extension-code@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))': + '@tiptap/extension-code@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) - '@tiptap/extension-document@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))': + '@tiptap/extension-document@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) - '@tiptap/extension-dropcursor@3.17.1(@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))': + '@tiptap/extension-dropcursor@3.18.0(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/extensions': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) + '@tiptap/extensions': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) - '@tiptap/extension-floating-menu@3.17.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)': + '@tiptap/extension-floating-menu@3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: - '@floating-ui/dom': 1.7.4 - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) - '@tiptap/pm': 3.17.1 + '@floating-ui/dom': 1.7.5 + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/pm': 3.18.0 optional: true - '@tiptap/extension-gapcursor@3.17.1(@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))': + '@tiptap/extension-gapcursor@3.18.0(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/extensions': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) + '@tiptap/extensions': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) - '@tiptap/extension-hard-break@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))': + '@tiptap/extension-hard-break@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) - '@tiptap/extension-heading@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))': + '@tiptap/extension-heading@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) - '@tiptap/extension-highlight@3.18.0(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))': + '@tiptap/extension-highlight@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) - '@tiptap/extension-horizontal-rule@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)': + '@tiptap/extension-horizontal-rule@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) - '@tiptap/pm': 3.17.1 + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/pm': 3.18.0 - '@tiptap/extension-italic@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))': + '@tiptap/extension-italic@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) - '@tiptap/extension-link@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)': + '@tiptap/extension-link@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) - '@tiptap/pm': 3.17.1 + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/pm': 3.18.0 linkifyjs: 4.3.2 - '@tiptap/extension-list-item@3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))': + '@tiptap/extension-list-item@3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/extension-list': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) + '@tiptap/extension-list': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) - '@tiptap/extension-list-keymap@3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))': + '@tiptap/extension-list-keymap@3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/extension-list': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) + '@tiptap/extension-list': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) - '@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)': + '@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) - '@tiptap/pm': 3.17.1 + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/pm': 3.18.0 - '@tiptap/extension-ordered-list@3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))': + '@tiptap/extension-ordered-list@3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/extension-list': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) + '@tiptap/extension-list': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) - '@tiptap/extension-paragraph@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))': + '@tiptap/extension-paragraph@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) - '@tiptap/extension-placeholder@3.17.1(@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))': + '@tiptap/extension-placeholder@3.18.0(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/extensions': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) + '@tiptap/extensions': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) - '@tiptap/extension-strike@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))': + '@tiptap/extension-strike@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) - '@tiptap/extension-table@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)': + '@tiptap/extension-table@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) - '@tiptap/pm': 3.17.1 + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/pm': 3.18.0 - '@tiptap/extension-task-list@3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1))': + '@tiptap/extension-task-list@3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/extension-list': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) + '@tiptap/extension-list': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) - '@tiptap/extension-text-align@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))': + '@tiptap/extension-text-align@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) - '@tiptap/extension-text-style@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))': + '@tiptap/extension-text-style@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) - '@tiptap/extension-text@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))': + '@tiptap/extension-text@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) - '@tiptap/extension-underline@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))': + '@tiptap/extension-underline@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) - '@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)': + '@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) - '@tiptap/pm': 3.17.1 + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/pm': 3.18.0 - '@tiptap/pm@3.17.1': + '@tiptap/pm@3.18.0': dependencies: prosemirror-changeset: 2.3.1 prosemirror-collab: 1.3.1 @@ -7345,49 +7240,49 @@ snapshots: prosemirror-transform: 1.11.0 prosemirror-view: 1.41.5 - '@tiptap/react@3.17.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@tiptap/react@3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) - '@tiptap/pm': 3.17.1 + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/pm': 3.18.0 '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) '@types/use-sync-external-store': 0.0.6 fast-equals: 5.4.0 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - use-sync-external-store: 1.6.0(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + use-sync-external-store: 1.6.0(react@19.2.4) optionalDependencies: - '@tiptap/extension-bubble-menu': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) - '@tiptap/extension-floating-menu': 3.17.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) + '@tiptap/extension-bubble-menu': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) + '@tiptap/extension-floating-menu': 3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) transitivePeerDependencies: - '@floating-ui/dom' - '@tiptap/starter-kit@3.17.1': - dependencies: - '@tiptap/core': 3.17.1(@tiptap/pm@3.17.1) - '@tiptap/extension-blockquote': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)) - '@tiptap/extension-bold': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)) - '@tiptap/extension-bullet-list': 3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)) - '@tiptap/extension-code': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)) - '@tiptap/extension-code-block': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) - '@tiptap/extension-document': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)) - '@tiptap/extension-dropcursor': 3.17.1(@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)) - '@tiptap/extension-gapcursor': 3.17.1(@tiptap/extensions@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)) - '@tiptap/extension-hard-break': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)) - '@tiptap/extension-heading': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)) - '@tiptap/extension-horizontal-rule': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) - '@tiptap/extension-italic': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)) - '@tiptap/extension-link': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) - '@tiptap/extension-list': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) - '@tiptap/extension-list-item': 3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)) - '@tiptap/extension-list-keymap': 3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)) - '@tiptap/extension-ordered-list': 3.17.1(@tiptap/extension-list@3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)) - '@tiptap/extension-paragraph': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)) - '@tiptap/extension-strike': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)) - '@tiptap/extension-text': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)) - '@tiptap/extension-underline': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1)) - '@tiptap/extensions': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) - '@tiptap/pm': 3.17.1 + '@tiptap/starter-kit@3.18.0': + dependencies: + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/extension-blockquote': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0)) + '@tiptap/extension-bold': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0)) + '@tiptap/extension-bullet-list': 3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)) + '@tiptap/extension-code': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0)) + '@tiptap/extension-code-block': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) + '@tiptap/extension-document': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0)) + '@tiptap/extension-dropcursor': 3.18.0(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)) + '@tiptap/extension-gapcursor': 3.18.0(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)) + '@tiptap/extension-hard-break': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0)) + '@tiptap/extension-heading': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0)) + '@tiptap/extension-horizontal-rule': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) + '@tiptap/extension-italic': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0)) + '@tiptap/extension-link': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) + '@tiptap/extension-list': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) + '@tiptap/extension-list-item': 3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)) + '@tiptap/extension-list-keymap': 3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)) + '@tiptap/extension-ordered-list': 3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)) + '@tiptap/extension-paragraph': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0)) + '@tiptap/extension-strike': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0)) + '@tiptap/extension-text': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0)) + '@tiptap/extension-underline': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0)) + '@tiptap/extensions': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) + '@tiptap/pm': 3.18.0 '@tybys/wasm-util@0.10.1': dependencies: @@ -7398,24 +7293,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@types/chai@5.2.3': dependencies: @@ -7659,9 +7554,9 @@ snapshots: '@vitejs/plugin-react@4.7.0(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))': dependencies: - '@babel/core': 7.28.6 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 @@ -7669,7 +7564,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/browser@3.2.4(playwright@1.58.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))(vitest@3.2.4)': + '@vitest/browser@3.2.4(playwright@1.58.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))(vitest@3.2.4)': dependencies: '@testing-library/dom': 10.4.1 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) @@ -7681,7 +7576,7 @@ snapshots: vitest: 3.2.4(@types/node@24.10.9)(@vitest/browser@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(yaml@2.8.2) ws: 8.19.0 optionalDependencies: - playwright: 1.58.0 + playwright: 1.58.1 transitivePeerDependencies: - bufferutil - msw @@ -7692,7 +7587,7 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 - ast-v8-to-istanbul: 0.3.10 + ast-v8-to-istanbul: 0.3.11 debug: 4.4.3 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 @@ -7705,17 +7600,10 @@ snapshots: tinyrainbow: 2.0.0 vitest: 3.2.4(@types/node@24.10.9)(@vitest/browser@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(yaml@2.8.2) optionalDependencies: - '@vitest/browser': 3.2.4(playwright@1.58.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))(vitest@3.2.4) + '@vitest/browser': 3.2.4(playwright@1.58.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))(vitest@3.2.4) transitivePeerDependencies: - supports-color - '@vitest/expect@2.0.5': - dependencies: - '@vitest/spy': 2.0.5 - '@vitest/utils': 2.0.5 - chai: 5.3.3 - tinyrainbow: 1.2.0 - '@vitest/expect@3.2.4': dependencies: '@types/chai': 5.2.3 @@ -7732,14 +7620,6 @@ snapshots: optionalDependencies: vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2) - '@vitest/pretty-format@2.0.5': - dependencies: - tinyrainbow: 1.2.0 - - '@vitest/pretty-format@2.1.9': - dependencies: - tinyrainbow: 1.2.0 - '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 @@ -7756,27 +7636,10 @@ snapshots: magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@2.0.5': - dependencies: - tinyspy: 3.0.2 - '@vitest/spy@3.2.4': dependencies: tinyspy: 4.0.4 - '@vitest/utils@2.0.5': - dependencies: - '@vitest/pretty-format': 2.0.5 - estree-walker: 3.0.3 - loupe: 3.2.1 - tinyrainbow: 1.2.0 - - '@vitest/utils@2.1.9': - dependencies: - '@vitest/pretty-format': 2.1.9 - loupe: 3.2.1 - tinyrainbow: 1.2.0 - '@vitest/utils@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 @@ -7860,11 +7723,11 @@ snapshots: dependencies: tslib: 2.8.1 - ast-v8-to-istanbul@0.3.10: + ast-v8-to-istanbul@0.3.11: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 - js-tokens: 9.0.1 + js-tokens: 10.0.0 async-function@1.0.0: {} @@ -7874,13 +7737,13 @@ snapshots: axe-core@4.11.1: {} - babel-jest@30.2.0(@babel/core@7.28.6): + babel-jest@30.2.0(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@jest/transform': 30.2.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 7.0.1 - babel-preset-jest: 30.2.0(@babel/core@7.28.6) + babel-preset-jest: 30.2.0(@babel/core@7.29.0) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -7901,35 +7764,35 @@ snapshots: dependencies: '@types/babel__core': 7.20.5 - babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.28.6): + babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.29.0): dependencies: - '@babel/compat-data': 7.28.6 - '@babel/core': 7.28.6 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.28.6) + '@babel/compat-data': 7.29.0 + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.6): + babel-plugin-polyfill-corejs3@0.14.0(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.6 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0) core-js-compat: 3.48.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.28.6): + babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.6 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - babel-plugin-styled-components@2.1.4(@babel/core@7.28.6)(styled-components@6.3.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)): + babel-plugin-styled-components@2.1.4(@babel/core@7.29.0)(styled-components@6.3.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)): dependencies: '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.28.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6) + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) lodash: 4.17.23 picomatch: 2.3.1 styled-components: 6.3.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -7937,30 +7800,30 @@ snapshots: - '@babel/core' - supports-color - babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.6): - dependencies: - '@babel/core': 7.28.6 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.6) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.6) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.6) - '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.6) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.6) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.6) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.6) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.6) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.6) - - babel-preset-jest@30.2.0(@babel/core@7.28.6): - dependencies: - '@babel/core': 7.28.6 + babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.0) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.0) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.0) + + babel-preset-jest@30.2.0(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 babel-plugin-jest-hoist: 30.2.0 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.6) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) balanced-match@1.0.2: {} @@ -7986,8 +7849,8 @@ snapshots: browserslist@4.28.1: dependencies: baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001766 - electron-to-chromium: 1.5.279 + caniuse-lite: 1.0.30001767 + electron-to-chromium: 1.5.283 node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -8024,7 +7887,7 @@ snapshots: camelize@1.0.1: {} - caniuse-lite@1.0.30001766: {} + caniuse-lite@1.0.30001767: {} chai@5.3.3: dependencies: @@ -8040,11 +7903,6 @@ snapshots: escape-string-regexp: 1.0.5 supports-color: 5.5.0 - chalk@3.0.0: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -8054,7 +7912,7 @@ snapshots: check-error@2.1.3: {} - ci-info@4.3.1: {} + ci-info@4.4.0: {} cjs-module-lexer@2.2.0: {} @@ -8095,7 +7953,7 @@ snapshots: colorette@2.0.20: {} - commander@14.0.2: {} + commander@14.0.3: {} concat-map@0.0.1: {} @@ -8246,7 +8104,7 @@ snapshots: tslib: 2.3.0 zrender: 6.0.0 - electron-to-chromium@1.5.279: {} + electron-to-chromium@1.5.283: {} emittery@0.13.1: {} @@ -8437,8 +8295,8 @@ snapshots: eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@2.6.1)): dependencies: - '@babel/core': 7.28.6 - '@babel/parser': 7.28.6 + '@babel/core': 7.29.0 + '@babel/parser': 7.29.0 eslint: 9.39.2(jiti@2.6.1) hermes-parser: 0.25.1 zod: 4.3.6 @@ -8712,7 +8570,7 @@ snapshots: globals@14.0.0: {} - globals@17.2.0: {} + globals@17.3.0: {} globalthis@1.0.4: dependencies: @@ -8952,8 +8810,8 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.28.6 - '@babel/parser': 7.28.6 + '@babel/core': 7.29.0 + '@babel/parser': 7.29.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.3 @@ -9038,14 +8896,14 @@ snapshots: jest-config@30.2.0(@types/node@24.10.9)(esbuild-register@3.6.0(esbuild@0.25.12)): dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@jest/get-type': 30.1.0 '@jest/pattern': 30.0.1 '@jest/test-sequencer': 30.2.0 '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.28.6) + babel-jest: 30.2.0(@babel/core@7.29.0) chalk: 4.1.2 - ci-info: 4.3.1 + ci-info: 4.4.0 deepmerge: 4.3.1 glob: 10.5.0 graceful-fs: 4.2.11 @@ -9155,7 +9013,7 @@ snapshots: jest-message-util@30.2.0: dependencies: - '@babel/code-frame': 7.28.6 + '@babel/code-frame': 7.29.0 '@jest/types': 30.2.0 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -9251,17 +9109,17 @@ snapshots: jest-snapshot@30.2.0: dependencies: - '@babel/core': 7.28.6 - '@babel/generator': 7.28.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.28.6) - '@babel/types': 7.28.6 + '@babel/core': 7.29.0 + '@babel/generator': 7.29.0 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + '@babel/types': 7.29.0 '@jest/expect-utils': 30.2.0 '@jest/get-type': 30.1.0 '@jest/snapshot-utils': 30.2.0 '@jest/transform': 30.2.0 '@jest/types': 30.2.0 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.6) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) chalk: 4.1.2 expect: 30.2.0 graceful-fs: 4.2.11 @@ -9280,7 +9138,7 @@ snapshots: '@jest/types': 30.2.0 '@types/node': 24.10.9 chalk: 4.1.2 - ci-info: 4.3.1 + ci-info: 4.4.0 graceful-fs: 4.2.11 picomatch: 4.0.3 @@ -9327,6 +9185,8 @@ snapshots: jiti@2.6.1: {} + js-tokens@10.0.0: {} + js-tokens@4.0.0: {} js-tokens@9.0.1: {} @@ -9453,7 +9313,7 @@ snapshots: lint-staged@16.2.7: dependencies: - commander: 14.0.2 + commander: 14.0.3 listr2: 9.0.5 micromatch: 4.0.8 nano-spawn: 2.0.0 @@ -9533,9 +9393,9 @@ snapshots: dependencies: yallist: 3.1.1 - lucide-react@0.539.0(react@19.2.3): + lucide-react@0.539.0(react@19.2.4): dependencies: - react: 19.2.3 + react: 19.2.4 lz-string@1.5.0: {} @@ -9545,8 +9405,8 @@ snapshots: magicast@0.3.5: dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 source-map-js: 1.2.1 make-dir@4.0.0: @@ -9740,7 +9600,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.28.6 + '@babel/code-frame': 7.29.0 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -9799,11 +9659,11 @@ snapshots: dependencies: find-up: 4.1.0 - playwright-core@1.58.0: {} + playwright-core@1.58.1: {} - playwright@1.58.0: + playwright@1.58.1: dependencies: - playwright-core: 1.58.0 + playwright-core: 1.58.1 optionalDependencies: fsevents: 2.3.2 @@ -9976,9 +9836,9 @@ snapshots: react-docgen@8.0.2: dependencies: - '@babel/core': 7.28.6 - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/core': 7.29.0 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 '@types/doctrine': 0.0.9 @@ -9989,32 +9849,27 @@ snapshots: transitivePeerDependencies: - supports-color - react-dom@19.2.3(react@19.2.3): - dependencies: - react: 19.2.3 - scheduler: 0.27.0 - react-dom@19.2.4(react@19.2.4): dependencies: react: 19.2.4 scheduler: 0.27.0 - react-draggable@4.5.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + react-draggable@4.5.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: clsx: 2.1.1 prop-types: 15.8.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) - react-grid-layout@1.5.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + react-grid-layout@1.5.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: clsx: 2.1.1 fast-equals: 4.0.3 prop-types: 15.8.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - react-draggable: 4.5.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react-resizable: 3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-draggable: 4.5.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react-resizable: 3.1.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) resize-observer-polyfill: 1.5.1 react-is@16.13.1: {} @@ -10025,14 +9880,12 @@ snapshots: react-refresh@0.17.0: {} - react-resizable@3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + react-resizable@3.1.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: prop-types: 15.8.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - react-draggable: 4.5.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - - react@19.2.3: {} + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-draggable: 4.5.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react@19.2.4: {} @@ -10128,35 +9981,35 @@ snapshots: glob: 13.0.0 package-json-from-dist: 1.0.1 - rollup@4.57.0: + rollup@4.57.1: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.57.0 - '@rollup/rollup-android-arm64': 4.57.0 - '@rollup/rollup-darwin-arm64': 4.57.0 - '@rollup/rollup-darwin-x64': 4.57.0 - '@rollup/rollup-freebsd-arm64': 4.57.0 - '@rollup/rollup-freebsd-x64': 4.57.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.57.0 - '@rollup/rollup-linux-arm-musleabihf': 4.57.0 - '@rollup/rollup-linux-arm64-gnu': 4.57.0 - '@rollup/rollup-linux-arm64-musl': 4.57.0 - '@rollup/rollup-linux-loong64-gnu': 4.57.0 - '@rollup/rollup-linux-loong64-musl': 4.57.0 - '@rollup/rollup-linux-ppc64-gnu': 4.57.0 - '@rollup/rollup-linux-ppc64-musl': 4.57.0 - '@rollup/rollup-linux-riscv64-gnu': 4.57.0 - '@rollup/rollup-linux-riscv64-musl': 4.57.0 - '@rollup/rollup-linux-s390x-gnu': 4.57.0 - '@rollup/rollup-linux-x64-gnu': 4.57.0 - '@rollup/rollup-linux-x64-musl': 4.57.0 - '@rollup/rollup-openbsd-x64': 4.57.0 - '@rollup/rollup-openharmony-arm64': 4.57.0 - '@rollup/rollup-win32-arm64-msvc': 4.57.0 - '@rollup/rollup-win32-ia32-msvc': 4.57.0 - '@rollup/rollup-win32-x64-gnu': 4.57.0 - '@rollup/rollup-win32-x64-msvc': 4.57.0 + '@rollup/rollup-android-arm-eabi': 4.57.1 + '@rollup/rollup-android-arm64': 4.57.1 + '@rollup/rollup-darwin-arm64': 4.57.1 + '@rollup/rollup-darwin-x64': 4.57.1 + '@rollup/rollup-freebsd-arm64': 4.57.1 + '@rollup/rollup-freebsd-x64': 4.57.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 + '@rollup/rollup-linux-arm-musleabihf': 4.57.1 + '@rollup/rollup-linux-arm64-gnu': 4.57.1 + '@rollup/rollup-linux-arm64-musl': 4.57.1 + '@rollup/rollup-linux-loong64-gnu': 4.57.1 + '@rollup/rollup-linux-loong64-musl': 4.57.1 + '@rollup/rollup-linux-ppc64-gnu': 4.57.1 + '@rollup/rollup-linux-ppc64-musl': 4.57.1 + '@rollup/rollup-linux-riscv64-gnu': 4.57.1 + '@rollup/rollup-linux-riscv64-musl': 4.57.1 + '@rollup/rollup-linux-s390x-gnu': 4.57.1 + '@rollup/rollup-linux-x64-gnu': 4.57.1 + '@rollup/rollup-linux-x64-musl': 4.57.1 + '@rollup/rollup-openbsd-x64': 4.57.1 + '@rollup/rollup-openharmony-arm64': 4.57.1 + '@rollup/rollup-win32-arm64-msvc': 4.57.1 + '@rollup/rollup-win32-ia32-msvc': 4.57.1 + '@rollup/rollup-win32-x64-gnu': 4.57.1 + '@rollup/rollup-win32-x64-msvc': 4.57.1 fsevents: 2.3.3 rope-sequence@1.3.4: {} @@ -10436,21 +10289,6 @@ snapshots: dependencies: js-tokens: 9.0.1 - styled-components@6.3.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - '@emotion/is-prop-valid': 1.4.0 - '@emotion/unitless': 0.10.0 - '@types/stylis': 4.2.7 - css-to-react-native: 3.2.0 - csstype: 3.2.3 - postcss: 8.4.49 - react: 19.2.3 - shallowequal: 1.1.0 - stylis: 4.3.6 - tslib: 2.8.1 - optionalDependencies: - react-dom: 19.2.3(react@19.2.3) - styled-components@6.3.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: '@emotion/is-prop-valid': 1.4.0 @@ -10521,12 +10359,8 @@ snapshots: tinypool@1.1.1: {} - tinyrainbow@1.2.0: {} - tinyrainbow@2.0.0: {} - tinyspy@3.0.2: {} - tinyspy@4.0.4: {} tldts-core@6.1.86: {} @@ -10684,9 +10518,9 @@ snapshots: dependencies: punycode: 2.3.1 - use-sync-external-store@1.6.0(react@19.2.3): + use-sync-external-store@1.6.0(react@19.2.4): dependencies: - react: 19.2.3 + react: 19.2.4 util-deprecate@1.0.2: {} @@ -10722,9 +10556,9 @@ snapshots: - tsx - yaml - vite-plugin-svgr@4.5.0(rollup@4.57.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)): + vite-plugin-svgr@4.5.0(rollup@4.57.1)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2)): dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.57.0) + '@rollup/pluginutils': 5.3.0(rollup@4.57.1) '@svgr/core': 8.1.0(typescript@5.9.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2) @@ -10739,7 +10573,7 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.57.0 + rollup: 4.57.1 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 24.10.9 @@ -10775,7 +10609,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 24.10.9 - '@vitest/browser': 3.2.4(playwright@1.58.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))(vitest@3.2.4) + '@vitest/browser': 3.2.4(playwright@1.58.1)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2))(vitest@3.2.4) jsdom: 26.1.0 transitivePeerDependencies: - jiti