@ai-stack/payloadcms 3.0.0-beta.104.2 → 3.0.0-beta.65.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/README.md +2 -16
  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/generateRichText.js.map +1 -1
  6. package/dist/ai/models/anthropic/index.d.ts.map +1 -1
  7. package/dist/ai/models/anthropic/index.js +3 -3
  8. package/dist/ai/models/anthropic/index.js.map +1 -1
  9. package/dist/ai/models/elevenLabs/index.d.ts.map +1 -1
  10. package/dist/ai/models/elevenLabs/index.js +11 -1
  11. package/dist/ai/models/elevenLabs/index.js.map +1 -1
  12. package/dist/ai/models/index.js +2 -2
  13. package/dist/ai/models/index.js.map +1 -1
  14. package/dist/ai/models/openai/generateRichText.js.map +1 -1
  15. package/dist/ai/models/openai/index.d.ts.map +1 -1
  16. package/dist/ai/models/openai/index.js +2 -3
  17. package/dist/ai/models/openai/index.js.map +1 -1
  18. package/dist/ai/models/style.d.ts +2 -0
  19. package/dist/ai/models/style.d.ts.map +1 -0
  20. package/dist/ai/models/style.js +31 -0
  21. package/dist/ai/models/style.js.map +1 -0
  22. package/dist/ai/prompts.d.ts +0 -1
  23. package/dist/ai/prompts.d.ts.map +1 -1
  24. package/dist/ai/prompts.js +2 -8
  25. package/dist/ai/prompts.js.map +1 -1
  26. package/dist/ai/utils/generateFileNameByPrompt.js.map +1 -1
  27. package/dist/collections/Instructions.d.ts.map +1 -1
  28. package/dist/collections/Instructions.js +12 -9
  29. package/dist/collections/Instructions.js.map +1 -1
  30. package/dist/defaults.d.ts +1 -1
  31. package/dist/defaults.d.ts.map +1 -1
  32. package/dist/defaults.js +1 -1
  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 +3 -0
  43. package/dist/fields/DescriptionField/DescriptionField.d.ts.map +1 -0
  44. package/dist/fields/DescriptionField/DescriptionField.js +15 -0
  45. package/dist/fields/DescriptionField/DescriptionField.js.map +1 -0
  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/{ComposeField/ComposeField.js → DescriptionField/DescriptionFieldComponent.js} +5 -5
  49. package/dist/fields/DescriptionField/DescriptionFieldComponent.js.map +1 -0
  50. package/dist/fields/LexicalEditor/ActionsFeatureComponent.d.ts +2 -0
  51. package/dist/fields/LexicalEditor/ActionsFeatureComponent.d.ts.map +1 -0
  52. package/dist/fields/LexicalEditor/{ComposeFeatureComponent.js → ActionsFeatureComponent.js} +5 -5
  53. package/dist/fields/LexicalEditor/ActionsFeatureComponent.js.map +1 -0
  54. package/dist/fields/LexicalEditor/feature.client.d.ts +4 -1
  55. package/dist/fields/LexicalEditor/feature.client.d.ts.map +1 -1
  56. package/dist/fields/LexicalEditor/feature.client.js +2 -2
  57. package/dist/fields/LexicalEditor/feature.client.js.map +1 -1
  58. package/dist/fields/LexicalEditor/feature.server.d.ts +7 -1
  59. package/dist/fields/LexicalEditor/feature.server.d.ts.map +1 -1
  60. package/dist/fields/LexicalEditor/feature.server.js +11 -3
  61. package/dist/fields/LexicalEditor/feature.server.js.map +1 -1
  62. package/dist/fields/PromptEditorField/PromptEditorField.d.ts +2 -2
  63. package/dist/fields/PromptEditorField/PromptEditorField.d.ts.map +1 -1
  64. package/dist/fields/PromptEditorField/PromptEditorField.js +51 -32
  65. package/dist/fields/PromptEditorField/PromptEditorField.js.map +1 -1
  66. package/dist/fields/SelectField/SelectField.d.ts +2 -9
  67. package/dist/fields/SelectField/SelectField.d.ts.map +1 -1
  68. package/dist/fields/SelectField/SelectField.js +23 -26
  69. package/dist/fields/SelectField/SelectField.js.map +1 -1
  70. package/dist/index.d.ts +2 -2
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +3 -3
  73. package/dist/index.js.map +1 -1
  74. package/dist/init.d.ts +1 -2
  75. package/dist/init.d.ts.map +1 -1
  76. package/dist/init.js +9 -26
  77. package/dist/init.js.map +1 -1
  78. package/dist/plugin.d.ts.map +1 -1
  79. package/dist/plugin.js +8 -27
  80. package/dist/plugin.js.map +1 -1
  81. package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts +3 -1
  82. package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts.map +1 -1
  83. package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
  84. package/dist/providers/InstructionsProvider/hook.d.ts +9 -0
  85. package/dist/providers/InstructionsProvider/hook.d.ts.map +1 -0
  86. package/dist/providers/InstructionsProvider/hook.js +17 -0
  87. package/dist/providers/InstructionsProvider/hook.js.map +1 -0
  88. package/dist/providers/InstructionsProvider/index.d.ts +5 -0
  89. package/dist/providers/InstructionsProvider/index.d.ts.map +1 -0
  90. package/dist/providers/InstructionsProvider/index.js +10 -0
  91. package/dist/providers/InstructionsProvider/index.js.map +1 -0
  92. package/dist/types.d.ts +1 -2
  93. package/dist/types.d.ts.map +1 -1
  94. package/dist/types.js.map +1 -1
  95. package/dist/ui/Actions/Actions.d.ts +5 -0
  96. package/dist/ui/Actions/Actions.d.ts.map +1 -0
  97. package/dist/ui/{Compose/Compose.js → Actions/Actions.js} +9 -9
  98. package/dist/ui/Actions/Actions.js.map +1 -0
  99. package/dist/ui/{Compose → Actions}/UndoRedoActions.d.ts.map +1 -1
  100. package/dist/ui/{Compose → Actions}/UndoRedoActions.js +2 -15
  101. package/dist/ui/Actions/UndoRedoActions.js.map +1 -0
  102. package/dist/ui/{Compose → Actions}/hooks/menu/Item.d.ts.map +1 -1
  103. package/dist/ui/{Compose → Actions}/hooks/menu/Item.js.map +1 -1
  104. package/dist/ui/Actions/hooks/menu/TranslateMenu.d.ts.map +1 -0
  105. package/dist/ui/{Compose → Actions}/hooks/menu/TranslateMenu.js.map +1 -1
  106. package/dist/ui/{Compose → Actions}/hooks/menu/items.d.ts.map +1 -1
  107. package/dist/ui/{Compose → Actions}/hooks/menu/items.js.map +1 -1
  108. package/dist/ui/{Compose → Actions}/hooks/menu/itemsMap.d.ts.map +1 -1
  109. package/dist/ui/{Compose → Actions}/hooks/menu/itemsMap.js.map +1 -1
  110. package/dist/ui/{Compose → Actions}/hooks/menu/useMenu.d.ts.map +1 -1
  111. package/dist/ui/{Compose → Actions}/hooks/menu/useMenu.js.map +1 -1
  112. package/dist/ui/{Compose → Actions}/hooks/useGenerate.d.ts.map +1 -1
  113. package/dist/ui/{Compose → Actions}/hooks/useGenerate.js +6 -5
  114. package/dist/ui/Actions/hooks/useGenerate.js.map +1 -0
  115. package/dist/ui/Actions/hooks/useHistory.d.ts.map +1 -0
  116. package/dist/ui/{Compose → Actions}/hooks/useHistory.js +1 -3
  117. package/dist/ui/Actions/hooks/useHistory.js.map +1 -0
  118. package/dist/ui/Floatype/Floatype.d.ts +21 -0
  119. package/dist/ui/Floatype/Floatype.d.ts.map +1 -0
  120. package/dist/ui/Floatype/Floatype.js +245 -0
  121. package/dist/ui/Floatype/Floatype.js.map +1 -0
  122. package/dist/ui/Floatype/floatype.module.css +25 -0
  123. package/dist/utilities/getFieldBySchemaPath.d.ts +2 -2
  124. package/dist/utilities/getFieldBySchemaPath.d.ts.map +1 -1
  125. package/dist/utilities/getFieldBySchemaPath.js.map +1 -1
  126. package/dist/utilities/updateFieldsConfig.d.ts.map +1 -1
  127. package/dist/utilities/updateFieldsConfig.js +8 -14
  128. package/dist/utilities/updateFieldsConfig.js.map +1 -1
  129. package/package.json +30 -49
  130. package/dist/ai/schemas/lexical.schema.d.ts.map +0 -1
  131. package/dist/ai/schemas/lexical.schema.js.map +0 -1
  132. package/dist/exports/client.d.ts +0 -3
  133. package/dist/exports/client.d.ts.map +0 -1
  134. package/dist/exports/client.js +0 -4
  135. package/dist/exports/client.js.map +0 -1
  136. package/dist/fields/ComposeField/ComposeField.d.ts +0 -4
  137. package/dist/fields/ComposeField/ComposeField.d.ts.map +0 -1
  138. package/dist/fields/ComposeField/ComposeField.js.map +0 -1
  139. package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts +0 -2
  140. package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts.map +0 -1
  141. package/dist/fields/LexicalEditor/ComposeFeatureComponent.js.map +0 -1
  142. package/dist/libraries/autocomplete/AutocompleteTextArea.d.ts +0 -8
  143. package/dist/libraries/autocomplete/AutocompleteTextArea.d.ts.map +0 -1
  144. package/dist/libraries/autocomplete/AutocompleteTextArea.js +0 -437
  145. package/dist/libraries/autocomplete/AutocompleteTextArea.js.map +0 -1
  146. package/dist/libraries/autocomplete/AutocompleteTextArea.module.scss +0 -35
  147. package/dist/libraries/handlebars/asyncHandlebars.d.ts +0 -2
  148. package/dist/libraries/handlebars/asyncHandlebars.d.ts.map +0 -1
  149. package/dist/libraries/handlebars/asyncHandlebars.js +0 -5
  150. package/dist/libraries/handlebars/asyncHandlebars.js.map +0 -1
  151. package/dist/libraries/handlebars/helpers.d.ts +0 -2
  152. package/dist/libraries/handlebars/helpers.d.ts.map +0 -1
  153. package/dist/libraries/handlebars/helpers.js +0 -22
  154. package/dist/libraries/handlebars/helpers.js.map +0 -1
  155. package/dist/libraries/handlebars/helpersMap.d.ts +0 -12
  156. package/dist/libraries/handlebars/helpersMap.d.ts.map +0 -1
  157. package/dist/libraries/handlebars/helpersMap.js +0 -13
  158. package/dist/libraries/handlebars/helpersMap.js.map +0 -1
  159. package/dist/libraries/handlebars/replacePlaceholders.d.ts +0 -2
  160. package/dist/libraries/handlebars/replacePlaceholders.d.ts.map +0 -1
  161. package/dist/libraries/handlebars/replacePlaceholders.js +0 -8
  162. package/dist/libraries/handlebars/replacePlaceholders.js.map +0 -1
  163. package/dist/providers/InstructionsProvider/useInstructions.d.ts +0 -4
  164. package/dist/providers/InstructionsProvider/useInstructions.d.ts.map +0 -1
  165. package/dist/providers/InstructionsProvider/useInstructions.js +0 -38
  166. package/dist/providers/InstructionsProvider/useInstructions.js.map +0 -1
  167. package/dist/ui/Compose/Compose.d.ts +0 -9
  168. package/dist/ui/Compose/Compose.d.ts.map +0 -1
  169. package/dist/ui/Compose/Compose.js.map +0 -1
  170. package/dist/ui/Compose/UndoRedoActions.js.map +0 -1
  171. package/dist/ui/Compose/hooks/menu/TranslateMenu.d.ts.map +0 -1
  172. package/dist/ui/Compose/hooks/useGenerate.js.map +0 -1
  173. package/dist/ui/Compose/hooks/useHistory.d.ts.map +0 -1
  174. package/dist/ui/Compose/hooks/useHistory.js.map +0 -1
  175. package/dist/utilities/getFieldInfo.d.ts +0 -3
  176. package/dist/utilities/getFieldInfo.d.ts.map +0 -1
  177. package/dist/utilities/getFieldInfo.js +0 -14
  178. package/dist/utilities/getFieldInfo.js.map +0 -1
  179. /package/dist/ai/{schemas → editor}/lexical.schema.js +0 -0
  180. /package/dist/ui/{Compose → Actions}/UndoRedoActions.d.ts +0 -0
  181. /package/dist/ui/{Compose/compose.module.scss → Actions/actions.module.scss} +0 -0
  182. /package/dist/ui/{Compose → Actions}/hooks/menu/Item.d.ts +0 -0
  183. /package/dist/ui/{Compose → Actions}/hooks/menu/Item.js +0 -0
  184. /package/dist/ui/{Compose → Actions}/hooks/menu/TranslateMenu.d.ts +0 -0
  185. /package/dist/ui/{Compose → Actions}/hooks/menu/TranslateMenu.js +0 -0
  186. /package/dist/ui/{Compose → Actions}/hooks/menu/items.d.ts +0 -0
  187. /package/dist/ui/{Compose → Actions}/hooks/menu/items.js +0 -0
  188. /package/dist/ui/{Compose → Actions}/hooks/menu/itemsMap.d.ts +0 -0
  189. /package/dist/ui/{Compose → Actions}/hooks/menu/itemsMap.js +0 -0
  190. /package/dist/ui/{Compose → Actions}/hooks/menu/menu.module.scss +0 -0
  191. /package/dist/ui/{Compose → Actions}/hooks/menu/useMenu.d.ts +0 -0
  192. /package/dist/ui/{Compose → Actions}/hooks/menu/useMenu.js +0 -0
  193. /package/dist/ui/{Compose → Actions}/hooks/useGenerate.d.ts +0 -0
  194. /package/dist/ui/{Compose → Actions}/hooks/useHistory.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/collections/Instructions.ts"],"sourcesContent":["import type { CollectionConfig, GroupField } from 'payload'\n\nimport { GenerationModels } from '../ai/models/index.js'\nimport { PLUGIN_INSTRUCTIONS_TABLE } from '../defaults.js'\n\nconst groupSettings = GenerationModels.reduce((fields, model) => {\n if (model.settings) {\n fields.push(model.settings)\n }\n return fields\n}, [] as GroupField[])\n\nconst modelOptions = GenerationModels.map((model) => {\n return {\n fields: model.fields,\n label: model.name,\n value: model.id,\n }\n})\n\nexport const Instructions: CollectionConfig = {\n slug: PLUGIN_INSTRUCTIONS_TABLE,\n\n // TODO: Revisit permissions, better if end user can provide this\n access: {\n create: () => true,\n read: () => true,\n update: () => true,\n },\n admin: {\n hidden: true,\n },\n fields: [\n {\n name: 'schema-path',\n type: 'text',\n admin: {\n readOnly: true,\n },\n unique: true,\n },\n {\n name: 'field-type',\n type: 'select',\n admin: {\n readOnly: true,\n },\n defaultValue: 'text',\n label: 'Field type',\n options: [\n {\n label: 'text',\n value: 'text',\n },\n {\n label: 'textarea',\n value: 'textarea',\n },\n {\n label: 'upload',\n value: 'upload',\n },\n {\n label: 'richText',\n value: 'richText',\n },\n ],\n },\n {\n name: 'model-id',\n type: 'select',\n admin: {\n components: {\n Field: {\n clientProps: {\n filterByField: 'field-type',\n options: modelOptions,\n },\n path: '@ai-stack/payloadcms/fields#SelectField',\n },\n },\n },\n label: 'Model',\n options: modelOptions.map((option) => {\n return {\n label: option.label,\n value: option.value,\n }\n }),\n },\n {\n name: 'prompt',\n type: 'textarea',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/fields#PromptEditorField',\n },\n },\n },\n ...groupSettings,\n ],\n hooks: {\n beforeChange: [\n (req) => {\n if (req.data['openai-gpt-object-settings']?.layout?.length === 0) {\n // TODO: why??\n req.data['openai-gpt-object-settings'].layout = ''\n }\n return req.data\n },\n ],\n },\n}\n"],"names":["GenerationModels","PLUGIN_INSTRUCTIONS_TABLE","groupSettings","reduce","fields","model","settings","push","modelOptions","map","label","name","value","id","Instructions","slug","access","create","read","update","admin","hidden","type","readOnly","unique","defaultValue","options","components","Field","clientProps","filterByField","path","option","hooks","beforeChange","req","data","layout","length"],"mappings":"AAEA,SAASA,gBAAgB,QAAQ,wBAAuB;AACxD,SAASC,yBAAyB,QAAQ,iBAAgB;AAE1D,MAAMC,gBAAgBF,iBAAiBG,MAAM,CAAC,CAACC,QAAQC;IACrD,IAAIA,MAAMC,QAAQ,EAAE;QAClBF,OAAOG,IAAI,CAACF,MAAMC,QAAQ;IAC5B;IACA,OAAOF;AACT,GAAG,EAAE;AAEL,MAAMI,eAAeR,iBAAiBS,GAAG,CAAC,CAACJ;IACzC,OAAO;QACLD,QAAQC,MAAMD,MAAM;QACpBM,OAAOL,MAAMM,IAAI;QACjBC,OAAOP,MAAMQ,EAAE;IACjB;AACF;AAEA,OAAO,MAAMC,eAAiC;IAC5CC,MAAMd;IAEN,iEAAiE;IACjEe,QAAQ;QACNC,QAAQ,IAAM;QACdC,MAAM,IAAM;QACZC,QAAQ,IAAM;IAChB;IACAC,OAAO;QACLC,QAAQ;IACV;IACAjB,QAAQ;QACN;YACEO,MAAM;YACNW,MAAM;YACNF,OAAO;gBACLG,UAAU;YACZ;YACAC,QAAQ;QACV;QACA;YACEb,MAAM;YACNW,MAAM;YACNF,OAAO;gBACLG,UAAU;YACZ;YACAE,cAAc;YACdf,OAAO;YACPgB,SAAS;gBACP;oBACEhB,OAAO;oBACPE,OAAO;gBACT;gBACA;oBACEF,OAAO;oBACPE,OAAO;gBACT;gBACA;oBACEF,OAAO;oBACPE,OAAO;gBACT;gBACA;oBACEF,OAAO;oBACPE,OAAO;gBACT;aACD;QACH;QACA;YACED,MAAM;YACNW,MAAM;YACNF,OAAO;gBACLO,YAAY;oBACVC,OAAO;wBACLC,aAAa;4BACXC,eAAe;4BACfJ,SAASlB;wBACX;wBACAuB,MAAM;oBACR;gBACF;YACF;YACArB,OAAO;YACPgB,SAASlB,aAAaC,GAAG,CAAC,CAACuB;gBACzB,OAAO;oBACLtB,OAAOsB,OAAOtB,KAAK;oBACnBE,OAAOoB,OAAOpB,KAAK;gBACrB;YACF;QACF;QACA;YACED,MAAM;YACNW,MAAM;YACNF,OAAO;gBACLO,YAAY;oBACVC,OAAO;gBACT;YACF;QACF;WACG1B;KACJ;IACD+B,OAAO;QACLC,cAAc;YACZ,CAACC;gBACC,IAAIA,IAAIC,IAAI,CAAC,6BAA6B,EAAEC,QAAQC,WAAW,GAAG;oBAChE,cAAc;oBACdH,IAAIC,IAAI,CAAC,6BAA6B,CAACC,MAAM,GAAG;gBAClD;gBACA,OAAOF,IAAIC,IAAI;YACjB;SACD;IACH;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/collections/Instructions.ts"],"sourcesContent":["import type { CollectionConfig, GroupField } from 'payload'\n\nimport { GenerationModels } from '../ai/models/index.js'\nimport { PLUGIN_INSTRUCTIONS_TABLE } from '../defaults.js'\nimport { PromptEditorField } from '../fields/PromptEditorField/PromptEditorField.js'\nimport { SelectField } from '../fields/SelectField/SelectField.js'\n\nconst groupSettings = GenerationModels.reduce((fields, model) => {\n if (model.settings) {\n fields.push(model.settings)\n }\n return fields\n}, [] as GroupField[])\n\nconst modelOptions = GenerationModels.map((model) => {\n return {\n fields: model.fields,\n label: model.name,\n value: model.id,\n }\n})\n\nexport const Instructions: CollectionConfig = {\n slug: PLUGIN_INSTRUCTIONS_TABLE,\n\n // TODO: Revisit permissions, better if end user can provide this\n access: {\n create: () => true,\n read: () => true,\n update: () => true,\n },\n admin: {\n hidden: true,\n },\n fields: [\n {\n name: 'schema-path',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n unique: true,\n },\n {\n name: 'field-type',\n type: 'select',\n admin: {\n hidden: true,\n readOnly: true,\n },\n defaultValue: 'text',\n label: 'Field type',\n options: [\n {\n label: 'text',\n value: 'text',\n },\n {\n label: 'textarea',\n value: 'textarea',\n },\n {\n label: 'upload',\n value: 'upload',\n },\n {\n label: 'richText',\n value: 'richText',\n },\n ],\n },\n {\n name: 'model-id',\n type: 'select',\n admin: {\n components: {\n Field: SelectField,\n },\n custom: {\n filterByField: 'field-type',\n options: modelOptions,\n },\n },\n label: 'Model',\n options: modelOptions.map((option) => {\n return {\n label: option.label,\n value: option.value,\n }\n }),\n validate: () => true,\n },\n {\n name: 'prompt',\n type: 'textarea',\n admin: {\n components: {\n Field: PromptEditorField,\n },\n },\n },\n ...groupSettings,\n ],\n hooks: {\n beforeChange: [\n (req) => {\n if (req.data['openai-gpt-object-settings']?.layout?.length === 0) {\n // TODO: why??\n req.data['openai-gpt-object-settings'].layout = ''\n }\n return req.data\n },\n ],\n },\n}\n"],"names":["GenerationModels","PLUGIN_INSTRUCTIONS_TABLE","PromptEditorField","SelectField","groupSettings","reduce","fields","model","settings","push","modelOptions","map","label","name","value","id","Instructions","slug","access","create","read","update","admin","hidden","type","readOnly","unique","defaultValue","options","components","Field","custom","filterByField","option","validate","hooks","beforeChange","req","data","layout","length"],"mappings":"AAEA,SAASA,gBAAgB,QAAQ,wBAAuB;AACxD,SAASC,yBAAyB,QAAQ,iBAAgB;AAC1D,SAASC,iBAAiB,QAAQ,mDAAkD;AACpF,SAASC,WAAW,QAAQ,uCAAsC;AAElE,MAAMC,gBAAgBJ,iBAAiBK,MAAM,CAAC,CAACC,QAAQC;IACrD,IAAIA,MAAMC,QAAQ,EAAE;QAClBF,OAAOG,IAAI,CAACF,MAAMC,QAAQ;IAC5B;IACA,OAAOF;AACT,GAAG,EAAE;AAEL,MAAMI,eAAeV,iBAAiBW,GAAG,CAAC,CAACJ;IACzC,OAAO;QACLD,QAAQC,MAAMD,MAAM;QACpBM,OAAOL,MAAMM,IAAI;QACjBC,OAAOP,MAAMQ,EAAE;IACjB;AACF;AAEA,OAAO,MAAMC,eAAiC;IAC5CC,MAAMhB;IAEN,iEAAiE;IACjEiB,QAAQ;QACNC,QAAQ,IAAM;QACdC,MAAM,IAAM;QACZC,QAAQ,IAAM;IAChB;IACAC,OAAO;QACLC,QAAQ;IACV;IACAjB,QAAQ;QACN;YACEO,MAAM;YACNW,MAAM;YACNF,OAAO;gBACLC,QAAQ;gBACRE,UAAU;YACZ;YACAC,QAAQ;QACV;QACA;YACEb,MAAM;YACNW,MAAM;YACNF,OAAO;gBACLC,QAAQ;gBACRE,UAAU;YACZ;YACAE,cAAc;YACdf,OAAO;YACPgB,SAAS;gBACP;oBACEhB,OAAO;oBACPE,OAAO;gBACT;gBACA;oBACEF,OAAO;oBACPE,OAAO;gBACT;gBACA;oBACEF,OAAO;oBACPE,OAAO;gBACT;gBACA;oBACEF,OAAO;oBACPE,OAAO;gBACT;aACD;QACH;QACA;YACED,MAAM;YACNW,MAAM;YACNF,OAAO;gBACLO,YAAY;oBACVC,OAAO3B;gBACT;gBACA4B,QAAQ;oBACNC,eAAe;oBACfJ,SAASlB;gBACX;YACF;YACAE,OAAO;YACPgB,SAASlB,aAAaC,GAAG,CAAC,CAACsB;gBACzB,OAAO;oBACLrB,OAAOqB,OAAOrB,KAAK;oBACnBE,OAAOmB,OAAOnB,KAAK;gBACrB;YACF;YACAoB,UAAU,IAAM;QAClB;QACA;YACErB,MAAM;YACNW,MAAM;YACNF,OAAO;gBACLO,YAAY;oBACVC,OAAO5B;gBACT;YACF;QACF;WACGE;KACJ;IACD+B,OAAO;QACLC,cAAc;YACZ,CAACC;gBACC,IAAIA,IAAIC,IAAI,CAAC,6BAA6B,EAAEC,QAAQC,WAAW,GAAG;oBAChE,cAAc;oBACdH,IAAIC,IAAI,CAAC,6BAA6B,CAACC,MAAM,GAAG;gBAClD;gBACA,OAAOF,IAAIC,IAAI;YACjB;SACD;IACH;AACF,EAAC"}
@@ -1,6 +1,6 @@
1
1
  export declare const PLUGIN_NAME = "plugin-ai";
2
2
  export declare const PLUGIN_INSTRUCTIONS_TABLE = "plugin-ai-instructions";
3
- export declare const PLUGIN_INSTRUCTIONS_MAP_GLOBAL = "plugin-ai-instructions-map";
3
+ export declare const PLUGIN_INSTRUCTIONS_MAP_GLOBAL = "plugin-ai-plugin-ai-instructions-map";
4
4
  export declare const PLUGIN_LEXICAL_EDITOR_FEATURE = "plugin-ai-actions-feature";
5
5
  export declare const PLUGIN_API_ENDPOINT_BASE = "/plugin-ai";
6
6
  export declare const PLUGIN_API_ENDPOINT_GENERATE = "/plugin-ai/generate";
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,cAAc,CAAA;AACtC,eAAO,MAAM,yBAAyB,2BAAgC,CAAA;AACtE,eAAO,MAAM,8BAA8B,+BAAqC,CAAA;AAChF,eAAO,MAAM,6BAA6B,8BAAmC,CAAA;AAG7E,eAAO,MAAM,wBAAwB,eAAoB,CAAA;AACzD,eAAO,MAAM,4BAA4B,wBAAyC,CAAA;AAClF,eAAO,MAAM,mCAAmC,+BAA2C,CAAA;AAG3F,eAAO,MAAM,2BAA2B,gBAAgB,CAAA;AACxD,eAAO,MAAM,8BAA8B,6BAA6B,CAAA"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,cAAc,CAAA;AACtC,eAAO,MAAM,yBAAyB,2BAAgC,CAAA;AACtE,eAAO,MAAM,8BAA8B,yCAAoD,CAAA;AAC/F,eAAO,MAAM,6BAA6B,8BAAmC,CAAA;AAG7E,eAAO,MAAM,wBAAwB,eAAoB,CAAA;AACzD,eAAO,MAAM,4BAA4B,wBAAyC,CAAA;AAClF,eAAO,MAAM,mCAAmC,+BAA2C,CAAA;AAG3F,eAAO,MAAM,2BAA2B,gBAAgB,CAAA;AACxD,eAAO,MAAM,8BAA8B,6BAA6B,CAAA"}
package/dist/defaults.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export const PLUGIN_NAME = 'plugin-ai';
2
2
  export const PLUGIN_INSTRUCTIONS_TABLE = `${PLUGIN_NAME}-instructions`;
3
- export const PLUGIN_INSTRUCTIONS_MAP_GLOBAL = `${PLUGIN_INSTRUCTIONS_TABLE}-map`;
3
+ export const PLUGIN_INSTRUCTIONS_MAP_GLOBAL = `${PLUGIN_NAME}-${PLUGIN_INSTRUCTIONS_TABLE}-map`;
4
4
  export const PLUGIN_LEXICAL_EDITOR_FEATURE = `${PLUGIN_NAME}-actions-feature`;
5
5
  // Endpoint defaults
6
6
  export const PLUGIN_API_ENDPOINT_BASE = `/${PLUGIN_NAME}`;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/defaults.ts"],"sourcesContent":["export const PLUGIN_NAME = 'plugin-ai'\nexport const PLUGIN_INSTRUCTIONS_TABLE = `${PLUGIN_NAME}-instructions`\nexport const PLUGIN_INSTRUCTIONS_MAP_GLOBAL = `${PLUGIN_INSTRUCTIONS_TABLE}-map`\nexport const PLUGIN_LEXICAL_EDITOR_FEATURE = `${PLUGIN_NAME}-actions-feature`\n\n// Endpoint defaults\nexport const PLUGIN_API_ENDPOINT_BASE = `/${PLUGIN_NAME}`\nexport const PLUGIN_API_ENDPOINT_GENERATE = `${PLUGIN_API_ENDPOINT_BASE}/generate`\nexport const PLUGIN_API_ENDPOINT_GENERATE_UPLOAD = `${PLUGIN_API_ENDPOINT_GENERATE}/upload`\n\n// LLM Settings\nexport const PLUGIN_DEFAULT_OPENAI_MODEL = `gpt-4o-mini`\nexport const PLUGIN_DEFAULT_ANTHROPIC_MODEL = `claude-3-sonnet-20240229`\n"],"names":["PLUGIN_NAME","PLUGIN_INSTRUCTIONS_TABLE","PLUGIN_INSTRUCTIONS_MAP_GLOBAL","PLUGIN_LEXICAL_EDITOR_FEATURE","PLUGIN_API_ENDPOINT_BASE","PLUGIN_API_ENDPOINT_GENERATE","PLUGIN_API_ENDPOINT_GENERATE_UPLOAD","PLUGIN_DEFAULT_OPENAI_MODEL","PLUGIN_DEFAULT_ANTHROPIC_MODEL"],"mappings":"AAAA,OAAO,MAAMA,cAAc,YAAW;AACtC,OAAO,MAAMC,4BAA4B,GAAGD,YAAY,aAAa,CAAC,CAAA;AACtE,OAAO,MAAME,iCAAiC,GAAGD,0BAA0B,IAAI,CAAC,CAAA;AAChF,OAAO,MAAME,gCAAgC,GAAGH,YAAY,gBAAgB,CAAC,CAAA;AAE7E,oBAAoB;AACpB,OAAO,MAAMI,2BAA2B,CAAC,CAAC,EAAEJ,aAAa,CAAA;AACzD,OAAO,MAAMK,+BAA+B,GAAGD,yBAAyB,SAAS,CAAC,CAAA;AAClF,OAAO,MAAME,sCAAsC,GAAGD,6BAA6B,OAAO,CAAC,CAAA;AAE3F,eAAe;AACf,OAAO,MAAME,8BAA8B,CAAC,WAAW,CAAC,CAAA;AACxD,OAAO,MAAMC,iCAAiC,CAAC,wBAAwB,CAAC,CAAA"}
1
+ {"version":3,"sources":["../src/defaults.ts"],"sourcesContent":["export const PLUGIN_NAME = 'plugin-ai'\nexport const PLUGIN_INSTRUCTIONS_TABLE = `${PLUGIN_NAME}-instructions`\nexport const PLUGIN_INSTRUCTIONS_MAP_GLOBAL = `${PLUGIN_NAME}-${PLUGIN_INSTRUCTIONS_TABLE}-map`\nexport const PLUGIN_LEXICAL_EDITOR_FEATURE = `${PLUGIN_NAME}-actions-feature`\n\n// Endpoint defaults\nexport const PLUGIN_API_ENDPOINT_BASE = `/${PLUGIN_NAME}`\nexport const PLUGIN_API_ENDPOINT_GENERATE = `${PLUGIN_API_ENDPOINT_BASE}/generate`\nexport const PLUGIN_API_ENDPOINT_GENERATE_UPLOAD = `${PLUGIN_API_ENDPOINT_GENERATE}/upload`\n\n// LLM Settings\nexport const PLUGIN_DEFAULT_OPENAI_MODEL = `gpt-4o-mini`\nexport const PLUGIN_DEFAULT_ANTHROPIC_MODEL = `claude-3-sonnet-20240229`\n"],"names":["PLUGIN_NAME","PLUGIN_INSTRUCTIONS_TABLE","PLUGIN_INSTRUCTIONS_MAP_GLOBAL","PLUGIN_LEXICAL_EDITOR_FEATURE","PLUGIN_API_ENDPOINT_BASE","PLUGIN_API_ENDPOINT_GENERATE","PLUGIN_API_ENDPOINT_GENERATE_UPLOAD","PLUGIN_DEFAULT_OPENAI_MODEL","PLUGIN_DEFAULT_ANTHROPIC_MODEL"],"mappings":"AAAA,OAAO,MAAMA,cAAc,YAAW;AACtC,OAAO,MAAMC,4BAA4B,CAAC,EAAED,YAAY,aAAa,CAAC,CAAA;AACtE,OAAO,MAAME,iCAAiC,CAAC,EAAEF,YAAY,CAAC,EAAEC,0BAA0B,IAAI,CAAC,CAAA;AAC/F,OAAO,MAAME,gCAAgC,CAAC,EAAEH,YAAY,gBAAgB,CAAC,CAAA;AAE7E,oBAAoB;AACpB,OAAO,MAAMI,2BAA2B,CAAC,CAAC,EAAEJ,YAAY,CAAC,CAAA;AACzD,OAAO,MAAMK,+BAA+B,CAAC,EAAED,yBAAyB,SAAS,CAAC,CAAA;AAClF,OAAO,MAAME,sCAAsC,CAAC,EAAED,6BAA6B,OAAO,CAAC,CAAA;AAE3F,eAAe;AACf,OAAO,MAAME,8BAA8B,CAAC,WAAW,CAAC,CAAA;AACxD,OAAO,MAAMC,iCAAiC,CAAC,wBAAwB,CAAC,CAAA"}
@@ -1,3 +1,3 @@
1
- import type { Endpoints } from '../types.js';
1
+ import { Endpoints } from '../types.js';
2
2
  export declare const endpoints: Endpoints;
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/endpoints/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAmB,SAAS,EAAE,MAAM,aAAa,CAAA;AAsE7D,eAAO,MAAM,SAAS,EAAE,SAsIvB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/endpoints/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAmB,SAAS,EAAE,MAAM,aAAa,CAAA;AAiHxD,eAAO,MAAM,SAAS,EAAE,SAwIvB,CAAA"}
@@ -1,22 +1,29 @@
1
- import { lexicalSchema } from '../ai/schemas/lexical.schema.js';
1
+ import Handlebars from 'handlebars';
2
+ import asyncHelpers from 'handlebars-async-helpers';
2
3
  import { GenerationModels } from '../ai/models/index.js';
3
4
  import { defaultPrompts } from '../ai/prompts.js';
4
5
  import { PLUGIN_API_ENDPOINT_GENERATE, PLUGIN_API_ENDPOINT_GENERATE_UPLOAD, PLUGIN_INSTRUCTIONS_TABLE, PLUGIN_NAME } from '../defaults.js';
5
- import { registerEditorHelper } from '../libraries/handlebars/helpers.js';
6
- import { handlebarsHelpersMap } from '../libraries/handlebars/helpersMap.js';
7
- import { replacePlaceholders } from '../libraries/handlebars/replacePlaceholders.js';
8
- const assignPrompt = async (action, { type, actionParams, context, field, layout, systemPrompt = '', template })=>{
6
+ import { getFieldBySchemaPath } from '../utilities/getFieldBySchemaPath.js';
7
+ import { lexicalToHTML } from '../utilities/lexicalToHTML.js';
8
+ import { lexicalSchema } from '../ai/editor/lexical.schema.js';
9
+ const asyncHandlebars = asyncHelpers(Handlebars);
10
+ const replacePlaceholders = (prompt, values)=>{
11
+ return asyncHandlebars.compile(prompt, {
12
+ trackIds: true
13
+ })(values);
14
+ };
15
+ const assignPrompt = async (action, { type, actionParams, context, field, systemPrompt = '', template, layout })=>{
9
16
  const prompt = await replacePlaceholders(template, context);
10
- const toLexicalHTML = type === 'richText' ? handlebarsHelpersMap.toHTML.name : '';
17
+ const toLexicalHTML = type === 'richText' ? 'toLexicalHTML' : '';
11
18
  const assignedPrompts = {
12
- layout,
13
19
  prompt,
14
- system: systemPrompt
20
+ system: systemPrompt,
21
+ layout
15
22
  };
16
23
  if (action === 'Compose') {
17
24
  return assignedPrompts;
18
25
  }
19
- const { layout: getLayout, system: getSystemPrompt } = defaultPrompts.find((p)=>p.name === action);
26
+ const { system: getSystemPrompt, layout: getLayout } = defaultPrompts.find((p)=>p.name === action);
20
27
  let updatedLayout = layout;
21
28
  if (getLayout) {
22
29
  updatedLayout = getLayout();
@@ -27,12 +34,38 @@ const assignPrompt = async (action, { type, actionParams, context, field, layout
27
34
  systemPrompt
28
35
  });
29
36
  return {
30
- layout: updatedLayout,
31
- // TODO: revisit this toLexicalHTML
32
37
  prompt: await replacePlaceholders(`{{${toLexicalHTML} ${field}}}`, context),
33
- system
38
+ system,
39
+ layout: updatedLayout
34
40
  };
35
41
  };
42
+ const registerEditorHelper = (payload, schemaPath)=>{
43
+ //TODO: add autocomplete ability using handlebars template on PromptEditorField and include custom helpers in dropdown
44
+ let fieldInfo = getFieldInfo(payload.collections, schemaPath);
45
+ const schemaPathChunks = schemaPath.split('.');
46
+ asyncHandlebars.registerHelper('toLexicalHTML', async function(content, options) {
47
+ const collectionSlug = schemaPathChunks[0];
48
+ const { ids } = options;
49
+ for (const id of ids){
50
+ //TODO: Find a better way to get schemaPath of defined field in prompt editor
51
+ const path = `${collectionSlug}.${id}`;
52
+ fieldInfo = getFieldInfo(payload.collections, path);
53
+ }
54
+ const html = await lexicalToHTML(content, fieldInfo.editor?.editorConfig);
55
+ return new asyncHandlebars.SafeString(html);
56
+ });
57
+ };
58
+ const getFieldInfo = (collections, schemaPath)=>{
59
+ let fieldInfo = null;
60
+ //TODO: Only run below for enabled collections
61
+ for(const collectionsKey in collections){
62
+ const collection = collections[collectionsKey];
63
+ fieldInfo = getFieldBySchemaPath(collection.config, schemaPath);
64
+ if (fieldInfo) {
65
+ return fieldInfo;
66
+ }
67
+ }
68
+ };
36
69
  export const endpoints = {
37
70
  textarea: {
38
71
  handler: async (req)=>{
@@ -43,7 +76,7 @@ export const endpoints = {
43
76
  if (!instructionId) {
44
77
  throw new Error(`Instruction ID is required for "${PLUGIN_NAME}" to work, please check your configuration`);
45
78
  }
46
- const instructions = await req.payload.findByID({
79
+ let instructions = await req.payload.findByID({
47
80
  id: instructionId,
48
81
  collection: PLUGIN_INSTRUCTIONS_TABLE
49
82
  });
@@ -72,17 +105,17 @@ export const endpoints = {
72
105
  actionParams,
73
106
  context: contextData,
74
107
  field: fieldName,
75
- layout: modelOptions.layout,
76
108
  systemPrompt: modelOptions.system,
77
- template: promptTemplate
109
+ template: promptTemplate,
110
+ layout: modelOptions.layout
78
111
  });
79
112
  console.log('Running handler with prompts:', prompts);
80
113
  return model.handler?.(prompts.prompt, {
81
114
  ...modelOptions,
82
115
  ...opt,
116
+ system: prompts.system,
83
117
  editorSchema,
84
- layout: prompts.layout,
85
- system: prompts.system
118
+ layout: prompts.layout
86
119
  }).catch((error)=>{
87
120
  console.error('Error: endpoint - generating text:', error);
88
121
  return new Response(JSON.stringify(error.message), {
@@ -126,6 +159,7 @@ export const endpoints = {
126
159
  data: result.data,
127
160
  file: result.file
128
161
  });
162
+ console.log('assetData', assetData);
129
163
  return new Response(JSON.stringify({
130
164
  result: {
131
165
  id: assetData.id,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/endpoints/index.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport type { ActionMenuItems, Endpoints } from '../types.js'\n\nimport { lexicalSchema } from '../ai/schemas/lexical.schema.js'\nimport { GenerationModels } from '../ai/models/index.js'\nimport { defaultPrompts } from '../ai/prompts.js'\nimport {\n PLUGIN_API_ENDPOINT_GENERATE,\n PLUGIN_API_ENDPOINT_GENERATE_UPLOAD,\n PLUGIN_INSTRUCTIONS_TABLE,\n PLUGIN_NAME,\n} from '../defaults.js'\nimport { registerEditorHelper } from '../libraries/handlebars/helpers.js'\nimport { handlebarsHelpersMap } from '../libraries/handlebars/helpersMap.js'\nimport { replacePlaceholders } from '../libraries/handlebars/replacePlaceholders.js'\n\nconst assignPrompt = async (\n action: ActionMenuItems,\n {\n type,\n actionParams,\n context,\n field,\n layout,\n systemPrompt = '',\n template,\n }: {\n actionParams: Record<any, any>\n context: object\n field: string\n layout: string\n systemPrompt: string\n template: string\n type: string\n },\n) => {\n const prompt = await replacePlaceholders(template, context)\n const toLexicalHTML = type === 'richText' ? handlebarsHelpersMap.toHTML.name : ''\n const assignedPrompts = {\n layout,\n prompt,\n system: systemPrompt,\n }\n\n if (action === 'Compose') {\n return assignedPrompts\n }\n\n const { layout: getLayout, system: getSystemPrompt } = defaultPrompts.find(\n (p) => p.name === action,\n )\n\n let updatedLayout = layout\n if (getLayout) {\n updatedLayout = getLayout()\n }\n\n const system = getSystemPrompt({\n ...(actionParams || {}),\n prompt,\n systemPrompt,\n })\n\n return {\n layout: updatedLayout,\n // TODO: revisit this toLexicalHTML\n prompt: await replacePlaceholders(`{{${toLexicalHTML} ${field}}}`, context),\n system,\n }\n}\n\nexport const endpoints: Endpoints = {\n textarea: {\n handler: async (req: PayloadRequest) => {\n const data = await req.json?.()\n\n const { locale = 'en', options } = data\n const { action, actionParams, instructionId } = options\n const contextData = data.doc\n\n if (!instructionId) {\n throw new Error(\n `Instruction ID is required for \"${PLUGIN_NAME}\" to work, please check your configuration`,\n )\n }\n\n const instructions = await req.payload.findByID({\n id: instructionId,\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n })\n\n const { collections } = req.payload.config\n const collection = collections.find(\n (collection) => collection.slug === PLUGIN_INSTRUCTIONS_TABLE,\n )\n\n const { editorConfig: { schema: editorSchema = lexicalSchema() } = {} } =\n collection.custom || {}\n\n const { prompt: promptTemplate = '' } = instructions\n\n const schemaPath = instructions['schema-path'] as string\n const fieldName = schemaPath?.split('.').pop()\n\n registerEditorHelper(req.payload, schemaPath)\n\n const { defaultLocale, locales = [] } = req.payload.config.localization || {}\n const localeData = locales.find((l) => {\n return l.code === locale\n })\n\n const localeInfo = localeData?.label[defaultLocale] || locale\n\n //TODO: remove this\n const opt = {\n locale: localeInfo,\n modelId: instructions['model-id'],\n }\n\n const model = GenerationModels.find((model) => model.id === opt.modelId)\n const settingsName = model.settings?.name\n const modelOptions = instructions[settingsName] as {\n layout: string\n system: string\n }\n\n const prompts = await assignPrompt(action, {\n type: instructions['field-type'] as string,\n actionParams,\n context: contextData,\n field: fieldName,\n layout: modelOptions.layout,\n systemPrompt: modelOptions.system,\n template: promptTemplate as string,\n })\n\n console.log('Running handler with prompts:', prompts)\n return model\n .handler?.(prompts.prompt, {\n ...modelOptions,\n ...opt,\n editorSchema,\n layout: prompts.layout,\n system: prompts.system,\n })\n .catch((error) => {\n console.error('Error: endpoint - generating text:', error)\n return new Response(JSON.stringify(error.message), { status: 500 })\n })\n },\n method: 'post',\n path: PLUGIN_API_ENDPOINT_GENERATE,\n },\n upload: {\n handler: async (req: PayloadRequest) => {\n const data = await req.json?.()\n\n const { options } = data\n const { instructionId, uploadCollectionSlug } = options\n const contextData = data.doc\n\n let instructions = { 'model-id': '', prompt: '' }\n\n if (instructionId) {\n // @ts-expect-error\n instructions = await req.payload.findByID({\n id: instructionId,\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n })\n }\n\n const { prompt: promptTemplate = '' } = instructions\n const schemaPath = instructions['schema-path']\n\n registerEditorHelper(req.payload, schemaPath)\n\n const text = await replacePlaceholders(promptTemplate, contextData)\n const modelId = instructions['model-id']\n console.log('prompt text:', text)\n\n const model = GenerationModels.find((model) => model.id === modelId)\n const settingsName = model.settings?.name\n const modelOptions = instructions[settingsName] || {}\n console.log('modelOptions', modelOptions)\n\n const result = await model.handler?.(text, modelOptions)\n\n const assetData = await req.payload.create({\n collection: uploadCollectionSlug,\n data: result.data,\n file: result.file,\n })\n\n return new Response(\n JSON.stringify({\n result: {\n id: assetData.id,\n alt: assetData.alt,\n },\n }),\n )\n },\n method: 'post',\n path: PLUGIN_API_ENDPOINT_GENERATE_UPLOAD,\n },\n}\n"],"names":["lexicalSchema","GenerationModels","defaultPrompts","PLUGIN_API_ENDPOINT_GENERATE","PLUGIN_API_ENDPOINT_GENERATE_UPLOAD","PLUGIN_INSTRUCTIONS_TABLE","PLUGIN_NAME","registerEditorHelper","handlebarsHelpersMap","replacePlaceholders","assignPrompt","action","type","actionParams","context","field","layout","systemPrompt","template","prompt","toLexicalHTML","toHTML","name","assignedPrompts","system","getLayout","getSystemPrompt","find","p","updatedLayout","endpoints","textarea","handler","req","data","json","locale","options","instructionId","contextData","doc","Error","instructions","payload","findByID","id","collection","collections","config","slug","editorConfig","schema","editorSchema","custom","promptTemplate","schemaPath","fieldName","split","pop","defaultLocale","locales","localization","localeData","l","code","localeInfo","label","opt","modelId","model","settingsName","settings","modelOptions","prompts","console","log","catch","error","Response","JSON","stringify","message","status","method","path","upload","uploadCollectionSlug","text","result","assetData","create","file","alt"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/endpoints/index.ts"],"sourcesContent":["import type { SerializedEditorState } from 'lexical'\nimport type { BasePayload, PayloadRequest } from 'payload'\n\nimport Handlebars from 'handlebars'\nimport asyncHelpers from 'handlebars-async-helpers'\n\nimport { ActionMenuItems, Endpoints } from '../types.js'\n\nimport { GenerationModels } from '../ai/models/index.js'\nimport { defaultPrompts } from '../ai/prompts.js'\nimport {\n PLUGIN_API_ENDPOINT_GENERATE,\n PLUGIN_API_ENDPOINT_GENERATE_UPLOAD,\n PLUGIN_INSTRUCTIONS_TABLE,\n PLUGIN_NAME,\n} from '../defaults.js'\nimport { getFieldBySchemaPath } from '../utilities/getFieldBySchemaPath.js'\nimport { lexicalToHTML } from '../utilities/lexicalToHTML.js'\nimport { lexicalSchema } from '../ai/editor/lexical.schema.js'\nimport { generateText } from 'ai'\nimport { openai } from '@ai-sdk/openai'\n\nconst asyncHandlebars = asyncHelpers(Handlebars)\n\nconst replacePlaceholders = (prompt: string, values: object) => {\n return asyncHandlebars.compile(prompt, { trackIds: true })(values)\n}\n\nconst assignPrompt = async (\n action: ActionMenuItems,\n {\n type,\n actionParams,\n context,\n field,\n systemPrompt = '',\n template,\n layout,\n }: {\n actionParams: Record<any, any>\n context: object\n field: string\n systemPrompt: string\n template: string\n type: string\n layout: string\n },\n) => {\n const prompt = await replacePlaceholders(template, context)\n\n const toLexicalHTML = type === 'richText' ? 'toLexicalHTML' : ''\n\n const assignedPrompts = {\n prompt,\n system: systemPrompt,\n layout,\n }\n\n if (action === 'Compose') {\n return assignedPrompts\n }\n\n const { system: getSystemPrompt, layout: getLayout } = defaultPrompts.find(\n (p) => p.name === action,\n )\n\n let updatedLayout = layout\n if (getLayout) {\n updatedLayout = getLayout()\n }\n\n const system = getSystemPrompt({\n ...(actionParams || {}),\n prompt,\n systemPrompt,\n })\n\n return {\n prompt: await replacePlaceholders(`{{${toLexicalHTML} ${field}}}`, context),\n system,\n layout: updatedLayout,\n }\n}\n\nconst 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 'toLexicalHTML',\n async function (content: SerializedEditorState, options) {\n const collectionSlug = schemaPathChunks[0]\n const { ids } = options\n for (const id of ids) {\n //TODO: Find a better way to get schemaPath of defined field in prompt editor\n const path = `${collectionSlug}.${id}`\n fieldInfo = getFieldInfo(payload.collections, path)\n }\n\n const html = await lexicalToHTML(content, fieldInfo.editor?.editorConfig)\n return new asyncHandlebars.SafeString(html)\n },\n )\n}\n\nconst getFieldInfo = (collections: BasePayload['collections'], schemaPath: string) => {\n let fieldInfo = null\n //TODO: Only run below for enabled collections\n for (const collectionsKey in collections) {\n const collection = collections[collectionsKey]\n fieldInfo = getFieldBySchemaPath(collection.config, schemaPath)\n if (fieldInfo) {\n return fieldInfo\n }\n }\n}\n\nexport const endpoints: Endpoints = {\n textarea: {\n handler: async (req: PayloadRequest) => {\n const data = await req.json?.()\n\n const { locale = 'en', options } = data\n const { action, actionParams, instructionId } = options\n const contextData = data.doc\n\n if (!instructionId) {\n throw new Error(\n `Instruction ID is required for \"${PLUGIN_NAME}\" to work, please check your configuration`,\n )\n }\n\n let instructions = await req.payload.findByID({\n id: instructionId,\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n })\n\n const { collections } = req.payload.config\n const collection = collections.find(\n (collection) => collection.slug === PLUGIN_INSTRUCTIONS_TABLE,\n )\n\n const { editorConfig: { schema: editorSchema = lexicalSchema() } = {} } =\n collection.custom || {}\n\n const { prompt: promptTemplate = '' } = instructions\n\n const schemaPath = instructions['schema-path'] as string\n const fieldName = schemaPath?.split('.').pop()\n\n registerEditorHelper(req.payload, schemaPath)\n\n const { defaultLocale, locales = [] } = req.payload.config.localization || {}\n const localeData = locales.find((l) => {\n return l.code === locale\n })\n\n const localeInfo = localeData?.label[defaultLocale] || locale\n\n //TODO: remove this\n const opt = {\n locale: localeInfo,\n modelId: instructions['model-id'],\n }\n\n const model = GenerationModels.find((model) => model.id === opt.modelId)\n const settingsName = model.settings?.name\n const modelOptions = instructions[settingsName] as {\n system: string\n layout: string\n }\n\n const prompts = await assignPrompt(action, {\n type: instructions['field-type'] as string,\n actionParams,\n context: contextData,\n field: fieldName,\n systemPrompt: modelOptions.system,\n template: promptTemplate as string,\n layout: modelOptions.layout,\n })\n\n console.log('Running handler with prompts:', prompts)\n return model\n .handler?.(prompts.prompt, {\n ...modelOptions,\n ...opt,\n system: prompts.system,\n editorSchema,\n layout: prompts.layout,\n })\n .catch((error) => {\n console.error('Error: endpoint - generating text:', error)\n return new Response(JSON.stringify(error.message), { status: 500 })\n })\n },\n method: 'post',\n path: PLUGIN_API_ENDPOINT_GENERATE,\n },\n upload: {\n handler: async (req: PayloadRequest) => {\n const data = await req.json?.()\n\n const { options } = data\n const { instructionId, uploadCollectionSlug } = options\n const contextData = data.doc\n\n let instructions = { 'model-id': '', prompt: '' }\n\n if (instructionId) {\n // @ts-expect-error\n instructions = await req.payload.findByID({\n id: instructionId,\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n })\n }\n\n const { prompt: promptTemplate = '' } = instructions\n const schemaPath = instructions['schema-path']\n\n registerEditorHelper(req.payload, schemaPath)\n\n const text = await replacePlaceholders(promptTemplate, contextData)\n const modelId = instructions['model-id']\n console.log('prompt text:', text)\n\n const model = GenerationModels.find((model) => model.id === modelId)\n const settingsName = model.settings?.name\n const modelOptions = instructions[settingsName] || {}\n console.log('modelOptions', modelOptions)\n\n const result = await model.handler?.(text, modelOptions)\n\n const assetData = await req.payload.create({\n collection: uploadCollectionSlug,\n data: result.data,\n file: result.file,\n })\n\n console.log('assetData', assetData)\n\n return new Response(\n JSON.stringify({\n result: {\n id: assetData.id,\n alt: assetData.alt,\n },\n }),\n )\n },\n method: 'post',\n path: PLUGIN_API_ENDPOINT_GENERATE_UPLOAD,\n },\n}\n"],"names":["Handlebars","asyncHelpers","GenerationModels","defaultPrompts","PLUGIN_API_ENDPOINT_GENERATE","PLUGIN_API_ENDPOINT_GENERATE_UPLOAD","PLUGIN_INSTRUCTIONS_TABLE","PLUGIN_NAME","getFieldBySchemaPath","lexicalToHTML","lexicalSchema","asyncHandlebars","replacePlaceholders","prompt","values","compile","trackIds","assignPrompt","action","type","actionParams","context","field","systemPrompt","template","layout","toLexicalHTML","assignedPrompts","system","getSystemPrompt","getLayout","find","p","name","updatedLayout","registerEditorHelper","payload","schemaPath","fieldInfo","getFieldInfo","collections","schemaPathChunks","split","registerHelper","content","options","collectionSlug","ids","id","path","html","editor","editorConfig","SafeString","collectionsKey","collection","config","endpoints","textarea","handler","req","data","json","locale","instructionId","contextData","doc","Error","instructions","findByID","slug","schema","editorSchema","custom","promptTemplate","fieldName","pop","defaultLocale","locales","localization","localeData","l","code","localeInfo","label","opt","modelId","model","settingsName","settings","modelOptions","prompts","console","log","catch","error","Response","JSON","stringify","message","status","method","upload","uploadCollectionSlug","text","result","assetData","create","file","alt"],"mappings":"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"}
@@ -1,4 +1,2 @@
1
- export { PromptEditorField } from '../fields/PromptEditorField/PromptEditorField.js';
2
- export { SelectField } from '../fields/SelectField/SelectField.js';
3
- export { ComposeField } from '../fields/ComposeField/ComposeField.js';
1
+ export {};
4
2
  //# sourceMappingURL=fields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/exports/fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAA;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA"}
1
+ {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/exports/fields.ts"],"names":[],"mappings":""}
@@ -1,5 +1,2 @@
1
- export { PromptEditorField } from '../fields/PromptEditorField/PromptEditorField.js';
2
- export { SelectField } from '../fields/SelectField/SelectField.js';
3
- export { ComposeField } from '../fields/ComposeField/ComposeField.js';
4
1
 
5
2
  //# sourceMappingURL=fields.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/exports/fields.ts"],"sourcesContent":["export { PromptEditorField } from '../fields/PromptEditorField/PromptEditorField.js'\nexport { SelectField } from '../fields/SelectField/SelectField.js'\nexport { ComposeField } from '../fields/ComposeField/ComposeField.js'\n"],"names":["PromptEditorField","SelectField","ComposeField"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,mDAAkD;AACpF,SAASC,WAAW,QAAQ,uCAAsC;AAClE,SAASC,YAAY,QAAQ,yCAAwC"}
1
+ {"version":3,"sources":["../../src/exports/fields.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { DescriptionComponent } from 'payload';
2
+ export declare const DescriptionField: DescriptionComponent;
3
+ //# sourceMappingURL=DescriptionField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DescriptionField.d.ts","sourceRoot":"","sources":["../../../src/fields/DescriptionField/DescriptionField.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAG9C,eAAO,MAAM,gBAAgB,EAAE,oBAW9B,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { withMergedProps } from '@payloadcms/ui/shared';
2
+ import { DescriptionFieldComponent } from './DescriptionFieldComponent.js';
3
+ // @ts-ignore
4
+ export const DescriptionField = (options)=>{
5
+ const mergedPropsFunc = withMergedProps({
6
+ Component: DescriptionFieldComponent,
7
+ sanitizeServerOnlyProps: true,
8
+ toMergeIntoProps: options
9
+ });
10
+ // TODO: Might use this in order to add field entry for Instructions on plugin Init
11
+ mergedPropsFunc.displayName = 'DescriptionField';
12
+ return mergedPropsFunc;
13
+ };
14
+
15
+ //# sourceMappingURL=DescriptionField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/fields/DescriptionField/DescriptionField.tsx"],"sourcesContent":["import { withMergedProps } from '@payloadcms/ui/shared'\n\nimport { DescriptionFieldComponent } from './DescriptionFieldComponent.js'\nimport { DescriptionComponent } from 'payload'\n\n// @ts-ignore\nexport const DescriptionField: DescriptionComponent = (options: any) => {\n const mergedPropsFunc = withMergedProps({\n Component: DescriptionFieldComponent,\n sanitizeServerOnlyProps: true,\n toMergeIntoProps: options,\n })\n\n // TODO: Might use this in order to add field entry for Instructions on plugin Init\n mergedPropsFunc.displayName = 'DescriptionField'\n\n return mergedPropsFunc\n}\n"],"names":["withMergedProps","DescriptionFieldComponent","DescriptionField","options","mergedPropsFunc","Component","sanitizeServerOnlyProps","toMergeIntoProps","displayName"],"mappings":"AAAA,SAASA,eAAe,QAAQ,wBAAuB;AAEvD,SAASC,yBAAyB,QAAQ,iCAAgC;AAG1E,aAAa;AACb,OAAO,MAAMC,mBAAyC,CAACC;IACrD,MAAMC,kBAAkBJ,gBAAgB;QACtCK,WAAWJ;QACXK,yBAAyB;QACzBC,kBAAkBJ;IACpB;IAEA,mFAAmF;IACnFC,gBAAgBI,WAAW,GAAG;IAE9B,OAAOJ;AACT,EAAC"}
@@ -0,0 +1,4 @@
1
+ import type { FieldDescriptionProps } from 'payload';
2
+ import React from 'react';
3
+ export declare const DescriptionFieldComponent: React.FC<FieldDescriptionProps>;
4
+ //# sourceMappingURL=DescriptionFieldComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DescriptionFieldComponent.d.ts","sourceRoot":"","sources":["../../../src/fields/DescriptionField/DescriptionFieldComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAGpD,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAOrE,CAAA"}
@@ -2,17 +2,17 @@
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { useFieldProps } from '@payloadcms/ui';
4
4
  import React from 'react';
5
- import { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js';
6
- import { Compose } from '../../ui/Compose/Compose.js';
7
- export const ComposeField = (props)=>{
5
+ import { useInstructions } from '../../providers/InstructionsProvider/hook.js';
6
+ import { Actions } from '../../ui/Actions/Actions.js';
7
+ export const DescriptionFieldComponent = (props)=>{
8
8
  const { schemaPath } = useFieldProps();
9
9
  const { id: instructionId } = useInstructions({
10
10
  path: schemaPath
11
11
  });
12
- return /*#__PURE__*/ _jsx(Compose, {
12
+ return /*#__PURE__*/ _jsx(Actions, {
13
13
  descriptionProps: props,
14
14
  instructionId: instructionId
15
15
  });
16
16
  };
17
17
 
18
- //# sourceMappingURL=ComposeField.js.map
18
+ //# sourceMappingURL=DescriptionFieldComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/fields/DescriptionField/DescriptionFieldComponent.tsx"],"sourcesContent":["'use client'\n\nimport type { FieldDescriptionProps } from 'payload'\n\nimport { useFieldProps } from '@payloadcms/ui'\nimport React from 'react'\n\nimport { useInstructions } from '../../providers/InstructionsProvider/hook.js'\nimport { Actions } from '../../ui/Actions/Actions.js'\n\nexport const DescriptionFieldComponent: React.FC<FieldDescriptionProps> = (props) => {\n const { schemaPath } = useFieldProps()\n const { id: instructionId } = useInstructions({\n path: schemaPath,\n })\n\n return <Actions descriptionProps={props} instructionId={instructionId} />\n}\n"],"names":["useFieldProps","React","useInstructions","Actions","DescriptionFieldComponent","props","schemaPath","id","instructionId","path","descriptionProps"],"mappings":"AAAA;;AAIA,SAASA,aAAa,QAAQ,iBAAgB;AAC9C,OAAOC,WAAW,QAAO;AAEzB,SAASC,eAAe,QAAQ,+CAA8C;AAC9E,SAASC,OAAO,QAAQ,8BAA6B;AAErD,OAAO,MAAMC,4BAA6D,CAACC;IACzE,MAAM,EAAEC,UAAU,EAAE,GAAGN;IACvB,MAAM,EAAEO,IAAIC,aAAa,EAAE,GAAGN,gBAAgB;QAC5CO,MAAMH;IACR;IAEA,qBAAO,KAACH;QAAQO,kBAAkBL;QAAOG,eAAeA;;AAC1D,EAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const ActionsFeatureComponent: () => import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=ActionsFeatureComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionsFeatureComponent.d.ts","sourceRoot":"","sources":["../../../src/fields/LexicalEditor/ActionsFeatureComponent.tsx"],"names":[],"mappings":"AAKA,eAAO,MAAM,uBAAuB,+CAQnC,CAAA"}
@@ -1,15 +1,15 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useFieldProps } from '@payloadcms/ui';
3
- import { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js';
4
- import { Compose } from '../../ui/Compose/Compose.js';
5
- export const ComposeFeatureComponent = ()=>{
3
+ import { useInstructions } from '../../providers/InstructionsProvider/hook.js';
4
+ import { Actions } from '../../ui/Actions/Actions.js';
5
+ export const ActionsFeatureComponent = ()=>{
6
6
  const { schemaPath } = useFieldProps();
7
7
  const { id: instructionId } = useInstructions({
8
8
  path: schemaPath
9
9
  });
10
- return /*#__PURE__*/ _jsx(Compose, {
10
+ return /*#__PURE__*/ _jsx(Actions, {
11
11
  instructionId: instructionId
12
12
  });
13
13
  };
14
14
 
15
- //# sourceMappingURL=ComposeFeatureComponent.js.map
15
+ //# sourceMappingURL=ActionsFeatureComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/fields/LexicalEditor/ActionsFeatureComponent.tsx"],"sourcesContent":["import { useFieldProps } from '@payloadcms/ui'\n\nimport { useInstructions } from '../../providers/InstructionsProvider/hook.js'\nimport { Actions } from '../../ui/Actions/Actions.js'\n\nexport const ActionsFeatureComponent = () => {\n const { schemaPath } = useFieldProps()\n\n const { id: instructionId } = useInstructions({\n path: schemaPath,\n })\n\n return <Actions instructionId={instructionId} />\n}\n"],"names":["useFieldProps","useInstructions","Actions","ActionsFeatureComponent","schemaPath","id","instructionId","path"],"mappings":";AAAA,SAASA,aAAa,QAAQ,iBAAgB;AAE9C,SAASC,eAAe,QAAQ,+CAA8C;AAC9E,SAASC,OAAO,QAAQ,8BAA6B;AAErD,OAAO,MAAMC,0BAA0B;IACrC,MAAM,EAAEC,UAAU,EAAE,GAAGJ;IAEvB,MAAM,EAAEK,IAAIC,aAAa,EAAE,GAAGL,gBAAgB;QAC5CM,MAAMH;IACR;IAEA,qBAAO,KAACF;QAAQI,eAAeA;;AACjC,EAAC"}
@@ -1,2 +1,5 @@
1
- export declare const LexicalEditorFeatureClient: import("@payloadcms/richtext-lexical").FeatureProviderProviderClient<undefined, undefined>;
1
+ export declare const LexicalEditorFeatureClient: import("react").FC<{
2
+ featureKey: string;
3
+ order: number;
4
+ }>;
2
5
  //# sourceMappingURL=feature.client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature.client.d.ts","sourceRoot":"","sources":["../../../src/fields/LexicalEditor/feature.client.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,0BAA0B,4FAOrC,CAAA"}
1
+ {"version":3,"file":"feature.client.d.ts","sourceRoot":"","sources":["../../../src/fields/LexicalEditor/feature.client.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,0BAA0B;;;EAOrC,CAAA"}
@@ -1,10 +1,10 @@
1
1
  'use client';
2
2
  import { createClientFeature } from '@payloadcms/richtext-lexical/client';
3
- import { ComposeFeatureComponent } from './ComposeFeatureComponent.js';
3
+ import { ActionsFeatureComponent } from './ActionsFeatureComponent.js';
4
4
  export const LexicalEditorFeatureClient = createClientFeature({
5
5
  plugins: [
6
6
  {
7
- Component: ComposeFeatureComponent,
7
+ Component: ActionsFeatureComponent,
8
8
  position: 'belowContainer'
9
9
  }
10
10
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/LexicalEditor/feature.client.tsx"],"sourcesContent":["'use client'\n\nimport { createClientFeature } from '@payloadcms/richtext-lexical/client'\n\nimport { ComposeFeatureComponent } from './ComposeFeatureComponent.js'\n\nexport const LexicalEditorFeatureClient = createClientFeature({\n plugins: [\n {\n Component: ComposeFeatureComponent,\n position: 'belowContainer',\n },\n ],\n})\n"],"names":["createClientFeature","ComposeFeatureComponent","LexicalEditorFeatureClient","plugins","Component","position"],"mappings":"AAAA;AAEA,SAASA,mBAAmB,QAAQ,sCAAqC;AAEzE,SAASC,uBAAuB,QAAQ,+BAA8B;AAEtE,OAAO,MAAMC,6BAA6BF,oBAAoB;IAC5DG,SAAS;QACP;YACEC,WAAWH;YACXI,UAAU;QACZ;KACD;AACH,GAAE"}
1
+ {"version":3,"sources":["../../../src/fields/LexicalEditor/feature.client.tsx"],"sourcesContent":["'use client'\n\nimport { createClientFeature } from '@payloadcms/richtext-lexical/client'\n\nimport { ActionsFeatureComponent } from './ActionsFeatureComponent.js'\n\nexport const LexicalEditorFeatureClient = createClientFeature({\n plugins: [\n {\n Component: ActionsFeatureComponent,\n position: 'belowContainer',\n },\n ],\n})\n"],"names":["createClientFeature","ActionsFeatureComponent","LexicalEditorFeatureClient","plugins","Component","position"],"mappings":"AAAA;AAEA,SAASA,mBAAmB,QAAQ,sCAAqC;AAEzE,SAASC,uBAAuB,QAAQ,+BAA8B;AAEtE,OAAO,MAAMC,6BAA6BF,oBAAoB;IAC5DG,SAAS;QACP;YACEC,WAAWH;YACXI,UAAU;QACZ;KACD;AACH,GAAE"}
@@ -1,2 +1,8 @@
1
- export declare const PayloadAiPluginLexicalEditorFeature: import("@payloadcms/richtext-lexical").FeatureProviderProviderServer<undefined, undefined, undefined>;
1
+ export declare const PayloadAiPluginLexicalEditorFeature: import("@payloadcms/richtext-lexical").FeatureProviderProviderServer<undefined, {
2
+ applyToFocusedEditor: any;
3
+ disableIfParentHasFixedToolbar: any;
4
+ }, {
5
+ applyToFocusedEditor: any;
6
+ disableIfParentHasFixedToolbar: any;
7
+ }>;
2
8
  //# sourceMappingURL=feature.server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature.server.d.ts","sourceRoot":"","sources":["../../../src/fields/LexicalEditor/feature.server.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,mCAAmC,uGAK9C,CAAA"}
1
+ {"version":3,"file":"feature.server.d.ts","sourceRoot":"","sources":["../../../src/fields/LexicalEditor/feature.server.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,mCAAmC;;;;;;EAiB9C,CAAA"}
@@ -1,10 +1,18 @@
1
1
  import { createServerFeature } from '@payloadcms/richtext-lexical';
2
2
  import { PLUGIN_LEXICAL_EDITOR_FEATURE } from '../../defaults.js';
3
3
  import { isPluginActivated } from '../../utilities/isPluginActivated.js';
4
- const isActivated = isPluginActivated();
4
+ import { LexicalEditorFeatureClient } from './feature.client.js';
5
5
  export const PayloadAiPluginLexicalEditorFeature = createServerFeature({
6
- feature: {
7
- ClientFeature: isActivated ? '@ai-stack/payloadcms/client#LexicalEditorFeatureClient' : null
6
+ feature: ({ props })=>{
7
+ const sanitizedProps = {
8
+ applyToFocusedEditor: props?.applyToFocusedEditor === undefined ? false : props.applyToFocusedEditor,
9
+ disableIfParentHasFixedToolbar: props?.disableIfParentHasFixedToolbar === undefined ? false : props.disableIfParentHasFixedToolbar
10
+ };
11
+ return {
12
+ ClientFeature: isPluginActivated() ? LexicalEditorFeatureClient : null,
13
+ clientFeatureProps: sanitizedProps,
14
+ sanitizedServerFeatureProps: sanitizedProps
15
+ };
8
16
  },
9
17
  key: PLUGIN_LEXICAL_EDITOR_FEATURE
10
18
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/LexicalEditor/feature.server.ts"],"sourcesContent":["import { createServerFeature } from '@payloadcms/richtext-lexical'\n\nimport { PLUGIN_LEXICAL_EDITOR_FEATURE } from '../../defaults.js'\nimport { isPluginActivated } from '../../utilities/isPluginActivated.js'\n\nconst isActivated = isPluginActivated()\n\nexport const PayloadAiPluginLexicalEditorFeature = createServerFeature({\n feature: {\n ClientFeature: isActivated ? '@ai-stack/payloadcms/client#LexicalEditorFeatureClient' : null,\n },\n key: PLUGIN_LEXICAL_EDITOR_FEATURE,\n})\n"],"names":["createServerFeature","PLUGIN_LEXICAL_EDITOR_FEATURE","isPluginActivated","isActivated","PayloadAiPluginLexicalEditorFeature","feature","ClientFeature","key"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,+BAA8B;AAElE,SAASC,6BAA6B,QAAQ,oBAAmB;AACjE,SAASC,iBAAiB,QAAQ,uCAAsC;AAExE,MAAMC,cAAcD;AAEpB,OAAO,MAAME,sCAAsCJ,oBAAoB;IACrEK,SAAS;QACPC,eAAeH,cAAc,2DAA2D;IAC1F;IACAI,KAAKN;AACP,GAAE"}
1
+ {"version":3,"sources":["../../../src/fields/LexicalEditor/feature.server.ts"],"sourcesContent":["import { createServerFeature } from '@payloadcms/richtext-lexical'\n\nimport { PLUGIN_LEXICAL_EDITOR_FEATURE } from '../../defaults.js'\nimport { isPluginActivated } from '../../utilities/isPluginActivated.js'\nimport { LexicalEditorFeatureClient } from './feature.client.js'\n\nexport const PayloadAiPluginLexicalEditorFeature = createServerFeature({\n feature: ({ props }: Record<any, any>) => {\n const sanitizedProps = {\n applyToFocusedEditor:\n props?.applyToFocusedEditor === undefined ? false : props.applyToFocusedEditor,\n disableIfParentHasFixedToolbar:\n props?.disableIfParentHasFixedToolbar === undefined\n ? false\n : props.disableIfParentHasFixedToolbar,\n }\n return {\n ClientFeature: isPluginActivated() ? LexicalEditorFeatureClient : null,\n clientFeatureProps: sanitizedProps,\n sanitizedServerFeatureProps: sanitizedProps,\n }\n },\n key: PLUGIN_LEXICAL_EDITOR_FEATURE,\n})\n"],"names":["createServerFeature","PLUGIN_LEXICAL_EDITOR_FEATURE","isPluginActivated","LexicalEditorFeatureClient","PayloadAiPluginLexicalEditorFeature","feature","props","sanitizedProps","applyToFocusedEditor","undefined","disableIfParentHasFixedToolbar","ClientFeature","clientFeatureProps","sanitizedServerFeatureProps","key"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,+BAA8B;AAElE,SAASC,6BAA6B,QAAQ,oBAAmB;AACjE,SAASC,iBAAiB,QAAQ,uCAAsC;AACxE,SAASC,0BAA0B,QAAQ,sBAAqB;AAEhE,OAAO,MAAMC,sCAAsCJ,oBAAoB;IACrEK,SAAS,CAAC,EAAEC,KAAK,EAAoB;QACnC,MAAMC,iBAAiB;YACrBC,sBACEF,OAAOE,yBAAyBC,YAAY,QAAQH,MAAME,oBAAoB;YAChFE,gCACEJ,OAAOI,mCAAmCD,YACtC,QACAH,MAAMI,8BAA8B;QAC5C;QACA,OAAO;YACLC,eAAeT,sBAAsBC,6BAA6B;YAClES,oBAAoBL;YACpBM,6BAA6BN;QAC/B;IACF;IACAO,KAAKb;AACP,GAAE"}
@@ -1,4 +1,4 @@
1
+ import type { TextareaFieldProps } from '@payloadcms/ui';
1
2
  import React from 'react';
2
- import { TextareaFieldClientProps } from 'payload';
3
- export declare const PromptEditorField: React.FC<TextareaFieldClientProps>;
3
+ export declare const PromptEditorField: React.FC<TextareaFieldProps>;
4
4
  //# sourceMappingURL=PromptEditorField.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PromptEditorField.d.ts","sourceRoot":"","sources":["../../../src/fields/PromptEditorField/PromptEditorField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAGlD,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CA4BhE,CAAA"}
1
+ {"version":3,"file":"PromptEditorField.d.ts","sourceRoot":"","sources":["../../../src/fields/PromptEditorField/PromptEditorField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAGxD,OAAO,KAAyC,MAAM,OAAO,CAAA;AAM7D,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAgE1D,CAAA"}
@@ -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