@ai-stack/payloadcms 3.2.26 → 3.68.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/{LICENSE.md → LICENSE} +1 -1
- package/README.md +218 -229
- package/dist/access/checkAccess.d.ts +4 -0
- package/dist/access/checkAccess.js +20 -0
- package/dist/access/checkAccess.js.map +1 -0
- package/dist/ai/core/generateObject.d.ts +7 -0
- package/dist/ai/core/generateObject.js +35 -0
- package/dist/ai/core/generateObject.js.map +1 -0
- package/dist/ai/core/generateText.d.ts +7 -0
- package/dist/ai/core/generateText.js +31 -0
- package/dist/ai/core/generateText.js.map +1 -0
- package/dist/ai/core/index.d.ts +11 -0
- package/dist/ai/core/index.js +10 -0
- package/dist/ai/core/index.js.map +1 -0
- package/dist/ai/core/media/generateMedia.d.ts +7 -0
- package/dist/ai/core/media/generateMedia.js +50 -0
- package/dist/ai/core/media/generateMedia.js.map +1 -0
- package/dist/ai/core/media/image/generateImage.d.ts +6 -0
- package/dist/ai/core/media/image/generateImage.js +41 -0
- package/dist/ai/core/media/image/generateImage.js.map +1 -0
- package/dist/ai/core/media/image/handlers/multimodal.d.ts +7 -0
- package/dist/ai/core/media/image/handlers/multimodal.js +100 -0
- package/dist/ai/core/media/image/handlers/multimodal.js.map +1 -0
- package/dist/ai/core/media/image/handlers/standard.d.ts +7 -0
- package/dist/ai/core/media/image/handlers/standard.js +28 -0
- package/dist/ai/core/media/image/handlers/standard.js.map +1 -0
- package/dist/ai/core/media/image/index.d.ts +2 -0
- package/dist/ai/core/media/image/index.js +3 -0
- package/dist/ai/core/media/image/index.js.map +1 -0
- package/dist/ai/core/media/index.d.ts +2 -0
- package/dist/ai/core/media/index.js +3 -0
- package/dist/ai/core/media/index.js.map +1 -0
- package/dist/ai/core/media/speech/generateSpeech.d.ts +5 -0
- package/dist/ai/core/media/speech/generateSpeech.js +55 -0
- package/dist/ai/core/media/speech/generateSpeech.js.map +1 -0
- package/dist/ai/core/media/speech/index.d.ts +2 -0
- package/dist/ai/core/media/speech/index.js +3 -0
- package/dist/ai/core/media/speech/index.js.map +1 -0
- package/dist/ai/core/media/types.d.ts +74 -0
- package/dist/ai/core/media/types.js +5 -0
- package/dist/ai/core/media/types.js.map +1 -0
- package/dist/ai/core/media/utils.d.ts +11 -0
- package/dist/ai/core/media/utils.js +34 -0
- package/dist/ai/core/media/utils.js.map +1 -0
- package/dist/ai/core/media/video/generateVideo.d.ts +6 -0
- package/dist/ai/core/media/video/generateVideo.js +32 -0
- package/dist/ai/core/media/video/generateVideo.js.map +1 -0
- package/dist/ai/core/media/video/index.d.ts +2 -0
- package/dist/ai/core/media/video/index.js +3 -0
- package/dist/ai/core/media/video/index.js.map +1 -0
- package/dist/ai/core/streamObject.d.ts +7 -0
- package/dist/ai/core/streamObject.js +54 -0
- package/dist/ai/core/streamObject.js.map +1 -0
- package/dist/ai/core/streamText.d.ts +7 -0
- package/dist/ai/core/streamText.js +30 -0
- package/dist/ai/core/streamText.js.map +1 -0
- package/dist/ai/core/types.d.ts +85 -0
- package/dist/ai/core/types.js +5 -0
- package/dist/ai/core/types.js.map +1 -0
- package/dist/ai/index.d.ts +11 -0
- package/dist/ai/index.js +25 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/providers/blocks/anthropic.d.ts +2 -0
- package/dist/ai/providers/blocks/anthropic.js +223 -0
- package/dist/ai/providers/blocks/anthropic.js.map +1 -0
- package/dist/ai/providers/blocks/elevenlabs.d.ts +2 -0
- package/dist/ai/providers/blocks/elevenlabs.js +449 -0
- package/dist/ai/providers/blocks/elevenlabs.js.map +1 -0
- package/dist/ai/providers/blocks/fal.d.ts +2 -0
- package/dist/ai/providers/blocks/fal.js +312 -0
- package/dist/ai/providers/blocks/fal.js.map +1 -0
- package/dist/ai/providers/blocks/google.d.ts +2 -0
- package/dist/ai/providers/blocks/google.js +623 -0
- package/dist/ai/providers/blocks/google.js.map +1 -0
- package/dist/ai/providers/blocks/index.d.ts +2 -0
- package/dist/ai/providers/blocks/index.js +18 -0
- package/dist/ai/providers/blocks/index.js.map +1 -0
- package/dist/ai/providers/blocks/openai-compatible.d.ts +2 -0
- package/dist/ai/providers/blocks/openai-compatible.js +308 -0
- package/dist/ai/providers/blocks/openai-compatible.js.map +1 -0
- package/dist/ai/providers/blocks/openai.d.ts +2 -0
- package/dist/ai/providers/blocks/openai.js +600 -0
- package/dist/ai/providers/blocks/openai.js.map +1 -0
- package/dist/ai/providers/blocks/xai.d.ts +2 -0
- package/dist/ai/providers/blocks/xai.js +247 -0
- package/dist/ai/providers/blocks/xai.js.map +1 -0
- package/dist/ai/providers/icons.d.ts +7 -0
- package/dist/ai/providers/icons.js +9 -0
- package/dist/ai/providers/icons.js.map +1 -0
- package/dist/ai/providers/index.d.ts +2 -0
- package/dist/ai/providers/index.js +6 -0
- package/dist/ai/providers/index.js.map +1 -0
- package/dist/ai/providers/registry.d.ts +40 -0
- package/dist/ai/providers/registry.js +267 -0
- package/dist/ai/providers/registry.js.map +1 -0
- package/dist/ai/providers/types.d.ts +115 -0
- package/dist/ai/providers/types.js +4 -0
- package/dist/ai/providers/types.js.map +1 -0
- package/dist/ai/utils/systemGenerate.d.ts +1 -1
- package/dist/ai/utils/systemGenerate.js +19 -19
- package/dist/ai/utils/systemGenerate.js.map +1 -1
- package/dist/collections/AIJobs.d.ts +2 -0
- package/dist/collections/AIJobs.js +81 -0
- package/dist/collections/AIJobs.js.map +1 -0
- package/dist/collections/AISettings.d.ts +2 -0
- package/dist/collections/AISettings.js +279 -0
- package/dist/collections/AISettings.js.map +1 -0
- package/dist/collections/Instructions.js +224 -50
- package/dist/collections/Instructions.js.map +1 -1
- package/dist/defaults.d.ts +3 -0
- package/dist/defaults.js +3 -0
- package/dist/defaults.js.map +1 -1
- package/dist/endpoints/buildPromptUtils.d.ts +19 -0
- package/dist/endpoints/buildPromptUtils.js +114 -0
- package/dist/endpoints/buildPromptUtils.js.map +1 -0
- package/dist/endpoints/chat.d.ts +4 -0
- package/dist/endpoints/fetchFields.js +0 -7
- package/dist/endpoints/fetchFields.js.map +1 -1
- package/dist/endpoints/fetchVoices.d.ts +2 -0
- package/dist/endpoints/fetchVoices.js +79 -0
- package/dist/endpoints/fetchVoices.js.map +1 -0
- package/dist/endpoints/index.js +339 -232
- package/dist/endpoints/index.js.map +1 -1
- package/dist/exports/client.d.ts +9 -0
- package/dist/exports/client.js +9 -0
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/fields.d.ts +1 -0
- package/dist/exports/fields.js +1 -0
- package/dist/exports/fields.js.map +1 -1
- package/dist/fields/ArrayComposeField/ArrayComposeField.d.ts +15 -0
- package/dist/fields/ArrayComposeField/ArrayComposeField.js +87 -0
- package/dist/fields/ArrayComposeField/ArrayComposeField.js.map +1 -0
- package/dist/fields/ArrayComposeField/ArrayComposeField.jsx +73 -0
- package/dist/fields/ComposeField/ComposeField.js +2 -2
- package/dist/fields/ComposeField/ComposeField.js.map +1 -1
- package/dist/fields/ComposeField/ComposeField.jsx +2 -2
- package/dist/fields/PromptEditorField/PromptEditorField.js +162 -16
- package/dist/fields/PromptEditorField/PromptEditorField.js.map +1 -1
- package/dist/fields/PromptEditorField/PromptEditorField.jsx +123 -5
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/init.js +63 -65
- package/dist/init.js.map +1 -1
- package/dist/payload-ai.d.ts +149 -0
- package/dist/plugin.js +94 -46
- package/dist/plugin.js.map +1 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.js +38 -7
- package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.jsx +30 -4
- package/dist/providers/InstructionsProvider/context.d.ts +1 -0
- package/dist/providers/InstructionsProvider/context.js +1 -0
- package/dist/providers/InstructionsProvider/context.js.map +1 -1
- package/dist/providers/InstructionsProvider/useInstructions.js +30 -10
- package/dist/providers/InstructionsProvider/useInstructions.js.map +1 -1
- package/dist/styles.d.ts +11 -0
- package/dist/types/handlebars-async-helpers.d.ts +1 -0
- package/dist/types/handlebars-dist-handlebars.d.ts +1 -0
- package/dist/types/react-mentions.d.ts +1 -0
- package/dist/types.d.ts +6 -16
- package/dist/types.js.map +1 -1
- package/dist/ui/AIConfigDashboard/index.d.ts +2 -0
- package/dist/ui/AIConfigDashboard/index.js +46 -0
- package/dist/ui/AIConfigDashboard/index.js.map +1 -0
- package/dist/ui/AIConfigDashboard/index.jsx +24 -0
- package/dist/ui/ApiKeyStatusIndicator/index.d.ts +6 -0
- package/dist/ui/ApiKeyStatusIndicator/index.js +39 -0
- package/dist/ui/ApiKeyStatusIndicator/index.js.map +1 -0
- package/dist/ui/ApiKeyStatusIndicator/index.jsx +29 -0
- package/dist/ui/Compose/Compose.d.ts +2 -2
- package/dist/ui/Compose/Compose.js +118 -92
- package/dist/ui/Compose/Compose.js.map +1 -1
- package/dist/ui/Compose/Compose.jsx +113 -103
- package/dist/ui/Compose/ComposePlaceholder.d.ts +7 -0
- package/dist/ui/Compose/ComposePlaceholder.js +78 -0
- package/dist/ui/Compose/ComposePlaceholder.js.map +1 -0
- package/dist/ui/Compose/ComposePlaceholder.jsx +66 -0
- package/dist/ui/Compose/UndoRedoActions.d.ts +2 -2
- package/dist/ui/Compose/UndoRedoActions.js +11 -6
- package/dist/ui/Compose/UndoRedoActions.js.map +1 -1
- package/dist/ui/Compose/UndoRedoActions.jsx +8 -6
- package/dist/ui/Compose/compose.module.css +57 -17
- package/dist/ui/Compose/hooks/menu/itemsMap.js +13 -7
- package/dist/ui/Compose/hooks/menu/itemsMap.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/useMenu.d.ts +2 -1
- package/dist/ui/Compose/hooks/menu/useMenu.js +28 -17
- package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/useMenu.jsx +27 -14
- package/dist/ui/Compose/hooks/useActiveFieldTracking.js +69 -10
- package/dist/ui/Compose/hooks/useActiveFieldTracking.js.map +1 -1
- package/dist/ui/Compose/hooks/useGenerate.d.ts +3 -0
- package/dist/ui/Compose/hooks/useGenerate.js +71 -11
- package/dist/ui/Compose/hooks/useGenerate.js.map +1 -1
- package/dist/ui/Compose/hooks/useHistory.d.ts +0 -1
- package/dist/ui/Compose/hooks/useHistory.js +113 -26
- package/dist/ui/Compose/hooks/useHistory.js.map +1 -1
- package/dist/ui/DynamicModelSelect/index.d.ts +7 -0
- package/dist/ui/DynamicModelSelect/index.js +231 -0
- package/dist/ui/DynamicModelSelect/index.js.map +1 -0
- package/dist/ui/DynamicModelSelect/index.jsx +207 -0
- package/dist/ui/DynamicProviderSelect/index.d.ts +7 -0
- package/dist/ui/DynamicProviderSelect/index.js +101 -0
- package/dist/ui/DynamicProviderSelect/index.js.map +1 -0
- package/dist/ui/DynamicProviderSelect/index.jsx +90 -0
- package/dist/ui/DynamicVoiceSelect/index.d.ts +7 -0
- package/dist/ui/DynamicVoiceSelect/index.js +156 -0
- package/dist/ui/DynamicVoiceSelect/index.js.map +1 -0
- package/dist/ui/DynamicVoiceSelect/index.jsx +102 -0
- package/dist/ui/EncryptedTextField/index.d.ts +8 -0
- package/dist/ui/EncryptedTextField/index.js +74 -0
- package/dist/ui/EncryptedTextField/index.js.map +1 -0
- package/dist/ui/EncryptedTextField/index.jsx +35 -0
- package/dist/ui/Icons/LottieAnimation.js +3 -1
- package/dist/ui/Icons/LottieAnimation.js.map +1 -1
- package/dist/ui/Icons/LottieAnimation.jsx +2 -1
- package/dist/ui/ModelRowLabel/index.d.ts +6 -0
- package/dist/ui/ModelRowLabel/index.js +41 -0
- package/dist/ui/ModelRowLabel/index.js.map +1 -0
- package/dist/ui/ModelRowLabel/index.jsx +26 -0
- package/dist/ui/ProviderOptionsEditor/index.d.ts +7 -0
- package/dist/ui/ProviderOptionsEditor/index.js +291 -0
- package/dist/ui/ProviderOptionsEditor/index.js.map +1 -0
- package/dist/ui/ProviderOptionsEditor/index.jsx +210 -0
- package/dist/ui/VoicesFetcher/index.d.ts +7 -0
- package/dist/ui/VoicesFetcher/index.js +118 -0
- package/dist/ui/VoicesFetcher/index.js.map +1 -0
- package/dist/ui/VoicesFetcher/index.jsx +79 -0
- package/dist/utilities/buildSmartPrompt.d.ts +22 -0
- package/dist/utilities/buildSmartPrompt.js +143 -0
- package/dist/utilities/buildSmartPrompt.js.map +1 -0
- package/dist/utilities/encryption.d.ts +2 -0
- package/dist/utilities/encryption.js +47 -0
- package/dist/utilities/encryption.js.map +1 -0
- package/dist/utilities/extractImageData.d.ts +9 -0
- package/dist/utilities/extractImageData.js +12 -2
- package/dist/utilities/extractImageData.js.map +1 -1
- package/dist/utilities/fetchImages.d.ts +14 -0
- package/dist/utilities/fetchImages.js +38 -0
- package/dist/utilities/fetchImages.js.map +1 -0
- package/dist/utilities/fieldToJsonSchema.d.ts +2 -1
- package/dist/utilities/fieldToJsonSchema.js +66 -3
- package/dist/utilities/fieldToJsonSchema.js.map +1 -1
- package/dist/utilities/getFieldBySchemaPath.d.ts +2 -2
- package/dist/utilities/getFieldBySchemaPath.js +15 -0
- package/dist/utilities/getFieldBySchemaPath.js.map +1 -1
- package/dist/utilities/getProviderOptionsFields.d.ts +16 -0
- package/dist/utilities/getProviderOptionsFields.js +80 -0
- package/dist/utilities/getProviderOptionsFields.js.map +1 -0
- package/dist/utilities/isPluginActivated.js +1 -2
- package/dist/utilities/isPluginActivated.js.map +1 -1
- package/dist/utilities/lexicalToHTML.js.map +1 -1
- package/dist/utilities/resolveImageReferences.d.ts +30 -0
- package/dist/utilities/resolveImageReferences.js +167 -0
- package/dist/utilities/resolveImageReferences.js.map +1 -0
- package/dist/utilities/schemaConverter.d.ts +3 -0
- package/dist/utilities/schemaConverter.js +93 -0
- package/dist/utilities/schemaConverter.js.map +1 -0
- package/dist/utilities/setSafeLexicalState.d.ts +1 -3
- package/dist/utilities/setSafeLexicalState.js +1 -1
- package/dist/utilities/setSafeLexicalState.js.map +1 -1
- package/dist/utilities/updateFieldsConfig.js +27 -43
- package/dist/utilities/updateFieldsConfig.js.map +1 -1
- package/package.json +23 -24
- package/dist/ai/models/anthropic/index.d.ts +0 -2
- package/dist/ai/models/anthropic/index.js +0 -129
- package/dist/ai/models/anthropic/index.js.map +0 -1
- package/dist/ai/models/elevenLabs/generateVoice.d.ts +0 -8
- package/dist/ai/models/elevenLabs/generateVoice.js +0 -20
- package/dist/ai/models/elevenLabs/generateVoice.js.map +0 -1
- package/dist/ai/models/elevenLabs/index.d.ts +0 -2
- package/dist/ai/models/elevenLabs/index.js +0 -133
- package/dist/ai/models/elevenLabs/index.js.map +0 -1
- package/dist/ai/models/elevenLabs/voices.d.ts +0 -8
- package/dist/ai/models/elevenLabs/voices.js +0 -24
- package/dist/ai/models/elevenLabs/voices.js.map +0 -1
- package/dist/ai/models/generateObject.d.ts +0 -11
- package/dist/ai/models/generateObject.js +0 -22
- package/dist/ai/models/generateObject.js.map +0 -1
- package/dist/ai/models/google/generateImage.d.ts +0 -9
- package/dist/ai/models/google/generateImage.js +0 -27
- package/dist/ai/models/google/generateImage.js.map +0 -1
- package/dist/ai/models/google/index.d.ts +0 -2
- package/dist/ai/models/google/index.js +0 -201
- package/dist/ai/models/google/index.js.map +0 -1
- package/dist/ai/models/index.d.ts +0 -2
- package/dist/ai/models/index.js +0 -13
- package/dist/ai/models/index.js.map +0 -1
- package/dist/ai/models/openai/generateImage.d.ts +0 -5
- package/dist/ai/models/openai/generateImage.js +0 -31
- package/dist/ai/models/openai/generateImage.js.map +0 -1
- package/dist/ai/models/openai/generateVoice.d.ts +0 -6
- package/dist/ai/models/openai/generateVoice.js +0 -19
- package/dist/ai/models/openai/generateVoice.js.map +0 -1
- package/dist/ai/models/openai/index.d.ts +0 -2
- package/dist/ai/models/openai/index.js +0 -428
- package/dist/ai/models/openai/index.js.map +0 -1
- package/dist/ai/models/openai/openai.d.ts +0 -1
- package/dist/ai/models/openai/openai.js +0 -8
- package/dist/ai/models/openai/openai.js.map +0 -1
- package/dist/ai/utils/editImagesWithOpenAI.d.ts +0 -10
- package/dist/ai/utils/editImagesWithOpenAI.js +0 -37
- package/dist/ai/utils/editImagesWithOpenAI.js.map +0 -1
- package/dist/styles.d.js +0 -2
- package/dist/styles.d.js.map +0 -1
- package/dist/types/handlebars-async-helpers.d.js +0 -2
- package/dist/types/handlebars-async-helpers.d.js.map +0 -1
- package/dist/types/handlebars-dist-handlebars.d.js +0 -2
- package/dist/types/handlebars-dist-handlebars.d.js.map +0 -1
- package/dist/types/react-mentions.d.js +0 -2
- package/dist/types/react-mentions.d.js.map +0 -1
- package/dist/utilities/getGenerationModels.d.ts +0 -2
- package/dist/utilities/getGenerationModels.js +0 -10
- package/dist/utilities/getGenerationModels.js.map +0 -1
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { Compose } from './Compose.js';
|
|
4
|
+
/**
|
|
5
|
+
* Lightweight placeholder component that lazy-loads Compose when field becomes active.
|
|
6
|
+
* Uses MutationObserver to watch for .ai-plugin-active class added by useActiveFieldTracking.
|
|
7
|
+
*/
|
|
8
|
+
export const ComposePlaceholder = (props) => {
|
|
9
|
+
const [shouldMount, setShouldMount] = useState(false);
|
|
10
|
+
const containerRef = useRef(null);
|
|
11
|
+
const unmountTimerRef = useRef(null);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
const container = containerRef.current;
|
|
14
|
+
if (!container) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
// Find the parent .field-type container
|
|
18
|
+
const fieldContainer = container.closest('.field-type');
|
|
19
|
+
if (!fieldContainer) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
// Watch for .ai-plugin-active class changes
|
|
23
|
+
const observer = new MutationObserver((mutations) => {
|
|
24
|
+
for (const mutation of mutations) {
|
|
25
|
+
if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
|
|
26
|
+
if (fieldContainer.classList.contains('ai-plugin-active')) {
|
|
27
|
+
// Field is active - mount Compose and cancel any pending unmount
|
|
28
|
+
if (unmountTimerRef.current) {
|
|
29
|
+
clearTimeout(unmountTimerRef.current);
|
|
30
|
+
unmountTimerRef.current = null;
|
|
31
|
+
}
|
|
32
|
+
setShouldMount(true);
|
|
33
|
+
}
|
|
34
|
+
else if (shouldMount) {
|
|
35
|
+
// Field is inactive - schedule unmount after delay
|
|
36
|
+
if (unmountTimerRef.current) {
|
|
37
|
+
clearTimeout(unmountTimerRef.current);
|
|
38
|
+
}
|
|
39
|
+
unmountTimerRef.current = setTimeout(() => {
|
|
40
|
+
setShouldMount(false);
|
|
41
|
+
unmountTimerRef.current = null;
|
|
42
|
+
}, 1200); // 500ms delay to prevent rapid remounting
|
|
43
|
+
}
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
observer.observe(fieldContainer, {
|
|
49
|
+
attributeFilter: ['class'],
|
|
50
|
+
attributes: true,
|
|
51
|
+
});
|
|
52
|
+
// Check initial state in case field is already active
|
|
53
|
+
if (fieldContainer.classList.contains('ai-plugin-active')) {
|
|
54
|
+
setShouldMount(true);
|
|
55
|
+
}
|
|
56
|
+
return () => {
|
|
57
|
+
observer.disconnect();
|
|
58
|
+
if (unmountTimerRef.current) {
|
|
59
|
+
clearTimeout(unmountTimerRef.current);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
}, [shouldMount]);
|
|
63
|
+
return (<div ref={containerRef} style={{ display: 'contents' }}>
|
|
64
|
+
{shouldMount ? <Compose {...props}/> : null}
|
|
65
|
+
</div>);
|
|
66
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
export declare const UndoRedoActions: ({ onChange }: {
|
|
2
|
+
export declare const UndoRedoActions: React.MemoExoticComponent<({ onChange }: {
|
|
3
3
|
onChange: (val: unknown) => void;
|
|
4
|
-
}) => React.JSX.Element | null
|
|
4
|
+
}) => React.JSX.Element | null>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import React, { useCallback, useEffect, useState } from 'react';
|
|
2
|
+
import React, { memo, useCallback, useEffect, useState } from 'react';
|
|
3
3
|
import { useHistory } from './hooks/useHistory.js';
|
|
4
|
-
export const UndoRedoActions = ({ onChange })=>{
|
|
4
|
+
export const UndoRedoActions = /*#__PURE__*/ memo(({ onChange })=>{
|
|
5
5
|
const { canRedo, canUndo, redo, undo } = useHistory();
|
|
6
6
|
const redoHistoryValue = useCallback((event)=>{
|
|
7
7
|
event.stopPropagation();
|
|
@@ -10,7 +10,8 @@ export const UndoRedoActions = ({ onChange })=>{
|
|
|
10
10
|
onChange(value);
|
|
11
11
|
}
|
|
12
12
|
}, [
|
|
13
|
-
redo
|
|
13
|
+
redo,
|
|
14
|
+
onChange
|
|
14
15
|
]);
|
|
15
16
|
const undoHistoryValue = useCallback((event)=>{
|
|
16
17
|
event.stopPropagation();
|
|
@@ -19,14 +20,17 @@ export const UndoRedoActions = ({ onChange })=>{
|
|
|
19
20
|
onChange(value);
|
|
20
21
|
}
|
|
21
22
|
}, [
|
|
22
|
-
undo
|
|
23
|
+
undo,
|
|
24
|
+
onChange
|
|
23
25
|
]);
|
|
24
26
|
// Delay rendering until the client-side hydration is complete
|
|
25
27
|
const [isMounted, setIsMounted] = useState(false);
|
|
26
28
|
useEffect(()=>{
|
|
27
29
|
setIsMounted(true);
|
|
28
30
|
}, []);
|
|
29
|
-
if (!isMounted || !canUndo && !canRedo)
|
|
31
|
+
if (!isMounted || !canUndo && !canRedo) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
30
34
|
return /*#__PURE__*/ _jsxs(React.Fragment, {
|
|
31
35
|
children: [
|
|
32
36
|
/*#__PURE__*/ _jsx("button", {
|
|
@@ -51,6 +55,7 @@ export const UndoRedoActions = ({ onChange })=>{
|
|
|
51
55
|
})
|
|
52
56
|
]
|
|
53
57
|
});
|
|
54
|
-
};
|
|
58
|
+
});
|
|
59
|
+
UndoRedoActions.displayName = 'UndoRedoActions';
|
|
55
60
|
|
|
56
61
|
//# sourceMappingURL=UndoRedoActions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ui/Compose/UndoRedoActions.tsx"],"sourcesContent":["import type { MouseEventHandler} from 'react'
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/Compose/UndoRedoActions.tsx"],"sourcesContent":["import type { MouseEventHandler } from 'react'\n\nimport React, { memo, useCallback, useEffect, useState } from 'react'\n\nimport { useHistory } from './hooks/useHistory.js'\n\nexport const UndoRedoActions = memo(({ onChange }: { onChange: (val: unknown) => void }) => {\n const { canRedo, canUndo, redo, undo } = useHistory()\n\n const redoHistoryValue = useCallback<MouseEventHandler>(\n (event) => {\n event.stopPropagation()\n\n const value = redo()\n if (value) {\n onChange(value)\n }\n },\n [redo, onChange],\n )\n\n const undoHistoryValue = useCallback<MouseEventHandler>(\n (event) => {\n event.stopPropagation()\n\n const value = undo()\n if (value) {\n onChange(value)\n }\n },\n [undo, onChange],\n )\n\n // Delay rendering until the client-side hydration is complete\n const [isMounted, setIsMounted] = useState(false)\n\n useEffect(() => {\n setIsMounted(true)\n }, [])\n\n if (!isMounted || (!canUndo && !canRedo)) {\n return null\n }\n\n return (\n <React.Fragment>\n <button\n className={`btn btn--size-small btn--style-secondary ${!canUndo && 'btn--disabled'}`}\n disabled={!canUndo}\n onClick={undoHistoryValue}\n style={{ marginBlock: 0 }}\n type=\"button\"\n >\n Undo\n </button>\n <button\n className={`btn btn--size-small btn--style-secondary ${!canRedo && 'btn--disabled'}`}\n disabled={!canRedo}\n onClick={redoHistoryValue}\n style={{ marginBlock: 0 }}\n type=\"button\"\n >\n Redo\n </button>\n </React.Fragment>\n )\n})\n\nUndoRedoActions.displayName = 'UndoRedoActions'\n"],"names":["React","memo","useCallback","useEffect","useState","useHistory","UndoRedoActions","onChange","canRedo","canUndo","redo","undo","redoHistoryValue","event","stopPropagation","value","undoHistoryValue","isMounted","setIsMounted","Fragment","button","className","disabled","onClick","style","marginBlock","type","displayName"],"mappings":";AAEA,OAAOA,SAASC,IAAI,EAAEC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAErE,SAASC,UAAU,QAAQ,wBAAuB;AAElD,OAAO,MAAMC,gCAAkBL,KAAK,CAAC,EAAEM,QAAQ,EAAwC;IACrF,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,IAAI,EAAEC,IAAI,EAAE,GAAGN;IAEzC,MAAMO,mBAAmBV,YACvB,CAACW;QACCA,MAAMC,eAAe;QAErB,MAAMC,QAAQL;QACd,IAAIK,OAAO;YACTR,SAASQ;QACX;IACF,GACA;QAACL;QAAMH;KAAS;IAGlB,MAAMS,mBAAmBd,YACvB,CAACW;QACCA,MAAMC,eAAe;QAErB,MAAMC,QAAQJ;QACd,IAAII,OAAO;YACTR,SAASQ;QACX;IACF,GACA;QAACJ;QAAMJ;KAAS;IAGlB,8DAA8D;IAC9D,MAAM,CAACU,WAAWC,aAAa,GAAGd,SAAS;IAE3CD,UAAU;QACRe,aAAa;IACf,GAAG,EAAE;IAEL,IAAI,CAACD,aAAc,CAACR,WAAW,CAACD,SAAU;QACxC,OAAO;IACT;IAEA,qBACE,MAACR,MAAMmB,QAAQ;;0BACb,KAACC;gBACCC,WAAW,CAAC,yCAAyC,EAAE,CAACZ,WAAW,gBAAgB,CAAC;gBACpFa,UAAU,CAACb;gBACXc,SAASP;gBACTQ,OAAO;oBAAEC,aAAa;gBAAE;gBACxBC,MAAK;0BACN;;0BAGD,KAACN;gBACCC,WAAW,CAAC,yCAAyC,EAAE,CAACb,WAAW,gBAAgB,CAAC;gBACpFc,UAAU,CAACd;gBACXe,SAASX;gBACTY,OAAO;oBAAEC,aAAa;gBAAE;gBACxBC,MAAK;0BACN;;;;AAKP,GAAE;AAEFpB,gBAAgBqB,WAAW,GAAG"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import React, { useCallback, useEffect, useState } from 'react';
|
|
1
|
+
import React, { memo, useCallback, useEffect, useState } from 'react';
|
|
2
2
|
import { useHistory } from './hooks/useHistory.js';
|
|
3
|
-
export const UndoRedoActions = ({ onChange }) => {
|
|
3
|
+
export const UndoRedoActions = memo(({ onChange }) => {
|
|
4
4
|
const { canRedo, canUndo, redo, undo } = useHistory();
|
|
5
5
|
const redoHistoryValue = useCallback((event) => {
|
|
6
6
|
event.stopPropagation();
|
|
@@ -8,21 +8,22 @@ export const UndoRedoActions = ({ onChange }) => {
|
|
|
8
8
|
if (value) {
|
|
9
9
|
onChange(value);
|
|
10
10
|
}
|
|
11
|
-
}, [redo]);
|
|
11
|
+
}, [redo, onChange]);
|
|
12
12
|
const undoHistoryValue = useCallback((event) => {
|
|
13
13
|
event.stopPropagation();
|
|
14
14
|
const value = undo();
|
|
15
15
|
if (value) {
|
|
16
16
|
onChange(value);
|
|
17
17
|
}
|
|
18
|
-
}, [undo]);
|
|
18
|
+
}, [undo, onChange]);
|
|
19
19
|
// Delay rendering until the client-side hydration is complete
|
|
20
20
|
const [isMounted, setIsMounted] = useState(false);
|
|
21
21
|
useEffect(() => {
|
|
22
22
|
setIsMounted(true);
|
|
23
23
|
}, []);
|
|
24
|
-
if (!isMounted || (!canUndo && !canRedo))
|
|
24
|
+
if (!isMounted || (!canUndo && !canRedo)) {
|
|
25
25
|
return null;
|
|
26
|
+
}
|
|
26
27
|
return (<React.Fragment>
|
|
27
28
|
<button className={`btn btn--size-small btn--style-secondary ${!canUndo && 'btn--disabled'}`} disabled={!canUndo} onClick={undoHistoryValue} style={{ marginBlock: 0 }} type="button">
|
|
28
29
|
Undo
|
|
@@ -31,4 +32,5 @@ export const UndoRedoActions = ({ onChange }) => {
|
|
|
31
32
|
Redo
|
|
32
33
|
</button>
|
|
33
34
|
</React.Fragment>);
|
|
34
|
-
};
|
|
35
|
+
});
|
|
36
|
+
UndoRedoActions.displayName = 'UndoRedoActions';
|
|
@@ -8,15 +8,11 @@
|
|
|
8
8
|
pointer-events: none;
|
|
9
9
|
padding: 0 5px;
|
|
10
10
|
margin: 0;
|
|
11
|
-
z-index:
|
|
11
|
+
z-index: 99;
|
|
12
12
|
transform: scaleY(0) skewX(90deg) translateY(-5px);
|
|
13
13
|
transform-origin: top;
|
|
14
14
|
max-height: 0;
|
|
15
15
|
|
|
16
|
-
will-change: transform, opacity;
|
|
17
|
-
backface-visibility: hidden;
|
|
18
|
-
perspective: 1000px;
|
|
19
|
-
|
|
20
16
|
transition:
|
|
21
17
|
opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1),
|
|
22
18
|
transform 0.3s cubic-bezier(0.4, 0, 0.2, 1),
|
|
@@ -39,23 +35,22 @@
|
|
|
39
35
|
max-height 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
40
36
|
}
|
|
41
37
|
|
|
38
|
+
|
|
39
|
+
|
|
42
40
|
:global(.field-type.ai-plugin-active) .actions {
|
|
43
|
-
animation: removeWillChange 0.3s forwards;
|
|
41
|
+
/* animation: removeWillChange 0.3s forwards; */
|
|
44
42
|
}
|
|
45
43
|
|
|
46
|
-
@keyframes removeWillChange {
|
|
44
|
+
/* @keyframes removeWillChange {
|
|
47
45
|
to {
|
|
48
46
|
will-change: auto;
|
|
49
47
|
}
|
|
50
|
-
}
|
|
48
|
+
} */
|
|
51
49
|
|
|
52
50
|
.actions > * {
|
|
53
51
|
opacity: 0;
|
|
54
52
|
transform: translateY(-3px) translateZ(0);
|
|
55
53
|
|
|
56
|
-
will-change: transform, opacity;
|
|
57
|
-
backface-visibility: hidden;
|
|
58
|
-
|
|
59
54
|
transition:
|
|
60
55
|
opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1),
|
|
61
56
|
transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
@@ -68,27 +63,22 @@
|
|
|
68
63
|
|
|
69
64
|
:global(.field-type.ai-plugin-active) .actions > *:nth-child(1) {
|
|
70
65
|
transition-delay: 0.05s;
|
|
71
|
-
animation: removeWillChange 0.25s 0.05s forwards;
|
|
72
66
|
}
|
|
73
67
|
|
|
74
68
|
:global(.field-type.ai-plugin-active) .actions > *:nth-child(2) {
|
|
75
69
|
transition-delay: 0.08s;
|
|
76
|
-
animation: removeWillChange 0.28s 0.08s forwards;
|
|
77
70
|
}
|
|
78
71
|
|
|
79
72
|
:global(.field-type.ai-plugin-active) .actions > *:nth-child(3) {
|
|
80
73
|
transition-delay: 0.11s;
|
|
81
|
-
animation: removeWillChange 0.31s 0.11s forwards;
|
|
82
74
|
}
|
|
83
75
|
|
|
84
76
|
:global(.field-type.ai-plugin-active) .actions > *:nth-child(4) {
|
|
85
77
|
transition-delay: 0.14s;
|
|
86
|
-
animation: removeWillChange 0.34s 0.14s forwards;
|
|
87
78
|
}
|
|
88
79
|
|
|
89
80
|
:global(.field-type.ai-plugin-active) .actions > *:nth-child(5) {
|
|
90
81
|
transition-delay: 0.17s;
|
|
91
|
-
animation: removeWillChange 0.37s 0.17s forwards;
|
|
92
82
|
}
|
|
93
83
|
|
|
94
84
|
@media (prefers-reduced-motion: no-preference) and (min-resolution: 120dpi) {
|
|
@@ -103,6 +93,56 @@
|
|
|
103
93
|
.actions > * {
|
|
104
94
|
transition-duration: 0.01ms !important;
|
|
105
95
|
animation-duration: 0.01ms !important;
|
|
106
|
-
will-change: auto !important;
|
|
107
96
|
}
|
|
108
97
|
}
|
|
98
|
+
|
|
99
|
+
/* Force visibility modifier - Placed at end for CSS priority */
|
|
100
|
+
.actions.actionsVisible {
|
|
101
|
+
opacity: 1;
|
|
102
|
+
visibility: visible;
|
|
103
|
+
pointer-events: auto;
|
|
104
|
+
max-height: 100px;
|
|
105
|
+
transform: scaleY(1) skewX(0) translateY(0) translateZ(0);
|
|
106
|
+
|
|
107
|
+
/* User requested overrides */
|
|
108
|
+
margin: 0;
|
|
109
|
+
padding: 0;
|
|
110
|
+
/* flex-direction: row-reverse; - Reverted */
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.actions.actionsVisible > * {
|
|
114
|
+
opacity: 1;
|
|
115
|
+
transform: translateY(0) translateZ(0);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* Ensure field wrapper is positioned for absolute children */
|
|
119
|
+
/* Ensure field wrapper is positioned for absolute children */
|
|
120
|
+
.arrayFieldWrapper {
|
|
121
|
+
position: relative !important;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* Position Compose button - Base */
|
|
125
|
+
.composePortal {
|
|
126
|
+
display: flex !important;
|
|
127
|
+
align-items: center;
|
|
128
|
+
height: min-content;
|
|
129
|
+
z-index: 5;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/* When Add Row is present: Overlay at bottom right */
|
|
133
|
+
.composePortalAbsolute {
|
|
134
|
+
position: absolute;
|
|
135
|
+
bottom: 0;
|
|
136
|
+
right: 0;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* When Add Row is missing: Normal flow at bottom right */
|
|
140
|
+
.composePortalStatic {
|
|
141
|
+
position: relative;
|
|
142
|
+
width: 100%;
|
|
143
|
+
justify-content: flex-end;
|
|
144
|
+
margin-top: -32px;
|
|
145
|
+
/* Reset absolute positioning styles */
|
|
146
|
+
bottom: auto;
|
|
147
|
+
right: auto;
|
|
148
|
+
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { MemoizedTranslateMenu } from './TranslateMenu.js';
|
|
2
1
|
import { Compose, Expand, Proofread, Rephrase, Settings, Simplify, Summarize } from './items.js';
|
|
2
|
+
import { MemoizedTranslateMenu } from './TranslateMenu.js';
|
|
3
3
|
export const menuItemsMap = [
|
|
4
4
|
{
|
|
5
5
|
name: 'Proofread',
|
|
6
6
|
component: Proofread,
|
|
7
7
|
excludedFor: [
|
|
8
|
-
'upload'
|
|
8
|
+
'upload',
|
|
9
|
+
'array'
|
|
9
10
|
],
|
|
10
11
|
loadingText: 'Proofreading'
|
|
11
12
|
},
|
|
@@ -13,7 +14,8 @@ export const menuItemsMap = [
|
|
|
13
14
|
name: 'Rephrase',
|
|
14
15
|
component: Rephrase,
|
|
15
16
|
excludedFor: [
|
|
16
|
-
'upload'
|
|
17
|
+
'upload',
|
|
18
|
+
'array'
|
|
17
19
|
],
|
|
18
20
|
loadingText: 'Rephrasing'
|
|
19
21
|
},
|
|
@@ -21,7 +23,8 @@ export const menuItemsMap = [
|
|
|
21
23
|
name: 'Translate',
|
|
22
24
|
component: MemoizedTranslateMenu,
|
|
23
25
|
excludedFor: [
|
|
24
|
-
'upload'
|
|
26
|
+
'upload',
|
|
27
|
+
'array'
|
|
25
28
|
],
|
|
26
29
|
loadingText: 'Translating'
|
|
27
30
|
},
|
|
@@ -30,7 +33,8 @@ export const menuItemsMap = [
|
|
|
30
33
|
component: Expand,
|
|
31
34
|
excludedFor: [
|
|
32
35
|
'upload',
|
|
33
|
-
'text'
|
|
36
|
+
'text',
|
|
37
|
+
'array'
|
|
34
38
|
],
|
|
35
39
|
loadingText: 'Expanding'
|
|
36
40
|
},
|
|
@@ -41,7 +45,8 @@ export const menuItemsMap = [
|
|
|
41
45
|
excludedFor: [
|
|
42
46
|
'upload',
|
|
43
47
|
'text',
|
|
44
|
-
'richText'
|
|
48
|
+
'richText',
|
|
49
|
+
'array'
|
|
45
50
|
],
|
|
46
51
|
loadingText: 'Summarizing'
|
|
47
52
|
},
|
|
@@ -49,7 +54,8 @@ export const menuItemsMap = [
|
|
|
49
54
|
name: 'Simplify',
|
|
50
55
|
component: Simplify,
|
|
51
56
|
excludedFor: [
|
|
52
|
-
'upload'
|
|
57
|
+
'upload',
|
|
58
|
+
'array'
|
|
53
59
|
],
|
|
54
60
|
loadingText: 'Simplifying'
|
|
55
61
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/ui/Compose/hooks/menu/itemsMap.ts"],"sourcesContent":["import type React from 'react'\n\nimport type { ActionMenuItems, BaseItemProps } from '../../../../types.js'\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../../src/ui/Compose/hooks/menu/itemsMap.ts"],"sourcesContent":["import type React from 'react'\n\nimport type { ActionMenuItems, BaseItemProps } from '../../../../types.js'\n\nimport { Compose, Expand, Proofread, Rephrase, Settings, Simplify, Summarize } from './items.js'\nimport { MemoizedTranslateMenu, TranslateMenu } from './TranslateMenu.js'\n\ntype MenuItemsMapType = {\n component: React.FC<BaseItemProps>\n excludedFor?: string[]\n loadingText?: string\n name: ActionMenuItems\n}\n\nexport const menuItemsMap: MenuItemsMapType[] = [\n { name: 'Proofread', component: Proofread, excludedFor: ['upload', 'array'], loadingText: 'Proofreading' },\n { name: 'Rephrase', component: Rephrase, excludedFor: ['upload', 'array'], loadingText: 'Rephrasing' },\n {\n name: 'Translate',\n component: MemoizedTranslateMenu,\n excludedFor: ['upload', 'array'],\n loadingText: 'Translating',\n },\n { name: 'Expand', component: Expand, excludedFor: ['upload', 'text', 'array'], loadingText: 'Expanding' },\n {\n // Turned off - WIP\n name: 'Summarize',\n component: Summarize,\n excludedFor: ['upload', 'text', 'richText', 'array'],\n loadingText: 'Summarizing',\n },\n { name: 'Simplify', component: Simplify, excludedFor: ['upload', 'array'], loadingText: 'Simplifying' },\n { name: 'Compose', component: Compose, loadingText: 'Composing' },\n { name: 'Settings', component: Settings },\n]\n"],"names":["Compose","Expand","Proofread","Rephrase","Settings","Simplify","Summarize","MemoizedTranslateMenu","menuItemsMap","name","component","excludedFor","loadingText"],"mappings":"AAIA,SAASA,OAAO,EAAEC,MAAM,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,SAAS,QAAQ,aAAY;AAChG,SAASC,qBAAqB,QAAuB,qBAAoB;AASzE,OAAO,MAAMC,eAAmC;IAC9C;QAAEC,MAAM;QAAaC,WAAWR;QAAWS,aAAa;YAAC;YAAU;SAAQ;QAAEC,aAAa;IAAe;IACzG;QAAEH,MAAM;QAAYC,WAAWP;QAAUQ,aAAa;YAAC;YAAU;SAAQ;QAAEC,aAAa;IAAa;IACrG;QACEH,MAAM;QACNC,WAAWH;QACXI,aAAa;YAAC;YAAU;SAAQ;QAChCC,aAAa;IACf;IACA;QAAEH,MAAM;QAAUC,WAAWT;QAAQU,aAAa;YAAC;YAAU;YAAQ;SAAQ;QAAEC,aAAa;IAAY;IACxG;QACE,mBAAmB;QACnBH,MAAM;QACNC,WAAWJ;QACXK,aAAa;YAAC;YAAU;YAAQ;YAAY;SAAQ;QACpDC,aAAa;IACf;IACA;QAAEH,MAAM;QAAYC,WAAWL;QAAUM,aAAa;YAAC;YAAU;SAAQ;QAAEC,aAAa;IAAc;IACtG;QAAEH,MAAM;QAAWC,WAAWV;QAASY,aAAa;IAAY;IAChE;QAAEH,MAAM;QAAYC,WAAWN;IAAS;CACzC,CAAA"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { UseMenuEvents, UseMenuOptions } from '../../../../types.js';
|
|
3
3
|
export declare const useMenu: (menuEvents: UseMenuEvents, options: UseMenuOptions) => {
|
|
4
|
-
ActiveComponent: ({ isLoading, stop }: {
|
|
4
|
+
ActiveComponent: ({ isLoading, loadingLabel, stop }: {
|
|
5
5
|
isLoading: boolean;
|
|
6
|
+
loadingLabel?: string;
|
|
6
7
|
stop: () => void;
|
|
7
8
|
}) => React.JSX.Element;
|
|
8
9
|
Menu: ({ isLoading, onClose }: {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import {
|
|
3
|
+
import { useForm } from '@payloadcms/ui';
|
|
4
|
+
import { getSiblingData } from 'payload/shared';
|
|
4
5
|
import React, { useEffect, useMemo, useState } from 'react';
|
|
5
6
|
import { useFieldProps } from '../../../../providers/FieldProvider/useFieldProps.js';
|
|
6
7
|
import { Compose, Proofread, Rephrase } from './items.js';
|
|
@@ -19,14 +20,27 @@ const getActiveComponent = (ac)=>{
|
|
|
19
20
|
}
|
|
20
21
|
};
|
|
21
22
|
export const useMenu = (menuEvents, options)=>{
|
|
22
|
-
const { field: { type: fieldType } = {}, path
|
|
23
|
-
const
|
|
24
|
-
path: pathFromContext ?? ''
|
|
25
|
-
});
|
|
23
|
+
const { field: { type: fieldType } = {}, path } = useFieldProps();
|
|
24
|
+
const { getData } = useForm();
|
|
26
25
|
const [activeComponent, setActiveComponent] = useState('Rephrase');
|
|
27
|
-
|
|
26
|
+
// Check value once on mount or when path/type changes
|
|
28
27
|
useEffect(()=>{
|
|
29
|
-
|
|
28
|
+
let hasValue = false;
|
|
29
|
+
try {
|
|
30
|
+
const data = getData();
|
|
31
|
+
if (path) {
|
|
32
|
+
const val = getSiblingData(data, path);
|
|
33
|
+
hasValue = val !== undefined && val !== null;
|
|
34
|
+
// For richTextFields, we might need a more robust check (e.g. check for root.children.length > 0)
|
|
35
|
+
// But for now, simple truthiness covers most cases or at least defaults safely
|
|
36
|
+
if (fieldType === 'richText' && val && typeof val === 'object' && 'root' in val) {
|
|
37
|
+
// Basic lexical check could go here if needed
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
} catch (e) {
|
|
41
|
+
// ignore
|
|
42
|
+
}
|
|
43
|
+
if (!hasValue) {
|
|
30
44
|
setActiveComponent('Compose');
|
|
31
45
|
return;
|
|
32
46
|
}
|
|
@@ -34,18 +48,15 @@ export const useMenu = (menuEvents, options)=>{
|
|
|
34
48
|
setActiveComponent('Compose');
|
|
35
49
|
return;
|
|
36
50
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
} else {
|
|
40
|
-
setActiveComponent('Rephrase');
|
|
41
|
-
}
|
|
51
|
+
// Default to Rephrase if value exists
|
|
52
|
+
setActiveComponent('Rephrase');
|
|
42
53
|
}, [
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
54
|
+
fieldType,
|
|
55
|
+
getData,
|
|
56
|
+
path
|
|
46
57
|
]);
|
|
47
58
|
const MemoizedActiveComponent = useMemo(()=>{
|
|
48
|
-
return ({ isLoading, stop })=>{
|
|
59
|
+
return ({ isLoading, loadingLabel, stop })=>{
|
|
49
60
|
const ActiveComponent = getActiveComponent(activeComponent);
|
|
50
61
|
const activeItem = menuItemsMap.find((i)=>i.name === activeComponent);
|
|
51
62
|
return /*#__PURE__*/ _jsx(ActiveComponent, {
|
|
@@ -63,7 +74,7 @@ export const useMenu = (menuEvents, options)=>{
|
|
|
63
74
|
}
|
|
64
75
|
},
|
|
65
76
|
title: isLoading ? 'Click to stop' : activeItem.name,
|
|
66
|
-
children: isLoading && activeItem.loadingText
|
|
77
|
+
children: isLoading && (loadingLabel ?? activeItem.loadingText)
|
|
67
78
|
});
|
|
68
79
|
};
|
|
69
80
|
}, [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/ui/Compose/hooks/menu/useMenu.tsx"],"sourcesContent":["'use client'\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../../src/ui/Compose/hooks/menu/useMenu.tsx"],"sourcesContent":["'use client'\n\nimport { useForm } from '@payloadcms/ui'\nimport { getSiblingData } from 'payload/shared'\nimport React, { useEffect, useMemo, useState } from 'react'\n\nimport type { ActionMenuItems, UseMenuEvents, UseMenuOptions } from '../../../../types.js'\n\nimport { useFieldProps } from '../../../../providers/FieldProvider/useFieldProps.js'\nimport { Compose, Proofread, Rephrase } from './items.js'\nimport { menuItemsMap } from './itemsMap.js'\nimport styles from './menu.module.scss'\n\nconst getActiveComponent = (ac: ActionMenuItems) => {\n switch (ac) {\n case 'Compose':\n return Compose\n case 'Proofread':\n return Proofread\n case 'Rephrase':\n return Rephrase\n default:\n return Rephrase\n }\n}\n\nexport const useMenu = (menuEvents: UseMenuEvents, options: UseMenuOptions) => {\n const { field: { type: fieldType } = {}, path } = useFieldProps()\n const { getData } = useForm()\n const [activeComponent, setActiveComponent] = useState<ActionMenuItems>('Rephrase')\n\n // Check value once on mount or when path/type changes\n useEffect(() => {\n let hasValue = false\n\n try {\n const data = getData()\n if (path) {\n const val = getSiblingData(data, path)\n hasValue = val !== undefined && val !== null\n // For richTextFields, we might need a more robust check (e.g. check for root.children.length > 0)\n // But for now, simple truthiness covers most cases or at least defaults safely\n if (fieldType === 'richText' && val && typeof val === 'object' && 'root' in val) {\n // Basic lexical check could go here if needed\n }\n }\n } catch (e) {\n // ignore\n }\n\n if (!hasValue) {\n setActiveComponent('Compose')\n return\n }\n\n if (menuItemsMap.some((i) => i.excludedFor?.includes(fieldType ?? ''))) {\n setActiveComponent('Compose')\n return\n }\n\n // Default to Rephrase if value exists\n setActiveComponent('Rephrase')\n }, [fieldType, getData, path])\n\n const MemoizedActiveComponent = useMemo(() => {\n return ({ isLoading, loadingLabel, stop }: { isLoading: boolean; loadingLabel?: string; stop: () => void }) => {\n const ActiveComponent = getActiveComponent(activeComponent)\n const activeItem = menuItemsMap.find((i) => i.name === activeComponent)!\n return (\n <ActiveComponent\n hideIcon\n onClick={(data: unknown) => {\n if (!isLoading) {\n const trigger = menuEvents[`on${activeComponent}`]\n if (typeof trigger === 'function') {\n trigger(data)\n } else {\n console.error('No trigger found for', activeComponent)\n }\n } else {\n stop()\n }\n }}\n title={isLoading ? 'Click to stop' : activeItem.name}\n >\n {isLoading && (loadingLabel ?? activeItem.loadingText)}\n </ActiveComponent>\n )\n }\n }, [activeComponent, menuEvents])\n\n const filteredMenuItems = useMemo(\n () =>\n menuItemsMap.filter((i) => {\n if (i.name === 'Settings' && !options.isConfigAllowed) {\n return false\n } // Disable settings if a user role is not permitted\n return i.name !== activeComponent && !i.excludedFor?.includes(fieldType ?? '')\n }),\n [activeComponent, fieldType, options.isConfigAllowed],\n )\n\n const MemoizedMenu = useMemo(() => {\n return ({ isLoading, onClose }: { isLoading: boolean; onClose: () => void }) => (\n <div className={styles.menu}>\n {filteredMenuItems.map((i) => {\n const Action = i.component\n return (\n <Action\n disabled={isLoading}\n key={i.name}\n onClick={(data: unknown) => {\n if (i.name !== 'Settings') {\n setActiveComponent(i.name)\n }\n\n menuEvents[`on${i.name}`]?.(data)\n onClose()\n }}\n >\n {isLoading && i.loadingText}\n </Action>\n )\n })}\n </div>\n )\n }, [filteredMenuItems, menuEvents])\n\n return {\n ActiveComponent: MemoizedActiveComponent,\n Menu: MemoizedMenu,\n }\n}\n\n"],"names":["useForm","getSiblingData","React","useEffect","useMemo","useState","useFieldProps","Compose","Proofread","Rephrase","menuItemsMap","styles","getActiveComponent","ac","useMenu","menuEvents","options","field","type","fieldType","path","getData","activeComponent","setActiveComponent","hasValue","data","val","undefined","e","some","i","excludedFor","includes","MemoizedActiveComponent","isLoading","loadingLabel","stop","ActiveComponent","activeItem","find","name","hideIcon","onClick","trigger","console","error","title","loadingText","filteredMenuItems","filter","isConfigAllowed","MemoizedMenu","onClose","div","className","menu","map","Action","component","disabled","Menu"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import {
|
|
2
|
+
import { useForm } from '@payloadcms/ui';
|
|
3
|
+
import { getSiblingData } from 'payload/shared';
|
|
3
4
|
import React, { useEffect, useMemo, useState } from 'react';
|
|
4
5
|
import { useFieldProps } from '../../../../providers/FieldProvider/useFieldProps.js';
|
|
5
6
|
import { Compose, Proofread, Rephrase } from './items.js';
|
|
@@ -18,12 +19,28 @@ const getActiveComponent = (ac) => {
|
|
|
18
19
|
}
|
|
19
20
|
};
|
|
20
21
|
export const useMenu = (menuEvents, options) => {
|
|
21
|
-
const { field: { type: fieldType } = {}, path
|
|
22
|
-
const
|
|
22
|
+
const { field: { type: fieldType } = {}, path } = useFieldProps();
|
|
23
|
+
const { getData } = useForm();
|
|
23
24
|
const [activeComponent, setActiveComponent] = useState('Rephrase');
|
|
24
|
-
|
|
25
|
+
// Check value once on mount or when path/type changes
|
|
25
26
|
useEffect(() => {
|
|
26
|
-
|
|
27
|
+
let hasValue = false;
|
|
28
|
+
try {
|
|
29
|
+
const data = getData();
|
|
30
|
+
if (path) {
|
|
31
|
+
const val = getSiblingData(data, path);
|
|
32
|
+
hasValue = val !== undefined && val !== null;
|
|
33
|
+
// For richTextFields, we might need a more robust check (e.g. check for root.children.length > 0)
|
|
34
|
+
// But for now, simple truthiness covers most cases or at least defaults safely
|
|
35
|
+
if (fieldType === 'richText' && val && typeof val === 'object' && 'root' in val) {
|
|
36
|
+
// Basic lexical check could go here if needed
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
// ignore
|
|
42
|
+
}
|
|
43
|
+
if (!hasValue) {
|
|
27
44
|
setActiveComponent('Compose');
|
|
28
45
|
return;
|
|
29
46
|
}
|
|
@@ -31,15 +48,11 @@ export const useMenu = (menuEvents, options) => {
|
|
|
31
48
|
setActiveComponent('Compose');
|
|
32
49
|
return;
|
|
33
50
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
else {
|
|
38
|
-
setActiveComponent('Rephrase');
|
|
39
|
-
}
|
|
40
|
-
}, [initialValue, value, fieldType]);
|
|
51
|
+
// Default to Rephrase if value exists
|
|
52
|
+
setActiveComponent('Rephrase');
|
|
53
|
+
}, [fieldType, getData, path]);
|
|
41
54
|
const MemoizedActiveComponent = useMemo(() => {
|
|
42
|
-
return ({ isLoading, stop }) => {
|
|
55
|
+
return ({ isLoading, loadingLabel, stop }) => {
|
|
43
56
|
const ActiveComponent = getActiveComponent(activeComponent);
|
|
44
57
|
const activeItem = menuItemsMap.find((i) => i.name === activeComponent);
|
|
45
58
|
return (<ActiveComponent hideIcon onClick={(data) => {
|
|
@@ -56,7 +69,7 @@ export const useMenu = (menuEvents, options) => {
|
|
|
56
69
|
stop();
|
|
57
70
|
}
|
|
58
71
|
}} title={isLoading ? 'Click to stop' : activeItem.name}>
|
|
59
|
-
{isLoading && activeItem.loadingText}
|
|
72
|
+
{isLoading && (loadingLabel ?? activeItem.loadingText)}
|
|
60
73
|
</ActiveComponent>);
|
|
61
74
|
};
|
|
62
75
|
}, [activeComponent, menuEvents]);
|