@ai-stack/payloadcms 3.2.4-beta → 3.2.7-beta
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/README.md +2 -2
- package/dist/ai/models/anthropic/generateRichText.d.ts.map +1 -1
- package/dist/ai/models/elevenLabs/generateVoice.d.ts +1 -2
- package/dist/ai/models/elevenLabs/generateVoice.d.ts.map +1 -1
- package/dist/ai/models/elevenLabs/generateVoice.js.map +1 -1
- package/dist/ai/models/openai/generateImage.d.ts.map +1 -1
- package/dist/ai/models/openai/generateRichText.d.ts.map +1 -1
- package/dist/ai/models/openai/generateRichText.js +4 -8
- package/dist/ai/models/openai/generateRichText.js.map +1 -1
- package/dist/ai/models/openai/generateVoice.d.ts +1 -1
- package/dist/ai/models/openai/generateVoice.d.ts.map +1 -1
- package/dist/ai/prompts.d.ts.map +1 -1
- package/dist/ai/schemas/lexicalJsonSchema.d.ts +4 -0
- package/dist/ai/schemas/lexicalJsonSchema.d.ts.map +1 -1
- package/dist/ai/schemas/lexicalJsonSchema.js +8 -0
- package/dist/ai/schemas/lexicalJsonSchema.js.map +1 -1
- package/dist/ai/utils/systemGenerate.d.ts.map +1 -1
- package/dist/collections/Instructions.d.ts.map +1 -1
- package/dist/collections/Instructions.js +4 -2
- package/dist/collections/Instructions.js.map +1 -1
- package/dist/endpoints/index.js +1 -1
- package/dist/endpoints/index.js.map +1 -1
- package/dist/fields/ComposeField/ComposeField.d.ts +1 -2
- package/dist/fields/ComposeField/ComposeField.d.ts.map +1 -1
- package/dist/fields/ComposeField/ComposeField.js.map +1 -1
- package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts.map +1 -1
- package/dist/fields/LexicalEditor/feature.client.d.ts.map +1 -1
- package/dist/fields/LexicalEditor/feature.client.js.map +1 -1
- package/dist/fields/SelectField/SelectField.d.ts.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/libraries/autocomplete/AutocompleteTextArea.d.ts.map +1 -1
- package/dist/libraries/handlebars/helpers.d.ts.map +1 -1
- package/dist/libraries/handlebars/replacePlaceholders.d.ts.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +1 -1
- package/dist/plugin.js.map +1 -1
- package/dist/providers/FieldProvider/FieldProvider.d.ts.map +1 -1
- package/dist/providers/InstructionsProvider/useInstructions.d.ts.map +1 -1
- package/dist/ui/Compose/Compose.d.ts +7 -3
- package/dist/ui/Compose/Compose.d.ts.map +1 -1
- package/dist/ui/Compose/Compose.js +37 -15
- package/dist/ui/Compose/Compose.js.map +1 -1
- package/dist/ui/Compose/UndoRedoActions.d.ts.map +1 -1
- package/dist/ui/Compose/UndoRedoActions.js +9 -9
- package/dist/ui/Compose/UndoRedoActions.js.map +1 -1
- package/dist/ui/Compose/compose.module.css +2 -0
- package/dist/ui/Compose/hooks/menu/Item.d.ts.map +1 -1
- package/dist/ui/Compose/hooks/menu/TranslateMenu.d.ts.map +1 -1
- package/dist/ui/Compose/hooks/menu/useMenu.d.ts.map +1 -1
- package/dist/ui/Compose/hooks/menu/useMenu.js +2 -4
- package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -1
- package/dist/ui/Compose/hooks/useGenerate.d.ts.map +1 -1
- package/dist/ui/Compose/hooks/useGenerate.js +22 -9
- package/dist/ui/Compose/hooks/useGenerate.js.map +1 -1
- package/dist/ui/Icons/Icons.d.ts.map +1 -1
- package/dist/ui/Icons/LottieAnimation.d.ts.map +1 -1
- package/dist/utilities/editorSchemaValidator.d.ts.map +1 -1
- package/dist/utilities/editorSchemaValidator.js +2 -1
- package/dist/utilities/editorSchemaValidator.js.map +1 -1
- package/dist/utilities/getFieldBySchemaPath.d.ts.map +1 -1
- package/dist/utilities/getFieldInfo.d.ts.map +1 -1
- package/dist/utilities/setSafeLexicalState.d.ts.map +1 -1
- package/dist/utilities/setSafeLexicalState.js +1 -1
- package/dist/utilities/setSafeLexicalState.js.map +1 -1
- package/dist/utilities/updateFieldsConfig.d.ts.map +1 -1
- package/package.json +8 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Compose.d.ts","sourceRoot":"","sources":["../../../src/ui/Compose/Compose.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"Compose.d.ts","sourceRoot":"","sources":["../../../src/ui/Compose/Compose.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,EAAE,EAAW,MAAM,OAAO,CAAA;AA6BnC,KAAK,YAAY,GAAG;IAClB,gBAAgB,CAAC,EAAE;QACjB,KAAK,EAAE,WAAW,CAAA;QAClB,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC,YAAY,CAgLpC,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useMemo } from 'react';
|
|
3
4
|
import { useEditorConfigContext } from '@payloadcms/richtext-lexical/client';
|
|
4
5
|
import { FieldDescription, Popup, useDocumentDrawer, useField } from '@payloadcms/ui';
|
|
5
6
|
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
@@ -53,7 +54,8 @@ export const Compose = ({ descriptionProps, instructionId })=>{
|
|
|
53
54
|
useEffect(()=>{
|
|
54
55
|
if (!input || !actionsRef.current) return;
|
|
55
56
|
actionsRef.current.classList.add(styles.actions_hidden);
|
|
56
|
-
|
|
57
|
+
// Create the handler function
|
|
58
|
+
const clickHandler = (event)=>{
|
|
57
59
|
document.querySelectorAll('.ai-plugin-active')?.forEach((element)=>{
|
|
58
60
|
const actionElement = element.querySelector(`.${styles.actions}`);
|
|
59
61
|
if (actionElement) {
|
|
@@ -63,8 +65,16 @@ export const Compose = ({ descriptionProps, instructionId })=>{
|
|
|
63
65
|
});
|
|
64
66
|
actionsRef.current.classList.remove(styles.actions_hidden);
|
|
65
67
|
const parentWithClass = findParentWithClass(event.target, 'field-type');
|
|
66
|
-
parentWithClass
|
|
67
|
-
|
|
68
|
+
if (parentWithClass) {
|
|
69
|
+
parentWithClass.classList.add('ai-plugin-active');
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
// Add the event listener
|
|
73
|
+
input.addEventListener('click', clickHandler);
|
|
74
|
+
// Clean up the event listener when the component unmounts or input changes
|
|
75
|
+
return ()=>{
|
|
76
|
+
input.removeEventListener('click', clickHandler);
|
|
77
|
+
};
|
|
68
78
|
}, [
|
|
69
79
|
input,
|
|
70
80
|
actionsRef
|
|
@@ -131,6 +141,29 @@ export const Compose = ({ descriptionProps, instructionId })=>{
|
|
|
131
141
|
}
|
|
132
142
|
// DO NOT PROVIDE lexicalEditor as a dependency, it freaks out and does not update the editor after first undo/redo
|
|
133
143
|
}, []);
|
|
144
|
+
const popupRender = useCallback(({ close })=>{
|
|
145
|
+
return /*#__PURE__*/ _jsx(Menu, {
|
|
146
|
+
isLoading: isProcessing || isLoading,
|
|
147
|
+
onClose: close
|
|
148
|
+
});
|
|
149
|
+
}, [
|
|
150
|
+
isProcessing,
|
|
151
|
+
isLoading,
|
|
152
|
+
Menu
|
|
153
|
+
]);
|
|
154
|
+
const memoizedPopup = useMemo(()=>{
|
|
155
|
+
return /*#__PURE__*/ _jsx(Popup, {
|
|
156
|
+
button: /*#__PURE__*/ _jsx(PluginIcon, {
|
|
157
|
+
isLoading: isProcessing || isLoading
|
|
158
|
+
}),
|
|
159
|
+
render: popupRender,
|
|
160
|
+
verticalAlign: "bottom"
|
|
161
|
+
});
|
|
162
|
+
}, [
|
|
163
|
+
popupRender,
|
|
164
|
+
isProcessing,
|
|
165
|
+
isLoading
|
|
166
|
+
]);
|
|
134
167
|
return /*#__PURE__*/ _jsxs(React.Fragment, {
|
|
135
168
|
children: [
|
|
136
169
|
/*#__PURE__*/ _jsxs("label", {
|
|
@@ -144,18 +177,7 @@ export const Compose = ({ descriptionProps, instructionId })=>{
|
|
|
144
177
|
closeDrawer();
|
|
145
178
|
}
|
|
146
179
|
}),
|
|
147
|
-
|
|
148
|
-
button: /*#__PURE__*/ _jsx(PluginIcon, {
|
|
149
|
-
isLoading: isProcessing || isLoading
|
|
150
|
-
}),
|
|
151
|
-
render: ({ close })=>{
|
|
152
|
-
return /*#__PURE__*/ _jsx(Menu, {
|
|
153
|
-
isLoading: isProcessing || isLoading,
|
|
154
|
-
onClose: close
|
|
155
|
-
});
|
|
156
|
-
},
|
|
157
|
-
verticalAlign: "bottom"
|
|
158
|
-
}),
|
|
180
|
+
memoizedPopup,
|
|
159
181
|
/*#__PURE__*/ _jsx(ActiveComponent, {
|
|
160
182
|
isLoading: isProcessing || isLoading,
|
|
161
183
|
stop: stop
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ui/Compose/Compose.tsx"],"sourcesContent":["'use client'\n\nimport type { FieldDescriptionServerProps } from 'payload'\nimport type { FC } from 'react'\n\nimport { useEditorConfigContext } from '@payloadcms/richtext-lexical/client'\nimport { FieldDescription, Popup, useDocumentDrawer, useField } from '@payloadcms/ui'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { PLUGIN_INSTRUCTIONS_TABLE } from '../../defaults.js'\nimport { setSafeLexicalState } from '../../utilities/setSafeLexicalState.js'\nimport { PluginIcon } from '../Icons/Icons.js'\nimport { UndoRedoActions } from './UndoRedoActions.js'\nimport styles from './compose.module.css'\nimport { useMenu } from './hooks/menu/useMenu.js'\nimport { useGenerate } from './hooks/useGenerate.js'\n\nfunction findParentWithClass(element, className) {\n // Base case: if the element is null or we've reached the top of the DOM\n if (!element || element === document.body) {\n return null\n }\n\n // Check if the current element has the class we're looking for\n if (element.classList.contains(className)) {\n return element\n }\n\n // Recursively call the function on the parent element\n return findParentWithClass(element.parentElement, className)\n}\n\ntype ComposeProps = {\n descriptionProps?: FieldDescriptionServerProps\n instructionId: string\n}\n\nexport const Compose: FC<ComposeProps> = ({ descriptionProps, instructionId }) => {\n const [DocumentDrawer, _, { closeDrawer, openDrawer }] = useDocumentDrawer({\n id: instructionId,\n collectionSlug: PLUGIN_INSTRUCTIONS_TABLE,\n })\n\n const {\n field: { type: fieldType },\n path: pathFromContext,\n schemaPath,\n } = descriptionProps || ({} as FieldDescriptionServerProps)\n const { editor: lexicalEditor, editorContainerRef } = useEditorConfigContext()\n\n // Below snippet is used to show/hide the actions menu on AI enabled fields\n const [input, setInput] = useState(null)\n const actionsRef = useRef(null)\n\n // Set input element for current field\n useEffect(() => {\n if (!actionsRef.current) return\n\n const fieldId = `field-${pathFromContext.replace(/\\./g, '__')}`\n const inputElement = document.getElementById(fieldId)\n\n if (!inputElement && fieldType === 'richText') {\n setInput(editorContainerRef.current)\n } else {\n actionsRef.current.setAttribute('for', fieldId)\n setInput(inputElement)\n }\n }, [pathFromContext, schemaPath, actionsRef, editorContainerRef])\n\n // Show or hide actions menu on field\n useEffect(() => {\n if (!input || !actionsRef.current) return\n\n actionsRef.current.classList.add(styles.actions_hidden)\n input.addEventListener('click', (event) => {\n document.querySelectorAll('.ai-plugin-active')?.forEach((element) => {\n const actionElement = element.querySelector(`.${styles.actions}`)\n if (actionElement) {\n actionElement.classList.add(styles.actions_hidden)\n element.classList.remove('ai-plugin-active')\n }\n })\n\n actionsRef.current.classList.remove(styles.actions_hidden)\n const parentWithClass = findParentWithClass(event.target, 'field-type')\n parentWithClass.classList.add('ai-plugin-active')\n })\n }, [input, actionsRef])\n\n const [isProcessing, setIsProcessing] = useState(false)\n const { generate, isLoading, stop } = useGenerate({ instructionId })\n\n const { ActiveComponent, Menu } = useMenu({\n onCompose: async () => {\n console.log('Composing...')\n setIsProcessing(true)\n await generate({\n action: 'Compose',\n }).finally(() => {\n setIsProcessing(false)\n })\n },\n onExpand: async () => {\n console.log('Expanding...')\n await generate({\n action: 'Expand',\n })\n },\n onProofread: async () => {\n console.log('Proofreading...')\n await generate({\n action: 'Proofread',\n })\n },\n onRephrase: async () => {\n console.log('Rephrasing...')\n await generate({\n action: 'Rephrase',\n })\n },\n onSettings: openDrawer,\n onSimplify: async () => {\n console.log('Simplifying...')\n await generate({\n action: 'Simplify',\n })\n },\n onSummarize: async () => {\n console.log('Summarizing...')\n await generate({\n action: 'Summarize',\n })\n },\n onTranslate: async (data) => {\n console.log('Translating...')\n await generate({\n action: 'Translate',\n params: data,\n })\n },\n })\n\n const { setValue } = useField<string>({\n path: pathFromContext,\n })\n\n const setIfValueIsLexicalState = useCallback((val: any) => {\n if (val.root && lexicalEditor) {\n setSafeLexicalState(JSON.stringify(val), lexicalEditor)\n }\n\n // DO NOT PROVIDE lexicalEditor as a dependency, it freaks out and does not update the editor after first undo/redo\n }, [])\n\n return (\n <React.Fragment>\n <label\n className={`${styles.actions}`}\n onClick={(e) => e.preventDefault()}\n ref={actionsRef}\n role=\"presentation\"\n >\n <DocumentDrawer\n onSave={() => {\n closeDrawer()\n }}\n />\n <Popup\n button={<PluginIcon isLoading={isProcessing || isLoading} />}\n render={({ close }) => {\n return <Menu isLoading={isProcessing || isLoading} onClose={close} />\n }}\n verticalAlign=\"bottom\"\n />\n <ActiveComponent isLoading={isProcessing || isLoading} stop={stop} />\n <UndoRedoActions\n onChange={(val) => {\n setValue(val)\n setIfValueIsLexicalState(val)\n }}\n />\n </label>\n {/*Render incoming description field*/}\n {descriptionProps ? (\n <div>\n <FieldDescription {...descriptionProps} />\n </div>\n ) : null}\n </React.Fragment>\n )\n}\n"],"names":["useEditorConfigContext","FieldDescription","Popup","useDocumentDrawer","useField","React","useCallback","useEffect","useRef","useState","PLUGIN_INSTRUCTIONS_TABLE","setSafeLexicalState","PluginIcon","UndoRedoActions","styles","useMenu","useGenerate","findParentWithClass","element","className","document","body","classList","contains","parentElement","Compose","descriptionProps","instructionId","DocumentDrawer","_","closeDrawer","openDrawer","id","collectionSlug","field","type","fieldType","path","pathFromContext","schemaPath","editor","lexicalEditor","editorContainerRef","input","setInput","actionsRef","current","fieldId","replace","inputElement","getElementById","setAttribute","add","actions_hidden","addEventListener","event","querySelectorAll","forEach","actionElement","querySelector","actions","remove","parentWithClass","target","isProcessing","setIsProcessing","generate","isLoading","stop","ActiveComponent","Menu","onCompose","console","log","action","finally","onExpand","onProofread","onRephrase","onSettings","onSimplify","onSummarize","onTranslate","data","params","setValue","setIfValueIsLexicalState","val","root","JSON","stringify","Fragment","label","onClick","e","preventDefault","ref","role","onSave","button","render","close","onClose","verticalAlign","onChange","div"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/Compose/Compose.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientField } from 'payload'\nimport { FC, useMemo } from 'react'\n\nimport { useEditorConfigContext } from '@payloadcms/richtext-lexical/client'\nimport { FieldDescription, Popup, useDocumentDrawer, useField } from '@payloadcms/ui'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { PLUGIN_INSTRUCTIONS_TABLE } from '../../defaults.js'\nimport { setSafeLexicalState } from '../../utilities/setSafeLexicalState.js'\nimport { PluginIcon } from '../Icons/Icons.js'\nimport { UndoRedoActions } from './UndoRedoActions.js'\nimport styles from './compose.module.css'\nimport { useMenu } from './hooks/menu/useMenu.js'\nimport { useGenerate } from './hooks/useGenerate.js'\n\nfunction findParentWithClass(element, className) {\n // Base case: if the element is null or we've reached the top of the DOM\n if (!element || element === document.body) {\n return null\n }\n\n // Check if the current element has the class we're looking for\n if (element.classList.contains(className)) {\n return element\n }\n\n // Recursively call the function on the parent element\n return findParentWithClass(element.parentElement, className)\n}\n\ntype ComposeProps = {\n descriptionProps?: {\n field: ClientField\n path: string\n schemaPath: string\n }\n instructionId: string\n}\n\nexport const Compose: FC<ComposeProps> = ({ descriptionProps, instructionId }) => {\n const [DocumentDrawer, _, { closeDrawer, openDrawer }] = useDocumentDrawer({\n id: instructionId,\n collectionSlug: PLUGIN_INSTRUCTIONS_TABLE,\n })\n\n const {\n field: { type: fieldType },\n path: pathFromContext,\n schemaPath,\n } = descriptionProps || {}\n const { editor: lexicalEditor, editorContainerRef } = useEditorConfigContext()\n\n // Below snippet is used to show/hide the actions menu on AI enabled fields\n const [input, setInput] = useState(null)\n const actionsRef = useRef(null)\n\n // Set input element for current field\n useEffect(() => {\n if (!actionsRef.current) return\n\n const fieldId = `field-${pathFromContext.replace(/\\./g, '__')}`\n const inputElement = document.getElementById(fieldId)\n\n if (!inputElement && fieldType === 'richText') {\n setInput(editorContainerRef.current)\n } else {\n actionsRef.current.setAttribute('for', fieldId)\n setInput(inputElement)\n }\n }, [pathFromContext, schemaPath, actionsRef, editorContainerRef])\n\n // Show or hide actions menu on field\n useEffect(() => {\n if (!input || !actionsRef.current) return\n\n actionsRef.current.classList.add(styles.actions_hidden)\n\n // Create the handler function\n const clickHandler = (event) => {\n document.querySelectorAll('.ai-plugin-active')?.forEach((element) => {\n const actionElement = element.querySelector(`.${styles.actions}`)\n if (actionElement) {\n actionElement.classList.add(styles.actions_hidden)\n element.classList.remove('ai-plugin-active')\n }\n })\n\n actionsRef.current.classList.remove(styles.actions_hidden)\n const parentWithClass = findParentWithClass(event.target, 'field-type')\n if (parentWithClass) {\n parentWithClass.classList.add('ai-plugin-active')\n }\n }\n\n // Add the event listener\n input.addEventListener('click', clickHandler)\n\n // Clean up the event listener when the component unmounts or input changes\n return () => {\n input.removeEventListener('click', clickHandler)\n }\n }, [input, actionsRef])\n\n const [isProcessing, setIsProcessing] = useState(false)\n const { generate, isLoading, stop } = useGenerate({ instructionId })\n\n const { ActiveComponent, Menu } = useMenu({\n onCompose: async () => {\n console.log('Composing...')\n setIsProcessing(true)\n await generate({\n action: 'Compose',\n }).finally(() => {\n setIsProcessing(false)\n })\n },\n onExpand: async () => {\n console.log('Expanding...')\n await generate({\n action: 'Expand',\n })\n },\n onProofread: async () => {\n console.log('Proofreading...')\n await generate({\n action: 'Proofread',\n })\n },\n onRephrase: async () => {\n console.log('Rephrasing...')\n await generate({\n action: 'Rephrase',\n })\n },\n onSettings: openDrawer,\n onSimplify: async () => {\n console.log('Simplifying...')\n await generate({\n action: 'Simplify',\n })\n },\n onSummarize: async () => {\n console.log('Summarizing...')\n await generate({\n action: 'Summarize',\n })\n },\n onTranslate: async (data) => {\n console.log('Translating...')\n await generate({\n action: 'Translate',\n params: data,\n })\n },\n })\n\n const { setValue } = useField<string>({\n path: pathFromContext,\n })\n\n const setIfValueIsLexicalState = useCallback((val: any) => {\n if (val.root && lexicalEditor) {\n setSafeLexicalState(JSON.stringify(val), lexicalEditor)\n }\n\n // DO NOT PROVIDE lexicalEditor as a dependency, it freaks out and does not update the editor after first undo/redo\n }, [])\n\n const popupRender = useCallback(\n ({ close }) => {\n return <Menu isLoading={isProcessing || isLoading} onClose={close} />\n },\n [isProcessing, isLoading, Menu],\n )\n\n const memoizedPopup = useMemo(() => {\n return (\n <Popup\n button={<PluginIcon isLoading={isProcessing || isLoading} />}\n render={popupRender}\n verticalAlign=\"bottom\"\n />\n )\n }, [popupRender, isProcessing, isLoading])\n\n return (\n <React.Fragment>\n <label\n className={`${styles.actions}`}\n onClick={(e) => e.preventDefault()}\n ref={actionsRef}\n role=\"presentation\"\n >\n <DocumentDrawer\n onSave={() => {\n closeDrawer()\n }}\n />\n {memoizedPopup}\n <ActiveComponent isLoading={isProcessing || isLoading} stop={stop} />\n <UndoRedoActions\n onChange={(val) => {\n setValue(val)\n setIfValueIsLexicalState(val)\n }}\n />\n </label>\n {/*Render incoming description field*/}\n {descriptionProps ? (\n <div>\n <FieldDescription {...descriptionProps} />\n </div>\n ) : null}\n </React.Fragment>\n )\n}\n"],"names":["useMemo","useEditorConfigContext","FieldDescription","Popup","useDocumentDrawer","useField","React","useCallback","useEffect","useRef","useState","PLUGIN_INSTRUCTIONS_TABLE","setSafeLexicalState","PluginIcon","UndoRedoActions","styles","useMenu","useGenerate","findParentWithClass","element","className","document","body","classList","contains","parentElement","Compose","descriptionProps","instructionId","DocumentDrawer","_","closeDrawer","openDrawer","id","collectionSlug","field","type","fieldType","path","pathFromContext","schemaPath","editor","lexicalEditor","editorContainerRef","input","setInput","actionsRef","current","fieldId","replace","inputElement","getElementById","setAttribute","add","actions_hidden","clickHandler","event","querySelectorAll","forEach","actionElement","querySelector","actions","remove","parentWithClass","target","addEventListener","removeEventListener","isProcessing","setIsProcessing","generate","isLoading","stop","ActiveComponent","Menu","onCompose","console","log","action","finally","onExpand","onProofread","onRephrase","onSettings","onSimplify","onSummarize","onTranslate","data","params","setValue","setIfValueIsLexicalState","val","root","JSON","stringify","popupRender","close","onClose","memoizedPopup","button","render","verticalAlign","Fragment","label","onClick","e","preventDefault","ref","role","onSave","onChange","div"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UndoRedoActions.d.ts","sourceRoot":"","sources":["../../../src/ui/Compose/UndoRedoActions.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"UndoRedoActions.d.ts","sourceRoot":"","sources":["../../../src/ui/Compose/UndoRedoActions.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,eAAe,GAAI,cAAc;IAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE,4CA0DjF,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs
|
|
2
|
-
import { useHistory } from './hooks/useHistory.js';
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
2
|
import React, { useCallback, useEffect, useState } from 'react';
|
|
3
|
+
import { useHistory } from './hooks/useHistory.js';
|
|
4
4
|
export const UndoRedoActions = ({ onChange })=>{
|
|
5
5
|
const { canRedo, canUndo, redo, undo } = useHistory();
|
|
6
6
|
const redoHistoryValue = useCallback((event)=>{
|
|
@@ -27,26 +27,26 @@ export const UndoRedoActions = ({ onChange })=>{
|
|
|
27
27
|
setIsMounted(true);
|
|
28
28
|
}, []);
|
|
29
29
|
if (!isMounted || !canUndo && !canRedo) return null;
|
|
30
|
-
return /*#__PURE__*/ _jsxs(
|
|
30
|
+
return /*#__PURE__*/ _jsxs(React.Fragment, {
|
|
31
31
|
children: [
|
|
32
32
|
/*#__PURE__*/ _jsx("button", {
|
|
33
|
-
onClick: undoHistoryValue,
|
|
34
|
-
type: "button",
|
|
35
|
-
disabled: !canUndo,
|
|
36
33
|
className: `btn btn--size-small btn--style-secondary ${!canUndo && 'btn--disabled'}`,
|
|
34
|
+
disabled: !canUndo,
|
|
35
|
+
onClick: undoHistoryValue,
|
|
37
36
|
style: {
|
|
38
37
|
marginBlock: 0
|
|
39
38
|
},
|
|
39
|
+
type: "button",
|
|
40
40
|
children: "Undo"
|
|
41
41
|
}),
|
|
42
42
|
/*#__PURE__*/ _jsx("button", {
|
|
43
|
-
onClick: redoHistoryValue,
|
|
44
|
-
type: "button",
|
|
45
|
-
disabled: !canRedo,
|
|
46
43
|
className: `btn btn--size-small btn--style-secondary ${!canRedo && 'btn--disabled'}`,
|
|
44
|
+
disabled: !canRedo,
|
|
45
|
+
onClick: redoHistoryValue,
|
|
47
46
|
style: {
|
|
48
47
|
marginBlock: 0
|
|
49
48
|
},
|
|
49
|
+
type: "button",
|
|
50
50
|
children: "Redo"
|
|
51
51
|
})
|
|
52
52
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ui/Compose/UndoRedoActions.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/Compose/UndoRedoActions.tsx"],"sourcesContent":["import type { MouseEventHandler} from 'react';\n\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { useHistory } from './hooks/useHistory.js'\n\nexport const UndoRedoActions = ({ onChange }: { onChange: (val: unknown) => void }) => {\n const { canRedo, canUndo, redo, undo } = useHistory()\n\n const redoHistoryValue = useCallback<MouseEventHandler>(\n (event) => {\n event.stopPropagation()\n\n const value = redo()\n if (value) {\n onChange(value)\n }\n },\n [redo],\n )\n\n const undoHistoryValue = useCallback<MouseEventHandler>(\n (event) => {\n event.stopPropagation()\n\n const value = undo()\n if (value) {\n onChange(value)\n }\n },\n [undo],\n )\n\n // Delay rendering until the client-side hydration is complete\n const [isMounted, setIsMounted] = useState(false)\n\n useEffect(() => {\n setIsMounted(true)\n }, [])\n\n if (!isMounted || (!canUndo && !canRedo)) return null\n\n return (\n <React.Fragment>\n <button\n className={`btn btn--size-small btn--style-secondary ${!canUndo && 'btn--disabled'}`}\n disabled={!canUndo}\n onClick={undoHistoryValue}\n style={{ marginBlock: 0 }}\n type=\"button\"\n >\n Undo\n </button>\n <button\n className={`btn btn--size-small btn--style-secondary ${!canRedo && 'btn--disabled'}`}\n disabled={!canRedo}\n onClick={redoHistoryValue}\n style={{ marginBlock: 0 }}\n type=\"button\"\n >\n Redo\n </button>\n </React.Fragment>\n )\n}\n"],"names":["React","useCallback","useEffect","useState","useHistory","UndoRedoActions","onChange","canRedo","canUndo","redo","undo","redoHistoryValue","event","stopPropagation","value","undoHistoryValue","isMounted","setIsMounted","Fragment","button","className","disabled","onClick","style","marginBlock","type"],"mappings":";AAEA,OAAOA,SAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAE/D,SAASC,UAAU,QAAQ,wBAAuB;AAElD,OAAO,MAAMC,kBAAkB,CAAC,EAAEC,QAAQ,EAAwC;IAChF,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,IAAI,EAAEC,IAAI,EAAE,GAAGN;IAEzC,MAAMO,mBAAmBV,YACvB,CAACW;QACCA,MAAMC,eAAe;QAErB,MAAMC,QAAQL;QACd,IAAIK,OAAO;YACTR,SAASQ;QACX;IACF,GACA;QAACL;KAAK;IAGR,MAAMM,mBAAmBd,YACvB,CAACW;QACCA,MAAMC,eAAe;QAErB,MAAMC,QAAQJ;QACd,IAAII,OAAO;YACTR,SAASQ;QACX;IACF,GACA;QAACJ;KAAK;IAGR,8DAA8D;IAC9D,MAAM,CAACM,WAAWC,aAAa,GAAGd,SAAS;IAE3CD,UAAU;QACRe,aAAa;IACf,GAAG,EAAE;IAEL,IAAI,CAACD,aAAc,CAACR,WAAW,CAACD,SAAU,OAAO;IAEjD,qBACE,MAACP,MAAMkB,QAAQ;;0BACb,KAACC;gBACCC,WAAW,CAAC,yCAAyC,EAAE,CAACZ,WAAW,iBAAiB;gBACpFa,UAAU,CAACb;gBACXc,SAASP;gBACTQ,OAAO;oBAAEC,aAAa;gBAAE;gBACxBC,MAAK;0BACN;;0BAGD,KAACN;gBACCC,WAAW,CAAC,yCAAyC,EAAE,CAACb,WAAW,iBAAiB;gBACpFc,UAAU,CAACd;gBACXe,SAASX;gBACTY,OAAO;oBAAEC,aAAa;gBAAE;gBACxBC,MAAK;0BACN;;;;AAKP,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Item.d.ts","sourceRoot":"","sources":["../../../../../src/ui/Compose/hooks/menu/Item.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAA;AAEnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAKzD,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAaxC,CAAA;AAED,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"Item.d.ts","sourceRoot":"","sources":["../../../../../src/ui/Compose/hooks/menu/Item.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAA;AAEnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAKzD,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAaxC,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,kBAAa,EAAE,gBAAW,4FACW,aAAa,6CAM7E,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TranslateMenu.d.ts","sourceRoot":"","sources":["../../../../../src/ui/Compose/hooks/menu/TranslateMenu.tsx"],"names":[],"mappings":"AAOA,eAAO,MAAM,aAAa;;
|
|
1
|
+
{"version":3,"file":"TranslateMenu.d.ts","sourceRoot":"","sources":["../../../../../src/ui/Compose/hooks/menu/TranslateMenu.tsx"],"names":[],"mappings":"AAOA,eAAO,MAAM,aAAa,GAAI;;CAAW,4CA0ExC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenu.d.ts","sourceRoot":"","sources":["../../../../../src/ui/Compose/hooks/menu/useMenu.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAoB1E,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"useMenu.d.ts","sourceRoot":"","sources":["../../../../../src/ui/Compose/hooks/menu/useMenu.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAoB1E,eAAO,MAAM,OAAO,GAAI,YAAY,aAAa;;;;;;;;;CAwFhD,CAAA"}
|
|
@@ -67,8 +67,7 @@ export const useMenu = (menuEvents)=>{
|
|
|
67
67
|
});
|
|
68
68
|
};
|
|
69
69
|
}, [
|
|
70
|
-
activeComponent
|
|
71
|
-
menuEvents
|
|
70
|
+
activeComponent
|
|
72
71
|
]);
|
|
73
72
|
const filteredMenuItems = useMemo(()=>menuItemsMap.filter((i)=>i.name !== activeComponent && !i.excludedFor?.includes(fieldType)), [
|
|
74
73
|
activeComponent,
|
|
@@ -93,8 +92,7 @@ export const useMenu = (menuEvents)=>{
|
|
|
93
92
|
})
|
|
94
93
|
});
|
|
95
94
|
}, [
|
|
96
|
-
filteredMenuItems
|
|
97
|
-
menuEvents
|
|
95
|
+
filteredMenuItems
|
|
98
96
|
]);
|
|
99
97
|
return {
|
|
100
98
|
ActiveComponent: MemoizedActiveComponent,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/ui/Compose/hooks/menu/useMenu.tsx"],"sourcesContent":["'use client'\n\nimport { useField } from '@payloadcms/ui'\nimport React, { useEffect, useMemo, useState } from 'react'\n\nimport type { ActionMenuItems, UseMenuEvents } from '../../../../types.js'\n\nimport { useFieldProps } from '../../../../providers/FieldProvider/useFieldProps.js'\nimport { Compose, Proofread, Rephrase } from './items.js'\nimport { menuItemsMap } from './itemsMap.js'\nimport styles from './menu.module.scss'\n\nconst getActiveComponent = (ac) => {\n switch (ac) {\n case 'Proofread':\n return Proofread\n case 'Rephrase':\n return Rephrase\n case 'Compose':\n return Compose\n default:\n return Rephrase\n }\n}\n\nexport const useMenu = (menuEvents: UseMenuEvents) => {\n const { type: fieldType, path: pathFromContext } = useFieldProps()\n const field = useField({ path: pathFromContext })\n const [activeComponent, setActiveComponent] = useState<ActionMenuItems>('Rephrase')\n\n const { initialValue, value } = field\n\n useEffect(() => {\n if (!value) {\n setActiveComponent('Compose')\n return\n }\n\n if (menuItemsMap.some((i) => i.excludedFor?.includes(fieldType))) {\n setActiveComponent('Compose')\n return\n }\n\n if (typeof value === 'string' && value !== initialValue) {\n setActiveComponent('Proofread')\n } else {\n setActiveComponent('Rephrase')\n }\n }, [initialValue, value, fieldType])\n\n const MemoizedActiveComponent = useMemo(() => {\n return ({ isLoading, stop }) => {\n const ActiveComponent = getActiveComponent(activeComponent)\n const activeItem = menuItemsMap.find((i) => i.name === activeComponent)\n return (\n <ActiveComponent\n hideIcon\n onClick={(data) => {\n if (!isLoading) {\n const trigger = menuEvents[`on${activeComponent}`]\n if (typeof trigger === 'function') {\n trigger(data)\n } else {\n console.error('No trigger found for', activeComponent)\n }\n } else {\n stop()\n }\n }}\n title={isLoading ? 'Click to stop' : activeItem.name}\n >\n {isLoading && activeItem.loadingText}\n </ActiveComponent>\n )\n }\n }, [activeComponent
|
|
1
|
+
{"version":3,"sources":["../../../../../src/ui/Compose/hooks/menu/useMenu.tsx"],"sourcesContent":["'use client'\n\nimport { useField } from '@payloadcms/ui'\nimport React, { useEffect, useMemo, useState } from 'react'\n\nimport type { ActionMenuItems, UseMenuEvents } from '../../../../types.js'\n\nimport { useFieldProps } from '../../../../providers/FieldProvider/useFieldProps.js'\nimport { Compose, Proofread, Rephrase } from './items.js'\nimport { menuItemsMap } from './itemsMap.js'\nimport styles from './menu.module.scss'\n\nconst getActiveComponent = (ac) => {\n switch (ac) {\n case 'Proofread':\n return Proofread\n case 'Rephrase':\n return Rephrase\n case 'Compose':\n return Compose\n default:\n return Rephrase\n }\n}\n\nexport const useMenu = (menuEvents: UseMenuEvents) => {\n const { type: fieldType, path: pathFromContext } = useFieldProps()\n const field = useField({ path: pathFromContext })\n const [activeComponent, setActiveComponent] = useState<ActionMenuItems>('Rephrase')\n\n const { initialValue, value } = field\n\n useEffect(() => {\n if (!value) {\n setActiveComponent('Compose')\n return\n }\n\n if (menuItemsMap.some((i) => i.excludedFor?.includes(fieldType))) {\n setActiveComponent('Compose')\n return\n }\n\n if (typeof value === 'string' && value !== initialValue) {\n setActiveComponent('Proofread')\n } else {\n setActiveComponent('Rephrase')\n }\n }, [initialValue, value, fieldType])\n\n const MemoizedActiveComponent = useMemo(() => {\n return ({ isLoading, stop }) => {\n const ActiveComponent = getActiveComponent(activeComponent)\n const activeItem = menuItemsMap.find((i) => i.name === activeComponent)\n return (\n <ActiveComponent\n hideIcon\n onClick={(data) => {\n if (!isLoading) {\n const trigger = menuEvents[`on${activeComponent}`]\n if (typeof trigger === 'function') {\n trigger(data)\n } else {\n console.error('No trigger found for', activeComponent)\n }\n } else {\n stop()\n }\n }}\n title={isLoading ? 'Click to stop' : activeItem.name}\n >\n {isLoading && activeItem.loadingText}\n </ActiveComponent>\n )\n }\n }, [activeComponent])\n\n const filteredMenuItems = useMemo(\n () =>\n menuItemsMap.filter((i) => i.name !== activeComponent && !i.excludedFor?.includes(fieldType)),\n [activeComponent, fieldType],\n )\n\n const MemoizedMenu = useMemo(() => {\n return ({ isLoading, onClose }) => (\n <div className={styles.menu}>\n {filteredMenuItems.map((i) => {\n const Action = i.component\n return (\n <Action\n disabled={isLoading}\n key={i.name}\n onClick={(data) => {\n if (i.name !== 'Settings') {\n setActiveComponent(i.name)\n }\n\n menuEvents[`on${i.name}`](data)\n onClose()\n }}\n >\n {isLoading && i.loadingText}\n </Action>\n )\n })}\n </div>\n )\n }, [filteredMenuItems])\n\n return {\n ActiveComponent: MemoizedActiveComponent,\n Menu: MemoizedMenu,\n }\n}\n"],"names":["useField","React","useEffect","useMemo","useState","useFieldProps","Compose","Proofread","Rephrase","menuItemsMap","styles","getActiveComponent","ac","useMenu","menuEvents","type","fieldType","path","pathFromContext","field","activeComponent","setActiveComponent","initialValue","value","some","i","excludedFor","includes","MemoizedActiveComponent","isLoading","stop","ActiveComponent","activeItem","find","name","hideIcon","onClick","data","trigger","console","error","title","loadingText","filteredMenuItems","filter","MemoizedMenu","onClose","div","className","menu","map","Action","component","disabled","Menu"],"mappings":"AAAA;;AAEA,SAASA,QAAQ,QAAQ,iBAAgB;AACzC,OAAOC,SAASC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,QAAO;AAI3D,SAASC,aAAa,QAAQ,uDAAsD;AACpF,SAASC,OAAO,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,aAAY;AACzD,SAASC,YAAY,QAAQ,gBAAe;AAC5C,OAAOC,YAAY,qBAAoB;AAEvC,MAAMC,qBAAqB,CAACC;IAC1B,OAAQA;QACN,KAAK;YACH,OAAOL;QACT,KAAK;YACH,OAAOC;QACT,KAAK;YACH,OAAOF;QACT;YACE,OAAOE;IACX;AACF;AAEA,OAAO,MAAMK,UAAU,CAACC;IACtB,MAAM,EAAEC,MAAMC,SAAS,EAAEC,MAAMC,eAAe,EAAE,GAAGb;IACnD,MAAMc,QAAQnB,SAAS;QAAEiB,MAAMC;IAAgB;IAC/C,MAAM,CAACE,iBAAiBC,mBAAmB,GAAGjB,SAA0B;IAExE,MAAM,EAAEkB,YAAY,EAAEC,KAAK,EAAE,GAAGJ;IAEhCjB,UAAU;QACR,IAAI,CAACqB,OAAO;YACVF,mBAAmB;YACnB;QACF;QAEA,IAAIZ,aAAae,IAAI,CAAC,CAACC,IAAMA,EAAEC,WAAW,EAAEC,SAASX,aAAa;YAChEK,mBAAmB;YACnB;QACF;QAEA,IAAI,OAAOE,UAAU,YAAYA,UAAUD,cAAc;YACvDD,mBAAmB;QACrB,OAAO;YACLA,mBAAmB;QACrB;IACF,GAAG;QAACC;QAAcC;QAAOP;KAAU;IAEnC,MAAMY,0BAA0BzB,QAAQ;QACtC,OAAO,CAAC,EAAE0B,SAAS,EAAEC,IAAI,EAAE;YACzB,MAAMC,kBAAkBpB,mBAAmBS;YAC3C,MAAMY,aAAavB,aAAawB,IAAI,CAAC,CAACR,IAAMA,EAAES,IAAI,KAAKd;YACvD,qBACE,KAACW;gBACCI,QAAQ;gBACRC,SAAS,CAACC;oBACR,IAAI,CAACR,WAAW;wBACd,MAAMS,UAAUxB,UAAU,CAAC,CAAC,EAAE,EAAEM,iBAAiB,CAAC;wBAClD,IAAI,OAAOkB,YAAY,YAAY;4BACjCA,QAAQD;wBACV,OAAO;4BACLE,QAAQC,KAAK,CAAC,wBAAwBpB;wBACxC;oBACF,OAAO;wBACLU;oBACF;gBACF;gBACAW,OAAOZ,YAAY,kBAAkBG,WAAWE,IAAI;0BAEnDL,aAAaG,WAAWU,WAAW;;QAG1C;IACF,GAAG;QAACtB;KAAgB;IAEpB,MAAMuB,oBAAoBxC,QACxB,IACEM,aAAamC,MAAM,CAAC,CAACnB,IAAMA,EAAES,IAAI,KAAKd,mBAAmB,CAACK,EAAEC,WAAW,EAAEC,SAASX,aACpF;QAACI;QAAiBJ;KAAU;IAG9B,MAAM6B,eAAe1C,QAAQ;QAC3B,OAAO,CAAC,EAAE0B,SAAS,EAAEiB,OAAO,EAAE,iBAC5B,KAACC;gBAAIC,WAAWtC,OAAOuC,IAAI;0BACxBN,kBAAkBO,GAAG,CAAC,CAACzB;oBACtB,MAAM0B,SAAS1B,EAAE2B,SAAS;oBAC1B,qBACE,KAACD;wBACCE,UAAUxB;wBAEVO,SAAS,CAACC;4BACR,IAAIZ,EAAES,IAAI,KAAK,YAAY;gCACzBb,mBAAmBI,EAAES,IAAI;4BAC3B;4BAEApB,UAAU,CAAC,CAAC,EAAE,EAAEW,EAAES,IAAI,EAAE,CAAC,CAACG;4BAC1BS;wBACF;kCAECjB,aAAaJ,EAAEiB,WAAW;uBAVtBjB,EAAES,IAAI;gBAajB;;IAGN,GAAG;QAACS;KAAkB;IAEtB,OAAO;QACLZ,iBAAiBH;QACjB0B,MAAMT;IACR;AACF,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGenerate.d.ts","sourceRoot":"","sources":["../../../../src/ui/Compose/hooks/useGenerate.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,mBAAmB,CAAA;AAa1E,KAAK,oBAAoB,GAAG;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAEzE,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"useGenerate.d.ts","sourceRoot":"","sources":["../../../../src/ui/Compose/hooks/useGenerate.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,mBAAmB,CAAA;AAa1E,KAAK,oBAAoB,GAAG;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAEzE,eAAO,MAAM,WAAW,GAAI,mBAAmB;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE;yBA2MnD,oBAAoB;;;CA2BxC,CAAA"}
|
|
@@ -2,13 +2,21 @@ import { useEditorConfigContext } from '@payloadcms/richtext-lexical/client';
|
|
|
2
2
|
import { useConfig, useField, useForm, useLocale } from '@payloadcms/ui';
|
|
3
3
|
import { jsonSchema } from 'ai';
|
|
4
4
|
import { useCompletion, experimental_useObject as useObject } from 'ai/react';
|
|
5
|
-
import { useCallback, useEffect, useMemo } from 'react';
|
|
5
|
+
import { useCallback, useEffect, useMemo, useRef } from 'react';
|
|
6
6
|
import { PLUGIN_API_ENDPOINT_GENERATE, PLUGIN_API_ENDPOINT_GENERATE_UPLOAD, PLUGIN_INSTRUCTIONS_TABLE, PLUGIN_NAME } from '../../../defaults.js';
|
|
7
7
|
import { useFieldProps } from '../../../providers/FieldProvider/useFieldProps.js';
|
|
8
8
|
import { editorSchemaValidator } from '../../../utilities/editorSchemaValidator.js';
|
|
9
9
|
import { setSafeLexicalState } from '../../../utilities/setSafeLexicalState.js';
|
|
10
10
|
import { useHistory } from './useHistory.js';
|
|
11
11
|
export const useGenerate = ({ instructionId })=>{
|
|
12
|
+
// Create a ref to hold the current instructionId
|
|
13
|
+
const instructionIdRef = useRef(instructionId);
|
|
14
|
+
// Update the ref whenever instructionId changes
|
|
15
|
+
useEffect(()=>{
|
|
16
|
+
instructionIdRef.current = instructionId;
|
|
17
|
+
}, [
|
|
18
|
+
instructionId
|
|
19
|
+
]);
|
|
12
20
|
const { type, path: pathFromContext } = useFieldProps();
|
|
13
21
|
const editorConfigContext = useEditorConfigContext();
|
|
14
22
|
const { editor } = editorConfigContext;
|
|
@@ -72,7 +80,7 @@ export const useGenerate = ({ instructionId })=>{
|
|
|
72
80
|
});
|
|
73
81
|
}, [
|
|
74
82
|
object,
|
|
75
|
-
|
|
83
|
+
editor
|
|
76
84
|
]);
|
|
77
85
|
const { complete, completion, isLoading: loadingCompletion, stop: completionStop } = useCompletion({
|
|
78
86
|
api: `${serverURL}${api}${PLUGIN_API_ENDPOINT_GENERATE}`,
|
|
@@ -94,10 +102,11 @@ export const useGenerate = ({ instructionId })=>{
|
|
|
94
102
|
]);
|
|
95
103
|
const streamObject = useCallback(({ action = 'Compose', params })=>{
|
|
96
104
|
const doc = getData();
|
|
105
|
+
const currentInstructionId = instructionIdRef.current;
|
|
97
106
|
const options = {
|
|
98
107
|
action,
|
|
99
108
|
actionParams: params,
|
|
100
|
-
instructionId
|
|
109
|
+
instructionId: currentInstructionId
|
|
101
110
|
};
|
|
102
111
|
submit({
|
|
103
112
|
doc,
|
|
@@ -105,16 +114,16 @@ export const useGenerate = ({ instructionId })=>{
|
|
|
105
114
|
options
|
|
106
115
|
});
|
|
107
116
|
}, [
|
|
108
|
-
getData,
|
|
109
117
|
localFromContext?.code,
|
|
110
|
-
|
|
118
|
+
instructionIdRef
|
|
111
119
|
]);
|
|
112
120
|
const streamText = useCallback(async ({ action = 'Compose', params })=>{
|
|
113
121
|
const doc = getData();
|
|
122
|
+
const currentInstructionId = instructionIdRef.current;
|
|
114
123
|
const options = {
|
|
115
124
|
action,
|
|
116
125
|
actionParams: params,
|
|
117
|
-
instructionId
|
|
126
|
+
instructionId: currentInstructionId
|
|
118
127
|
};
|
|
119
128
|
await complete('', {
|
|
120
129
|
body: {
|
|
@@ -126,16 +135,18 @@ export const useGenerate = ({ instructionId })=>{
|
|
|
126
135
|
}, [
|
|
127
136
|
getData,
|
|
128
137
|
localFromContext?.code,
|
|
129
|
-
|
|
138
|
+
instructionIdRef,
|
|
139
|
+
complete
|
|
130
140
|
]);
|
|
131
141
|
const generateUpload = useCallback(async ()=>{
|
|
132
142
|
const doc = getData();
|
|
143
|
+
const currentInstructionId = instructionIdRef.current;
|
|
133
144
|
return fetch(`${serverURL}${api}${PLUGIN_API_ENDPOINT_GENERATE_UPLOAD}`, {
|
|
134
145
|
body: JSON.stringify({
|
|
135
146
|
doc,
|
|
136
147
|
locale: localFromContext?.code,
|
|
137
148
|
options: {
|
|
138
|
-
instructionId
|
|
149
|
+
instructionId: currentInstructionId
|
|
139
150
|
}
|
|
140
151
|
}),
|
|
141
152
|
credentials: 'include',
|
|
@@ -149,6 +160,7 @@ export const useGenerate = ({ instructionId })=>{
|
|
|
149
160
|
if (!result) throw new Error('generateUpload: Something went wrong');
|
|
150
161
|
setValue(result?.id);
|
|
151
162
|
setHistory(result?.id);
|
|
163
|
+
console.log('Image updated...', result);
|
|
152
164
|
} else {
|
|
153
165
|
const { errors = [] } = await uploadResponse.json();
|
|
154
166
|
const errStr = errors.map((error)=>error.message).join(', ');
|
|
@@ -161,7 +173,8 @@ export const useGenerate = ({ instructionId })=>{
|
|
|
161
173
|
}, [
|
|
162
174
|
getData,
|
|
163
175
|
localFromContext?.code,
|
|
164
|
-
|
|
176
|
+
instructionIdRef,
|
|
177
|
+
setValue
|
|
165
178
|
]);
|
|
166
179
|
const generate = useCallback(async (options)=>{
|
|
167
180
|
if (type === 'richText') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/ui/Compose/hooks/useGenerate.ts"],"sourcesContent":["import { useEditorConfigContext } from '@payloadcms/richtext-lexical/client'\nimport { useConfig, useField, useForm, useLocale } from '@payloadcms/ui'\nimport { jsonSchema } from 'ai'\nimport { useCompletion, experimental_useObject as useObject } from 'ai/react'\nimport { useCallback, useEffect, useMemo } from 'react'\n\nimport type { ActionMenuItems, GenerateTextarea } from '../../../types.js'\n\nimport {\n PLUGIN_API_ENDPOINT_GENERATE,\n PLUGIN_API_ENDPOINT_GENERATE_UPLOAD,\n PLUGIN_INSTRUCTIONS_TABLE,\n PLUGIN_NAME,\n} from '../../../defaults.js'\nimport { useFieldProps } from '../../../providers/FieldProvider/useFieldProps.js'\nimport { editorSchemaValidator } from '../../../utilities/editorSchemaValidator.js'\nimport { setSafeLexicalState } from '../../../utilities/setSafeLexicalState.js'\nimport { useHistory } from './useHistory.js'\n\ntype ActionCallbackParams = { action: ActionMenuItems; params?: unknown }\n\nexport const useGenerate = ({ instructionId }: { instructionId: string }) => {\n const { type, path: pathFromContext } = useFieldProps()\n const editorConfigContext = useEditorConfigContext()\n\n const { editor } = editorConfigContext\n\n const { config } = useConfig()\n const {\n routes: { api },\n serverURL,\n } = config\n\n const { setValue } = useField<string>({\n path: pathFromContext,\n })\n\n const { set: setHistory } = useHistory()\n\n const { getData } = useForm()\n const localFromContext = useLocale()\n const {\n config: { collections },\n } = useConfig()\n\n const collection = collections.find((collection) => collection.slug === PLUGIN_INSTRUCTIONS_TABLE)\n const { custom: { [PLUGIN_NAME]: { editorConfig = {} } = {} } = {} } = collection.admin\n const { schema: editorSchema = {} } = editorConfig\n\n const memoizedValidator = useMemo(() => {\n return editorSchemaValidator(editorSchema)\n }, [editorSchema])\n\n const memoizedSchema = useMemo(\n () =>\n jsonSchema(editorSchema, {\n validate: (value) => {\n const isValid = memoizedValidator(value)\n\n if (isValid) {\n return {\n success: true,\n value,\n }\n } else {\n return {\n error: new Error('Invalid schema'),\n success: false,\n }\n }\n },\n }),\n [memoizedValidator],\n )\n\n const {\n isLoading: loadingObject,\n object,\n stop: objectStop,\n submit,\n } = useObject({\n api: `/api${PLUGIN_API_ENDPOINT_GENERATE}`,\n onError: (error) => {\n console.error('Error generating object:', error)\n },\n onFinish: (result) => {\n if (result.object) {\n setHistory(result.object)\n setValue(result.object)\n } else {\n console.log('onFinish: result ', result)\n }\n },\n schema: memoizedSchema,\n })\n\n useEffect(() => {\n if (!object) return\n\n requestAnimationFrame(() => {\n const validateObject = memoizedSchema.validate(object)\n if (validateObject?.success) {\n setSafeLexicalState(object, editor)\n }\n })\n }, [object, editorSchema])\n\n const {\n complete,\n completion,\n isLoading: loadingCompletion,\n stop: completionStop,\n } = useCompletion({\n api: `${serverURL}${api}${PLUGIN_API_ENDPOINT_GENERATE}`,\n onError: (error) => {\n console.error('Error generating text:', error)\n },\n onFinish: (prompt, result) => {\n setHistory(result)\n },\n streamProtocol: 'data',\n })\n\n useEffect(() => {\n if (!completion) return\n\n requestAnimationFrame(() => {\n setValue(completion)\n })\n }, [completion])\n\n const streamObject = useCallback(\n ({ action = 'Compose', params }: ActionCallbackParams) => {\n const doc = getData()\n const options = {\n action,\n actionParams: params,\n instructionId,\n }\n\n submit({\n doc,\n locale: localFromContext?.code,\n options,\n })\n },\n [getData, localFromContext?.code, instructionId],\n )\n\n const streamText = useCallback(\n async ({ action = 'Compose', params }: ActionCallbackParams) => {\n const doc = getData()\n\n const options = {\n action,\n actionParams: params,\n instructionId,\n }\n\n await complete('', {\n body: {\n doc,\n locale: localFromContext?.code,\n options,\n },\n })\n },\n [getData, localFromContext?.code, instructionId],\n )\n\n const generateUpload = useCallback(async () => {\n const doc = getData()\n\n return fetch(`${serverURL}${api}${PLUGIN_API_ENDPOINT_GENERATE_UPLOAD}`, {\n body: JSON.stringify({\n doc,\n locale: localFromContext?.code,\n options: {\n instructionId,\n },\n } satisfies Parameters<GenerateTextarea>[0]),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n .then(async (uploadResponse) => {\n if (uploadResponse.ok) {\n const { result } = await uploadResponse.json()\n if (!result) throw new Error('generateUpload: Something went wrong')\n\n setValue(result?.id)\n setHistory(result?.id)\n } else {\n const { errors = [] } = await uploadResponse.json()\n const errStr = errors.map((error) => error.message).join(', ')\n throw new Error(errStr)\n }\n return uploadResponse\n })\n .catch((error) => {\n console.error('Error generating or setting your upload, please set it manually if its saved in your media files: ', error)\n })\n }, [getData, localFromContext?.code, instructionId])\n\n const generate = useCallback(\n async (options?: ActionCallbackParams) => {\n if (type === 'richText') {\n return streamObject(options)\n }\n\n if (['text', 'textarea'].includes(type)) {\n return streamText(options)\n }\n\n if (type === 'upload') {\n return generateUpload()\n }\n },\n [generateUpload, streamObject, streamText, type],\n )\n\n const stop = useCallback(() => {\n console.log('Stopping...')\n objectStop()\n completionStop()\n }, [objectStop, completionStop])\n\n return {\n generate,\n isLoading: loadingCompletion || loadingObject,\n stop\n }\n}\n"],"names":["useEditorConfigContext","useConfig","useField","useForm","useLocale","jsonSchema","useCompletion","experimental_useObject","useObject","useCallback","useEffect","useMemo","PLUGIN_API_ENDPOINT_GENERATE","PLUGIN_API_ENDPOINT_GENERATE_UPLOAD","PLUGIN_INSTRUCTIONS_TABLE","PLUGIN_NAME","useFieldProps","editorSchemaValidator","setSafeLexicalState","useHistory","useGenerate","instructionId","type","path","pathFromContext","editorConfigContext","editor","config","routes","api","serverURL","setValue","set","setHistory","getData","localFromContext","collections","collection","find","slug","custom","editorConfig","admin","schema","editorSchema","memoizedValidator","memoizedSchema","validate","value","isValid","success","error","Error","isLoading","loadingObject","object","stop","objectStop","submit","onError","console","onFinish","result","log","requestAnimationFrame","validateObject","complete","completion","loadingCompletion","completionStop","prompt","streamProtocol","streamObject","action","params","doc","options","actionParams","locale","code","streamText","body","generateUpload","fetch","JSON","stringify","credentials","headers","method","then","uploadResponse","ok","json","id","errors","errStr","map","message","join","catch","generate","includes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/ui/Compose/hooks/useGenerate.ts"],"sourcesContent":["import { useEditorConfigContext } from '@payloadcms/richtext-lexical/client'\nimport { useConfig, useField, useForm, useLocale } from '@payloadcms/ui'\nimport { jsonSchema } from 'ai'\nimport { useCompletion, experimental_useObject as useObject } from 'ai/react'\nimport { useCallback, useEffect, useMemo, useRef } from 'react'\n\nimport type { ActionMenuItems, GenerateTextarea } from '../../../types.js'\n\nimport {\n PLUGIN_API_ENDPOINT_GENERATE,\n PLUGIN_API_ENDPOINT_GENERATE_UPLOAD,\n PLUGIN_INSTRUCTIONS_TABLE,\n PLUGIN_NAME,\n} from '../../../defaults.js'\nimport { useFieldProps } from '../../../providers/FieldProvider/useFieldProps.js'\nimport { editorSchemaValidator } from '../../../utilities/editorSchemaValidator.js'\nimport { setSafeLexicalState } from '../../../utilities/setSafeLexicalState.js'\nimport { useHistory } from './useHistory.js'\n\ntype ActionCallbackParams = { action: ActionMenuItems; params?: unknown }\n\nexport const useGenerate = ({ instructionId }: { instructionId: string }) => {\n // Create a ref to hold the current instructionId\n const instructionIdRef = useRef(instructionId)\n\n // Update the ref whenever instructionId changes\n useEffect(() => {\n instructionIdRef.current = instructionId\n }, [instructionId])\n\n const { type, path: pathFromContext } = useFieldProps()\n const editorConfigContext = useEditorConfigContext()\n\n const { editor } = editorConfigContext\n\n const { config } = useConfig()\n const {\n routes: { api },\n serverURL,\n } = config\n\n const { setValue } = useField<string>({\n path: pathFromContext,\n })\n\n const { set: setHistory } = useHistory()\n\n const { getData } = useForm()\n const localFromContext = useLocale()\n const {\n config: { collections },\n } = useConfig()\n\n const collection = collections.find((collection) => collection.slug === PLUGIN_INSTRUCTIONS_TABLE)\n const { custom: { [PLUGIN_NAME]: { editorConfig = {} } = {} } = {} } = collection.admin\n const { schema: editorSchema = {} } = editorConfig\n\n const memoizedValidator = useMemo(() => {\n return editorSchemaValidator(editorSchema)\n }, [editorSchema])\n\n const memoizedSchema = useMemo(\n () =>\n jsonSchema(editorSchema, {\n validate: (value) => {\n const isValid = memoizedValidator(value)\n\n if (isValid) {\n return {\n success: true,\n value,\n }\n } else {\n return {\n error: new Error('Invalid schema'),\n success: false,\n }\n }\n },\n }),\n [memoizedValidator],\n )\n\n const {\n isLoading: loadingObject,\n object,\n stop: objectStop,\n submit,\n } = useObject({\n api: `/api${PLUGIN_API_ENDPOINT_GENERATE}`,\n onError: (error) => {\n console.error('Error generating object:', error)\n },\n onFinish: (result) => {\n if (result.object) {\n setHistory(result.object)\n setValue(result.object)\n } else {\n console.log('onFinish: result ', result)\n }\n },\n schema: memoizedSchema,\n })\n\n useEffect(() => {\n if (!object) return\n\n requestAnimationFrame(() => {\n const validateObject = memoizedSchema.validate(object)\n if (validateObject?.success) {\n setSafeLexicalState(object, editor)\n }\n })\n }, [object, editor])\n\n const {\n complete,\n completion,\n isLoading: loadingCompletion,\n stop: completionStop,\n } = useCompletion({\n api: `${serverURL}${api}${PLUGIN_API_ENDPOINT_GENERATE}`,\n onError: (error) => {\n console.error('Error generating text:', error)\n },\n onFinish: (prompt, result) => {\n setHistory(result)\n },\n streamProtocol: 'data',\n })\n\n useEffect(() => {\n if (!completion) return\n\n requestAnimationFrame(() => {\n setValue(completion)\n })\n }, [completion])\n\n const streamObject = useCallback(\n ({ action = 'Compose', params }: ActionCallbackParams) => {\n const doc = getData()\n\n const currentInstructionId = instructionIdRef.current\n\n const options = {\n action,\n actionParams: params,\n instructionId: currentInstructionId,\n }\n\n submit({\n doc,\n locale: localFromContext?.code,\n options,\n })\n },\n [localFromContext?.code, instructionIdRef],\n )\n\n const streamText = useCallback(\n async ({ action = 'Compose', params }: ActionCallbackParams) => {\n const doc = getData()\n const currentInstructionId = instructionIdRef.current\n\n const options = {\n action,\n actionParams: params,\n instructionId: currentInstructionId,\n }\n\n await complete('', {\n body: {\n doc,\n locale: localFromContext?.code,\n options,\n },\n })\n },\n [getData, localFromContext?.code, instructionIdRef, complete],\n )\n\n const generateUpload = useCallback(async () => {\n const doc = getData()\n const currentInstructionId = instructionIdRef.current\n\n return fetch(`${serverURL}${api}${PLUGIN_API_ENDPOINT_GENERATE_UPLOAD}`, {\n body: JSON.stringify({\n doc,\n locale: localFromContext?.code,\n options: {\n instructionId: currentInstructionId,\n },\n } satisfies Parameters<GenerateTextarea>[0]),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n .then(async (uploadResponse) => {\n if (uploadResponse.ok) {\n const { result } = await uploadResponse.json()\n if (!result) throw new Error('generateUpload: Something went wrong')\n\n setValue(result?.id)\n setHistory(result?.id)\n console.log('Image updated...', result)\n } else {\n const { errors = [] } = await uploadResponse.json()\n const errStr = errors.map((error) => error.message).join(', ')\n throw new Error(errStr)\n }\n return uploadResponse\n })\n .catch((error) => {\n console.error(\n 'Error generating or setting your upload, please set it manually if its saved in your media files: ',\n error,\n )\n })\n }, [getData, localFromContext?.code, instructionIdRef, setValue])\n\n const generate = useCallback(\n async (options?: ActionCallbackParams) => {\n if (type === 'richText') {\n return streamObject(options)\n }\n\n if (['text', 'textarea'].includes(type)) {\n return streamText(options)\n }\n\n if (type === 'upload') {\n return generateUpload()\n }\n },\n [generateUpload, streamObject, streamText, type],\n )\n\n const stop = useCallback(() => {\n console.log('Stopping...')\n objectStop()\n completionStop()\n }, [objectStop, completionStop])\n\n return {\n generate,\n isLoading: loadingCompletion || loadingObject,\n stop,\n }\n}\n"],"names":["useEditorConfigContext","useConfig","useField","useForm","useLocale","jsonSchema","useCompletion","experimental_useObject","useObject","useCallback","useEffect","useMemo","useRef","PLUGIN_API_ENDPOINT_GENERATE","PLUGIN_API_ENDPOINT_GENERATE_UPLOAD","PLUGIN_INSTRUCTIONS_TABLE","PLUGIN_NAME","useFieldProps","editorSchemaValidator","setSafeLexicalState","useHistory","useGenerate","instructionId","instructionIdRef","current","type","path","pathFromContext","editorConfigContext","editor","config","routes","api","serverURL","setValue","set","setHistory","getData","localFromContext","collections","collection","find","slug","custom","editorConfig","admin","schema","editorSchema","memoizedValidator","memoizedSchema","validate","value","isValid","success","error","Error","isLoading","loadingObject","object","stop","objectStop","submit","onError","console","onFinish","result","log","requestAnimationFrame","validateObject","complete","completion","loadingCompletion","completionStop","prompt","streamProtocol","streamObject","action","params","doc","currentInstructionId","options","actionParams","locale","code","streamText","body","generateUpload","fetch","JSON","stringify","credentials","headers","method","then","uploadResponse","ok","json","id","errors","errStr","map","message","join","catch","generate","includes"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Icons.d.ts","sourceRoot":"","sources":["../../../src/ui/Icons/Icons.tsx"],"names":[],"mappings":"AAKA,eAAO,MAAM,UAAU;;;
|
|
1
|
+
{"version":3,"file":"Icons.d.ts","sourceRoot":"","sources":["../../../src/ui/Icons/Icons.tsx"],"names":[],"mappings":"AAKA,eAAO,MAAM,UAAU,GAAI;;;CAA8B,4CAMxD,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI;;;CAA8B,4CAQtD,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI;;;CAA8B,4CAQ9D,CAAA;AAED,eAAO,MAAM,cAAc,GAAI;;;CAA8B,4CAQ5D,CAAA;AAED,eAAO,MAAM,aAAa,GAAI;;;CAA8B,4CAQ3D,CAAA;AAED,eAAO,MAAM,aAAa,GAAI;;;CAA8B,4CAQ3D,CAAA;AAED,eAAO,MAAM,aAAa,GAAI;;;CAA8B,4CAQ3D,CAAA;AAED,eAAO,MAAM,WAAW,GAAI;;;CAA8B,4CAQzD,CAAA;AAED,eAAO,MAAM,cAAc,GAAI;;;CAA8B,4CAQ5D,CAAA;AAED,eAAO,MAAM,YAAY,GAAI;;;CAA8B,4CAQ1D,CAAA;AAED,eAAO,MAAM,SAAS,GAAI;;;CAA8B,4CAQvD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LottieAnimation.d.ts","sourceRoot":"","sources":["../../../src/ui/Icons/LottieAnimation.tsx"],"names":[],"mappings":"AAIA,QAAA,MAAM,eAAe;;
|
|
1
|
+
{"version":3,"file":"LottieAnimation.d.ts","sourceRoot":"","sources":["../../../src/ui/Icons/LottieAnimation.tsx"],"names":[],"mappings":"AAIA,QAAA,MAAM,eAAe,GAAI;;CAAqB,4CAqE7C,CAAA;AAED,eAAe,eAAe,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editorSchemaValidator.d.ts","sourceRoot":"","sources":["../../src/utilities/editorSchemaValidator.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,KAAK,CAAA;AAE3B,eAAO,MAAM,qBAAqB,
|
|
1
|
+
{"version":3,"file":"editorSchemaValidator.d.ts","sourceRoot":"","sources":["../../src/utilities/editorSchemaValidator.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,KAAK,CAAA;AAE3B,eAAO,MAAM,qBAAqB,GAAI,WAAM,wCA+B3C,CAAA"}
|
|
@@ -8,7 +8,8 @@ export const editorSchemaValidator = (schema)=>{
|
|
|
8
8
|
if (parentProperties) {
|
|
9
9
|
const requiredFields = [
|
|
10
10
|
'type'
|
|
11
|
-
]
|
|
11
|
+
] // type is always required
|
|
12
|
+
;
|
|
12
13
|
// Check if this node has children property
|
|
13
14
|
if ('children' in parentProperties) {
|
|
14
15
|
requiredFields.push('children');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/editorSchemaValidator.ts"],"sourcesContent":["import ajvModule from 'ajv'\n\nexport const editorSchemaValidator = (schema) => {\n const modifiedSchema = JSON.parse(
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/editorSchemaValidator.ts"],"sourcesContent":["import ajvModule from 'ajv'\n\nexport const editorSchemaValidator = (schema) => {\n const modifiedSchema = JSON.parse(JSON.stringify(schema), function (key: string, value: any) {\n if (key === 'required' && Array.isArray(value)) {\n // Safely access properties from parent\n const parent = this as { properties?: Record<string, any> }\n const parentProperties = parent.properties\n\n if (parentProperties) {\n const requiredFields = ['type'] // type is always required\n\n // Check if this node has children property\n if ('children' in parentProperties) {\n requiredFields.push('children')\n }\n\n // Check if this node has text property\n if ('text' in parentProperties) {\n requiredFields.push('text')\n }\n\n const filteredRequired = value.filter((field) => requiredFields.includes(field))\n return filteredRequired.length ? filteredRequired : undefined\n }\n }\n return value\n })\n\n const Ajv = ajvModule.default\n const ajv = new Ajv()\n\n return ajv.compile(modifiedSchema)\n}\n"],"names":["ajvModule","editorSchemaValidator","schema","modifiedSchema","JSON","parse","stringify","key","value","Array","isArray","parent","parentProperties","properties","requiredFields","push","filteredRequired","filter","field","includes","length","undefined","Ajv","default","ajv","compile"],"mappings":"AAAA,OAAOA,eAAe,MAAK;AAE3B,OAAO,MAAMC,wBAAwB,CAACC;IACpC,MAAMC,iBAAiBC,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACJ,SAAS,SAAUK,GAAW,EAAEC,KAAU;QACzF,IAAID,QAAQ,cAAcE,MAAMC,OAAO,CAACF,QAAQ;YAC9C,uCAAuC;YACvC,MAAMG,SAAS,IAAI;YACnB,MAAMC,mBAAmBD,OAAOE,UAAU;YAE1C,IAAID,kBAAkB;gBACpB,MAAME,iBAAiB;oBAAC;iBAAO,CAAC,0BAA0B;;gBAE1D,2CAA2C;gBAC3C,IAAI,cAAcF,kBAAkB;oBAClCE,eAAeC,IAAI,CAAC;gBACtB;gBAEA,uCAAuC;gBACvC,IAAI,UAAUH,kBAAkB;oBAC9BE,eAAeC,IAAI,CAAC;gBACtB;gBAEA,MAAMC,mBAAmBR,MAAMS,MAAM,CAAC,CAACC,QAAUJ,eAAeK,QAAQ,CAACD;gBACzE,OAAOF,iBAAiBI,MAAM,GAAGJ,mBAAmBK;YACtD;QACF;QACA,OAAOb;IACT;IAEA,MAAMc,MAAMtB,UAAUuB,OAAO;IAC7B,MAAMC,MAAM,IAAIF;IAEhB,OAAOE,IAAIC,OAAO,CAACtB;AACrB,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFieldBySchemaPath.d.ts","sourceRoot":"","sources":["../../src/utilities/getFieldBySchemaPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE9E,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"getFieldBySchemaPath.d.ts","sourceRoot":"","sources":["../../src/utilities/getFieldBySchemaPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE9E,eAAO,MAAM,oBAAoB,GAC/B,kBAAkB,sBAAsB,GAAG,gBAAgB,EAC3D,YAAY,MAAM,KACjB,KAAK,GAAG,IAyCV,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFieldInfo.d.ts","sourceRoot":"","sources":["../../src/utilities/getFieldInfo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAI1C,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"getFieldInfo.d.ts","sourceRoot":"","sources":["../../src/utilities/getFieldInfo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAI1C,eAAO,MAAM,YAAY,GAAI,aAAa,WAAW,CAAC,aAAa,CAAC,EAAE,YAAY,MAAM,QAUvF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setSafeLexicalState.d.ts","sourceRoot":"","sources":["../../src/utilities/setSafeLexicalState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,KAAK,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAA;AAExC,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"setSafeLexicalState.d.ts","sourceRoot":"","sources":["../../src/utilities/setSafeLexicalState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,KAAK,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAA;AAExC,eAAO,MAAM,mBAAmB,GAC9B,UAAK,EACL,gBAAgB,aAAa,EAC7B,SAAQ,YAAwB,SAYjC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/setSafeLexicalState.ts"],"sourcesContent":["import type { LexicalEditor } from 'lexical'\n\ntype EditorAction = 'replace' | 'update'\n\nexport const setSafeLexicalState = (\n state,\n editorInstance: LexicalEditor,\n action: EditorAction = 'replace',\n) => {\n try {\n const editorState = editorInstance.parseEditorState(state)\n if (editorState.isEmpty()) {\n return\n }\n\n editorInstance.setEditorState(editorState)\n } catch (e) {\n
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/setSafeLexicalState.ts"],"sourcesContent":["import type { LexicalEditor } from 'lexical'\n\ntype EditorAction = 'replace' | 'update'\n\nexport const setSafeLexicalState = (\n state,\n editorInstance: LexicalEditor,\n action: EditorAction = 'replace',\n) => {\n try {\n const editorState = editorInstance.parseEditorState(state)\n if (editorState.isEmpty()) {\n return\n }\n\n editorInstance.setEditorState(editorState)\n } catch (e) {\n console.error('Error setting editor state: ', e)\n }\n}\n"],"names":["setSafeLexicalState","state","editorInstance","action","editorState","parseEditorState","isEmpty","setEditorState","e","console","error"],"mappings":"AAIA,OAAO,MAAMA,sBAAsB,CACjCC,OACAC,gBACAC,SAAuB,SAAS;IAEhC,IAAI;QACF,MAAMC,cAAcF,eAAeG,gBAAgB,CAACJ;QACpD,IAAIG,YAAYE,OAAO,IAAI;YACzB;QACF;QAEAJ,eAAeK,cAAc,CAACH;IAChC,EAAE,OAAOI,GAAG;QACVC,QAAQC,KAAK,CAAC,gCAAgCF;IAChD;AACF,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateFieldsConfig.d.ts","sourceRoot":"","sources":["../../src/utilities/updateFieldsConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,UAAU,kBAAkB;IAC1B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,uBAAuB,EAAE,gBAAgB,CAAA;CAC1C;AAED,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"updateFieldsConfig.d.ts","sourceRoot":"","sources":["../../src/utilities/updateFieldsConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,UAAU,kBAAkB;IAC1B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,uBAAuB,EAAE,gBAAgB,CAAA;CAC1C;AAED,eAAO,MAAM,kBAAkB,GAAI,kBAAkB,gBAAgB,KAAG,kBAkGvE,CAAA"}
|