@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.
- package/LICENSE +21 -0
- package/README.md +9 -0
- package/dist/es/component/blackboard/highlights.mjs +47 -0
- package/dist/es/component/blackboard/index.css +118 -0
- package/dist/es/component/blackboard/index.mjs +122 -0
- package/dist/es/component/config-selector/index.mjs +251 -0
- package/dist/es/component/context-preview/index.mjs +37 -0
- package/dist/es/component/env-config/index.mjs +237 -0
- package/dist/es/component/env-config-reminder/index.css +30 -0
- package/dist/es/component/env-config-reminder/index.mjs +27 -0
- package/dist/es/component/form-field/index.mjs +158 -0
- package/dist/es/component/history-selector/index.css +237 -0
- package/dist/es/component/history-selector/index.mjs +197 -0
- package/dist/es/component/index.mjs +1 -0
- package/dist/es/component/logo/index.css +19 -0
- package/dist/es/component/logo/index.mjs +20 -0
- package/dist/es/component/logo/logo.mjs +2 -0
- package/dist/es/component/misc/index.mjs +96 -0
- package/dist/es/component/nav-actions/index.mjs +14 -0
- package/dist/es/component/nav-actions/style.css +35 -0
- package/dist/es/component/player/index.css +296 -0
- package/dist/es/component/player/index.mjs +702 -0
- package/dist/es/component/player/playback-controls.mjs +4 -0
- package/dist/es/component/player/report-download.mjs +61 -0
- package/dist/es/component/player/scenes/StepScene.mjs +194 -0
- package/dist/es/component/player/scenes/derive-frame-state.mjs +229 -0
- package/dist/es/component/player/scenes/export-branded-video.mjs +360 -0
- package/dist/es/component/player/scenes/frame-calculator.mjs +149 -0
- package/dist/es/component/player/scenes/playback-frame.mjs +6 -0
- package/dist/es/component/player/scenes/playback-layout.mjs +12 -0
- package/dist/es/component/player/scenes/pointer-layout.mjs +36 -0
- package/dist/es/component/player/use-frame-player.mjs +87 -0
- package/dist/es/component/playground/index.css +930 -0
- package/dist/es/component/playground/playground-demo-ui-context.json +290 -0
- package/dist/es/component/playground-result/index.css +92 -0
- package/dist/es/component/playground-result/index.mjs +232 -0
- package/dist/es/component/prompt-input/index.css +832 -0
- package/dist/es/component/prompt-input/index.mjs +959 -0
- package/dist/es/component/screenshot-viewer/index.css +237 -0
- package/dist/es/component/screenshot-viewer/index.mjs +319 -0
- package/dist/es/component/service-mode-control/index.mjs +107 -0
- package/dist/es/component/shiny-text/index.css +107 -0
- package/dist/es/component/shiny-text/index.mjs +15 -0
- package/dist/es/component/universal-playground/empty-state.mjs +5 -0
- package/dist/es/component/universal-playground/index.css +619 -0
- package/dist/es/component/universal-playground/index.mjs +558 -0
- package/dist/es/component/universal-playground/providers/context-provider.mjs +90 -0
- package/dist/es/component/universal-playground/providers/indexeddb-storage-provider.mjs +280 -0
- package/dist/es/component/universal-playground/providers/storage-provider.mjs +279 -0
- package/dist/es/component/universal-playground/universal-playground-electron.mjs +668 -0
- package/dist/es/hooks/useMinimalTypeGate.mjs +47 -0
- package/dist/es/hooks/usePlaygroundExecution.mjs +435 -0
- package/dist/es/hooks/usePlaygroundState.mjs +278 -0
- package/dist/es/hooks/useSafeOverrideAIConfig.mjs +20 -0
- package/dist/es/hooks/useServerValid.mjs +55 -0
- package/dist/es/hooks/useTheme.mjs +25 -0
- package/dist/es/icons/action-chevron.mjs +61 -0
- package/dist/es/icons/avatar.mjs +70 -0
- package/dist/es/icons/close.mjs +61 -0
- package/dist/es/icons/global-perspective.mjs +58 -0
- package/dist/es/icons/history.mjs +72 -0
- package/dist/es/icons/magnifying-glass.mjs +81 -0
- package/dist/es/icons/player-setting.mjs +68 -0
- package/dist/es/icons/prompt-history.mjs +70 -0
- package/dist/es/icons/setting.mjs +62 -0
- package/dist/es/icons/show-marker.mjs +58 -0
- package/dist/es/index.mjs +26 -0
- package/dist/es/static/image/logo.png +0 -0
- package/dist/es/store/history.mjs +128 -0
- package/dist/es/store/store.mjs +277 -0
- package/dist/es/types.mjs +73 -0
- package/dist/es/utils/action-label.mjs +15 -0
- package/dist/es/utils/color.mjs +35 -0
- package/dist/es/utils/constants.mjs +99 -0
- package/dist/es/utils/device-capabilities.mjs +13 -0
- package/dist/es/utils/empty-state-scroll.mjs +8 -0
- package/dist/es/utils/highlight-element.mjs +62 -0
- package/dist/es/utils/index.mjs +13 -0
- package/dist/es/utils/playground-utils.mjs +43 -0
- package/dist/es/utils/progress-action-icon.mjs +30 -0
- package/dist/es/utils/prompt-input-utils.mjs +49 -0
- package/dist/es/utils/prompt-placeholder.mjs +19 -0
- package/dist/es/utils/replay-scripts.mjs +428 -0
- package/dist/lib/component/blackboard/highlights.js +84 -0
- package/dist/lib/component/blackboard/index.css +118 -0
- package/dist/lib/component/blackboard/index.js +169 -0
- package/dist/lib/component/config-selector/index.js +295 -0
- package/dist/lib/component/context-preview/index.js +82 -0
- package/dist/lib/component/env-config/index.js +271 -0
- package/dist/lib/component/env-config-reminder/index.css +30 -0
- package/dist/lib/component/env-config-reminder/index.js +61 -0
- package/dist/lib/component/form-field/index.js +204 -0
- package/dist/lib/component/history-selector/index.css +237 -0
- package/dist/lib/component/history-selector/index.js +243 -0
- package/dist/lib/component/index.js +58 -0
- package/dist/lib/component/logo/index.css +19 -0
- package/dist/lib/component/logo/index.js +67 -0
- package/dist/lib/component/logo/logo.js +24 -0
- package/dist/lib/component/misc/index.js +152 -0
- package/dist/lib/component/nav-actions/index.js +48 -0
- package/dist/lib/component/nav-actions/style.css +35 -0
- package/dist/lib/component/player/index.css +296 -0
- package/dist/lib/component/player/index.js +747 -0
- package/dist/lib/component/player/playback-controls.js +38 -0
- package/dist/lib/component/player/report-download.js +98 -0
- package/dist/lib/component/player/scenes/StepScene.js +228 -0
- package/dist/lib/component/player/scenes/derive-frame-state.js +266 -0
- package/dist/lib/component/player/scenes/export-branded-video.js +403 -0
- package/dist/lib/component/player/scenes/frame-calculator.js +186 -0
- package/dist/lib/component/player/scenes/playback-frame.js +40 -0
- package/dist/lib/component/player/scenes/playback-layout.js +46 -0
- package/dist/lib/component/player/scenes/pointer-layout.js +88 -0
- package/dist/lib/component/player/use-frame-player.js +121 -0
- package/dist/lib/component/playground/index.css +930 -0
- package/dist/lib/component/playground/playground-demo-ui-context.json +290 -0
- package/dist/lib/component/playground-result/index.css +92 -0
- package/dist/lib/component/playground-result/index.js +276 -0
- package/dist/lib/component/prompt-input/index.css +832 -0
- package/dist/lib/component/prompt-input/index.js +1005 -0
- package/dist/lib/component/screenshot-viewer/index.css +237 -0
- package/dist/lib/component/screenshot-viewer/index.js +353 -0
- package/dist/lib/component/service-mode-control/index.js +141 -0
- package/dist/lib/component/shiny-text/index.css +107 -0
- package/dist/lib/component/shiny-text/index.js +49 -0
- package/dist/lib/component/universal-playground/empty-state.js +39 -0
- package/dist/lib/component/universal-playground/index.css +619 -0
- package/dist/lib/component/universal-playground/index.js +607 -0
- package/dist/lib/component/universal-playground/providers/context-provider.js +133 -0
- package/dist/lib/component/universal-playground/providers/indexeddb-storage-provider.js +320 -0
- package/dist/lib/component/universal-playground/providers/storage-provider.js +337 -0
- package/dist/lib/component/universal-playground/universal-playground-electron.js +717 -0
- package/dist/lib/hooks/useMinimalTypeGate.js +81 -0
- package/dist/lib/hooks/usePlaygroundExecution.js +478 -0
- package/dist/lib/hooks/usePlaygroundState.js +312 -0
- package/dist/lib/hooks/useSafeOverrideAIConfig.js +57 -0
- package/dist/lib/hooks/useServerValid.js +89 -0
- package/dist/lib/hooks/useTheme.js +59 -0
- package/dist/lib/icons/action-chevron.js +95 -0
- package/dist/lib/icons/avatar.js +104 -0
- package/dist/lib/icons/close.js +95 -0
- package/dist/lib/icons/global-perspective.js +92 -0
- package/dist/lib/icons/history.js +106 -0
- package/dist/lib/icons/magnifying-glass.js +115 -0
- package/dist/lib/icons/player-setting.js +102 -0
- package/dist/lib/icons/prompt-history.js +104 -0
- package/dist/lib/icons/setting.js +96 -0
- package/dist/lib/icons/show-marker.js +92 -0
- package/dist/lib/index.js +204 -0
- package/dist/lib/static/image/logo.png +0 -0
- package/dist/lib/store/history.js +135 -0
- package/dist/lib/store/store.js +287 -0
- package/dist/lib/types.js +119 -0
- package/dist/lib/utils/action-label.js +52 -0
- package/dist/lib/utils/color.js +75 -0
- package/dist/lib/utils/constants.js +172 -0
- package/dist/lib/utils/device-capabilities.js +50 -0
- package/dist/lib/utils/empty-state-scroll.js +42 -0
- package/dist/lib/utils/highlight-element.js +99 -0
- package/dist/lib/utils/index.js +69 -0
- package/dist/lib/utils/playground-utils.js +86 -0
- package/dist/lib/utils/progress-action-icon.js +67 -0
- package/dist/lib/utils/prompt-input-utils.js +89 -0
- package/dist/lib/utils/prompt-placeholder.js +53 -0
- package/dist/lib/utils/replay-scripts.js +474 -0
- package/dist/types/component/blackboard/highlights.d.ts +11 -0
- package/dist/types/component/blackboard/index.d.ts +10 -0
- package/dist/types/component/config-selector/index.d.ts +15 -0
- package/dist/types/component/context-preview/index.d.ts +9 -0
- package/dist/types/component/env-config/index.d.ts +8 -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 +13 -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 +12 -0
- package/dist/types/component/player/index.d.ts +15 -0
- package/dist/types/component/player/playback-controls.d.ts +1 -0
- package/dist/types/component/player/report-download.d.ts +32 -0
- package/dist/types/component/player/scenes/StepScene.d.ts +9 -0
- package/dist/types/component/player/scenes/derive-frame-state.d.ts +40 -0
- package/dist/types/component/player/scenes/export-branded-video.d.ts +33 -0
- package/dist/types/component/player/scenes/frame-calculator.d.ts +40 -0
- package/dist/types/component/player/scenes/playback-frame.d.ts +3 -0
- package/dist/types/component/player/scenes/playback-layout.d.ts +7 -0
- package/dist/types/component/player/scenes/pointer-layout.d.ts +20 -0
- package/dist/types/component/player/use-frame-player.d.ts +17 -0
- package/dist/types/component/playground-result/index.d.ts +22 -0
- package/dist/types/component/prompt-input/index.d.ts +23 -0
- package/dist/types/component/screenshot-viewer/index.d.ts +23 -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/empty-state.d.ts +3 -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/component/universal-playground/universal-playground-electron.d.ts +4 -0
- package/dist/types/hooks/useMinimalTypeGate.d.ts +72 -0
- package/dist/types/hooks/usePlaygroundExecution.d.ts +40 -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/hooks/useTheme.d.ts +7 -0
- package/dist/types/index.d.ts +29 -0
- package/dist/types/store/history.d.ts +16 -0
- package/dist/types/store/store.d.ts +57 -0
- package/dist/types/types.d.ts +278 -0
- package/dist/types/utils/action-label.d.ts +11 -0
- package/dist/types/utils/color.d.ts +4 -0
- package/dist/types/utils/constants.d.ts +80 -0
- package/dist/types/utils/device-capabilities.d.ts +9 -0
- package/dist/types/utils/empty-state-scroll.d.ts +11 -0
- package/dist/types/utils/highlight-element.d.ts +3 -0
- package/dist/types/utils/index.d.ts +5 -0
- package/dist/types/utils/playground-utils.d.ts +11 -0
- package/dist/types/utils/progress-action-icon.d.ts +12 -0
- package/dist/types/utils/prompt-input-utils.d.ts +24 -0
- package/dist/types/utils/prompt-placeholder.d.ts +1 -0
- package/dist/types/utils/replay-scripts.d.ts +50 -0
- package/package.json +82 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { DeviceAction, ExecutionDump, IExecutionDump, IReportActionDump } from '@godscene/core';
|
|
2
|
+
import type { FormValue, InfoListItem, PlaygroundSDKLike, StorageProvider } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Format error object to string
|
|
5
|
+
*/
|
|
6
|
+
export declare function formatError(error: any): string;
|
|
7
|
+
/**
|
|
8
|
+
* Build progress content string from task information
|
|
9
|
+
* @param task - The execution task to build content from
|
|
10
|
+
* @returns Formatted content string with action and optional description
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildProgressContent(task: any): string;
|
|
13
|
+
/**
|
|
14
|
+
* Convert ExecutionDump to ReportActionDump for replay scripts
|
|
15
|
+
* @param dump - The execution dump containing tasks and their usage information
|
|
16
|
+
* @returns A grouped action dump with model briefs and executions array
|
|
17
|
+
*/
|
|
18
|
+
export declare function wrapExecutionDumpForReplay(dump: ExecutionDump | IExecutionDump, deviceType?: string): IReportActionDump;
|
|
19
|
+
export interface UsePlaygroundExecutionOptions {
|
|
20
|
+
playgroundSDK: PlaygroundSDKLike | null;
|
|
21
|
+
storage: StorageProvider | undefined | null;
|
|
22
|
+
actionSpace: DeviceAction<unknown>[];
|
|
23
|
+
loading: boolean;
|
|
24
|
+
setLoading: (loading: boolean) => void;
|
|
25
|
+
setInfoList: React.Dispatch<React.SetStateAction<InfoListItem[]>>;
|
|
26
|
+
replayCounter: number;
|
|
27
|
+
setReplayCounter: React.Dispatch<React.SetStateAction<number>>;
|
|
28
|
+
verticalMode: boolean;
|
|
29
|
+
currentRunningIdRef: React.MutableRefObject<number | null>;
|
|
30
|
+
interruptedFlagRef: React.MutableRefObject<Record<number, boolean>>;
|
|
31
|
+
deviceType?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Hook for handling playground execution logic
|
|
35
|
+
*/
|
|
36
|
+
export declare function usePlaygroundExecution(options: UsePlaygroundExecutionOptions): {
|
|
37
|
+
handleRun: (value: FormValue) => Promise<any>;
|
|
38
|
+
handleStop: () => Promise<void>;
|
|
39
|
+
canStop: boolean;
|
|
40
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { DeviceAction, UIContext } from '@godscene/core';
|
|
2
|
+
import type { ContextProvider, InfoListItem, PlaygroundSDKLike, StorageProvider } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Hook for managing playground state
|
|
5
|
+
*/
|
|
6
|
+
export declare function usePlaygroundState(playgroundSDK: PlaygroundSDKLike | null, storage?: StorageProvider | null, contextProvider?: ContextProvider, targetName?: string): {
|
|
7
|
+
loading: boolean;
|
|
8
|
+
setLoading: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
9
|
+
infoList: InfoListItem[];
|
|
10
|
+
setInfoList: import("react").Dispatch<import("react").SetStateAction<InfoListItem[]>>;
|
|
11
|
+
actionSpace: DeviceAction<unknown, any>[];
|
|
12
|
+
actionSpaceLoading: boolean;
|
|
13
|
+
uiContextPreview: UIContext | undefined;
|
|
14
|
+
setUiContextPreview: import("react").Dispatch<import("react").SetStateAction<UIContext | undefined>>;
|
|
15
|
+
showScrollToBottomButton: boolean;
|
|
16
|
+
verticalMode: boolean;
|
|
17
|
+
replayCounter: number;
|
|
18
|
+
setReplayCounter: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
19
|
+
infoListRef: import("react").RefObject<HTMLDivElement>;
|
|
20
|
+
currentRunningIdRef: import("react").MutableRefObject<number | null>;
|
|
21
|
+
interruptedFlagRef: import("react").MutableRefObject<Record<number, boolean>>;
|
|
22
|
+
clearInfoList: () => Promise<void>;
|
|
23
|
+
refreshContext: () => Promise<void>;
|
|
24
|
+
handleScrollToBottom: () => void;
|
|
25
|
+
scrollToBottom: () => void;
|
|
26
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { GLOBAL_ENV_KEYS, MODEL_ENV_KEYS } from '@godscene/shared/env';
|
|
2
|
+
/**
|
|
3
|
+
* Safely override AI configuration with built-in error handling
|
|
4
|
+
* @param newConfig - The configuration to override
|
|
5
|
+
* @param extendMode - Whether to extend or replace the config (default: false)
|
|
6
|
+
* @param showErrorMessage - Whether to show error message in UI (default: true)
|
|
7
|
+
* @returns boolean indicating success
|
|
8
|
+
*/
|
|
9
|
+
export declare function safeOverrideAIConfig(newConfig: Partial<Record<(typeof GLOBAL_ENV_KEYS)[number] | (typeof MODEL_ENV_KEYS)[number], string>>, extendMode?: boolean, showErrorMessage?: boolean): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* React Hook for safely overriding AI config with error handling
|
|
12
|
+
* Useful for components that need to handle config changes
|
|
13
|
+
*/
|
|
14
|
+
export declare function useSafeOverrideAIConfig(): {
|
|
15
|
+
applyConfig: (newConfig: Partial<Record<(typeof GLOBAL_ENV_KEYS)[number] | (typeof MODEL_ENV_KEYS)[number], string>>, extendMode?: boolean, showErrorMessage?: boolean) => boolean;
|
|
16
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useServerValid: (shouldRun?: boolean) => boolean;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export { type AnimationScript, type DumpMetaInfo, type ReplayScriptsInfo, allScriptsFromDump, extractDumpMetaInfo, generateAnimationScripts, } from './utils/replay-scripts';
|
|
2
|
+
export { useEnvConfig, useGlobalPreference } from './store/store';
|
|
3
|
+
export { colorForName, highlightColorForType, globalThemeConfig, } from './utils/color';
|
|
4
|
+
export { EnvConfig } from './component/env-config';
|
|
5
|
+
export { EnvConfigReminder } from './component/env-config-reminder';
|
|
6
|
+
export { NavActions } from './component/nav-actions';
|
|
7
|
+
export type { NavActionsProps } from './component/nav-actions';
|
|
8
|
+
export { Logo } from './component/logo';
|
|
9
|
+
export { iconForStatus, timeCostStrElement } from './component/misc';
|
|
10
|
+
export { useTheme } from './hooks/useTheme';
|
|
11
|
+
export { useServerValid } from './hooks/useServerValid';
|
|
12
|
+
export { useSafeOverrideAIConfig, safeOverrideAIConfig, } from './hooks/useSafeOverrideAIConfig';
|
|
13
|
+
export { PlaygroundResultView } from './component/playground-result';
|
|
14
|
+
export type { PlaygroundResult } from './types';
|
|
15
|
+
export { ServiceModeControl } from './component/service-mode-control';
|
|
16
|
+
export { ContextPreview } from './component/context-preview';
|
|
17
|
+
export { PromptInput } from './component/prompt-input';
|
|
18
|
+
export { Player } from './component/player';
|
|
19
|
+
export { Blackboard } from './component/blackboard';
|
|
20
|
+
export { default as ScreenshotViewer } from './component/screenshot-viewer';
|
|
21
|
+
export type { ScreenshotViewerMode } from './component/screenshot-viewer';
|
|
22
|
+
export { actionNameForType, staticAgentFromContext, getPlaceholderForType, } from './utils/playground-utils';
|
|
23
|
+
export { timeStr, filterBase64Value } from './utils';
|
|
24
|
+
export { default as ShinyText } from './component/shiny-text';
|
|
25
|
+
export { UniversalPlayground, default as UniversalPlaygroundDefault, } from './component/universal-playground';
|
|
26
|
+
export { UniversalPlaygroundElectron, } from './component/universal-playground/universal-playground-electron';
|
|
27
|
+
export type { UniversalPlaygroundProps, PlaygroundSDKLike, StorageProvider, ContextProvider, UniversalPlaygroundConfig, PlaygroundBranding, InfoListItem, FormValue, ExecutionOptions, ProgressCallback, DeviceType, ExecutionUxHint, ExecutionUxConfig, PromptInputChromeConfig, ReportDownloadHandler, ReportDownloadRequest, } from './types';
|
|
28
|
+
export { LocalStorageProvider, MemoryStorageProvider, NoOpStorageProvider, IndexedDBStorageProvider, createStorageProvider, detectBestStorageType, StorageType, } from './component/universal-playground/providers/storage-provider';
|
|
29
|
+
export { BaseContextProvider, AgentContextProvider, StaticContextProvider, NoOpContextProvider, } from './component/universal-playground/providers/context-provider';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as Z from 'zustand';
|
|
2
|
+
export interface HistoryItem {
|
|
3
|
+
type: string;
|
|
4
|
+
prompt: string;
|
|
5
|
+
params?: Record<string, any>;
|
|
6
|
+
timestamp: number;
|
|
7
|
+
}
|
|
8
|
+
export type HistoryState = Record<string, HistoryItem[]>;
|
|
9
|
+
export declare const useHistoryStore: Z.UseBoundStore<Z.StoreApi<{
|
|
10
|
+
history: HistoryState;
|
|
11
|
+
lastSelectedType: string;
|
|
12
|
+
clearHistory: (type: string) => void;
|
|
13
|
+
addHistory: (historyItem: HistoryItem) => void;
|
|
14
|
+
getHistoryForType: (type: string) => HistoryItem[];
|
|
15
|
+
setLastSelectedType: (type: string) => void;
|
|
16
|
+
}>>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as Z from 'zustand';
|
|
2
|
+
export type PlaybackSpeedType = 0.5 | 1 | 1.5 | 2;
|
|
3
|
+
export declare const useGlobalPreference: Z.UseBoundStore<Z.StoreApi<{
|
|
4
|
+
backgroundVisible: boolean;
|
|
5
|
+
elementsVisible: boolean;
|
|
6
|
+
autoZoom: boolean;
|
|
7
|
+
modelCallDetailsEnabled: boolean;
|
|
8
|
+
darkModeEnabled: boolean;
|
|
9
|
+
playbackSpeed: PlaybackSpeedType;
|
|
10
|
+
subtitleEnabled: boolean;
|
|
11
|
+
setBackgroundVisible: (visible: boolean) => void;
|
|
12
|
+
setElementsVisible: (visible: boolean) => void;
|
|
13
|
+
setAutoZoom: (enabled: boolean) => void;
|
|
14
|
+
setModelCallDetailsEnabled: (enabled: boolean) => void;
|
|
15
|
+
setDarkModeEnabled: (enabled: boolean) => void;
|
|
16
|
+
setPlaybackSpeed: (speed: PlaybackSpeedType) => void;
|
|
17
|
+
setSubtitleEnabled: (enabled: boolean) => void;
|
|
18
|
+
}>>;
|
|
19
|
+
/**
|
|
20
|
+
* Service Mode
|
|
21
|
+
*
|
|
22
|
+
* - Server: use a node server to run the code
|
|
23
|
+
* - In-Browser: use browser's fetch API to run the code
|
|
24
|
+
* - In-Browser-Extension: use browser's fetch API to run the code, but the page is running in the extension context
|
|
25
|
+
*/
|
|
26
|
+
export type ServiceModeType = 'Server' | 'In-Browser' | 'In-Browser-Extension';
|
|
27
|
+
export type ImeStrategyType = 'always-yadb' | 'yadb-for-non-ascii';
|
|
28
|
+
export type KeyboardDismissStrategyType = 'esc-first' | 'back-first';
|
|
29
|
+
export declare const useEnvConfig: Z.UseBoundStore<Z.StoreApi<{
|
|
30
|
+
serviceMode: ServiceModeType;
|
|
31
|
+
setServiceMode: (serviceMode: ServiceModeType) => void;
|
|
32
|
+
config: Record<string, string>;
|
|
33
|
+
configString: string;
|
|
34
|
+
setConfig: (config: Record<string, string>) => void;
|
|
35
|
+
loadConfig: (configString: string) => void;
|
|
36
|
+
syncFromStorage: () => void;
|
|
37
|
+
forceSameTabNavigation: boolean;
|
|
38
|
+
setForceSameTabNavigation: (forceSameTabNavigation: boolean) => void;
|
|
39
|
+
deepLocate: boolean;
|
|
40
|
+
setDeepLocate: (deepLocate: boolean) => void;
|
|
41
|
+
deepThink: boolean | "unset";
|
|
42
|
+
setDeepThink: (deepThink: boolean | "unset") => void;
|
|
43
|
+
screenshotIncluded: boolean;
|
|
44
|
+
setScreenshotIncluded: (screenshotIncluded: boolean) => void;
|
|
45
|
+
domIncluded: boolean | "visible-only";
|
|
46
|
+
setDomIncluded: (domIncluded: boolean | "visible-only") => void;
|
|
47
|
+
popupTab: "playground" | "bridge" | "recorder";
|
|
48
|
+
setPopupTab: (tab: "playground" | "bridge" | "recorder") => void;
|
|
49
|
+
imeStrategy: ImeStrategyType;
|
|
50
|
+
setImeStrategy: (imeStrategy: ImeStrategyType) => void;
|
|
51
|
+
autoDismissKeyboard: boolean;
|
|
52
|
+
setAutoDismissKeyboard: (autoDismissKeyboard: boolean) => void;
|
|
53
|
+
keyboardDismissStrategy: KeyboardDismissStrategyType;
|
|
54
|
+
setKeyboardDismissStrategy: (keyboardDismissStrategy: KeyboardDismissStrategyType) => void;
|
|
55
|
+
alwaysRefreshScreenInfo: boolean;
|
|
56
|
+
setAlwaysRefreshScreenInfo: (alwaysRefreshScreenInfo: boolean) => void;
|
|
57
|
+
}>>;
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import type { ConnectivityTestResult, DeviceAction, ModelBrief, UIContext } from '@godscene/core';
|
|
2
|
+
import type { ComponentType, ReactNode } from 'react';
|
|
3
|
+
export interface ZodType {
|
|
4
|
+
_def?: {
|
|
5
|
+
typeName: 'ZodOptional' | 'ZodDefault' | 'ZodNullable' | 'ZodObject' | 'ZodEnum' | 'ZodNumber' | 'ZodString' | 'ZodBoolean';
|
|
6
|
+
innerType?: ZodType;
|
|
7
|
+
defaultValue?: () => unknown;
|
|
8
|
+
_serializedDefaultValue?: unknown;
|
|
9
|
+
shape?: (() => Record<string, ZodType>) | Record<string, ZodType>;
|
|
10
|
+
values?: string[];
|
|
11
|
+
description?: string;
|
|
12
|
+
};
|
|
13
|
+
description?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ZodObjectSchema extends ZodType {
|
|
16
|
+
shape: Record<string, ZodType>;
|
|
17
|
+
parse: (data: unknown) => unknown;
|
|
18
|
+
}
|
|
19
|
+
export interface ZodEnumSchema extends ZodType {
|
|
20
|
+
_def: {
|
|
21
|
+
typeName: 'ZodEnum';
|
|
22
|
+
values: string[];
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface ZodNumberSchema extends ZodType {
|
|
26
|
+
_def: {
|
|
27
|
+
typeName: 'ZodNumber';
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface ZodBooleanSchema extends ZodType {
|
|
31
|
+
_def: {
|
|
32
|
+
typeName: 'ZodBoolean';
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export interface ZodRuntimeAccess extends ZodType {
|
|
36
|
+
shape?: Record<string, ZodType>;
|
|
37
|
+
description?: string;
|
|
38
|
+
typeName?: string;
|
|
39
|
+
type?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface ActionSpaceItem extends Omit<DeviceAction<any>, 'paramSchema'> {
|
|
42
|
+
paramSchema?: ZodObjectSchema;
|
|
43
|
+
}
|
|
44
|
+
export interface FormParams {
|
|
45
|
+
[key: string]: string | number | boolean | null | undefined;
|
|
46
|
+
}
|
|
47
|
+
export declare const VALIDATION_CONSTANTS: {
|
|
48
|
+
readonly ZOD_TYPES: {
|
|
49
|
+
readonly OPTIONAL: "ZodOptional";
|
|
50
|
+
readonly DEFAULT: "ZodDefault";
|
|
51
|
+
readonly NULLABLE: "ZodNullable";
|
|
52
|
+
readonly OBJECT: "ZodObject";
|
|
53
|
+
readonly ENUM: "ZodEnum";
|
|
54
|
+
readonly NUMBER: "ZodNumber";
|
|
55
|
+
readonly STRING: "ZodString";
|
|
56
|
+
readonly BOOLEAN: "ZodBoolean";
|
|
57
|
+
};
|
|
58
|
+
readonly FIELD_FLAGS: {
|
|
59
|
+
readonly LOCATION: "midscene_location_field_flag";
|
|
60
|
+
};
|
|
61
|
+
readonly DEFAULT_VALUES: {
|
|
62
|
+
readonly ACTION_TYPE: "aiAct";
|
|
63
|
+
readonly TIMEOUT_MS: 15000;
|
|
64
|
+
readonly CHECK_INTERVAL_MS: 3000;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
export declare const isZodObjectSchema: (schema: unknown) => schema is ZodObjectSchema;
|
|
68
|
+
export declare const isLocateField: (field: ZodType) => boolean;
|
|
69
|
+
export declare const unwrapZodType: (field: ZodType) => {
|
|
70
|
+
actualField: ZodType;
|
|
71
|
+
isOptional: boolean;
|
|
72
|
+
hasDefault: boolean;
|
|
73
|
+
};
|
|
74
|
+
export declare const extractDefaultValue: (field: ZodType) => unknown;
|
|
75
|
+
import type { ExecutionDump, IExecutionDump } from '@godscene/core';
|
|
76
|
+
import type { BeforeActionHook, ExecutionOptions, PlaygroundAgent, PlaygroundRuntimeInfo } from '@godscene/playground';
|
|
77
|
+
export interface PlaygroundResult {
|
|
78
|
+
result: any;
|
|
79
|
+
dump?: ExecutionDump | IExecutionDump | null;
|
|
80
|
+
reportHTML?: string | null;
|
|
81
|
+
error: string | null;
|
|
82
|
+
}
|
|
83
|
+
export interface PlaygroundProps {
|
|
84
|
+
getAgent: (forceSameTabNavigation?: boolean) => PlaygroundAgent | null;
|
|
85
|
+
hideLogo?: boolean;
|
|
86
|
+
showContextPreview?: boolean;
|
|
87
|
+
dryMode?: boolean;
|
|
88
|
+
}
|
|
89
|
+
export interface StaticPlaygroundProps {
|
|
90
|
+
context: UIContext | null;
|
|
91
|
+
}
|
|
92
|
+
export type ServiceModeType = 'Server' | 'In-Browser' | 'In-Browser-Extension';
|
|
93
|
+
export type DeviceType = 'web' | 'android' | 'ios' | 'harmony' | 'computer';
|
|
94
|
+
export type ExecutionUxHint = 'countdown-before-run';
|
|
95
|
+
export type RunType = 'aiAct' | 'aiQuery' | 'aiAssert' | 'aiTap' | 'aiDoubleClick' | 'aiHover' | 'aiInput' | 'aiRightClick' | 'aiKeyboardPress' | 'aiScroll' | 'aiLocate' | 'aiBoolean' | 'aiNumber' | 'aiString' | 'aiAsk' | 'aiWaitFor';
|
|
96
|
+
export interface ReplayScriptsInfo {
|
|
97
|
+
scripts: any[];
|
|
98
|
+
width?: number;
|
|
99
|
+
height?: number;
|
|
100
|
+
sdkVersion?: string;
|
|
101
|
+
modelBriefs: ModelBrief[];
|
|
102
|
+
}
|
|
103
|
+
export interface FormValue {
|
|
104
|
+
type: string;
|
|
105
|
+
prompt?: string;
|
|
106
|
+
params?: Record<string, unknown>;
|
|
107
|
+
}
|
|
108
|
+
export type { ExecutionOptions };
|
|
109
|
+
export type ProgressCallback = (step: string, status?: 'loading' | 'completed' | 'error') => void;
|
|
110
|
+
export interface PlaygroundSDKLike {
|
|
111
|
+
executeAction(actionType: string, value: FormValue, options: ExecutionOptions): Promise<unknown>;
|
|
112
|
+
getActionSpace(context?: any): Promise<DeviceAction<unknown>[]>;
|
|
113
|
+
onProgressUpdate?: (callback: ProgressCallback) => void;
|
|
114
|
+
onDumpUpdate?: (callback: (dump: string, executionDump?: ExecutionDump) => void) => void;
|
|
115
|
+
cancelExecution?(requestId: string): Promise<{
|
|
116
|
+
dump: ExecutionDump | null;
|
|
117
|
+
reportHTML: string | null;
|
|
118
|
+
} | null>;
|
|
119
|
+
getCurrentExecutionData?(): Promise<{
|
|
120
|
+
dump: ExecutionDump | null;
|
|
121
|
+
reportHTML: string | null;
|
|
122
|
+
}>;
|
|
123
|
+
overrideConfig?(config: any): Promise<void>;
|
|
124
|
+
runConnectivityTest?(): Promise<ConnectivityTestResult>;
|
|
125
|
+
checkStatus?(): Promise<boolean>;
|
|
126
|
+
getServiceMode?(): 'In-Browser-Extension' | 'Server';
|
|
127
|
+
getRuntimeInfo?(): Promise<PlaygroundRuntimeInfo | null>;
|
|
128
|
+
setBeforeActionHook?(hook?: BeforeActionHook): void;
|
|
129
|
+
id?: string;
|
|
130
|
+
}
|
|
131
|
+
export interface ExecutionUxConfig {
|
|
132
|
+
hints?: ExecutionUxHint[];
|
|
133
|
+
countdownSeconds?: number;
|
|
134
|
+
}
|
|
135
|
+
export interface StorageProvider {
|
|
136
|
+
saveMessages?(messages: InfoListItem[]): Promise<void>;
|
|
137
|
+
loadMessages?(): Promise<InfoListItem[]>;
|
|
138
|
+
clearMessages?(): Promise<void>;
|
|
139
|
+
saveResult?(id: string, result: InfoListItem): Promise<void>;
|
|
140
|
+
}
|
|
141
|
+
export interface ContextProvider {
|
|
142
|
+
getUIContext?(): Promise<UIContext>;
|
|
143
|
+
refreshContext?(): Promise<UIContext>;
|
|
144
|
+
}
|
|
145
|
+
export interface InfoListItem {
|
|
146
|
+
id: string;
|
|
147
|
+
type: 'user' | 'system' | 'result' | 'progress' | 'separator';
|
|
148
|
+
content: string;
|
|
149
|
+
timestamp: Date;
|
|
150
|
+
result?: PlaygroundResult | null;
|
|
151
|
+
loading?: boolean;
|
|
152
|
+
replayScriptsInfo?: ReplayScriptsInfo | null;
|
|
153
|
+
replayCounter?: number;
|
|
154
|
+
loadingProgressText?: string;
|
|
155
|
+
verticalMode?: boolean;
|
|
156
|
+
actionType?: string;
|
|
157
|
+
/**
|
|
158
|
+
* Identifier for the ExecutionTask that produced this progress item —
|
|
159
|
+
* `task.subType || task.type`, e.g. `'Planning'`, `'Locate'`, `'Tap'`,
|
|
160
|
+
* `'Input'`, `'Scroll'`, `'RunAdbShell'`. Hosts can use this with
|
|
161
|
+
* {@link PromptInputChromeConfig.resolveProgressActionIcon} to render
|
|
162
|
+
* a domain-specific icon in the progress pill.
|
|
163
|
+
*/
|
|
164
|
+
actionKind?: string;
|
|
165
|
+
actionTasks?: any[];
|
|
166
|
+
}
|
|
167
|
+
export interface ReportDownloadRequest {
|
|
168
|
+
content: string;
|
|
169
|
+
defaultFileName: string;
|
|
170
|
+
}
|
|
171
|
+
export type ReportDownloadHandler = (request: ReportDownloadRequest) => void | Promise<void>;
|
|
172
|
+
export interface UniversalPlaygroundConfig {
|
|
173
|
+
showContextPreview?: boolean;
|
|
174
|
+
storageNamespace?: string;
|
|
175
|
+
layout?: 'vertical' | 'horizontal';
|
|
176
|
+
showVersionInfo?: boolean;
|
|
177
|
+
enableScrollToBottom?: boolean;
|
|
178
|
+
serverMode?: boolean;
|
|
179
|
+
showEnvConfigReminder?: boolean;
|
|
180
|
+
deviceType?: DeviceType;
|
|
181
|
+
executionUx?: ExecutionUxConfig;
|
|
182
|
+
promptInputChrome?: PromptInputChromeConfig;
|
|
183
|
+
/**
|
|
184
|
+
* Whether to render the "clear conversation" button that appears above the
|
|
185
|
+
* message list once there is more than one item. Defaults to `true`.
|
|
186
|
+
* Embedding hosts whose own shell exposes a clear affordance can set this
|
|
187
|
+
* to `false`.
|
|
188
|
+
*/
|
|
189
|
+
showClearButton?: boolean;
|
|
190
|
+
/**
|
|
191
|
+
* Whether each system message renders its header (branding icon + title).
|
|
192
|
+
* Defaults to `true`. Compact embeddings may set this to `false` to let the
|
|
193
|
+
* host shell own the branding.
|
|
194
|
+
*/
|
|
195
|
+
showSystemMessageHeader?: boolean;
|
|
196
|
+
/**
|
|
197
|
+
* Optional host-provided content rendered when the conversation has no
|
|
198
|
+
* user-visible chat messages yet. The internal welcome message stays in
|
|
199
|
+
* state, but compact hosts can replace its default text block visually.
|
|
200
|
+
*/
|
|
201
|
+
emptyState?: ReactNode;
|
|
202
|
+
/**
|
|
203
|
+
* Opt-in controls for how consecutive progress items render in the
|
|
204
|
+
* conversation log. Defaults flatten every progress step inline (no
|
|
205
|
+
* grouping, no connector) so existing hosts keep their behaviour.
|
|
206
|
+
*/
|
|
207
|
+
executionFlow?: ExecutionFlowConfig;
|
|
208
|
+
/**
|
|
209
|
+
* Optional host-provided report download hook.
|
|
210
|
+
* Defaults to the browser Blob download flow when omitted.
|
|
211
|
+
*/
|
|
212
|
+
onDownloadReport?: ReportDownloadHandler;
|
|
213
|
+
}
|
|
214
|
+
export interface ExecutionFlowConfig {
|
|
215
|
+
/**
|
|
216
|
+
* When `true`, consecutive progress items are wrapped under a single
|
|
217
|
+
* collapsible "Execution Flow" header. A "run" is bounded by the first
|
|
218
|
+
* non-progress item before and after it.
|
|
219
|
+
*/
|
|
220
|
+
collapsible?: boolean;
|
|
221
|
+
/**
|
|
222
|
+
* Label shown on the collapsible header. Defaults to `'Execution Flow'`.
|
|
223
|
+
*/
|
|
224
|
+
label?: string;
|
|
225
|
+
/**
|
|
226
|
+
* Resolve a domain-specific icon for each progress step. Called with
|
|
227
|
+
* `InfoListItem.actionKind` (e.g. `'Planning'`, `'Locate'`, `'Tap'`,
|
|
228
|
+
* `'Input'`, `'RunAdbShell'`). Returning a React node renders it to
|
|
229
|
+
* the left of the status glyph inside the pill; returning `undefined`
|
|
230
|
+
* falls back to the default mapping shipped by the visualiser, and
|
|
231
|
+
* returning `null` hides the icon slot entirely.
|
|
232
|
+
*/
|
|
233
|
+
resolveActionIcon?: (kind: string) => ReactNode | null | undefined;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Optional visual chrome overrides for the embedded prompt input.
|
|
237
|
+
* - `default` renders the full-featured prompt input (type radio row,
|
|
238
|
+
* history button, full send/stop controls).
|
|
239
|
+
* - `minimal` renders a compact toolbar with only inline params, an action
|
|
240
|
+
* dropdown, send/stop — intended for embedded hosts (e.g. Studio) whose
|
|
241
|
+
* outer shell already owns the type selection affordance.
|
|
242
|
+
*/
|
|
243
|
+
export interface PromptInputChromeConfig {
|
|
244
|
+
variant?: 'default' | 'minimal';
|
|
245
|
+
placeholder?: string;
|
|
246
|
+
/**
|
|
247
|
+
* Label shown on the primary action button. When provided, overrides the
|
|
248
|
+
* auto-derived label (`actionNameForType(type)`). If omitted, the action
|
|
249
|
+
* name derived from the current type is used, falling back to "Action".
|
|
250
|
+
*/
|
|
251
|
+
primaryActionLabel?: string;
|
|
252
|
+
icons?: {
|
|
253
|
+
action?: string;
|
|
254
|
+
actionChevron?: string;
|
|
255
|
+
history?: string;
|
|
256
|
+
settings?: string;
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
export interface PlaygroundBranding {
|
|
260
|
+
title?: string;
|
|
261
|
+
icon?: ComponentType<any>;
|
|
262
|
+
version?: string;
|
|
263
|
+
targetName?: string;
|
|
264
|
+
}
|
|
265
|
+
export interface UniversalPlaygroundProps {
|
|
266
|
+
playgroundSDK: PlaygroundSDKLike | null;
|
|
267
|
+
storage?: StorageProvider;
|
|
268
|
+
contextProvider?: ContextProvider;
|
|
269
|
+
config?: UniversalPlaygroundConfig;
|
|
270
|
+
branding?: PlaygroundBranding;
|
|
271
|
+
className?: string;
|
|
272
|
+
dryMode?: boolean;
|
|
273
|
+
showContextPreview?: boolean;
|
|
274
|
+
showPromptInput?: boolean;
|
|
275
|
+
onHumanUse?: (commands?: any) => void;
|
|
276
|
+
showHumanUse?: boolean;
|
|
277
|
+
defaultSelectedType?: string;
|
|
278
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const actionNameForType: (type: string) => string;
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the label shown on the prompt input primary action button.
|
|
4
|
+
*
|
|
5
|
+
* Priority:
|
|
6
|
+
* 1. `overrideLabel` — when provided, it wins unconditionally. This lets an
|
|
7
|
+
* embedding host pin a stable label regardless of the current type.
|
|
8
|
+
* 2. `actionNameForType(type)` — the auto-derived label for the selected type.
|
|
9
|
+
* 3. Literal `'Action'` — last-resort fallback when neither is available.
|
|
10
|
+
*/
|
|
11
|
+
export declare const getPromptInputActionLabel: (type: string, overrideLabel?: string) => string;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { InfoListItem, PlaygroundResult } from '../types';
|
|
2
|
+
export declare const trackingTip = "Limit popup to current tab";
|
|
3
|
+
export declare const deepLocateTip = "Deep Locate";
|
|
4
|
+
export declare const deepThinkTip = "Deep Think";
|
|
5
|
+
export declare const screenshotIncludedTip = "Include screenshot in request";
|
|
6
|
+
export declare const domIncludedTip = "Include DOM info in request";
|
|
7
|
+
export declare const imeStrategyTip = "IME strategy";
|
|
8
|
+
export declare const autoDismissKeyboardTip = "Auto dismiss keyboard";
|
|
9
|
+
export declare const keyboardDismissStrategyTip = "Keyboard dismiss strategy";
|
|
10
|
+
export declare const alwaysRefreshScreenInfoTip = "Always refresh screen info";
|
|
11
|
+
export declare const apiMetadata: {
|
|
12
|
+
aiAct: {
|
|
13
|
+
group: string;
|
|
14
|
+
title: string;
|
|
15
|
+
};
|
|
16
|
+
aiTap: {
|
|
17
|
+
group: string;
|
|
18
|
+
title: string;
|
|
19
|
+
};
|
|
20
|
+
aiDoubleClick: {
|
|
21
|
+
group: string;
|
|
22
|
+
title: string;
|
|
23
|
+
};
|
|
24
|
+
aiHover: {
|
|
25
|
+
group: string;
|
|
26
|
+
title: string;
|
|
27
|
+
};
|
|
28
|
+
aiInput: {
|
|
29
|
+
group: string;
|
|
30
|
+
title: string;
|
|
31
|
+
};
|
|
32
|
+
aiRightClick: {
|
|
33
|
+
group: string;
|
|
34
|
+
title: string;
|
|
35
|
+
};
|
|
36
|
+
aiKeyboardPress: {
|
|
37
|
+
group: string;
|
|
38
|
+
title: string;
|
|
39
|
+
};
|
|
40
|
+
aiScroll: {
|
|
41
|
+
group: string;
|
|
42
|
+
title: string;
|
|
43
|
+
};
|
|
44
|
+
aiLocate: {
|
|
45
|
+
group: string;
|
|
46
|
+
title: string;
|
|
47
|
+
};
|
|
48
|
+
aiQuery: {
|
|
49
|
+
group: string;
|
|
50
|
+
title: string;
|
|
51
|
+
};
|
|
52
|
+
aiBoolean: {
|
|
53
|
+
group: string;
|
|
54
|
+
title: string;
|
|
55
|
+
};
|
|
56
|
+
aiNumber: {
|
|
57
|
+
group: string;
|
|
58
|
+
title: string;
|
|
59
|
+
};
|
|
60
|
+
aiString: {
|
|
61
|
+
group: string;
|
|
62
|
+
title: string;
|
|
63
|
+
};
|
|
64
|
+
aiAsk: {
|
|
65
|
+
group: string;
|
|
66
|
+
title: string;
|
|
67
|
+
};
|
|
68
|
+
aiAssert: {
|
|
69
|
+
group: string;
|
|
70
|
+
title: string;
|
|
71
|
+
};
|
|
72
|
+
aiWaitFor: {
|
|
73
|
+
group: string;
|
|
74
|
+
title: string;
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
export declare const defaultMainButtons: string[];
|
|
78
|
+
export declare const getWelcomeMessageTemplate: (targetName?: string) => Omit<InfoListItem, "id" | "timestamp">;
|
|
79
|
+
export declare const WELCOME_MESSAGE_TEMPLATE: Omit<InfoListItem, 'id' | 'timestamp'>;
|
|
80
|
+
export declare const BLANK_RESULT: PlaygroundResult;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DeviceType } from '../types';
|
|
2
|
+
export interface DeviceCapabilities {
|
|
3
|
+
supportsImeStrategy: boolean;
|
|
4
|
+
supportsKeyboardDismissStrategy: boolean;
|
|
5
|
+
supportsAutoDismissKeyboard: boolean;
|
|
6
|
+
supportsAlwaysRefreshScreenInfo: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function getDeviceCapabilities(deviceType?: DeviceType): DeviceCapabilities;
|
|
9
|
+
export declare function hasDeviceSpecificConfig(deviceType?: DeviceType): boolean;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface EmptyStatePromptScrollMetrics {
|
|
2
|
+
currentScrollTop: number;
|
|
3
|
+
maxScrollTop: number;
|
|
4
|
+
containerTop: number;
|
|
5
|
+
containerBottom: number;
|
|
6
|
+
contentStartTop: number;
|
|
7
|
+
contentEndBottom: number;
|
|
8
|
+
topSafeMargin?: number;
|
|
9
|
+
bottomSafeMargin?: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function calculateEmptyStatePromptScrollTop({ currentScrollTop, maxScrollTop, containerTop, containerBottom, contentStartTop, contentEndBottom, topSafeMargin, bottomSafeMargin, }: EmptyStatePromptScrollMetrics): number;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { LocateResultElement, Rect } from '@godscene/core';
|
|
2
|
+
export declare const getCenterHighlightBox: (element: Pick<LocateResultElement, "center">) => Rect;
|
|
3
|
+
export declare const normalizeHighlightElementForReport: (element: LocateResultElement) => LocateResultElement;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function timeStr(timestamp?: number): string;
|
|
2
|
+
export declare function fullTimeStrWithMilliseconds(timestamp?: number): string;
|
|
3
|
+
export declare function filterBase64Value(input: string): string;
|
|
4
|
+
export declare const mousePointer = "data:image/png;base64,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";
|
|
5
|
+
export declare const mouseLoading = "data:image/png;base64,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";
|