@ai-stack/payloadcms 3.0.0-beta.104.1 → 3.0.0-beta.65.0

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 (147) hide show
  1. package/README.md +2 -2
  2. package/dist/ai/{schemas → editor}/lexical.schema.d.ts +2 -2
  3. package/dist/ai/editor/lexical.schema.d.ts.map +1 -0
  4. package/dist/ai/editor/lexical.schema.js.map +1 -0
  5. package/dist/ai/models/anthropic/index.d.ts.map +1 -1
  6. package/dist/ai/models/anthropic/index.js +4 -43
  7. package/dist/ai/models/anthropic/index.js.map +1 -1
  8. package/dist/ai/models/elevenLabs/index.d.ts.map +1 -1
  9. package/dist/ai/models/elevenLabs/index.js +11 -1
  10. package/dist/ai/models/elevenLabs/index.js.map +1 -1
  11. package/dist/ai/models/index.d.ts.map +1 -1
  12. package/dist/ai/models/index.js +3 -3
  13. package/dist/ai/models/index.js.map +1 -1
  14. package/dist/ai/models/openai/index.js +3 -3
  15. package/dist/ai/models/openai/index.js.map +1 -1
  16. package/dist/ai/models/style.d.ts +2 -0
  17. package/dist/ai/models/style.d.ts.map +1 -0
  18. package/dist/ai/models/style.js +31 -0
  19. package/dist/ai/models/style.js.map +1 -0
  20. package/dist/ai/prompts.d.ts +6 -7
  21. package/dist/ai/prompts.d.ts.map +1 -1
  22. package/dist/ai/prompts.js +16 -21
  23. package/dist/ai/prompts.js.map +1 -1
  24. package/dist/ai/utils/generateSeedPrompt.d.ts.map +1 -1
  25. package/dist/ai/utils/generateSeedPrompt.js +5 -14
  26. package/dist/ai/utils/generateSeedPrompt.js.map +1 -1
  27. package/dist/collections/Instructions.d.ts.map +1 -1
  28. package/dist/collections/Instructions.js +13 -10
  29. package/dist/collections/Instructions.js.map +1 -1
  30. package/dist/defaults.d.ts +2 -3
  31. package/dist/defaults.d.ts.map +1 -1
  32. package/dist/defaults.js +2 -3
  33. package/dist/defaults.js.map +1 -1
  34. package/dist/endpoints/index.d.ts +1 -1
  35. package/dist/endpoints/index.d.ts.map +1 -1
  36. package/dist/endpoints/index.js +51 -17
  37. package/dist/endpoints/index.js.map +1 -1
  38. package/dist/exports/fields.d.ts +1 -3
  39. package/dist/exports/fields.d.ts.map +1 -1
  40. package/dist/exports/fields.js +0 -3
  41. package/dist/exports/fields.js.map +1 -1
  42. package/dist/fields/DescriptionField/DescriptionField.d.ts +2 -3
  43. package/dist/fields/DescriptionField/DescriptionField.d.ts.map +1 -1
  44. package/dist/fields/DescriptionField/DescriptionField.js +11 -14
  45. package/dist/fields/DescriptionField/DescriptionField.js.map +1 -1
  46. package/dist/fields/DescriptionField/DescriptionFieldComponent.d.ts +4 -0
  47. package/dist/fields/DescriptionField/DescriptionFieldComponent.d.ts.map +1 -0
  48. package/dist/fields/DescriptionField/DescriptionFieldComponent.js +18 -0
  49. package/dist/fields/DescriptionField/DescriptionFieldComponent.js.map +1 -0
  50. package/dist/fields/LexicalEditor/ActionsFeatureComponent.js +1 -1
  51. package/dist/fields/LexicalEditor/ActionsFeatureComponent.js.map +1 -1
  52. package/dist/fields/LexicalEditor/feature.server.d.ts +7 -1
  53. package/dist/fields/LexicalEditor/feature.server.d.ts.map +1 -1
  54. package/dist/fields/LexicalEditor/feature.server.js +11 -4
  55. package/dist/fields/LexicalEditor/feature.server.js.map +1 -1
  56. package/dist/fields/PromptEditorField/PromptEditorField.d.ts +1 -1
  57. package/dist/fields/PromptEditorField/PromptEditorField.d.ts.map +1 -1
  58. package/dist/fields/PromptEditorField/PromptEditorField.js +51 -32
  59. package/dist/fields/PromptEditorField/PromptEditorField.js.map +1 -1
  60. package/dist/fields/SelectField/SelectField.d.ts +2 -9
  61. package/dist/fields/SelectField/SelectField.d.ts.map +1 -1
  62. package/dist/fields/SelectField/SelectField.js +23 -26
  63. package/dist/fields/SelectField/SelectField.js.map +1 -1
  64. package/dist/index.d.ts +2 -2
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +3 -3
  67. package/dist/index.js.map +1 -1
  68. package/dist/init.d.ts +1 -2
  69. package/dist/init.d.ts.map +1 -1
  70. package/dist/init.js +19 -35
  71. package/dist/init.js.map +1 -1
  72. package/dist/plugin.d.ts.map +1 -1
  73. package/dist/plugin.js +73 -96
  74. package/dist/plugin.js.map +1 -1
  75. package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts +3 -1
  76. package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts.map +1 -1
  77. package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
  78. package/dist/providers/InstructionsProvider/hook.d.ts +9 -0
  79. package/dist/providers/InstructionsProvider/hook.d.ts.map +1 -0
  80. package/dist/providers/InstructionsProvider/hook.js +17 -0
  81. package/dist/providers/InstructionsProvider/hook.js.map +1 -0
  82. package/dist/providers/InstructionsProvider/index.d.ts +5 -0
  83. package/dist/providers/InstructionsProvider/index.d.ts.map +1 -0
  84. package/dist/providers/InstructionsProvider/index.js +10 -0
  85. package/dist/providers/InstructionsProvider/index.js.map +1 -0
  86. package/dist/types.d.ts +1 -2
  87. package/dist/types.d.ts.map +1 -1
  88. package/dist/types.js.map +1 -1
  89. package/dist/ui/Actions/Actions.d.ts.map +1 -1
  90. package/dist/ui/Actions/Actions.js +48 -40
  91. package/dist/ui/Actions/Actions.js.map +1 -1
  92. package/dist/ui/Actions/hooks/highlight.module.scss +3 -0
  93. package/dist/ui/Actions/hooks/useGenerate.d.ts.map +1 -1
  94. package/dist/ui/Actions/hooks/useGenerate.js +10 -9
  95. package/dist/ui/Actions/hooks/useGenerate.js.map +1 -1
  96. package/dist/ui/Floatype/Floatype.d.ts +21 -0
  97. package/dist/ui/Floatype/Floatype.d.ts.map +1 -0
  98. package/dist/ui/Floatype/Floatype.js +245 -0
  99. package/dist/ui/Floatype/Floatype.js.map +1 -0
  100. package/dist/ui/Floatype/floatype.module.css +25 -0
  101. package/dist/utilities/getFieldBySchemaPath.d.ts +2 -2
  102. package/dist/utilities/getFieldBySchemaPath.d.ts.map +1 -1
  103. package/dist/utilities/getFieldBySchemaPath.js.map +1 -1
  104. package/dist/utilities/updateFieldsConfig.d.ts.map +1 -1
  105. package/dist/utilities/updateFieldsConfig.js +8 -18
  106. package/dist/utilities/updateFieldsConfig.js.map +1 -1
  107. package/package.json +33 -79
  108. package/dist/ai/schemas/lexical.schema.d.ts.map +0 -1
  109. package/dist/ai/schemas/lexical.schema.js.map +0 -1
  110. package/dist/exports/client.d.ts +0 -3
  111. package/dist/exports/client.d.ts.map +0 -1
  112. package/dist/exports/client.js +0 -4
  113. package/dist/exports/client.js.map +0 -1
  114. package/dist/libraries/autocomplete/AutocompleteTextArea.d.ts +0 -8
  115. package/dist/libraries/autocomplete/AutocompleteTextArea.d.ts.map +0 -1
  116. package/dist/libraries/autocomplete/AutocompleteTextArea.js +0 -437
  117. package/dist/libraries/autocomplete/AutocompleteTextArea.js.map +0 -1
  118. package/dist/libraries/autocomplete/AutocompleteTextArea.module.scss +0 -35
  119. package/dist/libraries/handlebars/asyncHandlebars.d.ts +0 -2
  120. package/dist/libraries/handlebars/asyncHandlebars.d.ts.map +0 -1
  121. package/dist/libraries/handlebars/asyncHandlebars.js +0 -5
  122. package/dist/libraries/handlebars/asyncHandlebars.js.map +0 -1
  123. package/dist/libraries/handlebars/helpers.d.ts +0 -2
  124. package/dist/libraries/handlebars/helpers.d.ts.map +0 -1
  125. package/dist/libraries/handlebars/helpers.js +0 -22
  126. package/dist/libraries/handlebars/helpers.js.map +0 -1
  127. package/dist/libraries/handlebars/helpersMap.d.ts +0 -12
  128. package/dist/libraries/handlebars/helpersMap.d.ts.map +0 -1
  129. package/dist/libraries/handlebars/helpersMap.js +0 -13
  130. package/dist/libraries/handlebars/helpersMap.js.map +0 -1
  131. package/dist/libraries/handlebars/replacePlaceholders.d.ts +0 -2
  132. package/dist/libraries/handlebars/replacePlaceholders.d.ts.map +0 -1
  133. package/dist/libraries/handlebars/replacePlaceholders.js +0 -8
  134. package/dist/libraries/handlebars/replacePlaceholders.js.map +0 -1
  135. package/dist/providers/InstructionsProvider/useInstructions.d.ts +0 -4
  136. package/dist/providers/InstructionsProvider/useInstructions.d.ts.map +0 -1
  137. package/dist/providers/InstructionsProvider/useInstructions.js +0 -38
  138. package/dist/providers/InstructionsProvider/useInstructions.js.map +0 -1
  139. package/dist/utilities/getFieldInfo.d.ts +0 -3
  140. package/dist/utilities/getFieldInfo.d.ts.map +0 -1
  141. package/dist/utilities/getFieldInfo.js +0 -14
  142. package/dist/utilities/getFieldInfo.js.map +0 -1
  143. package/dist/utilities/isPluginActivated.d.ts +0 -2
  144. package/dist/utilities/isPluginActivated.d.ts.map +0 -1
  145. package/dist/utilities/isPluginActivated.js +0 -5
  146. package/dist/utilities/isPluginActivated.js.map +0 -1
  147. /package/dist/ai/{schemas → editor}/lexical.schema.js +0 -0
@@ -1,40 +1,59 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { FieldLabel, useField, useFieldProps } from '@payloadcms/ui';
4
- import React from 'react';
5
- import { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js';
6
- import { AutocompleteTextField } from '../../libraries/autocomplete/AutocompleteTextArea.js';
7
- //NOTE: HMR does not work for plugin components anymore, I think it has to do with importMap/ string path
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { TextareaField as InputField, useField, useFieldProps, useForm } from '@payloadcms/ui';
4
+ import React, { useCallback, useEffect, useRef } from 'react';
5
+ import { useInstructions } from '../../providers/InstructionsProvider/hook.js';
6
+ import { Floatype } from '../../ui/Floatype/Floatype.js';
7
+ //TODO: Display the handlebarjs tips in description
8
8
  export const PromptEditorField = (props)=>{
9
- const { field } = props;
9
+ const { name, path: pathFromProps, ...restProps } = props;
10
10
  const { path: pathFromContext } = useFieldProps();
11
- const { setValue, value } = useField({
12
- path: pathFromContext
11
+ const elementRef = useRef(null);
12
+ const { fields } = useInstructions({
13
+ path: pathFromProps
13
14
  });
14
- const { promptEditorSuggestions } = useInstructions({
15
- path: pathFromContext
15
+ const { path, setValue } = useField({
16
+ path: pathFromContext || pathFromProps || name
16
17
  });
17
- return /*#__PURE__*/ _jsxs("div", {
18
- className: "field-type textarea",
19
- children: [
20
- /*#__PURE__*/ _jsx(FieldLabel, {
21
- field: field,
22
- label: field.label
23
- }),
24
- /*#__PURE__*/ _jsx(AutocompleteTextField, {
25
- changeOnSelect: (trigger, selected)=>{
26
- return trigger + selected + ' }}';
27
- },
28
- onChange: (val)=>{
29
- setValue(val);
30
- },
31
- options: promptEditorSuggestions,
32
- trigger: [
33
- '{{ '
34
- ],
35
- value: value
36
- })
37
- ]
18
+ const { formRef, initializing } = useForm();
19
+ useEffect(()=>{
20
+ if (!formRef.current || elementRef.current) return;
21
+ const fieldId = `#field-${path.replace(/\./g, '__')}`;
22
+ elementRef.current = formRef.current.querySelector(fieldId);
23
+ }, [
24
+ formRef,
25
+ path
26
+ ]);
27
+ const handleQuery = useCallback((val)=>{
28
+ if (val === '{{ ') return fields;
29
+ return fields.filter((field)=>field.toLowerCase().includes(val.toLowerCase()));
30
+ }, [
31
+ fields
32
+ ]);
33
+ const handleSelect = useCallback((value, query)=>{
34
+ if (query === '{{ ') return `${value} }}`;
35
+ return fields.includes(value) ? value : undefined;
36
+ }, [
37
+ fields
38
+ ]);
39
+ const handleUpdate = useCallback((value)=>{
40
+ if (value) setValue(value);
41
+ }, [
42
+ setValue
43
+ ]);
44
+ const CustomDescription = !initializing ? /*#__PURE__*/ _jsx(Floatype, {
45
+ options: {
46
+ onQuery: handleQuery,
47
+ onSelect: handleSelect,
48
+ onUpdate: handleUpdate
49
+ },
50
+ ref: elementRef
51
+ }) : null;
52
+ return /*#__PURE__*/ _jsx(InputField, {
53
+ ...restProps,
54
+ CustomDescription: CustomDescription,
55
+ name: name,
56
+ path: pathFromProps
38
57
  });
39
58
  };
40
59
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/PromptEditorField/PromptEditorField.tsx"],"sourcesContent":["'use client'\n\nimport type { TextareaFieldProps } from 'payload'\n\nimport { FieldLabel, useField, useFieldProps } from '@payloadcms/ui'\nimport React from 'react'\n\nimport { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js'\nimport { AutocompleteTextField } from '../../libraries/autocomplete/AutocompleteTextArea.js'\n\n//NOTE: HMR does not work for plugin components anymore, I think it has to do with importMap/ string path\nexport const PromptEditorField: React.FC<TextareaFieldProps> = (props) => {\n const { field } = props\n const { path: pathFromContext } = useFieldProps()\n\n const { setValue, value } = useField<string>({\n path: pathFromContext,\n })\n\n const { promptEditorSuggestions } = useInstructions({\n path: pathFromContext,\n })\n\n return (\n <div className=\"field-type textarea\">\n <FieldLabel field={field} label={field.label} />\n <AutocompleteTextField\n changeOnSelect={(trigger, selected) => {\n return trigger + selected + ' }}'\n }}\n onChange={(val: string) => {\n setValue(val)\n }}\n options={promptEditorSuggestions}\n trigger={['{{ ']}\n value={value}\n />\n </div>\n )\n}\n"],"names":["FieldLabel","useField","useFieldProps","React","useInstructions","AutocompleteTextField","PromptEditorField","props","field","path","pathFromContext","setValue","value","promptEditorSuggestions","div","className","label","changeOnSelect","trigger","selected","onChange","val","options"],"mappings":"AAAA;;AAIA,SAASA,UAAU,EAAEC,QAAQ,EAAEC,aAAa,QAAQ,iBAAgB;AACpE,OAAOC,WAAW,QAAO;AAEzB,SAASC,eAAe,QAAQ,0DAAyD;AACzF,SAASC,qBAAqB,QAAQ,uDAAsD;AAE5F,yGAAyG;AACzG,OAAO,MAAMC,oBAAkD,CAACC;IAC9D,MAAM,EAAEC,KAAK,EAAE,GAAGD;IAClB,MAAM,EAAEE,MAAMC,eAAe,EAAE,GAAGR;IAElC,MAAM,EAAES,QAAQ,EAAEC,KAAK,EAAE,GAAGX,SAAiB;QAC3CQ,MAAMC;IACR;IAEA,MAAM,EAAEG,uBAAuB,EAAE,GAAGT,gBAAgB;QAClDK,MAAMC;IACR;IAEA,qBACE,MAACI;QAAIC,WAAU;;0BACb,KAACf;gBAAWQ,OAAOA;gBAAOQ,OAAOR,MAAMQ,KAAK;;0BAC5C,KAACX;gBACCY,gBAAgB,CAACC,SAASC;oBACxB,OAAOD,UAAUC,WAAW;gBAC9B;gBACAC,UAAU,CAACC;oBACTV,SAASU;gBACX;gBACAC,SAAST;gBACTK,SAAS;oBAAC;iBAAM;gBAChBN,OAAOA;;;;AAIf,EAAC"}
1
+ {"version":3,"sources":["../../../src/fields/PromptEditorField/PromptEditorField.tsx"],"sourcesContent":["'use client'\n\nimport type { TextareaFieldProps } from '@payloadcms/ui'\n\nimport { TextareaField as InputField, useField, useFieldProps, useForm } from '@payloadcms/ui'\nimport React, { useCallback, useEffect, useRef } from 'react'\n\nimport { useInstructions } from '../../providers/InstructionsProvider/hook.js'\nimport { Floatype } from '../../ui/Floatype/Floatype.js'\n\n//TODO: Display the handlebarjs tips in description\nexport const PromptEditorField: React.FC<TextareaFieldProps> = (props) => {\n const { name, path: pathFromProps, ...restProps } = props\n const { path: pathFromContext } = useFieldProps()\n\n const elementRef = useRef<HTMLTextAreaElement>(null)\n const { fields } = useInstructions({\n path: pathFromProps,\n })\n\n const { path, setValue } = useField<string>({\n path: pathFromContext || pathFromProps || name,\n })\n\n const { formRef, initializing } = useForm()\n\n useEffect(() => {\n if (!formRef.current || elementRef.current) return\n\n const fieldId = `#field-${path.replace(/\\./g, '__')}`\n elementRef.current = formRef.current.querySelector(fieldId)\n }, [formRef, path])\n\n const handleQuery = useCallback(\n (val: string) => {\n if (val === '{{ ') return fields\n return fields.filter((field) => field.toLowerCase().includes(val.toLowerCase()))\n },\n [fields],\n )\n\n const handleSelect = useCallback(\n (value: string, query: string) => {\n if (query === '{{ ') return `${value} }}`\n return fields.includes(value) ? value : undefined\n },\n [fields],\n )\n\n const handleUpdate = useCallback(\n (value: string) => {\n if (value) setValue(value)\n },\n [setValue],\n )\n\n const CustomDescription = !initializing ? (\n <Floatype\n options={{\n onQuery: handleQuery,\n onSelect: handleSelect,\n onUpdate: handleUpdate,\n }}\n ref={elementRef}\n />\n ) : null\n\n return (\n <InputField\n {...restProps}\n CustomDescription={CustomDescription}\n name={name}\n path={pathFromProps}\n />\n )\n}\n"],"names":["TextareaField","InputField","useField","useFieldProps","useForm","React","useCallback","useEffect","useRef","useInstructions","Floatype","PromptEditorField","props","name","path","pathFromProps","restProps","pathFromContext","elementRef","fields","setValue","formRef","initializing","current","fieldId","replace","querySelector","handleQuery","val","filter","field","toLowerCase","includes","handleSelect","value","query","undefined","handleUpdate","CustomDescription","options","onQuery","onSelect","onUpdate","ref"],"mappings":"AAAA;;AAIA,SAASA,iBAAiBC,UAAU,EAAEC,QAAQ,EAAEC,aAAa,EAAEC,OAAO,QAAQ,iBAAgB;AAC9F,OAAOC,SAASC,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ,QAAO;AAE7D,SAASC,eAAe,QAAQ,+CAA8C;AAC9E,SAASC,QAAQ,QAAQ,gCAA+B;AAExD,mDAAmD;AACnD,OAAO,MAAMC,oBAAkD,CAACC;IAC9D,MAAM,EAAEC,IAAI,EAAEC,MAAMC,aAAa,EAAE,GAAGC,WAAW,GAAGJ;IACpD,MAAM,EAAEE,MAAMG,eAAe,EAAE,GAAGd;IAElC,MAAMe,aAAaV,OAA4B;IAC/C,MAAM,EAAEW,MAAM,EAAE,GAAGV,gBAAgB;QACjCK,MAAMC;IACR;IAEA,MAAM,EAAED,IAAI,EAAEM,QAAQ,EAAE,GAAGlB,SAAiB;QAC1CY,MAAMG,mBAAmBF,iBAAiBF;IAC5C;IAEA,MAAM,EAAEQ,OAAO,EAAEC,YAAY,EAAE,GAAGlB;IAElCG,UAAU;QACR,IAAI,CAACc,QAAQE,OAAO,IAAIL,WAAWK,OAAO,EAAE;QAE5C,MAAMC,UAAU,CAAC,OAAO,EAAEV,KAAKW,OAAO,CAAC,OAAO,MAAM,CAAC;QACrDP,WAAWK,OAAO,GAAGF,QAAQE,OAAO,CAACG,aAAa,CAACF;IACrD,GAAG;QAACH;QAASP;KAAK;IAElB,MAAMa,cAAcrB,YAClB,CAACsB;QACC,IAAIA,QAAQ,OAAO,OAAOT;QAC1B,OAAOA,OAAOU,MAAM,CAAC,CAACC,QAAUA,MAAMC,WAAW,GAAGC,QAAQ,CAACJ,IAAIG,WAAW;IAC9E,GACA;QAACZ;KAAO;IAGV,MAAMc,eAAe3B,YACnB,CAAC4B,OAAeC;QACd,IAAIA,UAAU,OAAO,OAAO,CAAC,EAAED,MAAM,GAAG,CAAC;QACzC,OAAOf,OAAOa,QAAQ,CAACE,SAASA,QAAQE;IAC1C,GACA;QAACjB;KAAO;IAGV,MAAMkB,eAAe/B,YACnB,CAAC4B;QACC,IAAIA,OAAOd,SAASc;IACtB,GACA;QAACd;KAAS;IAGZ,MAAMkB,oBAAoB,CAAChB,6BACzB,KAACZ;QACC6B,SAAS;YACPC,SAASb;YACTc,UAAUR;YACVS,UAAUL;QACZ;QACAM,KAAKzB;SAEL;IAEJ,qBACE,KAACjB;QACE,GAAGe,SAAS;QACbsB,mBAAmBA;QACnBzB,MAAMA;QACNC,MAAMC;;AAGZ,EAAC"}
@@ -1,10 +1,3 @@
1
- import type { SelectFieldProps } from 'payload';
2
- export declare const SelectField: (props: {
3
- filterByField: string;
4
- options: {
5
- fields: string[];
6
- label: string;
7
- value: string;
8
- }[];
9
- } & SelectFieldProps) => import("react/jsx-runtime").JSX.Element;
1
+ import type { SelectFieldProps } from '@payloadcms/ui';
2
+ export declare const SelectField: (props: SelectFieldProps) => import("react/jsx-runtime").JSX.Element;
10
3
  //# sourceMappingURL=SelectField.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectField.d.ts","sourceRoot":"","sources":["../../../src/fields/SelectField/SelectField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAgB,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAM7D,eAAO,MAAM,WAAW,UACf;IACL,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAC9D,GAAG,gBAAgB,4CAqCrB,CAAA"}
1
+ {"version":3,"file":"SelectField.d.ts","sourceRoot":"","sources":["../../../src/fields/SelectField/SelectField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAMtD,eAAO,MAAM,WAAW,UAAW,gBAAgB,4CA6BlD,CAAA"}
@@ -1,40 +1,37 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { SelectInput, useField, useFieldProps } from '@payloadcms/ui';
3
+ import { SelectField as Select, useField, useFieldProps } from '@payloadcms/ui';
4
4
  import React, { useEffect, useState } from 'react';
5
- // Use to filter model options in settings based on field types
6
5
  export const SelectField = (props)=>{
7
- const { field, filterByField, options } = props;
8
- const { path } = useFieldProps();
9
- const { value: relatedField } = useField({
6
+ const fieldProps = useFieldProps();
7
+ const { custom: selectOptions, path } = fieldProps;
8
+ const { options: optionsFromProps = [] } = props;
9
+ const { filterByField, options } = selectOptions;
10
+ const { value } = useField({
10
11
  path: filterByField
11
12
  });
12
13
  const [filterOptions, setFilterOptions] = useState([]);
14
+ //TODO: Remove this mess, find alternative
13
15
  useEffect(()=>{
14
- if (!Array.isArray(options)) return;
15
- const opts = options.filter((option)=>{
16
- if (!relatedField || !option.fields) return true;
17
- if (Array.isArray(option.fields)) {
18
- return option.fields.includes(relatedField);
19
- }
20
- });
21
- setFilterOptions(opts);
16
+ if (Array.isArray(options)) {
17
+ const opts = options.filter((option)=>{
18
+ if (!value || !option.fields) return true;
19
+ if (Array.isArray(option.fields)) {
20
+ return option.fields.includes(value);
21
+ }
22
+ });
23
+ setFilterOptions(opts);
24
+ } else {
25
+ setFilterOptions(optionsFromProps);
26
+ }
22
27
  }, [
23
- relatedField,
28
+ value,
29
+ optionsFromProps,
24
30
  options
25
31
  ]);
26
- const { setValue, value: selectValue } = useField({
27
- path
28
- });
29
- return /*#__PURE__*/ _jsx(SelectInput, {
30
- label: field.label,
31
- name: path,
32
- onChange: (e)=>{
33
- setValue(e.value);
34
- },
35
- options: filterOptions,
36
- path: path,
37
- value: selectValue
32
+ return /*#__PURE__*/ _jsx(Select, {
33
+ ...props,
34
+ options: filterOptions
38
35
  });
39
36
  };
40
37
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/SelectField/SelectField.tsx"],"sourcesContent":["'use client'\n\nimport type { OptionObject, SelectFieldProps } from 'payload'\n\nimport { SelectInput, useField, useFieldProps } 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 } & SelectFieldProps,\n) => {\n const { field, filterByField, options } = props\n const { path } = useFieldProps()\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","useFieldProps","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,EAAEC,aAAa,QAAQ,iBAAgB;AACrE,OAAOC,SAASC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAElD,+DAA+D;AAC/D,OAAO,MAAMC,cAAc,CACzBC;IAKA,MAAM,EAAEC,KAAK,EAAEC,aAAa,EAAEC,OAAO,EAAE,GAAGH;IAC1C,MAAM,EAAEI,IAAI,EAAE,GAAGT;IACjB,MAAM,EAAEU,OAAOC,YAAY,EAAE,GAAGZ,SAAiB;QAC/CU,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,GAAGvB,SAAiB;QAAEU;IAAK;IAEjE,qBACE,KAACX;QACCyB,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 { SelectFieldProps } from '@payloadcms/ui'\nimport type { Option } from 'payload'\n\nimport { SelectField as Select, useField, useFieldProps } from '@payloadcms/ui'\nimport React, { useEffect, useState } from 'react'\n\nexport const SelectField = (props: SelectFieldProps) => {\n const fieldProps = useFieldProps()\n\n const { custom: selectOptions, path } = fieldProps\n const { options: optionsFromProps = [] } = props\n const { filterByField, options } = selectOptions\n\n const { value } = useField({\n path: filterByField,\n })\n const [filterOptions, setFilterOptions] = useState<Option[]>([])\n\n //TODO: Remove this mess, find alternative\n useEffect(() => {\n if (Array.isArray(options)) {\n const opts = options.filter((option) => {\n if (!value || !option.fields) return true\n\n if (Array.isArray(option.fields)) {\n return option.fields.includes(value)\n }\n })\n setFilterOptions(opts)\n } else {\n setFilterOptions(optionsFromProps)\n }\n }, [value, optionsFromProps, options])\n\n return <Select {...props} options={filterOptions} />\n}\n"],"names":["SelectField","Select","useField","useFieldProps","React","useEffect","useState","props","fieldProps","custom","selectOptions","path","options","optionsFromProps","filterByField","value","filterOptions","setFilterOptions","Array","isArray","opts","filter","option","fields","includes"],"mappings":"AAAA;;AAKA,SAASA,eAAeC,MAAM,EAAEC,QAAQ,EAAEC,aAAa,QAAQ,iBAAgB;AAC/E,OAAOC,SAASC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAElD,OAAO,MAAMN,cAAc,CAACO;IAC1B,MAAMC,aAAaL;IAEnB,MAAM,EAAEM,QAAQC,aAAa,EAAEC,IAAI,EAAE,GAAGH;IACxC,MAAM,EAAEI,SAASC,mBAAmB,EAAE,EAAE,GAAGN;IAC3C,MAAM,EAAEO,aAAa,EAAEF,OAAO,EAAE,GAAGF;IAEnC,MAAM,EAAEK,KAAK,EAAE,GAAGb,SAAS;QACzBS,MAAMG;IACR;IACA,MAAM,CAACE,eAAeC,iBAAiB,GAAGX,SAAmB,EAAE;IAE/D,0CAA0C;IAC1CD,UAAU;QACR,IAAIa,MAAMC,OAAO,CAACP,UAAU;YAC1B,MAAMQ,OAAOR,QAAQS,MAAM,CAAC,CAACC;gBAC3B,IAAI,CAACP,SAAS,CAACO,OAAOC,MAAM,EAAE,OAAO;gBAErC,IAAIL,MAAMC,OAAO,CAACG,OAAOC,MAAM,GAAG;oBAChC,OAAOD,OAAOC,MAAM,CAACC,QAAQ,CAACT;gBAChC;YACF;YACAE,iBAAiBG;QACnB,OAAO;YACLH,iBAAiBJ;QACnB;IACF,GAAG;QAACE;QAAOF;QAAkBD;KAAQ;IAErC,qBAAO,KAACX;QAAQ,GAAGM,KAAK;QAAEK,SAASI;;AACrC,EAAC"}
package/dist/index.d.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  * COMMERCIAL-LICENSE.md. Unauthorized commercial use or resale of modified versions
5
5
  * without appropriate licensing is prohibited.
6
6
  */
7
- export { payloadAiPlugin } from './plugin.js';
8
7
  export { PayloadAiPluginLexicalEditorFeature } from './fields/LexicalEditor/feature.server.js';
9
- export { LexicalBaseNode } from './ai/schemas/lexical.schema.js';
8
+ export { payloadAiPlugin } from './plugin.js';
9
+ export { LexicalBaseNode } from './ai/editor/lexical.schema.js';
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,mCAAmC,EAAE,MAAM,0CAA0C,CAAA;AAC9F,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mCAAmC,EAAE,MAAM,0CAA0C,CAAA;AAC9F,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA"}
package/dist/index.js CHANGED
@@ -3,8 +3,8 @@
3
3
  * redistribution, or embedding in proprietary systems, please refer to the
4
4
  * COMMERCIAL-LICENSE.md. Unauthorized commercial use or resale of modified versions
5
5
  * without appropriate licensing is prohibited.
6
- */ export { payloadAiPlugin } from './plugin.js';
7
- export { PayloadAiPluginLexicalEditorFeature } from './fields/LexicalEditor/feature.server.js';
8
- export { LexicalBaseNode } from './ai/schemas/lexical.schema.js';
6
+ */ export { PayloadAiPluginLexicalEditorFeature } from './fields/LexicalEditor/feature.server.js';
7
+ export { payloadAiPlugin } from './plugin.js';
8
+ export { LexicalBaseNode } from './ai/editor/lexical.schema.js';
9
9
 
10
10
  //# 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. For commercial use,\n * redistribution, or embedding in proprietary systems, please refer to the\n * COMMERCIAL-LICENSE.md. Unauthorized commercial use or resale of modified versions\n * without appropriate licensing is prohibited.\n */\n\nexport { payloadAiPlugin } from './plugin.js'\nexport { PayloadAiPluginLexicalEditorFeature } from './fields/LexicalEditor/feature.server.js'\nexport { LexicalBaseNode } from './ai/schemas/lexical.schema.js'\n"],"names":["payloadAiPlugin","PayloadAiPluginLexicalEditorFeature","LexicalBaseNode"],"mappings":"AAAA;;;;;CAKC,GAED,SAASA,eAAe,QAAQ,cAAa;AAC7C,SAASC,mCAAmC,QAAQ,2CAA0C;AAC9F,SAASC,eAAe,QAAQ,iCAAgC"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @license This software is licensed under the MIT License. For commercial use,\n * redistribution, or embedding in proprietary systems, please refer to the\n * COMMERCIAL-LICENSE.md. Unauthorized commercial use or resale of modified versions\n * without appropriate licensing is prohibited.\n */\n\nexport { PayloadAiPluginLexicalEditorFeature } from './fields/LexicalEditor/feature.server.js'\nexport { payloadAiPlugin } from './plugin.js'\nexport { LexicalBaseNode } from './ai/editor/lexical.schema.js'\n"],"names":["PayloadAiPluginLexicalEditorFeature","payloadAiPlugin","LexicalBaseNode"],"mappings":"AAAA;;;;;CAKC,GAED,SAASA,mCAAmC,QAAQ,2CAA0C;AAC9F,SAASC,eAAe,QAAQ,cAAa;AAC7C,SAASC,eAAe,QAAQ,gCAA+B"}
package/dist/init.d.ts CHANGED
@@ -1,4 +1,3 @@
1
1
  import type { Payload } from 'payload';
2
- import type { PluginConfig } from './types.js';
3
- export declare const init: (payload: Payload, fieldSchemaPaths: any, pluginConfig: PluginConfig) => Promise<void>;
2
+ export declare const init: (payload: Payload, fieldSchemaPaths: any) => Promise<void>;
4
3
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,eAAO,MAAM,IAAI,YAAmB,OAAO,uCAAkC,YAAY,kBA2FxF,CAAA"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAOtC,eAAO,MAAM,IAAI,YAAmB,OAAO,yCAqE1C,CAAA"}
package/dist/init.js CHANGED
@@ -1,15 +1,15 @@
1
+ import { PLUGIN_INSTRUCTIONS_MAP_GLOBAL, PLUGIN_INSTRUCTIONS_TABLE } from './defaults.js';
1
2
  import { GenerationModels } from './ai/models/index.js';
2
- import { seedPrompts } from './ai/prompts.js';
3
3
  import { generateSeedPrompt } from './ai/utils/generateSeedPrompt.js';
4
- import { PLUGIN_INSTRUCTIONS_MAP_GLOBAL, PLUGIN_INSTRUCTIONS_TABLE } from './defaults.js';
5
- export const init = async (payload, fieldSchemaPaths, pluginConfig)=>{
4
+ import { seedPrompts } from './ai/prompts.js';
5
+ export const init = async (payload, fieldSchemaPaths)=>{
6
6
  payload.logger.info(`— AI Plugin: Initializing...`);
7
7
  const paths = Object.keys(fieldSchemaPaths);
8
+ // TODO: Add default options according to field type in INSTRUCTIONS table
8
9
  const fieldInstructionsMap = {};
9
10
  for(let i = 0; i < paths.length; i++){
10
11
  const path = paths[i];
11
12
  const { type: fieldType, label: fieldLabel } = fieldSchemaPaths[path];
12
- //TODO: if global is broken the plugin doesn't know and does not run reindexing
13
13
  const entry = await payload.find({
14
14
  collection: PLUGIN_INSTRUCTIONS_TABLE,
15
15
  where: {
@@ -22,46 +22,32 @@ export const init = async (payload, fieldSchemaPaths, pluginConfig)=>{
22
22
  }
23
23
  });
24
24
  if (!entry?.docs?.length) {
25
- const { prompt, system } = seedPrompts({
26
- fieldLabel,
27
- fieldSchemaPaths,
25
+ const { system, prompt } = seedPrompts({
28
26
  fieldType,
29
- path
27
+ fieldLabel,
28
+ path,
29
+ fieldSchemaPaths
30
30
  });
31
- let generatedPrompt = '{{ title }}';
32
- if (pluginConfig.generatePromptOnInit) {
33
- generatedPrompt = await generateSeedPrompt({
34
- prompt,
35
- system
36
- });
37
- payload.logger.info(`\nPrompt generated for "${fieldLabel}" field:\nprompt: ${generatedPrompt}\n\n`);
38
- }
31
+ const generatedPrompt = await generateSeedPrompt({
32
+ system,
33
+ prompt
34
+ });
35
+ payload.logger.info(`\nPrompt generated for "${fieldLabel}" field:\nprompt: ${generatedPrompt}\n\n`);
39
36
  const instructions = await payload.create({
40
37
  collection: PLUGIN_INSTRUCTIONS_TABLE,
41
38
  data: {
42
39
  'field-type': fieldType,
40
+ 'schema-path': path,
43
41
  'model-id': GenerationModels.find((a)=>{
44
42
  return a.fields.includes(fieldType);
45
- })?.id,
46
- prompt: generatedPrompt,
47
- 'schema-path': path
43
+ }).id,
44
+ prompt: generatedPrompt
48
45
  }
49
- }).then((a)=>a).catch((a)=>{
50
- console.log('err-', a);
51
46
  });
52
- // @ts-expect-error
53
- if (instructions?.id) {
54
- fieldInstructionsMap[path] = {
55
- id: instructions.id,
56
- fieldType
57
- };
58
- }
47
+ fieldInstructionsMap[path] = instructions.id;
59
48
  } else {
60
49
  const [instructions] = entry.docs;
61
- fieldInstructionsMap[path] = {
62
- id: instructions.id,
63
- fieldType
64
- };
50
+ fieldInstructionsMap[path] = instructions.id;
65
51
  }
66
52
  }
67
53
  payload.logger.info(`— AI Plugin: Enabled fieldMap: ${JSON.stringify(fieldInstructionsMap, null, 2)}`);
@@ -73,9 +59,7 @@ export const init = async (payload, fieldSchemaPaths, pluginConfig)=>{
73
59
  depth: 2
74
60
  });
75
61
  payload.logger.info(`— AI Plugin: Initialized!`);
76
- if (pluginConfig.generatePromptOnInit) {
77
- payload.logger.info('\n\n-AI Plugin: Example prompts are added to get you started, Now go break some code 🚀🚀🚀\n\n');
78
- }
62
+ payload.logger.info('\n\n-AI Plugin: Example prompts are added to get you started, Now go break some code 🚀🚀🚀\n\n');
79
63
  };
80
64
 
81
65
  //# sourceMappingURL=init.js.map
package/dist/init.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/init.ts"],"sourcesContent":["import type { Payload } from 'payload'\n\nimport { GenerationModels } from './ai/models/index.js'\nimport { seedPrompts } from './ai/prompts.js'\nimport { generateSeedPrompt } from './ai/utils/generateSeedPrompt.js'\nimport { PLUGIN_INSTRUCTIONS_MAP_GLOBAL, PLUGIN_INSTRUCTIONS_TABLE } from './defaults.js'\nimport type { PluginConfig } from './types.js'\n\nexport const init = async (payload: Payload, fieldSchemaPaths, pluginConfig: PluginConfig) => {\n payload.logger.info(`— AI Plugin: Initializing...`)\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 } = fieldSchemaPaths[path]\n //TODO: if global is broken the plugin doesn't know and does not run reindexing\n const entry = await payload.find({\n collection: PLUGIN_INSTRUCTIONS_TABLE,\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 generatedPrompt = await generateSeedPrompt({\n prompt,\n system,\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': GenerationModels.find((a) => {\n return a.fields.includes(fieldType)\n })?.id,\n prompt: generatedPrompt,\n 'schema-path': path,\n },\n })\n .then((a) => a)\n .catch((a) => {\n console.log('err-', a)\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 payload.logger.info(\n `— AI Plugin: Enabled fieldMap: ${JSON.stringify(fieldInstructionsMap, null, 2)}`,\n )\n await payload.updateGlobal({\n slug: PLUGIN_INSTRUCTIONS_MAP_GLOBAL, // required\n data: {\n map: fieldInstructionsMap,\n },\n depth: 2,\n })\n\n payload.logger.info(`— AI Plugin: Initialized!`)\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":["GenerationModels","seedPrompts","generateSeedPrompt","PLUGIN_INSTRUCTIONS_MAP_GLOBAL","PLUGIN_INSTRUCTIONS_TABLE","init","payload","fieldSchemaPaths","pluginConfig","logger","info","paths","Object","keys","fieldInstructionsMap","i","length","path","type","fieldType","label","fieldLabel","entry","find","collection","where","equals","docs","prompt","system","generatedPrompt","generatePromptOnInit","instructions","create","data","a","fields","includes","id","then","catch","console","log","JSON","stringify","updateGlobal","slug","map","depth"],"mappings":"AAEA,SAASA,gBAAgB,QAAQ,uBAAsB;AACvD,SAASC,WAAW,QAAQ,kBAAiB;AAC7C,SAASC,kBAAkB,QAAQ,mCAAkC;AACrE,SAASC,8BAA8B,EAAEC,yBAAyB,QAAQ,gBAAe;AAGzF,OAAO,MAAMC,OAAO,OAAOC,SAAkBC,kBAAkBC;IAC7DF,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,4BAA4B,CAAC;IAElD,MAAMC,QAAQC,OAAOC,IAAI,CAACN;IAE1B,MAAMO,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,EAAE,GAAGd,gBAAgB,CAACU,KAAK;QACrE,+EAA+E;QAC/E,MAAMK,QAAQ,MAAMhB,QAAQiB,IAAI,CAAC;YAC/BC,YAAYpB;YACZqB,OAAO;gBACL,cAAc;oBACZC,QAAQP;gBACV;gBACA,eAAe;oBACbO,QAAQT;gBACV;YACF;QACF;QAEA,IAAI,CAACK,OAAOK,MAAMX,QAAQ;YACxB,MAAM,EAAEY,MAAM,EAAEC,MAAM,EAAE,GAAG5B,YAAY;gBACrCoB;gBACAd;gBACAY;gBACAF;YACF;YAEA,IAAIa,kBAAkB;YACtB,IAAItB,aAAauB,oBAAoB,EAAE;gBACrCD,kBAAkB,MAAM5B,mBAAmB;oBACzC0B;oBACAC;gBACF;gBACAvB,QAAQG,MAAM,CAACC,IAAI,CACjB,CAAC,wBAAwB,EAAEW,WAAW,kBAAkB,EAAES,gBAAgB,IAAI,CAAC;YAEnF;YAEA,MAAME,eAAe,MAAM1B,QACxB2B,MAAM,CAAC;gBACNT,YAAYpB;gBACZ8B,MAAM;oBACJ,cAAcf;oBACd,YAAYnB,iBAAiBuB,IAAI,CAAC,CAACY;wBACjC,OAAOA,EAAEC,MAAM,CAACC,QAAQ,CAAClB;oBAC3B,IAAImB;oBACJV,QAAQE;oBACR,eAAeb;gBACjB;YACF,GACCsB,IAAI,CAAC,CAACJ,IAAMA,GACZK,KAAK,CAAC,CAACL;gBACNM,QAAQC,GAAG,CAAC,QAAQP;YACtB;YAEF,mBAAmB;YACnB,IAAIH,cAAcM,IAAI;gBACpBxB,oBAAoB,CAACG,KAAK,GAAG;oBAC3BqB,IAAIN,aAAaM,EAAE;oBACnBnB;gBACF;YACF;QACF,OAAO;YACL,MAAM,CAACa,aAAa,GAAGV,MAAMK,IAAI;YACjCb,oBAAoB,CAACG,KAAK,GAAG;gBAC3BqB,IAAIN,aAAaM,EAAE;gBACnBnB;YACF;QACF;IACF;IAEAb,QAAQG,MAAM,CAACC,IAAI,CACjB,CAAC,+BAA+B,EAAEiC,KAAKC,SAAS,CAAC9B,sBAAsB,MAAM,GAAG,CAAC;IAEnF,MAAMR,QAAQuC,YAAY,CAAC;QACzBC,MAAM3C;QACN+B,MAAM;YACJa,KAAKjC;QACP;QACAkC,OAAO;IACT;IAEA1C,QAAQG,MAAM,CAACC,IAAI,CAAC,CAAC,yBAAyB,CAAC;IAC/C,IAAIF,aAAauB,oBAAoB,EAAE;QACrCzB,QAAQG,MAAM,CAACC,IAAI,CACjB;IAEJ;AACF,EAAC"}
1
+ {"version":3,"sources":["../src/init.ts"],"sourcesContent":["import type { Payload } from 'payload'\n\nimport { PLUGIN_INSTRUCTIONS_MAP_GLOBAL, PLUGIN_INSTRUCTIONS_TABLE } from './defaults.js'\nimport { GenerationModels } from './ai/models/index.js'\nimport { generateSeedPrompt } from './ai/utils/generateSeedPrompt.js'\nimport { seedPrompts } from './ai/prompts.js'\n\nexport const init = async (payload: Payload, fieldSchemaPaths) => {\n payload.logger.info(`— AI Plugin: Initializing...`)\n\n const paths = Object.keys(fieldSchemaPaths)\n\n // TODO: Add default options according to field type in INSTRUCTIONS table\n const fieldInstructionsMap = {}\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i]\n const { type: fieldType, label: fieldLabel } = fieldSchemaPaths[path]\n const entry = await payload.find({\n collection: PLUGIN_INSTRUCTIONS_TABLE,\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 { system, prompt } = seedPrompts({\n fieldType,\n fieldLabel,\n path,\n fieldSchemaPaths,\n })\n const generatedPrompt = await generateSeedPrompt({\n system,\n prompt,\n })\n payload.logger.info(\n `\\nPrompt generated for \"${fieldLabel}\" field:\\nprompt: ${generatedPrompt}\\n\\n`,\n )\n const instructions = await payload.create({\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n data: {\n 'field-type': fieldType,\n 'schema-path': path,\n 'model-id': GenerationModels.find((a) => {\n return a.fields.includes(fieldType)\n }).id,\n prompt: generatedPrompt,\n },\n })\n fieldInstructionsMap[path] = instructions.id\n } else {\n const [instructions] = entry.docs\n fieldInstructionsMap[path] = instructions.id\n }\n }\n\n payload.logger.info(\n `— AI Plugin: Enabled fieldMap: ${JSON.stringify(fieldInstructionsMap, null, 2)}`,\n )\n await payload.updateGlobal({\n slug: PLUGIN_INSTRUCTIONS_MAP_GLOBAL, // required\n data: {\n map: fieldInstructionsMap,\n },\n depth: 2,\n })\n\n payload.logger.info(`— AI Plugin: Initialized!`)\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"],"names":["PLUGIN_INSTRUCTIONS_MAP_GLOBAL","PLUGIN_INSTRUCTIONS_TABLE","GenerationModels","generateSeedPrompt","seedPrompts","init","payload","fieldSchemaPaths","logger","info","paths","Object","keys","fieldInstructionsMap","i","length","path","type","fieldType","label","fieldLabel","entry","find","collection","where","equals","docs","system","prompt","generatedPrompt","instructions","create","data","a","fields","includes","id","JSON","stringify","updateGlobal","slug","map","depth"],"mappings":"AAEA,SAASA,8BAA8B,EAAEC,yBAAyB,QAAQ,gBAAe;AACzF,SAASC,gBAAgB,QAAQ,uBAAsB;AACvD,SAASC,kBAAkB,QAAQ,mCAAkC;AACrE,SAASC,WAAW,QAAQ,kBAAiB;AAE7C,OAAO,MAAMC,OAAO,OAAOC,SAAkBC;IAC3CD,QAAQE,MAAM,CAACC,IAAI,CAAC,CAAC,4BAA4B,CAAC;IAElD,MAAMC,QAAQC,OAAOC,IAAI,CAACL;IAE1B,0EAA0E;IAC1E,MAAMM,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,EAAE,GAAGb,gBAAgB,CAACS,KAAK;QACrE,MAAMK,QAAQ,MAAMf,QAAQgB,IAAI,CAAC;YAC/BC,YAAYtB;YACZuB,OAAO;gBACL,cAAc;oBACZC,QAAQP;gBACV;gBACA,eAAe;oBACbO,QAAQT;gBACV;YACF;QACF;QAEA,IAAI,CAACK,OAAOK,MAAMX,QAAQ;YACxB,MAAM,EAAEY,MAAM,EAAEC,MAAM,EAAE,GAAGxB,YAAY;gBACrCc;gBACAE;gBACAJ;gBACAT;YACF;YACA,MAAMsB,kBAAkB,MAAM1B,mBAAmB;gBAC/CwB;gBACAC;YACF;YACAtB,QAAQE,MAAM,CAACC,IAAI,CACjB,CAAC,wBAAwB,EAAEW,WAAW,kBAAkB,EAAES,gBAAgB,IAAI,CAAC;YAEjF,MAAMC,eAAe,MAAMxB,QAAQyB,MAAM,CAAC;gBACxCR,YAAYtB;gBACZ+B,MAAM;oBACJ,cAAcd;oBACd,eAAeF;oBACf,YAAYd,iBAAiBoB,IAAI,CAAC,CAACW;wBACjC,OAAOA,EAAEC,MAAM,CAACC,QAAQ,CAACjB;oBAC3B,GAAGkB,EAAE;oBACLR,QAAQC;gBACV;YACF;YACAhB,oBAAoB,CAACG,KAAK,GAAGc,aAAaM,EAAE;QAC9C,OAAO;YACL,MAAM,CAACN,aAAa,GAAGT,MAAMK,IAAI;YACjCb,oBAAoB,CAACG,KAAK,GAAGc,aAAaM,EAAE;QAC9C;IACF;IAEA9B,QAAQE,MAAM,CAACC,IAAI,CACjB,CAAC,+BAA+B,EAAE4B,KAAKC,SAAS,CAACzB,sBAAsB,MAAM,GAAG,CAAC;IAEnF,MAAMP,QAAQiC,YAAY,CAAC;QACzBC,MAAMxC;QACNgC,MAAM;YACJS,KAAK5B;QACP;QACA6B,OAAO;IACT;IAEApC,QAAQE,MAAM,CAACC,IAAI,CAAC,CAAC,yBAAyB,CAAC;IAC/CH,QAAQE,MAAM,CAACC,IAAI,CACjB;AAEJ,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAKrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAgB9C,QAAA,MAAM,eAAe,iBACJ,YAAY,sBACV,MAAM,KAAG,MAuGzB,CAAA;AAEH,OAAO,EAAE,eAAe,EAAE,CAAA"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAGrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAa9C,QAAA,MAAM,eAAe,iBACJ,YAAY,sBACV,MAAM,KAAG,MAwFzB,CAAA;AAEH,OAAO,EAAE,eAAe,EAAE,CAAA"}
package/dist/plugin.js CHANGED
@@ -1,116 +1,93 @@
1
1
  import { deepMerge } from 'payload/shared';
2
- import { zodToJsonSchema } from 'zod-to-json-schema';
3
- import { lexicalSchema } from './ai/schemas/lexical.schema.js';
4
2
  import { Instructions } from './collections/Instructions.js';
5
3
  import { PLUGIN_INSTRUCTIONS_MAP_GLOBAL, PLUGIN_NAME } from './defaults.js';
6
4
  import { endpoints } from './endpoints/index.js';
7
5
  import { init } from './init.js';
6
+ import { InstructionsProvider } from './providers/InstructionsProvider/index.js';
8
7
  import { translations } from './translations/index.js';
9
- import { isPluginActivated } from './utilities/isPluginActivated.js';
10
8
  import { updateFieldsConfig } from './utilities/updateFieldsConfig.js';
11
- const defaultPluginConfig = {
12
- generatePromptOnInit: true,
13
- collections: {}
14
- };
9
+ import { lexicalSchema } from './ai/editor/lexical.schema.js';
10
+ import { zodToJsonSchema } from 'zod-to-json-schema';
15
11
  const payloadAiPlugin = (pluginConfig)=>(incomingConfig)=>{
16
- pluginConfig = {
17
- ...defaultPluginConfig,
18
- ...pluginConfig
12
+ // Inject editor schema to config, so that it can be accessed when /textarea endpoint will hit
13
+ const zodLexicalSchema = lexicalSchema(pluginConfig.editorConfig?.nodes);
14
+ if (pluginConfig.debugging) {
15
+ Instructions.admin.hidden = false;
16
+ }
17
+ Instructions.admin.custom = {
18
+ ...Instructions.admin.custom || {},
19
+ [PLUGIN_NAME]: {
20
+ editorConfig: {
21
+ // Used in admin client for useObject hook
22
+ schema: zodToJsonSchema(zodLexicalSchema)
23
+ }
24
+ }
19
25
  };
20
- const isActivated = isPluginActivated();
21
- let updatedConfig = {
22
- ...incomingConfig
26
+ Instructions.custom = {
27
+ ...Instructions.custom || {},
28
+ [PLUGIN_NAME]: {
29
+ editorConfig: {
30
+ // Used in textarea endpoint for llm
31
+ schema: zodLexicalSchema
32
+ }
33
+ }
23
34
  };
35
+ const collections = [
36
+ ...incomingConfig.collections ?? [],
37
+ Instructions
38
+ ];
39
+ const { collections: collectionSlugs = [] } = pluginConfig;
24
40
  let collectionsFieldPathMap = {};
25
- if (isActivated) {
26
- // Inject editor schema to config, so that it can be accessed when /textarea endpoint will hit
27
- const zodLexicalSchema = lexicalSchema(pluginConfig.editorConfig?.nodes);
28
- if (pluginConfig.debugging) {
29
- Instructions.admin.hidden = false;
30
- }
31
- Instructions.admin.custom = {
32
- ...Instructions.admin.custom || {},
33
- [PLUGIN_NAME]: {
34
- editorConfig: {
35
- // Used in admin client for useObject hook
36
- schema: zodToJsonSchema(zodLexicalSchema)
37
- }
38
- }
39
- };
40
- Instructions.custom = {
41
- ...Instructions.custom || {},
42
- [PLUGIN_NAME]: {
43
- editorConfig: {
44
- // Used in textarea endpoint for llm
45
- schema: zodLexicalSchema
46
- }
41
+ incomingConfig.admin.components.providers = [
42
+ ...incomingConfig.admin.components.providers ?? [],
43
+ InstructionsProvider
44
+ ];
45
+ const updatedConfig = {
46
+ ...incomingConfig,
47
+ collections: collections.map((collection)=>{
48
+ if (collectionSlugs[collection.slug]) {
49
+ const { schemaPathMap, updatedCollectionConfig } = updateFieldsConfig(collection);
50
+ collectionsFieldPathMap = {
51
+ ...collectionsFieldPathMap,
52
+ ...schemaPathMap
53
+ };
54
+ return updatedCollectionConfig;
47
55
  }
48
- };
49
- const collections = [
50
- ...incomingConfig.collections ?? [],
51
- Instructions
52
- ];
53
- const { collections: collectionSlugs = [] } = pluginConfig;
54
- incomingConfig.admin.components.providers = [
55
- ...incomingConfig.admin.components.providers ?? [],
56
+ return collection;
57
+ }),
58
+ endpoints: [
59
+ ...incomingConfig.endpoints ?? [],
60
+ endpoints.textarea,
61
+ endpoints.upload
62
+ ],
63
+ globals: [
64
+ ...incomingConfig.globals,
56
65
  {
57
- clientProps: {},
58
- path: '@ai-stack/payloadcms/client#InstructionsProvider',
59
- serverProps: {}
66
+ slug: PLUGIN_INSTRUCTIONS_MAP_GLOBAL,
67
+ access: {
68
+ read: ()=>true
69
+ },
70
+ admin: {
71
+ hidden: !pluginConfig.debugging
72
+ },
73
+ fields: [
74
+ {
75
+ name: 'map',
76
+ type: 'json'
77
+ }
78
+ ]
60
79
  }
61
- ];
62
- updatedConfig = {
63
- ...incomingConfig,
64
- collections: collections.map((collection)=>{
65
- if (collectionSlugs[collection.slug]) {
66
- const { schemaPathMap, updatedCollectionConfig } = updateFieldsConfig(collection);
67
- collectionsFieldPathMap = {
68
- ...collectionsFieldPathMap,
69
- ...schemaPathMap
70
- };
71
- return updatedCollectionConfig;
72
- }
73
- return collection;
74
- }),
75
- endpoints: [
76
- ...incomingConfig.endpoints ?? [],
77
- endpoints.textarea,
78
- endpoints.upload
79
- ],
80
- globals: [
81
- ...incomingConfig.globals || [],
82
- {
83
- slug: PLUGIN_INSTRUCTIONS_MAP_GLOBAL,
84
- access: {
85
- read: ()=>true
86
- },
87
- admin: {
88
- hidden: !pluginConfig.debugging
89
- },
90
- fields: [
91
- {
92
- name: 'map',
93
- type: 'json'
94
- }
95
- ]
96
- }
97
- ],
98
- i18n: {
99
- ...incomingConfig.i18n,
100
- translations: {
101
- ...deepMerge(translations, incomingConfig.i18n?.translations)
102
- }
80
+ ],
81
+ i18n: {
82
+ ...incomingConfig.i18n,
83
+ translations: {
84
+ ...deepMerge(translations, incomingConfig.i18n?.translations)
103
85
  }
104
- };
105
- }
86
+ }
87
+ };
106
88
  updatedConfig.onInit = async (payload)=>{
107
89
  if (incomingConfig.onInit) await incomingConfig.onInit(payload);
108
- if (!isActivated) {
109
- payload.logger.warn(`— AI Plugin: Not activated. Please verify your environment keys.`);
110
- return;
111
- }
112
- await init(payload, collectionsFieldPathMap, pluginConfig).catch((error)=>{
113
- console.error(error);
90
+ await init(payload, collectionsFieldPathMap).catch((error)=>{
114
91
  payload.logger.error(`— AI Plugin: Initialization Error: ${error}`);
115
92
  });
116
93
  };