@ai-stack/payloadcms 3.76.0-beta.0 → 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.
- package/dist/ai/core/generateObject.js +1 -4
- package/dist/ai/core/generateObject.js.map +1 -1
- package/dist/ai/core/generateText.js +1 -5
- package/dist/ai/core/generateText.js.map +1 -1
- package/dist/ai/core/media/generateMedia.js +1 -4
- package/dist/ai/core/media/generateMedia.js.map +1 -1
- package/dist/ai/core/media/image/generateImage.js +4 -14
- package/dist/ai/core/media/image/generateImage.js.map +1 -1
- package/dist/ai/core/media/image/handlers/multimodal.js +21 -58
- package/dist/ai/core/media/image/handlers/multimodal.js.map +1 -1
- package/dist/ai/core/media/image/handlers/standard.js +17 -9
- package/dist/ai/core/media/image/handlers/standard.js.map +1 -1
- package/dist/ai/core/media/speech/generateSpeech.js +10 -11
- package/dist/ai/core/media/speech/generateSpeech.js.map +1 -1
- package/dist/ai/core/media/types.d.ts +3 -4
- package/dist/ai/core/media/types.js.map +1 -1
- package/dist/ai/core/streamObject.js +0 -3
- package/dist/ai/core/streamObject.js.map +1 -1
- package/dist/ai/core/streamText.js +1 -4
- package/dist/ai/core/streamText.js.map +1 -1
- package/dist/ai/core/types.d.ts +2 -2
- package/dist/ai/core/types.js.map +1 -1
- package/dist/ai/providers/blocks/anthropic.js +0 -42
- package/dist/ai/providers/blocks/anthropic.js.map +1 -1
- package/dist/ai/providers/blocks/elevenlabs.js +1 -106
- package/dist/ai/providers/blocks/elevenlabs.js.map +1 -1
- package/dist/ai/providers/blocks/fal.js +0 -118
- package/dist/ai/providers/blocks/fal.js.map +1 -1
- package/dist/ai/providers/blocks/google.js +2 -236
- package/dist/ai/providers/blocks/google.js.map +1 -1
- package/dist/ai/providers/blocks/openai-compatible.js +0 -144
- package/dist/ai/providers/blocks/openai-compatible.js.map +1 -1
- package/dist/ai/providers/blocks/openai.js +0 -200
- package/dist/ai/providers/blocks/openai.js.map +1 -1
- package/dist/ai/providers/blocks/xai.js +0 -53
- package/dist/ai/providers/blocks/xai.js.map +1 -1
- package/dist/ai/providers/index.d.ts +1 -1
- package/dist/ai/providers/index.js +0 -2
- package/dist/ai/providers/index.js.map +1 -1
- package/dist/ai/providers/registry.d.ts +24 -28
- package/dist/ai/providers/registry.js +186 -140
- package/dist/ai/providers/registry.js.map +1 -1
- package/dist/ai/providers/types.d.ts +12 -33
- package/dist/ai/providers/types.js +0 -1
- package/dist/ai/providers/types.js.map +1 -1
- package/dist/ai/schemas/lexicalJsonSchema.js +1 -1
- package/dist/ai/schemas/lexicalJsonSchema.js.map +1 -1
- package/dist/ai/utilities/filterEditorSchemaByNodes.js.map +1 -0
- package/dist/ai/utilities/generateFileNameByPrompt.js.map +1 -0
- package/dist/ai/utilities/isObjectSchema.js.map +1 -0
- package/dist/ai/utilities/nodeToSchemaMap.js.map +1 -0
- package/dist/ai/{prompts.d.ts → utilities/prompts.d.ts} +1 -1
- package/dist/ai/utilities/prompts.js.map +1 -0
- package/dist/ai/utilities/systemGenerate.js.map +1 -0
- package/dist/collections/AIJobs.js +3 -12
- package/dist/collections/AIJobs.js.map +1 -1
- package/dist/collections/AIProviders.d.ts +2 -0
- package/dist/collections/{AISettings.js → AIProviders.js} +54 -26
- package/dist/collections/AIProviders.js.map +1 -0
- package/dist/collections/Instructions.js +93 -57
- package/dist/collections/Instructions.js.map +1 -1
- package/dist/collections/shared.d.ts +30 -0
- package/dist/collections/shared.js +15 -0
- package/dist/collections/shared.js.map +1 -0
- package/dist/defaults.js +1 -1
- package/dist/defaults.js.map +1 -1
- package/dist/endpoints/fetchFields.js +15 -7
- package/dist/endpoints/fetchFields.js.map +1 -1
- package/dist/endpoints/fetchVoices.js +2 -2
- package/dist/endpoints/fetchVoices.js.map +1 -1
- package/dist/endpoints/generate.d.ts +7 -0
- package/dist/endpoints/generate.js +268 -0
- package/dist/endpoints/generate.js.map +1 -0
- package/dist/endpoints/index.js +9 -604
- package/dist/endpoints/index.js.map +1 -1
- package/dist/endpoints/promptMentions.d.ts +2 -0
- package/dist/endpoints/promptMentions.js +166 -0
- package/dist/endpoints/promptMentions.js.map +1 -0
- package/dist/endpoints/upload.d.ts +7 -0
- package/dist/endpoints/upload.js +294 -0
- package/dist/endpoints/upload.js.map +1 -0
- package/dist/endpoints/videogenWebhook.d.ts +7 -0
- package/dist/endpoints/videogenWebhook.js +132 -0
- package/dist/endpoints/videogenWebhook.js.map +1 -0
- package/dist/exports/client.d.ts +3 -2
- package/dist/exports/client.js +3 -2
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/fields.d.ts +2 -1
- package/dist/exports/fields.js +2 -1
- package/dist/exports/fields.js.map +1 -1
- package/dist/fields/ArrayComposeField/ArrayComposeField.js +1 -1
- package/dist/fields/ArrayComposeField/ArrayComposeField.js.map +1 -1
- package/dist/fields/ArrayComposeField/ArrayComposeField.jsx +1 -1
- package/dist/fields/ComposeField/ComposeField.d.ts +1 -0
- package/dist/fields/ComposeField/ComposeField.js +18 -8
- package/dist/fields/ComposeField/ComposeField.js.map +1 -1
- package/dist/fields/ComposeField/ComposeField.jsx +12 -7
- package/dist/fields/PromptEditorField/feature.client.d.ts +1 -0
- package/dist/fields/PromptEditorField/feature.client.js +173 -0
- package/dist/fields/PromptEditorField/feature.client.js.map +1 -0
- package/dist/fields/PromptEditorField/feature.client.jsx +148 -0
- package/dist/fields/PromptEditorField/feature.server.d.ts +1 -0
- package/dist/fields/PromptEditorField/feature.server.js +30 -0
- package/dist/fields/PromptEditorField/feature.server.js.map +1 -0
- package/dist/fields/PromptField.d.ts +4 -0
- package/dist/fields/PromptField.js +18 -0
- package/dist/fields/PromptField.js.map +1 -0
- package/dist/fields/SelectField/SelectField.js +0 -1
- package/dist/fields/SelectField/SelectField.js.map +1 -1
- package/dist/fields/SelectField/SelectField.jsx +0 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/libraries/handlebars/helpers.js +2 -2
- package/dist/libraries/handlebars/helpers.js.map +1 -1
- package/dist/libraries/handlebars/replacePlaceholders.js +5 -1
- package/dist/libraries/handlebars/replacePlaceholders.js.map +1 -1
- package/dist/payload-ai.d.ts +5 -19
- package/dist/plugin.js +19 -22
- package/dist/plugin.js.map +1 -1
- package/dist/providers/FieldProvider/FieldProvider.js +10 -19
- package/dist/providers/FieldProvider/FieldProvider.js.map +1 -1
- package/dist/providers/FieldProvider/FieldProvider.jsx +7 -17
- package/dist/providers/InstructionsProvider/InstructionsProvider.js +4 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.jsx +3 -0
- package/dist/providers/InstructionsProvider/useInstructions.js +1 -1
- package/dist/providers/InstructionsProvider/useInstructions.js.map +1 -1
- package/dist/translations/de.json +47 -0
- package/dist/translations/en.json +45 -2
- package/dist/translations/es.json +45 -2
- package/dist/translations/fa.json +45 -2
- package/dist/translations/fr.json +46 -3
- package/dist/translations/hi.json +47 -0
- package/dist/translations/index.d.ts +88 -26
- package/dist/translations/index.js +18 -32
- package/dist/translations/index.js.map +1 -1
- package/dist/translations/ja.json +47 -0
- package/dist/translations/nb.json +47 -0
- package/dist/translations/nl.json +47 -0
- package/dist/translations/pl.json +45 -2
- package/dist/translations/pt.json +47 -0
- package/dist/translations/ru.json +45 -2
- package/dist/translations/th.json +47 -0
- package/dist/translations/translation-schema.json +184 -11
- package/dist/translations/uk.json +45 -2
- package/dist/translations/zh.json +47 -0
- package/dist/types.d.ts +57 -31
- package/dist/types.js.map +1 -1
- package/dist/ui/Compose/Compose.js +42 -79
- package/dist/ui/Compose/Compose.js.map +1 -1
- package/dist/ui/Compose/Compose.jsx +32 -86
- package/dist/ui/Compose/ComposePlaceholder.js +1 -1
- package/dist/ui/Compose/ComposePlaceholder.js.map +1 -1
- package/dist/ui/Compose/ComposePlaceholder.jsx +1 -1
- package/dist/ui/Compose/{compose.module.css → compose.module.scss} +3 -5
- package/dist/ui/Compose/hooks/menu/Item.d.ts +1 -1
- package/dist/ui/Compose/hooks/menu/Item.js +7 -3
- package/dist/ui/Compose/hooks/menu/Item.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/Item.jsx +11 -5
- package/dist/ui/Compose/hooks/menu/TranslateMenu.d.ts +5 -0
- package/dist/ui/Compose/hooks/menu/TranslateMenu.js +48 -5
- package/dist/ui/Compose/hooks/menu/TranslateMenu.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/TranslateMenu.jsx +44 -6
- package/dist/ui/Compose/hooks/menu/items.d.ts +8 -8
- package/dist/ui/Compose/hooks/menu/itemsMap.d.ts +2 -1
- package/dist/ui/Compose/hooks/menu/itemsMap.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/menu.module.scss +4 -1
- package/dist/ui/Compose/hooks/menu/types.d.ts +21 -0
- package/dist/ui/Compose/hooks/menu/types.js +3 -0
- package/dist/ui/Compose/hooks/menu/types.js.map +1 -0
- package/dist/ui/Compose/hooks/menu/useMenu.d.ts +2 -2
- package/dist/ui/Compose/hooks/menu/useMenu.js +45 -23
- package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/useMenu.jsx +43 -23
- package/dist/ui/Compose/hooks/mergeGeneratedValue.d.ts +14 -0
- package/dist/ui/Compose/hooks/mergeGeneratedValue.js +38 -0
- package/dist/ui/Compose/hooks/mergeGeneratedValue.js.map +1 -0
- package/dist/ui/Compose/hooks/useActiveFieldTracking.js +34 -0
- package/dist/ui/Compose/hooks/useActiveFieldTracking.js.map +1 -1
- package/dist/ui/Compose/hooks/useGenerate.js +37 -12
- package/dist/ui/Compose/hooks/useGenerate.js.map +1 -1
- package/dist/ui/Compose/hooks/useGenerateUpload.js +67 -19
- package/dist/ui/Compose/hooks/useGenerateUpload.js.map +1 -1
- package/dist/ui/Compose/hooks/useStreamingUpdate.js +4 -4
- package/dist/ui/Compose/hooks/useStreamingUpdate.js.map +1 -1
- package/dist/ui/ConfigDashboard/configDashboard.module.css +94 -0
- package/dist/ui/ConfigDashboard/index.d.ts +2 -0
- package/dist/ui/ConfigDashboard/index.js +159 -0
- package/dist/ui/ConfigDashboard/index.js.map +1 -0
- package/dist/ui/ConfigDashboard/index.jsx +122 -0
- package/dist/ui/DynamicModelSelect/index.js +6 -27
- package/dist/ui/DynamicModelSelect/index.js.map +1 -1
- package/dist/ui/DynamicModelSelect/index.jsx +6 -29
- package/dist/ui/DynamicProviderSelect/index.js +6 -27
- package/dist/ui/DynamicProviderSelect/index.js.map +1 -1
- package/dist/ui/DynamicProviderSelect/index.jsx +6 -29
- package/dist/ui/DynamicVoiceSelect/index.js +34 -83
- package/dist/ui/DynamicVoiceSelect/index.js.map +1 -1
- package/dist/ui/DynamicVoiceSelect/index.jsx +16 -53
- package/dist/ui/GlobalProviderOptions/index.d.ts +2 -0
- package/dist/ui/GlobalProviderOptions/index.js +118 -0
- package/dist/ui/GlobalProviderOptions/index.js.map +1 -0
- package/dist/ui/GlobalProviderOptions/index.jsx +60 -0
- package/dist/ui/Icons/Icons.js +1 -1
- package/dist/ui/Icons/Icons.js.map +1 -1
- package/dist/ui/Icons/Icons.jsx +1 -1
- package/dist/ui/Icons/LottieAnimation.js +1 -1
- package/dist/ui/Icons/LottieAnimation.js.map +1 -1
- package/dist/ui/Icons/LottieAnimation.jsx +1 -1
- package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.d.ts +12 -0
- package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.js +166 -0
- package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.js.map +1 -0
- package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.jsx +83 -0
- package/dist/ui/InstructionProviderOptions/index.d.ts +2 -0
- package/dist/ui/InstructionProviderOptions/index.js +157 -0
- package/dist/ui/InstructionProviderOptions/index.js.map +1 -0
- package/dist/ui/InstructionProviderOptions/index.jsx +92 -0
- package/dist/ui/VoicesFetcher/index.js.map +1 -1
- package/dist/ui/hooks/useAISettings.d.ts +26 -0
- package/dist/ui/hooks/useAISettings.js +73 -0
- package/dist/ui/hooks/useAISettings.js.map +1 -0
- package/dist/ui/providerOptions/updateProviderOptionsValue.d.ts +6 -0
- package/dist/ui/providerOptions/updateProviderOptionsValue.js +50 -0
- package/dist/ui/providerOptions/updateProviderOptionsValue.js.map +1 -0
- package/dist/ui/shared/handleSelectChange.d.ts +5 -0
- package/dist/ui/shared/handleSelectChange.js +12 -0
- package/dist/ui/shared/handleSelectChange.js.map +1 -0
- package/dist/ui/shared/types.d.ts +11 -0
- package/dist/ui/shared/types.js +5 -0
- package/dist/ui/shared/types.js.map +1 -0
- package/dist/utilities/ai/resolveEffectiveInstructionSettings.d.ts +15 -0
- package/dist/utilities/ai/resolveEffectiveInstructionSettings.js +136 -0
- package/dist/utilities/ai/resolveEffectiveInstructionSettings.js.map +1 -0
- package/dist/{endpoints → utilities}/buildPromptUtils.js +14 -5
- package/dist/utilities/buildPromptUtils.js.map +1 -0
- package/dist/utilities/buildSmartPrompt.js +3 -3
- package/dist/utilities/buildSmartPrompt.js.map +1 -1
- package/dist/utilities/fields/fieldToJsonSchema.js.map +1 -0
- package/dist/utilities/fields/getFieldBySchemaPath.js.map +1 -0
- package/dist/utilities/fields/getFieldInfo.js.map +1 -0
- package/dist/utilities/{updateFieldsConfig.js → fields/updateFieldsConfig.js} +8 -3
- package/dist/utilities/fields/updateFieldsConfig.js.map +1 -0
- package/dist/utilities/images/extractImageData.js.map +1 -0
- package/dist/utilities/images/extractPromptAttachments.js.map +1 -0
- package/dist/utilities/{fetchImages.d.ts → images/fetchImages.d.ts} +1 -1
- package/dist/utilities/images/fetchImages.js +49 -0
- package/dist/utilities/images/fetchImages.js.map +1 -0
- package/dist/utilities/images/resolveImageReferences.js +183 -0
- package/dist/utilities/images/resolveImageReferences.js.map +1 -0
- package/dist/utilities/init/autoSetupProviders.d.ts +3 -0
- package/dist/utilities/init/autoSetupProviders.js +216 -0
- package/dist/utilities/init/autoSetupProviders.js.map +1 -0
- package/dist/utilities/lexical/editorSchemaValidator.js.map +1 -0
- package/dist/utilities/lexical/lexicalToHTML.js.map +1 -0
- package/dist/utilities/lexical/lexicalToPromptTemplate.d.ts +2 -0
- package/dist/utilities/lexical/lexicalToPromptTemplate.js +50 -0
- package/dist/utilities/lexical/lexicalToPromptTemplate.js.map +1 -0
- package/dist/utilities/lexical/setSafeLexicalState.js.map +1 -0
- package/dist/utilities/lexical/stringToLexicalJSON.d.ts +2 -0
- package/dist/utilities/lexical/stringToLexicalJSON.js +39 -0
- package/dist/utilities/lexical/stringToLexicalJSON.js.map +1 -0
- package/dist/utilities/sanitizeLog.d.ts +1 -0
- package/dist/utilities/sanitizeLog.js +39 -0
- package/dist/utilities/sanitizeLog.js.map +1 -0
- package/dist/utilities/seedProperties.js +37 -22
- package/dist/utilities/seedProperties.js.map +1 -1
- package/package.json +5 -2
- package/dist/ai/analyse.d.ts +0 -1
- package/dist/ai/analyse.js +0 -3
- package/dist/ai/analyse.js.map +0 -1
- package/dist/ai/index.d.ts +0 -11
- package/dist/ai/index.js +0 -25
- package/dist/ai/index.js.map +0 -1
- package/dist/ai/prompts.js.map +0 -1
- package/dist/ai/utils/filterEditorSchemaByNodes.js.map +0 -1
- package/dist/ai/utils/generateFileNameByPrompt.js.map +0 -1
- package/dist/ai/utils/isObjectSchema.js.map +0 -1
- package/dist/ai/utils/nodeToSchemaMap.js.map +0 -1
- package/dist/ai/utils/systemGenerate.js.map +0 -1
- package/dist/collections/AISettings.d.ts +0 -2
- package/dist/collections/AISettings.js.map +0 -1
- package/dist/endpoints/buildPromptUtils.js.map +0 -1
- package/dist/endpoints/chat.d.ts +0 -4
- package/dist/fields/PromptEditorField/PromptEditorField.d.ts +0 -3
- package/dist/fields/PromptEditorField/PromptEditorField.js +0 -217
- package/dist/fields/PromptEditorField/PromptEditorField.js.map +0 -1
- package/dist/fields/PromptEditorField/PromptEditorField.jsx +0 -160
- package/dist/ui/AIConfigDashboard/index.d.ts +0 -2
- package/dist/ui/AIConfigDashboard/index.js +0 -222
- package/dist/ui/AIConfigDashboard/index.js.map +0 -1
- package/dist/ui/AIConfigDashboard/index.jsx +0 -170
- package/dist/ui/ProviderOptionsEditor/index.d.ts +0 -7
- package/dist/ui/ProviderOptionsEditor/index.js +0 -291
- package/dist/ui/ProviderOptionsEditor/index.js.map +0 -1
- package/dist/ui/ProviderOptionsEditor/index.jsx +0 -210
- package/dist/utilities/editorSchemaValidator.js.map +0 -1
- package/dist/utilities/extractImageData.js.map +0 -1
- package/dist/utilities/extractPromptAttachments.js.map +0 -1
- package/dist/utilities/fetchImages.js +0 -38
- package/dist/utilities/fetchImages.js.map +0 -1
- package/dist/utilities/fieldToJsonSchema.js.map +0 -1
- package/dist/utilities/getFieldBySchemaPath.js.map +0 -1
- package/dist/utilities/getFieldInfo.js.map +0 -1
- package/dist/utilities/getProviderOptionsFields.d.ts +0 -16
- package/dist/utilities/getProviderOptionsFields.js +0 -80
- package/dist/utilities/getProviderOptionsFields.js.map +0 -1
- package/dist/utilities/isPluginActivated.d.ts +0 -2
- package/dist/utilities/isPluginActivated.js +0 -5
- package/dist/utilities/isPluginActivated.js.map +0 -1
- package/dist/utilities/lexicalToHTML.js.map +0 -1
- package/dist/utilities/resolveImageReferences.js +0 -167
- package/dist/utilities/resolveImageReferences.js.map +0 -1
- package/dist/utilities/schemaConverter.d.ts +0 -3
- package/dist/utilities/schemaConverter.js +0 -93
- package/dist/utilities/schemaConverter.js.map +0 -1
- package/dist/utilities/setSafeLexicalState.js.map +0 -1
- package/dist/utilities/updateFieldsConfig.js.map +0 -1
- /package/dist/ai/{utils → utilities}/filterEditorSchemaByNodes.d.ts +0 -0
- /package/dist/ai/{utils → utilities}/filterEditorSchemaByNodes.js +0 -0
- /package/dist/ai/{utils → utilities}/generateFileNameByPrompt.d.ts +0 -0
- /package/dist/ai/{utils → utilities}/generateFileNameByPrompt.js +0 -0
- /package/dist/ai/{utils → utilities}/isObjectSchema.d.ts +0 -0
- /package/dist/ai/{utils → utilities}/isObjectSchema.js +0 -0
- /package/dist/ai/{utils → utilities}/nodeToSchemaMap.d.ts +0 -0
- /package/dist/ai/{utils → utilities}/nodeToSchemaMap.js +0 -0
- /package/dist/ai/{prompts.js → utilities/prompts.js} +0 -0
- /package/dist/ai/{utils → utilities}/systemGenerate.d.ts +0 -0
- /package/dist/ai/{utils → utilities}/systemGenerate.js +0 -0
- /package/dist/ui/Icons/{icons.module.css → icons.module.scss} +0 -0
- /package/dist/{endpoints → utilities}/buildPromptUtils.d.ts +0 -0
- /package/dist/utilities/{fieldToJsonSchema.d.ts → fields/fieldToJsonSchema.d.ts} +0 -0
- /package/dist/utilities/{fieldToJsonSchema.js → fields/fieldToJsonSchema.js} +0 -0
- /package/dist/utilities/{getFieldBySchemaPath.d.ts → fields/getFieldBySchemaPath.d.ts} +0 -0
- /package/dist/utilities/{getFieldBySchemaPath.js → fields/getFieldBySchemaPath.js} +0 -0
- /package/dist/utilities/{getFieldInfo.d.ts → fields/getFieldInfo.d.ts} +0 -0
- /package/dist/utilities/{getFieldInfo.js → fields/getFieldInfo.js} +0 -0
- /package/dist/utilities/{updateFieldsConfig.d.ts → fields/updateFieldsConfig.d.ts} +0 -0
- /package/dist/utilities/{extractImageData.d.ts → images/extractImageData.d.ts} +0 -0
- /package/dist/utilities/{extractImageData.js → images/extractImageData.js} +0 -0
- /package/dist/utilities/{extractPromptAttachments.d.ts → images/extractPromptAttachments.d.ts} +0 -0
- /package/dist/utilities/{extractPromptAttachments.js → images/extractPromptAttachments.js} +0 -0
- /package/dist/utilities/{resolveImageReferences.d.ts → images/resolveImageReferences.d.ts} +0 -0
- /package/dist/utilities/{editorSchemaValidator.d.ts → lexical/editorSchemaValidator.d.ts} +0 -0
- /package/dist/utilities/{editorSchemaValidator.js → lexical/editorSchemaValidator.js} +0 -0
- /package/dist/utilities/{lexicalToHTML.d.ts → lexical/lexicalToHTML.d.ts} +0 -0
- /package/dist/utilities/{lexicalToHTML.js → lexical/lexicalToHTML.js} +0 -0
- /package/dist/utilities/{setSafeLexicalState.d.ts → lexical/setSafeLexicalState.d.ts} +0 -0
- /package/dist/utilities/{setSafeLexicalState.js → lexical/setSafeLexicalState.js} +0 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { SelectInput } from '@payloadcms/ui';
|
|
4
|
+
import React from 'react';
|
|
5
|
+
export const ProviderOptionsTree = ({ disabled, onChange, path, schemaValue, selectedValue })=>{
|
|
6
|
+
const nodeKey = path.length > 0 ? path[path.length - 1] : 'root';
|
|
7
|
+
const inputId = `po-${path.join('-')}`;
|
|
8
|
+
// Ensure path is properly passed when nested deeper than 1 level
|
|
9
|
+
if (schemaValue && typeof schemaValue === 'object' && !Array.isArray(schemaValue)) {
|
|
10
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
11
|
+
className: "provider-options-group",
|
|
12
|
+
style: {
|
|
13
|
+
borderLeft: path.length > 0 ? '1px solid var(--theme-elevation-150)' : 'none',
|
|
14
|
+
display: 'grid',
|
|
15
|
+
gap: '1rem',
|
|
16
|
+
marginLeft: path.length > 0 ? '1rem' : '0',
|
|
17
|
+
paddingLeft: path.length > 0 ? '1rem' : '0'
|
|
18
|
+
},
|
|
19
|
+
children: [
|
|
20
|
+
path.length > 0 && /*#__PURE__*/ _jsx("div", {
|
|
21
|
+
className: "field-label",
|
|
22
|
+
style: {
|
|
23
|
+
fontWeight: 600,
|
|
24
|
+
marginBottom: '-0.5rem'
|
|
25
|
+
},
|
|
26
|
+
children: nodeKey
|
|
27
|
+
}),
|
|
28
|
+
Object.entries(schemaValue).map(([key, childSchema])=>/*#__PURE__*/ _jsx(ProviderOptionsTree, {
|
|
29
|
+
disabled: disabled,
|
|
30
|
+
onChange: onChange,
|
|
31
|
+
path: [
|
|
32
|
+
...path,
|
|
33
|
+
key
|
|
34
|
+
],
|
|
35
|
+
schemaValue: childSchema,
|
|
36
|
+
selectedValue: selectedValue?.[key]
|
|
37
|
+
}, key))
|
|
38
|
+
]
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
// Handle Array as Select Menu options
|
|
42
|
+
if (Array.isArray(schemaValue)) {
|
|
43
|
+
const options = schemaValue.map((item)=>({
|
|
44
|
+
label: String(item),
|
|
45
|
+
value: String(item)
|
|
46
|
+
}));
|
|
47
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
48
|
+
className: "field-type select",
|
|
49
|
+
children: [
|
|
50
|
+
/*#__PURE__*/ _jsx("label", {
|
|
51
|
+
className: "field-label",
|
|
52
|
+
htmlFor: inputId,
|
|
53
|
+
children: nodeKey
|
|
54
|
+
}),
|
|
55
|
+
/*#__PURE__*/ _jsx(SelectInput, {
|
|
56
|
+
isClearable: true,
|
|
57
|
+
name: inputId,
|
|
58
|
+
onChange: (selected)=>{
|
|
59
|
+
if (selected && typeof selected === 'object' && 'value' in selected) {
|
|
60
|
+
onChange(path, selected.value);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
onChange(path, undefined);
|
|
64
|
+
},
|
|
65
|
+
options: options,
|
|
66
|
+
path: inputId,
|
|
67
|
+
readOnly: disabled,
|
|
68
|
+
value: selectedValue !== undefined ? String(selectedValue) : undefined
|
|
69
|
+
})
|
|
70
|
+
]
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
// Handle Boolean as Select Menu True/False
|
|
74
|
+
if (typeof schemaValue === 'boolean') {
|
|
75
|
+
const booleanOptions = [
|
|
76
|
+
{
|
|
77
|
+
label: 'True',
|
|
78
|
+
value: 'true'
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
label: 'False',
|
|
82
|
+
value: 'false'
|
|
83
|
+
}
|
|
84
|
+
];
|
|
85
|
+
const stringVal = selectedValue === true ? 'true' : selectedValue === false ? 'false' : undefined;
|
|
86
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
87
|
+
className: "field-type select",
|
|
88
|
+
children: [
|
|
89
|
+
/*#__PURE__*/ _jsx("label", {
|
|
90
|
+
className: "field-label",
|
|
91
|
+
htmlFor: inputId,
|
|
92
|
+
children: nodeKey
|
|
93
|
+
}),
|
|
94
|
+
/*#__PURE__*/ _jsx(SelectInput, {
|
|
95
|
+
isClearable: true,
|
|
96
|
+
name: inputId,
|
|
97
|
+
onChange: (selected)=>{
|
|
98
|
+
if (selected && typeof selected === 'object' && 'value' in selected) {
|
|
99
|
+
onChange(path, selected.value === 'true');
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
onChange(path, undefined);
|
|
103
|
+
},
|
|
104
|
+
options: booleanOptions,
|
|
105
|
+
path: inputId,
|
|
106
|
+
readOnly: disabled,
|
|
107
|
+
value: stringVal
|
|
108
|
+
})
|
|
109
|
+
]
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
// Handle Number Input
|
|
113
|
+
if (typeof schemaValue === 'number') {
|
|
114
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
115
|
+
className: "field-type number",
|
|
116
|
+
children: [
|
|
117
|
+
/*#__PURE__*/ _jsx("label", {
|
|
118
|
+
className: "field-label",
|
|
119
|
+
htmlFor: inputId,
|
|
120
|
+
children: nodeKey
|
|
121
|
+
}),
|
|
122
|
+
/*#__PURE__*/ _jsx("input", {
|
|
123
|
+
disabled: disabled,
|
|
124
|
+
id: inputId,
|
|
125
|
+
name: inputId,
|
|
126
|
+
onChange: (e)=>{
|
|
127
|
+
const val = e.target.value;
|
|
128
|
+
onChange(path, val === '' ? undefined : Number(val));
|
|
129
|
+
},
|
|
130
|
+
style: {
|
|
131
|
+
width: '100%'
|
|
132
|
+
},
|
|
133
|
+
type: "number",
|
|
134
|
+
value: typeof selectedValue === 'number' && !Number.isNaN(selectedValue) ? Number(selectedValue) : ''
|
|
135
|
+
})
|
|
136
|
+
]
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
// Handle Text Input
|
|
140
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
141
|
+
className: "field-type text",
|
|
142
|
+
children: [
|
|
143
|
+
/*#__PURE__*/ _jsx("label", {
|
|
144
|
+
className: "field-label",
|
|
145
|
+
htmlFor: inputId,
|
|
146
|
+
children: nodeKey
|
|
147
|
+
}),
|
|
148
|
+
/*#__PURE__*/ _jsx("input", {
|
|
149
|
+
disabled: disabled,
|
|
150
|
+
id: inputId,
|
|
151
|
+
name: inputId,
|
|
152
|
+
onChange: (e)=>{
|
|
153
|
+
const val = e.target.value;
|
|
154
|
+
onChange(path, val.trim() === '' ? undefined : val);
|
|
155
|
+
},
|
|
156
|
+
style: {
|
|
157
|
+
width: '100%'
|
|
158
|
+
},
|
|
159
|
+
type: "text",
|
|
160
|
+
value: typeof selectedValue === 'string' ? selectedValue : ''
|
|
161
|
+
})
|
|
162
|
+
]
|
|
163
|
+
});
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
//# sourceMappingURL=ProviderOptionsTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/InstructionProviderOptions/ProviderOptionsTree.tsx"],"sourcesContent":["'use client'\n\nimport { SelectInput } from '@payloadcms/ui'\nimport type { OptionObject } from 'payload'\nimport React from 'react'\n\ntype Primitive = boolean | null | number | string | undefined\ntype PrimitiveArray = number[] | string[]\n\ntype ProviderOptionTreeNodeProps = {\n disabled?: boolean\n onChange: (path: string[], value: any) => void\n path: string[]\n schemaValue: Primitive | PrimitiveArray | Record<string, any>\n selectedValue: any\n}\n\nexport const ProviderOptionsTree: React.FC<ProviderOptionTreeNodeProps> = ({\n disabled,\n onChange,\n path,\n schemaValue,\n selectedValue,\n}) => {\n const nodeKey = path.length > 0 ? path[path.length - 1] : 'root'\n const inputId = `po-${path.join('-')}`\n\n // Ensure path is properly passed when nested deeper than 1 level\n if (schemaValue && typeof schemaValue === 'object' && !Array.isArray(schemaValue)) {\n return (\n <div className=\"provider-options-group\" style={{ \n borderLeft: path.length > 0 ? '1px solid var(--theme-elevation-150)' : 'none', \n display: 'grid', \n gap: '1rem', \n marginLeft: path.length > 0 ? '1rem' : '0', \n paddingLeft: path.length > 0 ? '1rem' : '0' \n }}>\n {path.length > 0 && <div className=\"field-label\" style={{ fontWeight: 600, marginBottom: '-0.5rem' }}>{nodeKey}</div>}\n {Object.entries(schemaValue).map(([key, childSchema]) => (\n <ProviderOptionsTree\n disabled={disabled}\n key={key}\n onChange={onChange}\n path={[...path, key]}\n schemaValue={childSchema as any}\n selectedValue={selectedValue?.[key]}\n />\n ))}\n </div>\n )\n }\n\n // Handle Array as Select Menu options\n if (Array.isArray(schemaValue)) {\n const options: OptionObject[] = schemaValue.map((item) => ({\n label: String(item),\n value: String(item),\n }))\n\n return (\n <div className=\"field-type select\">\n <label className=\"field-label\" htmlFor={inputId}>\n {nodeKey}\n </label>\n <SelectInput\n isClearable\n name={inputId}\n onChange={(selected) => {\n if (selected && typeof selected === 'object' && 'value' in selected) {\n onChange(path, (selected as OptionObject).value)\n return\n }\n onChange(path, undefined)\n }}\n options={options}\n path={inputId}\n readOnly={disabled}\n value={selectedValue !== undefined ? String(selectedValue) : undefined}\n />\n </div>\n )\n }\n\n // Handle Boolean as Select Menu True/False\n if (typeof schemaValue === 'boolean') {\n const booleanOptions: OptionObject[] = [\n { label: 'True', value: 'true' },\n { label: 'False', value: 'false' },\n ]\n const stringVal = selectedValue === true ? 'true' : selectedValue === false ? 'false' : undefined\n\n return (\n <div className=\"field-type select\">\n <label className=\"field-label\" htmlFor={inputId}>\n {nodeKey}\n </label>\n <SelectInput\n isClearable\n name={inputId}\n onChange={(selected) => {\n if (selected && typeof selected === 'object' && 'value' in selected) {\n onChange(path, (selected as OptionObject).value === 'true')\n return\n }\n onChange(path, undefined)\n }}\n options={booleanOptions}\n path={inputId}\n readOnly={disabled}\n value={stringVal}\n />\n </div>\n )\n }\n\n // Handle Number Input\n if (typeof schemaValue === 'number') {\n return (\n <div className=\"field-type number\">\n <label className=\"field-label\" htmlFor={inputId}>\n {nodeKey}\n </label>\n <input\n disabled={disabled}\n id={inputId}\n name={inputId}\n onChange={(e) => {\n const val = e.target.value\n onChange(path, val === '' ? undefined : Number(val))\n }}\n style={{ width: '100%' }}\n type=\"number\"\n value={\n typeof selectedValue === 'number' && !Number.isNaN(selectedValue)\n ? Number(selectedValue)\n : ''\n }\n />\n </div>\n )\n }\n\n // Handle Text Input\n return (\n <div className=\"field-type text\">\n <label className=\"field-label\" htmlFor={inputId}>\n {nodeKey}\n </label>\n <input\n disabled={disabled}\n id={inputId}\n name={inputId}\n onChange={(e) => {\n const val = e.target.value\n onChange(path, val.trim() === '' ? undefined : val)\n }}\n style={{ width: '100%' }}\n type=\"text\"\n value={typeof selectedValue === 'string' ? selectedValue : ''}\n />\n </div>\n )\n}\n"],"names":["SelectInput","React","ProviderOptionsTree","disabled","onChange","path","schemaValue","selectedValue","nodeKey","length","inputId","join","Array","isArray","div","className","style","borderLeft","display","gap","marginLeft","paddingLeft","fontWeight","marginBottom","Object","entries","map","key","childSchema","options","item","label","String","value","htmlFor","isClearable","name","selected","undefined","readOnly","booleanOptions","stringVal","input","id","e","val","target","Number","width","type","isNaN","trim"],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { SelectInput } from '@payloadcms/ui';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
export const ProviderOptionsTree = ({ disabled, onChange, path, schemaValue, selectedValue, }) => {
|
|
5
|
+
const nodeKey = path.length > 0 ? path[path.length - 1] : 'root';
|
|
6
|
+
const inputId = `po-${path.join('-')}`;
|
|
7
|
+
// Ensure path is properly passed when nested deeper than 1 level
|
|
8
|
+
if (schemaValue && typeof schemaValue === 'object' && !Array.isArray(schemaValue)) {
|
|
9
|
+
return (<div className="provider-options-group" style={{
|
|
10
|
+
borderLeft: path.length > 0 ? '1px solid var(--theme-elevation-150)' : 'none',
|
|
11
|
+
display: 'grid',
|
|
12
|
+
gap: '1rem',
|
|
13
|
+
marginLeft: path.length > 0 ? '1rem' : '0',
|
|
14
|
+
paddingLeft: path.length > 0 ? '1rem' : '0'
|
|
15
|
+
}}>
|
|
16
|
+
{path.length > 0 && <div className="field-label" style={{ fontWeight: 600, marginBottom: '-0.5rem' }}>{nodeKey}</div>}
|
|
17
|
+
{Object.entries(schemaValue).map(([key, childSchema]) => (<ProviderOptionsTree disabled={disabled} key={key} onChange={onChange} path={[...path, key]} schemaValue={childSchema} selectedValue={selectedValue?.[key]}/>))}
|
|
18
|
+
</div>);
|
|
19
|
+
}
|
|
20
|
+
// Handle Array as Select Menu options
|
|
21
|
+
if (Array.isArray(schemaValue)) {
|
|
22
|
+
const options = schemaValue.map((item) => ({
|
|
23
|
+
label: String(item),
|
|
24
|
+
value: String(item),
|
|
25
|
+
}));
|
|
26
|
+
return (<div className="field-type select">
|
|
27
|
+
<label className="field-label" htmlFor={inputId}>
|
|
28
|
+
{nodeKey}
|
|
29
|
+
</label>
|
|
30
|
+
<SelectInput isClearable name={inputId} onChange={(selected) => {
|
|
31
|
+
if (selected && typeof selected === 'object' && 'value' in selected) {
|
|
32
|
+
onChange(path, selected.value);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
onChange(path, undefined);
|
|
36
|
+
}} options={options} path={inputId} readOnly={disabled} value={selectedValue !== undefined ? String(selectedValue) : undefined}/>
|
|
37
|
+
</div>);
|
|
38
|
+
}
|
|
39
|
+
// Handle Boolean as Select Menu True/False
|
|
40
|
+
if (typeof schemaValue === 'boolean') {
|
|
41
|
+
const booleanOptions = [
|
|
42
|
+
{ label: 'True', value: 'true' },
|
|
43
|
+
{ label: 'False', value: 'false' },
|
|
44
|
+
];
|
|
45
|
+
const stringVal = selectedValue === true ? 'true' : selectedValue === false ? 'false' : undefined;
|
|
46
|
+
return (<div className="field-type select">
|
|
47
|
+
<label className="field-label" htmlFor={inputId}>
|
|
48
|
+
{nodeKey}
|
|
49
|
+
</label>
|
|
50
|
+
<SelectInput isClearable name={inputId} onChange={(selected) => {
|
|
51
|
+
if (selected && typeof selected === 'object' && 'value' in selected) {
|
|
52
|
+
onChange(path, selected.value === 'true');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
onChange(path, undefined);
|
|
56
|
+
}} options={booleanOptions} path={inputId} readOnly={disabled} value={stringVal}/>
|
|
57
|
+
</div>);
|
|
58
|
+
}
|
|
59
|
+
// Handle Number Input
|
|
60
|
+
if (typeof schemaValue === 'number') {
|
|
61
|
+
return (<div className="field-type number">
|
|
62
|
+
<label className="field-label" htmlFor={inputId}>
|
|
63
|
+
{nodeKey}
|
|
64
|
+
</label>
|
|
65
|
+
<input disabled={disabled} id={inputId} name={inputId} onChange={(e) => {
|
|
66
|
+
const val = e.target.value;
|
|
67
|
+
onChange(path, val === '' ? undefined : Number(val));
|
|
68
|
+
}} style={{ width: '100%' }} type="number" value={typeof selectedValue === 'number' && !Number.isNaN(selectedValue)
|
|
69
|
+
? Number(selectedValue)
|
|
70
|
+
: ''}/>
|
|
71
|
+
</div>);
|
|
72
|
+
}
|
|
73
|
+
// Handle Text Input
|
|
74
|
+
return (<div className="field-type text">
|
|
75
|
+
<label className="field-label" htmlFor={inputId}>
|
|
76
|
+
{nodeKey}
|
|
77
|
+
</label>
|
|
78
|
+
<input disabled={disabled} id={inputId} name={inputId} onChange={(e) => {
|
|
79
|
+
const val = e.target.value;
|
|
80
|
+
onChange(path, val.trim() === '' ? undefined : val);
|
|
81
|
+
}} style={{ width: '100%' }} type="text" value={typeof selectedValue === 'string' ? selectedValue : ''}/>
|
|
82
|
+
</div>);
|
|
83
|
+
};
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useField, useFormFields } from '@payloadcms/ui';
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { useCallback, useMemo } from 'react';
|
|
6
|
+
import { useAISettings } from '../hooks/useAISettings.js';
|
|
7
|
+
import { updateProviderOptionsValue } from '../providerOptions/updateProviderOptionsValue.js';
|
|
8
|
+
import { ProviderOptionsTree } from './ProviderOptionsTree.js';
|
|
9
|
+
function inferUseCase(fieldPath) {
|
|
10
|
+
const parentName = fieldPath.split('.').slice(-2)[0];
|
|
11
|
+
if (parentName === 'image-settings') {
|
|
12
|
+
return 'image';
|
|
13
|
+
}
|
|
14
|
+
if (parentName === 'tts-settings') {
|
|
15
|
+
return 'tts';
|
|
16
|
+
}
|
|
17
|
+
if (parentName === 'video-settings') {
|
|
18
|
+
return 'video';
|
|
19
|
+
}
|
|
20
|
+
return 'text';
|
|
21
|
+
}
|
|
22
|
+
export const InstructionProviderOptions = ({ path })=>{
|
|
23
|
+
const { data: aiSettings } = useAISettings();
|
|
24
|
+
const fieldPath = path || '';
|
|
25
|
+
const groupPath = fieldPath.split('.').slice(0, -1).join('.');
|
|
26
|
+
const providerPath = `${groupPath}.provider`;
|
|
27
|
+
const useCase = useMemo(()=>inferUseCase(fieldPath), [
|
|
28
|
+
fieldPath
|
|
29
|
+
]);
|
|
30
|
+
const providerField = useFormFields(([fields])=>fields[providerPath]);
|
|
31
|
+
const provider = providerField?.value;
|
|
32
|
+
const { setValue: setProviderOptionsValues, value: providerOptionsValues } = useField({
|
|
33
|
+
path: fieldPath
|
|
34
|
+
});
|
|
35
|
+
// 1. Find the provider's schema for this use case
|
|
36
|
+
const schema = useMemo(()=>{
|
|
37
|
+
if (!provider || !aiSettings?.defaults) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const useCaseDefaults = aiSettings.defaults[useCase];
|
|
41
|
+
// We stored the raw schema object directly under schemas[provider] during autoSetup
|
|
42
|
+
const schemas = useCaseDefaults?.schema;
|
|
43
|
+
return schemas?.[provider] || null;
|
|
44
|
+
}, [
|
|
45
|
+
aiSettings,
|
|
46
|
+
provider,
|
|
47
|
+
useCase
|
|
48
|
+
]);
|
|
49
|
+
const providerLabel = useMemo(()=>{
|
|
50
|
+
if (!provider) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
const providers = Array.isArray(aiSettings?.providers) ? aiSettings.providers : [];
|
|
54
|
+
const configuredProvider = providers.find((item)=>item && typeof item === 'object' && 'blockType' in item && item.blockType === provider);
|
|
55
|
+
if (configuredProvider?.providerName) {
|
|
56
|
+
return configuredProvider.providerName;
|
|
57
|
+
}
|
|
58
|
+
return provider;
|
|
59
|
+
}, [
|
|
60
|
+
aiSettings?.providers,
|
|
61
|
+
provider
|
|
62
|
+
]);
|
|
63
|
+
const handleOptionChange = useCallback((keyPath, targetValue)=>{
|
|
64
|
+
const nextValue = updateProviderOptionsValue({
|
|
65
|
+
currentValue: providerOptionsValues,
|
|
66
|
+
keyPath,
|
|
67
|
+
provider,
|
|
68
|
+
targetValue
|
|
69
|
+
});
|
|
70
|
+
setProviderOptionsValues(nextValue);
|
|
71
|
+
}, [
|
|
72
|
+
providerOptionsValues,
|
|
73
|
+
provider,
|
|
74
|
+
setProviderOptionsValues
|
|
75
|
+
]);
|
|
76
|
+
if (!provider) {
|
|
77
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
78
|
+
className: "field-type",
|
|
79
|
+
style: {
|
|
80
|
+
marginTop: '1rem'
|
|
81
|
+
},
|
|
82
|
+
children: [
|
|
83
|
+
/*#__PURE__*/ _jsx("div", {
|
|
84
|
+
className: "field-label",
|
|
85
|
+
children: "Provider Options"
|
|
86
|
+
}),
|
|
87
|
+
/*#__PURE__*/ _jsx("p", {
|
|
88
|
+
style: {
|
|
89
|
+
color: 'var(--theme-elevation-500)',
|
|
90
|
+
margin: 0
|
|
91
|
+
},
|
|
92
|
+
children: "Select a provider to configure provider options."
|
|
93
|
+
})
|
|
94
|
+
]
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
if (!schema || typeof schema !== 'object' || Object.keys(schema).length === 0) {
|
|
98
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
99
|
+
className: "field-type",
|
|
100
|
+
style: {
|
|
101
|
+
marginTop: '1rem'
|
|
102
|
+
},
|
|
103
|
+
children: [
|
|
104
|
+
/*#__PURE__*/ _jsx("div", {
|
|
105
|
+
className: "field-label",
|
|
106
|
+
children: "Provider Options"
|
|
107
|
+
}),
|
|
108
|
+
/*#__PURE__*/ _jsx("p", {
|
|
109
|
+
style: {
|
|
110
|
+
color: 'var(--theme-elevation-500)',
|
|
111
|
+
margin: 0
|
|
112
|
+
},
|
|
113
|
+
children: "No provider options are configured for this provider and capability."
|
|
114
|
+
})
|
|
115
|
+
]
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
const selectedProviderValues = providerOptionsValues?.[provider] || {};
|
|
119
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
120
|
+
className: "field-type",
|
|
121
|
+
style: {
|
|
122
|
+
marginTop: '1rem'
|
|
123
|
+
},
|
|
124
|
+
children: [
|
|
125
|
+
/*#__PURE__*/ _jsx("div", {
|
|
126
|
+
className: "field-label",
|
|
127
|
+
children: "Provider Options"
|
|
128
|
+
}),
|
|
129
|
+
/*#__PURE__*/ _jsxs("p", {
|
|
130
|
+
style: {
|
|
131
|
+
color: 'var(--theme-elevation-500)',
|
|
132
|
+
marginBottom: '0.75rem',
|
|
133
|
+
marginTop: 0
|
|
134
|
+
},
|
|
135
|
+
children: [
|
|
136
|
+
"Override ",
|
|
137
|
+
providerLabel || provider,
|
|
138
|
+
" provider options for this field."
|
|
139
|
+
]
|
|
140
|
+
}),
|
|
141
|
+
/*#__PURE__*/ _jsx("div", {
|
|
142
|
+
style: {
|
|
143
|
+
display: 'flex',
|
|
144
|
+
flexDirection: 'column'
|
|
145
|
+
},
|
|
146
|
+
children: /*#__PURE__*/ _jsx(ProviderOptionsTree, {
|
|
147
|
+
onChange: handleOptionChange,
|
|
148
|
+
path: [],
|
|
149
|
+
schemaValue: schema,
|
|
150
|
+
selectedValue: selectedProviderValues
|
|
151
|
+
})
|
|
152
|
+
})
|
|
153
|
+
]
|
|
154
|
+
});
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/InstructionProviderOptions/index.tsx"],"sourcesContent":["'use client'\n\nimport type { FieldClientComponent } from 'payload'\n\nimport { useField, useFormFields } from '@payloadcms/ui'\nimport * as React from 'react'\nimport { useCallback, useMemo } from 'react'\n\nimport { useAISettings } from '../hooks/useAISettings.js'\nimport { updateProviderOptionsValue } from '../providerOptions/updateProviderOptionsValue.js'\nimport { ProviderOptionsTree } from './ProviderOptionsTree.js'\n\nfunction inferUseCase(fieldPath: string): 'image' | 'text' | 'tts' | 'video' {\n const parentName = fieldPath.split('.').slice(-2)[0]\n\n if (parentName === 'image-settings') {\n return 'image'\n }\n if (parentName === 'tts-settings') {\n return 'tts'\n }\n if (parentName === 'video-settings') {\n return 'video'\n }\n\n return 'text'\n}\n\nexport const InstructionProviderOptions: FieldClientComponent = ({ path }) => {\n const { data: aiSettings } = useAISettings()\n\n const fieldPath = (path as string) || ''\n const groupPath = fieldPath.split('.').slice(0, -1).join('.')\n const providerPath = `${groupPath}.provider`\n const useCase = useMemo(() => inferUseCase(fieldPath), [fieldPath])\n\n const providerField = useFormFields(([fields]) => fields[providerPath])\n const provider = providerField?.value as string | undefined\n\n const { setValue: setProviderOptionsValues, value: providerOptionsValues } = useField<unknown>({\n path: fieldPath,\n })\n\n // 1. Find the provider's schema for this use case\n const schema = useMemo(() => {\n if (!provider || !aiSettings?.defaults) {\n return null\n }\n const useCaseDefaults = (aiSettings.defaults as Record<string, unknown>)[useCase] as Record<\n string,\n unknown\n >\n // We stored the raw schema object directly under schemas[provider] during autoSetup\n const schemas = useCaseDefaults?.schema as Record<string, unknown> | undefined\n return schemas?.[provider] || null\n }, [aiSettings, provider, useCase])\n\n const providerLabel = useMemo(() => {\n if (!provider) {\n return undefined\n }\n\n const providers = Array.isArray(aiSettings?.providers) ? aiSettings.providers : []\n const configuredProvider = providers.find(\n (item) =>\n item &&\n typeof item === 'object' &&\n 'blockType' in item &&\n (item as { blockType?: unknown }).blockType === provider,\n ) as { providerName?: string } | undefined\n\n if (configuredProvider?.providerName) {\n return configuredProvider.providerName\n }\n\n return provider\n }, [aiSettings?.providers, provider])\n\n const handleOptionChange = useCallback(\n (keyPath: string[], targetValue: unknown) => {\n const nextValue = updateProviderOptionsValue({\n currentValue: providerOptionsValues,\n keyPath,\n provider,\n targetValue,\n })\n setProviderOptionsValues(nextValue)\n },\n [providerOptionsValues, provider, setProviderOptionsValues],\n )\n\n if (!provider) {\n return (\n <div className=\"field-type\" style={{ marginTop: '1rem' }}>\n <div className=\"field-label\">Provider Options</div>\n <p style={{ color: 'var(--theme-elevation-500)', margin: 0 }}>\n Select a provider to configure provider options.\n </p>\n </div>\n )\n }\n\n if (!schema || typeof schema !== 'object' || Object.keys(schema).length === 0) {\n return (\n <div className=\"field-type\" style={{ marginTop: '1rem' }}>\n <div className=\"field-label\">Provider Options</div>\n <p style={{ color: 'var(--theme-elevation-500)', margin: 0 }}>\n No provider options are configured for this provider and capability.\n </p>\n </div>\n )\n }\n\n const selectedProviderValues = (providerOptionsValues as Record<string, any>)?.[provider] || {}\n\n return (\n <div className=\"field-type\" style={{ marginTop: '1rem' }}>\n <div className=\"field-label\">Provider Options</div>\n <p style={{ color: 'var(--theme-elevation-500)', marginBottom: '0.75rem', marginTop: 0 }}>\n Override {providerLabel || provider} provider options for this field.\n </p>\n\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <ProviderOptionsTree\n onChange={handleOptionChange}\n path={[]}\n schemaValue={schema}\n selectedValue={selectedProviderValues}\n />\n </div>\n </div>\n )\n}\n"],"names":["useField","useFormFields","React","useCallback","useMemo","useAISettings","updateProviderOptionsValue","ProviderOptionsTree","inferUseCase","fieldPath","parentName","split","slice","InstructionProviderOptions","path","data","aiSettings","groupPath","join","providerPath","useCase","providerField","fields","provider","value","setValue","setProviderOptionsValues","providerOptionsValues","schema","defaults","useCaseDefaults","schemas","providerLabel","undefined","providers","Array","isArray","configuredProvider","find","item","blockType","providerName","handleOptionChange","keyPath","targetValue","nextValue","currentValue","div","className","style","marginTop","p","color","margin","Object","keys","length","selectedProviderValues","marginBottom","display","flexDirection","onChange","schemaValue","selectedValue"],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useField, useFormFields } from '@payloadcms/ui';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { useCallback, useMemo } from 'react';
|
|
5
|
+
import { useAISettings } from '../hooks/useAISettings.js';
|
|
6
|
+
import { updateProviderOptionsValue } from '../providerOptions/updateProviderOptionsValue.js';
|
|
7
|
+
import { ProviderOptionsTree } from './ProviderOptionsTree.js';
|
|
8
|
+
function inferUseCase(fieldPath) {
|
|
9
|
+
const parentName = fieldPath.split('.').slice(-2)[0];
|
|
10
|
+
if (parentName === 'image-settings') {
|
|
11
|
+
return 'image';
|
|
12
|
+
}
|
|
13
|
+
if (parentName === 'tts-settings') {
|
|
14
|
+
return 'tts';
|
|
15
|
+
}
|
|
16
|
+
if (parentName === 'video-settings') {
|
|
17
|
+
return 'video';
|
|
18
|
+
}
|
|
19
|
+
return 'text';
|
|
20
|
+
}
|
|
21
|
+
export const InstructionProviderOptions = ({ path }) => {
|
|
22
|
+
const { data: aiSettings } = useAISettings();
|
|
23
|
+
const fieldPath = path || '';
|
|
24
|
+
const groupPath = fieldPath.split('.').slice(0, -1).join('.');
|
|
25
|
+
const providerPath = `${groupPath}.provider`;
|
|
26
|
+
const useCase = useMemo(() => inferUseCase(fieldPath), [fieldPath]);
|
|
27
|
+
const providerField = useFormFields(([fields]) => fields[providerPath]);
|
|
28
|
+
const provider = providerField?.value;
|
|
29
|
+
const { setValue: setProviderOptionsValues, value: providerOptionsValues } = useField({
|
|
30
|
+
path: fieldPath,
|
|
31
|
+
});
|
|
32
|
+
// 1. Find the provider's schema for this use case
|
|
33
|
+
const schema = useMemo(() => {
|
|
34
|
+
if (!provider || !aiSettings?.defaults) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const useCaseDefaults = aiSettings.defaults[useCase];
|
|
38
|
+
// We stored the raw schema object directly under schemas[provider] during autoSetup
|
|
39
|
+
const schemas = useCaseDefaults?.schema;
|
|
40
|
+
return schemas?.[provider] || null;
|
|
41
|
+
}, [aiSettings, provider, useCase]);
|
|
42
|
+
const providerLabel = useMemo(() => {
|
|
43
|
+
if (!provider) {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
const providers = Array.isArray(aiSettings?.providers) ? aiSettings.providers : [];
|
|
47
|
+
const configuredProvider = providers.find((item) => item &&
|
|
48
|
+
typeof item === 'object' &&
|
|
49
|
+
'blockType' in item &&
|
|
50
|
+
item.blockType === provider);
|
|
51
|
+
if (configuredProvider?.providerName) {
|
|
52
|
+
return configuredProvider.providerName;
|
|
53
|
+
}
|
|
54
|
+
return provider;
|
|
55
|
+
}, [aiSettings?.providers, provider]);
|
|
56
|
+
const handleOptionChange = useCallback((keyPath, targetValue) => {
|
|
57
|
+
const nextValue = updateProviderOptionsValue({
|
|
58
|
+
currentValue: providerOptionsValues,
|
|
59
|
+
keyPath,
|
|
60
|
+
provider,
|
|
61
|
+
targetValue,
|
|
62
|
+
});
|
|
63
|
+
setProviderOptionsValues(nextValue);
|
|
64
|
+
}, [providerOptionsValues, provider, setProviderOptionsValues]);
|
|
65
|
+
if (!provider) {
|
|
66
|
+
return (<div className="field-type" style={{ marginTop: '1rem' }}>
|
|
67
|
+
<div className="field-label">Provider Options</div>
|
|
68
|
+
<p style={{ color: 'var(--theme-elevation-500)', margin: 0 }}>
|
|
69
|
+
Select a provider to configure provider options.
|
|
70
|
+
</p>
|
|
71
|
+
</div>);
|
|
72
|
+
}
|
|
73
|
+
if (!schema || typeof schema !== 'object' || Object.keys(schema).length === 0) {
|
|
74
|
+
return (<div className="field-type" style={{ marginTop: '1rem' }}>
|
|
75
|
+
<div className="field-label">Provider Options</div>
|
|
76
|
+
<p style={{ color: 'var(--theme-elevation-500)', margin: 0 }}>
|
|
77
|
+
No provider options are configured for this provider and capability.
|
|
78
|
+
</p>
|
|
79
|
+
</div>);
|
|
80
|
+
}
|
|
81
|
+
const selectedProviderValues = providerOptionsValues?.[provider] || {};
|
|
82
|
+
return (<div className="field-type" style={{ marginTop: '1rem' }}>
|
|
83
|
+
<div className="field-label">Provider Options</div>
|
|
84
|
+
<p style={{ color: 'var(--theme-elevation-500)', marginBottom: '0.75rem', marginTop: 0 }}>
|
|
85
|
+
Override {providerLabel || provider} provider options for this field.
|
|
86
|
+
</p>
|
|
87
|
+
|
|
88
|
+
<div style={{ display: 'flex', flexDirection: 'column' }}>
|
|
89
|
+
<ProviderOptionsTree onChange={handleOptionChange} path={[]} schemaValue={schema} selectedValue={selectedProviderValues}/>
|
|
90
|
+
</div>
|
|
91
|
+
</div>);
|
|
92
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ui/VoicesFetcher/index.tsx"],"sourcesContent":["'use client'\n\nimport type { FieldClientComponent } from 'payload'\n\nimport { Button, toast, useField
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/VoicesFetcher/index.tsx"],"sourcesContent":["'use client'\n\nimport type { FieldClientComponent } from 'payload'\n\nimport { Button, toast, useField } from '@payloadcms/ui'\nimport React, { useCallback, useState } from 'react'\n\nimport type { Voice } from '../shared/types.js'\n\nimport { PLUGIN_API_ENDPOINT_FETCH_VOICES } from '../../defaults.js'\n\n\n/**\n * VoicesFetcher Component\n * Fetches voices from ElevenLabs API (server-side) and populates the voices array field\n * SECURE: API key is never exposed to the client\n */\nexport const VoicesFetcher: FieldClientComponent = ({ path }) => {\n const [loading, setLoading] = useState(false)\n\n // Get the parent path (the block path)\n const fieldPath = (path as string) || ''\n const blockPath = fieldPath.split('.').slice(0, -1).join('.')\n const voicesPath = `${blockPath}.voices`\n\n const { setValue } = useField<Voice[]>({ path: voicesPath })\n\n const fetchVoices = useCallback(async () => {\n setLoading(true)\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), 30000) // 30s timeout\n\n try {\n // Call server endpoint - it will read the API key from the database\n const response = await fetch(`/api${PLUGIN_API_ENDPOINT_FETCH_VOICES}`, {\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n let errorMessage = 'Failed to fetch voices'\n try {\n const error = await response.json()\n errorMessage = error.message || errorMessage\n } catch (e) {\n // If response is not JSON (e.g. 504 Gateway Timeout HTML), use status text\n errorMessage = `Error ${response.status}: ${response.statusText}`\n }\n throw new Error(errorMessage)\n }\n\n const data = await response.json()\n const voices: Voice[] = data.voices || []\n\n // Replace the entire array value at once\n // This is much more performant than dispatching ADD_ROW actions in a loop\n setValue(voices)\n\n toast.success(`Successfully fetched ${voices.length} voices!`)\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : 'Failed to fetch voices'\n if (error instanceof Error && error.name === 'AbortError') {\n toast.error('Request timed out. Please try again.')\n } else {\n toast.error(`Error: ${msg}`)\n }\n } finally {\n setLoading(false)\n clearTimeout(timeoutId)\n }\n }, [setValue])\n\n return (\n <div style={{ marginBottom: '20px' }}>\n <Button buttonStyle=\"secondary\" disabled={loading} margin={false} onClick={fetchVoices} size=\"medium\">\n {loading ? 'Fetching Voices...' : 'Fetch Voices'}\n </Button>\n <p style={{ color: 'var(--theme-elevation-600)', fontSize: '13px', marginTop: '8px' }}>\n This will fetch all available voices from your ElevenLabs account. Make sure you have saved\n your API key in the Setup tab first.\n </p>\n </div>\n )\n}\n"],"names":["Button","toast","useField","React","useCallback","useState","PLUGIN_API_ENDPOINT_FETCH_VOICES","VoicesFetcher","path","loading","setLoading","fieldPath","blockPath","split","slice","join","voicesPath","setValue","fetchVoices","controller","AbortController","timeoutId","setTimeout","abort","response","fetch","headers","method","signal","clearTimeout","ok","errorMessage","error","json","message","e","status","statusText","Error","data","voices","success","length","msg","name","div","style","marginBottom","buttonStyle","disabled","margin","onClick","size","p","color","fontSize","marginTop"],"mappings":"AAAA;;AAIA,SAASA,MAAM,EAAEC,KAAK,EAAEC,QAAQ,QAAQ,iBAAgB;AACxD,OAAOC,SAASC,WAAW,EAAEC,QAAQ,QAAQ,QAAO;AAIpD,SAASC,gCAAgC,QAAQ,oBAAmB;AAGpE;;;;CAIC,GACD,OAAO,MAAMC,gBAAsC,CAAC,EAAEC,IAAI,EAAE;IAC1D,MAAM,CAACC,SAASC,WAAW,GAAGL,SAAS;IAEvC,uCAAuC;IACvC,MAAMM,YAAY,AAACH,QAAmB;IACtC,MAAMI,YAAYD,UAAUE,KAAK,CAAC,KAAKC,KAAK,CAAC,GAAG,CAAC,GAAGC,IAAI,CAAC;IACzD,MAAMC,aAAa,CAAC,EAAEJ,UAAU,OAAO,CAAC;IAExC,MAAM,EAAEK,QAAQ,EAAE,GAAGf,SAAkB;QAAEM,MAAMQ;IAAW;IAE1D,MAAME,cAAcd,YAAY;QAC9BM,WAAW;QAEX,MAAMS,aAAa,IAAIC;QACvB,MAAMC,YAAYC,WAAW,IAAMH,WAAWI,KAAK,IAAI,OAAO,cAAc;;QAE5E,IAAI;YACF,oEAAoE;YACpE,MAAMC,WAAW,MAAMC,MAAM,CAAC,IAAI,EAAEnB,iCAAiC,CAAC,EAAE;gBACtEoB,SAAS;oBACP,gBAAgB;gBAClB;gBACAC,QAAQ;gBACRC,QAAQT,WAAWS,MAAM;YAC3B;YAEAC,aAAaR;YAEb,IAAI,CAACG,SAASM,EAAE,EAAE;gBAChB,IAAIC,eAAe;gBACnB,IAAI;oBACF,MAAMC,QAAQ,MAAMR,SAASS,IAAI;oBACjCF,eAAeC,MAAME,OAAO,IAAIH;gBAClC,EAAE,OAAOI,GAAG;oBACV,2EAA2E;oBAC3EJ,eAAe,CAAC,MAAM,EAAEP,SAASY,MAAM,CAAC,EAAE,EAAEZ,SAASa,UAAU,CAAC,CAAC;gBACnE;gBACA,MAAM,IAAIC,MAAMP;YAClB;YAEA,MAAMQ,OAAO,MAAMf,SAASS,IAAI;YAChC,MAAMO,SAAkBD,KAAKC,MAAM,IAAI,EAAE;YAEzC,yCAAyC;YACzC,0EAA0E;YAC1EvB,SAASuB;YAETvC,MAAMwC,OAAO,CAAC,CAAC,qBAAqB,EAAED,OAAOE,MAAM,CAAC,QAAQ,CAAC;QAC/D,EAAE,OAAOV,OAAgB;YACvB,MAAMW,MAAMX,iBAAiBM,QAAQN,MAAME,OAAO,GAAG;YACrD,IAAIF,iBAAiBM,SAASN,MAAMY,IAAI,KAAK,cAAc;gBACzD3C,MAAM+B,KAAK,CAAC;YACd,OAAO;gBACL/B,MAAM+B,KAAK,CAAC,CAAC,OAAO,EAAEW,IAAI,CAAC;YAC7B;QACF,SAAU;YACRjC,WAAW;YACXmB,aAAaR;QACf;IACF,GAAG;QAACJ;KAAS;IAEb,qBACE,MAAC4B;QAAIC,OAAO;YAAEC,cAAc;QAAO;;0BACjC,KAAC/C;gBAAOgD,aAAY;gBAAYC,UAAUxC;gBAASyC,QAAQ;gBAAOC,SAASjC;gBAAakC,MAAK;0BAC1F3C,UAAU,uBAAuB;;0BAEpC,KAAC4C;gBAAEP,OAAO;oBAAEQ,OAAO;oBAA8BC,UAAU;oBAAQC,WAAW;gBAAM;0BAAG;;;;AAM7F,EAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { AISettingsData } from '../../ai/providers/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Shared hook for fetching AI settings from `/api/globals/ai-providers`.
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Module-level cache to prevent redundant fetches across components
|
|
7
|
+
* - Deduplicates in-flight requests (if 3 components mount at once, only 1 fetch fires)
|
|
8
|
+
* - Optional `depth` parameter for controlling response depth
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const { data, isLoading } = useAISettings()
|
|
13
|
+
* const providers = data?.providers ?? []
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare function useAISettings(options?: {
|
|
17
|
+
depth?: number;
|
|
18
|
+
}): {
|
|
19
|
+
data: AISettingsData | null;
|
|
20
|
+
isLoading: boolean;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Invalidate the cached AI settings, forcing the next `useAISettings` call to re-fetch.
|
|
24
|
+
* Useful after saving settings.
|
|
25
|
+
*/
|
|
26
|
+
export declare function invalidateAISettings(): void;
|