@sqaitech/visualizer 0.30.10
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 +21 -0
- package/README.md +9 -0
- package/dist/es/component/blackboard/index.css +33 -0
- package/dist/es/component/blackboard/index.mjs +278 -0
- package/dist/es/component/config-selector/index.mjs +104 -0
- package/dist/es/component/context-preview/index.mjs +38 -0
- package/dist/es/component/env-config/index.mjs +112 -0
- package/dist/es/component/env-config-reminder/index.css +22 -0
- package/dist/es/component/env-config-reminder/index.mjs +28 -0
- package/dist/es/component/form-field/index.mjs +163 -0
- package/dist/es/component/history-selector/index.css +135 -0
- package/dist/es/component/history-selector/index.mjs +170 -0
- package/dist/es/component/index.mjs +1 -0
- package/dist/es/component/logo/index.css +13 -0
- package/dist/es/component/logo/index.mjs +20 -0
- package/dist/es/component/misc/index.mjs +94 -0
- package/dist/es/component/nav-actions/index.mjs +32 -0
- package/dist/es/component/nav-actions/style.css +35 -0
- package/dist/es/component/player/index.css +185 -0
- package/dist/es/component/player/index.mjs +856 -0
- package/dist/es/component/playground/index.css +431 -0
- package/dist/es/component/playground/index.mjs +8 -0
- package/dist/es/component/playground/playground-demo-ui-context.json +290 -0
- package/dist/es/component/playground-result/index.css +34 -0
- package/dist/es/component/playground-result/index.mjs +62 -0
- package/dist/es/component/prompt-input/index.css +391 -0
- package/dist/es/component/prompt-input/index.mjs +730 -0
- package/dist/es/component/service-mode-control/index.mjs +105 -0
- package/dist/es/component/shiny-text/index.css +75 -0
- package/dist/es/component/shiny-text/index.mjs +15 -0
- package/dist/es/component/universal-playground/index.css +341 -0
- package/dist/es/component/universal-playground/index.mjs +302 -0
- package/dist/es/component/universal-playground/providers/context-provider.mjs +52 -0
- package/dist/es/component/universal-playground/providers/indexeddb-storage-provider.mjs +207 -0
- package/dist/es/component/universal-playground/providers/storage-provider.mjs +210 -0
- package/dist/es/hooks/usePlaygroundExecution.mjs +180 -0
- package/dist/es/hooks/usePlaygroundState.mjs +203 -0
- package/dist/es/hooks/useSafeOverrideAIConfig.mjs +24 -0
- package/dist/es/hooks/useServerValid.mjs +30 -0
- package/dist/es/icons/avatar.mjs +28 -0
- package/dist/es/icons/close.mjs +19 -0
- package/dist/es/icons/global-perspective.mjs +16 -0
- package/dist/es/icons/history.mjs +30 -0
- package/dist/es/icons/magnifying-glass.mjs +39 -0
- package/dist/es/icons/player-setting.mjs +26 -0
- package/dist/es/icons/setting.mjs +20 -0
- package/dist/es/icons/show-marker.mjs +16 -0
- package/dist/es/index.mjs +25 -0
- package/dist/es/store/history.mjs +89 -0
- package/dist/es/store/store.mjs +186 -0
- package/dist/es/types.mjs +70 -0
- package/dist/es/utils/color.mjs +35 -0
- package/dist/es/utils/constants.mjs +99 -0
- package/dist/es/utils/index.mjs +10 -0
- package/dist/es/utils/pixi-loader.mjs +16 -0
- package/dist/es/utils/playground-utils.mjs +67 -0
- package/dist/es/utils/replay-scripts.mjs +312 -0
- package/dist/lib/component/blackboard/index.css +33 -0
- package/dist/lib/component/blackboard/index.js +321 -0
- package/dist/lib/component/config-selector/index.js +148 -0
- package/dist/lib/component/context-preview/index.js +83 -0
- package/dist/lib/component/env-config/index.js +146 -0
- package/dist/lib/component/env-config-reminder/index.css +22 -0
- package/dist/lib/component/env-config-reminder/index.js +62 -0
- package/dist/lib/component/form-field/index.js +209 -0
- package/dist/lib/component/history-selector/index.css +135 -0
- package/dist/lib/component/history-selector/index.js +216 -0
- package/dist/lib/component/index.js +60 -0
- package/dist/lib/component/logo/index.css +13 -0
- package/dist/lib/component/logo/index.js +57 -0
- package/dist/lib/component/misc/index.js +150 -0
- package/dist/lib/component/nav-actions/index.js +66 -0
- package/dist/lib/component/nav-actions/style.css +35 -0
- package/dist/lib/component/player/index.css +185 -0
- package/dist/lib/component/player/index.js +902 -0
- package/dist/lib/component/playground/index.css +431 -0
- package/dist/lib/component/playground/index.js +113 -0
- package/dist/lib/component/playground/playground-demo-ui-context.json +290 -0
- package/dist/lib/component/playground-result/index.css +34 -0
- package/dist/lib/component/playground-result/index.js +106 -0
- package/dist/lib/component/prompt-input/index.css +391 -0
- package/dist/lib/component/prompt-input/index.js +774 -0
- package/dist/lib/component/service-mode-control/index.js +139 -0
- package/dist/lib/component/shiny-text/index.css +75 -0
- package/dist/lib/component/shiny-text/index.js +49 -0
- package/dist/lib/component/universal-playground/index.css +341 -0
- package/dist/lib/component/universal-playground/index.js +350 -0
- package/dist/lib/component/universal-playground/providers/context-provider.js +95 -0
- package/dist/lib/component/universal-playground/providers/indexeddb-storage-provider.js +247 -0
- package/dist/lib/component/universal-playground/providers/storage-provider.js +268 -0
- package/dist/lib/hooks/usePlaygroundExecution.js +214 -0
- package/dist/lib/hooks/usePlaygroundState.js +237 -0
- package/dist/lib/hooks/useSafeOverrideAIConfig.js +61 -0
- package/dist/lib/hooks/useServerValid.js +64 -0
- package/dist/lib/icons/avatar.js +62 -0
- package/dist/lib/icons/close.js +53 -0
- package/dist/lib/icons/global-perspective.js +50 -0
- package/dist/lib/icons/history.js +64 -0
- package/dist/lib/icons/magnifying-glass.js +73 -0
- package/dist/lib/icons/player-setting.js +60 -0
- package/dist/lib/icons/setting.js +54 -0
- package/dist/lib/icons/show-marker.js +50 -0
- package/dist/lib/index.js +187 -0
- package/dist/lib/store/history.js +96 -0
- package/dist/lib/store/store.js +196 -0
- package/dist/lib/types.js +116 -0
- package/dist/lib/utils/color.js +75 -0
- package/dist/lib/utils/constants.js +154 -0
- package/dist/lib/utils/index.js +63 -0
- package/dist/lib/utils/pixi-loader.js +56 -0
- package/dist/lib/utils/playground-utils.js +110 -0
- package/dist/lib/utils/replay-scripts.js +355 -0
- package/dist/types/component/blackboard/index.d.ts +15 -0
- package/dist/types/component/config-selector/index.d.ts +9 -0
- package/dist/types/component/context-preview/index.d.ts +9 -0
- package/dist/types/component/env-config/index.d.ts +6 -0
- package/dist/types/component/env-config-reminder/index.d.ts +6 -0
- package/dist/types/component/form-field/index.d.ts +17 -0
- package/dist/types/component/history-selector/index.d.ts +10 -0
- package/dist/types/component/index.d.ts +1 -0
- package/dist/types/component/logo/index.d.ts +5 -0
- package/dist/types/component/misc/index.d.ts +6 -0
- package/dist/types/component/nav-actions/index.d.ts +10 -0
- package/dist/types/component/player/index.d.ts +13 -0
- package/dist/types/component/playground/index.d.ts +7 -0
- package/dist/types/component/playground-result/index.d.ts +20 -0
- package/dist/types/component/prompt-input/index.d.ts +22 -0
- package/dist/types/component/service-mode-control/index.d.ts +6 -0
- package/dist/types/component/shiny-text/index.d.ts +12 -0
- package/dist/types/component/universal-playground/index.d.ts +4 -0
- package/dist/types/component/universal-playground/providers/context-provider.d.ts +37 -0
- package/dist/types/component/universal-playground/providers/indexeddb-storage-provider.d.ts +71 -0
- package/dist/types/component/universal-playground/providers/storage-provider.d.ts +58 -0
- package/dist/types/hooks/usePlaygroundExecution.d.ts +10 -0
- package/dist/types/hooks/usePlaygroundState.d.ts +26 -0
- package/dist/types/hooks/useSafeOverrideAIConfig.d.ts +16 -0
- package/dist/types/hooks/useServerValid.d.ts +1 -0
- package/dist/types/index.d.ts +27 -0
- package/dist/types/store/history.d.ts +16 -0
- package/dist/types/store/store.d.ts +36 -0
- package/dist/types/types.d.ts +161 -0
- package/dist/types/utils/color.d.ts +4 -0
- package/dist/types/utils/constants.d.ts +74 -0
- package/dist/types/utils/index.d.ts +4 -0
- package/dist/types/utils/pixi-loader.d.ts +5 -0
- package/dist/types/utils/playground-utils.d.ts +6 -0
- package/dist/types/utils/replay-scripts.d.ts +34 -0
- package/package.json +85 -0
|
@@ -0,0 +1,730 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { BorderOutlined, DownOutlined, SendOutlined } from "@ant-design/icons";
|
|
3
|
+
import "./index.css";
|
|
4
|
+
import { Button, Dropdown, Form, Input, Radio, Tooltip } from "antd";
|
|
5
|
+
import react, { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
6
|
+
import { useHistoryStore } from "../../store/history.mjs";
|
|
7
|
+
import { extractDefaultValue, isLocateField, isZodObjectSchema, unwrapZodType } from "../../types.mjs";
|
|
8
|
+
import { apiMetadata, defaultMainButtons } from "../../utils/constants.mjs";
|
|
9
|
+
import { actionNameForType, getPlaceholderForType, isRunButtonEnabled as playground_utils_mjs_isRunButtonEnabled } from "../../utils/playground-utils.mjs";
|
|
10
|
+
import { ConfigSelector } from "../config-selector/index.mjs";
|
|
11
|
+
import { BooleanField, EnumField, LocateField, NumberField, TextField } from "../form-field/index.mjs";
|
|
12
|
+
import { HistorySelector } from "../history-selector/index.mjs";
|
|
13
|
+
const { TextArea } = Input;
|
|
14
|
+
const PromptInput = (param)=>{
|
|
15
|
+
let { runButtonEnabled, form, serviceMode, selectedType, dryMode, stoppable, loading, onRun, onStop, clearPromptAfterRun = true, actionSpace, hideDomAndScreenshotOptions = false } = param;
|
|
16
|
+
const [hoveringSettings, setHoveringSettings] = useState(false);
|
|
17
|
+
const [promptValue, setPromptValue] = useState('');
|
|
18
|
+
const placeholder = getPlaceholderForType(selectedType);
|
|
19
|
+
const textAreaRef = useRef(null);
|
|
20
|
+
const modeRadioGroupRef = useRef(null);
|
|
21
|
+
const params = Form.useWatch('params', form);
|
|
22
|
+
const lastHistoryRef = useRef(null);
|
|
23
|
+
const history = useHistoryStore((state)=>state.history);
|
|
24
|
+
const lastSelectedType = useHistoryStore((state)=>state.lastSelectedType);
|
|
25
|
+
const addHistory = useHistoryStore((state)=>state.addHistory);
|
|
26
|
+
const setLastSelectedType = useHistoryStore((state)=>state.setLastSelectedType);
|
|
27
|
+
const historyForSelectedType = useMemo(()=>history[selectedType] || [], [
|
|
28
|
+
history,
|
|
29
|
+
selectedType
|
|
30
|
+
]);
|
|
31
|
+
const needsStructuredParams = useMemo(()=>{
|
|
32
|
+
if (actionSpace) {
|
|
33
|
+
const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
|
|
34
|
+
if (!(null == action ? void 0 : action.paramSchema)) return false;
|
|
35
|
+
if (isZodObjectSchema(action.paramSchema)) {
|
|
36
|
+
const schema = action.paramSchema;
|
|
37
|
+
const shape = schema.shape || {};
|
|
38
|
+
const shapeKeys = Object.keys(shape);
|
|
39
|
+
return shapeKeys.length > 0;
|
|
40
|
+
}
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
}, [
|
|
45
|
+
selectedType,
|
|
46
|
+
actionSpace
|
|
47
|
+
]);
|
|
48
|
+
const needsAnyInput = useMemo(()=>{
|
|
49
|
+
if (actionSpace && actionSpace.length > 0) {
|
|
50
|
+
const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
|
|
51
|
+
if (action) {
|
|
52
|
+
if (action.paramSchema && isZodObjectSchema(action.paramSchema)) {
|
|
53
|
+
const schema = action.paramSchema;
|
|
54
|
+
const shape = schema.shape || {};
|
|
55
|
+
const hasRequiredFields = Object.keys(shape).some((key)=>{
|
|
56
|
+
const field = shape[key];
|
|
57
|
+
const { isOptional } = unwrapZodType(field);
|
|
58
|
+
return !isOptional;
|
|
59
|
+
});
|
|
60
|
+
return hasRequiredFields;
|
|
61
|
+
}
|
|
62
|
+
return !!action.paramSchema;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return true;
|
|
66
|
+
}, [
|
|
67
|
+
selectedType,
|
|
68
|
+
actionSpace
|
|
69
|
+
]);
|
|
70
|
+
const showDataExtractionOptions = useMemo(()=>{
|
|
71
|
+
const dataExtractionMethods = [
|
|
72
|
+
'aiQuery',
|
|
73
|
+
'aiBoolean',
|
|
74
|
+
'aiNumber',
|
|
75
|
+
'aiString',
|
|
76
|
+
'aiAsk',
|
|
77
|
+
'aiAssert'
|
|
78
|
+
];
|
|
79
|
+
return dataExtractionMethods.includes(selectedType);
|
|
80
|
+
}, [
|
|
81
|
+
selectedType
|
|
82
|
+
]);
|
|
83
|
+
const showDeepThinkOption = useMemo(()=>{
|
|
84
|
+
if ('aiLocate' === selectedType) return true;
|
|
85
|
+
if (actionSpace) {
|
|
86
|
+
const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
|
|
87
|
+
if ((null == action ? void 0 : action.paramSchema) && isZodObjectSchema(action.paramSchema)) {
|
|
88
|
+
const schema = action.paramSchema;
|
|
89
|
+
const shape = schema.shape || {};
|
|
90
|
+
const hasLocateField = Object.keys(shape).some((key)=>{
|
|
91
|
+
const field = shape[key];
|
|
92
|
+
const { actualField } = unwrapZodType(field);
|
|
93
|
+
return isLocateField(actualField);
|
|
94
|
+
});
|
|
95
|
+
return hasLocateField;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return false;
|
|
99
|
+
}, [
|
|
100
|
+
selectedType,
|
|
101
|
+
actionSpace
|
|
102
|
+
]);
|
|
103
|
+
const hasConfigOptions = useMemo(()=>{
|
|
104
|
+
const hasTracking = 'In-Browser-Extension' === serviceMode;
|
|
105
|
+
const hasDeepThink = showDeepThinkOption;
|
|
106
|
+
const hasDataExtraction = showDataExtractionOptions && !hideDomAndScreenshotOptions;
|
|
107
|
+
return hasTracking || hasDeepThink || hasDataExtraction;
|
|
108
|
+
}, [
|
|
109
|
+
serviceMode,
|
|
110
|
+
showDeepThinkOption,
|
|
111
|
+
showDataExtractionOptions,
|
|
112
|
+
hideDomAndScreenshotOptions
|
|
113
|
+
]);
|
|
114
|
+
const availableDropdownMethods = useMemo(()=>{
|
|
115
|
+
const metadataMethods = Object.keys(apiMetadata);
|
|
116
|
+
if (!actionSpace || 0 === actionSpace.length) return metadataMethods;
|
|
117
|
+
const availableMethods = actionSpace.map((action)=>action.interfaceAlias || action.name);
|
|
118
|
+
const finalMethods = new Set();
|
|
119
|
+
metadataMethods.forEach((method)=>{
|
|
120
|
+
const methodInfo = apiMetadata[method];
|
|
121
|
+
if ((null == methodInfo ? void 0 : methodInfo.group) === 'extraction' || (null == methodInfo ? void 0 : methodInfo.group) === 'validation') finalMethods.add(method);
|
|
122
|
+
else if (availableMethods.includes(method)) finalMethods.add(method);
|
|
123
|
+
});
|
|
124
|
+
availableMethods.forEach((method)=>{
|
|
125
|
+
finalMethods.add(method);
|
|
126
|
+
});
|
|
127
|
+
return Array.from(finalMethods);
|
|
128
|
+
}, [
|
|
129
|
+
actionSpace
|
|
130
|
+
]);
|
|
131
|
+
const getDefaultParams = useCallback(()=>{
|
|
132
|
+
if (!needsStructuredParams || !actionSpace) return {};
|
|
133
|
+
const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
|
|
134
|
+
if ((null == action ? void 0 : action.paramSchema) && isZodObjectSchema(action.paramSchema)) {
|
|
135
|
+
const defaultParams = {};
|
|
136
|
+
const schema = action.paramSchema;
|
|
137
|
+
const shape = schema.shape || {};
|
|
138
|
+
Object.keys(shape).forEach((key)=>{
|
|
139
|
+
const field = shape[key];
|
|
140
|
+
const defaultValue = extractDefaultValue(field);
|
|
141
|
+
if (void 0 !== defaultValue) defaultParams[key] = defaultValue;
|
|
142
|
+
});
|
|
143
|
+
return defaultParams;
|
|
144
|
+
}
|
|
145
|
+
return {};
|
|
146
|
+
}, [
|
|
147
|
+
selectedType,
|
|
148
|
+
needsStructuredParams,
|
|
149
|
+
actionSpace
|
|
150
|
+
]);
|
|
151
|
+
useEffect(()=>{
|
|
152
|
+
if (!form.getFieldValue('type') && lastSelectedType) form.setFieldValue('type', lastSelectedType);
|
|
153
|
+
}, [
|
|
154
|
+
form,
|
|
155
|
+
lastSelectedType
|
|
156
|
+
]);
|
|
157
|
+
useEffect(()=>{
|
|
158
|
+
if (selectedType && selectedType !== lastSelectedType) setLastSelectedType(selectedType);
|
|
159
|
+
}, [
|
|
160
|
+
selectedType,
|
|
161
|
+
lastSelectedType,
|
|
162
|
+
setLastSelectedType
|
|
163
|
+
]);
|
|
164
|
+
const scrollToSelectedItem = useCallback(()=>{
|
|
165
|
+
const container = modeRadioGroupRef.current;
|
|
166
|
+
if (!container) return;
|
|
167
|
+
let targetElement = null;
|
|
168
|
+
const selectedRadioButton = container.querySelector('.ant-radio-button-wrapper-checked');
|
|
169
|
+
const dropdownButton = container.querySelector('.more-apis-button.selected-from-dropdown');
|
|
170
|
+
if (selectedRadioButton) targetElement = selectedRadioButton;
|
|
171
|
+
else if (dropdownButton) targetElement = dropdownButton;
|
|
172
|
+
if (targetElement) {
|
|
173
|
+
const containerRect = container.getBoundingClientRect();
|
|
174
|
+
const targetRect = targetElement.getBoundingClientRect();
|
|
175
|
+
const targetLeft = targetRect.left - containerRect.left + container.scrollLeft;
|
|
176
|
+
const targetWidth = targetRect.width;
|
|
177
|
+
const containerWidth = containerRect.width;
|
|
178
|
+
const optimalScrollLeft = targetLeft - (containerWidth - targetWidth) / 2;
|
|
179
|
+
container.scrollTo({
|
|
180
|
+
left: Math.max(0, optimalScrollLeft),
|
|
181
|
+
behavior: 'smooth'
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}, []);
|
|
185
|
+
useEffect(()=>{
|
|
186
|
+
const lastHistory = historyForSelectedType[0];
|
|
187
|
+
if (lastHistory && lastHistoryRef.current && lastHistory.timestamp === lastHistoryRef.current.timestamp) return;
|
|
188
|
+
if (lastHistory) {
|
|
189
|
+
form.setFieldsValue({
|
|
190
|
+
type: lastHistory.type,
|
|
191
|
+
prompt: lastHistory.prompt || '',
|
|
192
|
+
params: lastHistory.params
|
|
193
|
+
});
|
|
194
|
+
setPromptValue(lastHistory.prompt || '');
|
|
195
|
+
lastHistoryRef.current = lastHistory;
|
|
196
|
+
} else {
|
|
197
|
+
const defaultParams = getDefaultParams();
|
|
198
|
+
form.setFieldsValue({
|
|
199
|
+
prompt: '',
|
|
200
|
+
params: defaultParams
|
|
201
|
+
});
|
|
202
|
+
setPromptValue('');
|
|
203
|
+
lastHistoryRef.current = null;
|
|
204
|
+
}
|
|
205
|
+
}, [
|
|
206
|
+
selectedType,
|
|
207
|
+
historyForSelectedType,
|
|
208
|
+
form,
|
|
209
|
+
getDefaultParams
|
|
210
|
+
]);
|
|
211
|
+
useEffect(()=>{
|
|
212
|
+
const timeoutId = setTimeout(()=>{
|
|
213
|
+
scrollToSelectedItem();
|
|
214
|
+
}, 100);
|
|
215
|
+
return ()=>clearTimeout(timeoutId);
|
|
216
|
+
}, [
|
|
217
|
+
selectedType,
|
|
218
|
+
scrollToSelectedItem
|
|
219
|
+
]);
|
|
220
|
+
const formPromptValue = Form.useWatch('prompt', form);
|
|
221
|
+
useEffect(()=>{
|
|
222
|
+
if (formPromptValue !== promptValue) setPromptValue(formPromptValue || '');
|
|
223
|
+
}, [
|
|
224
|
+
formPromptValue,
|
|
225
|
+
promptValue
|
|
226
|
+
]);
|
|
227
|
+
const handleSelectHistory = useCallback((historyItem)=>{
|
|
228
|
+
form.setFieldsValue({
|
|
229
|
+
prompt: historyItem.prompt,
|
|
230
|
+
type: historyItem.type,
|
|
231
|
+
params: historyItem.params
|
|
232
|
+
});
|
|
233
|
+
setPromptValue(historyItem.prompt);
|
|
234
|
+
}, [
|
|
235
|
+
form
|
|
236
|
+
]);
|
|
237
|
+
const handlePromptChange = useCallback((e)=>{
|
|
238
|
+
const value = e.target.value;
|
|
239
|
+
setPromptValue(value);
|
|
240
|
+
}, []);
|
|
241
|
+
const hasSingleStructuredParam = useMemo(()=>{
|
|
242
|
+
if (!needsStructuredParams || !actionSpace) return false;
|
|
243
|
+
const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
|
|
244
|
+
if ((null == action ? void 0 : action.paramSchema) && isZodObjectSchema(action.paramSchema)) {
|
|
245
|
+
const schema = action.paramSchema;
|
|
246
|
+
const shape = schema.shape || {};
|
|
247
|
+
return 1 === Object.keys(shape).length;
|
|
248
|
+
}
|
|
249
|
+
return false;
|
|
250
|
+
}, [
|
|
251
|
+
selectedType,
|
|
252
|
+
needsStructuredParams,
|
|
253
|
+
actionSpace
|
|
254
|
+
]);
|
|
255
|
+
const isRunButtonEnabled = useMemo(()=>playground_utils_mjs_isRunButtonEnabled(runButtonEnabled, !!needsStructuredParams, params, actionSpace, selectedType, promptValue), [
|
|
256
|
+
runButtonEnabled,
|
|
257
|
+
needsStructuredParams,
|
|
258
|
+
selectedType,
|
|
259
|
+
actionSpace,
|
|
260
|
+
promptValue,
|
|
261
|
+
params
|
|
262
|
+
]);
|
|
263
|
+
const handleRunWithHistory = useCallback(()=>{
|
|
264
|
+
const values = form.getFieldsValue();
|
|
265
|
+
let historyPrompt = '';
|
|
266
|
+
if (needsStructuredParams && values.params && actionSpace) {
|
|
267
|
+
const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
|
|
268
|
+
if ((null == action ? void 0 : action.paramSchema) && isZodObjectSchema(action.paramSchema)) {
|
|
269
|
+
let locateValue = '';
|
|
270
|
+
const otherValues = [];
|
|
271
|
+
const schema = action.paramSchema;
|
|
272
|
+
const shape = schema.shape || {};
|
|
273
|
+
Object.keys(shape).forEach((key)=>{
|
|
274
|
+
var _values_params;
|
|
275
|
+
const paramValue = null == (_values_params = values.params) ? void 0 : _values_params[key];
|
|
276
|
+
if (null != paramValue && '' !== paramValue) {
|
|
277
|
+
const field = shape[key];
|
|
278
|
+
const { actualField } = unwrapZodType(field);
|
|
279
|
+
if (isLocateField(actualField)) locateValue = String(paramValue);
|
|
280
|
+
else if ('distance' === key) otherValues.push(`${paramValue}`);
|
|
281
|
+
else otherValues.push(String(paramValue));
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
const mainPart = otherValues.join(' ');
|
|
285
|
+
historyPrompt = locateValue ? `${locateValue} - ${mainPart}` : mainPart;
|
|
286
|
+
} else historyPrompt = values.prompt || '';
|
|
287
|
+
} else historyPrompt = values.prompt || '';
|
|
288
|
+
const newHistoryItem = {
|
|
289
|
+
type: values.type,
|
|
290
|
+
prompt: historyPrompt,
|
|
291
|
+
params: values.params,
|
|
292
|
+
timestamp: Date.now()
|
|
293
|
+
};
|
|
294
|
+
addHistory(newHistoryItem);
|
|
295
|
+
onRun();
|
|
296
|
+
if (clearPromptAfterRun) {
|
|
297
|
+
lastHistoryRef.current = newHistoryItem;
|
|
298
|
+
setPromptValue('');
|
|
299
|
+
if (needsStructuredParams) {
|
|
300
|
+
const defaultParams = getDefaultParams();
|
|
301
|
+
form.setFieldValue('params', defaultParams);
|
|
302
|
+
} else form.setFieldValue('prompt', '');
|
|
303
|
+
}
|
|
304
|
+
}, [
|
|
305
|
+
form,
|
|
306
|
+
addHistory,
|
|
307
|
+
onRun,
|
|
308
|
+
needsStructuredParams,
|
|
309
|
+
selectedType,
|
|
310
|
+
clearPromptAfterRun,
|
|
311
|
+
actionSpace,
|
|
312
|
+
getDefaultParams
|
|
313
|
+
]);
|
|
314
|
+
const handleKeyDown = useCallback((e)=>{
|
|
315
|
+
if ('Enter' === e.key && e.metaKey && isRunButtonEnabled) {
|
|
316
|
+
handleRunWithHistory();
|
|
317
|
+
e.preventDefault();
|
|
318
|
+
e.stopPropagation();
|
|
319
|
+
} else if ('Enter' === e.key) setTimeout(()=>{
|
|
320
|
+
if (textAreaRef.current) {
|
|
321
|
+
var _textAreaRef_current_resizableTextArea;
|
|
322
|
+
const textarea = null == (_textAreaRef_current_resizableTextArea = textAreaRef.current.resizableTextArea) ? void 0 : _textAreaRef_current_resizableTextArea.textArea;
|
|
323
|
+
if (textarea) {
|
|
324
|
+
const selectionStart = textarea.selectionStart;
|
|
325
|
+
const value = textarea.value;
|
|
326
|
+
const lastNewlineIndex = value.lastIndexOf('\n');
|
|
327
|
+
const isAtLastLine = -1 === lastNewlineIndex || selectionStart > lastNewlineIndex;
|
|
328
|
+
if (isAtLastLine) textarea.scrollTop = textarea.scrollHeight;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}, 0);
|
|
332
|
+
}, [
|
|
333
|
+
handleRunWithHistory,
|
|
334
|
+
isRunButtonEnabled
|
|
335
|
+
]);
|
|
336
|
+
const handleStructuredKeyDown = useCallback((e)=>{
|
|
337
|
+
if ('Enter' === e.key && e.metaKey && isRunButtonEnabled) {
|
|
338
|
+
handleRunWithHistory();
|
|
339
|
+
e.preventDefault();
|
|
340
|
+
e.stopPropagation();
|
|
341
|
+
}
|
|
342
|
+
}, [
|
|
343
|
+
handleRunWithHistory,
|
|
344
|
+
isRunButtonEnabled
|
|
345
|
+
]);
|
|
346
|
+
const renderStructuredParams = useCallback(()=>{
|
|
347
|
+
if (!needsStructuredParams) return null;
|
|
348
|
+
if (actionSpace) {
|
|
349
|
+
const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
|
|
350
|
+
if ((null == action ? void 0 : action.paramSchema) && isZodObjectSchema(action.paramSchema)) {
|
|
351
|
+
const schema = action.paramSchema;
|
|
352
|
+
const shape = schema.shape || {};
|
|
353
|
+
const schemaKeys = Object.keys(shape);
|
|
354
|
+
if (1 === schemaKeys.length) {
|
|
355
|
+
const key = schemaKeys[0];
|
|
356
|
+
const field = shape[key];
|
|
357
|
+
const { actualField } = unwrapZodType(field);
|
|
358
|
+
const isLocateFieldFlag = isLocateField(actualField);
|
|
359
|
+
const placeholderText = (()=>{
|
|
360
|
+
var _fieldWithRuntime__def;
|
|
361
|
+
const fieldWithRuntime = actualField;
|
|
362
|
+
if (null == (_fieldWithRuntime__def = fieldWithRuntime._def) ? void 0 : _fieldWithRuntime__def.description) return fieldWithRuntime._def.description;
|
|
363
|
+
if (fieldWithRuntime.description) return fieldWithRuntime.description;
|
|
364
|
+
if (actionSpace) {
|
|
365
|
+
const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
|
|
366
|
+
if ((null == action ? void 0 : action.paramSchema) && 'object' == typeof action.paramSchema && 'shape' in action.paramSchema) {
|
|
367
|
+
var _fieldDef__def;
|
|
368
|
+
const shape = action.paramSchema.shape || {};
|
|
369
|
+
const fieldDef = shape[key];
|
|
370
|
+
if (null == fieldDef ? void 0 : null == (_fieldDef__def = fieldDef._def) ? void 0 : _fieldDef__def.description) return fieldDef._def.description;
|
|
371
|
+
if (null == fieldDef ? void 0 : fieldDef.description) return fieldDef.description;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
if (isLocateFieldFlag) return 'Describe the element you want to interact with';
|
|
375
|
+
if ('keyName' === key) return 'Enter key name or text to type';
|
|
376
|
+
if ('value' === key) return 'Enter text to input';
|
|
377
|
+
return `Enter ${key}`;
|
|
378
|
+
})();
|
|
379
|
+
return /*#__PURE__*/ jsx(Form.Item, {
|
|
380
|
+
name: [
|
|
381
|
+
'params',
|
|
382
|
+
key
|
|
383
|
+
],
|
|
384
|
+
style: {
|
|
385
|
+
margin: 0
|
|
386
|
+
},
|
|
387
|
+
children: /*#__PURE__*/ jsx(Input.TextArea, {
|
|
388
|
+
className: "main-side-console-input-textarea",
|
|
389
|
+
rows: 4,
|
|
390
|
+
placeholder: placeholderText,
|
|
391
|
+
autoFocus: true,
|
|
392
|
+
onKeyDown: handleStructuredKeyDown
|
|
393
|
+
})
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
const fields = [];
|
|
397
|
+
const sortedKeys = schemaKeys.sort((keyA, keyB)=>{
|
|
398
|
+
const fieldSchemaA = shape[keyA];
|
|
399
|
+
const fieldSchemaB = shape[keyB];
|
|
400
|
+
const { isOptional: isOptionalA } = unwrapZodType(fieldSchemaA);
|
|
401
|
+
const { isOptional: isOptionalB } = unwrapZodType(fieldSchemaB);
|
|
402
|
+
if (!isOptionalA && isOptionalB) return -1;
|
|
403
|
+
if (isOptionalA && !isOptionalB) return 1;
|
|
404
|
+
return 0;
|
|
405
|
+
});
|
|
406
|
+
sortedKeys.forEach((key, index)=>{
|
|
407
|
+
var _actualField__def, _actualField__def1, _actualField__def2;
|
|
408
|
+
const fieldSchema = shape[key];
|
|
409
|
+
const { actualField, isOptional } = unwrapZodType(fieldSchema);
|
|
410
|
+
const isLocateFieldFlag = isLocateField(actualField);
|
|
411
|
+
const label = key.charAt(0).toUpperCase() + key.slice(1);
|
|
412
|
+
const isRequired = !isOptional;
|
|
413
|
+
const marginBottom = index === sortedKeys.length - 1 ? 0 : 12;
|
|
414
|
+
const placeholder = (()=>{
|
|
415
|
+
var _fieldWithRuntime__def;
|
|
416
|
+
const fieldWithRuntime = actualField;
|
|
417
|
+
if (null == (_fieldWithRuntime__def = fieldWithRuntime._def) ? void 0 : _fieldWithRuntime__def.description) return fieldWithRuntime._def.description;
|
|
418
|
+
if (fieldWithRuntime.description) return fieldWithRuntime.description;
|
|
419
|
+
if (actionSpace) {
|
|
420
|
+
const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
|
|
421
|
+
if ((null == action ? void 0 : action.paramSchema) && 'object' == typeof action.paramSchema && 'shape' in action.paramSchema) {
|
|
422
|
+
var _fieldDef__def;
|
|
423
|
+
const shape = action.paramSchema.shape || {};
|
|
424
|
+
const fieldDef = shape[key];
|
|
425
|
+
if (null == fieldDef ? void 0 : null == (_fieldDef__def = fieldDef._def) ? void 0 : _fieldDef__def.description) return fieldDef._def.description;
|
|
426
|
+
if (null == fieldDef ? void 0 : fieldDef.description) return fieldDef.description;
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
if (isLocateFieldFlag) return 'Describe the element you want to interact with';
|
|
430
|
+
})();
|
|
431
|
+
const fieldProps = {
|
|
432
|
+
name: key,
|
|
433
|
+
label,
|
|
434
|
+
fieldSchema: actualField,
|
|
435
|
+
isRequired,
|
|
436
|
+
marginBottom,
|
|
437
|
+
placeholder
|
|
438
|
+
};
|
|
439
|
+
if (isLocateFieldFlag) fields.push(/*#__PURE__*/ jsx(LocateField, {
|
|
440
|
+
...fieldProps
|
|
441
|
+
}, key));
|
|
442
|
+
else if ((null == (_actualField__def = actualField._def) ? void 0 : _actualField__def.typeName) === 'ZodEnum') fields.push(/*#__PURE__*/ jsx(EnumField, {
|
|
443
|
+
...fieldProps
|
|
444
|
+
}, key));
|
|
445
|
+
else if ((null == (_actualField__def1 = actualField._def) ? void 0 : _actualField__def1.typeName) === 'ZodNumber') fields.push(/*#__PURE__*/ jsx(NumberField, {
|
|
446
|
+
...fieldProps
|
|
447
|
+
}, key));
|
|
448
|
+
else if ((null == (_actualField__def2 = actualField._def) ? void 0 : _actualField__def2.typeName) === 'ZodBoolean') fields.push(/*#__PURE__*/ jsx(BooleanField, {
|
|
449
|
+
...fieldProps
|
|
450
|
+
}, key));
|
|
451
|
+
else fields.push(/*#__PURE__*/ jsx(TextField, {
|
|
452
|
+
...fieldProps
|
|
453
|
+
}, key));
|
|
454
|
+
});
|
|
455
|
+
if ('aiScroll' === selectedType) {
|
|
456
|
+
const directionField = fields.find((field)=>/*#__PURE__*/ react.isValidElement(field) && 'direction' === field.props.name);
|
|
457
|
+
const distanceField = fields.find((field)=>/*#__PURE__*/ react.isValidElement(field) && 'distance' === field.props.name);
|
|
458
|
+
const otherFields = fields.filter((field)=>/*#__PURE__*/ react.isValidElement(field) && 'direction' !== field.props.name && 'distance' !== field.props.name);
|
|
459
|
+
if (directionField && distanceField) return /*#__PURE__*/ jsxs("div", {
|
|
460
|
+
className: "structured-params",
|
|
461
|
+
children: [
|
|
462
|
+
/*#__PURE__*/ jsxs("div", {
|
|
463
|
+
style: {
|
|
464
|
+
display: 'flex',
|
|
465
|
+
gap: 12,
|
|
466
|
+
marginBottom: 12
|
|
467
|
+
},
|
|
468
|
+
children: [
|
|
469
|
+
directionField,
|
|
470
|
+
distanceField
|
|
471
|
+
]
|
|
472
|
+
}),
|
|
473
|
+
otherFields
|
|
474
|
+
]
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
return /*#__PURE__*/ jsx("div", {
|
|
478
|
+
className: "structured-params",
|
|
479
|
+
children: fields
|
|
480
|
+
});
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
return null;
|
|
484
|
+
}, [
|
|
485
|
+
selectedType,
|
|
486
|
+
needsStructuredParams,
|
|
487
|
+
actionSpace,
|
|
488
|
+
handleStructuredKeyDown
|
|
489
|
+
]);
|
|
490
|
+
const handleMouseEnter = useCallback(()=>{
|
|
491
|
+
setHoveringSettings(true);
|
|
492
|
+
}, []);
|
|
493
|
+
const handleMouseLeave = useCallback(()=>{
|
|
494
|
+
setHoveringSettings(false);
|
|
495
|
+
}, []);
|
|
496
|
+
const renderActionButton = useCallback(()=>{
|
|
497
|
+
const runButton = (text)=>/*#__PURE__*/ jsx(Button, {
|
|
498
|
+
type: "primary",
|
|
499
|
+
icon: /*#__PURE__*/ jsx(SendOutlined, {}),
|
|
500
|
+
style: {
|
|
501
|
+
borderRadius: 20,
|
|
502
|
+
zIndex: 999
|
|
503
|
+
},
|
|
504
|
+
onClick: handleRunWithHistory,
|
|
505
|
+
disabled: !isRunButtonEnabled,
|
|
506
|
+
loading: loading,
|
|
507
|
+
children: text
|
|
508
|
+
});
|
|
509
|
+
if (dryMode) return 'aiAction' === selectedType ? /*#__PURE__*/ jsx(Tooltip, {
|
|
510
|
+
title: "Start executing until some interaction actions need to be performed. You can see the process of planning and locating.",
|
|
511
|
+
children: runButton('Dry Run')
|
|
512
|
+
}) : runButton('Run');
|
|
513
|
+
if (stoppable) return /*#__PURE__*/ jsx(Button, {
|
|
514
|
+
icon: /*#__PURE__*/ jsx(BorderOutlined, {}),
|
|
515
|
+
onClick: onStop,
|
|
516
|
+
style: {
|
|
517
|
+
borderRadius: 20,
|
|
518
|
+
zIndex: 999
|
|
519
|
+
},
|
|
520
|
+
children: "Stop"
|
|
521
|
+
});
|
|
522
|
+
return runButton('Run');
|
|
523
|
+
}, [
|
|
524
|
+
dryMode,
|
|
525
|
+
loading,
|
|
526
|
+
handleRunWithHistory,
|
|
527
|
+
onStop,
|
|
528
|
+
isRunButtonEnabled,
|
|
529
|
+
selectedType,
|
|
530
|
+
stoppable
|
|
531
|
+
]);
|
|
532
|
+
return /*#__PURE__*/ jsxs("div", {
|
|
533
|
+
className: "prompt-input-wrapper",
|
|
534
|
+
children: [
|
|
535
|
+
/*#__PURE__*/ jsxs("div", {
|
|
536
|
+
className: "mode-radio-group-wrapper",
|
|
537
|
+
children: [
|
|
538
|
+
/*#__PURE__*/ jsxs("div", {
|
|
539
|
+
className: "mode-radio-group",
|
|
540
|
+
ref: modeRadioGroupRef,
|
|
541
|
+
children: [
|
|
542
|
+
/*#__PURE__*/ jsx(Form.Item, {
|
|
543
|
+
name: "type",
|
|
544
|
+
style: {
|
|
545
|
+
margin: 0
|
|
546
|
+
},
|
|
547
|
+
children: /*#__PURE__*/ jsx(Radio.Group, {
|
|
548
|
+
buttonStyle: "solid",
|
|
549
|
+
disabled: !runButtonEnabled,
|
|
550
|
+
children: defaultMainButtons.map((apiType)=>{
|
|
551
|
+
var _apiMetadata_apiType;
|
|
552
|
+
return /*#__PURE__*/ jsx(Tooltip, {
|
|
553
|
+
title: (null == (_apiMetadata_apiType = apiMetadata[apiType]) ? void 0 : _apiMetadata_apiType.title) || '',
|
|
554
|
+
children: /*#__PURE__*/ jsx(Radio.Button, {
|
|
555
|
+
value: apiType,
|
|
556
|
+
children: actionNameForType(apiType)
|
|
557
|
+
})
|
|
558
|
+
}, apiType);
|
|
559
|
+
})
|
|
560
|
+
})
|
|
561
|
+
}),
|
|
562
|
+
/*#__PURE__*/ jsx(Dropdown, {
|
|
563
|
+
menu: (()=>{
|
|
564
|
+
const hiddenAPIs = availableDropdownMethods.filter((api)=>!defaultMainButtons.includes(api));
|
|
565
|
+
const groupedItems = [];
|
|
566
|
+
const interactionAPIs = hiddenAPIs.filter((api)=>{
|
|
567
|
+
var _apiMetadata_api;
|
|
568
|
+
return (null == (_apiMetadata_api = apiMetadata[api]) ? void 0 : _apiMetadata_api.group) === 'interaction';
|
|
569
|
+
});
|
|
570
|
+
if (interactionAPIs.length > 0) groupedItems.push({
|
|
571
|
+
key: 'interaction-group',
|
|
572
|
+
type: 'group',
|
|
573
|
+
label: 'Interaction APIs',
|
|
574
|
+
children: interactionAPIs.map((api)=>{
|
|
575
|
+
var _apiMetadata_api;
|
|
576
|
+
return {
|
|
577
|
+
key: api,
|
|
578
|
+
label: actionNameForType(api),
|
|
579
|
+
title: (null == (_apiMetadata_api = apiMetadata[api]) ? void 0 : _apiMetadata_api.title) || '',
|
|
580
|
+
onClick: ()=>{
|
|
581
|
+
form.setFieldValue('type', api);
|
|
582
|
+
}
|
|
583
|
+
};
|
|
584
|
+
})
|
|
585
|
+
});
|
|
586
|
+
const extractionAPIs = hiddenAPIs.filter((api)=>{
|
|
587
|
+
var _apiMetadata_api;
|
|
588
|
+
return (null == (_apiMetadata_api = apiMetadata[api]) ? void 0 : _apiMetadata_api.group) === 'extraction';
|
|
589
|
+
});
|
|
590
|
+
if (extractionAPIs.length > 0) groupedItems.push({
|
|
591
|
+
key: 'extraction-group',
|
|
592
|
+
type: 'group',
|
|
593
|
+
label: 'Data Extraction APIs',
|
|
594
|
+
children: extractionAPIs.map((api)=>{
|
|
595
|
+
var _apiMetadata_api;
|
|
596
|
+
return {
|
|
597
|
+
key: api,
|
|
598
|
+
label: actionNameForType(api),
|
|
599
|
+
title: (null == (_apiMetadata_api = apiMetadata[api]) ? void 0 : _apiMetadata_api.title) || '',
|
|
600
|
+
onClick: ()=>{
|
|
601
|
+
form.setFieldValue('type', api);
|
|
602
|
+
}
|
|
603
|
+
};
|
|
604
|
+
})
|
|
605
|
+
});
|
|
606
|
+
const validationAPIs = hiddenAPIs.filter((api)=>{
|
|
607
|
+
var _apiMetadata_api;
|
|
608
|
+
return (null == (_apiMetadata_api = apiMetadata[api]) ? void 0 : _apiMetadata_api.group) === 'validation';
|
|
609
|
+
});
|
|
610
|
+
if (validationAPIs.length > 0) groupedItems.push({
|
|
611
|
+
key: 'validation-group',
|
|
612
|
+
type: 'group',
|
|
613
|
+
label: 'Validation APIs',
|
|
614
|
+
children: validationAPIs.map((api)=>{
|
|
615
|
+
var _apiMetadata_api;
|
|
616
|
+
return {
|
|
617
|
+
key: api,
|
|
618
|
+
label: actionNameForType(api),
|
|
619
|
+
title: (null == (_apiMetadata_api = apiMetadata[api]) ? void 0 : _apiMetadata_api.title) || '',
|
|
620
|
+
onClick: ()=>{
|
|
621
|
+
form.setFieldValue('type', api);
|
|
622
|
+
}
|
|
623
|
+
};
|
|
624
|
+
})
|
|
625
|
+
});
|
|
626
|
+
const deviceSpecificAPIs = hiddenAPIs.filter((api)=>!apiMetadata[api]);
|
|
627
|
+
if (deviceSpecificAPIs.length > 0) groupedItems.push({
|
|
628
|
+
key: 'device-specific-group',
|
|
629
|
+
type: 'group',
|
|
630
|
+
label: 'Device-Specific APIs',
|
|
631
|
+
children: deviceSpecificAPIs.map((api)=>({
|
|
632
|
+
key: api,
|
|
633
|
+
label: actionNameForType(api),
|
|
634
|
+
title: '',
|
|
635
|
+
onClick: ()=>{
|
|
636
|
+
form.setFieldValue('type', api);
|
|
637
|
+
}
|
|
638
|
+
}))
|
|
639
|
+
});
|
|
640
|
+
return {
|
|
641
|
+
items: groupedItems
|
|
642
|
+
};
|
|
643
|
+
})(),
|
|
644
|
+
placement: "bottomLeft",
|
|
645
|
+
trigger: [
|
|
646
|
+
'click'
|
|
647
|
+
],
|
|
648
|
+
disabled: !runButtonEnabled,
|
|
649
|
+
children: /*#__PURE__*/ jsxs(Button, {
|
|
650
|
+
className: `more-apis-button ${!defaultMainButtons.includes(selectedType) ? 'selected-from-dropdown' : ''}`,
|
|
651
|
+
children: [
|
|
652
|
+
selectedType && !defaultMainButtons.includes(selectedType) ? actionNameForType(selectedType) : 'more',
|
|
653
|
+
/*#__PURE__*/ jsx(DownOutlined, {
|
|
654
|
+
style: {
|
|
655
|
+
fontSize: '10px',
|
|
656
|
+
marginLeft: '2px'
|
|
657
|
+
}
|
|
658
|
+
})
|
|
659
|
+
]
|
|
660
|
+
})
|
|
661
|
+
})
|
|
662
|
+
]
|
|
663
|
+
}),
|
|
664
|
+
/*#__PURE__*/ jsxs("div", {
|
|
665
|
+
className: "action-icons",
|
|
666
|
+
children: [
|
|
667
|
+
hasConfigOptions && /*#__PURE__*/ jsx("div", {
|
|
668
|
+
className: hoveringSettings ? 'settings-wrapper settings-wrapper-hover' : 'settings-wrapper',
|
|
669
|
+
onMouseEnter: handleMouseEnter,
|
|
670
|
+
onMouseLeave: handleMouseLeave,
|
|
671
|
+
children: /*#__PURE__*/ jsx(ConfigSelector, {
|
|
672
|
+
enableTracking: 'In-Browser-Extension' === serviceMode,
|
|
673
|
+
showDeepThinkOption: showDeepThinkOption,
|
|
674
|
+
showDataExtractionOptions: showDataExtractionOptions,
|
|
675
|
+
hideDomAndScreenshotOptions: hideDomAndScreenshotOptions
|
|
676
|
+
})
|
|
677
|
+
}),
|
|
678
|
+
/*#__PURE__*/ jsx(HistorySelector, {
|
|
679
|
+
onSelect: handleSelectHistory,
|
|
680
|
+
history: historyForSelectedType,
|
|
681
|
+
currentType: selectedType
|
|
682
|
+
})
|
|
683
|
+
]
|
|
684
|
+
})
|
|
685
|
+
]
|
|
686
|
+
}),
|
|
687
|
+
/*#__PURE__*/ jsxs("div", {
|
|
688
|
+
className: `main-side-console-input ${!runButtonEnabled ? 'disabled' : ''} ${loading ? 'loading' : ''}`,
|
|
689
|
+
children: [
|
|
690
|
+
needsAnyInput ? needsStructuredParams ? hasSingleStructuredParam ? renderStructuredParams() : /*#__PURE__*/ jsx("div", {
|
|
691
|
+
className: "structured-params-container",
|
|
692
|
+
children: renderStructuredParams()
|
|
693
|
+
}) : /*#__PURE__*/ jsx(Form.Item, {
|
|
694
|
+
name: "prompt",
|
|
695
|
+
style: {
|
|
696
|
+
margin: 0
|
|
697
|
+
},
|
|
698
|
+
children: /*#__PURE__*/ jsx(TextArea, {
|
|
699
|
+
className: "main-side-console-input-textarea",
|
|
700
|
+
disabled: !runButtonEnabled,
|
|
701
|
+
rows: 4,
|
|
702
|
+
placeholder: placeholder,
|
|
703
|
+
autoFocus: true,
|
|
704
|
+
onKeyDown: handleKeyDown,
|
|
705
|
+
onChange: handlePromptChange,
|
|
706
|
+
ref: textAreaRef
|
|
707
|
+
})
|
|
708
|
+
}) : /*#__PURE__*/ jsxs("div", {
|
|
709
|
+
className: "no-input-method",
|
|
710
|
+
style: {
|
|
711
|
+
padding: '20px',
|
|
712
|
+
textAlign: 'center',
|
|
713
|
+
color: '#666',
|
|
714
|
+
fontSize: '14px'
|
|
715
|
+
},
|
|
716
|
+
children: [
|
|
717
|
+
'Click "Run" to execute ',
|
|
718
|
+
actionNameForType(selectedType)
|
|
719
|
+
]
|
|
720
|
+
}),
|
|
721
|
+
/*#__PURE__*/ jsx("div", {
|
|
722
|
+
className: "form-controller-wrapper",
|
|
723
|
+
children: renderActionButton()
|
|
724
|
+
})
|
|
725
|
+
]
|
|
726
|
+
})
|
|
727
|
+
]
|
|
728
|
+
});
|
|
729
|
+
};
|
|
730
|
+
export { PromptInput };
|