@ai-stack/payloadcms 3.2.16-beta → 3.2.18-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -0
- package/dist/ai/analyse.d.ts +0 -1
- package/dist/ai/models/anthropic/generateRichText.d.ts +0 -1
- package/dist/ai/models/anthropic/generateRichText.js +7 -8
- package/dist/ai/models/anthropic/generateRichText.js.map +1 -1
- package/dist/ai/models/anthropic/index.d.ts +0 -1
- package/dist/ai/models/anthropic/index.js +57 -13
- package/dist/ai/models/anthropic/index.js.map +1 -1
- package/dist/ai/models/elevenLabs/generateVoice.d.ts +1 -2
- package/dist/ai/models/elevenLabs/index.d.ts +0 -1
- package/dist/ai/models/elevenLabs/index.js +5 -2
- package/dist/ai/models/elevenLabs/index.js.map +1 -1
- package/dist/ai/models/elevenLabs/voices.d.ts +6 -2
- package/dist/ai/models/elevenLabs/voices.js.map +1 -1
- package/dist/ai/models/index.d.ts +0 -1
- package/dist/ai/models/openai/generateImage.d.ts +1 -2
- package/dist/ai/models/openai/generateImage.js +6 -4
- package/dist/ai/models/openai/generateImage.js.map +1 -1
- package/dist/ai/models/openai/generateRichText.d.ts +0 -1
- package/dist/ai/models/openai/generateRichText.js +9 -12
- package/dist/ai/models/openai/generateRichText.js.map +1 -1
- package/dist/ai/models/openai/generateVoice.d.ts +1 -2
- package/dist/ai/models/openai/index.d.ts +0 -1
- package/dist/ai/models/openai/index.js +60 -13
- package/dist/ai/models/openai/index.js.map +1 -1
- package/dist/ai/models/openai/openai.d.ts +0 -1
- package/dist/ai/models/openai/openai.js +1 -2
- package/dist/ai/models/openai/openai.js.map +1 -1
- package/dist/ai/prompts.d.ts +2 -23
- package/dist/ai/prompts.js +2 -2
- package/dist/ai/prompts.js.map +1 -1
- package/dist/ai/schemas/lexicalJsonSchema.d.ts +5 -4
- package/dist/ai/schemas/lexicalJsonSchema.js +3 -1
- package/dist/ai/schemas/lexicalJsonSchema.js.map +1 -1
- package/dist/ai/utils/editImagesWithOpenAI.d.ts +0 -1
- package/dist/ai/utils/filterEditorSchemaByNodes.d.ts +19 -29
- package/dist/ai/utils/filterEditorSchemaByNodes.js +4 -2
- package/dist/ai/utils/filterEditorSchemaByNodes.js.map +1 -1
- package/dist/ai/utils/generateFileNameByPrompt.d.ts +1 -2
- package/dist/ai/utils/generateFileNameByPrompt.js.map +1 -1
- package/dist/ai/utils/isObjectSchema.d.ts +0 -1
- package/dist/ai/utils/systemGenerate.d.ts +0 -1
- package/dist/collections/Instructions.d.ts +0 -1
- package/dist/collections/Instructions.js +2 -2
- package/dist/collections/Instructions.js.map +1 -1
- package/dist/defaults.d.ts +0 -1
- package/dist/endpoints/fetchFields.d.ts +2 -3
- package/dist/endpoints/fetchFields.js +7 -3
- package/dist/endpoints/fetchFields.js.map +1 -1
- package/dist/endpoints/index.d.ts +0 -1
- package/dist/endpoints/index.js +111 -31
- package/dist/endpoints/index.js.map +1 -1
- package/dist/exports/client.d.ts +1 -1
- package/dist/exports/client.js +1 -0
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/fields.d.ts +0 -1
- package/dist/exports/types.d.ts +2 -3
- package/dist/exports/types.js.map +1 -1
- package/dist/fields/ComposeField/ComposeField.d.ts +10 -2
- package/dist/fields/ComposeField/ComposeField.js +13 -5
- package/dist/fields/ComposeField/ComposeField.js.map +1 -1
- package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts +2 -2
- package/dist/fields/LexicalEditor/feature.client.d.ts +2 -3
- package/dist/fields/LexicalEditor/feature.server.d.ts +0 -1
- package/dist/fields/PromptEditorField/PromptEditorField.d.ts +0 -1
- package/dist/fields/PromptEditorField/PromptEditorField.js +1 -1
- package/dist/fields/PromptEditorField/PromptEditorField.js.map +1 -1
- package/dist/fields/PromptEditorField/defaultStyle.d.ts +0 -1
- package/dist/fields/SelectField/SelectField.d.ts +2 -2
- package/dist/fields/SelectField/SelectField.js +15 -4
- package/dist/fields/SelectField/SelectField.js.map +1 -1
- package/dist/index.d.ts +2 -6
- package/dist/index.js +2 -4
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +5 -2
- package/dist/init.js +8 -7
- package/dist/init.js.map +1 -1
- package/dist/libraries/handlebars/asyncHandlebars.d.ts +0 -1
- package/dist/libraries/handlebars/helpers.d.ts +1 -2
- package/dist/libraries/handlebars/helpers.js +6 -1
- package/dist/libraries/handlebars/helpers.js.map +1 -1
- package/dist/libraries/handlebars/helpersMap.d.ts +0 -1
- package/dist/libraries/handlebars/replacePlaceholders.d.ts +0 -1
- package/dist/plugin.d.ts +0 -1
- package/dist/plugin.js +7 -5
- package/dist/plugin.js.map +1 -1
- package/dist/providers/FieldProvider/FieldProvider.d.ts +1 -2
- package/dist/providers/FieldProvider/useFieldProps.d.ts +3 -4
- package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts +2 -12
- package/dist/providers/InstructionsProvider/InstructionsProvider.js +7 -9
- package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
- package/dist/providers/InstructionsProvider/context.d.ts +16 -0
- package/dist/providers/InstructionsProvider/context.js +13 -0
- package/dist/providers/InstructionsProvider/context.js.map +1 -0
- package/dist/providers/InstructionsProvider/useInstructions.d.ts +0 -1
- package/dist/providers/InstructionsProvider/useInstructions.js +29 -15
- package/dist/providers/InstructionsProvider/useInstructions.js.map +1 -1
- package/dist/translations/index.d.ts +0 -1
- package/dist/types/handlebars-async-helpers.d.js +2 -0
- package/dist/types/handlebars-async-helpers.d.js.map +1 -0
- package/dist/types/handlebars-dist-handlebars.d.js +2 -0
- package/dist/types/handlebars-dist-handlebars.d.js.map +1 -0
- package/dist/types/react-mentions.d.js +2 -0
- package/dist/types/react-mentions.d.js.map +1 -0
- package/dist/types.d.ts +45 -1
- package/dist/types.js.map +1 -1
- package/dist/ui/Compose/Compose.d.ts +0 -1
- package/dist/ui/Compose/Compose.js +61 -25
- package/dist/ui/Compose/Compose.js.map +1 -1
- package/dist/ui/Compose/UndoRedoActions.d.ts +2 -2
- package/dist/ui/Compose/hooks/menu/Item.d.ts +3 -2
- package/dist/ui/Compose/hooks/menu/Item.js +2 -2
- package/dist/ui/Compose/hooks/menu/Item.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/TranslateMenu.d.ts +8 -5
- package/dist/ui/Compose/hooks/menu/TranslateMenu.js +1 -1
- package/dist/ui/Compose/hooks/menu/TranslateMenu.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/items.d.ts +8 -9
- package/dist/ui/Compose/hooks/menu/itemsMap.d.ts +0 -1
- package/dist/ui/Compose/hooks/menu/useMenu.d.ts +7 -7
- package/dist/ui/Compose/hooks/menu/useMenu.js +12 -9
- package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -1
- package/dist/ui/Compose/hooks/useGenerate.d.ts +0 -1
- package/dist/ui/Compose/hooks/useGenerate.js +41 -20
- package/dist/ui/Compose/hooks/useGenerate.js.map +1 -1
- package/dist/ui/Compose/hooks/useHistory.d.ts +0 -1
- package/dist/ui/Compose/hooks/useHistory.js +2 -2
- package/dist/ui/Compose/hooks/useHistory.js.map +1 -1
- package/dist/ui/Icons/Icons.d.ts +34 -34
- package/dist/ui/Icons/Icons.js +1 -1
- package/dist/ui/Icons/Icons.js.map +1 -1
- package/dist/ui/Icons/LottieAnimation.d.ts +3 -3
- package/dist/ui/Icons/LottieAnimation.js +1 -0
- package/dist/ui/Icons/LottieAnimation.js.map +1 -1
- package/dist/utilities/editorSchemaValidator.d.ts +1 -2
- package/dist/utilities/editorSchemaValidator.js.map +1 -1
- package/dist/utilities/extractImageData.d.ts +0 -1
- package/dist/utilities/extractPromptAttachments.d.ts +2 -0
- package/dist/utilities/extractPromptAttachments.js +32 -0
- package/dist/utilities/extractPromptAttachments.js.map +1 -0
- package/dist/utilities/getFieldBySchemaPath.d.ts +0 -1
- package/dist/utilities/getFieldBySchemaPath.js +12 -4
- package/dist/utilities/getFieldBySchemaPath.js.map +1 -1
- package/dist/utilities/getFieldInfo.d.ts +1 -2
- package/dist/utilities/getGenerationModels.d.ts +1 -2
- package/dist/utilities/isPluginActivated.d.ts +0 -1
- package/dist/utilities/isPluginActivated.js +1 -1
- package/dist/utilities/isPluginActivated.js.map +1 -1
- package/dist/utilities/lexicalToHTML.d.ts +0 -1
- package/dist/utilities/setSafeLexicalState.d.ts +1 -2
- package/dist/utilities/setSafeLexicalState.js.map +1 -1
- package/dist/utilities/updateFieldsConfig.d.ts +0 -1
- package/dist/utilities/updateFieldsConfig.js +10 -3
- package/dist/utilities/updateFieldsConfig.js.map +1 -1
- package/package.json +104 -65
- package/dist/ai/analyse.d.ts.map +0 -1
- package/dist/ai/models/anthropic/generateRichText.d.ts.map +0 -1
- package/dist/ai/models/anthropic/index.d.ts.map +0 -1
- package/dist/ai/models/elevenLabs/generateVoice.d.ts.map +0 -1
- package/dist/ai/models/elevenLabs/index.d.ts.map +0 -1
- package/dist/ai/models/elevenLabs/voices.d.ts.map +0 -1
- package/dist/ai/models/index.d.ts.map +0 -1
- package/dist/ai/models/openai/generateImage.d.ts.map +0 -1
- package/dist/ai/models/openai/generateRichText.d.ts.map +0 -1
- package/dist/ai/models/openai/generateVoice.d.ts.map +0 -1
- package/dist/ai/models/openai/index.d.ts.map +0 -1
- package/dist/ai/models/openai/openai.d.ts.map +0 -1
- package/dist/ai/prompts.d.ts.map +0 -1
- package/dist/ai/schemas/lexicalJsonSchema.d.ts.map +0 -1
- package/dist/ai/utils/editImagesWithOpenAI.d.ts.map +0 -1
- package/dist/ai/utils/filterEditorSchemaByNodes.d.ts.map +0 -1
- package/dist/ai/utils/generateFileNameByPrompt.d.ts.map +0 -1
- package/dist/ai/utils/isObjectSchema.d.ts.map +0 -1
- package/dist/ai/utils/systemGenerate.d.ts.map +0 -1
- package/dist/collections/Instructions.d.ts.map +0 -1
- package/dist/defaults.d.ts.map +0 -1
- package/dist/endpoints/fetchFields.d.ts.map +0 -1
- package/dist/endpoints/index.d.ts.map +0 -1
- package/dist/exports/client.d.ts.map +0 -1
- package/dist/exports/fields.d.ts.map +0 -1
- package/dist/exports/types.d.ts.map +0 -1
- package/dist/fields/ComposeField/ComposeField.d.ts.map +0 -1
- package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts.map +0 -1
- package/dist/fields/LexicalEditor/feature.client.d.ts.map +0 -1
- package/dist/fields/LexicalEditor/feature.server.d.ts.map +0 -1
- package/dist/fields/PromptEditorField/PromptEditorField.d.ts.map +0 -1
- package/dist/fields/PromptEditorField/defaultStyle.d.ts.map +0 -1
- package/dist/fields/SelectField/SelectField.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/init.d.ts.map +0 -1
- package/dist/libraries/handlebars/asyncHandlebars.d.ts.map +0 -1
- package/dist/libraries/handlebars/helpers.d.ts.map +0 -1
- package/dist/libraries/handlebars/helpersMap.d.ts.map +0 -1
- package/dist/libraries/handlebars/replacePlaceholders.d.ts.map +0 -1
- package/dist/plugin.d.ts.map +0 -1
- package/dist/providers/FieldProvider/FieldProvider.d.ts.map +0 -1
- package/dist/providers/FieldProvider/useFieldProps.d.ts.map +0 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts.map +0 -1
- package/dist/providers/InstructionsProvider/useInstructions.d.ts.map +0 -1
- package/dist/translations/index.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/ui/Compose/Compose.d.ts.map +0 -1
- package/dist/ui/Compose/UndoRedoActions.d.ts.map +0 -1
- package/dist/ui/Compose/hooks/menu/Item.d.ts.map +0 -1
- package/dist/ui/Compose/hooks/menu/TranslateMenu.d.ts.map +0 -1
- package/dist/ui/Compose/hooks/menu/items.d.ts.map +0 -1
- package/dist/ui/Compose/hooks/menu/itemsMap.d.ts.map +0 -1
- package/dist/ui/Compose/hooks/menu/useMenu.d.ts.map +0 -1
- package/dist/ui/Compose/hooks/useGenerate.d.ts.map +0 -1
- package/dist/ui/Compose/hooks/useHistory.d.ts.map +0 -1
- package/dist/ui/Icons/Icons.d.ts.map +0 -1
- package/dist/ui/Icons/LottieAnimation.d.ts.map +0 -1
- package/dist/utilities/editorSchemaValidator.d.ts.map +0 -1
- package/dist/utilities/extractImageData.d.ts.map +0 -1
- package/dist/utilities/getFieldBySchemaPath.d.ts.map +0 -1
- package/dist/utilities/getFieldInfo.d.ts.map +0 -1
- package/dist/utilities/getGenerationModels.d.ts.map +0 -1
- package/dist/utilities/isPluginActivated.d.ts.map +0 -1
- package/dist/utilities/lexicalToHTML.d.ts.map +0 -1
- package/dist/utilities/setSafeLexicalState.d.ts.map +0 -1
- package/dist/utilities/updateFieldsConfig.d.ts.map +0 -1
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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:
|
|
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:
|
|
16
|
+
type: (props?.field).type,
|
|
17
|
+
path: props?.path ?? '',
|
|
18
|
+
schemaPath: finalSchemaPath
|
|
16
19
|
},
|
|
17
20
|
children: /*#__PURE__*/ _jsx(Compose, {
|
|
18
|
-
descriptionProps:
|
|
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:
|
|
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
|
-
|
|
2
|
-
|
|
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 +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:
|
|
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"}
|
|
@@ -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) =>
|
|
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))
|
|
13
|
+
if (!Array.isArray(options)) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
14
16
|
const opts = options.filter((option)=>{
|
|
15
|
-
if (!relatedField || !option.fields)
|
|
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: (
|
|
32
|
-
|
|
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={(
|
|
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
|
-
|
|
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
|
-
|
|
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":["
|
|
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:
|
|
4
|
-
|
|
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 {
|
|
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
|
|
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':
|
|
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-'
|
|
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 {
|
|
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
|
-
export declare const registerEditorHelper: (payload: any, schemaPath:
|
|
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
|
-
|
|
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
|
|
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"}
|
package/dist/plugin.d.ts
CHANGED
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
|
|
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
|
|
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
|
-
|
|
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);
|
package/dist/plugin.js.map
CHANGED
|
@@ -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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"}
|
|
@@ -1,14 +1,4 @@
|
|
|
1
|
-
import type { Field } from 'payload';
|
|
2
1
|
import React from 'react';
|
|
3
|
-
export declare const
|
|
4
|
-
|
|
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, {
|
|
4
|
+
import React, { useEffect, useState } from 'react';
|
|
5
5
|
import { PLUGIN_FETCH_FIELDS_ENDPOINT } from '../../defaults.js';
|
|
6
|
-
|
|
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\
|
|
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"}
|