@godscene/visualizer 1.7.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -0
  3. package/dist/es/component/blackboard/highlights.mjs +47 -0
  4. package/dist/es/component/blackboard/index.css +118 -0
  5. package/dist/es/component/blackboard/index.mjs +122 -0
  6. package/dist/es/component/config-selector/index.mjs +251 -0
  7. package/dist/es/component/context-preview/index.mjs +37 -0
  8. package/dist/es/component/env-config/index.mjs +237 -0
  9. package/dist/es/component/env-config-reminder/index.css +30 -0
  10. package/dist/es/component/env-config-reminder/index.mjs +27 -0
  11. package/dist/es/component/form-field/index.mjs +158 -0
  12. package/dist/es/component/history-selector/index.css +237 -0
  13. package/dist/es/component/history-selector/index.mjs +197 -0
  14. package/dist/es/component/index.mjs +1 -0
  15. package/dist/es/component/logo/index.css +19 -0
  16. package/dist/es/component/logo/index.mjs +20 -0
  17. package/dist/es/component/logo/logo.mjs +2 -0
  18. package/dist/es/component/misc/index.mjs +96 -0
  19. package/dist/es/component/nav-actions/index.mjs +14 -0
  20. package/dist/es/component/nav-actions/style.css +35 -0
  21. package/dist/es/component/player/index.css +296 -0
  22. package/dist/es/component/player/index.mjs +702 -0
  23. package/dist/es/component/player/playback-controls.mjs +4 -0
  24. package/dist/es/component/player/report-download.mjs +61 -0
  25. package/dist/es/component/player/scenes/StepScene.mjs +194 -0
  26. package/dist/es/component/player/scenes/derive-frame-state.mjs +229 -0
  27. package/dist/es/component/player/scenes/export-branded-video.mjs +360 -0
  28. package/dist/es/component/player/scenes/frame-calculator.mjs +149 -0
  29. package/dist/es/component/player/scenes/playback-frame.mjs +6 -0
  30. package/dist/es/component/player/scenes/playback-layout.mjs +12 -0
  31. package/dist/es/component/player/scenes/pointer-layout.mjs +36 -0
  32. package/dist/es/component/player/use-frame-player.mjs +87 -0
  33. package/dist/es/component/playground/index.css +930 -0
  34. package/dist/es/component/playground/playground-demo-ui-context.json +290 -0
  35. package/dist/es/component/playground-result/index.css +92 -0
  36. package/dist/es/component/playground-result/index.mjs +232 -0
  37. package/dist/es/component/prompt-input/index.css +832 -0
  38. package/dist/es/component/prompt-input/index.mjs +959 -0
  39. package/dist/es/component/screenshot-viewer/index.css +237 -0
  40. package/dist/es/component/screenshot-viewer/index.mjs +319 -0
  41. package/dist/es/component/service-mode-control/index.mjs +107 -0
  42. package/dist/es/component/shiny-text/index.css +107 -0
  43. package/dist/es/component/shiny-text/index.mjs +15 -0
  44. package/dist/es/component/universal-playground/empty-state.mjs +5 -0
  45. package/dist/es/component/universal-playground/index.css +619 -0
  46. package/dist/es/component/universal-playground/index.mjs +558 -0
  47. package/dist/es/component/universal-playground/providers/context-provider.mjs +90 -0
  48. package/dist/es/component/universal-playground/providers/indexeddb-storage-provider.mjs +280 -0
  49. package/dist/es/component/universal-playground/providers/storage-provider.mjs +279 -0
  50. package/dist/es/component/universal-playground/universal-playground-electron.mjs +668 -0
  51. package/dist/es/hooks/useMinimalTypeGate.mjs +47 -0
  52. package/dist/es/hooks/usePlaygroundExecution.mjs +435 -0
  53. package/dist/es/hooks/usePlaygroundState.mjs +278 -0
  54. package/dist/es/hooks/useSafeOverrideAIConfig.mjs +20 -0
  55. package/dist/es/hooks/useServerValid.mjs +55 -0
  56. package/dist/es/hooks/useTheme.mjs +25 -0
  57. package/dist/es/icons/action-chevron.mjs +61 -0
  58. package/dist/es/icons/avatar.mjs +70 -0
  59. package/dist/es/icons/close.mjs +61 -0
  60. package/dist/es/icons/global-perspective.mjs +58 -0
  61. package/dist/es/icons/history.mjs +72 -0
  62. package/dist/es/icons/magnifying-glass.mjs +81 -0
  63. package/dist/es/icons/player-setting.mjs +68 -0
  64. package/dist/es/icons/prompt-history.mjs +70 -0
  65. package/dist/es/icons/setting.mjs +62 -0
  66. package/dist/es/icons/show-marker.mjs +58 -0
  67. package/dist/es/index.mjs +26 -0
  68. package/dist/es/static/image/logo.png +0 -0
  69. package/dist/es/store/history.mjs +128 -0
  70. package/dist/es/store/store.mjs +277 -0
  71. package/dist/es/types.mjs +73 -0
  72. package/dist/es/utils/action-label.mjs +15 -0
  73. package/dist/es/utils/color.mjs +35 -0
  74. package/dist/es/utils/constants.mjs +99 -0
  75. package/dist/es/utils/device-capabilities.mjs +13 -0
  76. package/dist/es/utils/empty-state-scroll.mjs +8 -0
  77. package/dist/es/utils/highlight-element.mjs +62 -0
  78. package/dist/es/utils/index.mjs +13 -0
  79. package/dist/es/utils/playground-utils.mjs +43 -0
  80. package/dist/es/utils/progress-action-icon.mjs +30 -0
  81. package/dist/es/utils/prompt-input-utils.mjs +49 -0
  82. package/dist/es/utils/prompt-placeholder.mjs +19 -0
  83. package/dist/es/utils/replay-scripts.mjs +428 -0
  84. package/dist/lib/component/blackboard/highlights.js +84 -0
  85. package/dist/lib/component/blackboard/index.css +118 -0
  86. package/dist/lib/component/blackboard/index.js +169 -0
  87. package/dist/lib/component/config-selector/index.js +295 -0
  88. package/dist/lib/component/context-preview/index.js +82 -0
  89. package/dist/lib/component/env-config/index.js +271 -0
  90. package/dist/lib/component/env-config-reminder/index.css +30 -0
  91. package/dist/lib/component/env-config-reminder/index.js +61 -0
  92. package/dist/lib/component/form-field/index.js +204 -0
  93. package/dist/lib/component/history-selector/index.css +237 -0
  94. package/dist/lib/component/history-selector/index.js +243 -0
  95. package/dist/lib/component/index.js +58 -0
  96. package/dist/lib/component/logo/index.css +19 -0
  97. package/dist/lib/component/logo/index.js +67 -0
  98. package/dist/lib/component/logo/logo.js +24 -0
  99. package/dist/lib/component/misc/index.js +152 -0
  100. package/dist/lib/component/nav-actions/index.js +48 -0
  101. package/dist/lib/component/nav-actions/style.css +35 -0
  102. package/dist/lib/component/player/index.css +296 -0
  103. package/dist/lib/component/player/index.js +747 -0
  104. package/dist/lib/component/player/playback-controls.js +38 -0
  105. package/dist/lib/component/player/report-download.js +98 -0
  106. package/dist/lib/component/player/scenes/StepScene.js +228 -0
  107. package/dist/lib/component/player/scenes/derive-frame-state.js +266 -0
  108. package/dist/lib/component/player/scenes/export-branded-video.js +403 -0
  109. package/dist/lib/component/player/scenes/frame-calculator.js +186 -0
  110. package/dist/lib/component/player/scenes/playback-frame.js +40 -0
  111. package/dist/lib/component/player/scenes/playback-layout.js +46 -0
  112. package/dist/lib/component/player/scenes/pointer-layout.js +88 -0
  113. package/dist/lib/component/player/use-frame-player.js +121 -0
  114. package/dist/lib/component/playground/index.css +930 -0
  115. package/dist/lib/component/playground/playground-demo-ui-context.json +290 -0
  116. package/dist/lib/component/playground-result/index.css +92 -0
  117. package/dist/lib/component/playground-result/index.js +276 -0
  118. package/dist/lib/component/prompt-input/index.css +832 -0
  119. package/dist/lib/component/prompt-input/index.js +1005 -0
  120. package/dist/lib/component/screenshot-viewer/index.css +237 -0
  121. package/dist/lib/component/screenshot-viewer/index.js +353 -0
  122. package/dist/lib/component/service-mode-control/index.js +141 -0
  123. package/dist/lib/component/shiny-text/index.css +107 -0
  124. package/dist/lib/component/shiny-text/index.js +49 -0
  125. package/dist/lib/component/universal-playground/empty-state.js +39 -0
  126. package/dist/lib/component/universal-playground/index.css +619 -0
  127. package/dist/lib/component/universal-playground/index.js +607 -0
  128. package/dist/lib/component/universal-playground/providers/context-provider.js +133 -0
  129. package/dist/lib/component/universal-playground/providers/indexeddb-storage-provider.js +320 -0
  130. package/dist/lib/component/universal-playground/providers/storage-provider.js +337 -0
  131. package/dist/lib/component/universal-playground/universal-playground-electron.js +717 -0
  132. package/dist/lib/hooks/useMinimalTypeGate.js +81 -0
  133. package/dist/lib/hooks/usePlaygroundExecution.js +478 -0
  134. package/dist/lib/hooks/usePlaygroundState.js +312 -0
  135. package/dist/lib/hooks/useSafeOverrideAIConfig.js +57 -0
  136. package/dist/lib/hooks/useServerValid.js +89 -0
  137. package/dist/lib/hooks/useTheme.js +59 -0
  138. package/dist/lib/icons/action-chevron.js +95 -0
  139. package/dist/lib/icons/avatar.js +104 -0
  140. package/dist/lib/icons/close.js +95 -0
  141. package/dist/lib/icons/global-perspective.js +92 -0
  142. package/dist/lib/icons/history.js +106 -0
  143. package/dist/lib/icons/magnifying-glass.js +115 -0
  144. package/dist/lib/icons/player-setting.js +102 -0
  145. package/dist/lib/icons/prompt-history.js +104 -0
  146. package/dist/lib/icons/setting.js +96 -0
  147. package/dist/lib/icons/show-marker.js +92 -0
  148. package/dist/lib/index.js +204 -0
  149. package/dist/lib/static/image/logo.png +0 -0
  150. package/dist/lib/store/history.js +135 -0
  151. package/dist/lib/store/store.js +287 -0
  152. package/dist/lib/types.js +119 -0
  153. package/dist/lib/utils/action-label.js +52 -0
  154. package/dist/lib/utils/color.js +75 -0
  155. package/dist/lib/utils/constants.js +172 -0
  156. package/dist/lib/utils/device-capabilities.js +50 -0
  157. package/dist/lib/utils/empty-state-scroll.js +42 -0
  158. package/dist/lib/utils/highlight-element.js +99 -0
  159. package/dist/lib/utils/index.js +69 -0
  160. package/dist/lib/utils/playground-utils.js +86 -0
  161. package/dist/lib/utils/progress-action-icon.js +67 -0
  162. package/dist/lib/utils/prompt-input-utils.js +89 -0
  163. package/dist/lib/utils/prompt-placeholder.js +53 -0
  164. package/dist/lib/utils/replay-scripts.js +474 -0
  165. package/dist/types/component/blackboard/highlights.d.ts +11 -0
  166. package/dist/types/component/blackboard/index.d.ts +10 -0
  167. package/dist/types/component/config-selector/index.d.ts +15 -0
  168. package/dist/types/component/context-preview/index.d.ts +9 -0
  169. package/dist/types/component/env-config/index.d.ts +8 -0
  170. package/dist/types/component/env-config-reminder/index.d.ts +6 -0
  171. package/dist/types/component/form-field/index.d.ts +17 -0
  172. package/dist/types/component/history-selector/index.d.ts +13 -0
  173. package/dist/types/component/index.d.ts +1 -0
  174. package/dist/types/component/logo/index.d.ts +5 -0
  175. package/dist/types/component/misc/index.d.ts +6 -0
  176. package/dist/types/component/nav-actions/index.d.ts +12 -0
  177. package/dist/types/component/player/index.d.ts +15 -0
  178. package/dist/types/component/player/playback-controls.d.ts +1 -0
  179. package/dist/types/component/player/report-download.d.ts +32 -0
  180. package/dist/types/component/player/scenes/StepScene.d.ts +9 -0
  181. package/dist/types/component/player/scenes/derive-frame-state.d.ts +40 -0
  182. package/dist/types/component/player/scenes/export-branded-video.d.ts +33 -0
  183. package/dist/types/component/player/scenes/frame-calculator.d.ts +40 -0
  184. package/dist/types/component/player/scenes/playback-frame.d.ts +3 -0
  185. package/dist/types/component/player/scenes/playback-layout.d.ts +7 -0
  186. package/dist/types/component/player/scenes/pointer-layout.d.ts +20 -0
  187. package/dist/types/component/player/use-frame-player.d.ts +17 -0
  188. package/dist/types/component/playground-result/index.d.ts +22 -0
  189. package/dist/types/component/prompt-input/index.d.ts +23 -0
  190. package/dist/types/component/screenshot-viewer/index.d.ts +23 -0
  191. package/dist/types/component/service-mode-control/index.d.ts +6 -0
  192. package/dist/types/component/shiny-text/index.d.ts +12 -0
  193. package/dist/types/component/universal-playground/empty-state.d.ts +3 -0
  194. package/dist/types/component/universal-playground/index.d.ts +4 -0
  195. package/dist/types/component/universal-playground/providers/context-provider.d.ts +37 -0
  196. package/dist/types/component/universal-playground/providers/indexeddb-storage-provider.d.ts +71 -0
  197. package/dist/types/component/universal-playground/providers/storage-provider.d.ts +58 -0
  198. package/dist/types/component/universal-playground/universal-playground-electron.d.ts +4 -0
  199. package/dist/types/hooks/useMinimalTypeGate.d.ts +72 -0
  200. package/dist/types/hooks/usePlaygroundExecution.d.ts +40 -0
  201. package/dist/types/hooks/usePlaygroundState.d.ts +26 -0
  202. package/dist/types/hooks/useSafeOverrideAIConfig.d.ts +16 -0
  203. package/dist/types/hooks/useServerValid.d.ts +1 -0
  204. package/dist/types/hooks/useTheme.d.ts +7 -0
  205. package/dist/types/index.d.ts +29 -0
  206. package/dist/types/store/history.d.ts +16 -0
  207. package/dist/types/store/store.d.ts +57 -0
  208. package/dist/types/types.d.ts +278 -0
  209. package/dist/types/utils/action-label.d.ts +11 -0
  210. package/dist/types/utils/color.d.ts +4 -0
  211. package/dist/types/utils/constants.d.ts +80 -0
  212. package/dist/types/utils/device-capabilities.d.ts +9 -0
  213. package/dist/types/utils/empty-state-scroll.d.ts +11 -0
  214. package/dist/types/utils/highlight-element.d.ts +3 -0
  215. package/dist/types/utils/index.d.ts +5 -0
  216. package/dist/types/utils/playground-utils.d.ts +11 -0
  217. package/dist/types/utils/progress-action-icon.d.ts +12 -0
  218. package/dist/types/utils/prompt-input-utils.d.ts +24 -0
  219. package/dist/types/utils/prompt-placeholder.d.ts +1 -0
  220. package/dist/types/utils/replay-scripts.d.ts +50 -0
  221. package/package.json +82 -0
@@ -0,0 +1,959 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { ArrowUpOutlined, BorderOutlined, DownOutlined, SendOutlined } from "@ant-design/icons";
3
+ import { Button, Dropdown, Form, Input, Radio, Tooltip } from "antd";
4
+ import react, { useCallback, useEffect, useMemo, useRef, useState } from "react";
5
+ import { useMinimalTypeGate } from "../../hooks/useMinimalTypeGate.mjs";
6
+ import action_chevron from "../../icons/action-chevron.mjs";
7
+ import prompt_history from "../../icons/prompt-history.mjs";
8
+ import { useHistoryStore } from "../../store/history.mjs";
9
+ import { extractDefaultValue, isLocateField, isZodObjectSchema, unwrapZodType } from "../../types.mjs";
10
+ import { getPromptInputActionLabel } from "../../utils/action-label.mjs";
11
+ import { apiMetadata, defaultMainButtons } from "../../utils/constants.mjs";
12
+ import { hasDeviceSpecificConfig } from "../../utils/device-capabilities.mjs";
13
+ import { actionNameForType, isRunButtonEnabled as playground_utils_mjs_isRunButtonEnabled } from "../../utils/playground-utils.mjs";
14
+ import { getAvailablePromptActionTypes, getInlineStructuredFieldConfig } from "../../utils/prompt-input-utils.mjs";
15
+ import { getPlaceholderForType } from "../../utils/prompt-placeholder.mjs";
16
+ import { ConfigSelector } from "../config-selector/index.mjs";
17
+ import { BooleanField, EnumField, LocateField, NumberField, TextField } from "../form-field/index.mjs";
18
+ import { HistorySelector } from "../history-selector/index.mjs";
19
+ import "./index.css";
20
+ function _define_property(obj, key, value) {
21
+ if (key in obj) Object.defineProperty(obj, key, {
22
+ value: value,
23
+ enumerable: true,
24
+ configurable: true,
25
+ writable: true
26
+ });
27
+ else obj[key] = value;
28
+ return obj;
29
+ }
30
+ function _object_spread(target) {
31
+ for(var i = 1; i < arguments.length; i++){
32
+ var source = null != arguments[i] ? arguments[i] : {};
33
+ var ownKeys = Object.keys(source);
34
+ if ("function" == typeof Object.getOwnPropertySymbols) ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
35
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
36
+ }));
37
+ ownKeys.forEach(function(key) {
38
+ _define_property(target, key, source[key]);
39
+ });
40
+ }
41
+ return target;
42
+ }
43
+ const { TextArea } = Input;
44
+ const STUDIO_MINIMAL_PROMPT_ICONS = {
45
+ action: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAASdJREFUeAHtlt3NgjAUhg8/CVx+G8gGX5xAnUDdQMcgkIgJBLbQEXQD3MAR6gZewgXgOUn9iRp6vAC96JM07YG36Zv+nBZAwySO4ymWgUoXRdEfaYGJyRElSbKyLGuHJVdpHcc5khb7RMCAZcA0TU82PYZ8IPsoZ4ttoEu0ga8bMB6DNE1X8H6jTUBuLmQL7SxkLbDkzz/ruhZBEKxfDGRZNm2aZgc9UFXVLAzDPbVvS1AUxQGrE3SPwHK8BganBy7NBuTU+r5vKLSNbG5RuwQF+hRoA9rA76RifMl4+JjI4Z5yu0KUZTnE8c4U3GbAdd3/HgYnPNu2R9eg98uIvmOGfL2M2tCpWBv4BQPiqW7j9IGWZ4CODT7X5pRAVFrUjEn7eNQ0bVwAyWpjMDlJKpAAAAAASUVORK5CYII=',
46
+ actionChevron: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAAUxJREFUeAHtUztOw0AQ3V1SuLCldP4VuEyHuQE34Aqho0tugHKCwBFyApwTYEoqyAlwCsufKkgu3NjmjfkoCDu7KSP5SaNZ774Zv9nZYWzAgH2MAdu2z4+J4apEy7I8uBDWlGV5uQNU4gRTBOd8CUfqPU3THlXjzlRIUH8HdwuLYB8wX9d1XhRFKIuVXpHjONd1XQdN0+yEED48h72iojGOr9I0fT4ULyTKPSR/aJVwPk+SZIuEET6n33uBrOmyHoTs694XSLz62cyybI3k96iEqgjodbFjAWVLVNDAnvo4dEYc4vZxOiswTXMGdXMsIyidsn7cwLbExU9mXQTeocqDe28POffo3tkBuK57UVXVG63RLz/P8w3rq2BvmH6byiSI43hD3DaZEP/68WcODMOg9z5BySs0dcEUgXl4wVzQ0h+NRhN8r9mAAaeDT7K0eaMcqhtVAAAAAElFTkSuQmCC',
47
+ settings: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAAaFJREFUeAHtlt9tgzAQxi8EJa/pBMkIHYENygalG7RvSQQKlfjz2I5ANkg3oBukG6QbtI9IIPq5ihHQOBXmFImqPwnZBvtsf9ydTfQPA77vz4IguCENDGJgOp3ux+PxLgxDnzrCsgAw/zZmGPOO48iUFci4wE42xITKXlEUO9d1X34s4NjZISZU9qCSjeKqastKWZYpMaKyNxqNto02MRDHcXmsJqvV6q7LWBYnxK4+SBOTeHDw2HAwn4aGlg9EUfQE2e+xYwchtaUeaPmAmFyUyH4W9aThA9jZ7alOiN39crl8O/FpoRpzjrq96hcgj2/wwVcNQlxb6/X6VdRrYaeNtGfUVvXbgE9iRNprOCHktPF/Z+3OeZ4fPM9LZbumgHjX2Qnr9rSioE/ma6MVBZDvWWQ/cbLR0GE5jEQoQhFLpGIkpvcuY1nOAkyeiBKJSRSXPw37UCkgbrWmaSZwsBkxoLInHBgJ6EG2KwUgn801+Tl78hyRVApkWfaIexxp4rRfqOzBUdN6+29cyYAMvQN1hCUMIbc1mUyu4VzDz4wX5wvRfah9kIOcwwAAAABJRU5ErkJggg=='
48
+ };
49
+ const PromptInput = ({ runButtonEnabled, form, serviceMode, selectedType, dryMode, stoppable, loading, onRun, onStop, clearPromptAfterRun = true, actionSpace, hideDomAndScreenshotOptions = false, deviceType, chrome })=>{
50
+ var _ref, _ref1;
51
+ var _chrome_icons, _chrome_icons1, _chrome_icons2, _chrome_icons3;
52
+ const [hoveringSettings, setHoveringSettings] = useState(false);
53
+ const [promptValue, setPromptValue] = useState('');
54
+ const placeholder = getPlaceholderForType(selectedType);
55
+ const isMinimalChrome = (null == chrome ? void 0 : chrome.variant) === 'minimal';
56
+ const resolvedPlaceholder = (null == chrome ? void 0 : chrome.placeholder) || placeholder;
57
+ const actionButtonLabel = getPromptInputActionLabel(selectedType, null == chrome ? void 0 : chrome.primaryActionLabel);
58
+ const textAreaRef = useRef(null);
59
+ const modeRadioGroupRef = useRef(null);
60
+ const params = Form.useWatch('params', form);
61
+ const lastHistoryRef = useRef(null);
62
+ const history = useHistoryStore((state)=>state.history);
63
+ const lastSelectedType = useHistoryStore((state)=>state.lastSelectedType);
64
+ const addHistory = useHistoryStore((state)=>state.addHistory);
65
+ const setLastSelectedType = useHistoryStore((state)=>state.setLastSelectedType);
66
+ const historyForSelectedType = useMemo(()=>history[selectedType] || [], [
67
+ history,
68
+ selectedType
69
+ ]);
70
+ const handleMinimalTypeGateReset = useCallback(()=>{
71
+ lastHistoryRef.current = null;
72
+ setPromptValue('');
73
+ }, []);
74
+ const { markExplicitSelection, skipNextRestore, shouldSkipRestoreOnce } = useMinimalTypeGate({
75
+ enabled: isMinimalChrome,
76
+ form,
77
+ selectedType,
78
+ onAfterReset: handleMinimalTypeGateReset
79
+ });
80
+ const needsStructuredParams = useMemo(()=>{
81
+ if (actionSpace) {
82
+ const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
83
+ if (!(null == action ? void 0 : action.paramSchema)) return false;
84
+ if (isZodObjectSchema(action.paramSchema)) {
85
+ const schema = action.paramSchema;
86
+ const shape = schema.shape || {};
87
+ const shapeKeys = Object.keys(shape);
88
+ return shapeKeys.length > 0;
89
+ }
90
+ return true;
91
+ }
92
+ return false;
93
+ }, [
94
+ selectedType,
95
+ actionSpace
96
+ ]);
97
+ const needsAnyInput = useMemo(()=>{
98
+ if (actionSpace && actionSpace.length > 0) {
99
+ const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
100
+ if (action) {
101
+ if (action.paramSchema && isZodObjectSchema(action.paramSchema)) {
102
+ const schema = action.paramSchema;
103
+ const shape = schema.shape || {};
104
+ const hasRequiredFields = Object.keys(shape).some((key)=>{
105
+ const field = shape[key];
106
+ const { isOptional } = unwrapZodType(field);
107
+ return !isOptional;
108
+ });
109
+ return hasRequiredFields;
110
+ }
111
+ return !!action.paramSchema;
112
+ }
113
+ }
114
+ return true;
115
+ }, [
116
+ selectedType,
117
+ actionSpace
118
+ ]);
119
+ const showDataExtractionOptions = useMemo(()=>{
120
+ const dataExtractionMethods = [
121
+ 'aiQuery',
122
+ 'aiBoolean',
123
+ 'aiNumber',
124
+ 'aiString',
125
+ 'aiAsk',
126
+ 'aiAssert'
127
+ ];
128
+ return dataExtractionMethods.includes(selectedType);
129
+ }, [
130
+ selectedType
131
+ ]);
132
+ const showDeepLocateOption = useMemo(()=>{
133
+ if ('aiAct' === selectedType || 'aiLocate' === selectedType) return true;
134
+ if (actionSpace) {
135
+ const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
136
+ if ((null == action ? void 0 : action.paramSchema) && isZodObjectSchema(action.paramSchema)) {
137
+ const schema = action.paramSchema;
138
+ const shape = schema.shape || {};
139
+ const hasLocateField = Object.keys(shape).some((key)=>{
140
+ const field = shape[key];
141
+ const { actualField } = unwrapZodType(field);
142
+ return isLocateField(actualField);
143
+ });
144
+ return hasLocateField;
145
+ }
146
+ }
147
+ return false;
148
+ }, [
149
+ selectedType,
150
+ actionSpace
151
+ ]);
152
+ const showDeepThinkOption = useMemo(()=>'aiAct' === selectedType, [
153
+ selectedType
154
+ ]);
155
+ const hasConfigOptions = useMemo(()=>{
156
+ const hasTracking = 'In-Browser-Extension' === serviceMode;
157
+ const hasDeepLocate = showDeepLocateOption;
158
+ const hasDeepThink = showDeepThinkOption;
159
+ const hasDataExtraction = showDataExtractionOptions && !hideDomAndScreenshotOptions;
160
+ const hasDeviceOptions = hasDeviceSpecificConfig(deviceType);
161
+ return hasTracking || hasDeepLocate || hasDeepThink || hasDataExtraction || hasDeviceOptions;
162
+ }, [
163
+ serviceMode,
164
+ showDeepLocateOption,
165
+ showDeepThinkOption,
166
+ showDataExtractionOptions,
167
+ hideDomAndScreenshotOptions,
168
+ deviceType
169
+ ]);
170
+ const availableDropdownMethods = useMemo(()=>getAvailablePromptActionTypes(actionSpace), [
171
+ actionSpace
172
+ ]);
173
+ const hiddenDropdownAPIs = useMemo(()=>availableDropdownMethods.filter((api)=>!defaultMainButtons.includes(api)), [
174
+ availableDropdownMethods
175
+ ]);
176
+ const handleTypeSelect = useCallback((api)=>{
177
+ markExplicitSelection();
178
+ form.setFieldValue('type', api);
179
+ }, [
180
+ form,
181
+ markExplicitSelection
182
+ ]);
183
+ const apiGroupDefinitions = useMemo(()=>[
184
+ {
185
+ key: 'interaction-group',
186
+ label: 'Interaction APIs',
187
+ match: (api)=>{
188
+ var _apiMetadata_api;
189
+ return (null == (_apiMetadata_api = apiMetadata[api]) ? void 0 : _apiMetadata_api.group) === 'interaction';
190
+ }
191
+ },
192
+ {
193
+ key: 'extraction-group',
194
+ label: 'Data Extraction APIs',
195
+ match: (api)=>{
196
+ var _apiMetadata_api;
197
+ return (null == (_apiMetadata_api = apiMetadata[api]) ? void 0 : _apiMetadata_api.group) === 'extraction';
198
+ }
199
+ },
200
+ {
201
+ key: 'validation-group',
202
+ label: 'Validation APIs',
203
+ match: (api)=>{
204
+ var _apiMetadata_api;
205
+ return (null == (_apiMetadata_api = apiMetadata[api]) ? void 0 : _apiMetadata_api.group) === 'validation';
206
+ }
207
+ },
208
+ {
209
+ key: 'device-specific-group',
210
+ label: 'Device-Specific APIs',
211
+ match: (api)=>!apiMetadata[api]
212
+ }
213
+ ], []);
214
+ const buildApiMenuItem = useCallback((api)=>{
215
+ var _apiMetadata_api;
216
+ return {
217
+ key: api,
218
+ label: actionNameForType(api),
219
+ title: (null == (_apiMetadata_api = apiMetadata[api]) ? void 0 : _apiMetadata_api.title) || '',
220
+ onClick: ()=>handleTypeSelect(api)
221
+ };
222
+ }, [
223
+ handleTypeSelect
224
+ ]);
225
+ const hiddenApiGroupItems = useMemo(()=>{
226
+ const items = [];
227
+ for (const group of apiGroupDefinitions){
228
+ const apisInGroup = hiddenDropdownAPIs.filter(group.match);
229
+ if (0 !== apisInGroup.length) items.push({
230
+ key: group.key,
231
+ type: 'group',
232
+ label: group.label,
233
+ children: apisInGroup.map(buildApiMenuItem)
234
+ });
235
+ }
236
+ return items;
237
+ }, [
238
+ apiGroupDefinitions,
239
+ hiddenDropdownAPIs,
240
+ buildApiMenuItem
241
+ ]);
242
+ const actionDropdownMenu = useMemo(()=>{
243
+ const primaryActions = defaultMainButtons.filter((api)=>availableDropdownMethods.includes(api));
244
+ const items = [];
245
+ if (primaryActions.length > 0) items.push({
246
+ key: 'primary-group',
247
+ type: 'group',
248
+ label: 'Primary APIs',
249
+ children: primaryActions.map(buildApiMenuItem)
250
+ });
251
+ items.push(...hiddenApiGroupItems);
252
+ return {
253
+ items
254
+ };
255
+ }, [
256
+ availableDropdownMethods,
257
+ buildApiMenuItem,
258
+ hiddenApiGroupItems
259
+ ]);
260
+ const moreApisDropdownMenu = useMemo(()=>({
261
+ items: hiddenApiGroupItems
262
+ }), [
263
+ hiddenApiGroupItems
264
+ ]);
265
+ const getDefaultParams = useCallback(()=>{
266
+ if (!needsStructuredParams || !actionSpace) return {};
267
+ const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
268
+ if ((null == action ? void 0 : action.paramSchema) && isZodObjectSchema(action.paramSchema)) {
269
+ const defaultParams = {};
270
+ const schema = action.paramSchema;
271
+ const shape = schema.shape || {};
272
+ Object.keys(shape).forEach((key)=>{
273
+ const field = shape[key];
274
+ const defaultValue = extractDefaultValue(field);
275
+ if (void 0 !== defaultValue) defaultParams[key] = defaultValue;
276
+ });
277
+ return defaultParams;
278
+ }
279
+ return {};
280
+ }, [
281
+ selectedType,
282
+ needsStructuredParams,
283
+ actionSpace
284
+ ]);
285
+ useEffect(()=>{
286
+ if (!isMinimalChrome && !form.getFieldValue('type') && lastSelectedType) form.setFieldValue('type', lastSelectedType);
287
+ }, [
288
+ form,
289
+ isMinimalChrome,
290
+ lastSelectedType
291
+ ]);
292
+ useEffect(()=>{
293
+ if (!isMinimalChrome && selectedType && selectedType !== lastSelectedType) setLastSelectedType(selectedType);
294
+ }, [
295
+ selectedType,
296
+ isMinimalChrome,
297
+ lastSelectedType,
298
+ setLastSelectedType
299
+ ]);
300
+ const scrollToSelectedItem = useCallback(()=>{
301
+ const container = modeRadioGroupRef.current;
302
+ if (!container) return;
303
+ let targetElement = null;
304
+ const selectedRadioButton = container.querySelector('.ant-radio-button-wrapper-checked');
305
+ const dropdownButton = container.querySelector('.more-apis-button.selected-from-dropdown');
306
+ if (selectedRadioButton) targetElement = selectedRadioButton;
307
+ else if (dropdownButton) targetElement = dropdownButton;
308
+ if (targetElement) {
309
+ const containerRect = container.getBoundingClientRect();
310
+ const targetRect = targetElement.getBoundingClientRect();
311
+ const targetLeft = targetRect.left - containerRect.left + container.scrollLeft;
312
+ const targetWidth = targetRect.width;
313
+ const containerWidth = containerRect.width;
314
+ const optimalScrollLeft = targetLeft - (containerWidth - targetWidth) / 2;
315
+ container.scrollTo({
316
+ left: Math.max(0, optimalScrollLeft),
317
+ behavior: 'smooth'
318
+ });
319
+ }
320
+ }, []);
321
+ useEffect(()=>{
322
+ if (shouldSkipRestoreOnce()) return;
323
+ if (isMinimalChrome) {
324
+ const defaultParams = getDefaultParams();
325
+ form.setFieldsValue({
326
+ prompt: '',
327
+ params: defaultParams
328
+ });
329
+ setPromptValue('');
330
+ lastHistoryRef.current = null;
331
+ return;
332
+ }
333
+ const lastHistory = historyForSelectedType[0];
334
+ if (lastHistory && lastHistoryRef.current && lastHistory.timestamp === lastHistoryRef.current.timestamp) return;
335
+ if (lastHistory) {
336
+ form.setFieldsValue({
337
+ type: lastHistory.type,
338
+ prompt: lastHistory.prompt || '',
339
+ params: lastHistory.params
340
+ });
341
+ setPromptValue(lastHistory.prompt || '');
342
+ lastHistoryRef.current = lastHistory;
343
+ } else {
344
+ const defaultParams = getDefaultParams();
345
+ form.setFieldsValue({
346
+ prompt: '',
347
+ params: defaultParams
348
+ });
349
+ setPromptValue('');
350
+ lastHistoryRef.current = null;
351
+ }
352
+ }, [
353
+ selectedType,
354
+ historyForSelectedType,
355
+ form,
356
+ getDefaultParams,
357
+ isMinimalChrome,
358
+ shouldSkipRestoreOnce
359
+ ]);
360
+ useEffect(()=>{
361
+ const timeoutId = setTimeout(()=>{
362
+ scrollToSelectedItem();
363
+ }, 100);
364
+ return ()=>clearTimeout(timeoutId);
365
+ }, [
366
+ selectedType,
367
+ scrollToSelectedItem
368
+ ]);
369
+ const formPromptValue = Form.useWatch('prompt', form);
370
+ useEffect(()=>{
371
+ if (formPromptValue !== promptValue) setPromptValue(formPromptValue || '');
372
+ }, [
373
+ formPromptValue,
374
+ promptValue
375
+ ]);
376
+ const handleSelectHistory = useCallback((historyItem)=>{
377
+ markExplicitSelection();
378
+ if (historyItem.type !== selectedType) skipNextRestore();
379
+ form.setFieldsValue({
380
+ prompt: historyItem.prompt,
381
+ type: historyItem.type,
382
+ params: historyItem.params
383
+ });
384
+ setPromptValue(historyItem.prompt);
385
+ }, [
386
+ form,
387
+ markExplicitSelection,
388
+ selectedType,
389
+ skipNextRestore
390
+ ]);
391
+ const handlePromptChange = useCallback((e)=>{
392
+ const value = e.target.value;
393
+ setPromptValue(value);
394
+ }, []);
395
+ const hasSingleStructuredParam = useMemo(()=>{
396
+ if (!needsStructuredParams || !actionSpace) return false;
397
+ const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
398
+ if ((null == action ? void 0 : action.paramSchema) && isZodObjectSchema(action.paramSchema)) {
399
+ const schema = action.paramSchema;
400
+ const shape = schema.shape || {};
401
+ return 1 === Object.keys(shape).length;
402
+ }
403
+ return false;
404
+ }, [
405
+ selectedType,
406
+ needsStructuredParams,
407
+ actionSpace
408
+ ]);
409
+ const minimalInlineFieldConfig = useMemo(()=>isMinimalChrome ? getInlineStructuredFieldConfig(actionSpace, selectedType) : null, [
410
+ actionSpace,
411
+ isMinimalChrome,
412
+ selectedType
413
+ ]);
414
+ const isRunButtonEnabled = useMemo(()=>playground_utils_mjs_isRunButtonEnabled(runButtonEnabled, !!needsStructuredParams, params, actionSpace, selectedType, promptValue), [
415
+ runButtonEnabled,
416
+ needsStructuredParams,
417
+ selectedType,
418
+ actionSpace,
419
+ promptValue,
420
+ params
421
+ ]);
422
+ const handleRunWithHistory = useCallback(()=>{
423
+ const values = form.getFieldsValue();
424
+ let historyPrompt = '';
425
+ if (needsStructuredParams && values.params && actionSpace) {
426
+ const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
427
+ if ((null == action ? void 0 : action.paramSchema) && isZodObjectSchema(action.paramSchema)) {
428
+ let locateValue = '';
429
+ const otherValues = [];
430
+ const schema = action.paramSchema;
431
+ const shape = schema.shape || {};
432
+ Object.keys(shape).forEach((key)=>{
433
+ var _values_params;
434
+ const paramValue = null == (_values_params = values.params) ? void 0 : _values_params[key];
435
+ if (null != paramValue && '' !== paramValue) {
436
+ const field = shape[key];
437
+ const { actualField } = unwrapZodType(field);
438
+ if (isLocateField(actualField)) locateValue = String(paramValue);
439
+ else if ('distance' === key) otherValues.push(`${paramValue}`);
440
+ else otherValues.push(String(paramValue));
441
+ }
442
+ });
443
+ const mainPart = otherValues.join(' ');
444
+ historyPrompt = locateValue ? `${locateValue} - ${mainPart}` : mainPart;
445
+ } else historyPrompt = values.prompt || '';
446
+ } else historyPrompt = values.prompt || '';
447
+ const newHistoryItem = {
448
+ type: values.type,
449
+ prompt: historyPrompt,
450
+ params: values.params,
451
+ timestamp: Date.now()
452
+ };
453
+ addHistory(newHistoryItem);
454
+ onRun();
455
+ if (clearPromptAfterRun) {
456
+ lastHistoryRef.current = newHistoryItem;
457
+ setPromptValue('');
458
+ if (needsStructuredParams) {
459
+ const defaultParams = getDefaultParams();
460
+ form.setFieldValue('params', defaultParams);
461
+ } else form.setFieldValue('prompt', '');
462
+ }
463
+ }, [
464
+ form,
465
+ addHistory,
466
+ onRun,
467
+ needsStructuredParams,
468
+ selectedType,
469
+ clearPromptAfterRun,
470
+ actionSpace,
471
+ getDefaultParams
472
+ ]);
473
+ const handleKeyDown = useCallback((e)=>{
474
+ if ('Enter' === e.key && e.metaKey && isRunButtonEnabled) {
475
+ handleRunWithHistory();
476
+ e.preventDefault();
477
+ e.stopPropagation();
478
+ } else if ('Enter' === e.key) setTimeout(()=>{
479
+ if (textAreaRef.current) {
480
+ var _textAreaRef_current_resizableTextArea;
481
+ const textarea = null == (_textAreaRef_current_resizableTextArea = textAreaRef.current.resizableTextArea) ? void 0 : _textAreaRef_current_resizableTextArea.textArea;
482
+ if (textarea) {
483
+ const selectionStart = textarea.selectionStart;
484
+ const value = textarea.value;
485
+ const lastNewlineIndex = value.lastIndexOf('\n');
486
+ const isAtLastLine = -1 === lastNewlineIndex || selectionStart > lastNewlineIndex;
487
+ if (isAtLastLine) textarea.scrollTop = textarea.scrollHeight;
488
+ }
489
+ }
490
+ }, 0);
491
+ }, [
492
+ handleRunWithHistory,
493
+ isRunButtonEnabled
494
+ ]);
495
+ const handleStructuredKeyDown = useCallback((e)=>{
496
+ if ('Enter' === e.key && e.metaKey && isRunButtonEnabled) {
497
+ handleRunWithHistory();
498
+ e.preventDefault();
499
+ e.stopPropagation();
500
+ }
501
+ }, [
502
+ handleRunWithHistory,
503
+ isRunButtonEnabled
504
+ ]);
505
+ const renderStructuredParams = useCallback(()=>{
506
+ if (!needsStructuredParams) return null;
507
+ if (actionSpace) {
508
+ const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
509
+ if ((null == action ? void 0 : action.paramSchema) && isZodObjectSchema(action.paramSchema)) {
510
+ const schema = action.paramSchema;
511
+ const shape = schema.shape || {};
512
+ const schemaKeys = Object.keys(shape);
513
+ if (1 === schemaKeys.length) {
514
+ const key = schemaKeys[0];
515
+ const field = shape[key];
516
+ const { actualField } = unwrapZodType(field);
517
+ const isLocateFieldFlag = isLocateField(actualField);
518
+ const placeholderText = (()=>{
519
+ var _fieldWithRuntime__def;
520
+ const fieldWithRuntime = actualField;
521
+ if (null == (_fieldWithRuntime__def = fieldWithRuntime._def) ? void 0 : _fieldWithRuntime__def.description) return fieldWithRuntime._def.description;
522
+ if (fieldWithRuntime.description) return fieldWithRuntime.description;
523
+ if (actionSpace) {
524
+ const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
525
+ if ((null == action ? void 0 : action.paramSchema) && 'object' == typeof action.paramSchema && 'shape' in action.paramSchema) {
526
+ var _fieldDef__def;
527
+ const shape = action.paramSchema.shape || {};
528
+ const fieldDef = shape[key];
529
+ if (null == fieldDef ? void 0 : null == (_fieldDef__def = fieldDef._def) ? void 0 : _fieldDef__def.description) return fieldDef._def.description;
530
+ if (null == fieldDef ? void 0 : fieldDef.description) return fieldDef.description;
531
+ }
532
+ }
533
+ if (isLocateFieldFlag) return 'Describe the element you want to interact with';
534
+ if ('keyName' === key) return 'Enter key name or text to type';
535
+ if ('value' === key) return 'Enter text to input';
536
+ return `Enter ${key}`;
537
+ })();
538
+ return /*#__PURE__*/ jsx(Form.Item, {
539
+ name: [
540
+ 'params',
541
+ key
542
+ ],
543
+ style: {
544
+ margin: 0
545
+ },
546
+ children: /*#__PURE__*/ jsx(Input.TextArea, {
547
+ className: "main-side-console-input-textarea",
548
+ rows: 3,
549
+ placeholder: placeholderText,
550
+ autoFocus: true,
551
+ onKeyDown: handleStructuredKeyDown
552
+ })
553
+ });
554
+ }
555
+ const fields = [];
556
+ const sortedKeys = schemaKeys.sort((keyA, keyB)=>{
557
+ const fieldSchemaA = shape[keyA];
558
+ const fieldSchemaB = shape[keyB];
559
+ const { isOptional: isOptionalA } = unwrapZodType(fieldSchemaA);
560
+ const { isOptional: isOptionalB } = unwrapZodType(fieldSchemaB);
561
+ if (!isOptionalA && isOptionalB) return -1;
562
+ if (isOptionalA && !isOptionalB) return 1;
563
+ return 0;
564
+ });
565
+ sortedKeys.forEach((key, index)=>{
566
+ var _actualField__def, _actualField__def1, _actualField__def2;
567
+ const fieldSchema = shape[key];
568
+ const { actualField, isOptional } = unwrapZodType(fieldSchema);
569
+ const isLocateFieldFlag = isLocateField(actualField);
570
+ const label = key.charAt(0).toUpperCase() + key.slice(1);
571
+ const isRequired = !isOptional;
572
+ const marginBottom = index === sortedKeys.length - 1 ? 0 : 12;
573
+ const placeholder = (()=>{
574
+ var _fieldWithRuntime__def;
575
+ const fieldWithRuntime = actualField;
576
+ if (null == (_fieldWithRuntime__def = fieldWithRuntime._def) ? void 0 : _fieldWithRuntime__def.description) return fieldWithRuntime._def.description;
577
+ if (fieldWithRuntime.description) return fieldWithRuntime.description;
578
+ if (actionSpace) {
579
+ const action = actionSpace.find((a)=>a.interfaceAlias === selectedType || a.name === selectedType);
580
+ if ((null == action ? void 0 : action.paramSchema) && 'object' == typeof action.paramSchema && 'shape' in action.paramSchema) {
581
+ var _fieldDef__def;
582
+ const shape = action.paramSchema.shape || {};
583
+ const fieldDef = shape[key];
584
+ if (null == fieldDef ? void 0 : null == (_fieldDef__def = fieldDef._def) ? void 0 : _fieldDef__def.description) return fieldDef._def.description;
585
+ if (null == fieldDef ? void 0 : fieldDef.description) return fieldDef.description;
586
+ }
587
+ }
588
+ if (isLocateFieldFlag) return 'Describe the element you want to interact with';
589
+ })();
590
+ const fieldProps = {
591
+ name: key,
592
+ label,
593
+ fieldSchema: actualField,
594
+ isRequired,
595
+ marginBottom,
596
+ placeholder
597
+ };
598
+ if (isLocateFieldFlag) fields.push(/*#__PURE__*/ jsx(LocateField, _object_spread({}, fieldProps), key));
599
+ else if ((null == (_actualField__def = actualField._def) ? void 0 : _actualField__def.typeName) === 'ZodEnum') fields.push(/*#__PURE__*/ jsx(EnumField, _object_spread({}, fieldProps), key));
600
+ else if ((null == (_actualField__def1 = actualField._def) ? void 0 : _actualField__def1.typeName) === 'ZodNumber') fields.push(/*#__PURE__*/ jsx(NumberField, _object_spread({}, fieldProps), key));
601
+ else if ((null == (_actualField__def2 = actualField._def) ? void 0 : _actualField__def2.typeName) === 'ZodBoolean') fields.push(/*#__PURE__*/ jsx(BooleanField, _object_spread({}, fieldProps), key));
602
+ else fields.push(/*#__PURE__*/ jsx(TextField, _object_spread({}, fieldProps), key));
603
+ });
604
+ if ('aiScroll' === selectedType) {
605
+ const directionField = fields.find((field)=>/*#__PURE__*/ react.isValidElement(field) && 'direction' === field.props.name);
606
+ const distanceField = fields.find((field)=>/*#__PURE__*/ react.isValidElement(field) && 'distance' === field.props.name);
607
+ const otherFields = fields.filter((field)=>/*#__PURE__*/ react.isValidElement(field) && 'direction' !== field.props.name && 'distance' !== field.props.name);
608
+ if (directionField && distanceField) return /*#__PURE__*/ jsxs("div", {
609
+ className: "structured-params",
610
+ children: [
611
+ /*#__PURE__*/ jsxs("div", {
612
+ style: {
613
+ display: 'flex',
614
+ gap: 12,
615
+ marginBottom: 12
616
+ },
617
+ children: [
618
+ directionField,
619
+ distanceField
620
+ ]
621
+ }),
622
+ otherFields
623
+ ]
624
+ });
625
+ }
626
+ return /*#__PURE__*/ jsx("div", {
627
+ className: "structured-params",
628
+ children: fields
629
+ });
630
+ }
631
+ }
632
+ return null;
633
+ }, [
634
+ selectedType,
635
+ needsStructuredParams,
636
+ actionSpace,
637
+ handleStructuredKeyDown
638
+ ]);
639
+ const handleMouseEnter = useCallback(()=>{
640
+ setHoveringSettings(true);
641
+ }, []);
642
+ const handleMouseLeave = useCallback(()=>{
643
+ setHoveringSettings(false);
644
+ }, []);
645
+ const renderActionButton = useCallback(()=>{
646
+ const runButton = (text)=>/*#__PURE__*/ jsx(Button, {
647
+ type: "primary",
648
+ icon: /*#__PURE__*/ jsx(SendOutlined, {}),
649
+ style: {
650
+ borderRadius: 20,
651
+ zIndex: 999
652
+ },
653
+ onClick: handleRunWithHistory,
654
+ disabled: !isRunButtonEnabled,
655
+ loading: loading,
656
+ children: text
657
+ });
658
+ if (dryMode) return 'aiAct' === selectedType ? /*#__PURE__*/ jsx(Tooltip, {
659
+ title: "Start executing until some interaction actions need to be performed. You can see the process of planning and locating.",
660
+ children: runButton('Dry Run')
661
+ }) : runButton('Run');
662
+ if (stoppable) return /*#__PURE__*/ jsx(Button, {
663
+ icon: /*#__PURE__*/ jsx(BorderOutlined, {}),
664
+ onClick: onStop,
665
+ style: {
666
+ borderRadius: 20,
667
+ zIndex: 999
668
+ },
669
+ children: "Stop"
670
+ });
671
+ return runButton('Run');
672
+ }, [
673
+ dryMode,
674
+ loading,
675
+ handleRunWithHistory,
676
+ onStop,
677
+ isRunButtonEnabled,
678
+ selectedType,
679
+ stoppable
680
+ ]);
681
+ const renderMinimalActionButton = useCallback(()=>{
682
+ const runButton = (ariaLabel)=>/*#__PURE__*/ jsx(Button, {
683
+ "aria-label": ariaLabel,
684
+ className: "minimal-run-trigger",
685
+ type: "primary",
686
+ icon: /*#__PURE__*/ jsx(ArrowUpOutlined, {}),
687
+ onClick: handleRunWithHistory,
688
+ disabled: !isRunButtonEnabled,
689
+ loading: loading
690
+ });
691
+ if (dryMode) return 'aiAct' === selectedType ? /*#__PURE__*/ jsx(Tooltip, {
692
+ title: "Start executing until some interaction actions need to be performed. You can see the process of planning and locating.",
693
+ children: runButton('Dry run')
694
+ }) : runButton('Run');
695
+ if (stoppable) return /*#__PURE__*/ jsx(Button, {
696
+ "aria-label": "Stop running",
697
+ className: "minimal-run-trigger minimal-run-trigger-stop",
698
+ icon: /*#__PURE__*/ jsx(BorderOutlined, {}),
699
+ onClick: onStop
700
+ });
701
+ return runButton('Run');
702
+ }, [
703
+ dryMode,
704
+ loading,
705
+ handleRunWithHistory,
706
+ isRunButtonEnabled,
707
+ onStop,
708
+ selectedType,
709
+ stoppable
710
+ ]);
711
+ const inputContent = needsAnyInput ? needsStructuredParams ? minimalInlineFieldConfig ? /*#__PURE__*/ jsx(Form.Item, {
712
+ name: [
713
+ 'params',
714
+ minimalInlineFieldConfig.name
715
+ ],
716
+ style: {
717
+ margin: 0
718
+ },
719
+ children: /*#__PURE__*/ jsx(TextArea, {
720
+ className: "main-side-console-input-textarea",
721
+ disabled: !runButtonEnabled,
722
+ rows: 3,
723
+ placeholder: 'prompt' === minimalInlineFieldConfig.name ? resolvedPlaceholder : minimalInlineFieldConfig.placeholder,
724
+ autoFocus: true,
725
+ onKeyDown: handleStructuredKeyDown
726
+ })
727
+ }) : hasSingleStructuredParam ? renderStructuredParams() : /*#__PURE__*/ jsx("div", {
728
+ className: "structured-params-container",
729
+ children: renderStructuredParams()
730
+ }) : /*#__PURE__*/ jsx(Form.Item, {
731
+ name: "prompt",
732
+ style: {
733
+ margin: 0
734
+ },
735
+ children: /*#__PURE__*/ jsx(TextArea, {
736
+ className: "main-side-console-input-textarea",
737
+ disabled: !runButtonEnabled,
738
+ rows: 3,
739
+ placeholder: resolvedPlaceholder,
740
+ autoFocus: true,
741
+ onKeyDown: handleKeyDown,
742
+ onChange: handlePromptChange,
743
+ ref: textAreaRef
744
+ })
745
+ }) : /*#__PURE__*/ jsxs("div", {
746
+ className: "no-input-method",
747
+ children: [
748
+ 'Click "Run" to execute ',
749
+ actionNameForType(selectedType)
750
+ ]
751
+ });
752
+ const minimalActionIconSrc = null != (_ref = null == chrome ? void 0 : null == (_chrome_icons = chrome.icons) ? void 0 : _chrome_icons.action) ? _ref : STUDIO_MINIMAL_PROMPT_ICONS.action;
753
+ const minimalActionChevronSrc = null == chrome ? void 0 : null == (_chrome_icons1 = chrome.icons) ? void 0 : _chrome_icons1.actionChevron;
754
+ const minimalSettingsIconSrc = null != (_ref1 = null == chrome ? void 0 : null == (_chrome_icons2 = chrome.icons) ? void 0 : _chrome_icons2.settings) ? _ref1 : STUDIO_MINIMAL_PROMPT_ICONS.settings;
755
+ const minimalHistoryIconSrc = null == chrome ? void 0 : null == (_chrome_icons3 = chrome.icons) ? void 0 : _chrome_icons3.history;
756
+ if (isMinimalChrome) return /*#__PURE__*/ jsxs("div", {
757
+ className: "prompt-input-wrapper prompt-input-wrapper-minimal",
758
+ children: [
759
+ /*#__PURE__*/ jsx(Form.Item, {
760
+ hidden: true,
761
+ name: "type",
762
+ style: {
763
+ margin: 0
764
+ },
765
+ children: /*#__PURE__*/ jsx(Input, {})
766
+ }),
767
+ /*#__PURE__*/ jsxs("div", {
768
+ className: `main-side-console-input minimal-main-side-console-input ${!runButtonEnabled ? 'disabled' : ''} ${loading ? 'loading' : ''}`,
769
+ children: [
770
+ inputContent,
771
+ /*#__PURE__*/ jsxs("div", {
772
+ className: "minimal-toolbar-row",
773
+ children: [
774
+ /*#__PURE__*/ jsxs("div", {
775
+ className: "minimal-toolbar-left",
776
+ children: [
777
+ /*#__PURE__*/ jsx(Dropdown, {
778
+ menu: actionDropdownMenu,
779
+ placement: "topLeft",
780
+ trigger: [
781
+ 'click'
782
+ ],
783
+ disabled: !runButtonEnabled,
784
+ overlayClassName: "more-apis-dropdown",
785
+ children: /*#__PURE__*/ jsxs("button", {
786
+ "aria-label": `Select action type (current: ${actionButtonLabel})`,
787
+ className: "minimal-action-trigger",
788
+ disabled: !runButtonEnabled,
789
+ type: "button",
790
+ children: [
791
+ /*#__PURE__*/ jsx("img", {
792
+ alt: "",
793
+ className: "minimal-action-icon",
794
+ src: minimalActionIconSrc
795
+ }),
796
+ /*#__PURE__*/ jsx("span", {
797
+ className: "minimal-action-label",
798
+ children: actionButtonLabel
799
+ }),
800
+ minimalActionChevronSrc ? /*#__PURE__*/ jsx("img", {
801
+ alt: "",
802
+ className: "minimal-action-chevron",
803
+ src: minimalActionChevronSrc
804
+ }) : /*#__PURE__*/ jsx(action_chevron, {
805
+ "aria-hidden": "true",
806
+ className: "minimal-action-chevron",
807
+ focusable: "false"
808
+ })
809
+ ]
810
+ })
811
+ }),
812
+ hasConfigOptions ? /*#__PURE__*/ jsx("div", {
813
+ className: hoveringSettings ? 'settings-wrapper settings-wrapper-hover' : 'settings-wrapper',
814
+ onMouseEnter: handleMouseEnter,
815
+ onMouseLeave: handleMouseLeave,
816
+ children: /*#__PURE__*/ jsx(ConfigSelector, {
817
+ enableTracking: 'In-Browser-Extension' === serviceMode,
818
+ showDeepLocateOption: showDeepLocateOption,
819
+ showDeepThinkOption: showDeepThinkOption,
820
+ showDataExtractionOptions: showDataExtractionOptions,
821
+ hideDomAndScreenshotOptions: hideDomAndScreenshotOptions,
822
+ deviceType: deviceType,
823
+ popupPlacement: "topRight",
824
+ trigger: /*#__PURE__*/ jsx("button", {
825
+ "aria-label": "Open run configuration",
826
+ className: "minimal-icon-trigger",
827
+ type: "button",
828
+ children: /*#__PURE__*/ jsx("img", {
829
+ alt: "",
830
+ className: "minimal-toolbar-icon",
831
+ src: minimalSettingsIconSrc
832
+ })
833
+ })
834
+ })
835
+ }) : null,
836
+ /*#__PURE__*/ jsx(HistorySelector, {
837
+ onSelect: handleSelectHistory,
838
+ history: historyForSelectedType,
839
+ currentType: selectedType,
840
+ popupPlacement: "top",
841
+ trigger: /*#__PURE__*/ jsx("button", {
842
+ "aria-label": "Open prompt history",
843
+ className: "minimal-icon-trigger",
844
+ type: "button",
845
+ children: minimalHistoryIconSrc ? /*#__PURE__*/ jsx("img", {
846
+ alt: "",
847
+ className: "minimal-toolbar-icon minimal-toolbar-icon-history",
848
+ src: minimalHistoryIconSrc
849
+ }) : /*#__PURE__*/ jsx(prompt_history, {
850
+ "aria-hidden": "true",
851
+ className: "minimal-toolbar-icon minimal-toolbar-icon-history",
852
+ focusable: "false"
853
+ })
854
+ })
855
+ })
856
+ ]
857
+ }),
858
+ /*#__PURE__*/ jsx("div", {
859
+ className: "form-controller-wrapper",
860
+ children: renderMinimalActionButton()
861
+ })
862
+ ]
863
+ })
864
+ ]
865
+ })
866
+ ]
867
+ });
868
+ return /*#__PURE__*/ jsxs("div", {
869
+ className: "prompt-input-wrapper",
870
+ children: [
871
+ /*#__PURE__*/ jsxs("div", {
872
+ className: "mode-radio-group-wrapper",
873
+ children: [
874
+ /*#__PURE__*/ jsxs("div", {
875
+ className: "mode-radio-group",
876
+ ref: modeRadioGroupRef,
877
+ children: [
878
+ /*#__PURE__*/ jsx(Form.Item, {
879
+ name: "type",
880
+ style: {
881
+ margin: 0
882
+ },
883
+ children: /*#__PURE__*/ jsx(Radio.Group, {
884
+ buttonStyle: "solid",
885
+ disabled: !runButtonEnabled,
886
+ children: defaultMainButtons.map((apiType)=>{
887
+ var _apiMetadata_apiType;
888
+ return /*#__PURE__*/ jsx(Tooltip, {
889
+ title: (null == (_apiMetadata_apiType = apiMetadata[apiType]) ? void 0 : _apiMetadata_apiType.title) || '',
890
+ children: /*#__PURE__*/ jsx(Radio.Button, {
891
+ value: apiType,
892
+ children: actionNameForType(apiType)
893
+ })
894
+ }, apiType);
895
+ })
896
+ })
897
+ }),
898
+ /*#__PURE__*/ jsx(Dropdown, {
899
+ menu: moreApisDropdownMenu,
900
+ placement: "bottomLeft",
901
+ trigger: [
902
+ 'click'
903
+ ],
904
+ disabled: !runButtonEnabled,
905
+ overlayClassName: "more-apis-dropdown",
906
+ children: /*#__PURE__*/ jsxs(Button, {
907
+ className: `more-apis-button ${!defaultMainButtons.includes(selectedType) ? 'selected-from-dropdown' : ''}`,
908
+ children: [
909
+ selectedType && !defaultMainButtons.includes(selectedType) ? actionNameForType(selectedType) : 'more',
910
+ /*#__PURE__*/ jsx(DownOutlined, {
911
+ style: {
912
+ fontSize: '10px',
913
+ marginLeft: '2px'
914
+ }
915
+ })
916
+ ]
917
+ })
918
+ })
919
+ ]
920
+ }),
921
+ /*#__PURE__*/ jsxs("div", {
922
+ className: "action-icons",
923
+ children: [
924
+ hasConfigOptions && /*#__PURE__*/ jsx("div", {
925
+ className: hoveringSettings ? 'settings-wrapper settings-wrapper-hover' : 'settings-wrapper',
926
+ onMouseEnter: handleMouseEnter,
927
+ onMouseLeave: handleMouseLeave,
928
+ children: /*#__PURE__*/ jsx(ConfigSelector, {
929
+ enableTracking: 'In-Browser-Extension' === serviceMode,
930
+ showDeepLocateOption: showDeepLocateOption,
931
+ showDeepThinkOption: showDeepThinkOption,
932
+ showDataExtractionOptions: showDataExtractionOptions,
933
+ hideDomAndScreenshotOptions: hideDomAndScreenshotOptions,
934
+ deviceType: deviceType
935
+ })
936
+ }),
937
+ /*#__PURE__*/ jsx(HistorySelector, {
938
+ onSelect: handleSelectHistory,
939
+ history: historyForSelectedType,
940
+ currentType: selectedType
941
+ })
942
+ ]
943
+ })
944
+ ]
945
+ }),
946
+ /*#__PURE__*/ jsxs("div", {
947
+ className: `main-side-console-input ${!runButtonEnabled ? 'disabled' : ''} ${loading ? 'loading' : ''}`,
948
+ children: [
949
+ inputContent,
950
+ /*#__PURE__*/ jsx("div", {
951
+ className: "form-controller-wrapper",
952
+ children: renderActionButton()
953
+ })
954
+ ]
955
+ })
956
+ ]
957
+ });
958
+ };
959
+ export { PromptInput };