@ai-stack/payloadcms 3.2.16-beta → 3.2.17-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 (220) hide show
  1. package/README.md +79 -0
  2. package/dist/ai/analyse.d.ts +0 -1
  3. package/dist/ai/models/anthropic/generateRichText.d.ts +0 -1
  4. package/dist/ai/models/anthropic/generateRichText.js +7 -8
  5. package/dist/ai/models/anthropic/generateRichText.js.map +1 -1
  6. package/dist/ai/models/anthropic/index.d.ts +0 -1
  7. package/dist/ai/models/anthropic/index.js +54 -3
  8. package/dist/ai/models/anthropic/index.js.map +1 -1
  9. package/dist/ai/models/elevenLabs/generateVoice.d.ts +1 -2
  10. package/dist/ai/models/elevenLabs/index.d.ts +0 -1
  11. package/dist/ai/models/elevenLabs/index.js +5 -2
  12. package/dist/ai/models/elevenLabs/index.js.map +1 -1
  13. package/dist/ai/models/elevenLabs/voices.d.ts +6 -2
  14. package/dist/ai/models/elevenLabs/voices.js.map +1 -1
  15. package/dist/ai/models/index.d.ts +0 -1
  16. package/dist/ai/models/openai/generateImage.d.ts +1 -2
  17. package/dist/ai/models/openai/generateImage.js +6 -4
  18. package/dist/ai/models/openai/generateImage.js.map +1 -1
  19. package/dist/ai/models/openai/generateRichText.d.ts +0 -1
  20. package/dist/ai/models/openai/generateRichText.js +9 -12
  21. package/dist/ai/models/openai/generateRichText.js.map +1 -1
  22. package/dist/ai/models/openai/generateVoice.d.ts +1 -2
  23. package/dist/ai/models/openai/index.d.ts +0 -1
  24. package/dist/ai/models/openai/index.js +63 -4
  25. package/dist/ai/models/openai/index.js.map +1 -1
  26. package/dist/ai/models/openai/openai.d.ts +0 -1
  27. package/dist/ai/models/openai/openai.js +1 -2
  28. package/dist/ai/models/openai/openai.js.map +1 -1
  29. package/dist/ai/prompts.d.ts +2 -23
  30. package/dist/ai/prompts.js +2 -2
  31. package/dist/ai/prompts.js.map +1 -1
  32. package/dist/ai/schemas/lexicalJsonSchema.d.ts +5 -4
  33. package/dist/ai/schemas/lexicalJsonSchema.js +3 -1
  34. package/dist/ai/schemas/lexicalJsonSchema.js.map +1 -1
  35. package/dist/ai/utils/editImagesWithOpenAI.d.ts +0 -1
  36. package/dist/ai/utils/filterEditorSchemaByNodes.d.ts +19 -29
  37. package/dist/ai/utils/filterEditorSchemaByNodes.js +4 -2
  38. package/dist/ai/utils/filterEditorSchemaByNodes.js.map +1 -1
  39. package/dist/ai/utils/generateFileNameByPrompt.d.ts +1 -2
  40. package/dist/ai/utils/generateFileNameByPrompt.js.map +1 -1
  41. package/dist/ai/utils/isObjectSchema.d.ts +0 -1
  42. package/dist/ai/utils/systemGenerate.d.ts +0 -1
  43. package/dist/collections/Instructions.d.ts +0 -1
  44. package/dist/collections/Instructions.js +2 -2
  45. package/dist/collections/Instructions.js.map +1 -1
  46. package/dist/defaults.d.ts +0 -1
  47. package/dist/endpoints/fetchFields.d.ts +2 -3
  48. package/dist/endpoints/fetchFields.js +7 -3
  49. package/dist/endpoints/fetchFields.js.map +1 -1
  50. package/dist/endpoints/index.d.ts +0 -1
  51. package/dist/endpoints/index.js +111 -31
  52. package/dist/endpoints/index.js.map +1 -1
  53. package/dist/exports/client.d.ts +1 -1
  54. package/dist/exports/client.js +1 -0
  55. package/dist/exports/client.js.map +1 -1
  56. package/dist/exports/fields.d.ts +0 -1
  57. package/dist/exports/types.d.ts +2 -3
  58. package/dist/exports/types.js.map +1 -1
  59. package/dist/fields/ComposeField/ComposeField.d.ts +10 -2
  60. package/dist/fields/ComposeField/ComposeField.js +13 -5
  61. package/dist/fields/ComposeField/ComposeField.js.map +1 -1
  62. package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts +2 -2
  63. package/dist/fields/LexicalEditor/feature.client.d.ts +2 -3
  64. package/dist/fields/LexicalEditor/feature.server.d.ts +0 -1
  65. package/dist/fields/PromptEditorField/PromptEditorField.d.ts +0 -1
  66. package/dist/fields/PromptEditorField/PromptEditorField.js +1 -1
  67. package/dist/fields/PromptEditorField/PromptEditorField.js.map +1 -1
  68. package/dist/fields/PromptEditorField/defaultStyle.d.ts +0 -1
  69. package/dist/fields/SelectField/SelectField.d.ts +2 -2
  70. package/dist/fields/SelectField/SelectField.js +15 -4
  71. package/dist/fields/SelectField/SelectField.js.map +1 -1
  72. package/dist/index.d.ts +2 -6
  73. package/dist/index.js +2 -4
  74. package/dist/index.js.map +1 -1
  75. package/dist/init.d.ts +5 -2
  76. package/dist/init.js +8 -7
  77. package/dist/init.js.map +1 -1
  78. package/dist/libraries/handlebars/asyncHandlebars.d.ts +0 -1
  79. package/dist/libraries/handlebars/helpers.d.ts +1 -2
  80. package/dist/libraries/handlebars/helpers.js +6 -1
  81. package/dist/libraries/handlebars/helpers.js.map +1 -1
  82. package/dist/libraries/handlebars/helpersMap.d.ts +0 -1
  83. package/dist/libraries/handlebars/replacePlaceholders.d.ts +0 -1
  84. package/dist/plugin.d.ts +0 -1
  85. package/dist/plugin.js +7 -5
  86. package/dist/plugin.js.map +1 -1
  87. package/dist/providers/FieldProvider/FieldProvider.d.ts +1 -2
  88. package/dist/providers/FieldProvider/useFieldProps.d.ts +3 -4
  89. package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts +2 -12
  90. package/dist/providers/InstructionsProvider/InstructionsProvider.js +7 -9
  91. package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
  92. package/dist/providers/InstructionsProvider/context.d.ts +16 -0
  93. package/dist/providers/InstructionsProvider/context.js +13 -0
  94. package/dist/providers/InstructionsProvider/context.js.map +1 -0
  95. package/dist/providers/InstructionsProvider/useInstructions.d.ts +0 -1
  96. package/dist/providers/InstructionsProvider/useInstructions.js +29 -15
  97. package/dist/providers/InstructionsProvider/useInstructions.js.map +1 -1
  98. package/dist/translations/index.d.ts +0 -1
  99. package/dist/types/handlebars-async-helpers.d.js +2 -0
  100. package/dist/types/handlebars-async-helpers.d.js.map +1 -0
  101. package/dist/types/handlebars-dist-handlebars.d.js +2 -0
  102. package/dist/types/handlebars-dist-handlebars.d.js.map +1 -0
  103. package/dist/types/react-mentions.d.js +2 -0
  104. package/dist/types/react-mentions.d.js.map +1 -0
  105. package/dist/types.d.ts +45 -1
  106. package/dist/types.js.map +1 -1
  107. package/dist/ui/Compose/Compose.d.ts +0 -1
  108. package/dist/ui/Compose/Compose.js +61 -25
  109. package/dist/ui/Compose/Compose.js.map +1 -1
  110. package/dist/ui/Compose/UndoRedoActions.d.ts +2 -2
  111. package/dist/ui/Compose/hooks/menu/Item.d.ts +3 -2
  112. package/dist/ui/Compose/hooks/menu/Item.js +2 -2
  113. package/dist/ui/Compose/hooks/menu/Item.js.map +1 -1
  114. package/dist/ui/Compose/hooks/menu/TranslateMenu.d.ts +8 -5
  115. package/dist/ui/Compose/hooks/menu/TranslateMenu.js +1 -1
  116. package/dist/ui/Compose/hooks/menu/TranslateMenu.js.map +1 -1
  117. package/dist/ui/Compose/hooks/menu/items.d.ts +8 -9
  118. package/dist/ui/Compose/hooks/menu/itemsMap.d.ts +0 -1
  119. package/dist/ui/Compose/hooks/menu/useMenu.d.ts +7 -7
  120. package/dist/ui/Compose/hooks/menu/useMenu.js +12 -9
  121. package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -1
  122. package/dist/ui/Compose/hooks/useGenerate.d.ts +0 -1
  123. package/dist/ui/Compose/hooks/useGenerate.js +41 -20
  124. package/dist/ui/Compose/hooks/useGenerate.js.map +1 -1
  125. package/dist/ui/Compose/hooks/useHistory.d.ts +0 -1
  126. package/dist/ui/Compose/hooks/useHistory.js +2 -2
  127. package/dist/ui/Compose/hooks/useHistory.js.map +1 -1
  128. package/dist/ui/Icons/Icons.d.ts +34 -34
  129. package/dist/ui/Icons/Icons.js +1 -1
  130. package/dist/ui/Icons/Icons.js.map +1 -1
  131. package/dist/ui/Icons/LottieAnimation.d.ts +3 -3
  132. package/dist/ui/Icons/LottieAnimation.js +1 -0
  133. package/dist/ui/Icons/LottieAnimation.js.map +1 -1
  134. package/dist/utilities/editorSchemaValidator.d.ts +1 -2
  135. package/dist/utilities/editorSchemaValidator.js.map +1 -1
  136. package/dist/utilities/extractImageData.d.ts +0 -1
  137. package/dist/utilities/extractPromptAttachments.d.ts +2 -0
  138. package/dist/utilities/extractPromptAttachments.js +32 -0
  139. package/dist/utilities/extractPromptAttachments.js.map +1 -0
  140. package/dist/utilities/getFieldBySchemaPath.d.ts +0 -1
  141. package/dist/utilities/getFieldBySchemaPath.js +12 -4
  142. package/dist/utilities/getFieldBySchemaPath.js.map +1 -1
  143. package/dist/utilities/getFieldInfo.d.ts +1 -2
  144. package/dist/utilities/getGenerationModels.d.ts +1 -2
  145. package/dist/utilities/isPluginActivated.d.ts +0 -1
  146. package/dist/utilities/isPluginActivated.js +1 -1
  147. package/dist/utilities/isPluginActivated.js.map +1 -1
  148. package/dist/utilities/lexicalToHTML.d.ts +0 -1
  149. package/dist/utilities/setSafeLexicalState.d.ts +1 -2
  150. package/dist/utilities/setSafeLexicalState.js.map +1 -1
  151. package/dist/utilities/updateFieldsConfig.d.ts +0 -1
  152. package/dist/utilities/updateFieldsConfig.js +10 -3
  153. package/dist/utilities/updateFieldsConfig.js.map +1 -1
  154. package/package.json +104 -65
  155. package/dist/ai/analyse.d.ts.map +0 -1
  156. package/dist/ai/models/anthropic/generateRichText.d.ts.map +0 -1
  157. package/dist/ai/models/anthropic/index.d.ts.map +0 -1
  158. package/dist/ai/models/elevenLabs/generateVoice.d.ts.map +0 -1
  159. package/dist/ai/models/elevenLabs/index.d.ts.map +0 -1
  160. package/dist/ai/models/elevenLabs/voices.d.ts.map +0 -1
  161. package/dist/ai/models/index.d.ts.map +0 -1
  162. package/dist/ai/models/openai/generateImage.d.ts.map +0 -1
  163. package/dist/ai/models/openai/generateRichText.d.ts.map +0 -1
  164. package/dist/ai/models/openai/generateVoice.d.ts.map +0 -1
  165. package/dist/ai/models/openai/index.d.ts.map +0 -1
  166. package/dist/ai/models/openai/openai.d.ts.map +0 -1
  167. package/dist/ai/prompts.d.ts.map +0 -1
  168. package/dist/ai/schemas/lexicalJsonSchema.d.ts.map +0 -1
  169. package/dist/ai/utils/editImagesWithOpenAI.d.ts.map +0 -1
  170. package/dist/ai/utils/filterEditorSchemaByNodes.d.ts.map +0 -1
  171. package/dist/ai/utils/generateFileNameByPrompt.d.ts.map +0 -1
  172. package/dist/ai/utils/isObjectSchema.d.ts.map +0 -1
  173. package/dist/ai/utils/systemGenerate.d.ts.map +0 -1
  174. package/dist/collections/Instructions.d.ts.map +0 -1
  175. package/dist/defaults.d.ts.map +0 -1
  176. package/dist/endpoints/fetchFields.d.ts.map +0 -1
  177. package/dist/endpoints/index.d.ts.map +0 -1
  178. package/dist/exports/client.d.ts.map +0 -1
  179. package/dist/exports/fields.d.ts.map +0 -1
  180. package/dist/exports/types.d.ts.map +0 -1
  181. package/dist/fields/ComposeField/ComposeField.d.ts.map +0 -1
  182. package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts.map +0 -1
  183. package/dist/fields/LexicalEditor/feature.client.d.ts.map +0 -1
  184. package/dist/fields/LexicalEditor/feature.server.d.ts.map +0 -1
  185. package/dist/fields/PromptEditorField/PromptEditorField.d.ts.map +0 -1
  186. package/dist/fields/PromptEditorField/defaultStyle.d.ts.map +0 -1
  187. package/dist/fields/SelectField/SelectField.d.ts.map +0 -1
  188. package/dist/index.d.ts.map +0 -1
  189. package/dist/init.d.ts.map +0 -1
  190. package/dist/libraries/handlebars/asyncHandlebars.d.ts.map +0 -1
  191. package/dist/libraries/handlebars/helpers.d.ts.map +0 -1
  192. package/dist/libraries/handlebars/helpersMap.d.ts.map +0 -1
  193. package/dist/libraries/handlebars/replacePlaceholders.d.ts.map +0 -1
  194. package/dist/plugin.d.ts.map +0 -1
  195. package/dist/providers/FieldProvider/FieldProvider.d.ts.map +0 -1
  196. package/dist/providers/FieldProvider/useFieldProps.d.ts.map +0 -1
  197. package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts.map +0 -1
  198. package/dist/providers/InstructionsProvider/useInstructions.d.ts.map +0 -1
  199. package/dist/translations/index.d.ts.map +0 -1
  200. package/dist/types.d.ts.map +0 -1
  201. package/dist/ui/Compose/Compose.d.ts.map +0 -1
  202. package/dist/ui/Compose/UndoRedoActions.d.ts.map +0 -1
  203. package/dist/ui/Compose/hooks/menu/Item.d.ts.map +0 -1
  204. package/dist/ui/Compose/hooks/menu/TranslateMenu.d.ts.map +0 -1
  205. package/dist/ui/Compose/hooks/menu/items.d.ts.map +0 -1
  206. package/dist/ui/Compose/hooks/menu/itemsMap.d.ts.map +0 -1
  207. package/dist/ui/Compose/hooks/menu/useMenu.d.ts.map +0 -1
  208. package/dist/ui/Compose/hooks/useGenerate.d.ts.map +0 -1
  209. package/dist/ui/Compose/hooks/useHistory.d.ts.map +0 -1
  210. package/dist/ui/Icons/Icons.d.ts.map +0 -1
  211. package/dist/ui/Icons/LottieAnimation.d.ts.map +0 -1
  212. package/dist/utilities/editorSchemaValidator.d.ts.map +0 -1
  213. package/dist/utilities/extractImageData.d.ts.map +0 -1
  214. package/dist/utilities/getFieldBySchemaPath.d.ts.map +0 -1
  215. package/dist/utilities/getFieldInfo.d.ts.map +0 -1
  216. package/dist/utilities/getGenerationModels.d.ts.map +0 -1
  217. package/dist/utilities/isPluginActivated.d.ts.map +0 -1
  218. package/dist/utilities/lexicalToHTML.d.ts.map +0 -1
  219. package/dist/utilities/setSafeLexicalState.d.ts.map +0 -1
  220. package/dist/utilities/updateFieldsConfig.d.ts.map +0 -1
@@ -1,2 +1,10 @@
1
- export declare const ComposeField: (props: any) => import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=ComposeField.d.ts.map
1
+ import type { ClientField } from 'payload';
2
+ import React from 'react';
3
+ type ComposeFieldProps = {
4
+ [key: string]: any;
5
+ field: ClientField;
6
+ path?: string;
7
+ schemaPath?: string;
8
+ };
9
+ export declare const ComposeField: (props: ComposeFieldProps) => React.JSX.Element;
10
+ export {};
@@ -1,21 +1,29 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useDocumentInfo } from '@payloadcms/ui';
3
4
  import React from 'react';
4
5
  import { FieldProvider } from '../../providers/FieldProvider/FieldProvider.js';
5
6
  import { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js';
6
7
  import { Compose } from '../../ui/Compose/Compose.js';
7
8
  export const ComposeField = (props)=>{
9
+ const { collectionSlug } = useDocumentInfo();
10
+ const finalSchemaPath = props?.schemaPath ?? (collectionSlug ? `${collectionSlug}.${props?.path ?? ''}` : props?.path ?? '');
8
11
  const { id: instructionId, isConfigAllowed } = useInstructions({
9
- schemaPath: props?.schemaPath
12
+ schemaPath: finalSchemaPath
10
13
  });
11
14
  return /*#__PURE__*/ _jsx(FieldProvider, {
12
15
  context: {
13
- type: props?.field.type,
14
- path: props?.path,
15
- schemaPath: props?.schemaPath
16
+ type: (props?.field).type,
17
+ path: props?.path ?? '',
18
+ schemaPath: finalSchemaPath
16
19
  },
17
20
  children: /*#__PURE__*/ _jsx(Compose, {
18
- descriptionProps: props,
21
+ descriptionProps: {
22
+ ...props,
23
+ field: props?.field,
24
+ path: props?.path ?? '',
25
+ schemaPath: finalSchemaPath
26
+ },
19
27
  instructionId: instructionId,
20
28
  isConfigAllowed: isConfigAllowed
21
29
  })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/ComposeField/ComposeField.tsx"],"sourcesContent":["'use client'\n\nimport React from 'react'\n\nimport { FieldProvider } from '../../providers/FieldProvider/FieldProvider.js'\nimport { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js'\nimport { Compose } from '../../ui/Compose/Compose.js'\n\nexport const ComposeField = (props) => {\n\n const { id: instructionId, isConfigAllowed } = useInstructions({\n schemaPath: props?.schemaPath,\n })\n\n return (\n <FieldProvider\n context={{\n type: props?.field.type,\n path: props?.path,\n schemaPath: props?.schemaPath,\n }}\n >\n <Compose descriptionProps={props} instructionId={instructionId} isConfigAllowed={isConfigAllowed} />\n </FieldProvider>\n )\n}\n"],"names":["React","FieldProvider","useInstructions","Compose","ComposeField","props","id","instructionId","isConfigAllowed","schemaPath","context","type","field","path","descriptionProps"],"mappings":"AAAA;;AAEA,OAAOA,WAAW,QAAO;AAEzB,SAASC,aAAa,QAAQ,iDAAgD;AAC9E,SAASC,eAAe,QAAQ,0DAAyD;AACzF,SAASC,OAAO,QAAQ,8BAA6B;AAErD,OAAO,MAAMC,eAAe,CAACC;IAE3B,MAAM,EAAEC,IAAIC,aAAa,EAAEC,eAAe,EAAE,GAAGN,gBAAgB;QAC7DO,YAAYJ,OAAOI;IACrB;IAEA,qBACE,KAACR;QACCS,SAAS;YACPC,MAAMN,OAAOO,MAAMD;YACnBE,MAAMR,OAAOQ;YACbJ,YAAYJ,OAAOI;QACrB;kBAEA,cAAA,KAACN;YAAQW,kBAAkBT;YAAOE,eAAeA;YAAeC,iBAAiBA;;;AAGvF,EAAC"}
1
+ {"version":3,"sources":["../../../src/fields/ComposeField/ComposeField.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientField } from 'payload'\n\nimport { useDocumentInfo } from '@payloadcms/ui'\nimport React from 'react'\n\nimport { FieldProvider } from '../../providers/FieldProvider/FieldProvider.js'\nimport { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js'\nimport { Compose } from '../../ui/Compose/Compose.js'\n\ntype ComposeFieldProps = {\n [key: string]: any\n field: ClientField\n path?: string\n schemaPath?: string\n}\n\nexport const ComposeField = (props: ComposeFieldProps) => {\n const { collectionSlug } = useDocumentInfo()\n\n const finalSchemaPath =\n props?.schemaPath ??\n (collectionSlug ? `${collectionSlug}.${props?.path ?? ''}` : (props?.path ?? ''))\n\n const { id: instructionId, isConfigAllowed } = useInstructions({\n schemaPath: finalSchemaPath,\n })\n\n return (\n <FieldProvider\n context={{\n type: (props?.field as any).type,\n path: props?.path ?? '',\n schemaPath: finalSchemaPath,\n }}\n >\n <Compose\n descriptionProps={{\n ...props,\n field: props?.field,\n path: props?.path ?? '',\n schemaPath: finalSchemaPath,\n }}\n instructionId={instructionId}\n isConfigAllowed={isConfigAllowed}\n />\n </FieldProvider>\n )\n}\n"],"names":["useDocumentInfo","React","FieldProvider","useInstructions","Compose","ComposeField","props","collectionSlug","finalSchemaPath","schemaPath","path","id","instructionId","isConfigAllowed","context","type","field","descriptionProps"],"mappings":"AAAA;;AAIA,SAASA,eAAe,QAAQ,iBAAgB;AAChD,OAAOC,WAAW,QAAO;AAEzB,SAASC,aAAa,QAAQ,iDAAgD;AAC9E,SAASC,eAAe,QAAQ,0DAAyD;AACzF,SAASC,OAAO,QAAQ,8BAA6B;AASrD,OAAO,MAAMC,eAAe,CAACC;IAC3B,MAAM,EAAEC,cAAc,EAAE,GAAGP;IAE3B,MAAMQ,kBACJF,OAAOG,cACNF,CAAAA,iBAAiB,GAAGA,eAAe,CAAC,EAAED,OAAOI,QAAQ,IAAI,GAAIJ,OAAOI,QAAQ,EAAE;IAEjF,MAAM,EAAEC,IAAIC,aAAa,EAAEC,eAAe,EAAE,GAAGV,gBAAgB;QAC7DM,YAAYD;IACd;IAEA,qBACE,KAACN;QACCY,SAAS;YACPC,MAAM,AAACT,CAAAA,OAAOU,KAAI,EAAUD,IAAI;YAChCL,MAAMJ,OAAOI,QAAQ;YACrBD,YAAYD;QACd;kBAEA,cAAA,KAACJ;YACCa,kBAAkB;gBAChB,GAAGX,KAAK;gBACRU,OAAOV,OAAOU;gBACdN,MAAMJ,OAAOI,QAAQ;gBACrBD,YAAYD;YACd;YACAI,eAAeA;YACfC,iBAAiBA;;;AAIzB,EAAC"}
@@ -1,2 +1,2 @@
1
- export declare const ComposeFeatureComponent: (props: any) => import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=ComposeFeatureComponent.d.ts.map
1
+ import React from 'react';
2
+ export declare const ComposeFeatureComponent: (props: any) => React.JSX.Element;
@@ -1,8 +1,7 @@
1
1
  export declare const LexicalEditorFeatureClient: import("@payloadcms/richtext-lexical").FeatureProviderProviderClient<undefined, {
2
2
  featureKey: string;
3
3
  order: number;
4
- field: import("payload").RichTextFieldClient;
5
- path: string;
4
+ field: import("payload").RichTextFieldClient | undefined;
5
+ path: string | undefined;
6
6
  schemaPath: string;
7
7
  }>;
8
- //# sourceMappingURL=feature.client.d.ts.map
@@ -1,2 +1 @@
1
1
  export declare const PayloadAiPluginLexicalEditorFeature: import("@payloadcms/richtext-lexical").FeatureProviderProviderServer<undefined, undefined, undefined>;
2
- //# sourceMappingURL=feature.server.d.ts.map
@@ -1,4 +1,3 @@
1
1
  import type { TextareaFieldClientProps } from 'payload';
2
2
  import React from 'react';
3
3
  export declare const PromptEditorField: React.FC<TextareaFieldClientProps>;
4
- //# sourceMappingURL=PromptEditorField.d.ts.map
@@ -55,7 +55,7 @@ export const PromptEditorField = (props)=>{
55
55
  markup: "{{__id__}}",
56
56
  style: {
57
57
  backgroundColor: 'var(--theme-elevation-100)',
58
- padding: "2px 0"
58
+ padding: '2px 0'
59
59
  },
60
60
  trigger: "{"
61
61
  })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/PromptEditorField/PromptEditorField.tsx"],"sourcesContent":["'use client'\n\nimport type { TextareaFieldClientProps } from 'payload'\n\nimport { FieldDescription, FieldLabel, useField } from '@payloadcms/ui'\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { Mention, MentionsInput } from 'react-mentions/dist/react-mentions.cjs.js'\n\nimport { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js'\nimport { defaultStyle } from './defaultStyle.js'\n\nexport const PromptEditorField: React.FC<TextareaFieldClientProps> = (props) => {\n const { field, path: pathFromContext } = props\n const { setValue, value: payloadValue } = useField<string>({\n path: pathFromContext,\n })\n\n const [localValue, setLocalValue] = useState(payloadValue || '')\n const hasInitialized = useRef(false)\n\n const { promptEditorSuggestions } = useInstructions()\n\n const suggestions = useMemo(\n () =>\n promptEditorSuggestions.map((suggestion) => ({\n id: suggestion,\n display: suggestion,\n })),\n [promptEditorSuggestions],\n )\n\n useEffect(() => {\n if (!hasInitialized.current || payloadValue === '') {\n setLocalValue(payloadValue || '')\n hasInitialized.current = true\n }\n }, [payloadValue])\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setLocalValue(e.target.value)\n }, [])\n\n const handleBlur = useCallback(() => {\n setValue(localValue)\n }, [localValue, setValue])\n\n const displayTransform = useCallback((id: string) => `{{ ${id} }}`, [])\n\n return (\n <div className=\"field-type textarea\">\n <FieldLabel label={field.label} />\n <MentionsInput\n onBlur={handleBlur}\n onChange={handleChange}\n placeholder=\"Type your prompt using {{ fieldName }} variables...\"\n style={defaultStyle}\n value={localValue}\n >\n <Mention\n data={suggestions}\n displayTransform={displayTransform}\n markup=\"{{__id__}}\"\n style={{\n backgroundColor: 'var(--theme-elevation-100)',\n padding: \"2px 0\"\n }}\n trigger=\"{\"\n />\n </MentionsInput>\n <FieldDescription description={field?.admin?.description} path=\"\" />\n </div>\n )\n}"],"names":["FieldDescription","FieldLabel","useField","React","useCallback","useEffect","useMemo","useRef","useState","Mention","MentionsInput","useInstructions","defaultStyle","PromptEditorField","props","field","path","pathFromContext","setValue","value","payloadValue","localValue","setLocalValue","hasInitialized","promptEditorSuggestions","suggestions","map","suggestion","id","display","current","handleChange","e","target","handleBlur","displayTransform","div","className","label","onBlur","onChange","placeholder","style","data","markup","backgroundColor","padding","trigger","description","admin"],"mappings":"AAAA;;AAIA,SAASA,gBAAgB,EAAEC,UAAU,EAAEC,QAAQ,QAAQ,iBAAgB;AACvE,OAAOC,SAASC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAO;AAChF,SAASC,OAAO,EAAEC,aAAa,QAAQ,4CAA2C;AAElF,SAASC,eAAe,QAAQ,0DAAyD;AACzF,SAASC,YAAY,QAAQ,oBAAmB;AAEhD,OAAO,MAAMC,oBAAwD,CAACC;IACpE,MAAM,EAAEC,KAAK,EAAEC,MAAMC,eAAe,EAAE,GAAGH;IACzC,MAAM,EAAEI,QAAQ,EAAEC,OAAOC,YAAY,EAAE,GAAGlB,SAAiB;QACzDc,MAAMC;IACR;IAEA,MAAM,CAACI,YAAYC,cAAc,GAAGd,SAASY,gBAAgB;IAC7D,MAAMG,iBAAiBhB,OAAO;IAE9B,MAAM,EAAEiB,uBAAuB,EAAE,GAAGb;IAEpC,MAAMc,cAAcnB,QAClB,IACEkB,wBAAwBE,GAAG,CAAC,CAACC,aAAgB,CAAA;gBAC3CC,IAAID;gBACJE,SAASF;YACX,CAAA,IACF;QAACH;KAAwB;IAG3BnB,UAAU;QACR,IAAI,CAACkB,eAAeO,OAAO,IAAIV,iBAAiB,IAAI;YAClDE,cAAcF,gBAAgB;YAC9BG,eAAeO,OAAO,GAAG;QAC3B;IACF,GAAG;QAACV;KAAa;IAEjB,MAAMW,eAAe3B,YAAY,CAAC4B;QAChCV,cAAcU,EAAEC,MAAM,CAACd,KAAK;IAC9B,GAAG,EAAE;IAEL,MAAMe,aAAa9B,YAAY;QAC7Bc,SAASG;IACX,GAAG;QAACA;QAAYH;KAAS;IAEzB,MAAMiB,mBAAmB/B,YAAY,CAACwB,KAAe,CAAC,GAAG,EAAEA,GAAG,GAAG,CAAC,EAAE,EAAE;IAEtE,qBACE,MAACQ;QAAIC,WAAU;;0BACb,KAACpC;gBAAWqC,OAAOvB,MAAMuB,KAAK;;0BAC9B,KAAC5B;gBACC6B,QAAQL;gBACRM,UAAUT;gBACVU,aAAY;gBACZC,OAAO9B;gBACPO,OAAOE;0BAEP,cAAA,KAACZ;oBACCkC,MAAMlB;oBACNU,kBAAkBA;oBAClBS,QAAO;oBACPF,OAAO;wBACLG,iBAAiB;wBACjBC,SAAS;oBACX;oBACAC,SAAQ;;;0BAGZ,KAAC/C;gBAAiBgD,aAAajC,OAAOkC,OAAOD;gBAAahC,MAAK;;;;AAGrE,EAAC"}
1
+ {"version":3,"sources":["../../../src/fields/PromptEditorField/PromptEditorField.tsx"],"sourcesContent":["'use client'\n\nimport type { TextareaFieldClientProps } from 'payload'\n\nimport { FieldDescription, FieldLabel, useField } from '@payloadcms/ui'\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { Mention, MentionsInput } from 'react-mentions/dist/react-mentions.cjs.js'\n\nimport { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js'\nimport { defaultStyle } from './defaultStyle.js'\n\nexport const PromptEditorField: React.FC<TextareaFieldClientProps> = (props) => {\n const { field, path: pathFromContext } = props\n const { setValue, value: payloadValue } = useField<string>({\n path: pathFromContext,\n })\n\n const [localValue, setLocalValue] = useState(payloadValue || '')\n const hasInitialized = useRef(false)\n\n const { promptEditorSuggestions } = useInstructions()\n\n const suggestions = useMemo(\n () =>\n promptEditorSuggestions.map((suggestion: string) => ({\n id: suggestion,\n display: suggestion,\n })),\n [promptEditorSuggestions],\n )\n\n useEffect(() => {\n if (!hasInitialized.current || payloadValue === '') {\n setLocalValue(payloadValue || '')\n hasInitialized.current = true\n }\n }, [payloadValue])\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setLocalValue(e.target.value)\n }, [])\n\n const handleBlur = useCallback(() => {\n setValue(localValue)\n }, [localValue, setValue])\n\n const displayTransform = useCallback((id: string) => `{{ ${id} }}`, [])\n\n return (\n <div className=\"field-type textarea\">\n <FieldLabel label={field.label} />\n <MentionsInput\n onBlur={handleBlur}\n onChange={handleChange}\n placeholder=\"Type your prompt using {{ fieldName }} variables...\"\n style={defaultStyle}\n value={localValue}\n >\n <Mention\n data={suggestions}\n displayTransform={displayTransform}\n markup=\"{{__id__}}\"\n style={{\n backgroundColor: 'var(--theme-elevation-100)',\n padding: '2px 0',\n }}\n trigger=\"{\"\n />\n </MentionsInput>\n <FieldDescription description={field?.admin?.description} path=\"\" />\n </div>\n )\n}\n"],"names":["FieldDescription","FieldLabel","useField","React","useCallback","useEffect","useMemo","useRef","useState","Mention","MentionsInput","useInstructions","defaultStyle","PromptEditorField","props","field","path","pathFromContext","setValue","value","payloadValue","localValue","setLocalValue","hasInitialized","promptEditorSuggestions","suggestions","map","suggestion","id","display","current","handleChange","e","target","handleBlur","displayTransform","div","className","label","onBlur","onChange","placeholder","style","data","markup","backgroundColor","padding","trigger","description","admin"],"mappings":"AAAA;;AAIA,SAASA,gBAAgB,EAAEC,UAAU,EAAEC,QAAQ,QAAQ,iBAAgB;AACvE,OAAOC,SAASC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAO;AAChF,SAASC,OAAO,EAAEC,aAAa,QAAQ,4CAA2C;AAElF,SAASC,eAAe,QAAQ,0DAAyD;AACzF,SAASC,YAAY,QAAQ,oBAAmB;AAEhD,OAAO,MAAMC,oBAAwD,CAACC;IACpE,MAAM,EAAEC,KAAK,EAAEC,MAAMC,eAAe,EAAE,GAAGH;IACzC,MAAM,EAAEI,QAAQ,EAAEC,OAAOC,YAAY,EAAE,GAAGlB,SAAiB;QACzDc,MAAMC;IACR;IAEA,MAAM,CAACI,YAAYC,cAAc,GAAGd,SAASY,gBAAgB;IAC7D,MAAMG,iBAAiBhB,OAAO;IAE9B,MAAM,EAAEiB,uBAAuB,EAAE,GAAGb;IAEpC,MAAMc,cAAcnB,QAClB,IACEkB,wBAAwBE,GAAG,CAAC,CAACC,aAAwB,CAAA;gBACnDC,IAAID;gBACJE,SAASF;YACX,CAAA,IACF;QAACH;KAAwB;IAG3BnB,UAAU;QACR,IAAI,CAACkB,eAAeO,OAAO,IAAIV,iBAAiB,IAAI;YAClDE,cAAcF,gBAAgB;YAC9BG,eAAeO,OAAO,GAAG;QAC3B;IACF,GAAG;QAACV;KAAa;IAEjB,MAAMW,eAAe3B,YAAY,CAAC4B;QAChCV,cAAcU,EAAEC,MAAM,CAACd,KAAK;IAC9B,GAAG,EAAE;IAEL,MAAMe,aAAa9B,YAAY;QAC7Bc,SAASG;IACX,GAAG;QAACA;QAAYH;KAAS;IAEzB,MAAMiB,mBAAmB/B,YAAY,CAACwB,KAAe,CAAC,GAAG,EAAEA,GAAG,GAAG,CAAC,EAAE,EAAE;IAEtE,qBACE,MAACQ;QAAIC,WAAU;;0BACb,KAACpC;gBAAWqC,OAAOvB,MAAMuB,KAAK;;0BAC9B,KAAC5B;gBACC6B,QAAQL;gBACRM,UAAUT;gBACVU,aAAY;gBACZC,OAAO9B;gBACPO,OAAOE;0BAEP,cAAA,KAACZ;oBACCkC,MAAMlB;oBACNU,kBAAkBA;oBAClBS,QAAO;oBACPF,OAAO;wBACLG,iBAAiB;wBACjBC,SAAS;oBACX;oBACAC,SAAQ;;;0BAGZ,KAAC/C;gBAAiBgD,aAAajC,OAAOkC,OAAOD;gBAAahC,MAAK;;;;AAGrE,EAAC"}
@@ -47,4 +47,3 @@ export declare const defaultStyle: {
47
47
  };
48
48
  };
49
49
  };
50
- //# sourceMappingURL=defaultStyle.d.ts.map
@@ -1,4 +1,5 @@
1
1
  import type { SelectFieldClientProps } from 'payload';
2
+ import React from 'react';
2
3
  export declare const SelectField: (props: {
3
4
  filterByField: string;
4
5
  options: {
@@ -7,5 +8,4 @@ export declare const SelectField: (props: {
7
8
  value: string;
8
9
  }[];
9
10
  path: string;
10
- } & SelectFieldClientProps) => import("react/jsx-runtime").JSX.Element;
11
- //# sourceMappingURL=SelectField.d.ts.map
11
+ } & SelectFieldClientProps) => React.JSX.Element;
@@ -10,9 +10,13 @@ export const SelectField = (props)=>{
10
10
  });
11
11
  const [filterOptions, setFilterOptions] = useState([]);
12
12
  useEffect(()=>{
13
- if (!Array.isArray(options)) return;
13
+ if (!Array.isArray(options)) {
14
+ return;
15
+ }
14
16
  const opts = options.filter((option)=>{
15
- if (!relatedField || !option.fields) return true;
17
+ if (!relatedField || !option.fields) {
18
+ return true;
19
+ }
16
20
  if (Array.isArray(option.fields)) {
17
21
  return option.fields.includes(relatedField);
18
22
  }
@@ -28,8 +32,15 @@ export const SelectField = (props)=>{
28
32
  return /*#__PURE__*/ _jsx(SelectInput, {
29
33
  label: field.label,
30
34
  name: path,
31
- onChange: (e)=>{
32
- setValue(e.value);
35
+ onChange: (value)=>{
36
+ console.log("value --- ", value);
37
+ if (Array.isArray(value)) {
38
+ setValue(value[0]?.value ?? '');
39
+ } else if (value && typeof value === 'object' && 'value' in value) {
40
+ setValue(value.value);
41
+ } else {
42
+ setValue('');
43
+ }
33
44
  },
34
45
  options: filterOptions,
35
46
  path: path,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/SelectField/SelectField.tsx"],"sourcesContent":["'use client'\n\nimport type { OptionObject, SelectFieldClientProps } from 'payload'\n\nimport { SelectInput, useField } from '@payloadcms/ui'\nimport React, { useEffect, useState } from 'react'\n\n// Use to filter model options in settings based on field types\nexport const SelectField = (\n props: {\n filterByField: string\n options: { fields: string[]; label: string; value: string }[]\n path: string\n } & SelectFieldClientProps,\n) => {\n const { field, filterByField, options, path } = props\n const { value: relatedField } = useField<string>({\n path: filterByField,\n })\n\n const [filterOptions, setFilterOptions] = useState<OptionObject[]>([])\n\n useEffect(() => {\n if (!Array.isArray(options)) return\n\n const opts = options.filter((option) => {\n if (!relatedField || !option.fields) return true\n\n if (Array.isArray(option.fields)) {\n return option.fields.includes(relatedField)\n }\n })\n setFilterOptions(opts)\n }, [relatedField, options])\n\n const { setValue, value: selectValue } = useField<string>({ path })\n\n return (\n <SelectInput\n label={field.label}\n name={path}\n onChange={(e: OptionObject) => {\n setValue(e.value)\n }}\n options={filterOptions}\n path={path}\n value={selectValue}\n />\n )\n}\n"],"names":["SelectInput","useField","React","useEffect","useState","SelectField","props","field","filterByField","options","path","value","relatedField","filterOptions","setFilterOptions","Array","isArray","opts","filter","option","fields","includes","setValue","selectValue","label","name","onChange","e"],"mappings":"AAAA;;AAIA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,iBAAgB;AACtD,OAAOC,SAASC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAElD,+DAA+D;AAC/D,OAAO,MAAMC,cAAc,CACzBC;IAMA,MAAM,EAAEC,KAAK,EAAEC,aAAa,EAAEC,OAAO,EAAEC,IAAI,EAAE,GAAGJ;IAChD,MAAM,EAAEK,OAAOC,YAAY,EAAE,GAAGX,SAAiB;QAC/CS,MAAMF;IACR;IAEA,MAAM,CAACK,eAAeC,iBAAiB,GAAGV,SAAyB,EAAE;IAErED,UAAU;QACR,IAAI,CAACY,MAAMC,OAAO,CAACP,UAAU;QAE7B,MAAMQ,OAAOR,QAAQS,MAAM,CAAC,CAACC;YAC3B,IAAI,CAACP,gBAAgB,CAACO,OAAOC,MAAM,EAAE,OAAO;YAE5C,IAAIL,MAAMC,OAAO,CAACG,OAAOC,MAAM,GAAG;gBAChC,OAAOD,OAAOC,MAAM,CAACC,QAAQ,CAACT;YAChC;QACF;QACAE,iBAAiBG;IACnB,GAAG;QAACL;QAAcH;KAAQ;IAE1B,MAAM,EAAEa,QAAQ,EAAEX,OAAOY,WAAW,EAAE,GAAGtB,SAAiB;QAAES;IAAK;IAEjE,qBACE,KAACV;QACCwB,OAAOjB,MAAMiB,KAAK;QAClBC,MAAMf;QACNgB,UAAU,CAACC;YACTL,SAASK,EAAEhB,KAAK;QAClB;QACAF,SAASI;QACTH,MAAMA;QACNC,OAAOY;;AAGb,EAAC"}
1
+ {"version":3,"sources":["../../../src/fields/SelectField/SelectField.tsx"],"sourcesContent":["'use client'\n\nimport type { OptionObject, SelectFieldClientProps } from 'payload'\n\nimport { SelectInput, useField } from '@payloadcms/ui'\nimport React, { useEffect, useState } from 'react'\n\n// Use to filter model options in settings based on field types\nexport const SelectField = (\n props: {\n filterByField: string\n options: { fields: string[]; label: string; value: string }[]\n path: string\n } & SelectFieldClientProps,\n) => {\n const { field, filterByField, options, path } = props\n const { value: relatedField } = useField<string>({\n path: filterByField,\n })\n\n const [filterOptions, setFilterOptions] = useState<OptionObject[]>([])\n\n useEffect(() => {\n if (!Array.isArray(options)) {\n return\n }\n\n const opts = options.filter((option) => {\n if (!relatedField || !option.fields) {\n return true\n }\n\n if (Array.isArray(option.fields)) {\n return option.fields.includes(relatedField)\n }\n })\n setFilterOptions(opts)\n }, [relatedField, options])\n\n const { setValue, value: selectValue } = useField<string>({ path })\n\n return (\n <SelectInput\n label={field.label}\n name={path}\n onChange={(value) => {\n console.log(\"value --- \", value)\n if (Array.isArray(value)) {\n setValue(value[0]?.value ?? '')\n } else if (value && typeof value === 'object' && 'value' in value) {\n setValue((value as OptionObject).value)\n } else {\n setValue('')\n }\n }}\n options={filterOptions}\n path={path}\n value={selectValue}\n />\n )\n}\n"],"names":["SelectInput","useField","React","useEffect","useState","SelectField","props","field","filterByField","options","path","value","relatedField","filterOptions","setFilterOptions","Array","isArray","opts","filter","option","fields","includes","setValue","selectValue","label","name","onChange","console","log"],"mappings":"AAAA;;AAIA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,iBAAgB;AACtD,OAAOC,SAASC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAElD,+DAA+D;AAC/D,OAAO,MAAMC,cAAc,CACzBC;IAMA,MAAM,EAAEC,KAAK,EAAEC,aAAa,EAAEC,OAAO,EAAEC,IAAI,EAAE,GAAGJ;IAChD,MAAM,EAAEK,OAAOC,YAAY,EAAE,GAAGX,SAAiB;QAC/CS,MAAMF;IACR;IAEA,MAAM,CAACK,eAAeC,iBAAiB,GAAGV,SAAyB,EAAE;IAErED,UAAU;QACR,IAAI,CAACY,MAAMC,OAAO,CAACP,UAAU;YAC3B;QACF;QAEA,MAAMQ,OAAOR,QAAQS,MAAM,CAAC,CAACC;YAC3B,IAAI,CAACP,gBAAgB,CAACO,OAAOC,MAAM,EAAE;gBACnC,OAAO;YACT;YAEA,IAAIL,MAAMC,OAAO,CAACG,OAAOC,MAAM,GAAG;gBAChC,OAAOD,OAAOC,MAAM,CAACC,QAAQ,CAACT;YAChC;QACF;QACAE,iBAAiBG;IACnB,GAAG;QAACL;QAAcH;KAAQ;IAE1B,MAAM,EAAEa,QAAQ,EAAEX,OAAOY,WAAW,EAAE,GAAGtB,SAAiB;QAAES;IAAK;IAEjE,qBACE,KAACV;QACCwB,OAAOjB,MAAMiB,KAAK;QAClBC,MAAMf;QACNgB,UAAU,CAACf;YACTgB,QAAQC,GAAG,CAAC,cAAcjB;YAC1B,IAAII,MAAMC,OAAO,CAACL,QAAQ;gBACxBW,SAASX,KAAK,CAAC,EAAE,EAAEA,SAAS;YAC9B,OAAO,IAAIA,SAAS,OAAOA,UAAU,YAAY,WAAWA,OAAO;gBACjEW,SAAS,AAACX,MAAuBA,KAAK;YACxC,OAAO;gBACLW,SAAS;YACX;QACF;QACAb,SAASI;QACTH,MAAMA;QACNC,OAAOY;;AAGb,EAAC"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,3 @@
1
- /**
2
- * @license This software is licensed under the MIT License.
3
- */
4
- import { PayloadAiPluginLexicalEditorFeature } from './fields/LexicalEditor/feature.server.js';
1
+ export { defaultPrompts, defaultSeedPrompts as seedPrompts } from './ai/prompts.js';
2
+ export { PayloadAiPluginLexicalEditorFeature } from './fields/LexicalEditor/feature.server.js';
5
3
  export { payloadAiPlugin } from './plugin.js';
6
- export { PayloadAiPluginLexicalEditorFeature };
7
- //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,7 +1,5 @@
1
- /**
2
- * @license This software is licensed under the MIT License.
3
- */ import { PayloadAiPluginLexicalEditorFeature } from './fields/LexicalEditor/feature.server.js';
1
+ export { defaultPrompts, defaultSeedPrompts as seedPrompts } from './ai/prompts.js';
2
+ export { PayloadAiPluginLexicalEditorFeature } from './fields/LexicalEditor/feature.server.js';
4
3
  export { payloadAiPlugin } from './plugin.js';
5
- export { PayloadAiPluginLexicalEditorFeature };
6
4
 
7
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @license This software is licensed under the MIT License.\n */\n\nimport { PayloadAiPluginLexicalEditorFeature } from './fields/LexicalEditor/feature.server.js'\n\nexport { payloadAiPlugin } from './plugin.js'\nexport { PayloadAiPluginLexicalEditorFeature }\n"],"names":["PayloadAiPluginLexicalEditorFeature","payloadAiPlugin"],"mappings":"AAAA;;CAEC,GAED,SAASA,mCAAmC,QAAQ,2CAA0C;AAE9F,SAASC,eAAe,QAAQ,cAAa;AAC7C,SAASD,mCAAmC,GAAE"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { defaultPrompts, defaultSeedPrompts as seedPrompts } from './ai/prompts.js'\n\nexport { PayloadAiPluginLexicalEditorFeature } from './fields/LexicalEditor/feature.server.js'\nexport { payloadAiPlugin } from './plugin.js'\n"],"names":["defaultPrompts","defaultSeedPrompts","seedPrompts","PayloadAiPluginLexicalEditorFeature","payloadAiPlugin"],"mappings":"AAAA,SAASA,cAAc,EAAEC,sBAAsBC,WAAW,QAAQ,kBAAiB;AAEnF,SAASC,mCAAmC,QAAQ,2CAA0C;AAC9F,SAASC,eAAe,QAAQ,cAAa"}
package/dist/init.d.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  import type { Payload } from 'payload';
2
2
  import type { PluginConfig } from './types.js';
3
- export declare const init: (payload: Payload, fieldSchemaPaths: any, pluginConfig: PluginConfig) => Promise<void>;
4
- //# sourceMappingURL=init.d.ts.map
3
+ export declare const init: (payload: Payload, fieldSchemaPaths: Record<string, {
4
+ label: string;
5
+ relationTo?: string;
6
+ type: string;
7
+ }>, pluginConfig: PluginConfig) => Promise<void>;
package/dist/init.js CHANGED
@@ -1,4 +1,4 @@
1
- import { seedPrompts } from './ai/prompts.js';
1
+ import { defaultSeedPrompts } from './ai/prompts.js';
2
2
  import { systemGenerate } from './ai/utils/systemGenerate.js';
3
3
  import { PLUGIN_INSTRUCTIONS_TABLE } from './defaults.js';
4
4
  import { getGenerationModels } from './utilities/getGenerationModels.js';
@@ -24,6 +24,7 @@ export const init = async (payload, fieldSchemaPaths, pluginConfig)=>{
24
24
  }
25
25
  });
26
26
  if (!entry?.docs?.length) {
27
+ const seedPrompts = pluginConfig.seedPrompts || defaultSeedPrompts;
27
28
  const { prompt, system } = seedPrompts({
28
29
  fieldLabel,
29
30
  fieldSchemaPaths,
@@ -33,28 +34,28 @@ export const init = async (payload, fieldSchemaPaths, pluginConfig)=>{
33
34
  let generatedPrompt = '{{ title }}';
34
35
  if (pluginConfig.generatePromptOnInit) {
35
36
  // find the model that has the generateText function
36
- const model = getGenerationModels(pluginConfig).find((model)=>model.generateText);
37
+ const models = getGenerationModels(pluginConfig);
38
+ const model = models && Array.isArray(models) ? models.find((model)=>model.generateText) : undefined;
37
39
  generatedPrompt = await systemGenerate({
38
40
  prompt,
39
41
  system
40
42
  }, model?.generateText);
41
43
  payload.logger.info(`\nPrompt generated for "${fieldLabel}" field:\nprompt: ${generatedPrompt}\n\n`);
42
44
  }
45
+ const modelsForId = getGenerationModels(pluginConfig);
46
+ const modelForId = modelsForId && Array.isArray(modelsForId) ? modelsForId.find((a)=>a.fields.includes(fieldType)) : undefined;
43
47
  const instructions = await payload.create({
44
48
  collection: PLUGIN_INSTRUCTIONS_TABLE,
45
49
  data: {
46
50
  'field-type': fieldType,
47
- 'model-id': getGenerationModels(pluginConfig).find((a)=>{
48
- return a.fields.includes(fieldType);
49
- })?.id,
51
+ 'model-id': modelForId?.id,
50
52
  prompt: generatedPrompt,
51
53
  'relation-to': relationTo,
52
54
  'schema-path': path
53
55
  }
54
56
  }).then((a)=>a).catch((err)=>{
55
- payload.logger.error('— AI Plugin: Error creating Compose settings-', err);
57
+ payload.logger.error(err, '— AI Plugin: Error creating Compose settings-');
56
58
  });
57
- // @ts-expect-error
58
59
  if (instructions?.id) {
59
60
  fieldInstructionsMap[path] = {
60
61
  id: instructions.id,
package/dist/init.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/init.ts"],"sourcesContent":["import type { Payload } from 'payload'\n\nimport type { PluginConfig } from './types.js'\n\nimport { seedPrompts } from './ai/prompts.js'\nimport { systemGenerate } from './ai/utils/systemGenerate.js'\nimport { PLUGIN_INSTRUCTIONS_TABLE } from './defaults.js'\nimport { getGenerationModels } from './utilities/getGenerationModels.js'\n\nexport const init = async (payload: Payload, fieldSchemaPaths, pluginConfig: PluginConfig) => {\n if (pluginConfig.debugging) {\n payload.logger.info(`— AI Plugin: Initializing...`)\n }\n\n const paths = Object.keys(fieldSchemaPaths)\n\n const fieldInstructionsMap = {}\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i]\n const { type: fieldType, label: fieldLabel, relationTo } = fieldSchemaPaths[path]\n const entry = await payload.find({\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n pagination: false,\n where: {\n 'field-type': {\n equals: fieldType,\n },\n 'schema-path': {\n equals: path,\n },\n },\n })\n\n if (!entry?.docs?.length) {\n const { prompt, system } = seedPrompts({\n fieldLabel,\n fieldSchemaPaths,\n fieldType,\n path,\n })\n\n let generatedPrompt = '{{ title }}'\n if (pluginConfig.generatePromptOnInit) {\n // find the model that has the generateText function\n const model = getGenerationModels(pluginConfig).find((model) => model.generateText)\n generatedPrompt = await systemGenerate(\n {\n prompt,\n system,\n },\n model?.generateText,\n )\n payload.logger.info(\n `\\nPrompt generated for \"${fieldLabel}\" field:\\nprompt: ${generatedPrompt}\\n\\n`,\n )\n }\n\n const instructions = await payload\n .create({\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n data: {\n 'field-type': fieldType,\n 'model-id': getGenerationModels(pluginConfig).find((a) => {\n return a.fields.includes(fieldType)\n })?.id,\n prompt: generatedPrompt,\n 'relation-to': relationTo,\n 'schema-path': path,\n },\n })\n .then((a) => a)\n .catch((err) => {\n payload.logger.error('— AI Plugin: Error creating Compose settings-', err)\n })\n\n // @ts-expect-error\n if (instructions?.id) {\n fieldInstructionsMap[path] = {\n id: instructions.id,\n fieldType,\n }\n }\n } else {\n const [instructions] = entry.docs\n fieldInstructionsMap[path] = {\n id: instructions.id,\n fieldType,\n }\n }\n }\n\n if (pluginConfig.debugging) {\n payload.logger.info(\n `— AI Plugin: Enabled fields map: ${JSON.stringify(fieldInstructionsMap, null, 2)}`,\n )\n payload.logger.info(`— AI Plugin: Initialized!`)\n }\n\n if (pluginConfig.generatePromptOnInit) {\n payload.logger.info(\n '\\n\\n-AI Plugin: Example prompts are added to get you started, Now go break some code 🚀🚀🚀\\n\\n',\n )\n }\n}\n"],"names":["seedPrompts","systemGenerate","PLUGIN_INSTRUCTIONS_TABLE","getGenerationModels","init","payload","fieldSchemaPaths","pluginConfig","debugging","logger","info","paths","Object","keys","fieldInstructionsMap","i","length","path","type","fieldType","label","fieldLabel","relationTo","entry","find","collection","pagination","where","equals","docs","prompt","system","generatedPrompt","generatePromptOnInit","model","generateText","instructions","create","data","a","fields","includes","id","then","catch","err","error","JSON","stringify"],"mappings":"AAIA,SAASA,WAAW,QAAQ,kBAAiB;AAC7C,SAASC,cAAc,QAAQ,+BAA8B;AAC7D,SAASC,yBAAyB,QAAQ,gBAAe;AACzD,SAASC,mBAAmB,QAAQ,qCAAoC;AAExE,OAAO,MAAMC,OAAO,OAAOC,SAAkBC,kBAAkBC;IAC7D,IAAIA,aAAaC,SAAS,EAAE;QAC1BH,QAAQI,MAAM,CAACC,IAAI,CAAC,CAAC,4BAA4B,CAAC;IACpD;IAEA,MAAMC,QAAQC,OAAOC,IAAI,CAACP;IAE1B,MAAMQ,uBAAuB,CAAC;IAC9B,IAAK,IAAIC,IAAI,GAAGA,IAAIJ,MAAMK,MAAM,EAAED,IAAK;QACrC,MAAME,OAAON,KAAK,CAACI,EAAE;QACrB,MAAM,EAAEG,MAAMC,SAAS,EAAEC,OAAOC,UAAU,EAAEC,UAAU,EAAE,GAAGhB,gBAAgB,CAACW,KAAK;QACjF,MAAMM,QAAQ,MAAMlB,QAAQmB,IAAI,CAAC;YAC/BC,YAAYvB;YACZwB,YAAY;YACZC,OAAO;gBACL,cAAc;oBACZC,QAAQT;gBACV;gBACA,eAAe;oBACbS,QAAQX;gBACV;YACF;QACF;QAEA,IAAI,CAACM,OAAOM,MAAMb,QAAQ;YACxB,MAAM,EAAEc,MAAM,EAAEC,MAAM,EAAE,GAAG/B,YAAY;gBACrCqB;gBACAf;gBACAa;gBACAF;YACF;YAEA,IAAIe,kBAAkB;YACtB,IAAIzB,aAAa0B,oBAAoB,EAAE;gBACrC,oDAAoD;gBACpD,MAAMC,QAAQ/B,oBAAoBI,cAAciB,IAAI,CAAC,CAACU,QAAUA,MAAMC,YAAY;gBAClFH,kBAAkB,MAAM/B,eACtB;oBACE6B;oBACAC;gBACF,GACAG,OAAOC;gBAET9B,QAAQI,MAAM,CAACC,IAAI,CACjB,CAAC,wBAAwB,EAAEW,WAAW,kBAAkB,EAAEW,gBAAgB,IAAI,CAAC;YAEnF;YAEA,MAAMI,eAAe,MAAM/B,QACxBgC,MAAM,CAAC;gBACNZ,YAAYvB;gBACZoC,MAAM;oBACJ,cAAcnB;oBACd,YAAYhB,oBAAoBI,cAAciB,IAAI,CAAC,CAACe;wBAClD,OAAOA,EAAEC,MAAM,CAACC,QAAQ,CAACtB;oBAC3B,IAAIuB;oBACJZ,QAAQE;oBACR,eAAeV;oBACf,eAAeL;gBACjB;YACF,GACC0B,IAAI,CAAC,CAACJ,IAAMA,GACZK,KAAK,CAAC,CAACC;gBACNxC,QAAQI,MAAM,CAACqC,KAAK,CAAC,iDAAiDD;YACxE;YAEF,mBAAmB;YACnB,IAAIT,cAAcM,IAAI;gBACpB5B,oBAAoB,CAACG,KAAK,GAAG;oBAC3ByB,IAAIN,aAAaM,EAAE;oBACnBvB;gBACF;YACF;QACF,OAAO;YACL,MAAM,CAACiB,aAAa,GAAGb,MAAMM,IAAI;YACjCf,oBAAoB,CAACG,KAAK,GAAG;gBAC3ByB,IAAIN,aAAaM,EAAE;gBACnBvB;YACF;QACF;IACF;IAEA,IAAIZ,aAAaC,SAAS,EAAE;QAC1BH,QAAQI,MAAM,CAACC,IAAI,CACjB,CAAC,iCAAiC,EAAEqC,KAAKC,SAAS,CAAClC,sBAAsB,MAAM,IAAI;QAErFT,QAAQI,MAAM,CAACC,IAAI,CAAC,CAAC,yBAAyB,CAAC;IACjD;IAEA,IAAIH,aAAa0B,oBAAoB,EAAE;QACrC5B,QAAQI,MAAM,CAACC,IAAI,CACjB;IAEJ;AACF,EAAC"}
1
+ {"version":3,"sources":["../src/init.ts"],"sourcesContent":["import type { Payload } from 'payload'\n\nimport type { PluginConfig } from './types.js'\n\nimport { defaultSeedPrompts } from './ai/prompts.js'\nimport { systemGenerate } from './ai/utils/systemGenerate.js'\nimport { PLUGIN_INSTRUCTIONS_TABLE } from './defaults.js'\nimport { getGenerationModels } from './utilities/getGenerationModels.js'\n\nexport const init = async (\n payload: Payload,\n fieldSchemaPaths: Record<string, { label: string; relationTo?: string; type: string }>,\n pluginConfig: PluginConfig,\n) => {\n if (pluginConfig.debugging) {\n payload.logger.info(`— AI Plugin: Initializing...`)\n }\n\n const paths = Object.keys(fieldSchemaPaths)\n\n const fieldInstructionsMap: Record<string, { fieldType: any; id: any }> = {}\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i]\n const { type: fieldType, label: fieldLabel, relationTo } = fieldSchemaPaths[path]\n const entry = await payload.find({\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n pagination: false,\n where: {\n 'field-type': {\n equals: fieldType,\n },\n 'schema-path': {\n equals: path,\n },\n },\n })\n\n if (!entry?.docs?.length) {\n const seedPrompts = pluginConfig.seedPrompts || defaultSeedPrompts\n const { prompt, system } = seedPrompts({\n fieldLabel,\n fieldSchemaPaths,\n fieldType,\n path,\n })\n\n let generatedPrompt = '{{ title }}'\n if (pluginConfig.generatePromptOnInit) {\n // find the model that has the generateText function\n const models = getGenerationModels(pluginConfig)\n const model =\n models && Array.isArray(models) ? models.find((model) => model.generateText) : undefined\n generatedPrompt = await systemGenerate(\n {\n prompt,\n system,\n },\n model?.generateText,\n )\n payload.logger.info(\n `\\nPrompt generated for \"${fieldLabel}\" field:\\nprompt: ${generatedPrompt}\\n\\n`,\n )\n }\n\n const modelsForId = getGenerationModels(pluginConfig)\n const modelForId =\n modelsForId && Array.isArray(modelsForId)\n ? modelsForId.find((a) => a.fields.includes(fieldType))\n : undefined\n\n const instructions = await payload\n .create({\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n data: {\n 'field-type': fieldType,\n 'model-id': modelForId?.id,\n prompt: generatedPrompt,\n 'relation-to': relationTo,\n 'schema-path': path,\n },\n })\n .then((a) => a)\n .catch((err) => {\n payload.logger.error(err, '— AI Plugin: Error creating Compose settings-')\n })\n\n if (instructions?.id) {\n fieldInstructionsMap[path] = {\n id: instructions.id,\n fieldType,\n }\n }\n } else {\n const [instructions] = entry.docs\n fieldInstructionsMap[path] = {\n id: instructions.id,\n fieldType,\n }\n }\n }\n\n if (pluginConfig.debugging) {\n payload.logger.info(\n `— AI Plugin: Enabled fields map: ${JSON.stringify(fieldInstructionsMap, null, 2)}`,\n )\n payload.logger.info(`— AI Plugin: Initialized!`)\n }\n\n if (pluginConfig.generatePromptOnInit) {\n payload.logger.info(\n '\\n\\n-AI Plugin: Example prompts are added to get you started, Now go break some code 🚀🚀🚀\\n\\n',\n )\n }\n}\n"],"names":["defaultSeedPrompts","systemGenerate","PLUGIN_INSTRUCTIONS_TABLE","getGenerationModels","init","payload","fieldSchemaPaths","pluginConfig","debugging","logger","info","paths","Object","keys","fieldInstructionsMap","i","length","path","type","fieldType","label","fieldLabel","relationTo","entry","find","collection","pagination","where","equals","docs","seedPrompts","prompt","system","generatedPrompt","generatePromptOnInit","models","model","Array","isArray","generateText","undefined","modelsForId","modelForId","a","fields","includes","instructions","create","data","id","then","catch","err","error","JSON","stringify"],"mappings":"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"}
@@ -1,2 +1 @@
1
1
  export declare const asyncHandlebars: any;
2
- //# sourceMappingURL=asyncHandlebars.d.ts.map
@@ -1,2 +1 @@
1
- export declare const registerEditorHelper: (payload: any, schemaPath: any) => void;
2
- //# sourceMappingURL=helpers.d.ts.map
1
+ export declare const registerEditorHelper: (payload: any, schemaPath: string) => void;
@@ -14,7 +14,12 @@ export const registerEditorHelper = (payload, schemaPath)=>{
14
14
  const path = `${collectionSlug}.${id}`;
15
15
  fieldInfo = getFieldInfo(payload.collections, path);
16
16
  }
17
- const html = await lexicalToHTML(content, fieldInfo.editor?.editorConfig);
17
+ let html = '';
18
+ if (fieldInfo && 'editor' in fieldInfo && fieldInfo.editor && typeof fieldInfo.editor === 'object' && 'editorConfig' in fieldInfo.editor && fieldInfo.editor.editorConfig) {
19
+ if (fieldInfo.editor.editorConfig && typeof fieldInfo.editor.editorConfig === 'object' && 'features' in fieldInfo.editor.editorConfig && 'lexical' in fieldInfo.editor.editorConfig && 'resolvedFeatureMap' in fieldInfo.editor.editorConfig) {
20
+ html = await lexicalToHTML(content, fieldInfo.editor.editorConfig);
21
+ }
22
+ }
18
23
  return new asyncHandlebars.SafeString(html);
19
24
  });
20
25
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/libraries/handlebars/helpers.ts"],"sourcesContent":["import type { SerializedEditorState } from 'lexical'\n\nimport { getFieldInfo } from '../../utilities/getFieldInfo.js'\nimport { lexicalToHTML } from '../../utilities/lexicalToHTML.js'\nimport { asyncHandlebars } from './asyncHandlebars.js'\nimport { handlebarsHelpersMap } from './helpersMap.js'\n\nexport const registerEditorHelper = (payload, schemaPath) => {\n //TODO: add autocomplete ability using handlebars template on PromptEditorField and include custom helpers in dropdown\n\n let fieldInfo = getFieldInfo(payload.collections, schemaPath)\n const schemaPathChunks = schemaPath.split('.')\n\n asyncHandlebars.registerHelper(\n handlebarsHelpersMap.toHTML.name,\n async function (content: SerializedEditorState, options) {\n const collectionSlug = schemaPathChunks[0]\n const { ids } = options\n for (const id of ids) {\n //TODO: Find a better way to get schemaPath of defined field in prompt editor\n const path = `${collectionSlug}.${id}`\n fieldInfo = getFieldInfo(payload.collections, path)\n }\n\n const html = await lexicalToHTML(content, fieldInfo.editor?.editorConfig)\n return new asyncHandlebars.SafeString(html)\n },\n )\n}\n"],"names":["getFieldInfo","lexicalToHTML","asyncHandlebars","handlebarsHelpersMap","registerEditorHelper","payload","schemaPath","fieldInfo","collections","schemaPathChunks","split","registerHelper","toHTML","name","content","options","collectionSlug","ids","id","path","html","editor","editorConfig","SafeString"],"mappings":"AAEA,SAASA,YAAY,QAAQ,kCAAiC;AAC9D,SAASC,aAAa,QAAQ,mCAAkC;AAChE,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,oBAAoB,QAAQ,kBAAiB;AAEtD,OAAO,MAAMC,uBAAuB,CAACC,SAASC;IAC5C,sHAAsH;IAEtH,IAAIC,YAAYP,aAAaK,QAAQG,WAAW,EAAEF;IAClD,MAAMG,mBAAmBH,WAAWI,KAAK,CAAC;IAE1CR,gBAAgBS,cAAc,CAC5BR,qBAAqBS,MAAM,CAACC,IAAI,EAChC,eAAgBC,OAA8B,EAAEC,OAAO;QACrD,MAAMC,iBAAiBP,gBAAgB,CAAC,EAAE;QAC1C,MAAM,EAAEQ,GAAG,EAAE,GAAGF;QAChB,KAAK,MAAMG,MAAMD,IAAK;YACpB,6EAA6E;YAC7E,MAAME,OAAO,GAAGH,eAAe,CAAC,EAAEE,IAAI;YACtCX,YAAYP,aAAaK,QAAQG,WAAW,EAAEW;QAChD;QAEA,MAAMC,OAAO,MAAMnB,cAAca,SAASP,UAAUc,MAAM,EAAEC;QAC5D,OAAO,IAAIpB,gBAAgBqB,UAAU,CAACH;IACxC;AAEJ,EAAC"}
1
+ {"version":3,"sources":["../../../src/libraries/handlebars/helpers.ts"],"sourcesContent":["import type { SerializedEditorState } from 'lexical'\n\nimport { getFieldInfo } from '../../utilities/getFieldInfo.js'\nimport { lexicalToHTML } from '../../utilities/lexicalToHTML.js'\nimport { asyncHandlebars } from './asyncHandlebars.js'\nimport { handlebarsHelpersMap } from './helpersMap.js'\n\nexport const registerEditorHelper = (payload: any, schemaPath: string) => {\n //TODO: add autocomplete ability using handlebars template on PromptEditorField and include custom helpers in dropdown\n\n let fieldInfo = getFieldInfo(payload.collections, schemaPath)\n const schemaPathChunks = schemaPath.split('.')\n\n asyncHandlebars.registerHelper(\n handlebarsHelpersMap.toHTML.name,\n async function (content: SerializedEditorState, options: any) {\n const collectionSlug = schemaPathChunks[0]\n const { ids } = options\n for (const id of ids) {\n //TODO: Find a better way to get schemaPath of defined field in prompt editor\n const path = `${collectionSlug}.${id}`\n fieldInfo = getFieldInfo(payload.collections, path)\n }\n\n let html = ''\n if (\n fieldInfo &&\n 'editor' in fieldInfo &&\n fieldInfo.editor &&\n typeof fieldInfo.editor === 'object' &&\n 'editorConfig' in fieldInfo.editor &&\n fieldInfo.editor.editorConfig\n ) {\n if (\n fieldInfo.editor.editorConfig &&\n typeof fieldInfo.editor.editorConfig === 'object' &&\n 'features' in fieldInfo.editor.editorConfig &&\n 'lexical' in fieldInfo.editor.editorConfig &&\n 'resolvedFeatureMap' in fieldInfo.editor.editorConfig\n ) {\n html = await lexicalToHTML(\n content,\n fieldInfo.editor.editorConfig as any, // as SanitizedServerEditorConfig\n )\n }\n }\n return new asyncHandlebars.SafeString(html)\n },\n )\n}\n"],"names":["getFieldInfo","lexicalToHTML","asyncHandlebars","handlebarsHelpersMap","registerEditorHelper","payload","schemaPath","fieldInfo","collections","schemaPathChunks","split","registerHelper","toHTML","name","content","options","collectionSlug","ids","id","path","html","editor","editorConfig","SafeString"],"mappings":"AAEA,SAASA,YAAY,QAAQ,kCAAiC;AAC9D,SAASC,aAAa,QAAQ,mCAAkC;AAChE,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,oBAAoB,QAAQ,kBAAiB;AAEtD,OAAO,MAAMC,uBAAuB,CAACC,SAAcC;IACjD,sHAAsH;IAEtH,IAAIC,YAAYP,aAAaK,QAAQG,WAAW,EAAEF;IAClD,MAAMG,mBAAmBH,WAAWI,KAAK,CAAC;IAE1CR,gBAAgBS,cAAc,CAC5BR,qBAAqBS,MAAM,CAACC,IAAI,EAChC,eAAgBC,OAA8B,EAAEC,OAAY;QAC1D,MAAMC,iBAAiBP,gBAAgB,CAAC,EAAE;QAC1C,MAAM,EAAEQ,GAAG,EAAE,GAAGF;QAChB,KAAK,MAAMG,MAAMD,IAAK;YACpB,6EAA6E;YAC7E,MAAME,OAAO,GAAGH,eAAe,CAAC,EAAEE,IAAI;YACtCX,YAAYP,aAAaK,QAAQG,WAAW,EAAEW;QAChD;QAEA,IAAIC,OAAO;QACX,IACEb,aACA,YAAYA,aACZA,UAAUc,MAAM,IAChB,OAAOd,UAAUc,MAAM,KAAK,YAC5B,kBAAkBd,UAAUc,MAAM,IAClCd,UAAUc,MAAM,CAACC,YAAY,EAC7B;YACA,IACEf,UAAUc,MAAM,CAACC,YAAY,IAC7B,OAAOf,UAAUc,MAAM,CAACC,YAAY,KAAK,YACzC,cAAcf,UAAUc,MAAM,CAACC,YAAY,IAC3C,aAAaf,UAAUc,MAAM,CAACC,YAAY,IAC1C,wBAAwBf,UAAUc,MAAM,CAACC,YAAY,EACrD;gBACAF,OAAO,MAAMnB,cACXa,SACAP,UAAUc,MAAM,CAACC,YAAY;YAEjC;QACF;QACA,OAAO,IAAIpB,gBAAgBqB,UAAU,CAACH;IACxC;AAEJ,EAAC"}
@@ -9,4 +9,3 @@ type HandlebarsHelpers = {
9
9
  export declare const handlebarsHelpersMap: HandlebarsHelpers;
10
10
  export declare const handlebarsHelpers: string[];
11
11
  export {};
12
- //# sourceMappingURL=helpersMap.d.ts.map
@@ -1,2 +1 @@
1
1
  export declare const replacePlaceholders: (prompt: string, values: object) => Promise<string>;
2
- //# sourceMappingURL=replacePlaceholders.d.ts.map
package/dist/plugin.d.ts CHANGED
@@ -2,4 +2,3 @@ import type { Config } from 'payload';
2
2
  import type { PluginConfig } from './types.js';
3
3
  declare const payloadAiPlugin: (pluginConfig: PluginConfig) => (incomingConfig: Config) => Config;
4
4
  export { payloadAiPlugin };
5
- //# sourceMappingURL=plugin.d.ts.map
package/dist/plugin.js CHANGED
@@ -72,6 +72,9 @@ const payloadAiPlugin = (pluginConfig)=>(incomingConfig)=>{
72
72
  const Instructions = instructionsCollection(pluginConfig);
73
73
  // Inject editor schema to config, so that it can be accessed when /textarea endpoint will hit
74
74
  const lexicalSchema = lexicalJsonSchema(pluginConfig.editorConfig?.nodes);
75
+ Instructions.admin = {
76
+ ...Instructions.admin
77
+ };
75
78
  if (pluginConfig.debugging) {
76
79
  Instructions.admin.hidden = false;
77
80
  }
@@ -91,7 +94,7 @@ const payloadAiPlugin = (pluginConfig)=>(incomingConfig)=>{
91
94
  const globals = [
92
95
  ...incomingConfig.globals ?? []
93
96
  ];
94
- const { collections: collectionSlugs = [], globals: globalsSlugs = [] } = pluginConfig;
97
+ const { collections: collectionSlugs, globals: globalsSlugs } = pluginConfig;
95
98
  const { components: { providers = [] } = {} } = incomingConfig.admin || {};
96
99
  const updatedProviders = [
97
100
  ...providers ?? [],
@@ -124,10 +127,10 @@ const payloadAiPlugin = (pluginConfig)=>(incomingConfig)=>{
124
127
  ...incomingConfig.endpoints ?? [],
125
128
  pluginEndpoints.textarea,
126
129
  pluginEndpoints.upload,
127
- fetchFields(pluginConfig.access, pluginConfig.options)
130
+ fetchFields(pluginConfig)
128
131
  ],
129
132
  globals: globals.map((global)=>{
130
- if (globalsSlugs[global.slug]) {
133
+ if (globalsSlugs && globalsSlugs[global.slug]) {
131
134
  const { schemaPathMap, updatedCollectionConfig } = updateFieldsConfig(global);
132
135
  collectionsFieldPathMap = {
133
136
  ...collectionsFieldPathMap,
@@ -152,8 +155,7 @@ const payloadAiPlugin = (pluginConfig)=>(incomingConfig)=>{
152
155
  return;
153
156
  }
154
157
  await init(payload, collectionsFieldPathMap, pluginConfig).catch((error)=>{
155
- console.error(error);
156
- payload.logger.error(`— AI Plugin: Initialization Error: ${error}`);
158
+ payload.logger.error(error, `— AI Plugin: Initialization Error`);
157
159
  }).finally(()=>{
158
160
  setTimeout(()=>{
159
161
  payload.logger.info(securityMessage);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { CollectionConfig, Config, GlobalConfig } from 'payload'\n\nimport { deepMerge } from 'payload/shared'\n\nimport type { PluginConfig } from './types.js'\n\nimport { defaultGenerationModels } from './ai/models/index.js'\nimport { lexicalJsonSchema } from './ai/schemas/lexicalJsonSchema.js'\nimport { instructionsCollection } from './collections/Instructions.js'\nimport { PLUGIN_NAME } from './defaults.js'\nimport { fetchFields } from './endpoints/fetchFields.js'\nimport { endpoints } from './endpoints/index.js'\nimport { init } from './init.js'\nimport { translations } from './translations/index.js'\nimport { getGenerationModels } from './utilities/getGenerationModels.js'\nimport { isPluginActivated } from './utilities/isPluginActivated.js'\nimport { updateFieldsConfig } from './utilities/updateFieldsConfig.js'\n\nconst defaultPluginConfig: PluginConfig = {\n access: {\n generate: ({ req }) => !!req.user,\n settings: ({ req }) => !!req.user,\n },\n collections: {},\n disableSponsorMessage: false,\n generatePromptOnInit: true,\n generationModels: defaultGenerationModels,\n}\n\nconst sponsorMessage = `\n╔═══════════════════════════════════════════════════════════════╗\n║ THANK YOU FOR USING THE PAYLOAD AI PLUGIN! ║\n║ ║\n║ If this plugin makes your life easier, please ║\n║ consider supporting its development and maintenance: ║\n║ ║\n║ • Buy me a coffee: https://buymeacoffee.com/ashbuilds ║\n║ • Sponsor on GitHub: https://github.com/sponsors/ashbuilds ║\n║ ║\n║ Your support fuels continued improvements, ║\n║ new features, and more caffeinated coding sessions! ☕ ║\n║ ║\n║ Got feedback or need help? Submit an issue here: ║\n║ • https://github.com/ashbuilds/payload-ai/issues/new ║\n║ ║\n║ Thank you again, and happy building! ║\n╚═══════════════════════════════════════════════════════════════╝\n`\n\nconst securityMessage = `\n╔═══════════════════════════════════════════════════════════════╗\n║ SECURITY NOTICE ║\n║ ║\n║ The AI Plugin now requires authentication by default. ║\n║ All AI features are restricted to authenticated users. ║\n║ ║\n║ To customize access control, configure the 'access' option ║\n║ in your plugin settings. See documentation for details. ║\n║ ║\n║ If you need different access patterns, please configure ║\n║ them explicitly in your plugin configuration. ║\n╚═══════════════════════════════════════════════════════════════╝\n`\n\nconst payloadAiPlugin =\n (pluginConfig: PluginConfig) =>\n (incomingConfig: Config): Config => {\n\n pluginConfig = { \n ...defaultPluginConfig, \n ...pluginConfig,\n access: {\n ...defaultPluginConfig.access,\n ...pluginConfig.access,\n }\n }\n \n pluginConfig.generationModels = getGenerationModels(pluginConfig)\n\n const isActivated = isPluginActivated(pluginConfig)\n let updatedConfig: Config = { ...incomingConfig }\n let collectionsFieldPathMap = {}\n\n if (isActivated) {\n const Instructions = instructionsCollection(pluginConfig)\n // Inject editor schema to config, so that it can be accessed when /textarea endpoint will hit\n const lexicalSchema = lexicalJsonSchema(pluginConfig.editorConfig?.nodes)\n\n if (pluginConfig.debugging) {\n Instructions.admin.hidden = false\n }\n\n Instructions.admin.custom = {\n ...(Instructions.admin.custom || {}),\n [PLUGIN_NAME]: {\n editorConfig: {\n // Used in admin client for useObject hook\n schema: lexicalSchema,\n },\n },\n }\n\n const collections = [...(incomingConfig.collections ?? []), Instructions]\n const globals = [...(incomingConfig.globals ?? [])]\n const { collections: collectionSlugs = [], globals: globalsSlugs = [] } = pluginConfig\n\n const { components: { providers = [] } = {} } = incomingConfig.admin || {}\n const updatedProviders = [\n ...(providers ?? []),\n {\n path: '@ai-stack/payloadcms/client#InstructionsProvider',\n },\n ]\n\n incomingConfig.admin = {\n ...(incomingConfig.admin || {}),\n components: {\n ...(incomingConfig.admin?.components ?? {}),\n providers: updatedProviders,\n },\n }\n\n const pluginEndpoints = endpoints(pluginConfig)\n updatedConfig = {\n ...incomingConfig,\n collections: collections.map((collection) => {\n if (collectionSlugs[collection.slug]) {\n const { schemaPathMap, updatedCollectionConfig } = updateFieldsConfig(collection)\n collectionsFieldPathMap = {\n ...collectionsFieldPathMap,\n ...schemaPathMap,\n }\n return updatedCollectionConfig as CollectionConfig\n }\n\n return collection\n }),\n endpoints: [\n ...(incomingConfig.endpoints ?? []),\n pluginEndpoints.textarea,\n pluginEndpoints.upload,\n fetchFields(pluginConfig.access, pluginConfig.options),\n ],\n globals: globals.map((global) => {\n if (globalsSlugs[global.slug]) {\n const { schemaPathMap, updatedCollectionConfig } = updateFieldsConfig(global)\n collectionsFieldPathMap = {\n ...collectionsFieldPathMap,\n ...schemaPathMap,\n }\n return updatedCollectionConfig as GlobalConfig;\n }\n\n return global\n }),\n i18n: {\n ...(incomingConfig.i18n || {}),\n translations: {\n ...deepMerge(translations, incomingConfig.i18n?.translations ?? {}),\n },\n },\n }\n }\n\n updatedConfig.onInit = async (payload) => {\n if (incomingConfig.onInit) await incomingConfig.onInit(payload)\n\n if (!isActivated) {\n payload.logger.warn(`— AI Plugin: Not activated. Please verify your environment keys.`)\n return\n }\n\n await init(payload, collectionsFieldPathMap, pluginConfig)\n .catch((error) => {\n console.error(error)\n payload.logger.error(`— AI Plugin: Initialization Error: ${error}`)\n })\n .finally(() => {\n setTimeout(() => {\n payload.logger.info(securityMessage)\n }, 1000)\n \n if (!pluginConfig.disableSponsorMessage) {\n setTimeout(() => {\n payload.logger.info(sponsorMessage)\n }, 3000)\n }\n })\n }\n\n return updatedConfig\n }\n\nexport { payloadAiPlugin }"],"names":["deepMerge","defaultGenerationModels","lexicalJsonSchema","instructionsCollection","PLUGIN_NAME","fetchFields","endpoints","init","translations","getGenerationModels","isPluginActivated","updateFieldsConfig","defaultPluginConfig","access","generate","req","user","settings","collections","disableSponsorMessage","generatePromptOnInit","generationModels","sponsorMessage","securityMessage","payloadAiPlugin","pluginConfig","incomingConfig","isActivated","updatedConfig","collectionsFieldPathMap","Instructions","lexicalSchema","editorConfig","nodes","debugging","admin","hidden","custom","schema","globals","collectionSlugs","globalsSlugs","components","providers","updatedProviders","path","pluginEndpoints","map","collection","slug","schemaPathMap","updatedCollectionConfig","textarea","upload","options","global","i18n","onInit","payload","logger","warn","catch","error","console","finally","setTimeout","info"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { CollectionConfig, Config, GlobalConfig } from 'payload'\n\nimport { deepMerge } from 'payload/shared'\n\nimport type { PluginConfig } from './types.js'\n\nimport { defaultGenerationModels } from './ai/models/index.js'\nimport { lexicalJsonSchema } from './ai/schemas/lexicalJsonSchema.js'\nimport { instructionsCollection } from './collections/Instructions.js'\nimport { PLUGIN_NAME } from './defaults.js'\nimport { fetchFields } from './endpoints/fetchFields.js'\nimport { endpoints } from './endpoints/index.js'\nimport { init } from './init.js'\nimport { translations } from './translations/index.js'\nimport { getGenerationModels } from './utilities/getGenerationModels.js'\nimport { isPluginActivated } from './utilities/isPluginActivated.js'\nimport { updateFieldsConfig } from './utilities/updateFieldsConfig.js'\n\nconst defaultPluginConfig: PluginConfig = {\n access: {\n generate: ({ req }) => !!req.user,\n settings: ({ req }) => !!req.user,\n },\n collections: {},\n disableSponsorMessage: false,\n generatePromptOnInit: true,\n generationModels: defaultGenerationModels,\n}\n\nconst sponsorMessage = `\n╔═══════════════════════════════════════════════════════════════╗\n║ THANK YOU FOR USING THE PAYLOAD AI PLUGIN! ║\n║ ║\n║ If this plugin makes your life easier, please ║\n║ consider supporting its development and maintenance: ║\n║ ║\n║ • Buy me a coffee: https://buymeacoffee.com/ashbuilds ║\n║ • Sponsor on GitHub: https://github.com/sponsors/ashbuilds ║\n║ ║\n║ Your support fuels continued improvements, ║\n║ new features, and more caffeinated coding sessions! ☕ ║\n║ ║\n║ Got feedback or need help? Submit an issue here: ║\n║ • https://github.com/ashbuilds/payload-ai/issues/new ║\n║ ║\n║ Thank you again, and happy building! ║\n╚═══════════════════════════════════════════════════════════════╝\n`\n\nconst securityMessage = `\n╔═══════════════════════════════════════════════════════════════╗\n║ SECURITY NOTICE ║\n║ ║\n║ The AI Plugin now requires authentication by default. ║\n║ All AI features are restricted to authenticated users. ║\n║ ║\n║ To customize access control, configure the 'access' option ║\n║ in your plugin settings. See documentation for details. ║\n║ ║\n║ If you need different access patterns, please configure ║\n║ them explicitly in your plugin configuration. ║\n╚═══════════════════════════════════════════════════════════════╝\n`\n\nconst payloadAiPlugin =\n (pluginConfig: PluginConfig) =>\n (incomingConfig: Config): Config => {\n pluginConfig = {\n ...defaultPluginConfig,\n ...pluginConfig,\n access: {\n ...defaultPluginConfig.access,\n ...pluginConfig.access,\n },\n }\n\n pluginConfig.generationModels = getGenerationModels(pluginConfig)\n\n const isActivated = isPluginActivated(pluginConfig)\n let updatedConfig: Config = { ...incomingConfig }\n let collectionsFieldPathMap = {}\n\n if (isActivated) {\n const Instructions = instructionsCollection(pluginConfig)\n // Inject editor schema to config, so that it can be accessed when /textarea endpoint will hit\n const lexicalSchema = lexicalJsonSchema(pluginConfig.editorConfig?.nodes)\n\n Instructions.admin = {\n ...Instructions.admin,\n }\n\n if (pluginConfig.debugging) {\n Instructions.admin.hidden = false\n }\n\n Instructions.admin.custom = {\n ...(Instructions.admin.custom || {}),\n [PLUGIN_NAME]: {\n editorConfig: {\n // Used in admin client for useObject hook\n schema: lexicalSchema,\n },\n },\n }\n\n const collections = [...(incomingConfig.collections ?? []), Instructions]\n const globals = [...(incomingConfig.globals ?? [])]\n const { collections: collectionSlugs, globals: globalsSlugs } = pluginConfig\n\n const { components: { providers = [] } = {} } = incomingConfig.admin || {}\n const updatedProviders = [\n ...(providers ?? []),\n {\n path: '@ai-stack/payloadcms/client#InstructionsProvider',\n },\n ]\n\n incomingConfig.admin = {\n ...(incomingConfig.admin || {}),\n components: {\n ...(incomingConfig.admin?.components ?? {}),\n providers: updatedProviders,\n },\n }\n\n const pluginEndpoints = endpoints(pluginConfig)\n updatedConfig = {\n ...incomingConfig,\n collections: collections.map((collection) => {\n if (collectionSlugs[collection.slug]) {\n const { schemaPathMap, updatedCollectionConfig } = updateFieldsConfig(collection)\n collectionsFieldPathMap = {\n ...collectionsFieldPathMap,\n ...schemaPathMap,\n }\n return updatedCollectionConfig as CollectionConfig\n }\n\n return collection\n }),\n endpoints: [\n ...(incomingConfig.endpoints ?? []),\n pluginEndpoints.textarea,\n pluginEndpoints.upload,\n fetchFields(pluginConfig),\n ],\n globals: globals.map((global) => {\n if (globalsSlugs && globalsSlugs[global.slug]) {\n const { schemaPathMap, updatedCollectionConfig } = updateFieldsConfig(global)\n collectionsFieldPathMap = {\n ...collectionsFieldPathMap,\n ...schemaPathMap,\n }\n return updatedCollectionConfig as GlobalConfig\n }\n\n return global\n }),\n i18n: {\n ...(incomingConfig.i18n || {}),\n translations: {\n ...deepMerge(translations, incomingConfig.i18n?.translations ?? {}),\n },\n },\n }\n }\n\n updatedConfig.onInit = async (payload) => {\n if (incomingConfig.onInit) await incomingConfig.onInit(payload)\n\n if (!isActivated) {\n payload.logger.warn(`— AI Plugin: Not activated. Please verify your environment keys.`)\n return\n }\n\n await init(payload, collectionsFieldPathMap, pluginConfig)\n .catch((error) => {\n payload.logger.error(error, `— AI Plugin: Initialization Error`)\n })\n .finally(() => {\n setTimeout(() => {\n payload.logger.info(securityMessage)\n }, 1000)\n\n if (!pluginConfig.disableSponsorMessage) {\n setTimeout(() => {\n payload.logger.info(sponsorMessage)\n }, 3000)\n }\n })\n }\n\n return updatedConfig\n }\n\nexport { payloadAiPlugin }\n"],"names":["deepMerge","defaultGenerationModels","lexicalJsonSchema","instructionsCollection","PLUGIN_NAME","fetchFields","endpoints","init","translations","getGenerationModels","isPluginActivated","updateFieldsConfig","defaultPluginConfig","access","generate","req","user","settings","collections","disableSponsorMessage","generatePromptOnInit","generationModels","sponsorMessage","securityMessage","payloadAiPlugin","pluginConfig","incomingConfig","isActivated","updatedConfig","collectionsFieldPathMap","Instructions","lexicalSchema","editorConfig","nodes","admin","debugging","hidden","custom","schema","globals","collectionSlugs","globalsSlugs","components","providers","updatedProviders","path","pluginEndpoints","map","collection","slug","schemaPathMap","updatedCollectionConfig","textarea","upload","global","i18n","onInit","payload","logger","warn","catch","error","finally","setTimeout","info"],"mappings":"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"}
@@ -11,5 +11,4 @@ export declare const FieldProvider: ({ children, context, }: {
11
11
  schemaPath: unknown;
12
12
  type: unknown;
13
13
  };
14
- }) => import("react/jsx-runtime").JSX.Element;
15
- //# sourceMappingURL=FieldProvider.d.ts.map
14
+ }) => React.JSX.Element;
@@ -1,6 +1,5 @@
1
1
  export declare const useFieldProps: () => {
2
- type: string;
3
- path: string;
4
- schemaPath: string;
2
+ type: string | undefined;
3
+ path: string | undefined;
4
+ schemaPath: string | undefined;
5
5
  };
6
- //# sourceMappingURL=useFieldProps.d.ts.map
@@ -1,14 +1,4 @@
1
- import type { Field } from 'payload';
2
1
  import React from 'react';
3
- export declare const InstructionsContext: React.Context<{
4
- activeCollection?: string;
5
- enabledLanguages?: string[];
6
- field?: Field;
7
- instructions: Record<string, any>;
8
- isConfigAllowed: boolean;
9
- path?: string;
10
- schemaPath?: unknown;
11
- setActiveCollection?: (val: unknown) => void;
2
+ export declare const InstructionsProvider: React.FC<{
3
+ children: React.ReactNode;
12
4
  }>;
13
- export declare const InstructionsProvider: React.FC;
14
- //# sourceMappingURL=InstructionsProvider.d.ts.map
@@ -1,18 +1,12 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { useAuth, useConfig } from '@payloadcms/ui';
4
- import React, { createContext, useEffect, useState } from 'react';
4
+ import React, { useEffect, useState } from 'react';
5
5
  import { PLUGIN_FETCH_FIELDS_ENDPOINT } from '../../defaults.js';
6
- const initialContext = {
7
- field: undefined,
8
- instructions: undefined,
9
- isConfigAllowed: true,
10
- path: '',
11
- schemaPath: ''
12
- };
13
- export const InstructionsContext = /*#__PURE__*/ createContext(initialContext);
6
+ import { InstructionsContext } from './context.js';
14
7
  export const InstructionsProvider = ({ children })=>{
15
8
  const [instructions, setInstructionsState] = useState({});
9
+ const [promptFields, setPromptFields] = useState([]);
16
10
  const [activeCollection, setActiveCollection] = useState('');
17
11
  const [isConfigAllowed, setIsConfigAllowed] = useState(false);
18
12
  const [enabledLanguages, setEnabledLanguages] = useState();
@@ -27,11 +21,14 @@ export const InstructionsProvider = ({ children })=>{
27
21
  setIsConfigAllowed(data?.isConfigAllowed);
28
22
  setEnabledLanguages(data?.enabledLanguages);
29
23
  setInstructionsState(data?.fields);
24
+ setPromptFields(data?.promptFields);
30
25
  });
31
26
  }).catch((err)=>{
32
27
  console.error('InstructionsProvider:', err);
33
28
  });
34
29
  }, [
30
+ api,
31
+ serverURL,
35
32
  user
36
33
  ]);
37
34
  return /*#__PURE__*/ _jsx(InstructionsContext.Provider, {
@@ -40,6 +37,7 @@ export const InstructionsProvider = ({ children })=>{
40
37
  enabledLanguages,
41
38
  instructions,
42
39
  isConfigAllowed,
40
+ promptFields,
43
41
  setActiveCollection
44
42
  },
45
43
  children: children
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/providers/InstructionsProvider/InstructionsProvider.tsx"],"sourcesContent":["'use client'\n\nimport type { Field } from 'payload'\n\nimport { useAuth, useConfig } from '@payloadcms/ui'\nimport React, { createContext, useEffect, useState } from 'react'\n\nimport { PLUGIN_FETCH_FIELDS_ENDPOINT } from '../../defaults.js'\n\nconst initialContext: {\n activeCollection?: string\n enabledLanguages?: string[]\n field?: Field\n instructions: Record<string, any>\n isConfigAllowed: boolean\n path?: string\n schemaPath?: unknown\n setActiveCollection?: (val: unknown) => void\n} = {\n field: undefined,\n instructions: undefined,\n isConfigAllowed: true,\n path: '',\n schemaPath: '',\n}\n\nexport const InstructionsContext = createContext(initialContext)\n\nexport const InstructionsProvider: React.FC = ({ children }: { children: React.ReactNode }) => {\n const [instructions, setInstructionsState] = useState({})\n const [activeCollection, setActiveCollection] = useState('')\n const [isConfigAllowed, setIsConfigAllowed] = useState(false)\n const [enabledLanguages, setEnabledLanguages] = useState<string[]>()\n const { user } = useAuth()\n\n const { config } = useConfig()\n const {\n routes: { api },\n serverURL,\n } = config\n\n // This is here because each field have separate instructions and\n // their ID is needed to edit them for Drawer\n useEffect(() => {\n fetch(`${serverURL}${api}${PLUGIN_FETCH_FIELDS_ENDPOINT}`)\n .then(async (res) => {\n await res.json().then((data) => {\n setIsConfigAllowed(data?.isConfigAllowed)\n setEnabledLanguages(data?.enabledLanguages)\n setInstructionsState(data?.fields)\n })\n })\n .catch((err) => {\n console.error('InstructionsProvider:', err)\n })\n }, [user])\n\n return (\n <InstructionsContext.Provider\n value={{\n activeCollection,\n enabledLanguages,\n instructions,\n isConfigAllowed,\n setActiveCollection,\n }}\n >\n {children}\n </InstructionsContext.Provider>\n )\n}\n"],"names":["useAuth","useConfig","React","createContext","useEffect","useState","PLUGIN_FETCH_FIELDS_ENDPOINT","initialContext","field","undefined","instructions","isConfigAllowed","path","schemaPath","InstructionsContext","InstructionsProvider","children","setInstructionsState","activeCollection","setActiveCollection","setIsConfigAllowed","enabledLanguages","setEnabledLanguages","user","config","routes","api","serverURL","fetch","then","res","json","data","fields","catch","err","console","error","Provider","value"],"mappings":"AAAA;;AAIA,SAASA,OAAO,EAAEC,SAAS,QAAQ,iBAAgB;AACnD,OAAOC,SAASC,aAAa,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAEjE,SAASC,4BAA4B,QAAQ,oBAAmB;AAEhE,MAAMC,iBASF;IACFC,OAAOC;IACPC,cAAcD;IACdE,iBAAiB;IACjBC,MAAM;IACNC,YAAY;AACd;AAEA,OAAO,MAAMC,oCAAsBX,cAAcI,gBAAe;AAEhE,OAAO,MAAMQ,uBAAiC,CAAC,EAAEC,QAAQ,EAAiC;IACxF,MAAM,CAACN,cAAcO,qBAAqB,GAAGZ,SAAS,CAAC;IACvD,MAAM,CAACa,kBAAkBC,oBAAoB,GAAGd,SAAS;IACzD,MAAM,CAACM,iBAAiBS,mBAAmB,GAAGf,SAAS;IACvD,MAAM,CAACgB,kBAAkBC,oBAAoB,GAAGjB;IAChD,MAAM,EAAEkB,IAAI,EAAE,GAAGvB;IAEjB,MAAM,EAAEwB,MAAM,EAAE,GAAGvB;IACnB,MAAM,EACJwB,QAAQ,EAAEC,GAAG,EAAE,EACfC,SAAS,EACV,GAAGH;IAEJ,iEAAiE;IACjE,6CAA6C;IAC7CpB,UAAU;QACRwB,MAAM,GAAGD,YAAYD,MAAMpB,8BAA8B,EACtDuB,IAAI,CAAC,OAAOC;YACX,MAAMA,IAAIC,IAAI,GAAGF,IAAI,CAAC,CAACG;gBACrBZ,mBAAmBY,MAAMrB;gBACzBW,oBAAoBU,MAAMX;gBAC1BJ,qBAAqBe,MAAMC;YAC7B;QACF,GACCC,KAAK,CAAC,CAACC;YACNC,QAAQC,KAAK,CAAC,yBAAyBF;QACzC;IACJ,GAAG;QAACZ;KAAK;IAET,qBACE,KAACT,oBAAoBwB,QAAQ;QAC3BC,OAAO;YACLrB;YACAG;YACAX;YACAC;YACAQ;QACF;kBAECH;;AAGP,EAAC"}
1
+ {"version":3,"sources":["../../../src/providers/InstructionsProvider/InstructionsProvider.tsx"],"sourcesContent":["'use client'\n\n\nimport { useAuth, useConfig } from '@payloadcms/ui'\nimport React, { useEffect, useState } from 'react'\n\nimport type { SerializedPromptField } from '../../types.js'\n\nimport { PLUGIN_FETCH_FIELDS_ENDPOINT } from '../../defaults.js'\nimport { InstructionsContext } from './context.js'\n\n\nexport const InstructionsProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const [instructions, setInstructionsState] = useState({})\n const [promptFields, setPromptFields] = useState<SerializedPromptField[]>([])\n const [activeCollection, setActiveCollection] = useState('')\n const [isConfigAllowed, setIsConfigAllowed] = useState(false)\n const [enabledLanguages, setEnabledLanguages] = useState<string[]>()\n const { user } = useAuth()\n\n const { config } = useConfig()\n const {\n routes: { api },\n serverURL,\n } = config\n\n // This is here because each field have separate instructions and\n // their ID is needed to edit them for Drawer\n useEffect(() => {\n fetch(`${serverURL}${api}${PLUGIN_FETCH_FIELDS_ENDPOINT}`)\n .then(async (res) => {\n await res.json().then((data) => {\n setIsConfigAllowed(data?.isConfigAllowed)\n setEnabledLanguages(data?.enabledLanguages)\n setInstructionsState(data?.fields)\n setPromptFields(data?.promptFields)\n })\n })\n .catch((err) => {\n console.error('InstructionsProvider:', err)\n })\n }, [api, serverURL, user])\n\n return (\n <InstructionsContext.Provider\n value={{\n activeCollection,\n enabledLanguages,\n instructions,\n isConfigAllowed,\n promptFields,\n setActiveCollection,\n }}\n >\n {children}\n </InstructionsContext.Provider>\n )\n}\n"],"names":["useAuth","useConfig","React","useEffect","useState","PLUGIN_FETCH_FIELDS_ENDPOINT","InstructionsContext","InstructionsProvider","children","instructions","setInstructionsState","promptFields","setPromptFields","activeCollection","setActiveCollection","isConfigAllowed","setIsConfigAllowed","enabledLanguages","setEnabledLanguages","user","config","routes","api","serverURL","fetch","then","res","json","data","fields","catch","err","console","error","Provider","value"],"mappings":"AAAA;;AAGA,SAASA,OAAO,EAAEC,SAAS,QAAQ,iBAAgB;AACnD,OAAOC,SAASC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAIlD,SAASC,4BAA4B,QAAQ,oBAAmB;AAChE,SAASC,mBAAmB,QAAQ,eAAc;AAGlD,OAAO,MAAMC,uBAAgE,CAAC,EAAEC,QAAQ,EAAE;IACxF,MAAM,CAACC,cAAcC,qBAAqB,GAAGN,SAAS,CAAC;IACvD,MAAM,CAACO,cAAcC,gBAAgB,GAAGR,SAAkC,EAAE;IAC5E,MAAM,CAACS,kBAAkBC,oBAAoB,GAAGV,SAAS;IACzD,MAAM,CAACW,iBAAiBC,mBAAmB,GAAGZ,SAAS;IACvD,MAAM,CAACa,kBAAkBC,oBAAoB,GAAGd;IAChD,MAAM,EAAEe,IAAI,EAAE,GAAGnB;IAEjB,MAAM,EAAEoB,MAAM,EAAE,GAAGnB;IACnB,MAAM,EACJoB,QAAQ,EAAEC,GAAG,EAAE,EACfC,SAAS,EACV,GAAGH;IAEJ,iEAAiE;IACjE,6CAA6C;IAC7CjB,UAAU;QACRqB,MAAM,GAAGD,YAAYD,MAAMjB,8BAA8B,EACtDoB,IAAI,CAAC,OAAOC;YACX,MAAMA,IAAIC,IAAI,GAAGF,IAAI,CAAC,CAACG;gBACrBZ,mBAAmBY,MAAMb;gBACzBG,oBAAoBU,MAAMX;gBAC1BP,qBAAqBkB,MAAMC;gBAC3BjB,gBAAgBgB,MAAMjB;YACxB;QACF,GACCmB,KAAK,CAAC,CAACC;YACNC,QAAQC,KAAK,CAAC,yBAAyBF;QACzC;IACJ,GAAG;QAACT;QAAKC;QAAWJ;KAAK;IAEzB,qBACE,KAACb,oBAAoB4B,QAAQ;QAC3BC,OAAO;YACLtB;YACAI;YACAR;YACAM;YACAJ;YACAG;QACF;kBAECN;;AAGP,EAAC"}