@ai-stack/payloadcms 3.0.0-beta.95.1 → 3.2.1-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/LICENSE.md +2 -2
  2. package/README.md +19 -17
  3. package/dist/ai/models/anthropic/generateRichText.d.ts.map +1 -1
  4. package/dist/ai/models/anthropic/generateRichText.js +2 -2
  5. package/dist/ai/models/anthropic/generateRichText.js.map +1 -1
  6. package/dist/ai/models/anthropic/index.d.ts.map +1 -1
  7. package/dist/ai/models/anthropic/index.js +8 -32
  8. package/dist/ai/models/anthropic/index.js.map +1 -1
  9. package/dist/ai/models/elevenLabs/generateVoice.d.ts +1 -1
  10. package/dist/ai/models/elevenLabs/index.d.ts.map +1 -1
  11. package/dist/ai/models/elevenLabs/index.js +4 -3
  12. package/dist/ai/models/elevenLabs/index.js.map +1 -1
  13. package/dist/ai/models/openai/generateImage.d.ts +1 -1
  14. package/dist/ai/models/openai/generateRichText.js +2 -2
  15. package/dist/ai/models/openai/generateRichText.js.map +1 -1
  16. package/dist/ai/models/openai/generateVoice.d.ts +1 -1
  17. package/dist/ai/models/openai/index.d.ts.map +1 -1
  18. package/dist/ai/models/openai/index.js +9 -35
  19. package/dist/ai/models/openai/index.js.map +1 -1
  20. package/dist/ai/prompts.d.ts +1 -1
  21. package/dist/ai/prompts.d.ts.map +1 -1
  22. package/dist/ai/prompts.js +6 -3
  23. package/dist/ai/prompts.js.map +1 -1
  24. package/dist/ai/schemas/lexicalJsonSchema.d.ts +2 -0
  25. package/dist/ai/schemas/lexicalJsonSchema.d.ts.map +1 -0
  26. package/dist/ai/schemas/lexicalJsonSchema.js +317 -0
  27. package/dist/ai/schemas/lexicalJsonSchema.js.map +1 -0
  28. package/dist/ai/utils/generateFileNameByPrompt.js.map +1 -1
  29. package/dist/ai/utils/systemGenerate.d.ts +5 -0
  30. package/dist/ai/utils/systemGenerate.d.ts.map +1 -0
  31. package/dist/ai/utils/{generateSeedPrompt.js → systemGenerate.js} +2 -2
  32. package/dist/ai/utils/systemGenerate.js.map +1 -0
  33. package/dist/collections/Instructions.d.ts +1 -1
  34. package/dist/collections/Instructions.d.ts.map +1 -1
  35. package/dist/collections/Instructions.js +177 -85
  36. package/dist/collections/Instructions.js.map +1 -1
  37. package/dist/defaults.d.ts +1 -1
  38. package/dist/defaults.d.ts.map +1 -1
  39. package/dist/defaults.js +1 -1
  40. package/dist/defaults.js.map +1 -1
  41. package/dist/endpoints/fetchFields.d.ts +3 -0
  42. package/dist/endpoints/fetchFields.d.ts.map +1 -0
  43. package/dist/endpoints/fetchFields.js +21 -0
  44. package/dist/endpoints/fetchFields.js.map +1 -0
  45. package/dist/endpoints/index.d.ts.map +1 -1
  46. package/dist/endpoints/index.js +12 -18
  47. package/dist/endpoints/index.js.map +1 -1
  48. package/dist/exports/client.d.ts +0 -1
  49. package/dist/exports/client.d.ts.map +1 -1
  50. package/dist/exports/client.js +0 -1
  51. package/dist/exports/client.js.map +1 -1
  52. package/dist/exports/fields.d.ts +2 -0
  53. package/dist/exports/fields.d.ts.map +1 -1
  54. package/dist/exports/fields.js +2 -0
  55. package/dist/exports/fields.js.map +1 -1
  56. package/dist/fields/ComposeField/ComposeField.d.ts +3 -0
  57. package/dist/fields/ComposeField/ComposeField.d.ts.map +1 -0
  58. package/dist/fields/ComposeField/ComposeField.js +24 -0
  59. package/dist/fields/ComposeField/ComposeField.js.map +1 -0
  60. package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts +2 -0
  61. package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts.map +1 -0
  62. package/dist/fields/LexicalEditor/ComposeFeatureComponent.js +28 -0
  63. package/dist/fields/LexicalEditor/ComposeFeatureComponent.js.map +1 -0
  64. package/dist/fields/LexicalEditor/feature.client.d.ts +4 -1
  65. package/dist/fields/LexicalEditor/feature.client.d.ts.map +1 -1
  66. package/dist/fields/LexicalEditor/feature.client.js +15 -7
  67. package/dist/fields/LexicalEditor/feature.client.js.map +1 -1
  68. package/dist/fields/PromptEditorField/PromptEditorField.d.ts +2 -2
  69. package/dist/fields/PromptEditorField/PromptEditorField.d.ts.map +1 -1
  70. package/dist/fields/PromptEditorField/PromptEditorField.js +4 -8
  71. package/dist/fields/PromptEditorField/PromptEditorField.js.map +1 -1
  72. package/dist/fields/SelectField/SelectField.d.ts +3 -2
  73. package/dist/fields/SelectField/SelectField.d.ts.map +1 -1
  74. package/dist/fields/SelectField/SelectField.js +2 -3
  75. package/dist/fields/SelectField/SelectField.js.map +1 -1
  76. package/dist/index.d.ts +1 -6
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +1 -6
  79. package/dist/index.js.map +1 -1
  80. package/dist/init.d.ts +2 -1
  81. package/dist/init.d.ts.map +1 -1
  82. package/dist/init.js +22 -21
  83. package/dist/init.js.map +1 -1
  84. package/dist/libraries/autocomplete/AutocompleteTextArea.js +9 -7
  85. package/dist/libraries/autocomplete/AutocompleteTextArea.js.map +1 -1
  86. package/dist/libraries/handlebars/asyncHandlebars.js +1 -1
  87. package/dist/libraries/handlebars/asyncHandlebars.js.map +1 -1
  88. package/dist/libraries/handlebars/helpers.js.map +1 -1
  89. package/dist/plugin.d.ts.map +1 -1
  90. package/dist/plugin.js +30 -41
  91. package/dist/plugin.js.map +1 -1
  92. package/dist/providers/FieldProvider/FieldProvider.d.ts +15 -0
  93. package/dist/providers/FieldProvider/FieldProvider.d.ts.map +1 -0
  94. package/dist/providers/FieldProvider/FieldProvider.js +33 -0
  95. package/dist/providers/FieldProvider/FieldProvider.js.map +1 -0
  96. package/dist/providers/FieldProvider/useFieldProps.d.ts +6 -0
  97. package/dist/providers/FieldProvider/useFieldProps.d.ts.map +1 -0
  98. package/dist/providers/FieldProvider/useFieldProps.js +12 -0
  99. package/dist/providers/FieldProvider/useFieldProps.js.map +1 -0
  100. package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts +5 -1
  101. package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts.map +1 -1
  102. package/dist/providers/InstructionsProvider/InstructionsProvider.js +12 -7
  103. package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
  104. package/dist/providers/InstructionsProvider/useInstructions.d.ts +2 -2
  105. package/dist/providers/InstructionsProvider/useInstructions.d.ts.map +1 -1
  106. package/dist/providers/InstructionsProvider/useInstructions.js +17 -4
  107. package/dist/providers/InstructionsProvider/useInstructions.js.map +1 -1
  108. package/dist/types.d.ts +9 -41
  109. package/dist/types.d.ts.map +1 -1
  110. package/dist/types.js +1 -4
  111. package/dist/types.js.map +1 -1
  112. package/dist/ui/Compose/Compose.d.ts +9 -0
  113. package/dist/ui/Compose/Compose.d.ts.map +1 -0
  114. package/dist/ui/{Actions/Actions.js → Compose/Compose.js} +49 -39
  115. package/dist/ui/Compose/Compose.js.map +1 -0
  116. package/dist/ui/{Actions → Compose}/UndoRedoActions.d.ts.map +1 -1
  117. package/dist/ui/{Actions → Compose}/UndoRedoActions.js +15 -2
  118. package/dist/ui/Compose/UndoRedoActions.js.map +1 -0
  119. package/dist/ui/{Actions → Compose}/hooks/menu/Item.d.ts +1 -1
  120. package/dist/ui/{Actions → Compose}/hooks/menu/Item.d.ts.map +1 -1
  121. package/dist/ui/{Actions → Compose}/hooks/menu/Item.js +2 -2
  122. package/dist/ui/{Actions → Compose}/hooks/menu/Item.js.map +1 -1
  123. package/dist/ui/Compose/hooks/menu/TranslateMenu.d.ts.map +1 -0
  124. package/dist/ui/{Actions → Compose}/hooks/menu/TranslateMenu.js +11 -11
  125. package/dist/ui/Compose/hooks/menu/TranslateMenu.js.map +1 -0
  126. package/dist/ui/{Actions → Compose}/hooks/menu/items.d.ts +8 -8
  127. package/dist/ui/{Actions → Compose}/hooks/menu/items.d.ts.map +1 -1
  128. package/dist/ui/{Actions → Compose}/hooks/menu/items.js.map +1 -1
  129. package/dist/ui/{Actions → Compose}/hooks/menu/itemsMap.d.ts +1 -1
  130. package/dist/ui/Compose/hooks/menu/itemsMap.d.ts.map +1 -0
  131. package/dist/ui/{Actions → Compose}/hooks/menu/itemsMap.js +1 -2
  132. package/dist/ui/Compose/hooks/menu/itemsMap.js.map +1 -0
  133. package/dist/ui/Compose/hooks/menu/useMenu.d.ts.map +1 -0
  134. package/dist/ui/{Actions → Compose}/hooks/menu/useMenu.js +2 -1
  135. package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -0
  136. package/dist/ui/{Actions → Compose}/hooks/useGenerate.d.ts +3 -1
  137. package/dist/ui/Compose/hooks/useGenerate.d.ts.map +1 -0
  138. package/dist/ui/{Actions → Compose}/hooks/useGenerate.js +19 -24
  139. package/dist/ui/Compose/hooks/useGenerate.js.map +1 -0
  140. package/dist/ui/Compose/hooks/useHistory.d.ts.map +1 -0
  141. package/dist/ui/{Actions → Compose}/hooks/useHistory.js +6 -3
  142. package/dist/ui/Compose/hooks/useHistory.js.map +1 -0
  143. package/dist/utilities/setSafeLexicalState.d.ts +2 -2
  144. package/dist/utilities/setSafeLexicalState.d.ts.map +1 -1
  145. package/dist/utilities/setSafeLexicalState.js +5 -12
  146. package/dist/utilities/setSafeLexicalState.js.map +1 -1
  147. package/dist/utilities/updateFieldsConfig.d.ts.map +1 -1
  148. package/dist/utilities/updateFieldsConfig.js +18 -6
  149. package/dist/utilities/updateFieldsConfig.js.map +1 -1
  150. package/package.json +32 -37
  151. package/dist/ai/schemas/lexical.schema.d.ts +0 -31
  152. package/dist/ai/schemas/lexical.schema.d.ts.map +0 -1
  153. package/dist/ai/schemas/lexical.schema.js +0 -102
  154. package/dist/ai/schemas/lexical.schema.js.map +0 -1
  155. package/dist/ai/utils/generateSeedPrompt.d.ts +0 -5
  156. package/dist/ai/utils/generateSeedPrompt.d.ts.map +0 -1
  157. package/dist/ai/utils/generateSeedPrompt.js.map +0 -1
  158. package/dist/fields/DescriptionField/DescriptionField.d.ts +0 -2
  159. package/dist/fields/DescriptionField/DescriptionField.d.ts.map +0 -1
  160. package/dist/fields/DescriptionField/DescriptionField.js +0 -16
  161. package/dist/fields/DescriptionField/DescriptionField.js.map +0 -1
  162. package/dist/fields/DescriptionField/DescriptionFieldComponent.d.ts +0 -3
  163. package/dist/fields/DescriptionField/DescriptionFieldComponent.d.ts.map +0 -1
  164. package/dist/fields/DescriptionField/DescriptionFieldComponent.js +0 -19
  165. package/dist/fields/DescriptionField/DescriptionFieldComponent.js.map +0 -1
  166. package/dist/fields/LexicalEditor/ActionsFeatureComponent.d.ts +0 -2
  167. package/dist/fields/LexicalEditor/ActionsFeatureComponent.d.ts.map +0 -1
  168. package/dist/fields/LexicalEditor/ActionsFeatureComponent.js +0 -15
  169. package/dist/fields/LexicalEditor/ActionsFeatureComponent.js.map +0 -1
  170. package/dist/ui/Actions/Actions.d.ts +0 -5
  171. package/dist/ui/Actions/Actions.d.ts.map +0 -1
  172. package/dist/ui/Actions/Actions.js.map +0 -1
  173. package/dist/ui/Actions/UndoRedoActions.js.map +0 -1
  174. package/dist/ui/Actions/hooks/menu/TranslateMenu.d.ts.map +0 -1
  175. package/dist/ui/Actions/hooks/menu/TranslateMenu.js.map +0 -1
  176. package/dist/ui/Actions/hooks/menu/itemsMap.d.ts.map +0 -1
  177. package/dist/ui/Actions/hooks/menu/itemsMap.js.map +0 -1
  178. package/dist/ui/Actions/hooks/menu/useMenu.d.ts.map +0 -1
  179. package/dist/ui/Actions/hooks/menu/useMenu.js.map +0 -1
  180. package/dist/ui/Actions/hooks/useGenerate.d.ts.map +0 -1
  181. package/dist/ui/Actions/hooks/useGenerate.js.map +0 -1
  182. package/dist/ui/Actions/hooks/useHistory.d.ts.map +0 -1
  183. package/dist/ui/Actions/hooks/useHistory.js.map +0 -1
  184. package/dist/utilities/jsonToZod.d.ts +0 -3
  185. package/dist/utilities/jsonToZod.d.ts.map +0 -1
  186. package/dist/utilities/jsonToZod.js +0 -33
  187. package/dist/utilities/jsonToZod.js.map +0 -1
  188. /package/dist/ui/{Actions → Compose}/UndoRedoActions.d.ts +0 -0
  189. /package/dist/ui/{Actions/actions.module.scss → Compose/compose.module.scss} +0 -0
  190. /package/dist/ui/{Actions → Compose}/hooks/menu/TranslateMenu.d.ts +0 -0
  191. /package/dist/ui/{Actions → Compose}/hooks/menu/items.js +0 -0
  192. /package/dist/ui/{Actions → Compose}/hooks/menu/menu.module.scss +0 -0
  193. /package/dist/ui/{Actions → Compose}/hooks/menu/useMenu.d.ts +0 -0
  194. /package/dist/ui/{Actions → Compose}/hooks/useHistory.d.ts +0 -0
@@ -13,97 +13,189 @@ const modelOptions = GenerationModels.map((model)=>{
13
13
  value: model.id
14
14
  };
15
15
  });
16
- export const Instructions = {
17
- slug: PLUGIN_INSTRUCTIONS_TABLE,
18
- // TODO: Revisit permissions, better if end user can provide this
19
- access: {
20
- create: ()=>true,
21
- read: ()=>true,
22
- update: ()=>true
23
- },
24
- admin: {
25
- hidden: true
26
- },
27
- fields: [
28
- {
29
- name: 'schema-path',
30
- type: 'text',
31
- admin: {
32
- readOnly: true
33
- },
34
- unique: true
16
+ const defaultAccessConfig = {
17
+ create: ()=>true,
18
+ read: ()=>true,
19
+ update: ()=>true
20
+ };
21
+ const defaultAdminConfig = {
22
+ group: 'Plugins',
23
+ hidden: true
24
+ };
25
+ export const instructionsCollection = (options)=>({
26
+ slug: PLUGIN_INSTRUCTIONS_TABLE,
27
+ access: {
28
+ ...defaultAccessConfig,
29
+ ...options?.access
30
+ },
31
+ admin: {
32
+ ...defaultAdminConfig,
33
+ ...options?.admin,
34
+ group: 'Plugins'
35
35
  },
36
- {
37
- name: 'field-type',
38
- type: 'select',
39
- admin: {
40
- readOnly: true
36
+ fields: [
37
+ {
38
+ name: 'schema-path',
39
+ type: 'text',
40
+ admin: {
41
+ readOnly: true
42
+ },
43
+ unique: true
41
44
  },
42
- defaultValue: 'text',
43
- label: 'Field type',
44
- options: [
45
- {
46
- label: 'text',
47
- value: 'text'
45
+ {
46
+ name: 'field-type',
47
+ type: 'select',
48
+ admin: {
49
+ readOnly: true
48
50
  },
49
- {
50
- label: 'textarea',
51
- value: 'textarea'
51
+ defaultValue: 'text',
52
+ label: 'Field type',
53
+ options: [
54
+ {
55
+ label: 'text',
56
+ value: 'text'
57
+ },
58
+ {
59
+ label: 'textarea',
60
+ value: 'textarea'
61
+ },
62
+ {
63
+ label: 'upload',
64
+ value: 'upload'
65
+ },
66
+ {
67
+ label: 'richText',
68
+ value: 'richText'
69
+ }
70
+ ]
71
+ },
72
+ {
73
+ name: 'relation-to',
74
+ type: 'text',
75
+ admin: {
76
+ condition: (_, current)=>{
77
+ return current['field-type'] === 'upload';
78
+ }
52
79
  },
53
- {
54
- label: 'upload',
55
- value: 'upload'
80
+ label: 'Relation to'
81
+ },
82
+ {
83
+ name: 'model-id',
84
+ type: 'select',
85
+ admin: {
86
+ components: {
87
+ Field: {
88
+ clientProps: {
89
+ filterByField: 'field-type',
90
+ options: modelOptions
91
+ },
92
+ path: '@ai-stack/payloadcms/fields#SelectField'
93
+ }
94
+ }
56
95
  },
57
- {
58
- label: 'richText',
59
- value: 'richText'
60
- }
61
- ]
62
- },
63
- {
64
- name: 'model-id',
65
- type: 'select',
66
- admin: {
67
- components: {
68
- Field: {
69
- clientProps: {
70
- filterByField: 'field-type',
71
- options: modelOptions
72
- },
73
- path: '@ai-stack/payloadcms/fields#SelectField'
96
+ label: 'Model',
97
+ options: modelOptions.map((option)=>{
98
+ return {
99
+ label: option.label,
100
+ value: option.value
101
+ };
102
+ })
103
+ },
104
+ {
105
+ id: 'ai-prompts-tabs',
106
+ type: 'tabs',
107
+ tabs: [
108
+ {
109
+ description: 'This will appear within the tab above the fields.',
110
+ fields: [
111
+ {
112
+ name: 'prompt',
113
+ type: 'textarea',
114
+ admin: {
115
+ components: {
116
+ Field: '@ai-stack/payloadcms/fields#PromptEditorField'
117
+ }
118
+ },
119
+ label: ''
120
+ }
121
+ ],
122
+ label: 'Prompt'
123
+ },
124
+ {
125
+ description: 'This will appear within the tab above the fields. sys',
126
+ fields: [
127
+ {
128
+ name: 'system',
129
+ type: 'textarea',
130
+ admin: {
131
+ condition: (_, current)=>{
132
+ return current['field-type'] === 'richText';
133
+ }
134
+ },
135
+ defaultValue: `INSTRUCTIONS:
136
+ You are a highly skilled and professional blog writer,
137
+ renowned for crafting engaging and well-organized articles.
138
+ When given a title, you meticulously create blogs that are not only
139
+ informative and accurate but also captivating and beautifully structured.`,
140
+ label: ''
141
+ }
142
+ ],
143
+ label: 'System prompt'
144
+ },
145
+ {
146
+ // Note: Update when tabs PR is merged: https://github.com/payloadcms/payload/pull/8406
147
+ // admin: {
148
+ // condition: (_, current) => {
149
+ // console.log('condition in tab', current)
150
+ // return current['field-type'] === 'richText'
151
+ // },
152
+ // },
153
+ // Note: Update when tabs PR is merged: https://github.com/payloadcms/payload/pull/8406
154
+ // admin: {
155
+ // condition: (_, current) => {
156
+ // console.log('condition in tab', current)
157
+ // return current['field-type'] === 'richText'
158
+ // },
159
+ // },
160
+ description: 'This will appear within the tab above the fields. Layout',
161
+ fields: [
162
+ {
163
+ /**TODO's:
164
+ * - Layouts can be saved in as an array
165
+ * - user can add their own layout to collections and use it later for generate specific rich text
166
+ * - user can select previously added layout
167
+ */ /**TODO's:
168
+ * - Layouts can be saved in as an array
169
+ * - user can add their own layout to collections and use it later for generate specific rich text
170
+ * - user can select previously added layout
171
+ */ name: 'layout',
172
+ type: 'textarea',
173
+ admin: {
174
+ condition: (_, current)=>{
175
+ return current['field-type'] === 'richText';
176
+ }
177
+ },
178
+ defaultValue: `[paragraph] - Write a concise introduction (2-3 sentences) that outlines the main topic.
179
+ [horizontalrule] - Insert a horizontal rule to separate the introduction from the main content.
180
+ [list] - Create a list with 3-5 items. Each list item should contain:
181
+ a. [heading] - A brief, descriptive heading (up to 5 words)
182
+ b. [paragraph] - A short explanation or elaboration (1-2 sentences)
183
+ [horizontalrule] - Insert another horizontal rule to separate the main content from the conclusion.
184
+ [paragraph] - Compose a brief conclusion (2-3 sentences) summarizing the key points.
185
+ [quote] - Include a relevant quote from a famous person, directly related to the topic. Format: "Quote text." - Author Name`,
186
+ label: ''
187
+ }
188
+ ],
189
+ label: 'Layout'
74
190
  }
75
- }
191
+ ]
76
192
  },
77
- label: 'Model',
78
- options: modelOptions.map((option)=>{
79
- return {
80
- label: option.label,
81
- value: option.value
82
- };
83
- })
84
- },
85
- {
86
- name: 'prompt',
87
- type: 'textarea',
88
- admin: {
89
- components: {
90
- Field: '@ai-stack/payloadcms/fields#PromptEditorField'
91
- }
92
- }
93
- },
94
- ...groupSettings
95
- ],
96
- hooks: {
97
- beforeChange: [
98
- (req)=>{
99
- if (req.data['openai-gpt-object-settings']?.layout?.length === 0) {
100
- // TODO: why??
101
- req.data['openai-gpt-object-settings'].layout = '';
102
- }
103
- return req.data;
104
- }
105
- ]
106
- }
107
- };
193
+ ...groupSettings
194
+ ],
195
+ labels: {
196
+ plural: 'Compose Settings',
197
+ singular: 'Compose Setting'
198
+ }
199
+ });
108
200
 
109
201
  //# sourceMappingURL=Instructions.js.map
@@ -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'\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\nconst defaultAccessConfig = {\n create: () => true,\n read: () => true,\n update: () => true,\n}\n\nconst defaultAdminConfig = {\n group: 'Plugins',\n hidden: true,\n}\n\nexport const instructionsCollection = (options?: Partial<CollectionConfig>) =>\n <CollectionConfig>{\n slug: PLUGIN_INSTRUCTIONS_TABLE,\n access: {\n ...defaultAccessConfig,\n ...options?.access,\n },\n admin: {\n ...defaultAdminConfig,\n ...options?.admin,\n group: 'Plugins',\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: 'relation-to',\n type: 'text',\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'upload'\n },\n },\n label: 'Relation to',\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 id: 'ai-prompts-tabs',\n type: 'tabs',\n tabs: [\n {\n description: 'This will appear within the tab above the fields.',\n fields: [\n {\n name: 'prompt',\n type: 'textarea',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/fields#PromptEditorField',\n },\n },\n label: '',\n },\n ],\n label: 'Prompt',\n },\n {\n description: 'This will appear within the tab above the fields. sys',\n fields: [\n {\n name: 'system',\n type: 'textarea',\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'richText'\n },\n },\n defaultValue: `INSTRUCTIONS:\nYou are a highly skilled and professional blog writer,\nrenowned for crafting engaging and well-organized articles.\nWhen given a title, you meticulously create blogs that are not only\ninformative and accurate but also captivating and beautifully structured.`,\n label: '',\n },\n ],\n label: 'System prompt',\n },\n {\n // Note: Update when tabs PR is merged: https://github.com/payloadcms/payload/pull/8406\n // admin: {\n // condition: (_, current) => {\n // console.log('condition in tab', current)\n // return current['field-type'] === 'richText'\n // },\n // },\n description: 'This will appear within the tab above the fields. Layout',\n fields: [\n {\n /**TODO's:\n * - Layouts can be saved in as an array\n * - user can add their own layout to collections and use it later for generate specific rich text\n * - user can select previously added layout\n */\n name: 'layout',\n type: 'textarea',\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'richText'\n },\n },\n defaultValue: `[paragraph] - Write a concise introduction (2-3 sentences) that outlines the main topic.\n[horizontalrule] - Insert a horizontal rule to separate the introduction from the main content.\n[list] - Create a list with 3-5 items. Each list item should contain:\n a. [heading] - A brief, descriptive heading (up to 5 words)\n b. [paragraph] - A short explanation or elaboration (1-2 sentences)\n[horizontalrule] - Insert another horizontal rule to separate the main content from the conclusion.\n[paragraph] - Compose a brief conclusion (2-3 sentences) summarizing the key points.\n[quote] - Include a relevant quote from a famous person, directly related to the topic. Format: \"Quote text.\" - Author Name`,\n label: '',\n },\n ],\n label: 'Layout',\n },\n ],\n },\n ...groupSettings,\n ],\n labels: {\n plural: 'Compose Settings',\n singular: 'Compose Setting',\n },\n }\n"],"names":["GenerationModels","PLUGIN_INSTRUCTIONS_TABLE","groupSettings","reduce","fields","model","settings","push","modelOptions","map","label","name","value","id","defaultAccessConfig","create","read","update","defaultAdminConfig","group","hidden","instructionsCollection","options","slug","access","admin","type","readOnly","unique","defaultValue","condition","_","current","components","Field","clientProps","filterByField","path","option","tabs","description","labels","plural","singular"],"mappings":"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"}
@@ -1,10 +1,10 @@
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-plugin-ai-instructions-map";
4
3
  export declare const PLUGIN_LEXICAL_EDITOR_FEATURE = "plugin-ai-actions-feature";
5
4
  export declare const PLUGIN_API_ENDPOINT_BASE = "/plugin-ai";
6
5
  export declare const PLUGIN_API_ENDPOINT_GENERATE = "/plugin-ai/generate";
7
6
  export declare const PLUGIN_API_ENDPOINT_GENERATE_UPLOAD = "/plugin-ai/generate/upload";
7
+ export declare const PLUGIN_FETCH_FIELDS_ENDPOINT = "/plugin-ai/fetch-fields";
8
8
  export declare const PLUGIN_DEFAULT_OPENAI_MODEL = "gpt-4o-mini";
9
9
  export declare const PLUGIN_DEFAULT_ANTHROPIC_MODEL = "claude-3-sonnet-20240229";
10
10
  //# sourceMappingURL=defaults.d.ts.map
@@ -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,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"}
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,6BAA6B,8BAAmC,CAAA;AAG7E,eAAO,MAAM,wBAAwB,eAAoB,CAAA;AACzD,eAAO,MAAM,4BAA4B,wBAAyC,CAAA;AAClF,eAAO,MAAM,mCAAmC,+BAA2C,CAAA;AAC3F,eAAO,MAAM,4BAA4B,4BAA6C,CAAA;AAGtF,eAAO,MAAM,2BAA2B,gBAAgB,CAAA;AACxD,eAAO,MAAM,8BAA8B,6BAA6B,CAAA"}
package/dist/defaults.js CHANGED
@@ -1,11 +1,11 @@
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_NAME}-${PLUGIN_INSTRUCTIONS_TABLE}-map`;
4
3
  export const PLUGIN_LEXICAL_EDITOR_FEATURE = `${PLUGIN_NAME}-actions-feature`;
5
4
  // Endpoint defaults
6
5
  export const PLUGIN_API_ENDPOINT_BASE = `/${PLUGIN_NAME}`;
7
6
  export const PLUGIN_API_ENDPOINT_GENERATE = `${PLUGIN_API_ENDPOINT_BASE}/generate`;
8
7
  export const PLUGIN_API_ENDPOINT_GENERATE_UPLOAD = `${PLUGIN_API_ENDPOINT_GENERATE}/upload`;
8
+ export const PLUGIN_FETCH_FIELDS_ENDPOINT = `${PLUGIN_API_ENDPOINT_BASE}/fetch-fields`;
9
9
  // LLM Settings
10
10
  export const PLUGIN_DEFAULT_OPENAI_MODEL = `gpt-4o-mini`;
11
11
  export const PLUGIN_DEFAULT_ANTHROPIC_MODEL = `claude-3-sonnet-20240229`;
@@ -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_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
+ {"version":3,"sources":["../src/defaults.ts"],"sourcesContent":["export const PLUGIN_NAME = 'plugin-ai'\nexport const PLUGIN_INSTRUCTIONS_TABLE = `${PLUGIN_NAME}-instructions`\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`\nexport const PLUGIN_FETCH_FIELDS_ENDPOINT = `${PLUGIN_API_ENDPOINT_BASE}/fetch-fields`\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_LEXICAL_EDITOR_FEATURE","PLUGIN_API_ENDPOINT_BASE","PLUGIN_API_ENDPOINT_GENERATE","PLUGIN_API_ENDPOINT_GENERATE_UPLOAD","PLUGIN_FETCH_FIELDS_ENDPOINT","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,gCAAgC,GAAGF,YAAY,gBAAgB,CAAC,CAAA;AAE7E,oBAAoB;AACpB,OAAO,MAAMG,2BAA2B,CAAC,CAAC,EAAEH,aAAa,CAAA;AACzD,OAAO,MAAMI,+BAA+B,GAAGD,yBAAyB,SAAS,CAAC,CAAA;AAClF,OAAO,MAAME,sCAAsC,GAAGD,6BAA6B,OAAO,CAAC,CAAA;AAC3F,OAAO,MAAME,+BAA+B,GAAGH,yBAAyB,aAAa,CAAC,CAAA;AAEtF,eAAe;AACf,OAAO,MAAMI,8BAA8B,CAAC,WAAW,CAAC,CAAA;AACxD,OAAO,MAAMC,iCAAiC,CAAC,wBAAwB,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { Endpoint } from 'payload';
2
+ export declare const fetchFields: Endpoint;
3
+ //# sourceMappingURL=fetchFields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchFields.d.ts","sourceRoot":"","sources":["../../src/endpoints/fetchFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,SAAS,CAAA;AAIvD,eAAO,MAAM,WAAW,EAAE,QAmBzB,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { PLUGIN_FETCH_FIELDS_ENDPOINT, PLUGIN_INSTRUCTIONS_TABLE } from '../defaults.js';
2
+ export const fetchFields = {
3
+ handler: async (req)=>{
4
+ const { docs = [] } = await req.payload.find({
5
+ collection: PLUGIN_INSTRUCTIONS_TABLE,
6
+ pagination: false
7
+ });
8
+ const fieldMap = {};
9
+ docs.forEach((doc)=>{
10
+ fieldMap[doc['schema-path']] = {
11
+ id: doc.id,
12
+ fieldType: doc['field-type']
13
+ };
14
+ });
15
+ return Response.json(fieldMap);
16
+ },
17
+ method: 'get',
18
+ path: PLUGIN_FETCH_FIELDS_ENDPOINT
19
+ };
20
+
21
+ //# sourceMappingURL=fetchFields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/endpoints/fetchFields.ts"],"sourcesContent":["import type { Endpoint, PayloadRequest } from 'payload'\n\nimport { PLUGIN_FETCH_FIELDS_ENDPOINT, PLUGIN_INSTRUCTIONS_TABLE } from '../defaults.js'\n\nexport const fetchFields: Endpoint = {\n handler: async (req: PayloadRequest) => {\n const { docs = [] } = await req.payload.find({\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n pagination: false,\n })\n\n const fieldMap = {}\n docs.forEach((doc) => {\n fieldMap[doc['schema-path']] = {\n id: doc.id,\n fieldType: doc['field-type'],\n }\n })\n\n return Response.json(fieldMap)\n },\n method: 'get',\n path: PLUGIN_FETCH_FIELDS_ENDPOINT,\n}\n"],"names":["PLUGIN_FETCH_FIELDS_ENDPOINT","PLUGIN_INSTRUCTIONS_TABLE","fetchFields","handler","req","docs","payload","find","collection","pagination","fieldMap","forEach","doc","id","fieldType","Response","json","method","path"],"mappings":"AAEA,SAASA,4BAA4B,EAAEC,yBAAyB,QAAQ,iBAAgB;AAExF,OAAO,MAAMC,cAAwB;IACnCC,SAAS,OAAOC;QACd,MAAM,EAAEC,OAAO,EAAE,EAAE,GAAG,MAAMD,IAAIE,OAAO,CAACC,IAAI,CAAC;YAC3CC,YAAYP;YACZQ,YAAY;QACd;QAEA,MAAMC,WAAW,CAAC;QAClBL,KAAKM,OAAO,CAAC,CAACC;YACZF,QAAQ,CAACE,GAAG,CAAC,cAAc,CAAC,GAAG;gBAC7BC,IAAID,IAAIC,EAAE;gBACVC,WAAWF,GAAG,CAAC,aAAa;YAC9B;QACF;QAEA,OAAOG,SAASC,IAAI,CAACN;IACvB;IACAO,QAAQ;IACRC,MAAMlB;AACR,EAAC"}
@@ -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,SAwIvB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/endpoints/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAmB,SAAS,EAAE,MAAM,aAAa,CAAA;AAuE7D,eAAO,MAAM,SAAS,EAAE,SA2HvB,CAAA"}
@@ -1,4 +1,3 @@
1
- import { lexicalSchema } from '../ai/schemas/lexical.schema.js';
2
1
  import { GenerationModels } from '../ai/models/index.js';
3
2
  import { defaultPrompts } from '../ai/prompts.js';
4
3
  import { PLUGIN_API_ENDPOINT_GENERATE, PLUGIN_API_ENDPOINT_GENERATE_UPLOAD, PLUGIN_INSTRUCTIONS_TABLE, PLUGIN_NAME } from '../defaults.js';
@@ -9,9 +8,10 @@ const assignPrompt = async (action, { type, actionParams, context, field, layout
9
8
  const prompt = await replacePlaceholders(template, context);
10
9
  const toLexicalHTML = type === 'richText' ? handlebarsHelpersMap.toHTML.name : '';
11
10
  const assignedPrompts = {
12
- layout,
11
+ layout: type === 'richText' ? layout : undefined,
13
12
  prompt,
14
- system: systemPrompt
13
+ //TODO: Define only once on a collection level
14
+ system: type === 'richText' ? systemPrompt : undefined
15
15
  };
16
16
  if (action === 'Compose') {
17
17
  return assignedPrompts;
@@ -49,7 +49,8 @@ export const endpoints = {
49
49
  });
50
50
  const { collections } = req.payload.config;
51
51
  const collection = collections.find((collection)=>collection.slug === PLUGIN_INSTRUCTIONS_TABLE);
52
- const { editorConfig: { schema: editorSchema = lexicalSchema() } = {} } = collection.custom || {};
52
+ const { custom: { [PLUGIN_NAME]: { editorConfig = {} } = {} } = {} } = collection.admin;
53
+ const { schema: editorSchema = {} } = editorConfig;
53
54
  const { prompt: promptTemplate = '' } = instructions;
54
55
  const schemaPath = instructions['schema-path'];
55
56
  const fieldName = schemaPath?.split('.').pop();
@@ -59,29 +60,24 @@ export const endpoints = {
59
60
  return l.code === locale;
60
61
  });
61
62
  const localeInfo = localeData?.label[defaultLocale] || locale;
62
- //TODO: remove this
63
- const opt = {
64
- locale: localeInfo,
65
- modelId: instructions['model-id']
66
- };
67
- const model = GenerationModels.find((model)=>model.id === opt.modelId);
63
+ const model = GenerationModels.find((model)=>model.id === instructions['model-id']);
68
64
  const settingsName = model.settings?.name;
69
- const modelOptions = instructions[settingsName];
65
+ const modelOptions = instructions[settingsName] || {};
70
66
  const prompts = await assignPrompt(action, {
71
67
  type: instructions['field-type'],
72
68
  actionParams,
73
69
  context: contextData,
74
70
  field: fieldName,
75
- layout: modelOptions.layout,
76
- systemPrompt: modelOptions.system,
71
+ layout: instructions.layout,
72
+ systemPrompt: instructions.system,
77
73
  template: promptTemplate
78
74
  });
79
75
  console.log('Running handler with prompts:', prompts);
80
76
  return model.handler?.(prompts.prompt, {
81
77
  ...modelOptions,
82
- ...opt,
83
78
  editorSchema,
84
79
  layout: prompts.layout,
80
+ locale: localeInfo,
85
81
  system: prompts.system
86
82
  }).catch((error)=>{
87
83
  console.error('Error: endpoint - generating text:', error);
@@ -97,7 +93,7 @@ export const endpoints = {
97
93
  handler: async (req)=>{
98
94
  const data = await req.json?.();
99
95
  const { options } = data;
100
- const { instructionId, uploadCollectionSlug } = options;
96
+ const { instructionId } = options;
101
97
  const contextData = data.doc;
102
98
  let instructions = {
103
99
  'model-id': '',
@@ -115,18 +111,16 @@ export const endpoints = {
115
111
  registerEditorHelper(req.payload, schemaPath);
116
112
  const text = await replacePlaceholders(promptTemplate, contextData);
117
113
  const modelId = instructions['model-id'];
118
- console.log('prompt text:', text);
114
+ const uploadCollectionSlug = instructions['relation-to'];
119
115
  const model = GenerationModels.find((model)=>model.id === modelId);
120
116
  const settingsName = model.settings?.name;
121
117
  const modelOptions = instructions[settingsName] || {};
122
- console.log('modelOptions', modelOptions);
123
118
  const result = await model.handler?.(text, modelOptions);
124
119
  const assetData = await req.payload.create({
125
120
  collection: uploadCollectionSlug,
126
121
  data: result.data,
127
122
  file: result.file
128
123
  });
129
- console.log('assetData', assetData);
130
124
  return new Response(JSON.stringify({
131
125
  result: {
132
126
  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 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":["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 { PayloadRequest } from 'payload'\n\nimport type { 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 { 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\n const assignedPrompts = {\n layout: type === 'richText' ? layout : undefined,\n prompt,\n //TODO: Define only once on a collection level\n system: type === 'richText' ? systemPrompt : undefined,\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 { custom: { [PLUGIN_NAME]: { editorConfig = {} } = {} } = {} } = collection.admin\n const { schema: editorSchema = {} } = editorConfig\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 const model = GenerationModels.find((model) => model.id === instructions['model-id'])\n const settingsName = model.settings?.name\n const modelOptions = instructions[settingsName] || {}\n\n const prompts = await assignPrompt(action, {\n type: instructions['field-type'] as string,\n actionParams,\n context: contextData,\n field: fieldName,\n layout: instructions.layout,\n systemPrompt: instructions.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 editorSchema,\n layout: prompts.layout,\n locale: localeInfo,\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 } = 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 const uploadCollectionSlug = instructions['relation-to']\n\n const model = GenerationModels.find((model) => model.id === modelId)\n const settingsName = model.settings?.name\n const modelOptions = instructions[settingsName] || {}\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":["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","undefined","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","custom","editorConfig","admin","schema","editorSchema","promptTemplate","schemaPath","fieldName","split","pop","defaultLocale","locales","localization","localeData","l","code","localeInfo","label","model","settingsName","settings","modelOptions","prompts","console","log","catch","error","Response","JSON","stringify","message","status","method","path","upload","text","modelId","uploadCollectionSlug","result","assetData","create","file","alt"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- export { DescriptionFieldComponent } from '../fields/DescriptionField/DescriptionFieldComponent.js';
2
1
  export { LexicalEditorFeatureClient } from '../fields/LexicalEditor/feature.client.js';
3
2
  export { InstructionsProvider } from '../providers/InstructionsProvider/InstructionsProvider.js';
4
3
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,yDAAyD,CAAA;AACnG,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAA;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAA;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAA"}
@@ -1,4 +1,3 @@
1
- export { DescriptionFieldComponent } from '../fields/DescriptionField/DescriptionFieldComponent.js';
2
1
  export { LexicalEditorFeatureClient } from '../fields/LexicalEditor/feature.client.js';
3
2
  export { InstructionsProvider } from '../providers/InstructionsProvider/InstructionsProvider.js';
4
3
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/exports/client.ts"],"sourcesContent":["export { DescriptionFieldComponent } from '../fields/DescriptionField/DescriptionFieldComponent.js'\nexport { LexicalEditorFeatureClient } from '../fields/LexicalEditor/feature.client.js'\nexport { InstructionsProvider } from '../providers/InstructionsProvider/InstructionsProvider.js'\n"],"names":["DescriptionFieldComponent","LexicalEditorFeatureClient","InstructionsProvider"],"mappings":"AAAA,SAASA,yBAAyB,QAAQ,0DAAyD;AACnG,SAASC,0BAA0B,QAAQ,4CAA2C;AACtF,SAASC,oBAAoB,QAAQ,4DAA2D"}
1
+ {"version":3,"sources":["../../src/exports/client.ts"],"sourcesContent":["export { LexicalEditorFeatureClient } from '../fields/LexicalEditor/feature.client.js'\nexport { InstructionsProvider } from '../providers/InstructionsProvider/InstructionsProvider.js'\n"],"names":["LexicalEditorFeatureClient","InstructionsProvider"],"mappings":"AAAA,SAASA,0BAA0B,QAAQ,4CAA2C;AACtF,SAASC,oBAAoB,QAAQ,4DAA2D"}
@@ -1,3 +1,5 @@
1
+ export { ComposeField } from '../fields/ComposeField/ComposeField.js';
2
+ export { PayloadAiPluginLexicalEditorFeature } from '../fields/LexicalEditor/feature.server.js';
1
3
  export { PromptEditorField } from '../fields/PromptEditorField/PromptEditorField.js';
2
4
  export { SelectField } from '../fields/SelectField/SelectField.js';
3
5
  //# 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"}
1
+ {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/exports/fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,mCAAmC,EAAE,MAAM,2CAA2C,CAAA;AAC/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAA;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAA"}
@@ -1,3 +1,5 @@
1
+ export { ComposeField } from '../fields/ComposeField/ComposeField.js';
2
+ export { PayloadAiPluginLexicalEditorFeature } from '../fields/LexicalEditor/feature.server.js';
1
3
  export { PromptEditorField } from '../fields/PromptEditorField/PromptEditorField.js';
2
4
  export { SelectField } from '../fields/SelectField/SelectField.js';
3
5
 
@@ -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'\n"],"names":["PromptEditorField","SelectField"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,mDAAkD;AACpF,SAASC,WAAW,QAAQ,uCAAsC"}
1
+ {"version":3,"sources":["../../src/exports/fields.ts"],"sourcesContent":["export { ComposeField } from '../fields/ComposeField/ComposeField.js'\nexport { PayloadAiPluginLexicalEditorFeature } from '../fields/LexicalEditor/feature.server.js'\nexport { PromptEditorField } from '../fields/PromptEditorField/PromptEditorField.js'\nexport { SelectField } from '../fields/SelectField/SelectField.js'\n"],"names":["ComposeField","PayloadAiPluginLexicalEditorFeature","PromptEditorField","SelectField"],"mappings":"AAAA,SAASA,YAAY,QAAQ,yCAAwC;AACrE,SAASC,mCAAmC,QAAQ,4CAA2C;AAC/F,SAASC,iBAAiB,QAAQ,mDAAkD;AACpF,SAASC,WAAW,QAAQ,uCAAsC"}
@@ -0,0 +1,3 @@
1
+ import type { FieldDescriptionServerProps } from 'payload';
2
+ export declare const ComposeField: (props: FieldDescriptionServerProps) => import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=ComposeField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComposeField.d.ts","sourceRoot":"","sources":["../../../src/fields/ComposeField/ComposeField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAA;AAQ1D,eAAO,MAAM,YAAY,UAAW,2BAA2B,4CAgB9D,CAAA"}