From ff9c4726cc26c44aa17374835609bb762d96a37b Mon Sep 17 00:00:00 2001 From: Baptiste Arnaud Date: Wed, 31 Jan 2024 08:03:13 +0100 Subject: [PATCH] =?UTF-8?q?:children=5Fcrossing:=20Rewrite=20the=20markdow?= =?UTF-8?q?n=20deserializer=20to=20improve=20br=E2=80=A6=20(#1198)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary by CodeRabbit - **Refactor** - Updated markdown handling and serialization libraries for improved performance and accuracy in text formatting. - **New Features** - Enhanced rich text and markdown conversion capabilities, providing users with more reliable and seamless text formatting options. - **Documentation** - Added detailed documentation for markdown to rich text conversion and vice versa, ensuring easier understanding and implementation for developers. --- apps/docs/openapi/builder.json | 30 + packages/bot-engine/package.json | 1 - packages/bot-engine/parseBubbleBlock.ts | 32 +- .../whatsapp/convertInputToWhatsAppMessage.ts | 2 +- .../convertMessageToWhatsAppMessage.ts | 2 +- .../lib/markdown/convertMarkdownToRichText.ts | 69 ++ .../convertRichTextToMarkdown.ts | 33 +- .../lib/markdown/deserializer/deserialize.ts | 30 + packages/lib/markdown/deserializer/types.ts | 8 + .../remark-slate/remarkDefaultElementRules.ts | 253 ++++++ .../remark-slate/remarkDefaultTextRules.ts | 12 + .../lib/markdown/remark-slate/remarkPlugin.ts | 18 + .../markdown/remark-slate/remarkTextTypes.ts | 10 + .../remark-slate/remarkTransformElement.ts | 17 + .../remarkTransformElementChildren.ts | 17 + .../remark-slate/remarkTransformNode.ts | 20 + .../remark-slate/remarkTransformText.ts | 36 + packages/lib/markdown/remark-slate/types.ts | 67 ++ .../{ => markdown}/serializer/ast-types.ts | 0 .../{ => markdown}/serializer/serialize.ts | 0 packages/lib/package.json | 11 + pnpm-lock.yaml | 827 +++++++++--------- 22 files changed, 1017 insertions(+), 478 deletions(-) create mode 100644 packages/lib/markdown/convertMarkdownToRichText.ts rename packages/lib/{serializer => markdown}/convertRichTextToMarkdown.ts (53%) create mode 100644 packages/lib/markdown/deserializer/deserialize.ts create mode 100644 packages/lib/markdown/deserializer/types.ts create mode 100644 packages/lib/markdown/remark-slate/remarkDefaultElementRules.ts create mode 100644 packages/lib/markdown/remark-slate/remarkDefaultTextRules.ts create mode 100644 packages/lib/markdown/remark-slate/remarkPlugin.ts create mode 100644 packages/lib/markdown/remark-slate/remarkTextTypes.ts create mode 100644 packages/lib/markdown/remark-slate/remarkTransformElement.ts create mode 100644 packages/lib/markdown/remark-slate/remarkTransformElementChildren.ts create mode 100644 packages/lib/markdown/remark-slate/remarkTransformNode.ts create mode 100644 packages/lib/markdown/remark-slate/remarkTransformText.ts create mode 100644 packages/lib/markdown/remark-slate/types.ts rename packages/lib/{ => markdown}/serializer/ast-types.ts (100%) rename packages/lib/{ => markdown}/serializer/serialize.ts (100%) diff --git a/apps/docs/openapi/builder.json b/apps/docs/openapi/builder.json index 06daa6239..8c2fb1a64 100644 --- a/apps/docs/openapi/builder.json +++ b/apps/docs/openapi/builder.json @@ -2879,6 +2879,21 @@ "type": "string" }, "required": true + }, + { + "in": "query", + "name": "timeFilter", + "schema": { + "type": "string", + "enum": [ + "today", + "last7Days", + "last30Days", + "yearToDate", + "allTime" + ], + "default": "today" + } } ], "responses": { @@ -3186,6 +3201,21 @@ "type": "string" }, "required": true + }, + { + "in": "query", + "name": "timeFilter", + "schema": { + "type": "string", + "enum": [ + "today", + "last7Days", + "last30Days", + "yearToDate", + "allTime" + ], + "default": "today" + } } ], "responses": { diff --git a/packages/bot-engine/package.json b/packages/bot-engine/package.json index e9f7b81ba..007403740 100644 --- a/packages/bot-engine/package.json +++ b/packages/bot-engine/package.json @@ -18,7 +18,6 @@ "@typebot.io/tsconfig": "workspace:*", "@typebot.io/variables": "workspace:*", "@udecode/plate-common": "21.1.5", - "@udecode/plate-serializer-md": "24.4.0", "ai": "2.2.31", "chrono-node": "2.7.0", "date-fns": "2.30.0", diff --git a/packages/bot-engine/parseBubbleBlock.ts b/packages/bot-engine/parseBubbleBlock.ts index 356346df1..8f8c781be 100644 --- a/packages/bot-engine/parseBubbleBlock.ts +++ b/packages/bot-engine/parseBubbleBlock.ts @@ -11,13 +11,10 @@ import { getVariablesToParseInfoInText, parseVariables, } from '@typebot.io/variables/parseVariables' -import { TDescendant, createPlateEditor } from '@udecode/plate-common' -import { - createDeserializeMdPlugin, - deserializeMd, -} from '@udecode/plate-serializer-md' +import { TDescendant } from '@udecode/plate-common' import { BubbleBlockType } from '@typebot.io/schemas/features/blocks/bubbles/constants' import { defaultVideoBubbleContent } from '@typebot.io/schemas/features/blocks/bubbles/video/constants' +import { convertMarkdownToRichText } from '@typebot.io/lib/markdown/convertMarkdownToRichText' type Params = { version: 1 | 2 @@ -207,28 +204,3 @@ const applyElementStyleToDescendants = ( ), } }) - -const convertMarkdownToRichText = (text: string): TDescendant[] => { - const spacesBefore = text.match(/^[\s]+/) - const spacesAfter = text.match(/[\s]+$/) - const plugins = [createDeserializeMdPlugin()] - return [ - ...(spacesBefore?.at(0) - ? [ - { - type: 'p', - text: spacesBefore.at(0), - }, - ] - : []), - ...deserializeMd(createPlateEditor({ plugins }) as unknown as any, text), - ...(spacesAfter?.at(0) - ? [ - { - type: 'p', - text: spacesAfter.at(0), - }, - ] - : []), - ] -} diff --git a/packages/bot-engine/whatsapp/convertInputToWhatsAppMessage.ts b/packages/bot-engine/whatsapp/convertInputToWhatsAppMessage.ts index efdfe5549..83f1d559e 100644 --- a/packages/bot-engine/whatsapp/convertInputToWhatsAppMessage.ts +++ b/packages/bot-engine/whatsapp/convertInputToWhatsAppMessage.ts @@ -5,7 +5,7 @@ import { BubbleBlockType } from '@typebot.io/schemas/features/blocks/bubbles/con import { InputBlockType } from '@typebot.io/schemas/features/blocks/inputs/constants' import { defaultPictureChoiceOptions } from '@typebot.io/schemas/features/blocks/inputs/pictureChoice/constants' import { defaultChoiceInputOptions } from '@typebot.io/schemas/features/blocks/inputs/choice/constants' -import { convertRichTextToMarkdown } from '@typebot.io/lib/serializer/convertRichTextToMarkdown' +import { convertRichTextToMarkdown } from '@typebot.io/lib/markdown/convertRichTextToMarkdown' export const convertInputToWhatsAppMessages = ( input: NonNullable, diff --git a/packages/bot-engine/whatsapp/convertMessageToWhatsAppMessage.ts b/packages/bot-engine/whatsapp/convertMessageToWhatsAppMessage.ts index d31ae92e2..b3c660997 100644 --- a/packages/bot-engine/whatsapp/convertMessageToWhatsAppMessage.ts +++ b/packages/bot-engine/whatsapp/convertMessageToWhatsAppMessage.ts @@ -3,7 +3,7 @@ import { WhatsAppSendingMessage } from '@typebot.io/schemas/features/whatsapp' import { isSvgSrc } from '@typebot.io/lib/utils' import { BubbleBlockType } from '@typebot.io/schemas/features/blocks/bubbles/constants' import { VideoBubbleContentType } from '@typebot.io/schemas/features/blocks/bubbles/video/constants' -import { convertRichTextToMarkdown } from '@typebot.io/lib/serializer/convertRichTextToMarkdown' +import { convertRichTextToMarkdown } from '@typebot.io/lib/markdown/convertRichTextToMarkdown' const mp4HttpsUrlRegex = /^https:\/\/.*\.mp4$/ diff --git a/packages/lib/markdown/convertMarkdownToRichText.ts b/packages/lib/markdown/convertMarkdownToRichText.ts new file mode 100644 index 000000000..699a20c1b --- /dev/null +++ b/packages/lib/markdown/convertMarkdownToRichText.ts @@ -0,0 +1,69 @@ +import { + createPlateEditor, + createPluginFactory, + getPluginOptions, + isUrl, + Value, +} from '@udecode/plate-common' +import markdown from 'remark-parse' +import { unified } from 'unified' + +import { DeserializeMdPlugin } from './deserializer/types' +import { remarkPlugin } from './remark-slate/remarkPlugin' +import { RemarkPluginOptions } from './remark-slate/types' +import { remarkDefaultElementRules } from './remark-slate/remarkDefaultElementRules' +import { remarkDefaultTextRules } from './remark-slate/remarkDefaultTextRules' +import { deserialize } from './deserializer/deserialize' + +export const convertMarkdownToRichText = (data: string) => { + const plugins = [createDeserializeMdPlugin()] + const editor = createPlateEditor({ plugins }) as unknown as any + const { elementRules, textRules, indentList } = getPluginOptions< + DeserializeMdPlugin, + V + >(editor, KEY_DESERIALIZE_MD) + + const tree: any = unified() + .use(markdown) + .use(remarkPlugin, { + editor, + elementRules, + textRules, + indentList, + } as unknown as RemarkPluginOptions) + .processSync(data) + + return tree.result +} + +export const KEY_DESERIALIZE_MD = 'deserializeMd' + +const createDeserializeMdPlugin = createPluginFactory({ + key: KEY_DESERIALIZE_MD, + then: (editor) => ({ + editor: { + insertData: { + format: 'text/plain', + query: ({ data, dataTransfer }) => { + const htmlData = dataTransfer.getData('text/html') + if (htmlData) return false + + const { files } = dataTransfer + if ( + !files?.length && // if content is simply a URL pass through to not break LinkPlugin + isUrl(data) + ) { + return false + } + return true + }, + getFragment: ({ data }) => deserialize(editor, data), + }, + }, + }), + options: { + elementRules: remarkDefaultElementRules, + textRules: remarkDefaultTextRules, + indentList: false, + }, +}) diff --git a/packages/lib/serializer/convertRichTextToMarkdown.ts b/packages/lib/markdown/convertRichTextToMarkdown.ts similarity index 53% rename from packages/lib/serializer/convertRichTextToMarkdown.ts rename to packages/lib/markdown/convertRichTextToMarkdown.ts index cdd54e0e7..6123fbb11 100644 --- a/packages/lib/serializer/convertRichTextToMarkdown.ts +++ b/packages/lib/markdown/convertRichTextToMarkdown.ts @@ -1,41 +1,36 @@ import { TElement } from '@udecode/plate-common' -import serialize from './serialize' -import { defaultNodeTypes } from './ast-types' +import serialize from './serializer/serialize' +import { defaultNodeTypes } from './serializer/ast-types' export const convertRichTextToMarkdown = ( richText: TElement[], options?: { flavour?: 'common' | 'whatsapp' } ) => { - let extraNewLinesCount = 0 const test = richText .reduce((acc, node) => { if (node.type === 'variable') { return [ ...acc, - ...node.children.map( - (child) => - serialize(child, { - nodeTypes: defaultNodeTypes, - flavour: options?.flavour, - }) as string - ), + ...node.children.reduce((acc, node) => { + const serializedElement = serialize(node, { + nodeTypes: defaultNodeTypes, + flavour: options?.flavour, + }) as string + if (!serializedElement || serializedElement === '
\n\n') + return [...acc, '\n'] + return [...acc, serializedElement] + }, []), ] } const serializedElement = serialize(node, { nodeTypes: defaultNodeTypes, flavour: options?.flavour, }) - if (!serializedElement || serializedElement === '
\n\n') { - if (extraNewLinesCount > 0) { - return [...acc, ''] - } - extraNewLinesCount++ - return acc - } - extraNewLinesCount = 0 + if (!serializedElement || serializedElement === '
\n\n') + return [...acc, '\n'] return [...acc, serializedElement] }, []) - .join('\n') + .join('') return test.endsWith('\n') ? test.slice(0, -1) : test } diff --git a/packages/lib/markdown/deserializer/deserialize.ts b/packages/lib/markdown/deserializer/deserialize.ts new file mode 100644 index 000000000..b5b304240 --- /dev/null +++ b/packages/lib/markdown/deserializer/deserialize.ts @@ -0,0 +1,30 @@ +import { getPluginOptions, PlateEditor, Value } from '@udecode/plate-common' +import markdown from 'remark-parse' +import { unified } from 'unified' + +import { DeserializeMdPlugin } from './types' +import { remarkPlugin } from '../remark-slate/remarkPlugin' +import { RemarkPluginOptions } from '../remark-slate/types' +import { KEY_DESERIALIZE_MD } from '../convertMarkdownToRichText' + +export const deserialize = ( + editor: PlateEditor, + data: string +) => { + const { elementRules, textRules, indentList } = getPluginOptions< + DeserializeMdPlugin, + V + >(editor, KEY_DESERIALIZE_MD) + + const tree: any = unified() + .use(markdown) + .use(remarkPlugin, { + editor, + elementRules, + textRules, + indentList, + } as unknown as RemarkPluginOptions) + .processSync(data) + + return tree.result +} diff --git a/packages/lib/markdown/deserializer/types.ts b/packages/lib/markdown/deserializer/types.ts new file mode 100644 index 000000000..bcfbe690e --- /dev/null +++ b/packages/lib/markdown/deserializer/types.ts @@ -0,0 +1,8 @@ +import { Value } from '@udecode/plate-common' +import { RemarkElementRules, RemarkTextRules } from '../remark-slate/types' + +export interface DeserializeMdPlugin { + elementRules?: RemarkElementRules + textRules?: RemarkTextRules + indentList?: boolean +} diff --git a/packages/lib/markdown/remark-slate/remarkDefaultElementRules.ts b/packages/lib/markdown/remark-slate/remarkDefaultElementRules.ts new file mode 100644 index 000000000..0a6242120 --- /dev/null +++ b/packages/lib/markdown/remark-slate/remarkDefaultElementRules.ts @@ -0,0 +1,253 @@ +import { ELEMENT_BLOCKQUOTE } from '@udecode/plate-block-quote' +import { + ELEMENT_CODE_BLOCK, + ELEMENT_CODE_LINE, +} from '@udecode/plate-code-block' +import { + getPluginType, + TDescendant, + TElement, + TText, + Value, +} from '@udecode/plate-common' +import { + ELEMENT_H1, + ELEMENT_H2, + ELEMENT_H3, + ELEMENT_H4, + ELEMENT_H5, + ELEMENT_H6, +} from '@udecode/plate-heading' +import { ELEMENT_HR } from '@udecode/plate-horizontal-rule' +import { ELEMENT_LINK } from '@udecode/plate-link' +import { + ELEMENT_LI, + ELEMENT_LIC, + ELEMENT_OL, + ELEMENT_UL, +} from '@udecode/plate-list' +import { ELEMENT_IMAGE } from '@udecode/plate-media' +import { ELEMENT_PARAGRAPH } from '@udecode/plate-paragraph' + +import { remarkTransformElementChildren } from './remarkTransformElementChildren' +import { MdastNode, RemarkElementRules, RemarkPluginOptions } from './types' + +export const remarkDefaultElementRules: RemarkElementRules = { + heading: { + transform: (node, lastLineNumber, options) => { + const headingType = { + 1: ELEMENT_H1, + 2: ELEMENT_H2, + 3: ELEMENT_H3, + 4: ELEMENT_H4, + 5: ELEMENT_H5, + 6: ELEMENT_H6, + }[node.depth ?? 1] + + return [ + ...parseLineBreakNodes(node, lastLineNumber, options), + { + type: getPluginType(options.editor, headingType), + children: remarkTransformElementChildren( + node, + lastLineNumber, + options + ), + }, + ] + }, + }, + list: { + transform: (node, lastLineNumber, options) => { + if (options.indentList) { + const listStyleType = node.ordered ? 'decimal' : 'disc' + + const parseListItems = ( + _node: MdastNode, + listItems: TElement[] = [], + indent = 1 + ) => { + _node.children!.forEach((listItem) => { + const [paragraph, ...subLists] = listItem.children! + + listItems.push({ + type: getPluginType(options.editor, ELEMENT_PARAGRAPH), + listStyleType, + indent, + children: remarkTransformElementChildren( + paragraph || '', + lastLineNumber, + options + ), + }) + + subLists.forEach((subList) => { + parseListItems(subList, listItems, indent + 1) + }) + }) + + return listItems + } + + return [ + ...parseLineBreakNodes(node, lastLineNumber, options), + parseListItems(node), + ] + } else { + return [ + ...parseLineBreakNodes(node, lastLineNumber, options), + { + type: getPluginType( + options.editor, + node.ordered ? ELEMENT_OL : ELEMENT_UL + ), + children: remarkTransformElementChildren( + node, + lastLineNumber, + options + ), + }, + ] + } + }, + }, + listItem: { + transform: (node, lastLineNumber, options) => ({ + type: getPluginType(options.editor, ELEMENT_LI), + children: remarkTransformElementChildren( + node, + lastLineNumber, + options + ).map( + (child) => + ({ + ...child, + type: + child.type === getPluginType(options.editor, ELEMENT_PARAGRAPH) + ? getPluginType(options.editor, ELEMENT_LIC) + : child.type, + } as TDescendant) + ), + }), + }, + paragraph: { + transform: (node, lastLineNumber, options) => { + const children = remarkTransformElementChildren( + node, + lastLineNumber, + options + ) + + const paragraphType = getPluginType(options.editor, ELEMENT_PARAGRAPH) + const splitBlockTypes = new Set([ + getPluginType(options.editor, ELEMENT_IMAGE), + ]) + + const elements: TElement[] = [] + let inlineNodes: TDescendant[] = [] + + const flushInlineNodes = () => { + if (inlineNodes.length > 0) { + elements.push({ + type: paragraphType, + children: inlineNodes, + }) + + inlineNodes = [] + } + } + + children.forEach((child) => { + const { type } = child + + if (type && splitBlockTypes.has(type as string)) { + flushInlineNodes() + elements.push(child as TElement) + } else { + inlineNodes.push(child) + } + }) + + flushInlineNodes() + + return [ + ...parseLineBreakNodes(node, lastLineNumber, options), + ...elements, + ] + }, + }, + link: { + transform: (node, lastLineNumber, options) => [ + ...parseLineBreakNodes(node, lastLineNumber, options), + { + type: getPluginType(options.editor, ELEMENT_LINK), + url: node.url, + children: remarkTransformElementChildren(node, lastLineNumber, options), + }, + ], + }, + image: { + transform: (node, lastLineNumber, options) => [ + ...parseLineBreakNodes(node, lastLineNumber, options), + { + type: getPluginType(options.editor, ELEMENT_IMAGE), + children: [{ text: '' } as TText], + url: node.url, + caption: [{ text: node.alt } as TText], + }, + ], + }, + blockquote: { + transform: (node, lastLineNumber, options) => [ + ...parseLineBreakNodes(node, lastLineNumber, options), + { + type: getPluginType(options.editor, ELEMENT_BLOCKQUOTE), + children: node.children!.flatMap((paragraph) => + remarkTransformElementChildren(paragraph, lastLineNumber, options) + ), + }, + ], + }, + code: { + transform: (node, lastLineNumber, options) => [ + ...parseLineBreakNodes(node, lastLineNumber, options), + { + type: getPluginType(options.editor, ELEMENT_CODE_BLOCK), + lang: node.lang ?? undefined, + children: (node.value || '').split('\n').map((line) => ({ + type: getPluginType(options.editor, ELEMENT_CODE_LINE), + children: [{ text: line } as TText], + })), + }, + ], + }, + thematicBreak: { + transform: (node, lastLineNumber, options) => [ + ...parseLineBreakNodes(node, lastLineNumber, options), + { + type: getPluginType(options.editor, ELEMENT_HR), + children: [{ text: '' } as TText], + }, + ], + }, +} + +const parseLineBreakNodes = ( + node: MdastNode, + lastLineNumber: number, + options: RemarkPluginOptions +) => { + const lineBreaks = node.position.start.line - lastLineNumber + + let lineBreakNodes = [] + + if (lineBreaks > 1) + lineBreakNodes.push( + ...Array(lineBreaks - 1).fill({ + type: getPluginType(options.editor, ELEMENT_PARAGRAPH), + children: [{ text: '' } as TText], + }) + ) + + return lineBreakNodes +} diff --git a/packages/lib/markdown/remark-slate/remarkDefaultTextRules.ts b/packages/lib/markdown/remark-slate/remarkDefaultTextRules.ts new file mode 100644 index 000000000..c695a0600 --- /dev/null +++ b/packages/lib/markdown/remark-slate/remarkDefaultTextRules.ts @@ -0,0 +1,12 @@ +import { MARK_BOLD, MARK_CODE, MARK_ITALIC } from '@udecode/plate-basic-marks' +import { getPluginType, Value } from '@udecode/plate-common' + +import { RemarkTextRules } from './types' + +export const remarkDefaultTextRules: RemarkTextRules = { + text: {}, + emphasis: { mark: ({ editor }) => getPluginType(editor, MARK_ITALIC) }, + strong: { mark: ({ editor }) => getPluginType(editor, MARK_BOLD) }, + inlineCode: { mark: ({ editor }) => getPluginType(editor, MARK_CODE) }, + html: { transform: (text: string) => text.replaceAll('
', '\n') }, +} diff --git a/packages/lib/markdown/remark-slate/remarkPlugin.ts b/packages/lib/markdown/remark-slate/remarkPlugin.ts new file mode 100644 index 000000000..c9b620fa3 --- /dev/null +++ b/packages/lib/markdown/remark-slate/remarkPlugin.ts @@ -0,0 +1,18 @@ +import { Value } from '@udecode/plate-common' + +import { remarkTransformNode } from './remarkTransformNode' +import { MdastNode, RemarkPluginOptions } from './types' + +export function remarkPlugin(options: RemarkPluginOptions) { + let lastLineNumber = 1 + const compiler = (node: { children: Array }) => { + return node.children.flatMap((child) => { + const parsedChild = remarkTransformNode(child, lastLineNumber, options) + lastLineNumber = child.position?.end.line || lastLineNumber + return parsedChild + }) + } + + // @ts-ignore + this.Compiler = compiler +} diff --git a/packages/lib/markdown/remark-slate/remarkTextTypes.ts b/packages/lib/markdown/remark-slate/remarkTextTypes.ts new file mode 100644 index 000000000..b504cbd03 --- /dev/null +++ b/packages/lib/markdown/remark-slate/remarkTextTypes.ts @@ -0,0 +1,10 @@ +import { MdastNodeType } from './types' + +export const remarkTextTypes: MdastNodeType[] = [ + 'emphasis', + 'strong', + 'delete', + 'inlineCode', + 'html', + 'text', +] diff --git a/packages/lib/markdown/remark-slate/remarkTransformElement.ts b/packages/lib/markdown/remark-slate/remarkTransformElement.ts new file mode 100644 index 000000000..07a85351e --- /dev/null +++ b/packages/lib/markdown/remark-slate/remarkTransformElement.ts @@ -0,0 +1,17 @@ +import { TElement, Value } from '@udecode/plate-common' + +import { MdastNode, RemarkPluginOptions } from './types' + +export const remarkTransformElement = ( + node: MdastNode, + lastLineNumber: number, + options: RemarkPluginOptions +): TElement | TElement[] => { + const { elementRules } = options + + const { type } = node + const elementRule = (elementRules as any)[type!] + if (!elementRule) return [] + + return elementRule.transform(node, lastLineNumber, options) +} diff --git a/packages/lib/markdown/remark-slate/remarkTransformElementChildren.ts b/packages/lib/markdown/remark-slate/remarkTransformElementChildren.ts new file mode 100644 index 000000000..3df11a0e9 --- /dev/null +++ b/packages/lib/markdown/remark-slate/remarkTransformElementChildren.ts @@ -0,0 +1,17 @@ +import { TDescendant, Value } from '@udecode/plate-common' + +import { remarkTransformNode } from './remarkTransformNode' +import { MdastNode, RemarkPluginOptions } from './types' + +export const remarkTransformElementChildren = ( + node: MdastNode, + lastLineNumber: number, + options: RemarkPluginOptions +): TDescendant[] => { + const { children } = node + if (!children) return [] + + return children.flatMap((child) => + remarkTransformNode(child, lastLineNumber, options) + ) +} diff --git a/packages/lib/markdown/remark-slate/remarkTransformNode.ts b/packages/lib/markdown/remark-slate/remarkTransformNode.ts new file mode 100644 index 000000000..c7234c146 --- /dev/null +++ b/packages/lib/markdown/remark-slate/remarkTransformNode.ts @@ -0,0 +1,20 @@ +import { TDescendant, Value } from '@udecode/plate-common' + +import { remarkTextTypes } from './remarkTextTypes' +import { remarkTransformElement } from './remarkTransformElement' +import { remarkTransformText } from './remarkTransformText' +import { MdastNode, RemarkPluginOptions } from './types' + +export const remarkTransformNode = ( + node: MdastNode, + lastLineNumber: number, + options: RemarkPluginOptions +): TDescendant | TDescendant[] => { + const { type } = node + + if (remarkTextTypes.includes(type!)) { + return remarkTransformText(node, options) + } + + return remarkTransformElement(node, lastLineNumber, options) +} diff --git a/packages/lib/markdown/remark-slate/remarkTransformText.ts b/packages/lib/markdown/remark-slate/remarkTransformText.ts new file mode 100644 index 000000000..c78234405 --- /dev/null +++ b/packages/lib/markdown/remark-slate/remarkTransformText.ts @@ -0,0 +1,36 @@ +import { TText, Value } from '@udecode/plate-common' + +import { remarkDefaultTextRules } from './remarkDefaultTextRules' +import { MdastNode, RemarkPluginOptions } from './types' + +export const remarkTransformText = ( + node: MdastNode, + options: RemarkPluginOptions, + inheritedMarkProps: { [key: string]: boolean } = {} +): TText | TText[] => { + const { editor, textRules } = options + + const { type, value, children } = node + const textRule = (textRules as any)[type!] || remarkDefaultTextRules.text + + const { mark, transform = (text: string) => text } = textRule + + const markProps = mark + ? { + ...inheritedMarkProps, + [mark({ editor })]: true, + } + : inheritedMarkProps + + const childTextNodes = + children?.flatMap((child) => + remarkTransformText(child, options, markProps) + ) || [] + + const currentTextNodes = + value || childTextNodes.length === 0 + ? [{ text: transform(value || ''), ...markProps } as TText] + : [] + + return [...currentTextNodes, ...childTextNodes] +} diff --git a/packages/lib/markdown/remark-slate/types.ts b/packages/lib/markdown/remark-slate/types.ts new file mode 100644 index 000000000..4f0e19b7b --- /dev/null +++ b/packages/lib/markdown/remark-slate/types.ts @@ -0,0 +1,67 @@ +import { PlateEditor, TElement, Value } from '@udecode/plate-common' + +export type MdastElementType = + | 'paragraph' + | 'heading' + | 'list' + | 'listItem' + | 'link' + | 'image' + | 'blockquote' + | 'code' + | 'thematicBreak' + +export type MdastTextType = + | 'emphasis' + | 'strong' + | 'delete' + | 'inlineCode' + | 'html' + | 'text' + +export type MdastNodeType = MdastElementType | MdastTextType + +export interface MdastNode { + type?: MdastNodeType + ordered?: boolean + value?: string + text?: string + children?: Array + depth?: 1 | 2 | 3 | 4 | 5 | 6 + url?: string + alt?: string + lang?: string + // mdast metadata + position?: any + spread?: any + checked?: any + indent?: any +} + +export type RemarkElementRule = { + transform: ( + node: MdastNode, + lastLineNumber: number, + options: RemarkPluginOptions + ) => TElement | TElement[] +} + +export type RemarkElementRules = { + [key in MdastElementType]?: RemarkElementRule +} + +export type RemarkTextRule = { + mark?: (options: RemarkPluginOptions) => string + transform?: (text: string) => string +} + +export type RemarkTextRules = { + [key in MdastTextType]?: RemarkTextRule +} + +export type RemarkPluginOptions = { + editor: PlateEditor + elementRules: RemarkElementRules + textRules: RemarkTextRules + indentList?: boolean +} diff --git a/packages/lib/serializer/ast-types.ts b/packages/lib/markdown/serializer/ast-types.ts similarity index 100% rename from packages/lib/serializer/ast-types.ts rename to packages/lib/markdown/serializer/ast-types.ts diff --git a/packages/lib/serializer/serialize.ts b/packages/lib/markdown/serializer/serialize.ts similarity index 100% rename from packages/lib/serializer/serialize.ts rename to packages/lib/markdown/serializer/serialize.ts diff --git a/packages/lib/package.json b/packages/lib/package.json index ac30cdad4..b0b9231d2 100644 --- a/packages/lib/package.json +++ b/packages/lib/package.json @@ -26,12 +26,23 @@ "dependencies": { "@sentry/nextjs": "7.77.0", "@trpc/server": "10.40.0", + "@udecode/plate-basic-marks": "21.1.5", + "@udecode/plate-block-quote": "30.1.2", + "@udecode/plate-code-block": "30.1.2", "@udecode/plate-common": "21.1.5", + "@udecode/plate-heading": "30.1.2", + "@udecode/plate-horizontal-rule": "30.1.2", + "@udecode/plate-link": "21.2.0", + "@udecode/plate-list": "30.1.2", + "@udecode/plate-media": "30.1.2", + "@udecode/plate-paragraph": "30.1.2", "escape-html": "^1.0.3", "google-auth-library": "8.9.0", "got": "12.6.0", "minio": "7.1.3", + "remark-parse": "11.0.0", "stripe": "12.13.0", + "unified": "11.0.4", "zod": "3.22.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 86aaab010..938e9c4f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -658,10 +658,7 @@ importers: version: link:../variables '@udecode/plate-common': specifier: 21.1.5 - version: 21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/plate-serializer-md': - specifier: 24.4.0 - version: 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + version: 21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) ai: specifier: 2.2.31 version: 2.2.31(react@18.2.0)(solid-js@1.7.8)(svelte@4.2.1)(vue@3.3.4) @@ -897,7 +894,7 @@ importers: version: 1.54.1 '@udecode/plate-common': specifier: 21.1.5 - version: 21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) + version: 21.1.5(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) dompurify: specifier: 3.0.6 version: 3.0.6 @@ -1403,9 +1400,36 @@ importers: '@trpc/server': specifier: 10.40.0 version: 10.40.0 + '@udecode/plate-basic-marks': + specifier: 21.1.5 + version: 21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-block-quote': + specifier: 30.1.2 + version: 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-code-block': + specifier: 30.1.2 + version: 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) '@udecode/plate-common': specifier: 21.1.5 - version: 21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) + version: 21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-heading': + specifier: 30.1.2 + version: 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-horizontal-rule': + specifier: 30.1.2 + version: 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-link': + specifier: 21.2.0 + version: 21.2.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-list': + specifier: 30.1.2 + version: 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-media': + specifier: 30.1.2 + version: 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-paragraph': + specifier: 30.1.2 + version: 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) escape-html: specifier: ^1.0.3 version: 1.0.3 @@ -1418,9 +1442,15 @@ importers: minio: specifier: 7.1.3 version: 7.1.3 + remark-parse: + specifier: 11.0.0 + version: 11.0.0 stripe: specifier: 12.13.0 version: 12.13.0 + unified: + specifier: 11.0.4 + version: 11.0.4 zod: specifier: 3.22.4 version: 3.22.4 @@ -1491,7 +1521,7 @@ importers: dependencies: '@udecode/plate-common': specifier: 21.1.5 - version: 21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) + version: 21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) devDependencies: '@typebot.io/env': specifier: workspace:* @@ -1513,7 +1543,7 @@ importers: dependencies: '@udecode/plate-common': specifier: 21.1.5 - version: 21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) + version: 21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) zod: specifier: 3.22.4 version: 3.22.4 @@ -7952,6 +7982,7 @@ packages: resolution: {integrity: sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==} dependencies: '@types/unist': 2.0.8 + dev: true /@types/mdast@4.0.3: resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} @@ -8101,6 +8132,7 @@ packages: /@types/unist@2.0.8: resolution: {integrity: sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==} + dev: true /@types/unist@3.0.2: resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} @@ -8354,40 +8386,40 @@ packages: - scheduler dev: false - /@udecode/plate-basic-marks@24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): - resolution: {integrity: sha512-5xh8O0kHuJZtg3PId/pkAy+6a7Qtn4pav6wqns5Rz+s8TvGVwk42TPB4vvsYkU2sF6Od4ErJmU1hJ691BpFFJQ==} + /@udecode/plate-basic-marks@21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1): + resolution: {integrity: sha512-F5v85HjKoqn94AFmD7oL1J0IMIiDKcDApMJ9t14Co/0zSaZ6CVJeqVMzzcMSAI6dUVsZilDzXmjvKJ/royA6hw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' slate: '>=0.94.0' slate-history: '>=0.93.0' - slate-hyperscript: '>=0.66.0' - slate-react: '>=0.99.0' + slate-react: '>=0.94.0' dependencies: - '@udecode/plate-common': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-common': 21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) slate: 0.94.1 slate-history: 0.93.0(slate@0.94.1) - slate-hyperscript: 0.77.0(slate@0.94.1) slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) transitivePeerDependencies: - '@babel/core' - '@babel/template' - '@types/react' - - '@urql/core' - - immer - - optics-ts + - jotai-devtools + - jotai-immer + - jotai-optics + - jotai-redux + - jotai-tanstack-query + - jotai-urql + - jotai-valtio + - jotai-xstate + - jotai-zustand - react-native - - react-query - scheduler - - valtio - - wonka - - xstate dev: false - /@udecode/plate-block-quote@24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): - resolution: {integrity: sha512-dFQqzkxuhgZDsecn12aW31R/ebetkMCs1o2igc0vbse0LqrphsglL4kOr9xxQlrs6K/xjcr9Pa44yDrirdSlwg==} + /@udecode/plate-block-quote@30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): + resolution: {integrity: sha512-3KR95Mg2h2VKAbZrj5pB1ole9To5eRaiOReVNuCDaxUo1Be9C8zZSMghsC1Rao6lEju2VrwmpO2c8p36Pb4CRw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -8396,7 +8428,7 @@ packages: slate-hyperscript: '>=0.66.0' slate-react: '>=0.99.0' dependencies: - '@udecode/plate-common': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-common': 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) slate: 0.94.1 @@ -8404,18 +8436,10 @@ packages: slate-hyperscript: 0.77.0(slate@0.94.1) slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) transitivePeerDependencies: - - '@babel/core' - - '@babel/template' - '@types/react' - - '@urql/core' - immer - - optics-ts - react-native - - react-query - scheduler - - valtio - - wonka - - xstate dev: false /@udecode/plate-button@21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1): @@ -8450,8 +8474,40 @@ packages: - scheduler dev: false - /@udecode/plate-code-block@24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): - resolution: {integrity: sha512-gH546D/rvkdhdKvmecj+sXauLTiFluPMGeB3o//fYUDmomnuu/2KmeAyXnZCvDHJhZtfcqMyQylhiJ2sw31V0g==} + /@udecode/plate-button@21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1): + resolution: {integrity: sha512-edzp/yBVJYZ5tKoYGss9AL+7gLbmWT8cOlxI8qLjdT5b5OJukWqSlhMcP1CBCfv0THIYOpayKN2AfgBEalstOw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + slate: '>=0.94.0' + slate-history: '>=0.93.0' + slate-react: '>=0.94.0' + dependencies: + '@udecode/plate-common': 21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + slate: 0.94.1 + slate-history: 0.93.0(slate@0.94.1) + slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) + transitivePeerDependencies: + - '@babel/core' + - '@babel/template' + - '@types/react' + - jotai-devtools + - jotai-immer + - jotai-optics + - jotai-redux + - jotai-tanstack-query + - jotai-urql + - jotai-valtio + - jotai-xstate + - jotai-zustand + - react-native + - scheduler + dev: false + + /@udecode/plate-code-block@30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): + resolution: {integrity: sha512-0SvMjyhv7XKAG6PleWcXLctTgTfdTS+iV7I/udjbyPdHr1+6+2EAYNe2lJpENWhr/n2MWusJFSpnAAOOw1hzcw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -8460,7 +8516,7 @@ packages: slate-hyperscript: '>=0.66.0' slate-react: '>=0.99.0' dependencies: - '@udecode/plate-common': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-common': 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) prismjs: 1.29.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -8469,18 +8525,10 @@ packages: slate-hyperscript: 0.77.0(slate@0.94.1) slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) transitivePeerDependencies: - - '@babel/core' - - '@babel/template' - '@types/react' - - '@urql/core' - immer - - optics-ts - react-native - - react-query - scheduler - - valtio - - wonka - - xstate dev: false /@udecode/plate-common@21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1): @@ -8520,6 +8568,80 @@ packages: - scheduler dev: false + /@udecode/plate-common@21.1.5(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1): + resolution: {integrity: sha512-5SP4OblU1CoNlrSgHKjpQpvNEMB0rJfyCfToMUo91XfXOGf+L9lxzDJu3PjEbwLs9p1iKG+0DZ9wKiZvyUPF6g==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + slate: '>=0.94.0' + slate-history: '>=0.93.0' + slate-react: '>=0.94.0' + dependencies: + '@udecode/plate-core': 21.1.5(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) + '@udecode/plate-utils': 21.1.5(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) + '@udecode/slate': 21.0.0(slate-history@0.93.0)(slate@0.94.1) + '@udecode/slate-react': 21.0.0(react-dom@18.2.0)(react@18.2.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) + '@udecode/slate-utils': 21.0.0(slate-history@0.93.0)(slate@0.94.1) + '@udecode/utils': 19.7.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + slate: 0.94.1 + slate-history: 0.93.0(slate@0.94.1) + slate-react: 0.94.2(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) + transitivePeerDependencies: + - '@babel/core' + - '@babel/template' + - '@types/react' + - jotai-devtools + - jotai-immer + - jotai-optics + - jotai-redux + - jotai-tanstack-query + - jotai-urql + - jotai-valtio + - jotai-xstate + - jotai-zustand + - react-native + - scheduler + dev: false + + /@udecode/plate-common@21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1): + resolution: {integrity: sha512-5SP4OblU1CoNlrSgHKjpQpvNEMB0rJfyCfToMUo91XfXOGf+L9lxzDJu3PjEbwLs9p1iKG+0DZ9wKiZvyUPF6g==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + slate: '>=0.94.0' + slate-history: '>=0.93.0' + slate-react: '>=0.94.0' + dependencies: + '@udecode/plate-core': 21.1.5(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) + '@udecode/plate-utils': 21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) + '@udecode/slate': 21.0.0(slate-history@0.93.0)(slate@0.94.1) + '@udecode/slate-react': 21.0.0(react-dom@18.2.0)(react@18.2.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) + '@udecode/slate-utils': 21.0.0(slate-history@0.93.0)(slate@0.94.1) + '@udecode/utils': 19.7.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + slate: 0.94.1 + slate-history: 0.93.0(slate@0.94.1) + slate-react: 0.94.2(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) + transitivePeerDependencies: + - '@babel/core' + - '@babel/template' + - '@types/react' + - jotai-devtools + - jotai-immer + - jotai-optics + - jotai-redux + - jotai-tanstack-query + - jotai-urql + - jotai-valtio + - jotai-xstate + - jotai-zustand + - react-native + - scheduler + dev: false + /@udecode/plate-common@21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1): resolution: {integrity: sha512-5SP4OblU1CoNlrSgHKjpQpvNEMB0rJfyCfToMUo91XfXOGf+L9lxzDJu3PjEbwLs9p1iKG+0DZ9wKiZvyUPF6g==} peerDependencies: @@ -8557,8 +8679,8 @@ packages: - scheduler dev: false - /@udecode/plate-common@24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): - resolution: {integrity: sha512-5HaQQNs/4sCZBUGcJDhVTrU5OBBENLLy3bjdixfFOGydlL/5F0m7XYZoVV/zeltVSwO6GWelhHtYnk/xXn12Pw==} + /@udecode/plate-common@30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): + resolution: {integrity: sha512-3O100g2s0TNIRWIS8dvwTtXXwY8CdAHOrYfsG/PfuBJ3ZMW+2GAGH8gxjlDoL/AJ5W9amS95NiwkRjsHClwX/A==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -8567,11 +8689,12 @@ packages: slate-hyperscript: '>=0.66.0' slate-react: '>=0.99.0' dependencies: - '@udecode/plate-core': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/plate-utils': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/slate': 24.3.6(slate-history@0.93.0)(slate@0.94.1) - '@udecode/slate-react': 24.4.0(react-dom@18.2.0)(react@18.2.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/slate-utils': 24.3.6(slate-history@0.93.0)(slate@0.94.1) + '@udecode/plate-core': 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-utils': 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/react-utils': 29.0.1(react-dom@18.2.0)(react@18.2.0) + '@udecode/slate': 25.0.0(slate-history@0.93.0)(slate@0.94.1) + '@udecode/slate-react': 29.0.1(react-dom@18.2.0)(react@18.2.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/slate-utils': 25.0.0(slate-history@0.93.0)(slate@0.94.1) '@udecode/utils': 24.3.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -8580,18 +8703,10 @@ packages: slate-hyperscript: 0.77.0(slate@0.94.1) slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) transitivePeerDependencies: - - '@babel/core' - - '@babel/template' - '@types/react' - - '@urql/core' - immer - - optics-ts - react-native - - react-query - scheduler - - valtio - - wonka - - xstate dev: false /@udecode/plate-core@21.1.5(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1): @@ -8676,8 +8791,8 @@ packages: - scheduler dev: false - /@udecode/plate-core@24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): - resolution: {integrity: sha512-xg/ZzqpnNQmtXQBM02KMBLHczy2LpGQ2HLEjZVXWsHU1YLyiUCyVW/DCi/woPY1dSuSy60ZnVGPKnxs4Ao7zCQ==} + /@udecode/plate-core@30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): + resolution: {integrity: sha512-AaYP9HwyloGVJ/J0b4QE4Wmxq0T7wexGAC4tb1zN0nO2EV/QGndLH1EgfhsGrsvFsxyGUwPzWg04sHCDbONfzw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -8686,16 +8801,18 @@ packages: slate-hyperscript: '>=0.66.0' slate-react: '>=0.99.0' dependencies: - '@udecode/slate': 24.3.6(slate-history@0.93.0)(slate@0.94.1) - '@udecode/slate-react': 24.4.0(react-dom@18.2.0)(react@18.2.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/slate-utils': 24.3.6(slate-history@0.93.0)(slate@0.94.1) + '@udecode/slate': 25.0.0(slate-history@0.93.0)(slate@0.94.1) + '@udecode/slate-react': 29.0.1(react-dom@18.2.0)(react@18.2.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/slate-utils': 25.0.0(slate-history@0.93.0)(slate@0.94.1) '@udecode/utils': 24.3.0 - '@udecode/zustood': 1.1.3(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(zustand@3.7.2) clsx: 1.2.1 is-hotkey: 0.2.0 - jotai: 1.7.2(react@18.2.0) + jotai: 2.6.3(react@18.2.0) + jotai-optics: 0.3.1(jotai@2.6.3)(optics-ts@2.4.1) + jotai-x: 1.2.1(jotai@2.6.3)(react@18.2.0) lodash: 4.17.21 nanoid: 3.3.6 + optics-ts: 2.4.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-hotkeys-hook: 4.4.1(react-dom@18.2.0)(react@18.2.0) @@ -8704,19 +8821,13 @@ packages: slate-hyperscript: 0.77.0(slate@0.94.1) slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) use-deep-compare: 1.1.0(react@18.2.0) - zustand: 3.7.2(react@18.2.0) + zustand: 4.5.0(@types/react@18.2.15)(immer@10.0.2)(react@18.2.0) + zustand-x: 3.0.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(zustand@4.5.0) transitivePeerDependencies: - - '@babel/core' - - '@babel/template' - - '@urql/core' + - '@types/react' - immer - - optics-ts - react-native - - react-query - scheduler - - valtio - - wonka - - xstate dev: false /@udecode/plate-floating@21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1): @@ -8754,8 +8865,8 @@ packages: - scheduler dev: false - /@udecode/plate-floating@24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): - resolution: {integrity: sha512-UlSfjGH7vju4jJVIVV3C2YDCYTqDU0btQKS7QyL6VWB0ezvKKNy9+pLVsaek/OChooNlSoX7xpbavEuisnH4iA==} + /@udecode/plate-heading@30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): + resolution: {integrity: sha512-Yo2nH+96OUulxLxAha6PQF0zzII/Qdx2OLJGU74vt2xnWFrsVKx3DwJFcdpgNsi2jFcYUWI3elhJoFsxOutKxw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -8764,10 +8875,7 @@ packages: slate-hyperscript: '>=0.66.0' slate-react: '>=0.99.0' dependencies: - '@floating-ui/core': 1.5.0 - '@floating-ui/react': 0.22.3(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-dropdown-menu': 2.0.6(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) - '@udecode/plate-common': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-common': 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) slate: 0.94.1 @@ -8775,23 +8883,14 @@ packages: slate-hyperscript: 0.77.0(slate@0.94.1) slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) transitivePeerDependencies: - - '@babel/core' - - '@babel/template' - '@types/react' - - '@types/react-dom' - - '@urql/core' - immer - - optics-ts - react-native - - react-query - scheduler - - valtio - - wonka - - xstate dev: false - /@udecode/plate-heading@24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): - resolution: {integrity: sha512-wjz07BAmcxTmAhplZdJ2jkugYHTFmq9RoJ20paFV3rKZH9B8xdg+sS37vo/fS9+DBvLOi/5u62zI/r3rPxOBvA==} + /@udecode/plate-horizontal-rule@30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): + resolution: {integrity: sha512-Shemw7y9Wfm/Mnv8yYKmh0hDm9G9uKoh2xj6ab0cM/ryZ/V2OxCyCM3ZF5F0/SDxWghpfZ5WxBTWhE4SySwYNw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -8800,7 +8899,7 @@ packages: slate-hyperscript: '>=0.66.0' slate-react: '>=0.99.0' dependencies: - '@udecode/plate-common': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-common': 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) slate: 0.94.1 @@ -8808,50 +8907,10 @@ packages: slate-hyperscript: 0.77.0(slate@0.94.1) slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) transitivePeerDependencies: - - '@babel/core' - - '@babel/template' - '@types/react' - - '@urql/core' - immer - - optics-ts - react-native - - react-query - scheduler - - valtio - - wonka - - xstate - dev: false - - /@udecode/plate-horizontal-rule@24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): - resolution: {integrity: sha512-uZz5zloth86AmGtz2E6FCuOVYd8zN8REIygANUA0mCdMuIOpFR6ilbImWXn1YVT854jmGdb2MA7rR0QCBovXYA==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - slate: '>=0.94.0' - slate-history: '>=0.93.0' - slate-hyperscript: '>=0.66.0' - slate-react: '>=0.99.0' - dependencies: - '@udecode/plate-common': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - slate: 0.94.1 - slate-history: 0.93.0(slate@0.94.1) - slate-hyperscript: 0.77.0(slate@0.94.1) - slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) - transitivePeerDependencies: - - '@babel/core' - - '@babel/template' - - '@types/react' - - '@urql/core' - - immer - - optics-ts - - react-native - - react-query - - scheduler - - valtio - - wonka - - xstate dev: false /@udecode/plate-link@21.2.0(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1): @@ -8888,43 +8947,42 @@ packages: - scheduler dev: false - /@udecode/plate-link@24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): - resolution: {integrity: sha512-lpiIx4bwNDlEKH57zU9gfLjQmKwJ7d0uubc2dFaC584l+KyH+0PF1DnSQwdbEAveA+z9m7AgWeluGsn2AJpzzA==} + /@udecode/plate-link@21.2.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1): + resolution: {integrity: sha512-vGqtd6As3lCdB/v5gBwmPAhSrrSbRDpFUCLzDfUDIemONCaTylYWYXzss2INleB5IVUN6RZB8G1SIlfjjRlAXg==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' slate: '>=0.94.0' slate-history: '>=0.93.0' - slate-hyperscript: '>=0.66.0' - slate-react: '>=0.99.0' + slate-react: '>=0.94.0' dependencies: - '@udecode/plate-common': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/plate-floating': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/plate-normalizers': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-button': 21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-common': 21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-normalizers': 21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) slate: 0.94.1 slate-history: 0.93.0(slate@0.94.1) - slate-hyperscript: 0.77.0(slate@0.94.1) slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) transitivePeerDependencies: - '@babel/core' - '@babel/template' - '@types/react' - - '@types/react-dom' - - '@urql/core' - - immer - - optics-ts + - jotai-devtools + - jotai-immer + - jotai-optics + - jotai-redux + - jotai-tanstack-query + - jotai-urql + - jotai-valtio + - jotai-xstate + - jotai-zustand - react-native - - react-query - scheduler - - valtio - - wonka - - xstate dev: false - /@udecode/plate-list@24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): - resolution: {integrity: sha512-y+xenhajuvay16qKrYG93o9rJxQO4s4DH95Jg2cD7n/+yGiwPyIsZpNmUJ0J+40JHuBj6UddoWecggtlTEa1fw==} + /@udecode/plate-list@30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): + resolution: {integrity: sha512-+EZm2hAqFIGQG4c/Gtp5QVrlpHv55Zb5moEIP9ETd97QA7heQ5zCB0+yM3sujueNhphzFB+Y+mhpsp8vTGPiDA==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -8933,8 +8991,8 @@ packages: slate-hyperscript: '>=0.66.0' slate-react: '>=0.99.0' dependencies: - '@udecode/plate-common': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/plate-reset-node': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-common': 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-reset-node': 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) lodash: 4.17.21 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -8943,22 +9001,14 @@ packages: slate-hyperscript: 0.77.0(slate@0.94.1) slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) transitivePeerDependencies: - - '@babel/core' - - '@babel/template' - '@types/react' - - '@urql/core' - immer - - optics-ts - react-native - - react-query - scheduler - - valtio - - wonka - - xstate dev: false - /@udecode/plate-media@24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): - resolution: {integrity: sha512-WlyrOt2HMzpraNjtVKW5il70YShqlLC8eVaHzxTSd6GegKQe5WGB29BJqpx3yeOni/4V6RFchIhjpVZZH+Trvw==} + /@udecode/plate-media@30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): + resolution: {integrity: sha512-nHG1MekLs5zpVSs/dC4s9JOTR9HHfTybcaSBVecWuWFQhtZyL4G5o3LbGaLOShIKsNM7fvT0j3PWsfKAGV3oHA==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -8967,7 +9017,7 @@ packages: slate-hyperscript: '>=0.66.0' slate-react: '>=0.99.0' dependencies: - '@udecode/plate-common': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-common': 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) js-video-url-parser: 0.5.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -8976,18 +9026,10 @@ packages: slate-hyperscript: 0.77.0(slate@0.94.1) slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) transitivePeerDependencies: - - '@babel/core' - - '@babel/template' - '@types/react' - - '@urql/core' - immer - - optics-ts - react-native - - react-query - scheduler - - valtio - - wonka - - xstate dev: false /@udecode/plate-normalizers@21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1): @@ -9022,41 +9064,40 @@ packages: - scheduler dev: false - /@udecode/plate-normalizers@24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): - resolution: {integrity: sha512-m7//22xShJUNTbLg/XIts/QhRHvKZrhBl2n+c4TWCswCVJALAtz8FZrwNZKmrxjXmWfqlV45UkZ5rDv44oEX2w==} + /@udecode/plate-normalizers@21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1): + resolution: {integrity: sha512-Zb+gXzIt/Q4sg1VHFHosSeYcu0InPg6QcYO2XRY7BiOKHlb8qlXUKmeVqmWk+iIph3oJAAOtvJ35ui3dXbJVMA==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' slate: '>=0.94.0' slate-history: '>=0.93.0' - slate-hyperscript: '>=0.66.0' - slate-react: '>=0.99.0' + slate-react: '>=0.94.0' dependencies: - '@udecode/plate-common': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - lodash: 4.17.21 + '@udecode/plate-common': 21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) slate: 0.94.1 slate-history: 0.93.0(slate@0.94.1) - slate-hyperscript: 0.77.0(slate@0.94.1) slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) transitivePeerDependencies: - '@babel/core' - '@babel/template' - '@types/react' - - '@urql/core' - - immer - - optics-ts + - jotai-devtools + - jotai-immer + - jotai-optics + - jotai-redux + - jotai-tanstack-query + - jotai-urql + - jotai-valtio + - jotai-xstate + - jotai-zustand - react-native - - react-query - scheduler - - valtio - - wonka - - xstate dev: false - /@udecode/plate-paragraph@24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): - resolution: {integrity: sha512-+KPdoVvx2u92deoLJojb3iSWSTojKm75EXu7INve/BGZKbUglRX3MYM16uM3oOaF1TLsDXdlvuzD4GEcxNlvLg==} + /@udecode/plate-paragraph@30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): + resolution: {integrity: sha512-cxAE+36sXKTBI4Gvf1tssU2Jg8GgNSZOuRY5wTtl19Av3X9AwF2FsRNSHAvrR+2TyqEHYtCBjfRBHdMagOrWxA==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -9065,7 +9106,7 @@ packages: slate-hyperscript: '>=0.66.0' slate-react: '>=0.99.0' dependencies: - '@udecode/plate-common': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-common': 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) slate: 0.94.1 @@ -9073,22 +9114,14 @@ packages: slate-hyperscript: 0.77.0(slate@0.94.1) slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) transitivePeerDependencies: - - '@babel/core' - - '@babel/template' - '@types/react' - - '@urql/core' - immer - - optics-ts - react-native - - react-query - scheduler - - valtio - - wonka - - xstate dev: false - /@udecode/plate-reset-node@24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): - resolution: {integrity: sha512-UqH991qJOkHgDKUJJvd8zSIHSQYtw31HYI/+TcNQvmQ+RwgYT5b8kcqBclmeRvygjRNjJh2Q+V2rTPjeJPJ9Jg==} + /@udecode/plate-reset-node@30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): + resolution: {integrity: sha512-Gn7ELDHLx2+VmM9jskgPv4zqv6DzfpKHdtNX/98oJ1R7KSZLK+OpOLD8EOpQ8v+3lB2kDBrR+IYGjjmZySzfqg==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -9097,7 +9130,7 @@ packages: slate-hyperscript: '>=0.66.0' slate-react: '>=0.99.0' dependencies: - '@udecode/plate-common': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/plate-common': 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) slate: 0.94.1 @@ -9105,63 +9138,10 @@ packages: slate-hyperscript: 0.77.0(slate@0.94.1) slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) transitivePeerDependencies: - - '@babel/core' - - '@babel/template' - '@types/react' - - '@urql/core' - immer - - optics-ts - react-native - - react-query - scheduler - - valtio - - wonka - - xstate - dev: false - - /@udecode/plate-serializer-md@24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): - resolution: {integrity: sha512-20wRWkqEvFqOkKiBGzhw4tpmYGG79g3d5yLH+ZffregVrVf1kU1FJ4zk7XPD3ZrTmFk+XRN3eefunBTytcjW4g==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - slate: '>=0.94.0' - slate-history: '>=0.93.0' - slate-hyperscript: '>=0.66.0' - slate-react: '>=0.99.0' - dependencies: - '@udecode/plate-basic-marks': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/plate-block-quote': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/plate-code-block': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/plate-common': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/plate-heading': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/plate-horizontal-rule': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/plate-link': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/plate-list': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/plate-media': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/plate-paragraph': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - remark-parse: 9.0.0 - slate: 0.94.1 - slate-history: 0.93.0(slate@0.94.1) - slate-hyperscript: 0.77.0(slate@0.94.1) - slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) - unified: 9.2.2 - transitivePeerDependencies: - - '@babel/core' - - '@babel/template' - - '@types/react' - - '@types/react-dom' - - '@urql/core' - - immer - - optics-ts - - react-native - - react-query - - scheduler - - supports-color - - valtio - - wonka - - xstate dev: false /@udecode/plate-styled-components@21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1)(styled-components@6.0.8): @@ -9356,6 +9336,80 @@ packages: - scheduler dev: false + /@udecode/plate-utils@21.1.5(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1): + resolution: {integrity: sha512-zl91oxLieSlUm4Vm4kzKdHl0jYhX+8wUWa+dukZ0cYFjse9GGLVROdFITdoUDpd7NUV1Mu7R6y+sbm7M1kW3Pg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + slate: '>=0.94.0' + slate-history: '>=0.93.0' + slate-react: '>=0.94.0' + dependencies: + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.15)(react@18.2.0) + '@udecode/plate-core': 21.1.5(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) + '@udecode/slate': 21.0.0(slate-history@0.93.0)(slate@0.94.1) + '@udecode/slate-react': 21.0.0(react-dom@18.2.0)(react@18.2.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) + '@udecode/slate-utils': 21.0.0(slate-history@0.93.0)(slate@0.94.1) + '@udecode/utils': 19.7.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + slate: 0.94.1 + slate-history: 0.93.0(slate@0.94.1) + slate-react: 0.94.2(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) + transitivePeerDependencies: + - '@babel/core' + - '@babel/template' + - '@types/react' + - jotai-devtools + - jotai-immer + - jotai-optics + - jotai-redux + - jotai-tanstack-query + - jotai-urql + - jotai-valtio + - jotai-xstate + - jotai-zustand + - react-native + - scheduler + dev: false + + /@udecode/plate-utils@21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1): + resolution: {integrity: sha512-zl91oxLieSlUm4Vm4kzKdHl0jYhX+8wUWa+dukZ0cYFjse9GGLVROdFITdoUDpd7NUV1Mu7R6y+sbm7M1kW3Pg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + slate: '>=0.94.0' + slate-history: '>=0.93.0' + slate-react: '>=0.94.0' + dependencies: + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.15)(react@18.2.0) + '@udecode/plate-core': 21.1.5(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) + '@udecode/slate': 21.0.0(slate-history@0.93.0)(slate@0.94.1) + '@udecode/slate-react': 21.0.0(react-dom@18.2.0)(react@18.2.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) + '@udecode/slate-utils': 21.0.0(slate-history@0.93.0)(slate@0.94.1) + '@udecode/utils': 19.7.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + slate: 0.94.1 + slate-history: 0.93.0(slate@0.94.1) + slate-react: 0.94.2(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) + transitivePeerDependencies: + - '@babel/core' + - '@babel/template' + - '@types/react' + - jotai-devtools + - jotai-immer + - jotai-optics + - jotai-redux + - jotai-tanstack-query + - jotai-urql + - jotai-valtio + - jotai-xstate + - jotai-zustand + - react-native + - scheduler + dev: false + /@udecode/plate-utils@21.1.5(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1): resolution: {integrity: sha512-zl91oxLieSlUm4Vm4kzKdHl0jYhX+8wUWa+dukZ0cYFjse9GGLVROdFITdoUDpd7NUV1Mu7R6y+sbm7M1kW3Pg==} peerDependencies: @@ -9393,8 +9447,8 @@ packages: - scheduler dev: false - /@udecode/plate-utils@24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): - resolution: {integrity: sha512-mVMv1YHv8lZLUds/UF0XvF7jX73QWT1ngNGl7O/pgSdz/BfOCbxEXo3RZHRcG/uwx4ltsO0LOFhXtcYLK71qiQ==} + /@udecode/plate-utils@30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1): + resolution: {integrity: sha512-Zd9PlkkJAM6tDANeoNsCDFFz70RbpMEDNukHSTTkINeZ+cygqxouM6SHh4UiKPqC6/f0IIu63Tj1RlukD8m50w==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -9403,11 +9457,11 @@ packages: slate-hyperscript: '>=0.66.0' slate-react: '>=0.99.0' dependencies: - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.15)(react@18.2.0) - '@udecode/plate-core': 24.4.0(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/slate': 24.3.6(slate-history@0.93.0)(slate@0.94.1) - '@udecode/slate-react': 24.4.0(react-dom@18.2.0)(react@18.2.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1) - '@udecode/slate-utils': 24.3.6(slate-history@0.93.0)(slate@0.94.1) + '@udecode/plate-core': 30.1.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/react-utils': 29.0.1(react-dom@18.2.0)(react@18.2.0) + '@udecode/slate': 25.0.0(slate-history@0.93.0)(slate@0.94.1) + '@udecode/slate-react': 29.0.1(react-dom@18.2.0)(react@18.2.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1) + '@udecode/slate-utils': 25.0.0(slate-history@0.93.0)(slate@0.94.1) '@udecode/utils': 24.3.0 clsx: 1.2.1 lodash: 4.17.21 @@ -9418,18 +9472,25 @@ packages: slate-hyperscript: 0.77.0(slate@0.94.1) slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) transitivePeerDependencies: - - '@babel/core' - - '@babel/template' - '@types/react' - - '@urql/core' - immer - - optics-ts - react-native - - react-query - scheduler - - valtio - - wonka - - xstate + dev: false + + /@udecode/react-utils@29.0.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-+bFJFTDsWArFaC4AZFap0VdCvEbu5ZA16avj4xjjdBBho4TiHOZ7RMDliwTUetA3DOm5LG02dmZ1U4ORNC0m3w==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.15)(react@18.2.0) + '@udecode/utils': 24.3.0 + clsx: 1.2.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' dev: false /@udecode/slate-react@21.0.0(react-dom@18.2.0)(react@18.2.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1): @@ -9468,8 +9529,8 @@ packages: slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) dev: false - /@udecode/slate-react@24.4.0(react-dom@18.2.0)(react@18.2.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1): - resolution: {integrity: sha512-qQ+k6j5a5n0NIVGhgCpK8AbAFN+dxYtQLvbQEIoqr4vWtq9zR9PvJTuPurD8UWATt+ngJ7B1gC6bvSwMh8Uikg==} + /@udecode/slate-react@29.0.1(react-dom@18.2.0)(react@18.2.0)(slate-history@0.93.0)(slate-react@0.99.0)(slate@0.94.1): + resolution: {integrity: sha512-DOiGXxfL43tVyNg0LneTQGQBW/HkF2srwIM8b0Al/x082HHfo2PP2WkFqPqTh1uGUAa2RBRh9xFKmNkKeuyWSw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -9477,13 +9538,16 @@ packages: slate-history: '>=0.93.0' slate-react: '>=0.99.0' dependencies: - '@udecode/slate': 24.3.6(slate-history@0.93.0)(slate@0.94.1) + '@udecode/react-utils': 29.0.1(react-dom@18.2.0)(react@18.2.0) + '@udecode/slate': 25.0.0(slate-history@0.93.0)(slate@0.94.1) '@udecode/utils': 24.3.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) slate: 0.94.1 slate-history: 0.93.0(slate@0.94.1) slate-react: 0.99.0(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) + transitivePeerDependencies: + - '@types/react' dev: false /@udecode/slate-utils@21.0.0(slate-history@0.93.0)(slate@0.94.1): @@ -9499,13 +9563,13 @@ packages: slate-history: 0.93.0(slate@0.94.1) dev: false - /@udecode/slate-utils@24.3.6(slate-history@0.93.0)(slate@0.94.1): - resolution: {integrity: sha512-bYyj0UYn6pWF1jqraWNQFxhLnUsPcbgrv6MDDKu6I8RlUkrc/ykGaRSoQLwJdRaRmLc4xivUrOnJXLyMfadqLQ==} + /@udecode/slate-utils@25.0.0(slate-history@0.93.0)(slate@0.94.1): + resolution: {integrity: sha512-H8dECl5Tu44Nt946rkSXCJ1yzsc2R9GXSoA9oNIBmcyNo3jTHZOyG/Ocn3RGgfzAK996A43GBD/keNabJEPtQg==} peerDependencies: slate: '>=0.94.0' slate-history: '>=0.93.0' dependencies: - '@udecode/slate': 24.3.6(slate-history@0.93.0)(slate@0.94.1) + '@udecode/slate': 25.0.0(slate-history@0.93.0)(slate@0.94.1) '@udecode/utils': 24.3.0 lodash: 4.17.21 slate: 0.94.1 @@ -9523,8 +9587,8 @@ packages: slate-history: 0.93.0(slate@0.94.1) dev: false - /@udecode/slate@24.3.6(slate-history@0.93.0)(slate@0.94.1): - resolution: {integrity: sha512-NfIR4Qkndoba/Ncw+nZ4fNPcd/F+mAHtoOqunRtZR5HdOJN1uBGnSK39duvZST/iB78nPueAVG5hrZ3awGcb4w==} + /@udecode/slate@25.0.0(slate-history@0.93.0)(slate@0.94.1): + resolution: {integrity: sha512-mGb9nMDwIygLqERwJ8kTOfo3wIxMQ0xLJEPKn09jrshEIxUCyO3mYj8y/5vOMcrzj6yexOsgQ6VNX8ylS3lnIQ==} peerDependencies: slate: '>=0.94.0' slate-history: '>=0.93.0' @@ -10441,10 +10505,6 @@ packages: babel-plugin-jsx-dom-expressions: 0.36.18(@babel/core@7.22.9) dev: true - /bail@1.0.5: - resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} - dev: false - /bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -10786,25 +10846,13 @@ packages: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} dev: true - /character-entities-legacy@1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - dev: false - /character-entities-legacy@3.0.0: resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} dev: true - /character-entities@1.2.4: - resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} - dev: false - /character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - /character-reference-invalid@1.1.4: - resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} - dev: false - /character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} dev: true @@ -13960,6 +14008,10 @@ packages: resolution: {integrity: sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==} dev: false + /immer@10.0.3: + resolution: {integrity: sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==} + dev: false + /immer@9.0.21: resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} dev: false @@ -14136,21 +14188,10 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - dev: false - /is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} dev: true - /is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - dependencies: - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - dev: false - /is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} dependencies: @@ -14205,6 +14246,7 @@ packages: /is-buffer@2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} + dev: true /is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} @@ -14228,10 +14270,6 @@ packages: dependencies: has-tostringtag: 1.0.0 - /is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - dev: false - /is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} dev: true @@ -14277,10 +14315,6 @@ packages: dependencies: is-extglob: 2.1.1 - /is-hexadecimal@1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - dev: false - /is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} dev: true @@ -14344,11 +14378,6 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - /is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - dev: false - /is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -14953,6 +14982,32 @@ packages: resolution: {integrity: sha512-IY73F228OXRl9ar3jJagh7Vnuhj/GzBunPiZP13K0lOl7Am9SoWW3kEzq3MCllJMTtZqHTiDXQvoRd4U95aU6A==} dev: false + /jotai-optics@0.3.1(jotai@2.6.3)(optics-ts@2.4.1): + resolution: {integrity: sha512-KibUx9IneM2hGWGIYGs/v0KCxU985lg7W2c6dt5RodJCB2XPbmok8rkkLmdVk9+fKsn2shkPMi+AG8XzHgB3+w==} + peerDependencies: + jotai: '>=1.11.0' + optics-ts: '*' + dependencies: + jotai: 2.6.3(react@18.2.0) + optics-ts: 2.4.1 + dev: false + + /jotai-x@1.2.1(jotai@2.6.3)(react@18.2.0): + resolution: {integrity: sha512-4Sgx+pCLL23+La+9XA42UAratW+PIwYCqUj58WgGlxmifagJ+q+fzNi0TIjdAwB9grUS62fwGioW36Rza9xi3w==} + peerDependencies: + '@types/react': '>=17.0.0' + jotai: '>=2.0.0' + react: '>=17.0.0' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + dependencies: + jotai: 2.6.3(react@18.2.0) + react: 18.2.0 + dev: false + /jotai@1.13.1(@babel/core@7.22.9)(react@18.2.0): resolution: {integrity: sha512-RUmH1S4vLsG3V6fbGlKzGJnLrDcC/HNb5gH2AeA9DzuJknoVxSGvvg8OBB7lke+gDc4oXmdVsaKn/xDUhWZ0vw==} engines: {node: '>=12.20.0'} @@ -14997,38 +15052,16 @@ packages: react: 18.2.0 dev: false - /jotai@1.7.2(react@18.2.0): - resolution: {integrity: sha512-ksvpW1Wu+/HwW1iDYq23PpXLu2df5Vv+eWw70jRAx7IEY4c+qRsORULnqPFurSy/X8LSoPcRhVDJx/cyf8jjMg==} - engines: {node: '>=12.7.0'} + /jotai@2.6.3(react@18.2.0): + resolution: {integrity: sha512-0htSJ2d6426ZdSEYHncJHXY6Lkgde1Hc2HE/ADIRi9d2L3hQL+jLKY1LkWBMeCNyOSlKH8+1u/Gc33Ox0uq21Q==} + engines: {node: '>=12.20.0'} peerDependencies: - '@babel/core': '*' - '@babel/template': '*' - '@urql/core': '*' - immer: '*' - optics-ts: '*' - react: '>=16.8' - react-query: '*' - valtio: '*' - wonka: '*' - xstate: '*' + '@types/react': '>=17.0.0' + react: '>=17.0.0' peerDependenciesMeta: - '@babel/core': + '@types/react': optional: true - '@babel/template': - optional: true - '@urql/core': - optional: true - immer: - optional: true - optics-ts: - optional: true - react-query: - optional: true - valtio: - optional: true - wonka: - optional: true - xstate: + react: optional: true dependencies: react: 18.2.0 @@ -15375,6 +15408,10 @@ packages: /lodash.kebabcase@4.1.1: resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + /lodash.mapvalues@4.6.0: + resolution: {integrity: sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==} + dev: false + /lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} dev: true @@ -15518,18 +15555,6 @@ packages: unist-util-visit-parents: 5.1.3 dev: true - /mdast-util-from-markdown@0.8.5: - resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} - dependencies: - '@types/mdast': 3.0.13 - mdast-util-to-string: 2.0.0 - micromark: 2.11.4 - parse-entities: 2.0.0 - unist-util-stringify-position: 2.0.3 - transitivePeerDependencies: - - supports-color - dev: false - /mdast-util-from-markdown@1.3.1: resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} dependencies: @@ -15728,10 +15753,6 @@ packages: zwitch: 2.0.4 dev: true - /mdast-util-to-string@2.0.0: - resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} - dev: false - /mdast-util-to-string@3.2.0: resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} dependencies: @@ -16269,15 +16290,6 @@ packages: resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} dev: false - /micromark@2.11.4: - resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} - dependencies: - debug: 4.3.4 - parse-entities: 2.0.0 - transitivePeerDependencies: - - supports-color - dev: false - /micromark@3.2.0: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: @@ -17241,6 +17253,10 @@ packages: oidc-token-hash: 5.0.3 dev: false + /optics-ts@2.4.1: + resolution: {integrity: sha512-HaYzMHvC80r7U/LqAd4hQyopDezC60PO2qF5GuIwALut2cl5rK1VWHsqTp0oqoJJWjiv6uXKqsO+Q2OO0C3MmQ==} + dev: false + /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -17366,17 +17382,6 @@ packages: dependencies: callsites: 3.1.0 - /parse-entities@2.0.0: - resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} - dependencies: - character-entities: 1.2.4 - character-entities-legacy: 1.1.4 - character-reference-invalid: 1.1.4 - is-alphanumerical: 1.0.4 - is-decimal: 1.0.4 - is-hexadecimal: 1.0.4 - dev: false - /parse-entities@4.0.1: resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} dependencies: @@ -18752,14 +18757,6 @@ packages: - supports-color dev: false - /remark-parse@9.0.0: - resolution: {integrity: sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==} - dependencies: - mdast-util-from-markdown: 0.8.5 - transitivePeerDependencies: - - supports-color - dev: false - /remark-rehype@11.0.0: resolution: {integrity: sha512-vx8x2MDMcxuE4lBmQ46zYUDfcFMmvg80WYX+UNLeG6ixjdCCLcw1lrgAukwBTuOFsS78eoAedHGn9sNM0w7TPw==} dependencies: @@ -20210,10 +20207,6 @@ packages: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} dev: false - /trough@1.0.5: - resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} - dev: false - /trough@2.1.0: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} @@ -20655,18 +20648,6 @@ packages: vfile: 6.0.1 dev: false - /unified@9.2.2: - resolution: {integrity: sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==} - dependencies: - '@types/unist': 2.0.8 - bail: 1.0.5 - extend: 3.0.2 - is-buffer: 2.0.5 - is-plain-obj: 2.1.0 - trough: 1.0.5 - vfile: 4.2.1 - dev: false - /union@0.5.0: resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==} engines: {node: '>= 0.8.0'} @@ -20719,12 +20700,6 @@ packages: unist-util-visit-parents: 5.1.3 dev: true - /unist-util-stringify-position@2.0.3: - resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} - dependencies: - '@types/unist': 2.0.8 - dev: false - /unist-util-stringify-position@3.0.3: resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} dependencies: @@ -20975,13 +20950,6 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - /vfile-message@2.0.4: - resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} - dependencies: - '@types/unist': 2.0.8 - unist-util-stringify-position: 2.0.3 - dev: false - /vfile-message@3.1.4: resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} dependencies: @@ -20995,15 +20963,6 @@ packages: '@types/unist': 3.0.2 unist-util-stringify-position: 4.0.0 - /vfile@4.2.1: - resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} - dependencies: - '@types/unist': 2.0.8 - is-buffer: 2.0.5 - unist-util-stringify-position: 2.0.3 - vfile-message: 2.0.4 - dev: false - /vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} dependencies: @@ -21480,6 +21439,22 @@ packages: /zod@3.22.4: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + /zustand-x@3.0.2(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(zustand@4.5.0): + resolution: {integrity: sha512-tb4qMWbmgrWEdemb+LlrJiHI1ZMxwlQNz7jDHN5iA/vmU8xlpAX80MQZ2FNLP2KejBFEnsA1RWRAO/0D5O0rPw==} + peerDependencies: + zustand: '>=4.3.9' + dependencies: + immer: 10.0.3 + lodash.mapvalues: 4.6.0 + react-tracked: 1.7.11(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0) + zustand: 4.5.0(@types/react@18.2.15)(immer@10.0.2)(react@18.2.0) + transitivePeerDependencies: + - react + - react-dom + - react-native + - scheduler + dev: false + /zustand@3.7.2(react@18.2.0): resolution: {integrity: sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==} engines: {node: '>=12.7.0'}