@ai-stack/payloadcms 3.0.0-beta.95.1 → 3.2.1-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.
Files changed (194) hide show
  1. package/LICENSE.md +2 -2
  2. package/README.md +19 -17
  3. package/dist/ai/models/anthropic/generateRichText.d.ts.map +1 -1
  4. package/dist/ai/models/anthropic/generateRichText.js +2 -2
  5. package/dist/ai/models/anthropic/generateRichText.js.map +1 -1
  6. package/dist/ai/models/anthropic/index.d.ts.map +1 -1
  7. package/dist/ai/models/anthropic/index.js +8 -32
  8. package/dist/ai/models/anthropic/index.js.map +1 -1
  9. package/dist/ai/models/elevenLabs/generateVoice.d.ts +1 -1
  10. package/dist/ai/models/elevenLabs/index.d.ts.map +1 -1
  11. package/dist/ai/models/elevenLabs/index.js +4 -3
  12. package/dist/ai/models/elevenLabs/index.js.map +1 -1
  13. package/dist/ai/models/openai/generateImage.d.ts +1 -1
  14. package/dist/ai/models/openai/generateRichText.js +2 -2
  15. package/dist/ai/models/openai/generateRichText.js.map +1 -1
  16. package/dist/ai/models/openai/generateVoice.d.ts +1 -1
  17. package/dist/ai/models/openai/index.d.ts.map +1 -1
  18. package/dist/ai/models/openai/index.js +9 -35
  19. package/dist/ai/models/openai/index.js.map +1 -1
  20. package/dist/ai/prompts.d.ts +1 -1
  21. package/dist/ai/prompts.d.ts.map +1 -1
  22. package/dist/ai/prompts.js +6 -3
  23. package/dist/ai/prompts.js.map +1 -1
  24. package/dist/ai/schemas/lexicalJsonSchema.d.ts +2 -0
  25. package/dist/ai/schemas/lexicalJsonSchema.d.ts.map +1 -0
  26. package/dist/ai/schemas/lexicalJsonSchema.js +317 -0
  27. package/dist/ai/schemas/lexicalJsonSchema.js.map +1 -0
  28. package/dist/ai/utils/generateFileNameByPrompt.js.map +1 -1
  29. package/dist/ai/utils/systemGenerate.d.ts +5 -0
  30. package/dist/ai/utils/systemGenerate.d.ts.map +1 -0
  31. package/dist/ai/utils/{generateSeedPrompt.js → systemGenerate.js} +2 -2
  32. package/dist/ai/utils/systemGenerate.js.map +1 -0
  33. package/dist/collections/Instructions.d.ts +1 -1
  34. package/dist/collections/Instructions.d.ts.map +1 -1
  35. package/dist/collections/Instructions.js +177 -85
  36. package/dist/collections/Instructions.js.map +1 -1
  37. package/dist/defaults.d.ts +1 -1
  38. package/dist/defaults.d.ts.map +1 -1
  39. package/dist/defaults.js +1 -1
  40. package/dist/defaults.js.map +1 -1
  41. package/dist/endpoints/fetchFields.d.ts +3 -0
  42. package/dist/endpoints/fetchFields.d.ts.map +1 -0
  43. package/dist/endpoints/fetchFields.js +21 -0
  44. package/dist/endpoints/fetchFields.js.map +1 -0
  45. package/dist/endpoints/index.d.ts.map +1 -1
  46. package/dist/endpoints/index.js +12 -18
  47. package/dist/endpoints/index.js.map +1 -1
  48. package/dist/exports/client.d.ts +0 -1
  49. package/dist/exports/client.d.ts.map +1 -1
  50. package/dist/exports/client.js +0 -1
  51. package/dist/exports/client.js.map +1 -1
  52. package/dist/exports/fields.d.ts +2 -0
  53. package/dist/exports/fields.d.ts.map +1 -1
  54. package/dist/exports/fields.js +2 -0
  55. package/dist/exports/fields.js.map +1 -1
  56. package/dist/fields/ComposeField/ComposeField.d.ts +3 -0
  57. package/dist/fields/ComposeField/ComposeField.d.ts.map +1 -0
  58. package/dist/fields/ComposeField/ComposeField.js +24 -0
  59. package/dist/fields/ComposeField/ComposeField.js.map +1 -0
  60. package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts +2 -0
  61. package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts.map +1 -0
  62. package/dist/fields/LexicalEditor/ComposeFeatureComponent.js +28 -0
  63. package/dist/fields/LexicalEditor/ComposeFeatureComponent.js.map +1 -0
  64. package/dist/fields/LexicalEditor/feature.client.d.ts +4 -1
  65. package/dist/fields/LexicalEditor/feature.client.d.ts.map +1 -1
  66. package/dist/fields/LexicalEditor/feature.client.js +15 -7
  67. package/dist/fields/LexicalEditor/feature.client.js.map +1 -1
  68. package/dist/fields/PromptEditorField/PromptEditorField.d.ts +2 -2
  69. package/dist/fields/PromptEditorField/PromptEditorField.d.ts.map +1 -1
  70. package/dist/fields/PromptEditorField/PromptEditorField.js +4 -8
  71. package/dist/fields/PromptEditorField/PromptEditorField.js.map +1 -1
  72. package/dist/fields/SelectField/SelectField.d.ts +3 -2
  73. package/dist/fields/SelectField/SelectField.d.ts.map +1 -1
  74. package/dist/fields/SelectField/SelectField.js +2 -3
  75. package/dist/fields/SelectField/SelectField.js.map +1 -1
  76. package/dist/index.d.ts +1 -6
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +1 -6
  79. package/dist/index.js.map +1 -1
  80. package/dist/init.d.ts +2 -1
  81. package/dist/init.d.ts.map +1 -1
  82. package/dist/init.js +22 -21
  83. package/dist/init.js.map +1 -1
  84. package/dist/libraries/autocomplete/AutocompleteTextArea.js +9 -7
  85. package/dist/libraries/autocomplete/AutocompleteTextArea.js.map +1 -1
  86. package/dist/libraries/handlebars/asyncHandlebars.js +1 -1
  87. package/dist/libraries/handlebars/asyncHandlebars.js.map +1 -1
  88. package/dist/libraries/handlebars/helpers.js.map +1 -1
  89. package/dist/plugin.d.ts.map +1 -1
  90. package/dist/plugin.js +30 -41
  91. package/dist/plugin.js.map +1 -1
  92. package/dist/providers/FieldProvider/FieldProvider.d.ts +15 -0
  93. package/dist/providers/FieldProvider/FieldProvider.d.ts.map +1 -0
  94. package/dist/providers/FieldProvider/FieldProvider.js +33 -0
  95. package/dist/providers/FieldProvider/FieldProvider.js.map +1 -0
  96. package/dist/providers/FieldProvider/useFieldProps.d.ts +6 -0
  97. package/dist/providers/FieldProvider/useFieldProps.d.ts.map +1 -0
  98. package/dist/providers/FieldProvider/useFieldProps.js +12 -0
  99. package/dist/providers/FieldProvider/useFieldProps.js.map +1 -0
  100. package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts +5 -1
  101. package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts.map +1 -1
  102. package/dist/providers/InstructionsProvider/InstructionsProvider.js +12 -7
  103. package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
  104. package/dist/providers/InstructionsProvider/useInstructions.d.ts +2 -2
  105. package/dist/providers/InstructionsProvider/useInstructions.d.ts.map +1 -1
  106. package/dist/providers/InstructionsProvider/useInstructions.js +17 -4
  107. package/dist/providers/InstructionsProvider/useInstructions.js.map +1 -1
  108. package/dist/types.d.ts +9 -41
  109. package/dist/types.d.ts.map +1 -1
  110. package/dist/types.js +1 -4
  111. package/dist/types.js.map +1 -1
  112. package/dist/ui/Compose/Compose.d.ts +9 -0
  113. package/dist/ui/Compose/Compose.d.ts.map +1 -0
  114. package/dist/ui/{Actions/Actions.js → Compose/Compose.js} +49 -39
  115. package/dist/ui/Compose/Compose.js.map +1 -0
  116. package/dist/ui/{Actions → Compose}/UndoRedoActions.d.ts.map +1 -1
  117. package/dist/ui/{Actions → Compose}/UndoRedoActions.js +15 -2
  118. package/dist/ui/Compose/UndoRedoActions.js.map +1 -0
  119. package/dist/ui/{Actions → Compose}/hooks/menu/Item.d.ts +1 -1
  120. package/dist/ui/{Actions → Compose}/hooks/menu/Item.d.ts.map +1 -1
  121. package/dist/ui/{Actions → Compose}/hooks/menu/Item.js +2 -2
  122. package/dist/ui/{Actions → Compose}/hooks/menu/Item.js.map +1 -1
  123. package/dist/ui/Compose/hooks/menu/TranslateMenu.d.ts.map +1 -0
  124. package/dist/ui/{Actions → Compose}/hooks/menu/TranslateMenu.js +11 -11
  125. package/dist/ui/Compose/hooks/menu/TranslateMenu.js.map +1 -0
  126. package/dist/ui/{Actions → Compose}/hooks/menu/items.d.ts +8 -8
  127. package/dist/ui/{Actions → Compose}/hooks/menu/items.d.ts.map +1 -1
  128. package/dist/ui/{Actions → Compose}/hooks/menu/items.js.map +1 -1
  129. package/dist/ui/{Actions → Compose}/hooks/menu/itemsMap.d.ts +1 -1
  130. package/dist/ui/Compose/hooks/menu/itemsMap.d.ts.map +1 -0
  131. package/dist/ui/{Actions → Compose}/hooks/menu/itemsMap.js +1 -2
  132. package/dist/ui/Compose/hooks/menu/itemsMap.js.map +1 -0
  133. package/dist/ui/Compose/hooks/menu/useMenu.d.ts.map +1 -0
  134. package/dist/ui/{Actions → Compose}/hooks/menu/useMenu.js +2 -1
  135. package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -0
  136. package/dist/ui/{Actions → Compose}/hooks/useGenerate.d.ts +3 -1
  137. package/dist/ui/Compose/hooks/useGenerate.d.ts.map +1 -0
  138. package/dist/ui/{Actions → Compose}/hooks/useGenerate.js +19 -24
  139. package/dist/ui/Compose/hooks/useGenerate.js.map +1 -0
  140. package/dist/ui/Compose/hooks/useHistory.d.ts.map +1 -0
  141. package/dist/ui/{Actions → Compose}/hooks/useHistory.js +6 -3
  142. package/dist/ui/Compose/hooks/useHistory.js.map +1 -0
  143. package/dist/utilities/setSafeLexicalState.d.ts +2 -2
  144. package/dist/utilities/setSafeLexicalState.d.ts.map +1 -1
  145. package/dist/utilities/setSafeLexicalState.js +5 -12
  146. package/dist/utilities/setSafeLexicalState.js.map +1 -1
  147. package/dist/utilities/updateFieldsConfig.d.ts.map +1 -1
  148. package/dist/utilities/updateFieldsConfig.js +18 -6
  149. package/dist/utilities/updateFieldsConfig.js.map +1 -1
  150. package/package.json +32 -37
  151. package/dist/ai/schemas/lexical.schema.d.ts +0 -31
  152. package/dist/ai/schemas/lexical.schema.d.ts.map +0 -1
  153. package/dist/ai/schemas/lexical.schema.js +0 -102
  154. package/dist/ai/schemas/lexical.schema.js.map +0 -1
  155. package/dist/ai/utils/generateSeedPrompt.d.ts +0 -5
  156. package/dist/ai/utils/generateSeedPrompt.d.ts.map +0 -1
  157. package/dist/ai/utils/generateSeedPrompt.js.map +0 -1
  158. package/dist/fields/DescriptionField/DescriptionField.d.ts +0 -2
  159. package/dist/fields/DescriptionField/DescriptionField.d.ts.map +0 -1
  160. package/dist/fields/DescriptionField/DescriptionField.js +0 -16
  161. package/dist/fields/DescriptionField/DescriptionField.js.map +0 -1
  162. package/dist/fields/DescriptionField/DescriptionFieldComponent.d.ts +0 -3
  163. package/dist/fields/DescriptionField/DescriptionFieldComponent.d.ts.map +0 -1
  164. package/dist/fields/DescriptionField/DescriptionFieldComponent.js +0 -19
  165. package/dist/fields/DescriptionField/DescriptionFieldComponent.js.map +0 -1
  166. package/dist/fields/LexicalEditor/ActionsFeatureComponent.d.ts +0 -2
  167. package/dist/fields/LexicalEditor/ActionsFeatureComponent.d.ts.map +0 -1
  168. package/dist/fields/LexicalEditor/ActionsFeatureComponent.js +0 -15
  169. package/dist/fields/LexicalEditor/ActionsFeatureComponent.js.map +0 -1
  170. package/dist/ui/Actions/Actions.d.ts +0 -5
  171. package/dist/ui/Actions/Actions.d.ts.map +0 -1
  172. package/dist/ui/Actions/Actions.js.map +0 -1
  173. package/dist/ui/Actions/UndoRedoActions.js.map +0 -1
  174. package/dist/ui/Actions/hooks/menu/TranslateMenu.d.ts.map +0 -1
  175. package/dist/ui/Actions/hooks/menu/TranslateMenu.js.map +0 -1
  176. package/dist/ui/Actions/hooks/menu/itemsMap.d.ts.map +0 -1
  177. package/dist/ui/Actions/hooks/menu/itemsMap.js.map +0 -1
  178. package/dist/ui/Actions/hooks/menu/useMenu.d.ts.map +0 -1
  179. package/dist/ui/Actions/hooks/menu/useMenu.js.map +0 -1
  180. package/dist/ui/Actions/hooks/useGenerate.d.ts.map +0 -1
  181. package/dist/ui/Actions/hooks/useGenerate.js.map +0 -1
  182. package/dist/ui/Actions/hooks/useHistory.d.ts.map +0 -1
  183. package/dist/ui/Actions/hooks/useHistory.js.map +0 -1
  184. package/dist/utilities/jsonToZod.d.ts +0 -3
  185. package/dist/utilities/jsonToZod.d.ts.map +0 -1
  186. package/dist/utilities/jsonToZod.js +0 -33
  187. package/dist/utilities/jsonToZod.js.map +0 -1
  188. /package/dist/ui/{Actions → Compose}/UndoRedoActions.d.ts +0 -0
  189. /package/dist/ui/{Actions/actions.module.scss → Compose/compose.module.scss} +0 -0
  190. /package/dist/ui/{Actions → Compose}/hooks/menu/TranslateMenu.d.ts +0 -0
  191. /package/dist/ui/{Actions → Compose}/hooks/menu/items.js +0 -0
  192. /package/dist/ui/{Actions → Compose}/hooks/menu/menu.module.scss +0 -0
  193. /package/dist/ui/{Actions → Compose}/hooks/menu/useMenu.d.ts +0 -0
  194. /package/dist/ui/{Actions → Compose}/hooks/useHistory.d.ts +0 -0
@@ -1,33 +1,31 @@
1
1
  import { useEditorConfigContext } from '@payloadcms/richtext-lexical/client';
2
- import { useConfig, useDocumentInfo, useField, useFieldProps, useForm, useLocale } from '@payloadcms/ui';
2
+ import { useConfig, useField, useForm, useLocale } from '@payloadcms/ui';
3
+ import { jsonSchema } from 'ai';
3
4
  import { useCompletion, experimental_useObject as useObject } from 'ai/react';
4
- import { useCallback, useEffect } from 'react';
5
- import { PLUGIN_API_ENDPOINT_GENERATE, PLUGIN_API_ENDPOINT_GENERATE_UPLOAD, PLUGIN_INSTRUCTIONS_TABLE } from '../../../defaults.js';
6
- import { useInstructions } from '../../../providers/InstructionsProvider/useInstructions.js';
7
- import { getFieldBySchemaPath } from '../../../utilities/getFieldBySchemaPath.js';
8
- import { jsonSchemaToZod } from '../../../utilities/jsonToZod.js';
5
+ import { useCallback, useEffect, useMemo } from 'react';
6
+ import { PLUGIN_API_ENDPOINT_GENERATE, PLUGIN_API_ENDPOINT_GENERATE_UPLOAD, PLUGIN_INSTRUCTIONS_TABLE, PLUGIN_NAME } from '../../../defaults.js';
7
+ import { useFieldProps } from '../../../providers/FieldProvider/useFieldProps.js';
9
8
  import { setSafeLexicalState } from '../../../utilities/setSafeLexicalState.js';
10
9
  import { useHistory } from './useHistory.js';
11
- //TODO: DONATION IDEA - Add a url to donate in cli when user installs the plugin and uses it for couple of times.
12
- export const useGenerate = ()=>{
13
- const { type, path: pathFromContext, schemaPath } = useFieldProps();
10
+ export const useGenerate = ({ instructionId })=>{
11
+ const { type, path: pathFromContext } = useFieldProps();
14
12
  const editorConfigContext = useEditorConfigContext();
15
13
  const { editor } = editorConfigContext;
16
- const { docConfig } = useDocumentInfo();
14
+ const { config } = useConfig();
15
+ const { routes: { api }, serverURL } = config;
17
16
  const { setValue } = useField({
18
17
  path: pathFromContext
19
18
  });
20
19
  const { set: setHistory } = useHistory();
21
- const { id: instructionId } = useInstructions({
22
- path: schemaPath
23
- });
24
20
  const { getData } = useForm();
25
21
  const localFromContext = useLocale();
26
22
  const { config: { collections } } = useConfig();
27
23
  const collection = collections.find((collection)=>collection.slug === PLUGIN_INSTRUCTIONS_TABLE);
28
- const { custom: { editorConfig } = {} } = collection.admin;
29
- const { schema: DocumentSchema = {} } = editorConfig || {};
30
- const lexicalZodSchema = jsonSchemaToZod(DocumentSchema);
24
+ const { custom: { [PLUGIN_NAME]: { editorConfig = {} } = {} } = {} } = collection.admin;
25
+ const { schema: editorSchema = {} } = editorConfig;
26
+ const memoizedSchema = useMemo(()=>jsonSchema(editorSchema), [
27
+ editorSchema
28
+ ]);
31
29
  const { isLoading: loadingObject, object, stop, submit } = useObject({
32
30
  api: `/api${PLUGIN_API_ENDPOINT_GENERATE}`,
33
31
  onError: (error)=>{
@@ -41,7 +39,7 @@ export const useGenerate = ()=>{
41
39
  console.log('onFinish: result ', result);
42
40
  }
43
41
  },
44
- schema: lexicalZodSchema
42
+ schema: memoizedSchema
45
43
  });
46
44
  useEffect(()=>{
47
45
  if (!object) return;
@@ -57,7 +55,7 @@ export const useGenerate = ()=>{
57
55
  object
58
56
  ]);
59
57
  const { complete, completion, isLoading: loadingCompletion } = useCompletion({
60
- api: `/api${PLUGIN_API_ENDPOINT_GENERATE}`,
58
+ api: `${serverURL}${api}${PLUGIN_API_ENDPOINT_GENERATE}`,
61
59
  onError: (error)=>{
62
60
  console.error('Error generating text:', error);
63
61
  },
@@ -112,14 +110,12 @@ export const useGenerate = ()=>{
112
110
  ]);
113
111
  const generateUpload = useCallback(async ()=>{
114
112
  const doc = getData();
115
- const fieldInfo = getFieldBySchemaPath(docConfig, schemaPath);
116
- return fetch(`/api${PLUGIN_API_ENDPOINT_GENERATE_UPLOAD}`, {
113
+ return fetch(`${serverURL}${api}${PLUGIN_API_ENDPOINT_GENERATE_UPLOAD}`, {
117
114
  body: JSON.stringify({
118
115
  doc,
119
116
  locale: localFromContext?.code,
120
117
  options: {
121
- instructionId,
122
- uploadCollectionSlug: fieldInfo.relationTo || 'media'
118
+ instructionId
123
119
  }
124
120
  }),
125
121
  credentials: 'include',
@@ -145,8 +141,7 @@ export const useGenerate = ()=>{
145
141
  }, [
146
142
  getData,
147
143
  localFromContext?.code,
148
- instructionId,
149
- setValue
144
+ instructionId
150
145
  ]);
151
146
  const generate = useCallback(async (options)=>{
152
147
  if (type === 'richText') {
@@ -0,0 +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 { 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 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 memoizedSchema = useMemo(() => jsonSchema(editorSchema), [editorSchema])\n\n const {\n isLoading: loadingObject,\n object,\n stop, // TODO: Implement this function\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 if (!editor) {\n setValue(object)\n return\n }\n\n // Currently this is being used as setValue for RichText component does not render new changes right away.\n setSafeLexicalState(object, editor)\n })\n }, [object])\n\n const {\n complete,\n completion,\n isLoading: loadingCompletion,\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 your upload', 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 return {\n generate,\n isLoading: loadingCompletion || loadingObject,\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","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","memoizedSchema","isLoading","loadingObject","object","stop","submit","onError","error","console","onFinish","result","log","requestAnimationFrame","complete","completion","loadingCompletion","prompt","streamProtocol","streamObject","action","params","doc","options","actionParams","locale","code","streamText","body","generateUpload","fetch","JSON","stringify","credentials","headers","method","then","uploadResponse","ok","json","Error","id","errors","errStr","map","message","join","catch","generate","includes"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHistory.d.ts","sourceRoot":"","sources":["../../../../src/ui/Compose/hooks/useHistory.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,UAAU;;;;;gBAkEZ,GAAG;;CAoEb,CAAA"}
@@ -1,7 +1,8 @@
1
1
  'use client';
2
- import { useDocumentInfo, useField, useFieldProps } from '@payloadcms/ui';
2
+ import { useDocumentInfo, useField } from '@payloadcms/ui';
3
3
  import { useCallback, useEffect } from 'react';
4
4
  import { PLUGIN_NAME } from '../../../defaults.js';
5
+ import { useFieldProps } from '../../../providers/FieldProvider/useFieldProps.js';
5
6
  const STORAGE_KEY = `${PLUGIN_NAME}-fields-history`;
6
7
  export const useHistory = ()=>{
7
8
  const { id } = useDocumentInfo();
@@ -23,7 +24,9 @@ export const useHistory = ()=>{
23
24
  }
24
25
  }, []);
25
26
  const saveToLocalStorage = useCallback((newGlobalHistory)=>{
26
- localStorage.setItem(STORAGE_KEY, JSON.stringify(newGlobalHistory));
27
+ if (typeof localStorage !== 'undefined') {
28
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(newGlobalHistory));
29
+ }
27
30
  }, []);
28
31
  // Clear previous history
29
32
  const clearHistory = useCallback(()=>{
@@ -31,7 +34,7 @@ export const useHistory = ()=>{
31
34
  ...getLatestHistory()
32
35
  };
33
36
  Object.keys(latestHistory).forEach((k)=>{
34
- if (!k.startsWith(id.toString())) {
37
+ if (!k.startsWith(id?.toString())) {
35
38
  delete latestHistory[k];
36
39
  }
37
40
  });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/ui/Compose/hooks/useHistory.ts"],"sourcesContent":["'use client'\n\nimport { useDocumentInfo, useField } from '@payloadcms/ui'\nimport { useCallback, useEffect } from 'react'\n\nimport { PLUGIN_NAME } from '../../../defaults.js'\nimport { useFieldProps } from '../../../providers/FieldProvider/useFieldProps.js'\n\nconst STORAGE_KEY = `${PLUGIN_NAME}-fields-history`\n\ninterface HistoryState {\n [path: string]: {\n currentIndex: number\n history: any[]\n }\n}\n\nexport const useHistory = () => {\n const { id } = useDocumentInfo()\n const { path: pathFromContext, schemaPath } = useFieldProps()\n const { value: currentFieldValue } = useField<string>({\n path: pathFromContext,\n })\n\n const fieldKey = `${id}.${schemaPath}`\n\n const getLatestHistory = useCallback((): HistoryState => {\n try {\n // This condition is applied, as it was somehow triggering on server side\n if (typeof localStorage !== 'undefined') {\n return JSON.parse(localStorage.getItem(STORAGE_KEY) || '{}')\n }\n return {}\n } catch (e) {\n console.error('Error parsing history:', e)\n return {}\n }\n }, [])\n\n const saveToLocalStorage = useCallback((newGlobalHistory: HistoryState) => {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(newGlobalHistory))\n }\n }, [])\n\n // Clear previous history\n const clearHistory = useCallback(() => {\n const latestHistory = { ...getLatestHistory() }\n Object.keys(latestHistory).forEach((k) => {\n if (!k.startsWith(id?.toString())) {\n delete latestHistory[k]\n }\n })\n saveToLocalStorage(latestHistory)\n }, [id, fieldKey, getLatestHistory, saveToLocalStorage])\n\n useEffect(() => {\n // This is applied to clear out the document history which is not currently in use\n clearHistory()\n\n const latestHistory = getLatestHistory()\n const { currentIndex, history } = latestHistory[fieldKey] || {\n currentIndex: -1,\n history: [],\n }\n\n let newIndex = currentIndex\n if (currentIndex == -1) {\n newIndex = 0\n if (currentFieldValue) {\n history[newIndex] = currentFieldValue\n }\n }\n\n const newGlobalHistory = {\n ...latestHistory,\n [fieldKey]: { currentIndex: newIndex, history },\n }\n\n saveToLocalStorage(newGlobalHistory)\n }, [fieldKey])\n\n const set = useCallback(\n (data: any) => {\n const latestHistory = getLatestHistory()\n const { currentIndex, history } = latestHistory[fieldKey] || {\n currentIndex: -1,\n history: [],\n }\n const newHistory = [...history.slice(0, currentIndex + 1), data]\n const newGlobalHistory = {\n ...latestHistory,\n [fieldKey]: { currentIndex: newHistory.length - 1, history: newHistory },\n }\n saveToLocalStorage(newGlobalHistory)\n return data\n },\n [fieldKey, getLatestHistory, saveToLocalStorage],\n )\n\n const undo = useCallback(() => {\n const latestHistory = getLatestHistory()\n const { currentIndex, history } = latestHistory[fieldKey] || { currentIndex: -1, history: [] }\n if (currentIndex > 0) {\n const newIndex = currentIndex - 1\n const newValue = history[newIndex]\n const newGlobalHistory = {\n ...latestHistory,\n [fieldKey]: { currentIndex: newIndex, history },\n }\n saveToLocalStorage(newGlobalHistory)\n return newValue\n }\n return undefined\n }, [fieldKey, getLatestHistory, saveToLocalStorage])\n\n const redo = useCallback(() => {\n const latestHistory = getLatestHistory()\n const { currentIndex, history } = latestHistory[fieldKey] || { currentIndex: -1, history: [] }\n if (currentIndex < history.length - 1) {\n const newIndex = currentIndex + 1\n const newValue = history[newIndex]\n const newGlobalHistory = {\n ...latestHistory,\n [fieldKey]: { currentIndex: newIndex, history },\n }\n saveToLocalStorage(newGlobalHistory)\n return newValue\n }\n return undefined\n }, [fieldKey, getLatestHistory, saveToLocalStorage])\n\n const getLatestFieldHistory = useCallback(() => {\n const latestHistory = getLatestHistory()\n return latestHistory[fieldKey] || { currentIndex: -1, history: [] }\n }, [getLatestHistory, fieldKey])\n\n const fieldHistory = getLatestFieldHistory()\n\n const canUndo = fieldHistory.currentIndex > 0\n const canRedo = fieldHistory.currentIndex < fieldHistory.history.length - 1\n const currentValue = fieldHistory.history[fieldHistory.currentIndex]\n\n return {\n canRedo,\n canUndo,\n currentValue,\n redo,\n set,\n undo,\n }\n}\n"],"names":["useDocumentInfo","useField","useCallback","useEffect","PLUGIN_NAME","useFieldProps","STORAGE_KEY","useHistory","id","path","pathFromContext","schemaPath","value","currentFieldValue","fieldKey","getLatestHistory","localStorage","JSON","parse","getItem","e","console","error","saveToLocalStorage","newGlobalHistory","setItem","stringify","clearHistory","latestHistory","Object","keys","forEach","k","startsWith","toString","currentIndex","history","newIndex","set","data","newHistory","slice","length","undo","newValue","undefined","redo","getLatestFieldHistory","fieldHistory","canUndo","canRedo","currentValue"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { LexicalEditor } from 'lexical';
2
- type EditorAction = 'update' | 'replace';
1
+ import type { LexicalEditor } from 'lexical';
2
+ type EditorAction = 'replace' | 'update';
3
3
  export declare const setSafeLexicalState: (state: any, editorInstance: LexicalEditor, action?: EditorAction) => void;
4
4
  export {};
5
5
  //# sourceMappingURL=setSafeLexicalState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setSafeLexicalState.d.ts","sourceRoot":"","sources":["../../src/utilities/setSafeLexicalState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAIvC,KAAK,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAA;AAExC,eAAO,MAAM,mBAAmB,+BAEd,aAAa,WACrB,YAAY,SAoBrB,CAAA"}
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,+BAEd,aAAa,WACrB,YAAY,SAYrB,CAAA"}
@@ -1,19 +1,12 @@
1
- import { $getRoot } from 'lexical';
2
1
  export const setSafeLexicalState = (state, editorInstance, action = 'replace')=>{
3
2
  try {
4
3
  const editorState = editorInstance.parseEditorState(state);
5
- if (editorState.isEmpty()) return;
6
- editorInstance.update(()=>{
7
- const root = $getRoot();
8
- root.clear() //TODO: this is hack to prevent reconciliation error - find a way
9
- ;
10
- editorInstance.setEditorState(editorState);
11
- }, {
12
- discrete: true
13
- });
4
+ if (editorState.isEmpty()) {
5
+ return;
6
+ }
7
+ editorInstance.setEditorState(editorState);
14
8
  } catch (e) {
15
- // console.error('Error setting object:', e)
16
- // setValue(object) //TODO: This breaks the editor find a better way to handle objects that are not valid
9
+ // console.error('Shh....:', e)
17
10
  }
18
11
  };
19
12
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/setSafeLexicalState.ts"],"sourcesContent":["import { LexicalEditor } from 'lexical'\n\nimport { $getRoot } from 'lexical'\n\ntype EditorAction = 'update' | 'replace'\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()) return\n\n editorInstance.update(\n () => {\n const root = $getRoot()\n root.clear() //TODO: this is hack to prevent reconciliation error - find a way\n editorInstance.setEditorState(editorState)\n },\n {\n discrete: true,\n },\n )\n } catch (e) {\n // console.error('Error setting object:', e)\n // setValue(object) //TODO: This breaks the editor find a better way to handle objects that are not valid\n }\n}\n"],"names":["$getRoot","setSafeLexicalState","state","editorInstance","action","editorState","parseEditorState","isEmpty","update","root","clear","setEditorState","discrete","e"],"mappings":"AAEA,SAASA,QAAQ,QAAQ,UAAS;AAIlC,OAAO,MAAMC,sBAAsB,CACjCC,OACAC,gBACAC,SAAuB,SAAS;IAEhC,IAAI;QACF,MAAMC,cAAcF,eAAeG,gBAAgB,CAACJ;QACpD,IAAIG,YAAYE,OAAO,IAAI;QAE3BJ,eAAeK,MAAM,CACnB;YACE,MAAMC,OAAOT;YACbS,KAAKC,KAAK,GAAG,iEAAiE;;YAC9EP,eAAeQ,cAAc,CAACN;QAChC,GACA;YACEO,UAAU;QACZ;IAEJ,EAAE,OAAOC,GAAG;IACV,4CAA4C;IAC5C,yGAAyG;IAC3G;AACF,EAAC"}
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('Shh....:', e)\n }\n}\n"],"names":["setSafeLexicalState","state","editorInstance","action","editorState","parseEditorState","isEmpty","setEditorState","e"],"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;IACV,+BAA+B;IACjC;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,qBAAsB,gBAAgB,KAAG,kBAiFvE,CAAA"}
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,qBAAsB,gBAAgB,KAAG,kBAkGvE,CAAA"}
@@ -3,7 +3,8 @@ export const updateFieldsConfig = (collectionConfig)=>{
3
3
  function updateField(field, parentPath = '') {
4
4
  const currentPath = parentPath ? `${parentPath}.${field.name}` : field.name;
5
5
  const currentSchemaPath = `${collectionConfig.slug}.${currentPath}`;
6
- if (field.admin?.disabled || field.admin?.readOnly || field.admin?.hidden) {
6
+ // Disabled fields/ field types
7
+ if (field.admin?.disabled || field.admin?.readOnly || field.admin?.hidden || field.type === 'row') {
7
8
  return field;
8
9
  }
9
10
  // Map field path for global fieldInstructionsMap to load related instructions
@@ -19,7 +20,8 @@ export const updateFieldsConfig = (collectionConfig)=>{
19
20
  ...schemaPathMap,
20
21
  [currentSchemaPath]: {
21
22
  type: field.type,
22
- label: field.label || field.name
23
+ label: field.label || field.name,
24
+ relationTo: field.relationTo
23
25
  }
24
26
  };
25
27
  }
@@ -29,13 +31,21 @@ export const updateFieldsConfig = (collectionConfig)=>{
29
31
  'textarea',
30
32
  'upload'
31
33
  ].includes(field.type)) {
34
+ let customField = {};
35
+ // Custom fields don't fully adhere to the Payload schema, making it difficult to
36
+ // determine which components support injecting ComposeField as a Description.
37
+ if (field.admin?.components?.Field || field.admin?.components?.Description) {
38
+ // TODO: Do something?
39
+ customField = {};
40
+ }
32
41
  return {
33
42
  ...field,
34
43
  admin: {
35
44
  ...field.admin,
36
45
  components: {
37
46
  ...field.admin?.components || {},
38
- Description: '@ai-stack/payloadcms/client#DescriptionFieldComponent'
47
+ Description: '@ai-stack/payloadcms/fields#ComposeField',
48
+ ...customField
39
49
  }
40
50
  }
41
51
  };
@@ -49,10 +59,12 @@ export const updateFieldsConfig = (collectionConfig)=>{
49
59
  if (field.tabs) {
50
60
  return {
51
61
  ...field,
52
- tabs: field.tabs.map((tab)=>({
62
+ tabs: field.tabs.map((tab)=>{
63
+ return {
53
64
  ...tab,
54
- fields: tab.fields.map((subField)=>updateField(subField, currentPath))
55
- }))
65
+ fields: tab.fields.map((subField)=>updateField(subField, tab.name))
66
+ };
67
+ })
56
68
  };
57
69
  }
58
70
  if (field.blocks) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/updateFieldsConfig.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\ninterface UpdateFieldsConfig {\n schemaPathMap: Record<string, string>\n updatedCollectionConfig: CollectionConfig\n}\n\nexport const updateFieldsConfig = (collectionConfig: CollectionConfig): UpdateFieldsConfig => {\n let schemaPathMap = {}\n function updateField(field: any, parentPath = ''): any {\n const currentPath = parentPath ? `${parentPath}.${field.name}` : field.name\n const currentSchemaPath = `${collectionConfig.slug}.${currentPath}`\n\n if (field.admin?.disabled || field.admin?.readOnly || field.admin?.hidden) {\n return field\n }\n\n // Map field path for global fieldInstructionsMap to load related instructions\n // This is done due to save extra API call to get instructions when Field components are loaded in admin\n // Doing is will only call instructions data when user clicks on settings\n if (['richText', 'text', 'textarea', 'upload'].includes(field.type)) {\n schemaPathMap = {\n ...schemaPathMap,\n [currentSchemaPath]: {\n type: field.type,\n label: field.label || field.name,\n },\n }\n }\n\n // Inject AI actions, richText is not included here as it has to be explicitly defined by user\n if (['text', 'textarea', 'upload'].includes(field.type)) {\n return {\n ...field,\n admin: {\n ...field.admin,\n components: {\n ...(field.admin?.components || {}),\n Description: '@ai-stack/payloadcms/client#DescriptionFieldComponent',\n // Description: DescriptionField({\n // Description: field.admin?.components?.Description,\n // }),\n },\n },\n }\n }\n\n if (field.fields) {\n return {\n ...field,\n fields: field.fields.map((subField: any) => updateField(subField, currentPath)),\n }\n }\n\n if (field.tabs) {\n return {\n ...field,\n tabs: field.tabs.map((tab: any) => ({\n ...tab,\n fields: tab.fields.map((subField: any) => updateField(subField, currentPath)),\n })),\n }\n }\n\n if (field.blocks) {\n return {\n ...field,\n blocks: field.blocks.map((block: any) => ({\n ...block,\n fields: block.fields.map((subField: any) =>\n updateField(subField, `${currentPath}.${block.slug}`),\n ),\n })),\n }\n }\n\n return field\n }\n\n const updatedCollectionConfig = {\n ...collectionConfig,\n fields: collectionConfig.fields.map((field) => updateField(field)),\n }\n\n return {\n schemaPathMap,\n updatedCollectionConfig,\n }\n}\n"],"names":["updateFieldsConfig","collectionConfig","schemaPathMap","updateField","field","parentPath","currentPath","name","currentSchemaPath","slug","admin","disabled","readOnly","hidden","includes","type","label","components","Description","fields","map","subField","tabs","tab","blocks","block","updatedCollectionConfig"],"mappings":"AAOA,OAAO,MAAMA,qBAAqB,CAACC;IACjC,IAAIC,gBAAgB,CAAC;IACrB,SAASC,YAAYC,KAAU,EAAEC,aAAa,EAAE;QAC9C,MAAMC,cAAcD,aAAa,CAAC,EAAEA,WAAW,CAAC,EAAED,MAAMG,IAAI,CAAC,CAAC,GAAGH,MAAMG,IAAI;QAC3E,MAAMC,oBAAoB,CAAC,EAAEP,iBAAiBQ,IAAI,CAAC,CAAC,EAAEH,YAAY,CAAC;QAEnE,IAAIF,MAAMM,KAAK,EAAEC,YAAYP,MAAMM,KAAK,EAAEE,YAAYR,MAAMM,KAAK,EAAEG,QAAQ;YACzE,OAAOT;QACT;QAEA,8EAA8E;QAC9E,wGAAwG;QACxG,yEAAyE;QACzE,IAAI;YAAC;YAAY;YAAQ;YAAY;SAAS,CAACU,QAAQ,CAACV,MAAMW,IAAI,GAAG;YACnEb,gBAAgB;gBACd,GAAGA,aAAa;gBAChB,CAACM,kBAAkB,EAAE;oBACnBO,MAAMX,MAAMW,IAAI;oBAChBC,OAAOZ,MAAMY,KAAK,IAAIZ,MAAMG,IAAI;gBAClC;YACF;QACF;QAEA,8FAA8F;QAC9F,IAAI;YAAC;YAAQ;YAAY;SAAS,CAACO,QAAQ,CAACV,MAAMW,IAAI,GAAG;YACvD,OAAO;gBACL,GAAGX,KAAK;gBACRM,OAAO;oBACL,GAAGN,MAAMM,KAAK;oBACdO,YAAY;wBACV,GAAIb,MAAMM,KAAK,EAAEO,cAAc,CAAC,CAAC;wBACjCC,aAAa;oBAIf;gBACF;YACF;QACF;QAEA,IAAId,MAAMe,MAAM,EAAE;YAChB,OAAO;gBACL,GAAGf,KAAK;gBACRe,QAAQf,MAAMe,MAAM,CAACC,GAAG,CAAC,CAACC,WAAkBlB,YAAYkB,UAAUf;YACpE;QACF;QAEA,IAAIF,MAAMkB,IAAI,EAAE;YACd,OAAO;gBACL,GAAGlB,KAAK;gBACRkB,MAAMlB,MAAMkB,IAAI,CAACF,GAAG,CAAC,CAACG,MAAc,CAAA;wBAClC,GAAGA,GAAG;wBACNJ,QAAQI,IAAIJ,MAAM,CAACC,GAAG,CAAC,CAACC,WAAkBlB,YAAYkB,UAAUf;oBAClE,CAAA;YACF;QACF;QAEA,IAAIF,MAAMoB,MAAM,EAAE;YAChB,OAAO;gBACL,GAAGpB,KAAK;gBACRoB,QAAQpB,MAAMoB,MAAM,CAACJ,GAAG,CAAC,CAACK,QAAgB,CAAA;wBACxC,GAAGA,KAAK;wBACRN,QAAQM,MAAMN,MAAM,CAACC,GAAG,CAAC,CAACC,WACxBlB,YAAYkB,UAAU,CAAC,EAAEf,YAAY,CAAC,EAAEmB,MAAMhB,IAAI,CAAC,CAAC;oBAExD,CAAA;YACF;QACF;QAEA,OAAOL;IACT;IAEA,MAAMsB,0BAA0B;QAC9B,GAAGzB,gBAAgB;QACnBkB,QAAQlB,iBAAiBkB,MAAM,CAACC,GAAG,CAAC,CAAChB,QAAUD,YAAYC;IAC7D;IAEA,OAAO;QACLF;QACAwB;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/updateFieldsConfig.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\ninterface UpdateFieldsConfig {\n schemaPathMap: Record<string, string>\n updatedCollectionConfig: CollectionConfig\n}\n\nexport const updateFieldsConfig = (collectionConfig: CollectionConfig): UpdateFieldsConfig => {\n let schemaPathMap = {}\n\n function updateField(field: any, parentPath = ''): any {\n const currentPath = parentPath ? `${parentPath}.${field.name}` : field.name\n const currentSchemaPath = `${collectionConfig.slug}.${currentPath}`\n\n // Disabled fields/ field types\n if (\n field.admin?.disabled ||\n field.admin?.readOnly ||\n field.admin?.hidden ||\n field.type === 'row'\n ) {\n return field\n }\n\n // Map field path for global fieldInstructionsMap to load related instructions\n // This is done due to save extra API call to get instructions when Field components are loaded in admin\n // Doing is will only call instructions data when user clicks on settings\n if (['richText', 'text', 'textarea', 'upload'].includes(field.type)) {\n schemaPathMap = {\n ...schemaPathMap,\n [currentSchemaPath]: {\n type: field.type,\n label: field.label || field.name,\n relationTo: field.relationTo,\n },\n }\n }\n\n // Inject AI actions, richText is not included here as it has to be explicitly defined by user\n if (['text', 'textarea', 'upload'].includes(field.type)) {\n let customField = {}\n\n // Custom fields don't fully adhere to the Payload schema, making it difficult to\n // determine which components support injecting ComposeField as a Description.\n if (field.admin?.components?.Field || field.admin?.components?.Description) {\n // TODO: Do something?\n customField = {}\n }\n\n return {\n ...field,\n admin: {\n ...field.admin,\n components: {\n ...(field.admin?.components || {}),\n Description: '@ai-stack/payloadcms/fields#ComposeField',\n ...customField,\n },\n },\n }\n }\n\n if (field.fields) {\n return {\n ...field,\n fields: field.fields.map((subField: any) => updateField(subField, currentPath)),\n }\n }\n\n if (field.tabs) {\n return {\n ...field,\n tabs: field.tabs.map((tab: any) => {\n return {\n ...tab,\n fields: tab.fields.map((subField: any) => updateField(subField, tab.name)),\n }\n }),\n }\n }\n\n if (field.blocks) {\n return {\n ...field,\n blocks: field.blocks.map((block: any) => ({\n ...block,\n fields: block.fields.map((subField: any) =>\n updateField(subField, `${currentPath}.${block.slug}`),\n ),\n })),\n }\n }\n\n return field\n }\n\n const updatedCollectionConfig = {\n ...collectionConfig,\n fields: collectionConfig.fields.map((field) => updateField(field)),\n }\n\n return {\n schemaPathMap,\n updatedCollectionConfig,\n }\n}\n"],"names":["updateFieldsConfig","collectionConfig","schemaPathMap","updateField","field","parentPath","currentPath","name","currentSchemaPath","slug","admin","disabled","readOnly","hidden","type","includes","label","relationTo","customField","components","Field","Description","fields","map","subField","tabs","tab","blocks","block","updatedCollectionConfig"],"mappings":"AAOA,OAAO,MAAMA,qBAAqB,CAACC;IACjC,IAAIC,gBAAgB,CAAC;IAErB,SAASC,YAAYC,KAAU,EAAEC,aAAa,EAAE;QAC9C,MAAMC,cAAcD,aAAa,GAAGA,WAAW,CAAC,EAAED,MAAMG,IAAI,EAAE,GAAGH,MAAMG,IAAI;QAC3E,MAAMC,oBAAoB,GAAGP,iBAAiBQ,IAAI,CAAC,CAAC,EAAEH,aAAa;QAEnE,+BAA+B;QAC/B,IACEF,MAAMM,KAAK,EAAEC,YACbP,MAAMM,KAAK,EAAEE,YACbR,MAAMM,KAAK,EAAEG,UACbT,MAAMU,IAAI,KAAK,OACf;YACA,OAAOV;QACT;QAEA,8EAA8E;QAC9E,wGAAwG;QACxG,yEAAyE;QACzE,IAAI;YAAC;YAAY;YAAQ;YAAY;SAAS,CAACW,QAAQ,CAACX,MAAMU,IAAI,GAAG;YACnEZ,gBAAgB;gBACd,GAAGA,aAAa;gBAChB,CAACM,kBAAkB,EAAE;oBACnBM,MAAMV,MAAMU,IAAI;oBAChBE,OAAOZ,MAAMY,KAAK,IAAIZ,MAAMG,IAAI;oBAChCU,YAAYb,MAAMa,UAAU;gBAC9B;YACF;QACF;QAEA,8FAA8F;QAC9F,IAAI;YAAC;YAAQ;YAAY;SAAS,CAACF,QAAQ,CAACX,MAAMU,IAAI,GAAG;YACvD,IAAII,cAAc,CAAC;YAEnB,iFAAiF;YACjF,8EAA8E;YAC9E,IAAId,MAAMM,KAAK,EAAES,YAAYC,SAAShB,MAAMM,KAAK,EAAES,YAAYE,aAAa;gBAC1E,sBAAsB;gBACtBH,cAAc,CAAC;YACjB;YAEA,OAAO;gBACL,GAAGd,KAAK;gBACRM,OAAO;oBACL,GAAGN,MAAMM,KAAK;oBACdS,YAAY;wBACV,GAAIf,MAAMM,KAAK,EAAES,cAAc,CAAC,CAAC;wBACjCE,aAAa;wBACb,GAAGH,WAAW;oBAChB;gBACF;YACF;QACF;QAEA,IAAId,MAAMkB,MAAM,EAAE;YAChB,OAAO;gBACL,GAAGlB,KAAK;gBACRkB,QAAQlB,MAAMkB,MAAM,CAACC,GAAG,CAAC,CAACC,WAAkBrB,YAAYqB,UAAUlB;YACpE;QACF;QAEA,IAAIF,MAAMqB,IAAI,EAAE;YACd,OAAO;gBACL,GAAGrB,KAAK;gBACRqB,MAAMrB,MAAMqB,IAAI,CAACF,GAAG,CAAC,CAACG;oBACpB,OAAO;wBACL,GAAGA,GAAG;wBACNJ,QAAQI,IAAIJ,MAAM,CAACC,GAAG,CAAC,CAACC,WAAkBrB,YAAYqB,UAAUE,IAAInB,IAAI;oBAC1E;gBACF;YACF;QACF;QAEA,IAAIH,MAAMuB,MAAM,EAAE;YAChB,OAAO;gBACL,GAAGvB,KAAK;gBACRuB,QAAQvB,MAAMuB,MAAM,CAACJ,GAAG,CAAC,CAACK,QAAgB,CAAA;wBACxC,GAAGA,KAAK;wBACRN,QAAQM,MAAMN,MAAM,CAACC,GAAG,CAAC,CAACC,WACxBrB,YAAYqB,UAAU,GAAGlB,YAAY,CAAC,EAAEsB,MAAMnB,IAAI,EAAE;oBAExD,CAAA;YACF;QACF;QAEA,OAAOL;IACT;IAEA,MAAMyB,0BAA0B;QAC9B,GAAG5B,gBAAgB;QACnBqB,QAAQrB,iBAAiBqB,MAAM,CAACC,GAAG,CAAC,CAACnB,QAAUD,YAAYC;IAC7D;IAEA,OAAO;QACLF;QACA2B;IACF;AACF,EAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-stack/payloadcms",
3
- "version": "3.0.0-beta.95.1",
3
+ "version": "3.2.1-beta",
4
4
  "private": false,
5
5
  "bugs": "https://github.com/ashbuilds/payload-ai/issues",
6
6
  "repository": "https://github.com/ashbuilds/payload-ai",
@@ -20,43 +20,33 @@
20
20
  "ai-writing-tool"
21
21
  ],
22
22
  "type": "module",
23
- "main": "dist/index.js",
24
- "types": "dist/index.d.ts",
23
+ "main": "./dist/index.js",
24
+ "types": "./dist/index.d.ts",
25
25
  "exports": {
26
26
  ".": {
27
27
  "import": "./dist/index.js",
28
- "require": "./dist/index.js",
29
- "types": "./dist/index.d.ts"
28
+ "types": "./dist/index.d.ts",
29
+ "default": "./dist/index.js"
30
30
  },
31
- "./client": {
32
- "import": "./dist/exports/client.js",
33
- "types": "./dist/exports/client.d.ts",
34
- "default": "./dist/exports/client.js"
31
+ "./types": {
32
+ "import": "./dist/exports/types.js",
33
+ "types": "./dist/exports/types.d.ts",
34
+ "default": "./dist/exports/types.js"
35
35
  },
36
36
  "./fields": {
37
37
  "import": "./dist/exports/fields.js",
38
38
  "types": "./dist/exports/fields.d.ts",
39
39
  "default": "./dist/exports/fields.js"
40
40
  },
41
- "./types": {
42
- "import": "./dist/exports/types.js",
43
- "types": "./dist/exports/types.d.ts",
44
- "default": "./dist/exports/types.js"
41
+ "./client": {
42
+ "import": "./dist/exports/client.js",
43
+ "types": "./dist/exports/client.d.ts",
44
+ "default": "./dist/exports/client.js"
45
45
  }
46
46
  },
47
47
  "files": [
48
48
  "dist"
49
49
  ],
50
- "scripts": {
51
- "build": "pnpm build:types && pnpm build:swc",
52
- "build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths --copy-files",
53
- "build:dev": "pnpm build --watch",
54
- "build:types": "tsc --emitDeclarationOnly",
55
- "clean": "rimraf dist && rimraf tsconfig.tsbuildinfo",
56
- "lint": "eslint src",
57
- "lint:fix": "eslint --fix src",
58
- "prepublishOnly": "pnpm clean && pnpm build"
59
- },
60
50
  "dependencies": {
61
51
  "@ai-sdk/anthropic": "^0.0.38",
62
52
  "@ai-sdk/openai": "^0.0.43",
@@ -65,19 +55,17 @@
65
55
  "@anthropic-ai/sdk": "^0.24.3",
66
56
  "@langchain/core": "^0.2.31",
67
57
  "@langchain/openai": "^0.2.8",
68
- "@lexical/html": "^0.16.1",
58
+ "@lexical/html": "0.20.0",
69
59
  "ai": "^3.3.20",
70
60
  "elevenlabs": "^0.8.2",
61
+ "get-input-selection": "^1.1.4",
71
62
  "handlebars": "4.7.8",
72
63
  "handlebars-async-helpers": "^1.0.6",
73
64
  "langchain": "^0.2.17",
74
- "lexical": "^0.17.0",
65
+ "lexical": "^0.20.0",
75
66
  "locale-codes": "^1.3.1",
76
- "openai": "^4.56.1",
77
- "zod": "^3.23.8",
78
- "zod-to-json-schema": "^3.23.2",
79
- "get-input-selection": "^1.1.4",
80
67
  "lodash.isequal": "^4.5.0",
68
+ "openai": "^4.56.1",
81
69
  "scroll-into-view-if-needed": "^3.1.0",
82
70
  "textarea-caret": "^3.0.2"
83
71
  },
@@ -86,6 +74,7 @@
86
74
  "@eslint/js": "^9.9.1",
87
75
  "@swc/cli": "0.4.0",
88
76
  "@types/dot-object": "2.1.6",
77
+ "@types/handlebars": "^4.1.0",
89
78
  "@types/react": "npm:types-react@19.0.0-beta.2",
90
79
  "@types/react-dom": "npm:types-react-dom@19.0.0-beta.2",
91
80
  "@typescript-eslint/eslint-plugin": "^7.18.0",
@@ -102,7 +91,6 @@
102
91
  "eslint-plugin-react-hooks": "^4.6.2",
103
92
  "eslint-plugin-regexp": "^2.6.0",
104
93
  "globals": "^15.9.0",
105
- "payload": "3.0.0-beta.95",
106
94
  "prettier": "^3.3.3",
107
95
  "react": "19.0.0-rc-f994737d14-20240522",
108
96
  "react-dom": "19.0.0-rc-f994737d14-20240522",
@@ -111,16 +99,23 @@
111
99
  "typescript-eslint": "^7.18.0"
112
100
  },
113
101
  "peerDependencies": {
114
- "@payloadcms/richtext-lexical": "3.0.0-beta.95",
115
- "@payloadcms/translations": "3.0.0-beta.95",
116
- "@payloadcms/ui": "3.0.0-beta.95",
117
- "payload": "3.0.0-beta.95"
102
+ "@payloadcms/richtext-lexical": "^3.2.1",
103
+ "@payloadcms/translations": "^3.2.1",
104
+ "@payloadcms/ui": "^3.2.1",
105
+ "payload": "^3.2.1"
118
106
  },
119
107
  "publishConfig": {
120
- "main": "./dist/index.js",
121
- "types": "./dist/index.d.ts",
122
108
  "@ai-stack:registry": "https://registry.npmjs.org",
123
109
  "access": "public",
124
110
  "provenance": true
111
+ },
112
+ "scripts": {
113
+ "build": "pnpm build:types && pnpm build:swc",
114
+ "build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths --copy-files",
115
+ "build:dev": "pnpm build --watch",
116
+ "build:types": "tsc --emitDeclarationOnly",
117
+ "clean": "rimraf dist && rimraf tsconfig.tsbuildinfo",
118
+ "lint": "eslint src",
119
+ "lint:fix": "eslint --fix src"
125
120
  }
126
- }
121
+ }
@@ -1,31 +0,0 @@
1
- import { z } from 'zod';
2
- export declare const LexicalBaseNode: z.ZodObject<{
3
- type: z.ZodString;
4
- children: z.ZodOptional<z.ZodArray<z.ZodAny, "many">>;
5
- direction: z.ZodOptional<z.ZodNullable<z.ZodEnum<["ltr"]>>>;
6
- format: z.ZodOptional<z.ZodString>;
7
- indent: z.ZodOptional<z.ZodNumber>;
8
- version: z.ZodOptional<z.ZodNumber>;
9
- }, "strip", z.ZodTypeAny, {
10
- type?: string;
11
- children?: any[];
12
- direction?: "ltr";
13
- format?: string;
14
- indent?: number;
15
- version?: number;
16
- }, {
17
- type?: string;
18
- children?: any[];
19
- direction?: "ltr";
20
- format?: string;
21
- indent?: number;
22
- version?: number;
23
- }>;
24
- export declare const lexicalSchema: (customNodes?: (typeof LexicalBaseNode)[]) => z.ZodObject<{
25
- root: any;
26
- }, "strip", z.ZodTypeAny, {
27
- root?: any;
28
- }, {
29
- root?: any;
30
- }>;
31
- //# sourceMappingURL=lexical.schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lexical.schema.d.ts","sourceRoot":"","sources":["../../../src/ai/schemas/lexical.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;EAO1B,CAAA;AAEF,eAAO,MAAM,aAAa,iBAAkB,CAAC,OAAO,eAAe,CAAC,EAAE;;;;;;EA0ErE,CAAA"}
@@ -1,102 +0,0 @@
1
- import { z } from 'zod';
2
- export const LexicalBaseNode = z.object({
3
- type: z.string(),
4
- children: z.array(z.any()).optional(),
5
- direction: z.enum([
6
- 'ltr'
7
- ]).nullable().optional(),
8
- format: z.string().optional(),
9
- indent: z.number().optional(),
10
- version: z.number().optional()
11
- });
12
- export const lexicalSchema = (customNodes)=>{
13
- const BaseNode = z.object({
14
- type: z.string(),
15
- children: z.array(z.lazy(()=>Node)).optional(),
16
- direction: z.enum([
17
- 'ltr'
18
- ]).nullable().optional(),
19
- format: z.string().optional(),
20
- indent: z.number().optional(),
21
- version: z.number().optional()
22
- });
23
- const TextNode = BaseNode.extend({
24
- type: z.literal('text'),
25
- format: z.number().optional(),
26
- text: z.string()
27
- });
28
- const LinkNode = BaseNode.extend({
29
- id: z.string(),
30
- type: z.literal('link'),
31
- fields: z.object({
32
- linkType: z.string(),
33
- newTab: z.boolean(),
34
- url: z.string()
35
- })
36
- });
37
- const ListItemNode = BaseNode.extend({
38
- type: z.literal('listitem'),
39
- checked: z.boolean().optional(),
40
- value: z.number()
41
- });
42
- const ListNode = BaseNode.extend({
43
- type: z.literal('list'),
44
- listType: z.enum([
45
- 'check',
46
- 'number',
47
- 'bullet'
48
- ]),
49
- start: z.number(),
50
- tag: z.enum([
51
- 'ul',
52
- 'ol'
53
- ])
54
- });
55
- const HeadingNode = BaseNode.extend({
56
- type: z.literal('heading'),
57
- tag: z.enum([
58
- 'h1',
59
- 'h2',
60
- 'h3',
61
- 'h4'
62
- ])
63
- });
64
- // Example of custom node - wip
65
- const MediaNode = BaseNode.extend({
66
- type: z.literal('block'),
67
- version: z.literal(2),
68
- fields: z.object({
69
- id: z.string(),
70
- media: z.string(),
71
- position: z.enum([
72
- 'fullscreen',
73
- 'default'
74
- ]),
75
- blockName: z.string(),
76
- blockType: z.literal('mediaBlock')
77
- })
78
- });
79
- const Node = z.union([
80
- TextNode,
81
- LinkNode,
82
- ListItemNode,
83
- ListNode,
84
- HeadingNode,
85
- BaseNode.extend({
86
- type: z.enum([
87
- 'paragraph',
88
- 'quote',
89
- 'horizontalrule'
90
- ])
91
- }),
92
- ...customNodes || []
93
- ]);
94
- const RootNode = BaseNode.extend({
95
- type: z.literal('root')
96
- });
97
- return z.object({
98
- root: RootNode
99
- });
100
- };
101
-
102
- //# sourceMappingURL=lexical.schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/ai/schemas/lexical.schema.ts"],"sourcesContent":["import { z } from 'zod'\n\nexport const LexicalBaseNode = z.object({\n type: z.string(),\n children: z.array(z.any()).optional(),\n direction: z.enum(['ltr']).nullable().optional(),\n format: z.string().optional(),\n indent: z.number().optional(),\n version: z.number().optional(),\n})\n\nexport const lexicalSchema = (customNodes?: (typeof LexicalBaseNode)[]) => {\n const BaseNode = z.object({\n type: z.string(),\n children: z.array(z.lazy(() => Node)).optional(),\n direction: z.enum(['ltr']).nullable().optional(),\n format: z.string().optional(),\n indent: z.number().optional(),\n version: z.number().optional(),\n })\n\n const TextNode = BaseNode.extend({\n type: z.literal('text'),\n format: z.number().optional(),\n text: z.string(),\n })\n\n const LinkNode = BaseNode.extend({\n id: z.string(),\n type: z.literal('link'),\n fields: z.object({\n linkType: z.string(),\n newTab: z.boolean(),\n url: z.string(),\n }),\n })\n\n const ListItemNode = BaseNode.extend({\n type: z.literal('listitem'),\n checked: z.boolean().optional(),\n value: z.number(),\n })\n\n const ListNode = BaseNode.extend({\n type: z.literal('list'),\n listType: z.enum(['check', 'number', 'bullet']),\n start: z.number(),\n tag: z.enum(['ul', 'ol']),\n })\n\n const HeadingNode = BaseNode.extend({\n type: z.literal('heading'),\n tag: z.enum(['h1', 'h2', 'h3', 'h4']),\n })\n\n // Example of custom node - wip\n const MediaNode = BaseNode.extend({\n type: z.literal('block'),\n version: z.literal(2),\n fields: z.object({\n id: z.string(),\n media: z.string(),\n position: z.enum(['fullscreen', 'default']),\n blockName: z.string(),\n blockType: z.literal('mediaBlock'),\n }),\n })\n\n const Node = z.union([\n TextNode,\n LinkNode,\n ListItemNode,\n ListNode,\n HeadingNode,\n BaseNode.extend({ type: z.enum(['paragraph', 'quote', 'horizontalrule']) }),\n ...(customNodes || []),\n ])\n\n const RootNode = BaseNode.extend({\n type: z.literal('root'),\n })\n\n return z.object({\n root: RootNode,\n })\n}\n"],"names":["z","LexicalBaseNode","object","type","string","children","array","any","optional","direction","enum","nullable","format","indent","number","version","lexicalSchema","customNodes","BaseNode","lazy","Node","TextNode","extend","literal","text","LinkNode","id","fields","linkType","newTab","boolean","url","ListItemNode","checked","value","ListNode","listType","start","tag","HeadingNode","MediaNode","media","position","blockName","blockType","union","RootNode","root"],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export declare const generateSeedPrompt: (data: {
2
- prompt: string;
3
- system: string;
4
- }) => Promise<string>;
5
- //# sourceMappingURL=generateSeedPrompt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generateSeedPrompt.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/generateSeedPrompt.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,kBAAkB,SAAgB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,oBAmBhF,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/ai/utils/generateSeedPrompt.ts"],"sourcesContent":["import { anthropic } from '@ai-sdk/anthropic'\nimport { openai } from '@ai-sdk/openai'\nimport { generateText } from 'ai'\n\nimport { PLUGIN_DEFAULT_ANTHROPIC_MODEL, PLUGIN_DEFAULT_OPENAI_MODEL } from '../../defaults.js'\n\nexport const generateSeedPrompt = async (data: { prompt: string; system: string }) => {\n const { prompt, system } = data\n let model = null\n\n if (process.env.OPENAI_API_KEY) {\n model = openai(PLUGIN_DEFAULT_OPENAI_MODEL)\n } else if (process.env.ANTHROPIC_API_KEY) {\n model = anthropic(PLUGIN_DEFAULT_ANTHROPIC_MODEL)\n } else {\n throw new Error('- AI Plugin: Please check your environment variables!')\n }\n\n const { text } = await generateText({\n model,\n prompt,\n system,\n })\n\n return text\n}\n"],"names":["anthropic","openai","generateText","PLUGIN_DEFAULT_ANTHROPIC_MODEL","PLUGIN_DEFAULT_OPENAI_MODEL","generateSeedPrompt","data","prompt","system","model","process","env","OPENAI_API_KEY","ANTHROPIC_API_KEY","Error","text"],"mappings":"AAAA,SAASA,SAAS,QAAQ,oBAAmB;AAC7C,SAASC,MAAM,QAAQ,iBAAgB;AACvC,SAASC,YAAY,QAAQ,KAAI;AAEjC,SAASC,8BAA8B,EAAEC,2BAA2B,QAAQ,oBAAmB;AAE/F,OAAO,MAAMC,qBAAqB,OAAOC;IACvC,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAE,GAAGF;IAC3B,IAAIG,QAAQ;IAEZ,IAAIC,QAAQC,GAAG,CAACC,cAAc,EAAE;QAC9BH,QAAQR,OAAOG;IACjB,OAAO,IAAIM,QAAQC,GAAG,CAACE,iBAAiB,EAAE;QACxCJ,QAAQT,UAAUG;IACpB,OAAO;QACL,MAAM,IAAIW,MAAM;IAClB;IAEA,MAAM,EAAEC,IAAI,EAAE,GAAG,MAAMb,aAAa;QAClCO;QACAF;QACAC;IACF;IAEA,OAAOO;AACT,EAAC"}
@@ -1,2 +0,0 @@
1
- export declare const DescriptionField: (options: any) => import("react").FC<{}>;
2
- //# sourceMappingURL=DescriptionField.d.ts.map