@platejs/ai 51.0.1 → 51.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{getEditorPrompt-C7EEuMw8.d.mts → getEditorPrompt-C6prTxft.d.mts} +4 -4
- package/dist/{getEditorPrompt-C7EEuMw8.d.ts → getEditorPrompt-C6prTxft.d.ts} +4 -4
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +1 -1
- package/dist/react/index.d.mts +6 -6
- package/dist/react/index.d.ts +6 -6
- package/dist/react/index.js +150 -177
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +160 -179
- package/dist/react/index.mjs.map +1 -1
- package/package.json +6 -6
|
@@ -37,16 +37,16 @@ type AIToolName = 'comment' | 'edit' | 'generate' | null;
|
|
|
37
37
|
type AIMode = 'chat' | 'insert';
|
|
38
38
|
|
|
39
39
|
type EditorPrompt = ((params: EditorPromptParams) => string) | PromptConfig | string;
|
|
40
|
-
|
|
40
|
+
type EditorPromptParams = {
|
|
41
41
|
editor: SlateEditor;
|
|
42
42
|
isBlockSelecting: boolean;
|
|
43
43
|
isSelecting: boolean;
|
|
44
|
-
}
|
|
45
|
-
|
|
44
|
+
};
|
|
45
|
+
type PromptConfig = {
|
|
46
46
|
default: string;
|
|
47
47
|
blockSelecting?: string;
|
|
48
48
|
selecting?: string;
|
|
49
|
-
}
|
|
49
|
+
};
|
|
50
50
|
declare const getEditorPrompt: (editor: SlateEditor, { prompt, }: {
|
|
51
51
|
prompt?: EditorPrompt;
|
|
52
52
|
}) => string;
|
|
@@ -37,16 +37,16 @@ type AIToolName = 'comment' | 'edit' | 'generate' | null;
|
|
|
37
37
|
type AIMode = 'chat' | 'insert';
|
|
38
38
|
|
|
39
39
|
type EditorPrompt = ((params: EditorPromptParams) => string) | PromptConfig | string;
|
|
40
|
-
|
|
40
|
+
type EditorPromptParams = {
|
|
41
41
|
editor: SlateEditor;
|
|
42
42
|
isBlockSelecting: boolean;
|
|
43
43
|
isSelecting: boolean;
|
|
44
|
-
}
|
|
45
|
-
|
|
44
|
+
};
|
|
45
|
+
type PromptConfig = {
|
|
46
46
|
default: string;
|
|
47
47
|
blockSelecting?: string;
|
|
48
48
|
selecting?: string;
|
|
49
|
-
}
|
|
49
|
+
};
|
|
50
50
|
declare const getEditorPrompt: (editor: SlateEditor, { prompt, }: {
|
|
51
51
|
prompt?: EditorPrompt;
|
|
52
52
|
}) => string;
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { b as AIMode, A as AIToolName, a as BaseAIPlugin, B as BaseAIPluginConfig, E as EditorPrompt, d as EditorPromptParams, P as PromptConfig, g as getEditorPrompt, i as insertAINodes, r as removeAIMarks, c as removeAINodes } from './getEditorPrompt-
|
|
1
|
+
export { b as AIMode, A as AIToolName, a as BaseAIPlugin, B as BaseAIPluginConfig, E as EditorPrompt, d as EditorPromptParams, P as PromptConfig, g as getEditorPrompt, i as insertAINodes, r as removeAIMarks, c as removeAINodes } from './getEditorPrompt-C6prTxft.mjs';
|
|
2
2
|
import { SlateEditor, History } from 'platejs';
|
|
3
3
|
|
|
4
4
|
declare const undoAI: (editor: SlateEditor) => void;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { b as AIMode, A as AIToolName, a as BaseAIPlugin, B as BaseAIPluginConfig, E as EditorPrompt, d as EditorPromptParams, P as PromptConfig, g as getEditorPrompt, i as insertAINodes, r as removeAIMarks, c as removeAINodes } from './getEditorPrompt-
|
|
1
|
+
export { b as AIMode, A as AIToolName, a as BaseAIPlugin, B as BaseAIPluginConfig, E as EditorPrompt, d as EditorPromptParams, P as PromptConfig, g as getEditorPrompt, i as insertAINodes, r as removeAIMarks, c as removeAINodes } from './getEditorPrompt-C6prTxft.js';
|
|
2
2
|
import { SlateEditor, History } from 'platejs';
|
|
3
3
|
|
|
4
4
|
declare const undoAI: (editor: SlateEditor) => void;
|
package/dist/index.js
CHANGED
|
@@ -121,11 +121,11 @@ var createPromptFromConfig = (config, params) => {
|
|
|
121
121
|
const { isBlockSelecting, isSelecting: isSelecting2 } = params;
|
|
122
122
|
if (isBlockSelecting && config.blockSelecting) {
|
|
123
123
|
return config.blockSelecting ?? config.default;
|
|
124
|
-
}
|
|
124
|
+
}
|
|
125
|
+
if (isSelecting2 && config.selecting) {
|
|
125
126
|
return config.selecting ?? config.default;
|
|
126
|
-
} else {
|
|
127
|
-
return config.default;
|
|
128
127
|
}
|
|
128
|
+
return config.default;
|
|
129
129
|
};
|
|
130
130
|
var getEditorPrompt = (editor, {
|
|
131
131
|
prompt = ""
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/lib/BaseAIPlugin.ts","../src/lib/transforms/insertAINodes.ts","../src/lib/transforms/removeAIMarks.ts","../src/lib/transforms/removeAINodes.ts","../src/lib/transforms/undoAI.ts","../src/lib/transforms/withAIBatch.ts","../src/lib/utils/getEditorPrompt.ts","../src/lib/utils/getMarkdown.ts","../src/lib/utils/replacePlaceholders.ts"],"sourcesContent":["/**\n * @file Automatically generated by barrelsby.\n */\n\nexport * from './lib/index';\n","import {\n type OmitFirst,\n type PluginConfig,\n bindFirst,\n createTSlatePlugin,\n KEYS,\n} from 'platejs';\n\nimport { removeAIMarks, undoAI } from './transforms';\nimport { insertAINodes } from './transforms/insertAINodes';\nimport { removeAINodes } from './transforms/removeAINodes';\n\nexport type BaseAIPluginConfig = PluginConfig<\n 'ai',\n {},\n {},\n {\n ai: {\n insertNodes: OmitFirst<typeof insertAINodes>;\n removeMarks: OmitFirst<typeof removeAIMarks>;\n removeNodes: OmitFirst<typeof removeAINodes>;\n };\n }\n>;\n\nexport const BaseAIPlugin = createTSlatePlugin({\n key: KEYS.ai,\n node: { isDecoration: false, isLeaf: true },\n}).extendTransforms(({ editor }) => ({\n insertNodes: bindFirst(insertAINodes, editor),\n removeMarks: bindFirst(removeAIMarks, editor),\n removeNodes: bindFirst(removeAINodes, editor),\n undo: bindFirst(undoAI, editor),\n}));\n","import type { Descendant, Path, SlateEditor } from 'platejs';\n\nexport const insertAINodes = (\n editor: SlateEditor,\n nodes: Descendant[],\n {\n target,\n }: {\n target?: Path;\n } = {}\n) => {\n if (!target && !editor.selection?.focus.path) return;\n\n const aiNodes = nodes.map((node) => ({\n ...node,\n ai: true,\n }));\n\n editor.tf.withoutNormalizing(() => {\n editor.tf.insertNodes(aiNodes, {\n at: editor.api.end(target || editor.selection!.focus.path),\n select: true,\n });\n editor.tf.collapse({ edge: 'end' });\n });\n};\n","import { type SlateEditor, type TLocation, getPluginType, KEYS } from 'platejs';\n\nexport const removeAIMarks = (\n editor: SlateEditor,\n { at = [] }: { at?: TLocation } = {}\n) => {\n const nodeType = getPluginType(editor, KEYS.ai);\n\n editor.tf.unsetNodes(nodeType, {\n at,\n match: (n) => (n as any)[nodeType],\n });\n};\n","import { type Path, type SlateEditor, TextApi } from 'platejs';\n\nexport const removeAINodes = (\n editor: SlateEditor,\n { at = [] }: { at?: Path } = {}\n) => {\n editor.tf.removeNodes({\n at,\n match: (n) => TextApi.isText(n) && !!(n as any).ai,\n });\n};\n","import type { SlateEditor } from 'platejs';\n\nimport { getTransientSuggestionKey } from '@platejs/suggestion';\n\nexport const undoAI = (editor: SlateEditor) => {\n const hasAINodeOrAISuggestion =\n editor.api.some({\n at: [],\n match: (n) => !!(n as any).ai,\n }) ||\n editor.api.some({\n at: [],\n match: (n) => !!n[getTransientSuggestionKey()],\n });\n\n if ((editor.history.undos.at(-1) as any)?.ai && hasAINodeOrAISuggestion) {\n editor.undo();\n editor.history.redos.pop();\n }\n};\n","import type { History, SlateEditor } from 'platejs';\n\nexport type AIBatch = History['undos'][number] & { ai?: boolean };\n\nexport const withAIBatch = (\n editor: SlateEditor,\n fn: () => void,\n {\n split,\n }: {\n split?: boolean;\n } = {}\n) => {\n if (split) {\n editor.tf.withNewBatch(fn);\n } else {\n editor.tf.withMerging(fn);\n }\n\n const lastBatch = editor.history.undos?.at(-1) as AIBatch | undefined;\n\n if (lastBatch) {\n lastBatch.ai = true;\n }\n};\n","import { isSelecting } from '@platejs/selection';\nimport { type SlateEditor, KEYS } from 'platejs';\n\nexport type EditorPrompt =\n | ((params: EditorPromptParams) => string)\n | PromptConfig\n | string;\n\nexport interface EditorPromptParams {\n editor: SlateEditor;\n isBlockSelecting: boolean;\n isSelecting: boolean;\n}\n\nexport interface PromptConfig {\n default: string;\n blockSelecting?: string;\n selecting?: string;\n}\n\nconst createPromptFromConfig = (\n config: PromptConfig,\n params: EditorPromptParams\n): string => {\n const { isBlockSelecting, isSelecting } = params;\n\n if (isBlockSelecting && config.blockSelecting) {\n return config.blockSelecting ?? config.default;\n } else if (isSelecting && config.selecting) {\n return config.selecting ?? config.default;\n } else {\n return config.default;\n }\n};\n\nexport const getEditorPrompt = (\n editor: SlateEditor,\n {\n prompt = '',\n }: {\n prompt?: EditorPrompt;\n }\n): string => {\n const params: EditorPromptParams = {\n editor,\n isBlockSelecting: editor.getOption(\n { key: KEYS.blockSelection },\n 'isSelectingSome'\n ),\n isSelecting: isSelecting(editor),\n };\n\n let promptText = '';\n\n if (typeof prompt === 'function') {\n promptText = prompt(params);\n } else if (typeof prompt === 'object') {\n promptText = createPromptFromConfig(prompt, params);\n } else {\n promptText = prompt;\n }\n\n return promptText;\n};\n","import { serializeMd } from '@platejs/markdown';\nimport { type SlateEditor, type TElement, KEYS } from 'platejs';\n\nimport type { MarkdownType } from './replacePlaceholders';\n\n// Internal\nexport const getMarkdown = (\n editor: SlateEditor,\n {\n type,\n }: {\n type: MarkdownType;\n }\n) => {\n if (type === 'editor' || type === 'editorWithBlockId') {\n return serializeMd(editor, {\n withBlockId: type === 'editorWithBlockId',\n });\n }\n\n if (type === 'block' || type === 'blockWithBlockId') {\n const blocks = editor.api.blocks({ mode: 'highest' }).map(([node]) => node);\n\n return serializeMd(editor, {\n value: blocks,\n withBlockId: type === 'blockWithBlockId',\n });\n }\n\n if (type === 'blockSelection' || type === 'blockSelectionWithBlockId') {\n const fragment = editor.api.fragment<TElement>();\n\n // Remove any block formatting\n if (fragment.length === 1) {\n const modifiedFragment = [\n {\n children: fragment[0].children,\n type: KEYS.p,\n },\n ];\n\n return serializeMd(editor, {\n value: modifiedFragment,\n withBlockId: type === 'blockSelectionWithBlockId',\n });\n }\n\n return serializeMd(editor, {\n value: fragment,\n withBlockId: type === 'blockSelectionWithBlockId',\n });\n }\n\n return '';\n};\n","import type { SlateEditor } from 'platejs';\n\nimport { getMarkdown } from './getMarkdown';\n\nexport type MarkdownType =\n | 'block'\n | 'blockSelection'\n | 'blockSelectionWithBlockId'\n | 'blockWithBlockId'\n | 'editor'\n | 'editorWithBlockId';\n\nexport const replacePlaceholders = (\n editor: SlateEditor,\n text: string,\n {\n prompt,\n }: {\n prompt?: string;\n } = {}\n): string => {\n let result = text.replace('{prompt}', prompt || '');\n\n const placeholders: Record<string, MarkdownType> = {\n '{blockSelectionWithBlockId}': 'blockSelectionWithBlockId',\n '{blockSelection}': 'blockSelection',\n '{blockWithBlockId}': 'blockWithBlockId',\n '{block}': 'block',\n '{editorWithBlockId}': 'editorWithBlockId',\n '{editor}': 'editor',\n };\n\n Object.entries(placeholders).forEach(([placeholder, type]) => {\n if (result.includes(placeholder)) {\n result = result.replace(placeholder, getMarkdown(editor, { type }));\n }\n });\n\n return result;\n};\n"],"mappings":"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","names":["import_platejs","import_platejs","import_platejs","isSelecting","import_platejs"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/lib/BaseAIPlugin.ts","../src/lib/transforms/insertAINodes.ts","../src/lib/transforms/removeAIMarks.ts","../src/lib/transforms/removeAINodes.ts","../src/lib/transforms/undoAI.ts","../src/lib/transforms/withAIBatch.ts","../src/lib/utils/getEditorPrompt.ts","../src/lib/utils/getMarkdown.ts","../src/lib/utils/replacePlaceholders.ts"],"sourcesContent":["/**\n * @file Automatically generated by barrelsby.\n */\n\nexport * from './lib/index';\n","import {\n type OmitFirst,\n type PluginConfig,\n bindFirst,\n createTSlatePlugin,\n KEYS,\n} from 'platejs';\n\nimport { removeAIMarks, undoAI } from './transforms';\nimport { insertAINodes } from './transforms/insertAINodes';\nimport { removeAINodes } from './transforms/removeAINodes';\n\nexport type BaseAIPluginConfig = PluginConfig<\n 'ai',\n {},\n {},\n {\n ai: {\n insertNodes: OmitFirst<typeof insertAINodes>;\n removeMarks: OmitFirst<typeof removeAIMarks>;\n removeNodes: OmitFirst<typeof removeAINodes>;\n };\n }\n>;\n\nexport const BaseAIPlugin = createTSlatePlugin({\n key: KEYS.ai,\n node: { isDecoration: false, isLeaf: true },\n}).extendTransforms(({ editor }) => ({\n insertNodes: bindFirst(insertAINodes, editor),\n removeMarks: bindFirst(removeAIMarks, editor),\n removeNodes: bindFirst(removeAINodes, editor),\n undo: bindFirst(undoAI, editor),\n}));\n","import type { Descendant, Path, SlateEditor } from 'platejs';\n\nexport const insertAINodes = (\n editor: SlateEditor,\n nodes: Descendant[],\n {\n target,\n }: {\n target?: Path;\n } = {}\n) => {\n if (!target && !editor.selection?.focus.path) return;\n\n const aiNodes = nodes.map((node) => ({\n ...node,\n ai: true,\n }));\n\n editor.tf.withoutNormalizing(() => {\n editor.tf.insertNodes(aiNodes, {\n at: editor.api.end(target || editor.selection!.focus.path),\n select: true,\n });\n editor.tf.collapse({ edge: 'end' });\n });\n};\n","import { type SlateEditor, type TLocation, getPluginType, KEYS } from 'platejs';\n\nexport const removeAIMarks = (\n editor: SlateEditor,\n { at = [] }: { at?: TLocation } = {}\n) => {\n const nodeType = getPluginType(editor, KEYS.ai);\n\n editor.tf.unsetNodes(nodeType, {\n at,\n match: (n) => (n as any)[nodeType],\n });\n};\n","import { type Path, type SlateEditor, TextApi } from 'platejs';\n\nexport const removeAINodes = (\n editor: SlateEditor,\n { at = [] }: { at?: Path } = {}\n) => {\n editor.tf.removeNodes({\n at,\n match: (n) => TextApi.isText(n) && !!(n as any).ai,\n });\n};\n","import type { SlateEditor } from 'platejs';\n\nimport { getTransientSuggestionKey } from '@platejs/suggestion';\n\nexport const undoAI = (editor: SlateEditor) => {\n const hasAINodeOrAISuggestion =\n editor.api.some({\n at: [],\n match: (n) => !!(n as any).ai,\n }) ||\n editor.api.some({\n at: [],\n match: (n) => !!n[getTransientSuggestionKey()],\n });\n\n if ((editor.history.undos.at(-1) as any)?.ai && hasAINodeOrAISuggestion) {\n editor.undo();\n editor.history.redos.pop();\n }\n};\n","import type { History, SlateEditor } from 'platejs';\n\nexport type AIBatch = History['undos'][number] & { ai?: boolean };\n\nexport const withAIBatch = (\n editor: SlateEditor,\n fn: () => void,\n {\n split,\n }: {\n split?: boolean;\n } = {}\n) => {\n if (split) {\n editor.tf.withNewBatch(fn);\n } else {\n editor.tf.withMerging(fn);\n }\n\n const lastBatch = editor.history.undos?.at(-1) as AIBatch | undefined;\n\n if (lastBatch) {\n lastBatch.ai = true;\n }\n};\n","import { isSelecting } from '@platejs/selection';\nimport { type SlateEditor, KEYS } from 'platejs';\n\nexport type EditorPrompt =\n | ((params: EditorPromptParams) => string)\n | PromptConfig\n | string;\n\nexport type EditorPromptParams = {\n editor: SlateEditor;\n isBlockSelecting: boolean;\n isSelecting: boolean;\n};\n\nexport type PromptConfig = {\n default: string;\n blockSelecting?: string;\n selecting?: string;\n};\n\nconst createPromptFromConfig = (\n config: PromptConfig,\n params: EditorPromptParams\n): string => {\n const { isBlockSelecting, isSelecting } = params;\n\n if (isBlockSelecting && config.blockSelecting) {\n return config.blockSelecting ?? config.default;\n }\n if (isSelecting && config.selecting) {\n return config.selecting ?? config.default;\n }\n return config.default;\n};\n\nexport const getEditorPrompt = (\n editor: SlateEditor,\n {\n prompt = '',\n }: {\n prompt?: EditorPrompt;\n }\n): string => {\n const params: EditorPromptParams = {\n editor,\n isBlockSelecting: editor.getOption(\n { key: KEYS.blockSelection },\n 'isSelectingSome'\n ),\n isSelecting: isSelecting(editor),\n };\n\n let promptText = '';\n\n if (typeof prompt === 'function') {\n promptText = prompt(params);\n } else if (typeof prompt === 'object') {\n promptText = createPromptFromConfig(prompt, params);\n } else {\n promptText = prompt;\n }\n\n return promptText;\n};\n","import { serializeMd } from '@platejs/markdown';\nimport { type SlateEditor, type TElement, KEYS } from 'platejs';\n\nimport type { MarkdownType } from './replacePlaceholders';\n\n// Internal\nexport const getMarkdown = (\n editor: SlateEditor,\n {\n type,\n }: {\n type: MarkdownType;\n }\n) => {\n if (type === 'editor' || type === 'editorWithBlockId') {\n return serializeMd(editor, {\n withBlockId: type === 'editorWithBlockId',\n });\n }\n\n if (type === 'block' || type === 'blockWithBlockId') {\n const blocks = editor.api.blocks({ mode: 'highest' }).map(([node]) => node);\n\n return serializeMd(editor, {\n value: blocks,\n withBlockId: type === 'blockWithBlockId',\n });\n }\n\n if (type === 'blockSelection' || type === 'blockSelectionWithBlockId') {\n const fragment = editor.api.fragment<TElement>();\n\n // Remove any block formatting\n if (fragment.length === 1) {\n const modifiedFragment = [\n {\n children: fragment[0].children,\n type: KEYS.p,\n },\n ];\n\n return serializeMd(editor, {\n value: modifiedFragment,\n withBlockId: type === 'blockSelectionWithBlockId',\n });\n }\n\n return serializeMd(editor, {\n value: fragment,\n withBlockId: type === 'blockSelectionWithBlockId',\n });\n }\n\n return '';\n};\n","import type { SlateEditor } from 'platejs';\n\nimport { getMarkdown } from './getMarkdown';\n\nexport type MarkdownType =\n | 'block'\n | 'blockSelection'\n | 'blockSelectionWithBlockId'\n | 'blockWithBlockId'\n | 'editor'\n | 'editorWithBlockId';\n\nexport const replacePlaceholders = (\n editor: SlateEditor,\n text: string,\n {\n prompt,\n }: {\n prompt?: string;\n } = {}\n): string => {\n let result = text.replace('{prompt}', prompt || '');\n\n const placeholders: Record<string, MarkdownType> = {\n '{blockSelectionWithBlockId}': 'blockSelectionWithBlockId',\n '{blockSelection}': 'blockSelection',\n '{blockWithBlockId}': 'blockWithBlockId',\n '{block}': 'block',\n '{editorWithBlockId}': 'editorWithBlockId',\n '{editor}': 'editor',\n };\n\n Object.entries(placeholders).forEach(([placeholder, type]) => {\n if (result.includes(placeholder)) {\n result = result.replace(placeholder, getMarkdown(editor, { type }));\n }\n });\n\n return result;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,kBAMO;;;ACJA,IAAM,gBAAgB,CAC3B,QACA,OACA;AAAA,EACE;AACF,IAEI,CAAC,MACF;AACH,MAAI,CAAC,UAAU,CAAC,OAAO,WAAW,MAAM,KAAM;AAE9C,QAAM,UAAU,MAAM,IAAI,CAAC,UAAU;AAAA,IACnC,GAAG;AAAA,IACH,IAAI;AAAA,EACN,EAAE;AAEF,SAAO,GAAG,mBAAmB,MAAM;AACjC,WAAO,GAAG,YAAY,SAAS;AAAA,MAC7B,IAAI,OAAO,IAAI,IAAI,UAAU,OAAO,UAAW,MAAM,IAAI;AAAA,MACzD,QAAQ;AAAA,IACV,CAAC;AACD,WAAO,GAAG,SAAS,EAAE,MAAM,MAAM,CAAC;AAAA,EACpC,CAAC;AACH;;;ACzBA,qBAAsE;AAE/D,IAAM,gBAAgB,CAC3B,QACA,EAAE,KAAK,CAAC,EAAE,IAAwB,CAAC,MAChC;AACH,QAAM,eAAW,8BAAc,QAAQ,oBAAK,EAAE;AAE9C,SAAO,GAAG,WAAW,UAAU;AAAA,IAC7B;AAAA,IACA,OAAO,CAAC,MAAO,EAAU,QAAQ;AAAA,EACnC,CAAC;AACH;;;ACZA,IAAAC,kBAAqD;AAE9C,IAAM,gBAAgB,CAC3B,QACA,EAAE,KAAK,CAAC,EAAE,IAAmB,CAAC,MAC3B;AACH,SAAO,GAAG,YAAY;AAAA,IACpB;AAAA,IACA,OAAO,CAAC,MAAM,wBAAQ,OAAO,CAAC,KAAK,CAAC,CAAE,EAAU;AAAA,EAClD,CAAC;AACH;;;ACRA,wBAA0C;AAEnC,IAAM,SAAS,CAAC,WAAwB;AAC7C,QAAM,0BACJ,OAAO,IAAI,KAAK;AAAA,IACd,IAAI,CAAC;AAAA,IACL,OAAO,CAAC,MAAM,CAAC,CAAE,EAAU;AAAA,EAC7B,CAAC,KACD,OAAO,IAAI,KAAK;AAAA,IACd,IAAI,CAAC;AAAA,IACL,OAAO,CAAC,MAAM,CAAC,CAAC,MAAE,6CAA0B,CAAC;AAAA,EAC/C,CAAC;AAEH,MAAK,OAAO,QAAQ,MAAM,GAAG,EAAE,GAAW,MAAM,yBAAyB;AACvE,WAAO,KAAK;AACZ,WAAO,QAAQ,MAAM,IAAI;AAAA,EAC3B;AACF;;;ACfO,IAAM,cAAc,CACzB,QACA,IACA;AAAA,EACE;AACF,IAEI,CAAC,MACF;AACH,MAAI,OAAO;AACT,WAAO,GAAG,aAAa,EAAE;AAAA,EAC3B,OAAO;AACL,WAAO,GAAG,YAAY,EAAE;AAAA,EAC1B;AAEA,QAAM,YAAY,OAAO,QAAQ,OAAO,GAAG,EAAE;AAE7C,MAAI,WAAW;AACb,cAAU,KAAK;AAAA,EACjB;AACF;;;ALCO,IAAM,mBAAe,oCAAmB;AAAA,EAC7C,KAAK,qBAAK;AAAA,EACV,MAAM,EAAE,cAAc,OAAO,QAAQ,KAAK;AAC5C,CAAC,EAAE,iBAAiB,CAAC,EAAE,OAAO,OAAO;AAAA,EACnC,iBAAa,2BAAU,eAAe,MAAM;AAAA,EAC5C,iBAAa,2BAAU,eAAe,MAAM;AAAA,EAC5C,iBAAa,2BAAU,eAAe,MAAM;AAAA,EAC5C,UAAM,2BAAU,QAAQ,MAAM;AAChC,EAAE;;;AMjCF,uBAA4B;AAC5B,IAAAC,kBAAuC;AAmBvC,IAAM,yBAAyB,CAC7B,QACA,WACW;AACX,QAAM,EAAE,kBAAkB,aAAAC,aAAY,IAAI;AAE1C,MAAI,oBAAoB,OAAO,gBAAgB;AAC7C,WAAO,OAAO,kBAAkB,OAAO;AAAA,EACzC;AACA,MAAIA,gBAAe,OAAO,WAAW;AACnC,WAAO,OAAO,aAAa,OAAO;AAAA,EACpC;AACA,SAAO,OAAO;AAChB;AAEO,IAAM,kBAAkB,CAC7B,QACA;AAAA,EACE,SAAS;AACX,MAGW;AACX,QAAM,SAA6B;AAAA,IACjC;AAAA,IACA,kBAAkB,OAAO;AAAA,MACvB,EAAE,KAAK,qBAAK,eAAe;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,iBAAa,8BAAY,MAAM;AAAA,EACjC;AAEA,MAAI,aAAa;AAEjB,MAAI,OAAO,WAAW,YAAY;AAChC,iBAAa,OAAO,MAAM;AAAA,EAC5B,WAAW,OAAO,WAAW,UAAU;AACrC,iBAAa,uBAAuB,QAAQ,MAAM;AAAA,EACpD,OAAO;AACL,iBAAa;AAAA,EACf;AAEA,SAAO;AACT;;;AC/DA,sBAA4B;AAC5B,IAAAC,kBAAsD;AAK/C,IAAM,cAAc,CACzB,QACA;AAAA,EACE;AACF,MAGG;AACH,MAAI,SAAS,YAAY,SAAS,qBAAqB;AACrD,eAAO,6BAAY,QAAQ;AAAA,MACzB,aAAa,SAAS;AAAA,IACxB,CAAC;AAAA,EACH;AAEA,MAAI,SAAS,WAAW,SAAS,oBAAoB;AACnD,UAAM,SAAS,OAAO,IAAI,OAAO,EAAE,MAAM,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI;AAE1E,eAAO,6BAAY,QAAQ;AAAA,MACzB,OAAO;AAAA,MACP,aAAa,SAAS;AAAA,IACxB,CAAC;AAAA,EACH;AAEA,MAAI,SAAS,oBAAoB,SAAS,6BAA6B;AACrE,UAAM,WAAW,OAAO,IAAI,SAAmB;AAG/C,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,mBAAmB;AAAA,QACvB;AAAA,UACE,UAAU,SAAS,CAAC,EAAE;AAAA,UACtB,MAAM,qBAAK;AAAA,QACb;AAAA,MACF;AAEA,iBAAO,6BAAY,QAAQ;AAAA,QACzB,OAAO;AAAA,QACP,aAAa,SAAS;AAAA,MACxB,CAAC;AAAA,IACH;AAEA,eAAO,6BAAY,QAAQ;AAAA,MACzB,OAAO;AAAA,MACP,aAAa,SAAS;AAAA,IACxB,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;AC1CO,IAAM,sBAAsB,CACjC,QACA,MACA;AAAA,EACE;AACF,IAEI,CAAC,MACM;AACX,MAAI,SAAS,KAAK,QAAQ,YAAY,UAAU,EAAE;AAElD,QAAM,eAA6C;AAAA,IACjD,+BAA+B;AAAA,IAC/B,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,IACtB,WAAW;AAAA,IACX,uBAAuB;AAAA,IACvB,YAAY;AAAA,EACd;AAEA,SAAO,QAAQ,YAAY,EAAE,QAAQ,CAAC,CAAC,aAAa,IAAI,MAAM;AAC5D,QAAI,OAAO,SAAS,WAAW,GAAG;AAChC,eAAS,OAAO,QAAQ,aAAa,YAAY,QAAQ,EAAE,KAAK,CAAC,CAAC;AAAA,IACpE;AAAA,EACF,CAAC;AAED,SAAO;AACT;","names":["import_platejs","import_platejs","import_platejs","isSelecting","import_platejs"]}
|
package/dist/index.mjs
CHANGED
|
@@ -91,11 +91,11 @@ var createPromptFromConfig = (config, params) => {
|
|
|
91
91
|
const { isBlockSelecting, isSelecting: isSelecting2 } = params;
|
|
92
92
|
if (isBlockSelecting && config.blockSelecting) {
|
|
93
93
|
return config.blockSelecting ?? config.default;
|
|
94
|
-
}
|
|
94
|
+
}
|
|
95
|
+
if (isSelecting2 && config.selecting) {
|
|
95
96
|
return config.selecting ?? config.default;
|
|
96
|
-
} else {
|
|
97
|
-
return config.default;
|
|
98
97
|
}
|
|
98
|
+
return config.default;
|
|
99
99
|
};
|
|
100
100
|
var getEditorPrompt = (editor, {
|
|
101
101
|
prompt = ""
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/BaseAIPlugin.ts","../src/lib/transforms/insertAINodes.ts","../src/lib/transforms/removeAIMarks.ts","../src/lib/transforms/removeAINodes.ts","../src/lib/transforms/undoAI.ts","../src/lib/transforms/withAIBatch.ts","../src/lib/utils/getEditorPrompt.ts","../src/lib/utils/getMarkdown.ts","../src/lib/utils/replacePlaceholders.ts"],"sourcesContent":["import {\n type OmitFirst,\n type PluginConfig,\n bindFirst,\n createTSlatePlugin,\n KEYS,\n} from 'platejs';\n\nimport { removeAIMarks, undoAI } from './transforms';\nimport { insertAINodes } from './transforms/insertAINodes';\nimport { removeAINodes } from './transforms/removeAINodes';\n\nexport type BaseAIPluginConfig = PluginConfig<\n 'ai',\n {},\n {},\n {\n ai: {\n insertNodes: OmitFirst<typeof insertAINodes>;\n removeMarks: OmitFirst<typeof removeAIMarks>;\n removeNodes: OmitFirst<typeof removeAINodes>;\n };\n }\n>;\n\nexport const BaseAIPlugin = createTSlatePlugin({\n key: KEYS.ai,\n node: { isDecoration: false, isLeaf: true },\n}).extendTransforms(({ editor }) => ({\n insertNodes: bindFirst(insertAINodes, editor),\n removeMarks: bindFirst(removeAIMarks, editor),\n removeNodes: bindFirst(removeAINodes, editor),\n undo: bindFirst(undoAI, editor),\n}));\n","import type { Descendant, Path, SlateEditor } from 'platejs';\n\nexport const insertAINodes = (\n editor: SlateEditor,\n nodes: Descendant[],\n {\n target,\n }: {\n target?: Path;\n } = {}\n) => {\n if (!target && !editor.selection?.focus.path) return;\n\n const aiNodes = nodes.map((node) => ({\n ...node,\n ai: true,\n }));\n\n editor.tf.withoutNormalizing(() => {\n editor.tf.insertNodes(aiNodes, {\n at: editor.api.end(target || editor.selection!.focus.path),\n select: true,\n });\n editor.tf.collapse({ edge: 'end' });\n });\n};\n","import { type SlateEditor, type TLocation, getPluginType, KEYS } from 'platejs';\n\nexport const removeAIMarks = (\n editor: SlateEditor,\n { at = [] }: { at?: TLocation } = {}\n) => {\n const nodeType = getPluginType(editor, KEYS.ai);\n\n editor.tf.unsetNodes(nodeType, {\n at,\n match: (n) => (n as any)[nodeType],\n });\n};\n","import { type Path, type SlateEditor, TextApi } from 'platejs';\n\nexport const removeAINodes = (\n editor: SlateEditor,\n { at = [] }: { at?: Path } = {}\n) => {\n editor.tf.removeNodes({\n at,\n match: (n) => TextApi.isText(n) && !!(n as any).ai,\n });\n};\n","import type { SlateEditor } from 'platejs';\n\nimport { getTransientSuggestionKey } from '@platejs/suggestion';\n\nexport const undoAI = (editor: SlateEditor) => {\n const hasAINodeOrAISuggestion =\n editor.api.some({\n at: [],\n match: (n) => !!(n as any).ai,\n }) ||\n editor.api.some({\n at: [],\n match: (n) => !!n[getTransientSuggestionKey()],\n });\n\n if ((editor.history.undos.at(-1) as any)?.ai && hasAINodeOrAISuggestion) {\n editor.undo();\n editor.history.redos.pop();\n }\n};\n","import type { History, SlateEditor } from 'platejs';\n\nexport type AIBatch = History['undos'][number] & { ai?: boolean };\n\nexport const withAIBatch = (\n editor: SlateEditor,\n fn: () => void,\n {\n split,\n }: {\n split?: boolean;\n } = {}\n) => {\n if (split) {\n editor.tf.withNewBatch(fn);\n } else {\n editor.tf.withMerging(fn);\n }\n\n const lastBatch = editor.history.undos?.at(-1) as AIBatch | undefined;\n\n if (lastBatch) {\n lastBatch.ai = true;\n }\n};\n","import { isSelecting } from '@platejs/selection';\nimport { type SlateEditor, KEYS } from 'platejs';\n\nexport type EditorPrompt =\n | ((params: EditorPromptParams) => string)\n | PromptConfig\n | string;\n\nexport interface EditorPromptParams {\n editor: SlateEditor;\n isBlockSelecting: boolean;\n isSelecting: boolean;\n}\n\nexport interface PromptConfig {\n default: string;\n blockSelecting?: string;\n selecting?: string;\n}\n\nconst createPromptFromConfig = (\n config: PromptConfig,\n params: EditorPromptParams\n): string => {\n const { isBlockSelecting, isSelecting } = params;\n\n if (isBlockSelecting && config.blockSelecting) {\n return config.blockSelecting ?? config.default;\n } else if (isSelecting && config.selecting) {\n return config.selecting ?? config.default;\n } else {\n return config.default;\n }\n};\n\nexport const getEditorPrompt = (\n editor: SlateEditor,\n {\n prompt = '',\n }: {\n prompt?: EditorPrompt;\n }\n): string => {\n const params: EditorPromptParams = {\n editor,\n isBlockSelecting: editor.getOption(\n { key: KEYS.blockSelection },\n 'isSelectingSome'\n ),\n isSelecting: isSelecting(editor),\n };\n\n let promptText = '';\n\n if (typeof prompt === 'function') {\n promptText = prompt(params);\n } else if (typeof prompt === 'object') {\n promptText = createPromptFromConfig(prompt, params);\n } else {\n promptText = prompt;\n }\n\n return promptText;\n};\n","import { serializeMd } from '@platejs/markdown';\nimport { type SlateEditor, type TElement, KEYS } from 'platejs';\n\nimport type { MarkdownType } from './replacePlaceholders';\n\n// Internal\nexport const getMarkdown = (\n editor: SlateEditor,\n {\n type,\n }: {\n type: MarkdownType;\n }\n) => {\n if (type === 'editor' || type === 'editorWithBlockId') {\n return serializeMd(editor, {\n withBlockId: type === 'editorWithBlockId',\n });\n }\n\n if (type === 'block' || type === 'blockWithBlockId') {\n const blocks = editor.api.blocks({ mode: 'highest' }).map(([node]) => node);\n\n return serializeMd(editor, {\n value: blocks,\n withBlockId: type === 'blockWithBlockId',\n });\n }\n\n if (type === 'blockSelection' || type === 'blockSelectionWithBlockId') {\n const fragment = editor.api.fragment<TElement>();\n\n // Remove any block formatting\n if (fragment.length === 1) {\n const modifiedFragment = [\n {\n children: fragment[0].children,\n type: KEYS.p,\n },\n ];\n\n return serializeMd(editor, {\n value: modifiedFragment,\n withBlockId: type === 'blockSelectionWithBlockId',\n });\n }\n\n return serializeMd(editor, {\n value: fragment,\n withBlockId: type === 'blockSelectionWithBlockId',\n });\n }\n\n return '';\n};\n","import type { SlateEditor } from 'platejs';\n\nimport { getMarkdown } from './getMarkdown';\n\nexport type MarkdownType =\n | 'block'\n | 'blockSelection'\n | 'blockSelectionWithBlockId'\n | 'blockWithBlockId'\n | 'editor'\n | 'editorWithBlockId';\n\nexport const replacePlaceholders = (\n editor: SlateEditor,\n text: string,\n {\n prompt,\n }: {\n prompt?: string;\n } = {}\n): string => {\n let result = text.replace('{prompt}', prompt || '');\n\n const placeholders: Record<string, MarkdownType> = {\n '{blockSelectionWithBlockId}': 'blockSelectionWithBlockId',\n '{blockSelection}': 'blockSelection',\n '{blockWithBlockId}': 'blockWithBlockId',\n '{block}': 'block',\n '{editorWithBlockId}': 'editorWithBlockId',\n '{editor}': 'editor',\n };\n\n Object.entries(placeholders).forEach(([placeholder, type]) => {\n if (result.includes(placeholder)) {\n result = result.replace(placeholder, getMarkdown(editor, { type }));\n }\n });\n\n return result;\n};\n"],"mappings":"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","names":["KEYS","KEYS","KEYS","isSelecting","KEYS"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/BaseAIPlugin.ts","../src/lib/transforms/insertAINodes.ts","../src/lib/transforms/removeAIMarks.ts","../src/lib/transforms/removeAINodes.ts","../src/lib/transforms/undoAI.ts","../src/lib/transforms/withAIBatch.ts","../src/lib/utils/getEditorPrompt.ts","../src/lib/utils/getMarkdown.ts","../src/lib/utils/replacePlaceholders.ts"],"sourcesContent":["import {\n type OmitFirst,\n type PluginConfig,\n bindFirst,\n createTSlatePlugin,\n KEYS,\n} from 'platejs';\n\nimport { removeAIMarks, undoAI } from './transforms';\nimport { insertAINodes } from './transforms/insertAINodes';\nimport { removeAINodes } from './transforms/removeAINodes';\n\nexport type BaseAIPluginConfig = PluginConfig<\n 'ai',\n {},\n {},\n {\n ai: {\n insertNodes: OmitFirst<typeof insertAINodes>;\n removeMarks: OmitFirst<typeof removeAIMarks>;\n removeNodes: OmitFirst<typeof removeAINodes>;\n };\n }\n>;\n\nexport const BaseAIPlugin = createTSlatePlugin({\n key: KEYS.ai,\n node: { isDecoration: false, isLeaf: true },\n}).extendTransforms(({ editor }) => ({\n insertNodes: bindFirst(insertAINodes, editor),\n removeMarks: bindFirst(removeAIMarks, editor),\n removeNodes: bindFirst(removeAINodes, editor),\n undo: bindFirst(undoAI, editor),\n}));\n","import type { Descendant, Path, SlateEditor } from 'platejs';\n\nexport const insertAINodes = (\n editor: SlateEditor,\n nodes: Descendant[],\n {\n target,\n }: {\n target?: Path;\n } = {}\n) => {\n if (!target && !editor.selection?.focus.path) return;\n\n const aiNodes = nodes.map((node) => ({\n ...node,\n ai: true,\n }));\n\n editor.tf.withoutNormalizing(() => {\n editor.tf.insertNodes(aiNodes, {\n at: editor.api.end(target || editor.selection!.focus.path),\n select: true,\n });\n editor.tf.collapse({ edge: 'end' });\n });\n};\n","import { type SlateEditor, type TLocation, getPluginType, KEYS } from 'platejs';\n\nexport const removeAIMarks = (\n editor: SlateEditor,\n { at = [] }: { at?: TLocation } = {}\n) => {\n const nodeType = getPluginType(editor, KEYS.ai);\n\n editor.tf.unsetNodes(nodeType, {\n at,\n match: (n) => (n as any)[nodeType],\n });\n};\n","import { type Path, type SlateEditor, TextApi } from 'platejs';\n\nexport const removeAINodes = (\n editor: SlateEditor,\n { at = [] }: { at?: Path } = {}\n) => {\n editor.tf.removeNodes({\n at,\n match: (n) => TextApi.isText(n) && !!(n as any).ai,\n });\n};\n","import type { SlateEditor } from 'platejs';\n\nimport { getTransientSuggestionKey } from '@platejs/suggestion';\n\nexport const undoAI = (editor: SlateEditor) => {\n const hasAINodeOrAISuggestion =\n editor.api.some({\n at: [],\n match: (n) => !!(n as any).ai,\n }) ||\n editor.api.some({\n at: [],\n match: (n) => !!n[getTransientSuggestionKey()],\n });\n\n if ((editor.history.undos.at(-1) as any)?.ai && hasAINodeOrAISuggestion) {\n editor.undo();\n editor.history.redos.pop();\n }\n};\n","import type { History, SlateEditor } from 'platejs';\n\nexport type AIBatch = History['undos'][number] & { ai?: boolean };\n\nexport const withAIBatch = (\n editor: SlateEditor,\n fn: () => void,\n {\n split,\n }: {\n split?: boolean;\n } = {}\n) => {\n if (split) {\n editor.tf.withNewBatch(fn);\n } else {\n editor.tf.withMerging(fn);\n }\n\n const lastBatch = editor.history.undos?.at(-1) as AIBatch | undefined;\n\n if (lastBatch) {\n lastBatch.ai = true;\n }\n};\n","import { isSelecting } from '@platejs/selection';\nimport { type SlateEditor, KEYS } from 'platejs';\n\nexport type EditorPrompt =\n | ((params: EditorPromptParams) => string)\n | PromptConfig\n | string;\n\nexport type EditorPromptParams = {\n editor: SlateEditor;\n isBlockSelecting: boolean;\n isSelecting: boolean;\n};\n\nexport type PromptConfig = {\n default: string;\n blockSelecting?: string;\n selecting?: string;\n};\n\nconst createPromptFromConfig = (\n config: PromptConfig,\n params: EditorPromptParams\n): string => {\n const { isBlockSelecting, isSelecting } = params;\n\n if (isBlockSelecting && config.blockSelecting) {\n return config.blockSelecting ?? config.default;\n }\n if (isSelecting && config.selecting) {\n return config.selecting ?? config.default;\n }\n return config.default;\n};\n\nexport const getEditorPrompt = (\n editor: SlateEditor,\n {\n prompt = '',\n }: {\n prompt?: EditorPrompt;\n }\n): string => {\n const params: EditorPromptParams = {\n editor,\n isBlockSelecting: editor.getOption(\n { key: KEYS.blockSelection },\n 'isSelectingSome'\n ),\n isSelecting: isSelecting(editor),\n };\n\n let promptText = '';\n\n if (typeof prompt === 'function') {\n promptText = prompt(params);\n } else if (typeof prompt === 'object') {\n promptText = createPromptFromConfig(prompt, params);\n } else {\n promptText = prompt;\n }\n\n return promptText;\n};\n","import { serializeMd } from '@platejs/markdown';\nimport { type SlateEditor, type TElement, KEYS } from 'platejs';\n\nimport type { MarkdownType } from './replacePlaceholders';\n\n// Internal\nexport const getMarkdown = (\n editor: SlateEditor,\n {\n type,\n }: {\n type: MarkdownType;\n }\n) => {\n if (type === 'editor' || type === 'editorWithBlockId') {\n return serializeMd(editor, {\n withBlockId: type === 'editorWithBlockId',\n });\n }\n\n if (type === 'block' || type === 'blockWithBlockId') {\n const blocks = editor.api.blocks({ mode: 'highest' }).map(([node]) => node);\n\n return serializeMd(editor, {\n value: blocks,\n withBlockId: type === 'blockWithBlockId',\n });\n }\n\n if (type === 'blockSelection' || type === 'blockSelectionWithBlockId') {\n const fragment = editor.api.fragment<TElement>();\n\n // Remove any block formatting\n if (fragment.length === 1) {\n const modifiedFragment = [\n {\n children: fragment[0].children,\n type: KEYS.p,\n },\n ];\n\n return serializeMd(editor, {\n value: modifiedFragment,\n withBlockId: type === 'blockSelectionWithBlockId',\n });\n }\n\n return serializeMd(editor, {\n value: fragment,\n withBlockId: type === 'blockSelectionWithBlockId',\n });\n }\n\n return '';\n};\n","import type { SlateEditor } from 'platejs';\n\nimport { getMarkdown } from './getMarkdown';\n\nexport type MarkdownType =\n | 'block'\n | 'blockSelection'\n | 'blockSelectionWithBlockId'\n | 'blockWithBlockId'\n | 'editor'\n | 'editorWithBlockId';\n\nexport const replacePlaceholders = (\n editor: SlateEditor,\n text: string,\n {\n prompt,\n }: {\n prompt?: string;\n } = {}\n): string => {\n let result = text.replace('{prompt}', prompt || '');\n\n const placeholders: Record<string, MarkdownType> = {\n '{blockSelectionWithBlockId}': 'blockSelectionWithBlockId',\n '{blockSelection}': 'blockSelection',\n '{blockWithBlockId}': 'blockWithBlockId',\n '{block}': 'block',\n '{editorWithBlockId}': 'editorWithBlockId',\n '{editor}': 'editor',\n };\n\n Object.entries(placeholders).forEach(([placeholder, type]) => {\n if (result.includes(placeholder)) {\n result = result.replace(placeholder, getMarkdown(editor, { type }));\n }\n });\n\n return result;\n};\n"],"mappings":"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","names":["KEYS","KEYS","KEYS","isSelecting","KEYS"]}
|
package/dist/react/index.d.mts
CHANGED
|
@@ -2,7 +2,7 @@ import * as platejs_react from 'platejs/react';
|
|
|
2
2
|
import { PlateEditor, OverrideEditor, RenderNodeWrapperProps } from 'platejs/react';
|
|
3
3
|
import * as platejs from 'platejs';
|
|
4
4
|
import { ExtendConfig, SlateEditor, Range, NodeEntry, TElement, PluginConfig, Path, TIdElement, TRange, OmitFirst, EditorNodesOptions, TText, Descendant, RemoveNodesOptions } from 'platejs';
|
|
5
|
-
import { B as BaseAIPluginConfig, b as AIMode, E as EditorPrompt, A as AIToolName } from '../getEditorPrompt-
|
|
5
|
+
import { B as BaseAIPluginConfig, b as AIMode, E as EditorPrompt, A as AIToolName } from '../getEditorPrompt-C6prTxft.mjs';
|
|
6
6
|
import { UIMessage, ChatRequestOptions } from 'ai';
|
|
7
7
|
import { UseChatHelpers } from '@ai-sdk/react';
|
|
8
8
|
import { TriggerComboboxPluginOptions } from '@platejs/combobox';
|
|
@@ -221,27 +221,27 @@ declare const useChatChunk: ({ onChunk, onFinish, }: {
|
|
|
221
221
|
}) => void;
|
|
222
222
|
|
|
223
223
|
type UseEditorChatOptions = {
|
|
224
|
-
chat
|
|
224
|
+
chat?: any;
|
|
225
225
|
onOpenBlockSelection?: (blocks: NodeEntry[]) => void;
|
|
226
226
|
onOpenChange?: (open: boolean) => void;
|
|
227
227
|
onOpenCursor?: () => void;
|
|
228
228
|
onOpenSelection?: () => void;
|
|
229
229
|
};
|
|
230
|
-
declare const useEditorChat: ({
|
|
230
|
+
declare const useEditorChat: ({ onOpenBlockSelection, onOpenChange, onOpenCursor, onOpenSelection, }: UseEditorChatOptions) => void;
|
|
231
231
|
|
|
232
232
|
declare const streamDeserializeInlineMd: (editor: PlateEditor, text: string, options?: DeserializeMdOptions) => platejs.Descendant[];
|
|
233
233
|
|
|
234
|
-
declare const streamDeserializeMd: (editor: PlateEditor, data: string, options?: DeserializeMdOptions) =>
|
|
234
|
+
declare const streamDeserializeMd: (editor: PlateEditor, data: string, options?: DeserializeMdOptions) => TElement[] | {
|
|
235
235
|
children: {
|
|
236
236
|
text: string;
|
|
237
237
|
}[];
|
|
238
238
|
type: string;
|
|
239
239
|
}[];
|
|
240
240
|
|
|
241
|
-
|
|
241
|
+
type SteamInsertChunkOptions = {
|
|
242
242
|
elementProps?: any;
|
|
243
243
|
textProps?: any;
|
|
244
|
-
}
|
|
244
|
+
};
|
|
245
245
|
/** @experimental */
|
|
246
246
|
declare function streamInsertChunk(editor: PlateEditor, chunk: string, options?: SteamInsertChunkOptions): void;
|
|
247
247
|
declare const getCurrentBlockPath: (editor: SlateEditor) => Path;
|
package/dist/react/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as platejs_react from 'platejs/react';
|
|
|
2
2
|
import { PlateEditor, OverrideEditor, RenderNodeWrapperProps } from 'platejs/react';
|
|
3
3
|
import * as platejs from 'platejs';
|
|
4
4
|
import { ExtendConfig, SlateEditor, Range, NodeEntry, TElement, PluginConfig, Path, TIdElement, TRange, OmitFirst, EditorNodesOptions, TText, Descendant, RemoveNodesOptions } from 'platejs';
|
|
5
|
-
import { B as BaseAIPluginConfig, b as AIMode, E as EditorPrompt, A as AIToolName } from '../getEditorPrompt-
|
|
5
|
+
import { B as BaseAIPluginConfig, b as AIMode, E as EditorPrompt, A as AIToolName } from '../getEditorPrompt-C6prTxft.js';
|
|
6
6
|
import { UIMessage, ChatRequestOptions } from 'ai';
|
|
7
7
|
import { UseChatHelpers } from '@ai-sdk/react';
|
|
8
8
|
import { TriggerComboboxPluginOptions } from '@platejs/combobox';
|
|
@@ -221,27 +221,27 @@ declare const useChatChunk: ({ onChunk, onFinish, }: {
|
|
|
221
221
|
}) => void;
|
|
222
222
|
|
|
223
223
|
type UseEditorChatOptions = {
|
|
224
|
-
chat
|
|
224
|
+
chat?: any;
|
|
225
225
|
onOpenBlockSelection?: (blocks: NodeEntry[]) => void;
|
|
226
226
|
onOpenChange?: (open: boolean) => void;
|
|
227
227
|
onOpenCursor?: () => void;
|
|
228
228
|
onOpenSelection?: () => void;
|
|
229
229
|
};
|
|
230
|
-
declare const useEditorChat: ({
|
|
230
|
+
declare const useEditorChat: ({ onOpenBlockSelection, onOpenChange, onOpenCursor, onOpenSelection, }: UseEditorChatOptions) => void;
|
|
231
231
|
|
|
232
232
|
declare const streamDeserializeInlineMd: (editor: PlateEditor, text: string, options?: DeserializeMdOptions) => platejs.Descendant[];
|
|
233
233
|
|
|
234
|
-
declare const streamDeserializeMd: (editor: PlateEditor, data: string, options?: DeserializeMdOptions) =>
|
|
234
|
+
declare const streamDeserializeMd: (editor: PlateEditor, data: string, options?: DeserializeMdOptions) => TElement[] | {
|
|
235
235
|
children: {
|
|
236
236
|
text: string;
|
|
237
237
|
}[];
|
|
238
238
|
type: string;
|
|
239
239
|
}[];
|
|
240
240
|
|
|
241
|
-
|
|
241
|
+
type SteamInsertChunkOptions = {
|
|
242
242
|
elementProps?: any;
|
|
243
243
|
textProps?: any;
|
|
244
|
-
}
|
|
244
|
+
};
|
|
245
245
|
/** @experimental */
|
|
246
246
|
declare function streamInsertChunk(editor: PlateEditor, chunk: string, options?: SteamInsertChunkOptions): void;
|
|
247
247
|
declare const getCurrentBlockPath: (editor: SlateEditor) => Path;
|