@ai-stack/payloadcms 3.76.0-beta.1 → 3.76.0-beta.2

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 (337) hide show
  1. package/dist/ai/core/generateObject.js +1 -4
  2. package/dist/ai/core/generateObject.js.map +1 -1
  3. package/dist/ai/core/generateText.js +1 -5
  4. package/dist/ai/core/generateText.js.map +1 -1
  5. package/dist/ai/core/media/generateMedia.js +1 -4
  6. package/dist/ai/core/media/generateMedia.js.map +1 -1
  7. package/dist/ai/core/media/image/generateImage.js +4 -14
  8. package/dist/ai/core/media/image/generateImage.js.map +1 -1
  9. package/dist/ai/core/media/image/handlers/multimodal.js +8 -25
  10. package/dist/ai/core/media/image/handlers/multimodal.js.map +1 -1
  11. package/dist/ai/core/media/image/handlers/standard.js +7 -2
  12. package/dist/ai/core/media/image/handlers/standard.js.map +1 -1
  13. package/dist/ai/core/media/speech/generateSpeech.js +2 -3
  14. package/dist/ai/core/media/speech/generateSpeech.js.map +1 -1
  15. package/dist/ai/core/media/types.d.ts +2 -3
  16. package/dist/ai/core/media/types.js.map +1 -1
  17. package/dist/ai/core/streamObject.js +0 -3
  18. package/dist/ai/core/streamObject.js.map +1 -1
  19. package/dist/ai/core/streamText.js +1 -4
  20. package/dist/ai/core/streamText.js.map +1 -1
  21. package/dist/ai/core/types.d.ts +2 -2
  22. package/dist/ai/core/types.js.map +1 -1
  23. package/dist/ai/providers/blocks/anthropic.js +0 -42
  24. package/dist/ai/providers/blocks/anthropic.js.map +1 -1
  25. package/dist/ai/providers/blocks/elevenlabs.js +1 -106
  26. package/dist/ai/providers/blocks/elevenlabs.js.map +1 -1
  27. package/dist/ai/providers/blocks/fal.js +0 -118
  28. package/dist/ai/providers/blocks/fal.js.map +1 -1
  29. package/dist/ai/providers/blocks/google.js +2 -237
  30. package/dist/ai/providers/blocks/google.js.map +1 -1
  31. package/dist/ai/providers/blocks/openai-compatible.js +0 -144
  32. package/dist/ai/providers/blocks/openai-compatible.js.map +1 -1
  33. package/dist/ai/providers/blocks/openai.js +0 -200
  34. package/dist/ai/providers/blocks/openai.js.map +1 -1
  35. package/dist/ai/providers/blocks/xai.js +0 -53
  36. package/dist/ai/providers/blocks/xai.js.map +1 -1
  37. package/dist/ai/providers/index.d.ts +1 -1
  38. package/dist/ai/providers/index.js +0 -2
  39. package/dist/ai/providers/index.js.map +1 -1
  40. package/dist/ai/providers/registry.d.ts +24 -28
  41. package/dist/ai/providers/registry.js +184 -138
  42. package/dist/ai/providers/registry.js.map +1 -1
  43. package/dist/ai/providers/types.d.ts +12 -33
  44. package/dist/ai/providers/types.js +0 -1
  45. package/dist/ai/providers/types.js.map +1 -1
  46. package/dist/ai/schemas/lexicalJsonSchema.js +1 -1
  47. package/dist/ai/schemas/lexicalJsonSchema.js.map +1 -1
  48. package/dist/ai/utilities/filterEditorSchemaByNodes.js.map +1 -0
  49. package/dist/ai/utilities/generateFileNameByPrompt.js.map +1 -0
  50. package/dist/ai/utilities/isObjectSchema.js.map +1 -0
  51. package/dist/ai/utilities/nodeToSchemaMap.js.map +1 -0
  52. package/dist/ai/{prompts.d.ts → utilities/prompts.d.ts} +1 -1
  53. package/dist/ai/utilities/prompts.js.map +1 -0
  54. package/dist/ai/utilities/systemGenerate.js.map +1 -0
  55. package/dist/collections/AIJobs.js +3 -12
  56. package/dist/collections/AIJobs.js.map +1 -1
  57. package/dist/collections/AIProviders.js +47 -20
  58. package/dist/collections/AIProviders.js.map +1 -1
  59. package/dist/collections/Instructions.js +86 -54
  60. package/dist/collections/Instructions.js.map +1 -1
  61. package/dist/collections/shared.d.ts +30 -0
  62. package/dist/collections/shared.js +15 -0
  63. package/dist/collections/shared.js.map +1 -0
  64. package/dist/endpoints/fetchFields.js +14 -6
  65. package/dist/endpoints/fetchFields.js.map +1 -1
  66. package/dist/endpoints/fetchVoices.js +1 -1
  67. package/dist/endpoints/fetchVoices.js.map +1 -1
  68. package/dist/endpoints/generate.d.ts +7 -0
  69. package/dist/endpoints/generate.js +268 -0
  70. package/dist/endpoints/generate.js.map +1 -0
  71. package/dist/endpoints/index.js +9 -639
  72. package/dist/endpoints/index.js.map +1 -1
  73. package/dist/endpoints/promptMentions.d.ts +2 -0
  74. package/dist/endpoints/promptMentions.js +166 -0
  75. package/dist/endpoints/promptMentions.js.map +1 -0
  76. package/dist/endpoints/upload.d.ts +7 -0
  77. package/dist/endpoints/upload.js +294 -0
  78. package/dist/endpoints/upload.js.map +1 -0
  79. package/dist/endpoints/videogenWebhook.d.ts +7 -0
  80. package/dist/endpoints/videogenWebhook.js +132 -0
  81. package/dist/endpoints/videogenWebhook.js.map +1 -0
  82. package/dist/exports/client.d.ts +2 -1
  83. package/dist/exports/client.js +2 -1
  84. package/dist/exports/client.js.map +1 -1
  85. package/dist/exports/fields.d.ts +2 -1
  86. package/dist/exports/fields.js +2 -1
  87. package/dist/exports/fields.js.map +1 -1
  88. package/dist/fields/ArrayComposeField/ArrayComposeField.js +1 -1
  89. package/dist/fields/ArrayComposeField/ArrayComposeField.js.map +1 -1
  90. package/dist/fields/ArrayComposeField/ArrayComposeField.jsx +1 -1
  91. package/dist/fields/ComposeField/ComposeField.d.ts +1 -0
  92. package/dist/fields/ComposeField/ComposeField.js +18 -8
  93. package/dist/fields/ComposeField/ComposeField.js.map +1 -1
  94. package/dist/fields/ComposeField/ComposeField.jsx +12 -7
  95. package/dist/fields/PromptEditorField/feature.client.d.ts +1 -0
  96. package/dist/fields/PromptEditorField/feature.client.js +173 -0
  97. package/dist/fields/PromptEditorField/feature.client.js.map +1 -0
  98. package/dist/fields/PromptEditorField/feature.client.jsx +148 -0
  99. package/dist/fields/PromptEditorField/feature.server.d.ts +1 -0
  100. package/dist/fields/PromptEditorField/feature.server.js +30 -0
  101. package/dist/fields/PromptEditorField/feature.server.js.map +1 -0
  102. package/dist/fields/PromptField.d.ts +4 -0
  103. package/dist/fields/PromptField.js +18 -0
  104. package/dist/fields/PromptField.js.map +1 -0
  105. package/dist/fields/SelectField/SelectField.js +0 -1
  106. package/dist/fields/SelectField/SelectField.js.map +1 -1
  107. package/dist/fields/SelectField/SelectField.jsx +0 -1
  108. package/dist/index.d.ts +4 -3
  109. package/dist/index.js +4 -2
  110. package/dist/index.js.map +1 -1
  111. package/dist/libraries/handlebars/helpers.js +2 -2
  112. package/dist/libraries/handlebars/helpers.js.map +1 -1
  113. package/dist/libraries/handlebars/replacePlaceholders.js +5 -1
  114. package/dist/libraries/handlebars/replacePlaceholders.js.map +1 -1
  115. package/dist/payload-ai.d.ts +5 -19
  116. package/dist/plugin.js +17 -20
  117. package/dist/plugin.js.map +1 -1
  118. package/dist/providers/FieldProvider/FieldProvider.js +10 -19
  119. package/dist/providers/FieldProvider/FieldProvider.js.map +1 -1
  120. package/dist/providers/FieldProvider/FieldProvider.jsx +7 -17
  121. package/dist/providers/InstructionsProvider/InstructionsProvider.js +4 -1
  122. package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
  123. package/dist/providers/InstructionsProvider/InstructionsProvider.jsx +3 -0
  124. package/dist/translations/de.json +47 -0
  125. package/dist/translations/en.json +45 -2
  126. package/dist/translations/es.json +45 -2
  127. package/dist/translations/fa.json +45 -2
  128. package/dist/translations/fr.json +46 -3
  129. package/dist/translations/hi.json +47 -0
  130. package/dist/translations/index.d.ts +88 -26
  131. package/dist/translations/index.js +18 -32
  132. package/dist/translations/index.js.map +1 -1
  133. package/dist/translations/ja.json +47 -0
  134. package/dist/translations/nb.json +47 -0
  135. package/dist/translations/nl.json +47 -0
  136. package/dist/translations/pl.json +45 -2
  137. package/dist/translations/pt.json +47 -0
  138. package/dist/translations/ru.json +45 -2
  139. package/dist/translations/th.json +47 -0
  140. package/dist/translations/translation-schema.json +184 -11
  141. package/dist/translations/uk.json +45 -2
  142. package/dist/translations/zh.json +47 -0
  143. package/dist/types.d.ts +54 -28
  144. package/dist/types.js.map +1 -1
  145. package/dist/ui/Compose/Compose.js +42 -79
  146. package/dist/ui/Compose/Compose.js.map +1 -1
  147. package/dist/ui/Compose/Compose.jsx +32 -86
  148. package/dist/ui/Compose/ComposePlaceholder.js +1 -1
  149. package/dist/ui/Compose/ComposePlaceholder.js.map +1 -1
  150. package/dist/ui/Compose/ComposePlaceholder.jsx +1 -1
  151. package/dist/ui/Compose/{compose.module.css → compose.module.scss} +3 -5
  152. package/dist/ui/Compose/hooks/menu/Item.d.ts +1 -1
  153. package/dist/ui/Compose/hooks/menu/Item.js +7 -3
  154. package/dist/ui/Compose/hooks/menu/Item.js.map +1 -1
  155. package/dist/ui/Compose/hooks/menu/Item.jsx +11 -5
  156. package/dist/ui/Compose/hooks/menu/TranslateMenu.js +3 -1
  157. package/dist/ui/Compose/hooks/menu/TranslateMenu.js.map +1 -1
  158. package/dist/ui/Compose/hooks/menu/TranslateMenu.jsx +3 -1
  159. package/dist/ui/Compose/hooks/menu/items.d.ts +8 -8
  160. package/dist/ui/Compose/hooks/menu/itemsMap.d.ts +2 -1
  161. package/dist/ui/Compose/hooks/menu/itemsMap.js.map +1 -1
  162. package/dist/ui/Compose/hooks/menu/types.d.ts +21 -0
  163. package/dist/ui/Compose/hooks/menu/types.js +3 -0
  164. package/dist/ui/Compose/hooks/menu/types.js.map +1 -0
  165. package/dist/ui/Compose/hooks/menu/useMenu.d.ts +2 -2
  166. package/dist/ui/Compose/hooks/menu/useMenu.js +45 -23
  167. package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -1
  168. package/dist/ui/Compose/hooks/menu/useMenu.jsx +43 -23
  169. package/dist/ui/Compose/hooks/mergeGeneratedValue.d.ts +14 -0
  170. package/dist/ui/Compose/hooks/mergeGeneratedValue.js +38 -0
  171. package/dist/ui/Compose/hooks/mergeGeneratedValue.js.map +1 -0
  172. package/dist/ui/Compose/hooks/useGenerate.js +37 -12
  173. package/dist/ui/Compose/hooks/useGenerate.js.map +1 -1
  174. package/dist/ui/Compose/hooks/useGenerateUpload.js +66 -24
  175. package/dist/ui/Compose/hooks/useGenerateUpload.js.map +1 -1
  176. package/dist/ui/Compose/hooks/useStreamingUpdate.js +4 -4
  177. package/dist/ui/Compose/hooks/useStreamingUpdate.js.map +1 -1
  178. package/dist/ui/ConfigDashboard/configDashboard.module.css +94 -0
  179. package/dist/ui/ConfigDashboard/index.js +27 -92
  180. package/dist/ui/ConfigDashboard/index.js.map +1 -1
  181. package/dist/ui/ConfigDashboard/index.jsx +24 -77
  182. package/dist/ui/DynamicModelSelect/index.js +6 -27
  183. package/dist/ui/DynamicModelSelect/index.js.map +1 -1
  184. package/dist/ui/DynamicModelSelect/index.jsx +6 -29
  185. package/dist/ui/DynamicProviderSelect/index.js +6 -27
  186. package/dist/ui/DynamicProviderSelect/index.js.map +1 -1
  187. package/dist/ui/DynamicProviderSelect/index.jsx +6 -29
  188. package/dist/ui/DynamicVoiceSelect/index.js +34 -83
  189. package/dist/ui/DynamicVoiceSelect/index.js.map +1 -1
  190. package/dist/ui/DynamicVoiceSelect/index.jsx +16 -53
  191. package/dist/ui/GlobalProviderOptions/index.d.ts +2 -0
  192. package/dist/ui/GlobalProviderOptions/index.js +118 -0
  193. package/dist/ui/GlobalProviderOptions/index.js.map +1 -0
  194. package/dist/ui/GlobalProviderOptions/index.jsx +60 -0
  195. package/dist/ui/Icons/Icons.js +1 -1
  196. package/dist/ui/Icons/Icons.js.map +1 -1
  197. package/dist/ui/Icons/Icons.jsx +1 -1
  198. package/dist/ui/Icons/LottieAnimation.js +1 -1
  199. package/dist/ui/Icons/LottieAnimation.js.map +1 -1
  200. package/dist/ui/Icons/LottieAnimation.jsx +1 -1
  201. package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.d.ts +12 -0
  202. package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.js +166 -0
  203. package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.js.map +1 -0
  204. package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.jsx +83 -0
  205. package/dist/ui/InstructionProviderOptions/index.d.ts +2 -0
  206. package/dist/ui/InstructionProviderOptions/index.js +157 -0
  207. package/dist/ui/InstructionProviderOptions/index.js.map +1 -0
  208. package/dist/ui/InstructionProviderOptions/index.jsx +92 -0
  209. package/dist/ui/VoicesFetcher/index.js.map +1 -1
  210. package/dist/ui/hooks/useAISettings.d.ts +26 -0
  211. package/dist/ui/hooks/useAISettings.js +73 -0
  212. package/dist/ui/hooks/useAISettings.js.map +1 -0
  213. package/dist/ui/providerOptions/updateProviderOptionsValue.d.ts +6 -0
  214. package/dist/ui/providerOptions/updateProviderOptionsValue.js +50 -0
  215. package/dist/ui/providerOptions/updateProviderOptionsValue.js.map +1 -0
  216. package/dist/ui/shared/handleSelectChange.d.ts +5 -0
  217. package/dist/ui/shared/handleSelectChange.js +12 -0
  218. package/dist/ui/shared/handleSelectChange.js.map +1 -0
  219. package/dist/ui/shared/types.d.ts +11 -0
  220. package/dist/ui/shared/types.js +5 -0
  221. package/dist/ui/shared/types.js.map +1 -0
  222. package/dist/utilities/ai/resolveEffectiveInstructionSettings.d.ts +15 -0
  223. package/dist/utilities/ai/resolveEffectiveInstructionSettings.js +136 -0
  224. package/dist/utilities/ai/resolveEffectiveInstructionSettings.js.map +1 -0
  225. package/dist/{endpoints → utilities}/buildPromptUtils.js +14 -5
  226. package/dist/utilities/buildPromptUtils.js.map +1 -0
  227. package/dist/utilities/buildSmartPrompt.js +3 -3
  228. package/dist/utilities/buildSmartPrompt.js.map +1 -1
  229. package/dist/utilities/fields/fieldToJsonSchema.js.map +1 -0
  230. package/dist/utilities/fields/getFieldBySchemaPath.js.map +1 -0
  231. package/dist/utilities/fields/getFieldInfo.js.map +1 -0
  232. package/dist/utilities/{updateFieldsConfig.js → fields/updateFieldsConfig.js} +7 -2
  233. package/dist/utilities/fields/updateFieldsConfig.js.map +1 -0
  234. package/dist/utilities/images/extractImageData.js.map +1 -0
  235. package/dist/utilities/images/extractPromptAttachments.js.map +1 -0
  236. package/dist/utilities/{fetchImages.d.ts → images/fetchImages.d.ts} +1 -1
  237. package/dist/utilities/images/fetchImages.js +49 -0
  238. package/dist/utilities/images/fetchImages.js.map +1 -0
  239. package/dist/utilities/images/resolveImageReferences.js +183 -0
  240. package/dist/utilities/images/resolveImageReferences.js.map +1 -0
  241. package/dist/utilities/init/autoSetupProviders.d.ts +3 -0
  242. package/dist/utilities/init/autoSetupProviders.js +216 -0
  243. package/dist/utilities/init/autoSetupProviders.js.map +1 -0
  244. package/dist/utilities/lexical/editorSchemaValidator.js.map +1 -0
  245. package/dist/utilities/lexical/lexicalToHTML.js.map +1 -0
  246. package/dist/utilities/lexical/lexicalToPromptTemplate.d.ts +2 -0
  247. package/dist/utilities/lexical/lexicalToPromptTemplate.js +50 -0
  248. package/dist/utilities/lexical/lexicalToPromptTemplate.js.map +1 -0
  249. package/dist/utilities/lexical/setSafeLexicalState.js.map +1 -0
  250. package/dist/utilities/lexical/stringToLexicalJSON.d.ts +2 -0
  251. package/dist/utilities/lexical/stringToLexicalJSON.js +39 -0
  252. package/dist/utilities/lexical/stringToLexicalJSON.js.map +1 -0
  253. package/dist/utilities/sanitizeLog.d.ts +1 -0
  254. package/dist/utilities/sanitizeLog.js +39 -0
  255. package/dist/utilities/sanitizeLog.js.map +1 -0
  256. package/dist/utilities/seedProperties.js +37 -22
  257. package/dist/utilities/seedProperties.js.map +1 -1
  258. package/package.json +5 -2
  259. package/dist/ai/analyse.d.ts +0 -1
  260. package/dist/ai/analyse.js +0 -3
  261. package/dist/ai/analyse.js.map +0 -1
  262. package/dist/ai/index.d.ts +0 -11
  263. package/dist/ai/index.js +0 -25
  264. package/dist/ai/index.js.map +0 -1
  265. package/dist/ai/prompts.js.map +0 -1
  266. package/dist/ai/utils/filterEditorSchemaByNodes.js.map +0 -1
  267. package/dist/ai/utils/generateFileNameByPrompt.js.map +0 -1
  268. package/dist/ai/utils/isObjectSchema.js.map +0 -1
  269. package/dist/ai/utils/nodeToSchemaMap.js.map +0 -1
  270. package/dist/ai/utils/systemGenerate.js.map +0 -1
  271. package/dist/endpoints/buildPromptUtils.js.map +0 -1
  272. package/dist/endpoints/chat.d.ts +0 -4
  273. package/dist/fields/PromptEditorField/PromptEditorField.d.ts +0 -3
  274. package/dist/fields/PromptEditorField/PromptEditorField.js +0 -217
  275. package/dist/fields/PromptEditorField/PromptEditorField.js.map +0 -1
  276. package/dist/fields/PromptEditorField/PromptEditorField.jsx +0 -160
  277. package/dist/ui/AIConfigDashboard/index.d.ts +0 -2
  278. package/dist/ui/AIConfigDashboard/index.js +0 -224
  279. package/dist/ui/AIConfigDashboard/index.js.map +0 -1
  280. package/dist/ui/AIConfigDashboard/index.jsx +0 -175
  281. package/dist/ui/ProviderOptionsEditor/index.d.ts +0 -7
  282. package/dist/ui/ProviderOptionsEditor/index.js +0 -291
  283. package/dist/ui/ProviderOptionsEditor/index.js.map +0 -1
  284. package/dist/ui/ProviderOptionsEditor/index.jsx +0 -210
  285. package/dist/utilities/editorSchemaValidator.js.map +0 -1
  286. package/dist/utilities/extractImageData.js.map +0 -1
  287. package/dist/utilities/extractPromptAttachments.js.map +0 -1
  288. package/dist/utilities/fetchImages.js +0 -38
  289. package/dist/utilities/fetchImages.js.map +0 -1
  290. package/dist/utilities/fieldToJsonSchema.js.map +0 -1
  291. package/dist/utilities/getFieldBySchemaPath.js.map +0 -1
  292. package/dist/utilities/getFieldInfo.js.map +0 -1
  293. package/dist/utilities/getProviderOptionsFields.d.ts +0 -16
  294. package/dist/utilities/getProviderOptionsFields.js +0 -80
  295. package/dist/utilities/getProviderOptionsFields.js.map +0 -1
  296. package/dist/utilities/isPluginActivated.d.ts +0 -2
  297. package/dist/utilities/isPluginActivated.js +0 -5
  298. package/dist/utilities/isPluginActivated.js.map +0 -1
  299. package/dist/utilities/lexicalToHTML.js.map +0 -1
  300. package/dist/utilities/resolveImageReferences.js +0 -167
  301. package/dist/utilities/resolveImageReferences.js.map +0 -1
  302. package/dist/utilities/schemaConverter.d.ts +0 -3
  303. package/dist/utilities/schemaConverter.js +0 -93
  304. package/dist/utilities/schemaConverter.js.map +0 -1
  305. package/dist/utilities/setSafeLexicalState.js.map +0 -1
  306. package/dist/utilities/updateFieldsConfig.js.map +0 -1
  307. /package/dist/ai/{utils → utilities}/filterEditorSchemaByNodes.d.ts +0 -0
  308. /package/dist/ai/{utils → utilities}/filterEditorSchemaByNodes.js +0 -0
  309. /package/dist/ai/{utils → utilities}/generateFileNameByPrompt.d.ts +0 -0
  310. /package/dist/ai/{utils → utilities}/generateFileNameByPrompt.js +0 -0
  311. /package/dist/ai/{utils → utilities}/isObjectSchema.d.ts +0 -0
  312. /package/dist/ai/{utils → utilities}/isObjectSchema.js +0 -0
  313. /package/dist/ai/{utils → utilities}/nodeToSchemaMap.d.ts +0 -0
  314. /package/dist/ai/{utils → utilities}/nodeToSchemaMap.js +0 -0
  315. /package/dist/ai/{prompts.js → utilities/prompts.js} +0 -0
  316. /package/dist/ai/{utils → utilities}/systemGenerate.d.ts +0 -0
  317. /package/dist/ai/{utils → utilities}/systemGenerate.js +0 -0
  318. /package/dist/ui/Icons/{icons.module.css → icons.module.scss} +0 -0
  319. /package/dist/{endpoints → utilities}/buildPromptUtils.d.ts +0 -0
  320. /package/dist/utilities/{fieldToJsonSchema.d.ts → fields/fieldToJsonSchema.d.ts} +0 -0
  321. /package/dist/utilities/{fieldToJsonSchema.js → fields/fieldToJsonSchema.js} +0 -0
  322. /package/dist/utilities/{getFieldBySchemaPath.d.ts → fields/getFieldBySchemaPath.d.ts} +0 -0
  323. /package/dist/utilities/{getFieldBySchemaPath.js → fields/getFieldBySchemaPath.js} +0 -0
  324. /package/dist/utilities/{getFieldInfo.d.ts → fields/getFieldInfo.d.ts} +0 -0
  325. /package/dist/utilities/{getFieldInfo.js → fields/getFieldInfo.js} +0 -0
  326. /package/dist/utilities/{updateFieldsConfig.d.ts → fields/updateFieldsConfig.d.ts} +0 -0
  327. /package/dist/utilities/{extractImageData.d.ts → images/extractImageData.d.ts} +0 -0
  328. /package/dist/utilities/{extractImageData.js → images/extractImageData.js} +0 -0
  329. /package/dist/utilities/{extractPromptAttachments.d.ts → images/extractPromptAttachments.d.ts} +0 -0
  330. /package/dist/utilities/{extractPromptAttachments.js → images/extractPromptAttachments.js} +0 -0
  331. /package/dist/utilities/{resolveImageReferences.d.ts → images/resolveImageReferences.d.ts} +0 -0
  332. /package/dist/utilities/{editorSchemaValidator.d.ts → lexical/editorSchemaValidator.d.ts} +0 -0
  333. /package/dist/utilities/{editorSchemaValidator.js → lexical/editorSchemaValidator.js} +0 -0
  334. /package/dist/utilities/{lexicalToHTML.d.ts → lexical/lexicalToHTML.d.ts} +0 -0
  335. /package/dist/utilities/{lexicalToHTML.js → lexical/lexicalToHTML.js} +0 -0
  336. /package/dist/utilities/{setSafeLexicalState.d.ts → lexical/setSafeLexicalState.d.ts} +0 -0
  337. /package/dist/utilities/{setSafeLexicalState.js → lexical/setSafeLexicalState.js} +0 -0
@@ -1,210 +0,0 @@
1
- 'use client';
2
- import { RenderFields, useField, useFormFields } from '@payloadcms/ui';
3
- import React, { useEffect, useMemo, useState } from 'react';
4
- import { allProviderBlocks } from '../../ai/providers/blocks/index.js';
5
- /**
6
- * Find a field by name within a block's fields, searching through tabs
7
- */
8
- function findFieldInBlock(block, fieldName) {
9
- const searchFields = (fields) => {
10
- for (const field of fields) {
11
- if ('name' in field && field.name === fieldName) {
12
- return field;
13
- }
14
- if (field.type === 'tabs' && 'tabs' in field) {
15
- for (const tab of field.tabs) {
16
- const found = searchFields(tab.fields);
17
- if (found) {
18
- return found;
19
- }
20
- }
21
- }
22
- if (field.type === 'group' && 'fields' in field) {
23
- const found = searchFields(field.fields);
24
- if (found) {
25
- return found;
26
- }
27
- }
28
- }
29
- return undefined;
30
- };
31
- return searchFields(block.fields);
32
- }
33
- /**
34
- * Get provider options fields for a given provider and use case
35
- */
36
- function getProviderOptionsFields(providerSlug, useCase) {
37
- const block = allProviderBlocks.find((b) => b.slug === providerSlug);
38
- if (!block) {
39
- return [];
40
- }
41
- const groupName = `${useCase}ProviderOptions`;
42
- const optionsGroup = findFieldInBlock(block, groupName);
43
- if (optionsGroup && optionsGroup.type === 'group' && 'fields' in optionsGroup) {
44
- return optionsGroup.fields;
45
- }
46
- return [];
47
- }
48
- export const ProviderOptionsEditor = (props) => {
49
- const { path } = props;
50
- // Get parent path to find sibling provider field
51
- const parentPath = path.split('.').slice(0, -1).join('.');
52
- const providerField = useFormFields(([fields]) => fields[`${parentPath}.provider`]);
53
- const provider = providerField?.value;
54
- // Infer use case from path
55
- // Handles:
56
- // - AISettings: 'defaults.text.options' -> useCase is 'text'
57
- // - Instructions: 'text-settings.providerOptions' -> useCase is 'text'
58
- const useCase = useMemo(() => {
59
- // Check for AISettings paths first (e.g., 'defaults.text.options')
60
- const pathParts = path.split('.');
61
- const parentName = pathParts[pathParts.length - 2];
62
- if (['image', 'text', 'tts', 'video'].includes(parentName)) {
63
- return parentName;
64
- }
65
- // Check for Instructions paths
66
- if (path.includes('tts-settings')) {
67
- return 'tts';
68
- }
69
- if (path.includes('image-settings')) {
70
- return 'image';
71
- }
72
- if (path.includes('video-settings')) {
73
- return 'video';
74
- }
75
- return 'text';
76
- }, [path]);
77
- const { setValue, value } = useField({ path });
78
- const [aiSettings, setAiSettings] = useState(null);
79
- // Fetch AI Settings to get current provider defaults
80
- useEffect(() => {
81
- fetch('/api/globals/ai-providers?depth=1')
82
- .then((res) => res.json())
83
- .then((data) => setAiSettings(data))
84
- .catch((err) => console.error('Error fetching AI settings:', err));
85
- }, []);
86
- // Get the configured default options from AI Settings for this provider
87
- const configuredDefaults = useMemo(() => {
88
- if (!provider || !aiSettings) {
89
- return null;
90
- }
91
- const providerBlock = aiSettings.providers?.find((p) => p.blockType === provider && p.enabled);
92
- if (!providerBlock) {
93
- return null;
94
- }
95
- // Get provider options by use case
96
- const optionsKey = `${useCase}ProviderOptions`;
97
- return providerBlock[optionsKey] || null;
98
- }, [provider, useCase, aiSettings]);
99
- // Get field definitions from provider block
100
- const fields = useMemo(() => {
101
- if (!provider) {
102
- return [];
103
- }
104
- return getProviderOptionsFields(provider, useCase);
105
- }, [provider, useCase]);
106
- // Check if there are any overrides set
107
- const hasOverrides = useMemo(() => {
108
- return value && Object.keys(value).length > 0;
109
- }, [value]);
110
- if (!provider) {
111
- return (<div className="field-type" style={{ padding: '12px 0' }}>
112
- <p style={{ color: 'var(--theme-elevation-600)', fontSize: '13px', margin: 0 }}>
113
- Please select a provider first to configure options.
114
- </p>
115
- </div>);
116
- }
117
- if (fields.length === 0) {
118
- return (<div className="field-type" style={{ padding: '12px 0' }}>
119
- <p style={{ color: 'var(--theme-elevation-600)', fontSize: '13px', margin: 0 }}>
120
- No configurable options available for {provider} ({useCase}).
121
- </p>
122
- </div>);
123
- }
124
- return (<div className="field-type provider-options-editor">
125
- <div style={{ marginBottom: '16px' }}>
126
- <label className="field-label" style={{ display: 'block', marginBottom: '8px' }}>
127
- Provider Options
128
- </label>
129
-
130
- {configuredDefaults && (<div style={{
131
- background: 'var(--theme-elevation-50)',
132
- border: '1px solid var(--theme-elevation-100)',
133
- borderRadius: '4px',
134
- fontSize: '12px',
135
- marginBottom: '12px',
136
- padding: '12px',
137
- }}>
138
- <div style={{
139
- alignItems: 'center',
140
- display: 'flex',
141
- justifyContent: 'space-between',
142
- marginBottom: '8px',
143
- }}>
144
- <strong style={{ color: 'var(--theme-elevation-800)' }}>
145
- Defaults from AI Settings
146
- </strong>
147
- <span style={{
148
- background: 'var(--theme-elevation-100)',
149
- borderRadius: '10px',
150
- color: 'var(--theme-elevation-500)',
151
- fontSize: '11px',
152
- padding: '2px 8px',
153
- }}>
154
- Inherited
155
- </span>
156
- </div>
157
- <div style={{
158
- color: 'var(--theme-elevation-600)',
159
- display: 'flex',
160
- flexWrap: 'wrap',
161
- gap: '8px',
162
- }}>
163
- {Object.entries(configuredDefaults).map(([key, val]) => {
164
- // Skip nested objects for display
165
- if (typeof val === 'object' && val !== null) {
166
- return null;
167
- }
168
- return (<span key={key} style={{
169
- background: 'var(--theme-elevation-100)',
170
- borderRadius: '3px',
171
- fontSize: '11px',
172
- padding: '2px 6px',
173
- }}>
174
- {key}: <strong>{String(val)}</strong>
175
- </span>);
176
- })}
177
- </div>
178
- </div>)}
179
-
180
- <p style={{
181
- color: 'var(--theme-elevation-500)',
182
- fontSize: '12px',
183
- fontStyle: 'italic',
184
- marginBottom: '12px',
185
- }}>
186
- Override defaults for this specific field. Empty values inherit from AI Settings.
187
- </p>
188
- </div>
189
-
190
- <RenderFields fields={fields} forceRender margins="small" parentIndexPath="" parentPath={path} parentSchemaPath={path} permissions={true}/>
191
-
192
- {hasOverrides && (<button onClick={() => setValue({})} onMouseEnter={(e) => {
193
- e.currentTarget.style.background = 'var(--theme-elevation-100)';
194
- }} onMouseLeave={(e) => {
195
- e.currentTarget.style.background = 'transparent';
196
- }} style={{
197
- background: 'transparent',
198
- border: '1px solid var(--theme-elevation-200)',
199
- borderRadius: '4px',
200
- color: 'var(--theme-text)',
201
- cursor: 'pointer',
202
- fontSize: '13px',
203
- marginTop: '12px',
204
- padding: '8px 16px',
205
- transition: 'all 0.15s ease',
206
- }} type="button">
207
- Reset to Defaults
208
- </button>)}
209
- </div>);
210
- };
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/editorSchemaValidator.ts"],"sourcesContent":["import ajvModule from 'ajv'\n\nexport const editorSchemaValidator = (schema: unknown) => {\n const modifiedSchema = JSON.parse(JSON.stringify(schema), function (key: string, value: any) {\n if (key === 'required' && Array.isArray(value)) {\n // Safely access properties from parent\n const parent = this as { properties?: Record<string, any> }\n const parentProperties = parent.properties\n\n if (parentProperties) {\n const requiredFields = ['type'] // type is always required\n\n // Check if this node has children property\n if ('children' in parentProperties) {\n requiredFields.push('children')\n }\n\n // Check if this node has text property\n if ('text' in parentProperties) {\n requiredFields.push('text')\n }\n\n const filteredRequired = value.filter((field) => requiredFields.includes(field))\n return filteredRequired.length ? filteredRequired : undefined\n }\n }\n return value\n })\n\n const Ajv = ajvModule.default\n const ajv = new Ajv()\n\n return ajv.compile(modifiedSchema)\n}\n"],"names":["ajvModule","editorSchemaValidator","schema","modifiedSchema","JSON","parse","stringify","key","value","Array","isArray","parent","parentProperties","properties","requiredFields","push","filteredRequired","filter","field","includes","length","undefined","Ajv","default","ajv","compile"],"mappings":"AAAA,OAAOA,eAAe,MAAK;AAE3B,OAAO,MAAMC,wBAAwB,CAACC;IACpC,MAAMC,iBAAiBC,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACJ,SAAS,SAAUK,GAAW,EAAEC,KAAU;QACzF,IAAID,QAAQ,cAAcE,MAAMC,OAAO,CAACF,QAAQ;YAC9C,uCAAuC;YACvC,MAAMG,SAAS,IAAI;YACnB,MAAMC,mBAAmBD,OAAOE,UAAU;YAE1C,IAAID,kBAAkB;gBACpB,MAAME,iBAAiB;oBAAC;iBAAO,CAAC,0BAA0B;;gBAE1D,2CAA2C;gBAC3C,IAAI,cAAcF,kBAAkB;oBAClCE,eAAeC,IAAI,CAAC;gBACtB;gBAEA,uCAAuC;gBACvC,IAAI,UAAUH,kBAAkB;oBAC9BE,eAAeC,IAAI,CAAC;gBACtB;gBAEA,MAAMC,mBAAmBR,MAAMS,MAAM,CAAC,CAACC,QAAUJ,eAAeK,QAAQ,CAACD;gBACzE,OAAOF,iBAAiBI,MAAM,GAAGJ,mBAAmBK;YACtD;QACF;QACA,OAAOb;IACT;IAEA,MAAMc,MAAMtB,UAAUuB,OAAO;IAC7B,MAAMC,MAAM,IAAIF;IAEhB,OAAOE,IAAIC,OAAO,CAACtB;AACrB,EAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/extractImageData.ts"],"sourcesContent":["type ImageData = {\n image: { name: string; type: string; url: string }\n}[]\n\n/**\n * Extracts hardcoded image URLs from text using regex.\n * \n * NOTE: This only handles direct URLs in the text.\n * For @field references, use resolveImageReferences utility instead.\n * \n * @param input - Text containing image URLs\n * @returns Array of extracted image data\n */\nexport function extractImageData(input: string): ImageData {\n const regex = /(?:https?:)?\\/[\\w%\\-.,/]+\\.(png|jpe?g|webp)/gi\n const matches = input.match(regex)\n\n if (!matches) {return []}\n\n return matches.map((url) => {\n const decodedUrl = decodeURIComponent(url)\n const parts = decodedUrl.split('/')\n const filename = parts[parts.length - 1]\n const name = filename.replace(/\\.(png|jpe?g|webp)$/i, '')\n const typeMatch = filename.match(/\\.(png|jpe?g|webp)$/i)\n const type = typeMatch ? typeMatch[1].toLowerCase() : 'unknown'\n\n return {\n image: {\n name,\n type,\n url,\n },\n }\n })\n}\n"],"names":["extractImageData","input","regex","matches","match","map","url","decodedUrl","decodeURIComponent","parts","split","filename","length","name","replace","typeMatch","type","toLowerCase","image"],"mappings":"AAIA;;;;;;;;CAQC,GACD,OAAO,SAASA,iBAAiBC,KAAa;IAC5C,MAAMC,QAAQ;IACd,MAAMC,UAAUF,MAAMG,KAAK,CAACF;IAE5B,IAAI,CAACC,SAAS;QAAC,OAAO,EAAE;IAAA;IAExB,OAAOA,QAAQE,GAAG,CAAC,CAACC;QAClB,MAAMC,aAAaC,mBAAmBF;QACtC,MAAMG,QAAQF,WAAWG,KAAK,CAAC;QAC/B,MAAMC,WAAWF,KAAK,CAACA,MAAMG,MAAM,GAAG,EAAE;QACxC,MAAMC,OAAOF,SAASG,OAAO,CAAC,wBAAwB;QACtD,MAAMC,YAAYJ,SAASP,KAAK,CAAC;QACjC,MAAMY,OAAOD,YAAYA,SAAS,CAAC,EAAE,CAACE,WAAW,KAAK;QAEtD,OAAO;YACLC,OAAO;gBACLL;gBACAG;gBACAV;YACF;QACF;IACF;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/extractPromptAttachments.ts"],"sourcesContent":["import type { ModelMessage } from 'ai'\n\n// Converts prompt into messages, extracting images in the process\nexport function extractPromptAttachments(prompt: string): ModelMessage[] {\n // Regex to match absolute HTTPS URLs with image extensions\n const imageUrlRegex = /https:\\/\\/\\S+\\.(?:png|jpe?g|webp)/gi\n \n const messages: ModelMessage[] = []\n const imageUrls: string[] = []\n \n // Find all image URLs in the prompt\n let match\n while ((match = imageUrlRegex.exec(prompt)) !== null) {\n imageUrls.push(match[0])\n }\n \n // Create image messages first\n for (const imageUrl of imageUrls) {\n messages.push({\n content: [\n {\n type: 'image',\n image: new URL(imageUrl)\n }\n ],\n role: 'user'\n })\n }\n \n // Add the text prompt as a regular user message if there's any text left\n messages.push({\n content: prompt,\n role: 'user'\n })\n\n return messages\n}"],"names":["extractPromptAttachments","prompt","imageUrlRegex","messages","imageUrls","match","exec","push","imageUrl","content","type","image","URL","role"],"mappings":"AAEA,kEAAkE;AAClE,OAAO,SAASA,yBAAyBC,MAAc;IACrD,2DAA2D;IAC3D,MAAMC,gBAAgB;IAEtB,MAAMC,WAA2B,EAAE;IACnC,MAAMC,YAAsB,EAAE;IAE9B,oCAAoC;IACpC,IAAIC;IACJ,MAAO,AAACA,CAAAA,QAAQH,cAAcI,IAAI,CAACL,OAAM,MAAO,KAAM;QACpDG,UAAUG,IAAI,CAACF,KAAK,CAAC,EAAE;IACzB;IAEA,8BAA8B;IAC9B,KAAK,MAAMG,YAAYJ,UAAW;QAChCD,SAASI,IAAI,CAAC;YACZE,SAAS;gBACP;oBACEC,MAAM;oBACNC,OAAO,IAAIC,IAAIJ;gBACjB;aACD;YACDK,MAAM;QACR;IACF;IAEA,yEAAyE;IACzEV,SAASI,IAAI,CAAC;QACZE,SAASR;QACTY,MAAM;IACR;IAEA,OAAOV;AACT"}
@@ -1,38 +0,0 @@
1
- import * as process from 'node:process';
2
- /**
3
- * Fetches images from a list of objects containing URLs (and optional thumbnails/mimetypes)
4
- * and converts them to AI SDK compatible ImageParts.
5
- */ export async function fetchImages(req, images) {
6
- const imageParts = [];
7
- for (const img of images){
8
- const serverURL = req.payload.config?.serverURL || process.env.SERVER_URL || process.env.NEXT_PUBLIC_SERVER_URL;
9
- let url = img.image.thumbnailURL || img.image.url;
10
- if (!url.startsWith('http')) {
11
- url = `${String(serverURL)}${String(url)}`;
12
- }
13
- try {
14
- const response = await fetch(url, {
15
- headers: {
16
- Authorization: `Bearer ${req.headers.get('Authorization')?.split('Bearer ')[1] || ''}`
17
- },
18
- method: 'GET'
19
- });
20
- if (!response.ok) {
21
- throw new Error(`Failed to fetch image: ${response.statusText}`);
22
- }
23
- const blob = await response.blob();
24
- const arrayBuffer = await blob.arrayBuffer();
25
- imageParts.push({
26
- type: 'image',
27
- image: arrayBuffer,
28
- mediaType: img.image.mimeType || blob.type || 'image/png'
29
- });
30
- } catch (e) {
31
- req.payload.logger.error(e, `Error fetching reference image ${url}`);
32
- throw new Error("We couldn't fetch the images. Please ensure the images are accessible and hosted publicly.");
33
- }
34
- }
35
- return imageParts;
36
- }
37
-
38
- //# sourceMappingURL=fetchImages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/fetchImages.ts"],"sourcesContent":["import type { ImagePart } from 'ai'\nimport type { PayloadRequest } from 'payload'\n\nimport * as process from 'node:process'\n\nexport interface FetchableImage {\n image: {\n mimeType?: string\n thumbnailURL?: string\n url: string\n }\n}\n\n/**\n * Fetches images from a list of objects containing URLs (and optional thumbnails/mimetypes)\n * and converts them to AI SDK compatible ImageParts.\n */\nexport async function fetchImages(\n req: PayloadRequest,\n images: FetchableImage[],\n): Promise<ImagePart[]> {\n const imageParts: ImagePart[] = []\n\n for (const img of images) {\n const serverURL =\n req.payload.config?.serverURL ||\n process.env.SERVER_URL ||\n process.env.NEXT_PUBLIC_SERVER_URL\n\n let url = img.image.thumbnailURL || img.image.url\n if (!url.startsWith('http')) {\n url = `${String(serverURL)}${String(url)}`\n }\n\n try {\n const response = await fetch(url, {\n headers: {\n Authorization: `Bearer ${req.headers.get('Authorization')?.split('Bearer ')[1] || ''}`,\n },\n method: 'GET',\n })\n\n if (!response.ok) {\n throw new Error(`Failed to fetch image: ${response.statusText}`)\n }\n\n const blob = await response.blob()\n const arrayBuffer = await blob.arrayBuffer()\n\n imageParts.push({\n type: 'image',\n image: arrayBuffer,\n mediaType: img.image.mimeType || blob.type || 'image/png',\n })\n } catch (e) {\n req.payload.logger.error(e, `Error fetching reference image ${url}`)\n throw new Error(\n \"We couldn't fetch the images. Please ensure the images are accessible and hosted publicly.\",\n )\n }\n }\n\n return imageParts\n}\n"],"names":["process","fetchImages","req","images","imageParts","img","serverURL","payload","config","env","SERVER_URL","NEXT_PUBLIC_SERVER_URL","url","image","thumbnailURL","startsWith","String","response","fetch","headers","Authorization","get","split","method","ok","Error","statusText","blob","arrayBuffer","push","type","mediaType","mimeType","e","logger","error"],"mappings":"AAGA,YAAYA,aAAa,eAAc;AAUvC;;;CAGC,GACD,OAAO,eAAeC,YACpBC,GAAmB,EACnBC,MAAwB;IAExB,MAAMC,aAA0B,EAAE;IAElC,KAAK,MAAMC,OAAOF,OAAQ;QACxB,MAAMG,YACJJ,IAAIK,OAAO,CAACC,MAAM,EAAEF,aACpBN,QAAQS,GAAG,CAACC,UAAU,IACtBV,QAAQS,GAAG,CAACE,sBAAsB;QAEpC,IAAIC,MAAMP,IAAIQ,KAAK,CAACC,YAAY,IAAIT,IAAIQ,KAAK,CAACD,GAAG;QACjD,IAAI,CAACA,IAAIG,UAAU,CAAC,SAAS;YAC3BH,MAAM,CAAC,EAAEI,OAAOV,WAAW,EAAEU,OAAOJ,KAAK,CAAC;QAC5C;QAEA,IAAI;YACF,MAAMK,WAAW,MAAMC,MAAMN,KAAK;gBAChCO,SAAS;oBACPC,eAAe,CAAC,OAAO,EAAElB,IAAIiB,OAAO,CAACE,GAAG,CAAC,kBAAkBC,MAAM,UAAU,CAAC,EAAE,IAAI,GAAG,CAAC;gBACxF;gBACAC,QAAQ;YACV;YAEA,IAAI,CAACN,SAASO,EAAE,EAAE;gBAChB,MAAM,IAAIC,MAAM,CAAC,uBAAuB,EAAER,SAASS,UAAU,CAAC,CAAC;YACjE;YAEA,MAAMC,OAAO,MAAMV,SAASU,IAAI;YAChC,MAAMC,cAAc,MAAMD,KAAKC,WAAW;YAE1CxB,WAAWyB,IAAI,CAAC;gBACdC,MAAM;gBACNjB,OAAOe;gBACPG,WAAW1B,IAAIQ,KAAK,CAACmB,QAAQ,IAAIL,KAAKG,IAAI,IAAI;YAChD;QACF,EAAE,OAAOG,GAAG;YACV/B,IAAIK,OAAO,CAAC2B,MAAM,CAACC,KAAK,CAACF,GAAG,CAAC,+BAA+B,EAAErB,IAAI,CAAC;YACnE,MAAM,IAAIa,MACR;QAEJ;IACF;IAEA,OAAOrB;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/fieldToJsonSchema.ts"],"sourcesContent":["/**\n * fieldToJsonSchema\n * Convert a Payload Field (server or client) into a minimal JSON Schema object,\n * wrapped as { type: 'object', properties: { [name]: valueSchema }, required: [...] }\n *\n * Supported types:\n * - text, textarea, select, number, date, code, email, json\n * Arrays are emitted only when field.hasMany is true and the field type supports hasMany\n * (text, textarea, select; for others only if your config truly sets hasMany).\n */\nimport type { Field } from 'payload'\n\nexport type JsonSchema = Record<string, any>;\n\n// Narrowed minimal typing to avoid anywhere possible without pulling the full payload types at runtime.\n// In a Payload project, you can import type { Field, ClientField } from 'payload' and use those instead.\ntype BaseField = {\n admin?: {\n description?: unknown;\n language?: unknown;\n };\n hasMany?: boolean;\n // json\n jsonSchema?: unknown;\n max?: number;\n maxRows?: number;\n // number\n min?: number;\n // text/textarea\n minRows?: number;\n name?: string;\n // select\n options?: Array<\n | {\n label?: unknown;\n value: number | string;\n }\n | number\n | string\n >;\n required?: boolean;\n schema?: unknown;\n type?: string;\n typescriptSchema?: unknown;\n};\n\nfunction isString(s: unknown): s is string {\n return typeof s === 'string';\n}\n\nfunction isPlainObject(o: unknown): o is Record<string, unknown> {\n return !!o && typeof o === 'object' && !Array.isArray(o);\n}\n\nfunction getDescription(field: BaseField): string | undefined {\n const d = field?.admin?.description;\n return typeof d === 'string' ? d : undefined;\n}\n\nfunction stringWithDescription(field: BaseField) {\n const out: Record<string, any> = { type: 'string' };\n const description = getDescription(field);\n if (description) {out.description = description;}\n return out;\n}\n\nfunction numberWithBounds(field: BaseField) {\n const out: Record<string, any> = { type: 'number' };\n if (typeof field.min === 'number') {out.minimum = field.min;}\n if (typeof field.max === 'number') {out.maximum = field.max;}\n const description = getDescription(field);\n if (description) {out.description = description;}\n return out;\n}\n\nfunction dateSchema(field: BaseField) {\n const out: Record<string, any> = { type: 'string', format: 'date-time' };\n const description = getDescription(field);\n if (description) {out.description = description;}\n return out;\n}\n\nfunction codeSchema(field: BaseField) {\n const out: Record<string, any> = { type: 'string' };\n let description = getDescription(field);\n const lang = field?.admin?.language;\n if (typeof lang === 'string' && lang.trim()) {\n description = description ? `${description} (language: ${lang})` : `language: ${lang}`;\n }\n if (description) {out.description = description;}\n return out;\n}\n\nfunction emailSchema(field: BaseField) {\n const out: Record<string, any> = { type: 'string', format: 'email' };\n const description = getDescription(field);\n if (description) {out.description = description;}\n return out;\n}\n\nfunction jsonValueSchema(field: BaseField) {\n // Prefer a provided JSON Schema object\n if (isPlainObject(field.jsonSchema)) {return field.jsonSchema as object;}\n if (isPlainObject(field.schema)) {return field.schema as object;}\n\n // typescriptSchema cannot be executed here; default to object\n return { type: 'object' };\n}\n\nfunction normalizeSelectOptions(field: BaseField): { values: Array<number | string>; valueType: 'number' | 'string' } {\n const raw = field.options || [];\n const values: Array<number | string> = [];\n\n for (const opt of raw) {\n if (typeof opt === 'string' || typeof opt === 'number') {\n values.push(opt);\n } else if (isPlainObject(opt) && ('value' in opt)) {\n const v = (opt as any).value;\n if (typeof v === 'string' || typeof v === 'number') {\n values.push(v);\n }\n }\n }\n\n // Infer primitive type\n const allNumbers = values.length > 0 && values.every((v) => typeof v === 'number');\n const valueType: 'number' | 'string' = allNumbers ? 'number' : 'string';\n return { values, valueType };\n}\n\nfunction supportsHasMany(fieldType: string | undefined): boolean {\n // Out of the box: text, textarea, select support hasMany\n // Others can be arrays only if your config truly sets hasMany; we return boolean based on type here.\n return fieldType === 'text' || fieldType === 'textarea' || fieldType === 'select';\n}\n\nexport function fieldToJsonSchema(\n fieldInput: BaseField & Field,\n opts?: { nameOverride?: string; wrapObject?: boolean },\n): JsonSchema {\n const field = fieldInput || {};\n const name = isString(opts?.nameOverride) && opts?.nameOverride.length ? opts.nameOverride : (field.name || 'value');\n const type = field.type;\n\n let valueSchema: null | Record<string, any> = null;\n\n switch (type) {\n case 'array':\n case 'group': {\n if ('fields' in field && Array.isArray(field.fields)) {\n const properties: Record<string, any> = {}\n const required: string[] = []\n \n const processFields = (fields: any[]) => {\n for (const subField of fields) {\n if (subField.type === 'row' || subField.type === 'collapsible') {\n if (subField.fields) {processFields(subField.fields)}\n continue\n }\n if (!subField.name || subField.name === 'id') {continue}\n\n const subSchema = fieldToJsonSchema(subField, { wrapObject: false })\n if (subSchema && Object.keys(subSchema).length > 0) {\n properties[subField.name] = subSchema\n // OpenAI Strict Mode: All fields must be required\n required.push(subField.name)\n \n // If field is optional in Payload, allow null in schema\n if (!subField.required) {\n // Arrays usually default to empty array [], so we don't make them nullable\n // Groups and other types can be null\n if (subSchema.type !== 'array') {\n if (Array.isArray(subSchema.type)) {\n if (!subSchema.type.includes('null')) {\n subSchema.type.push('null')\n }\n } else if (typeof subSchema.type === 'string' && subSchema.type !== 'null') {\n subSchema.type = [subSchema.type, 'null']\n }\n \n // If enum is present, we must allow null in enum or use anyOf? \n // OpenAI strict mode: \"enum values must be consistent with type\". \n // If type is [string, null], null is a valid value for the type, but if enum is [\"a\"], null is not in enum.\n // valid: { type: [\"string\", \"null\"], enum: [\"a\", null] } \n if (Array.isArray(subSchema.enum) && !subSchema.enum.includes(null)) {\n subSchema.enum.push(null)\n }\n }\n }\n }\n }\n }\n \n processFields(field.fields)\n\n const objSchema = {\n type: 'object',\n additionalProperties: false,\n properties,\n required: required.length ? required : undefined\n }\n\n if (type === 'array') {\n valueSchema = {\n type: 'array',\n items: objSchema\n }\n if (typeof field.maxRows === 'number') {\n valueSchema.maxItems = field.maxRows\n }\n if (typeof field.minRows === 'number') {\n valueSchema.minItems = field.minRows\n }\n } else {\n valueSchema = objSchema\n }\n \n const description = getDescription(field);\n if (description) {valueSchema.description = description;}\n }\n break;\n }\n\n case 'checkbox': {\n valueSchema = { type: 'boolean' };\n const description = getDescription(field);\n if (description) {valueSchema.description = description;}\n break;\n }\n\n case 'code': {\n const base = codeSchema(field);\n if (field.hasMany) {\n valueSchema = { type: 'array', items: base };\n } else {\n valueSchema = base;\n }\n break;\n }\n\n case 'date': {\n const base = dateSchema(field);\n if (field.hasMany) {\n valueSchema = { type: 'array', items: base };\n } else {\n valueSchema = base;\n }\n break;\n }\n\n case 'email': {\n const base = emailSchema(field);\n if (field.hasMany) {\n valueSchema = { type: 'array', items: base };\n } else {\n valueSchema = base;\n }\n break;\n }\n\n case 'json': {\n const base = jsonValueSchema(field);\n if (field.hasMany) {\n valueSchema = { type: 'array', items: base };\n } else {\n valueSchema = base as Record<string, any>;\n }\n break;\n }\n\n case 'number': {\n const base = numberWithBounds(field);\n if (field.hasMany) {\n valueSchema = { type: 'array', items: base };\n } else {\n valueSchema = base;\n }\n break;\n }\n case 'select': {\n const { values, valueType } = normalizeSelectOptions(field);\n const baseSingle: Record<string, any> = { type: valueType, enum: values };\n const description = getDescription(field);\n if (description) {baseSingle.description = description;}\n\n if (field.hasMany && supportsHasMany(type)) {\n valueSchema = {\n type: 'array',\n items: { type: valueType, enum: values },\n ...(description ? { description } : {}),\n };\n } else {\n valueSchema = baseSingle;\n }\n break;\n }\n\n case 'text':\n case 'textarea': {\n const base = stringWithDescription(field);\n if (field.hasMany && supportsHasMany(type)) {\n const arr: Record<string, any> = {\n type: 'array',\n items: { type: 'string' },\n };\n if (typeof field.minRows === 'number') {arr.minItems = field.minRows;}\n if (typeof field.maxRows === 'number') {arr.maxItems = field.maxRows;}\n if (base.description) {arr.description = base.description;}\n valueSchema = arr;\n } else {\n valueSchema = base;\n }\n break;\n }\n \n // Explicitly handle organizational types to avoid default breakage if passed directly\n // though usually they are handled by parent recursion in group/array case above.\n // If passed as root, we can't really return a meaningful single-value schema without a wrapper?\n // But let's leave default for them or handle if necessary. \n // For now, if someone passes a 'row' as root, it will fall to default (null).\n\n default: {\n valueSchema = null;\n break;\n }\n }\n\n const wrap = opts?.wrapObject !== false;\n\n if (!wrap) {\n return (valueSchema || {}) as JsonSchema;\n }\n\n if (!valueSchema) {\n return {} as JsonSchema;\n }\n\n const schema: JsonSchema = {\n type: 'object',\n additionalProperties: false,\n properties: {\n [name]: valueSchema,\n },\n required: [name]\n };\n\n return schema;\n}\n"],"names":["isString","s","isPlainObject","o","Array","isArray","getDescription","field","d","admin","description","undefined","stringWithDescription","out","type","numberWithBounds","min","minimum","max","maximum","dateSchema","format","codeSchema","lang","language","trim","emailSchema","jsonValueSchema","jsonSchema","schema","normalizeSelectOptions","raw","options","values","opt","push","v","value","allNumbers","length","every","valueType","supportsHasMany","fieldType","fieldToJsonSchema","fieldInput","opts","name","nameOverride","valueSchema","fields","properties","required","processFields","subField","subSchema","wrapObject","Object","keys","includes","enum","objSchema","additionalProperties","items","maxRows","maxItems","minRows","minItems","base","hasMany","baseSingle","arr","wrap"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/getFieldBySchemaPath.ts"],"sourcesContent":["import type { ClientCollectionConfig, CollectionConfig, Field } from 'payload'\n\ntype AnyCollectionConfig = ClientCollectionConfig | CollectionConfig\n\n/**\n * Resolve a Payload field definition by a full schemaPath like:\n * \"{collectionSlug}.fieldA.subFieldB.blockSlug.innerField\"\n *\n * Notes:\n * - Tabs are a UI construct and are not part of schemaPath (fields inside tabs are at the same level).\n * - Blocks include the block slug as part of the path (we must consume it between the block field and its inner fields).\n * - Rows are skipped by this plugin&#39;s schema path mapping; support added defensively.\n */\nexport const getFieldBySchemaPath = (\n collectionConfig: AnyCollectionConfig,\n schemaPath: string,\n): Field | null => {\n if (!collectionConfig || !schemaPath) {\n return null\n }\n\n const parts = schemaPath.split('.')\n if (!parts.length) {\n return null\n }\n\n // Strip the collection slug prefix if present\n const [collectionSlug, ...rest] = parts\n const pathParts =\n collectionSlug === collectionConfig.slug ? rest.filter(Boolean) : parts.filter(Boolean)\n\n if (!pathParts.length) {\n return null\n }\n\n const findInFields = (fields: Field[], segments: string[]): Field | null => {\n if (!segments.length) {\n return null\n }\n\n const [current, ...remaining] = segments\n\n // First, try to match a field by name\n for (const field of fields) {\n // Tabs do not contribute to path segments; search inside all tabs with the same segments\n if ((field as any).tabs) {\n const tabs = (field as any).tabs as Array<{ fields?: Field[] }>\n for (const tab of tabs) {\n const foundInTab =\n tab.fields && tab.fields.length ? findInFields(tab.fields, segments) : null\n if (foundInTab) {\n return foundInTab\n }\n }\n }\n\n // Handle unnamed groups and collapsibles (they don't contribute to path)\n // Groups without names are just wrappers, their children are at the same path level\n if ((field as any).type === 'group' && !(field as any).name && (field as any).fields) {\n const foundInUnnamedGroup = findInFields((field as any).fields, segments)\n if (foundInUnnamedGroup) {\n return foundInUnnamedGroup\n }\n }\n\n // Handle unnamed collapsibles similarly\n if ((field as any).type === 'collapsible' && (field as any).fields) {\n const foundInCollapsible = findInFields((field as any).fields, segments)\n if (foundInCollapsible) {\n return foundInCollapsible\n }\n }\n\n if ((field as any).name === current) {\n // If this is the last segment, we found the target field\n if (remaining.length === 0) {\n return field\n }\n\n // Recurse into composite field types\n if ((field as any).fields && Array.isArray((field as any).fields)) {\n const found = findInFields((field as any).fields, remaining)\n if (found) {\n return found\n }\n }\n\n if ((field as any).blocks && Array.isArray((field as any).blocks)) {\n // Next segment should be a block slug, then continue into block fields\n if (!remaining.length) {\n return field\n } // path stops at block container (unlikely for our mapping)\n const [blockSlug, ...afterBlock] = remaining\n const blocks = (field as any).blocks as Array<{ fields: Field[]; slug: string }>\n const block = blocks.find((b) => b.slug === blockSlug)\n if (block) {\n const found = findInFields(block.fields, afterBlock)\n if (found) {\n return found\n }\n }\n }\n }\n }\n\n // Not found at this level\n return null\n }\n\n const rootFields = (collectionConfig as any).fields as Field[] | undefined\n if (!rootFields || !Array.isArray(rootFields)) {\n return null\n }\n\n return findInFields(rootFields, pathParts)\n}\n"],"names":["getFieldBySchemaPath","collectionConfig","schemaPath","parts","split","length","collectionSlug","rest","pathParts","slug","filter","Boolean","findInFields","fields","segments","current","remaining","field","tabs","tab","foundInTab","type","name","foundInUnnamedGroup","foundInCollapsible","Array","isArray","found","blocks","blockSlug","afterBlock","block","find","b","rootFields"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/getFieldInfo.ts"],"sourcesContent":["import type { BasePayload } from 'payload'\n\nimport { getFieldBySchemaPath } from './getFieldBySchemaPath.js'\n\nexport const 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"],"names":["getFieldBySchemaPath","getFieldInfo","collections","schemaPath","fieldInfo","collectionsKey","collection","config"],"mappings":"AAEA,SAASA,oBAAoB,QAAQ,4BAA2B;AAEhE,OAAO,MAAMC,eAAe,CAACC,aAAyCC;IACpE,IAAIC,YAAY;IAChB,8CAA8C;IAC9C,IAAK,MAAMC,kBAAkBH,YAAa;QACxC,MAAMI,aAAaJ,WAAW,CAACG,eAAe;QAC9CD,YAAYJ,qBAAqBM,WAAWC,MAAM,EAAEJ;QACpD,IAAIC,WAAW;YACb,OAAOA;QACT;IACF;AACF,EAAC"}
@@ -1,16 +0,0 @@
1
- import type { Field } from 'payload';
2
- type UseCase = 'image' | 'text' | 'tts' | 'video';
3
- /**
4
- * Extract provider options fields for a given provider and use case.
5
- * Returns the inner fields of the {useCase}ProviderOptions group.
6
- */
7
- export declare function getProviderOptionsFields(providerSlug: string, useCase: UseCase): Field[];
8
- /**
9
- * Get the default values from provider options fields
10
- */
11
- export declare function getProviderOptionsDefaults(providerSlug: string, useCase: UseCase): Record<string, unknown>;
12
- /**
13
- * Check if a provider supports a given use case
14
- */
15
- export declare function providerSupportsUseCase(providerSlug: string, useCase: UseCase): boolean;
16
- export {};
@@ -1,80 +0,0 @@
1
- import { allProviderBlocks } from '../ai/providers/blocks/index.js';
2
- /**
3
- * Get the provider options field group name for a given use case
4
- */ function getOptionsGroupName(useCase) {
5
- return `${useCase}ProviderOptions`;
6
- }
7
- /**
8
- * Find a field by name within a block's fields, searching through tabs
9
- */ function findFieldInBlock(block, fieldName) {
10
- const searchFields = (fields)=>{
11
- for (const field of fields){
12
- if ('name' in field && field.name === fieldName) {
13
- return field;
14
- }
15
- if (field.type === 'tabs' && 'tabs' in field) {
16
- for (const tab of field.tabs){
17
- const found = searchFields(tab.fields);
18
- if (found) {
19
- return found;
20
- }
21
- }
22
- }
23
- if (field.type === 'group' && 'fields' in field) {
24
- const found = searchFields(field.fields);
25
- if (found) {
26
- return found;
27
- }
28
- }
29
- }
30
- return undefined;
31
- };
32
- return searchFields(block.fields);
33
- }
34
- /**
35
- * Extract provider options fields for a given provider and use case.
36
- * Returns the inner fields of the {useCase}ProviderOptions group.
37
- */ export function getProviderOptionsFields(providerSlug, useCase) {
38
- const block = allProviderBlocks.find((b)=>b.slug === providerSlug);
39
- if (!block) {
40
- return [];
41
- }
42
- const groupName = getOptionsGroupName(useCase);
43
- const optionsGroup = findFieldInBlock(block, groupName);
44
- if (optionsGroup && optionsGroup.type === 'group' && 'fields' in optionsGroup) {
45
- return optionsGroup.fields;
46
- }
47
- return [];
48
- }
49
- /**
50
- * Get the default values from provider options fields
51
- */ export function getProviderOptionsDefaults(providerSlug, useCase) {
52
- const fields = getProviderOptionsFields(providerSlug, useCase);
53
- const defaults = {};
54
- for (const field of fields){
55
- if ('name' in field && 'defaultValue' in field && field.defaultValue !== undefined) {
56
- defaults[field.name] = field.defaultValue;
57
- }
58
- // Handle nested groups (like voice_settings in ElevenLabs)
59
- if (field.type === 'group' && 'fields' in field && 'name' in field) {
60
- const nestedDefaults = {};
61
- for (const nestedField of field.fields){
62
- if ('name' in nestedField && 'defaultValue' in nestedField && nestedField.defaultValue !== undefined) {
63
- nestedDefaults[nestedField.name] = nestedField.defaultValue;
64
- }
65
- }
66
- if (Object.keys(nestedDefaults).length > 0) {
67
- defaults[field.name] = nestedDefaults;
68
- }
69
- }
70
- }
71
- return defaults;
72
- }
73
- /**
74
- * Check if a provider supports a given use case
75
- */ export function providerSupportsUseCase(providerSlug, useCase) {
76
- const fields = getProviderOptionsFields(providerSlug, useCase);
77
- return fields.length > 0;
78
- }
79
-
80
- //# sourceMappingURL=getProviderOptionsFields.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/getProviderOptionsFields.ts"],"sourcesContent":["import type { Block, ClientField, Field } from 'payload'\n\nimport { allProviderBlocks } from '../ai/providers/blocks/index.js'\n\ntype UseCase = 'image' | 'text' | 'tts' | 'video'\n\n/**\n * Get the provider options field group name for a given use case\n */\nfunction getOptionsGroupName(useCase: UseCase): string {\n return `${useCase}ProviderOptions`\n}\n\n/**\n * Find a field by name within a block's fields, searching through tabs\n */\nfunction findFieldInBlock(block: Block, fieldName: string): Field | undefined {\n const searchFields = (fields: Field[]): Field | undefined => {\n for (const field of fields) {\n if ('name' in field && field.name === fieldName) {\n return field\n }\n if (field.type === 'tabs' && 'tabs' in field) {\n for (const tab of field.tabs) {\n const found = searchFields(tab.fields)\n if (found) {return found}\n }\n }\n if (field.type === 'group' && 'fields' in field) {\n const found = searchFields(field.fields)\n if (found) {return found}\n }\n }\n return undefined\n }\n \n return searchFields(block.fields)\n}\n\n/**\n * Extract provider options fields for a given provider and use case.\n * Returns the inner fields of the {useCase}ProviderOptions group.\n */\nexport function getProviderOptionsFields(\n providerSlug: string,\n useCase: UseCase\n): Field[] {\n const block = allProviderBlocks.find((b) => b.slug === providerSlug)\n if (!block) {\n return []\n }\n\n const groupName = getOptionsGroupName(useCase)\n const optionsGroup = findFieldInBlock(block, groupName)\n\n if (optionsGroup && optionsGroup.type === 'group' && 'fields' in optionsGroup) {\n return optionsGroup.fields\n }\n\n return []\n}\n\n/**\n * Get the default values from provider options fields\n */\nexport function getProviderOptionsDefaults(\n providerSlug: string,\n useCase: UseCase\n): Record<string, unknown> {\n const fields = getProviderOptionsFields(providerSlug, useCase)\n const defaults: Record<string, unknown> = {}\n\n for (const field of fields) {\n if ('name' in field && 'defaultValue' in field && field.defaultValue !== undefined) {\n defaults[field.name] = field.defaultValue\n }\n // Handle nested groups (like voice_settings in ElevenLabs)\n if (field.type === 'group' && 'fields' in field && 'name' in field) {\n const nestedDefaults: Record<string, unknown> = {}\n for (const nestedField of field.fields) {\n if ('name' in nestedField && 'defaultValue' in nestedField && nestedField.defaultValue !== undefined) {\n nestedDefaults[nestedField.name] = nestedField.defaultValue\n }\n }\n if (Object.keys(nestedDefaults).length > 0) {\n defaults[field.name] = nestedDefaults\n }\n }\n }\n\n return defaults\n}\n\n/**\n * Check if a provider supports a given use case\n */\nexport function providerSupportsUseCase(providerSlug: string, useCase: UseCase): boolean {\n const fields = getProviderOptionsFields(providerSlug, useCase)\n return fields.length > 0\n}\n"],"names":["allProviderBlocks","getOptionsGroupName","useCase","findFieldInBlock","block","fieldName","searchFields","fields","field","name","type","tab","tabs","found","undefined","getProviderOptionsFields","providerSlug","find","b","slug","groupName","optionsGroup","getProviderOptionsDefaults","defaults","defaultValue","nestedDefaults","nestedField","Object","keys","length","providerSupportsUseCase"],"mappings":"AAEA,SAASA,iBAAiB,QAAQ,kCAAiC;AAInE;;CAEC,GACD,SAASC,oBAAoBC,OAAgB;IAC3C,OAAO,CAAC,EAAEA,QAAQ,eAAe,CAAC;AACpC;AAEA;;CAEC,GACD,SAASC,iBAAiBC,KAAY,EAAEC,SAAiB;IACvD,MAAMC,eAAe,CAACC;QACpB,KAAK,MAAMC,SAASD,OAAQ;YAC1B,IAAI,UAAUC,SAASA,MAAMC,IAAI,KAAKJ,WAAW;gBAC/C,OAAOG;YACT;YACA,IAAIA,MAAME,IAAI,KAAK,UAAU,UAAUF,OAAO;gBAC5C,KAAK,MAAMG,OAAOH,MAAMI,IAAI,CAAE;oBAC5B,MAAMC,QAAQP,aAAaK,IAAIJ,MAAM;oBACrC,IAAIM,OAAO;wBAAC,OAAOA;oBAAK;gBAC1B;YACF;YACA,IAAIL,MAAME,IAAI,KAAK,WAAW,YAAYF,OAAO;gBAC/C,MAAMK,QAAQP,aAAaE,MAAMD,MAAM;gBACvC,IAAIM,OAAO;oBAAC,OAAOA;gBAAK;YAC1B;QACF;QACA,OAAOC;IACT;IAEA,OAAOR,aAAaF,MAAMG,MAAM;AAClC;AAEA;;;CAGC,GACD,OAAO,SAASQ,yBACdC,YAAoB,EACpBd,OAAgB;IAEhB,MAAME,QAAQJ,kBAAkBiB,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKH;IACvD,IAAI,CAACZ,OAAO;QACV,OAAO,EAAE;IACX;IAEA,MAAMgB,YAAYnB,oBAAoBC;IACtC,MAAMmB,eAAelB,iBAAiBC,OAAOgB;IAE7C,IAAIC,gBAAgBA,aAAaX,IAAI,KAAK,WAAW,YAAYW,cAAc;QAC7E,OAAOA,aAAad,MAAM;IAC5B;IAEA,OAAO,EAAE;AACX;AAEA;;CAEC,GACD,OAAO,SAASe,2BACdN,YAAoB,EACpBd,OAAgB;IAEhB,MAAMK,SAASQ,yBAAyBC,cAAcd;IACtD,MAAMqB,WAAoC,CAAC;IAE3C,KAAK,MAAMf,SAASD,OAAQ;QAC1B,IAAI,UAAUC,SAAS,kBAAkBA,SAASA,MAAMgB,YAAY,KAAKV,WAAW;YAClFS,QAAQ,CAACf,MAAMC,IAAI,CAAC,GAAGD,MAAMgB,YAAY;QAC3C;QACA,2DAA2D;QAC3D,IAAIhB,MAAME,IAAI,KAAK,WAAW,YAAYF,SAAS,UAAUA,OAAO;YAClE,MAAMiB,iBAA0C,CAAC;YACjD,KAAK,MAAMC,eAAelB,MAAMD,MAAM,CAAE;gBACtC,IAAI,UAAUmB,eAAe,kBAAkBA,eAAeA,YAAYF,YAAY,KAAKV,WAAW;oBACpGW,cAAc,CAACC,YAAYjB,IAAI,CAAC,GAAGiB,YAAYF,YAAY;gBAC7D;YACF;YACA,IAAIG,OAAOC,IAAI,CAACH,gBAAgBI,MAAM,GAAG,GAAG;gBAC1CN,QAAQ,CAACf,MAAMC,IAAI,CAAC,GAAGgB;YACzB;QACF;IACF;IAEA,OAAOF;AACT;AAEA;;CAEC,GACD,OAAO,SAASO,wBAAwBd,YAAoB,EAAEd,OAAgB;IAC5E,MAAMK,SAASQ,yBAAyBC,cAAcd;IACtD,OAAOK,OAAOsB,MAAM,GAAG;AACzB"}
@@ -1,2 +0,0 @@
1
- import type { PluginConfig } from '../types.js';
2
- export declare const isPluginActivated: (pluginConfig: PluginConfig) => boolean;
@@ -1,5 +0,0 @@
1
- export const isPluginActivated = (pluginConfig)=>{
2
- return !!pluginConfig;
3
- };
4
-
5
- //# sourceMappingURL=isPluginActivated.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/isPluginActivated.ts"],"sourcesContent":["import type { PluginConfig } from '../types.js'\n\nexport const isPluginActivated = (pluginConfig: PluginConfig) => {\n return !!pluginConfig\n}\n"],"names":["isPluginActivated","pluginConfig"],"mappings":"AAEA,OAAO,MAAMA,oBAAoB,CAACC;IAChC,OAAO,CAAC,CAACA;AACX,EAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/lexicalToHTML.ts"],"sourcesContent":["import type { SerializedEditorState } from 'lexical'\n\nimport {\n consolidateHTMLConverters,\n convertLexicalToHTML,\n type SanitizedServerEditorConfig,\n} from '@payloadcms/richtext-lexical'\n\nexport async function lexicalToHTML(\n editorData: SerializedEditorState,\n editorConfig: SanitizedServerEditorConfig,\n) {\n return await convertLexicalToHTML({\n converters: consolidateHTMLConverters({ editorConfig }),\n data: editorData,\n })\n}\n"],"names":["consolidateHTMLConverters","convertLexicalToHTML","lexicalToHTML","editorData","editorConfig","converters","data"],"mappings":"AAEA,SACEA,yBAAyB,EACzBC,oBAAoB,QAEf,+BAA8B;AAErC,OAAO,eAAeC,cACpBC,UAAiC,EACjCC,YAAyC;IAEzC,OAAO,MAAMH,qBAAqB;QAChCI,YAAYL,0BAA0B;YAAEI;QAAa;QACrDE,MAAMH;IACR;AACF"}