@v-tilt/browser 1.11.0 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/all-external-dependencies.js +1 -1
- package/dist/all-external-dependencies.js.map +1 -1
- package/dist/array.full.js +1 -1
- package/dist/array.full.js.map +1 -1
- package/dist/array.js +1 -1
- package/dist/array.js.map +1 -1
- package/dist/array.no-external.js +1 -1
- package/dist/array.no-external.js.map +1 -1
- package/dist/autocapture-types.d.ts +17 -0
- package/dist/autocapture-utils.d.ts +24 -1
- package/dist/autocapture.d.ts +94 -5
- package/dist/chat.js +1 -1
- package/dist/chat.js.map +1 -1
- package/dist/config.d.ts +8 -1
- package/dist/constants.d.ts +19 -13
- package/dist/core/capture.d.ts +15 -5
- package/dist/core/config-utils.d.ts +15 -0
- package/dist/core/consent.d.ts +62 -0
- package/dist/core/event-buffer.d.ts +60 -0
- package/dist/core/fb-cookies.d.ts +32 -0
- package/dist/core/feature-manager.d.ts +61 -69
- package/dist/core/fifo-queue.d.ts +23 -0
- package/dist/core/identity.d.ts +23 -33
- package/dist/core/index.d.ts +7 -1
- package/dist/core/page-lifecycle.d.ts +41 -0
- package/dist/core/remote-config.d.ts +14 -17
- package/dist/extensions/chat/bubble-drag.d.ts +30 -0
- package/dist/extensions/chat/chat-api.d.ts +15 -0
- package/dist/extensions/chat/chat-styles.d.ts +27 -0
- package/dist/extensions/chat/chat-wrapper.d.ts +20 -145
- package/dist/extensions/chat/chat.d.ts +261 -14
- package/dist/extensions/chat/message-content-styles.d.ts +1 -0
- package/dist/extensions/chat/message-html.d.ts +6 -0
- package/dist/extensions/chat/message-markdown.d.ts +8 -0
- package/dist/extensions/chat/normalize-send-content.d.ts +24 -0
- package/dist/extensions/chat/types.d.ts +19 -57
- package/dist/extensions/chat/widget-registry.d.ts +53 -0
- package/dist/extensions/chat/widgets/collect-email.d.ts +6 -0
- package/dist/extensions/chat/widgets/escalate-to-human.d.ts +6 -0
- package/dist/extensions/ga4-proxy.d.ts +59 -0
- package/dist/extensions/google-tag-gateway/consent-bridge.d.ts +27 -0
- package/dist/extensions/google-tag-gateway/enhanced-conversions.d.ts +35 -0
- package/dist/extensions/google-tag-gateway/event-bridge.d.ts +74 -0
- package/dist/extensions/google-tag-gateway/google-tag-gateway.d.ts +95 -0
- package/dist/extensions/google-tag-gateway/gtag-loader.d.ts +85 -0
- package/dist/extensions/google-tag-gateway/index.d.ts +7 -0
- package/dist/extensions/google-tag-gateway/normalize.d.ts +28 -0
- package/dist/extensions/google-tag-gateway/public-api.d.ts +23 -0
- package/dist/extensions/history-autocapture.d.ts +2 -2
- package/dist/extensions/replay/index.d.ts +1 -1
- package/dist/extensions/replay/session-recording-utils.d.ts +13 -43
- package/dist/extensions/replay/session-recording-wrapper.d.ts +10 -66
- package/dist/extensions/replay/session-recording.d.ts +53 -1
- package/dist/extensions/replay/types.d.ts +6 -1
- package/dist/extensions/web-vitals/web-vitals-manager.d.ts +14 -43
- package/dist/external-scripts-loader.js +1 -1
- package/dist/external-scripts-loader.js.map +1 -1
- package/dist/feature.d.ts +54 -172
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/module.d.ts +728 -753
- package/dist/module.js +1 -1
- package/dist/module.js.map +1 -1
- package/dist/module.no-external.d.ts +728 -753
- package/dist/module.no-external.js +1 -1
- package/dist/module.no-external.js.map +1 -1
- package/dist/rate-limiter.d.ts +0 -1
- package/dist/recorder.js +1 -1
- package/dist/recorder.js.map +1 -1
- package/dist/request.d.ts +34 -20
- package/dist/scroll-depth-tracker.d.ts +42 -0
- package/dist/server.d.ts +114 -0
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +12 -0
- package/dist/types.d.ts +204 -9
- package/dist/user-manager.d.ts +26 -52
- package/dist/utils/base64.d.ts +30 -0
- package/dist/utils/bot-detection.d.ts +28 -0
- package/dist/utils/endpoint-url.d.ts +36 -0
- package/dist/utils/event-emitter.d.ts +1 -0
- package/dist/utils/globals.d.ts +71 -2
- package/dist/utils/index.d.ts +20 -5
- package/dist/utils/logger.d.ts +66 -0
- package/dist/utils/request-utils.d.ts +5 -0
- package/dist/utils/safewrap.d.ts +6 -1
- package/dist/utils/transport-health.d.ts +55 -0
- package/dist/vtilt.d.ts +85 -25
- package/dist/web-vitals.js.map +1 -1
- package/package.json +71 -66
|
@@ -3,48 +3,45 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Handles loading, fetching, caching, and applying remote configuration
|
|
5
5
|
* from the /decide endpoint. Supports bootstrap data for instant loading.
|
|
6
|
+
*
|
|
7
|
+
* Config merge precedence: client init > remote > defaults
|
|
8
|
+
* Uses _initConfig snapshot to distinguish user-set values from cache-applied values.
|
|
9
|
+
*
|
|
10
|
+
* @see docs/patterns/tracker-feature-lifecycle.md
|
|
6
11
|
*/
|
|
7
12
|
import { VTiltConfig, RemoteConfig } from "../types";
|
|
8
|
-
|
|
9
|
-
* Interface for the VTilt instance methods needed by RemoteConfigManager.
|
|
10
|
-
* Using a minimal interface avoids circular dependency.
|
|
11
|
-
*/
|
|
13
|
+
import type { FeatureManager } from "./feature-manager";
|
|
12
14
|
export interface RemoteConfigHost {
|
|
13
15
|
getConfig(): VTiltConfig;
|
|
14
16
|
updateConfig(config: Partial<VTiltConfig>): void;
|
|
17
|
+
buildEndpointUrl(path: string): string;
|
|
15
18
|
__loaded: boolean;
|
|
16
|
-
|
|
17
|
-
startAutocapture?(): void;
|
|
18
|
-
_initChat?(): void;
|
|
19
|
+
featureManager: FeatureManager;
|
|
19
20
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Callback when remote config is loaded/applied
|
|
22
|
-
*/
|
|
23
21
|
export type RemoteConfigCallback = (config: RemoteConfig) => void;
|
|
24
22
|
export declare class RemoteConfigManager {
|
|
25
23
|
private _host;
|
|
26
24
|
private _remoteConfig;
|
|
27
25
|
private _onApply?;
|
|
28
26
|
private _onLoad?;
|
|
27
|
+
private _initConfig;
|
|
29
28
|
constructor(host: RemoteConfigHost);
|
|
30
|
-
/** Get the current remote config (may be null if not loaded) */
|
|
31
29
|
get config(): RemoteConfig | null;
|
|
32
|
-
/** Set callback for when config is applied */
|
|
33
30
|
onApply(callback: RemoteConfigCallback): void;
|
|
34
|
-
/** Set callback for when fresh config is loaded */
|
|
35
31
|
onLoad(callback: RemoteConfigCallback): void;
|
|
36
32
|
/**
|
|
37
33
|
* Load remote config from cache and fetch fresh in background.
|
|
38
34
|
* Priority: 1) Bootstrap config 2) Window bootstrap 3) localStorage cache
|
|
39
35
|
*/
|
|
40
36
|
load(): void;
|
|
41
|
-
/**
|
|
42
|
-
* Fetch remote config from /decide endpoint.
|
|
43
|
-
*/
|
|
44
37
|
private _fetch;
|
|
45
38
|
/**
|
|
46
39
|
* Apply remote config to current config.
|
|
47
|
-
*
|
|
40
|
+
* Uses _initConfig snapshot: only values NOT set by the user in vt.init() are applied.
|
|
41
|
+
* Feature config is mapped via FeatureManager descriptors; non-feature config is handled inline.
|
|
42
|
+
*
|
|
43
|
+
* @param fromCache When true, analytics toggles are skipped to avoid acting on stale
|
|
44
|
+
* localStorage data before the fresh /decide fetch resolves.
|
|
48
45
|
*/
|
|
49
46
|
private _apply;
|
|
50
47
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Draggable bubble utility.
|
|
3
|
+
*
|
|
4
|
+
* Attaches pointer-based drag behavior to a fixed-position bubble element.
|
|
5
|
+
* Persists the drag offset in localStorage so the position survives page
|
|
6
|
+
* navigations and transfers between the lightweight and full bubbles.
|
|
7
|
+
*/
|
|
8
|
+
interface DraggableOptions {
|
|
9
|
+
/** Element that initiates the drag (defaults to the target element itself) */
|
|
10
|
+
handle?: HTMLElement;
|
|
11
|
+
}
|
|
12
|
+
interface DragHandle {
|
|
13
|
+
destroy: () => void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Make a fixed-position element draggable.
|
|
17
|
+
*
|
|
18
|
+
* @param el The element to reposition via translate3d.
|
|
19
|
+
* @param opts.handle Optional drag handle element (e.g. bubble inside a container).
|
|
20
|
+
* Pointer events listen on the handle; transform applies to `el`.
|
|
21
|
+
* Defaults to `el` itself.
|
|
22
|
+
*
|
|
23
|
+
* - Restores persisted position from localStorage on attach.
|
|
24
|
+
* - Persists position on drag end.
|
|
25
|
+
* - Distinguishes click from drag via a 5px movement threshold.
|
|
26
|
+
* When dragged, the subsequent `click` event on the handle is suppressed once.
|
|
27
|
+
* - Re-clamps on viewport resize.
|
|
28
|
+
*/
|
|
29
|
+
export declare function makeDraggable(el: HTMLElement, opts?: DraggableOptions): DragHandle;
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat widget API – HTTP helpers and endpoint constants.
|
|
3
|
+
*/
|
|
4
|
+
import type { VTiltConfig } from "../../types";
|
|
5
|
+
export declare const API: {
|
|
6
|
+
readonly channels: "/api/chat/widget/channels";
|
|
7
|
+
readonly messages: (channelId: string) => string;
|
|
8
|
+
readonly read: (channelId: string) => string;
|
|
9
|
+
readonly ablyToken: "/api/chat/token/widget";
|
|
10
|
+
};
|
|
11
|
+
/** Minimal host surface for HTTP helpers (lazy chat bundle must not rely on `VTilt` prototype methods). */
|
|
12
|
+
export interface ApiRequestInstance {
|
|
13
|
+
getConfig(): Pick<VTiltConfig, "api_host" | "token">;
|
|
14
|
+
}
|
|
15
|
+
export declare function apiRequest<T>(instance: ApiRequestInstance, endpoint: string, options?: RequestInit): Promise<T | null>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat widget style and HTML string builders.
|
|
3
|
+
* Keeps all style/logic in TS (no separate CSS file), aligned with Intercom/PostHog.
|
|
4
|
+
*/
|
|
5
|
+
export type ChatWidgetPosition = "bottom-right" | "bottom-left";
|
|
6
|
+
export interface ChatTheme {
|
|
7
|
+
primaryColor: string;
|
|
8
|
+
fontFamily: string;
|
|
9
|
+
borderRadius?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function getContainerStyles(theme: ChatTheme, position?: ChatWidgetPosition): string;
|
|
12
|
+
export declare function getBubbleStyles(theme: ChatTheme): string;
|
|
13
|
+
export declare function getBubbleHTML(): string;
|
|
14
|
+
export declare function getWidgetStyles(): string;
|
|
15
|
+
/**
|
|
16
|
+
* Container styles when the widget is fullscreen on mobile.
|
|
17
|
+
* The container (direct child of body) becomes the fullscreen overlay;
|
|
18
|
+
* any drag transform is cleared so position:fixed works correctly.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getMobileContainerStyles(theme: ChatTheme): string;
|
|
21
|
+
/**
|
|
22
|
+
* Widget styles when fullscreen on mobile.
|
|
23
|
+
* Widget fills the container with absolute positioning.
|
|
24
|
+
* Display is omitted — set by _updateUI based on open state.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getMobileWidgetStyles(): string;
|
|
27
|
+
export declare function getWidgetHTML(theme: ChatTheme): string;
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Chat Wrapper
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Extends LazyFeature to handle lazy-loading the chat widget script.
|
|
5
5
|
* The actual chat logic is in LazyLoadedChat which is loaded on demand.
|
|
6
6
|
*
|
|
7
|
-
* Implements the Feature interface for consistent lifecycle management.
|
|
8
|
-
* This follows the same pattern as SessionRecordingWrapper.
|
|
9
|
-
*
|
|
10
7
|
* ## Initialization Modes (Intercom-like flexibility)
|
|
11
8
|
*
|
|
12
9
|
* 1. **Snippet-only (dashboard configured)**:
|
|
@@ -30,193 +27,71 @@
|
|
|
30
27
|
* ```
|
|
31
28
|
*
|
|
32
29
|
* Code config always takes precedence over dashboard settings.
|
|
30
|
+
*
|
|
31
|
+
* @see docs/patterns/tracker-feature-lifecycle.md
|
|
33
32
|
*/
|
|
34
33
|
import type { VTilt } from "../../vtilt";
|
|
35
|
-
import type { VTiltConfig
|
|
36
|
-
import
|
|
37
|
-
import { type ChatConfig, type ChatChannelSummary, type ChatWidgetView } from "../../utils/globals";
|
|
34
|
+
import type { VTiltConfig } from "../../types";
|
|
35
|
+
import { LazyFeature } from "../../feature";
|
|
36
|
+
import { type ChatConfig, type ChatChannelSummary, type ChatWidgetView, type LazyLoadedChatInterface, type SendChatMessageContent, type SendChatMessageOptions } from "../../utils/globals";
|
|
38
37
|
import type { MessageCallback, TypingCallback, ConnectionCallback, Unsubscribe } from "./types";
|
|
39
|
-
/** Status when lazy loading is in progress */
|
|
40
38
|
export declare const CHAT_LOADING: "loading";
|
|
41
|
-
|
|
42
|
-
* Chat Wrapper
|
|
43
|
-
*
|
|
44
|
-
* This is the lightweight class that lives in the main bundle.
|
|
45
|
-
* Implements Feature for consistent lifecycle management.
|
|
46
|
-
*
|
|
47
|
-
* It handles:
|
|
48
|
-
* - Auto-fetching settings from dashboard (Intercom-like)
|
|
49
|
-
* - Merging server settings with code config
|
|
50
|
-
* - Deciding if chat should be enabled
|
|
51
|
-
* - Lazy loading the actual chat widget code
|
|
52
|
-
* - Delegating to LazyLoadedChat
|
|
53
|
-
* - Queuing messages/callbacks before widget loads
|
|
54
|
-
*/
|
|
55
|
-
export declare class ChatWrapper implements Feature {
|
|
56
|
-
private readonly _instance;
|
|
39
|
+
export declare class ChatWrapper extends LazyFeature<ChatConfig, LazyLoadedChatInterface> {
|
|
57
40
|
readonly name = "Chat";
|
|
58
|
-
|
|
59
|
-
private _config;
|
|
41
|
+
readonly scriptName = "chat";
|
|
60
42
|
private _serverConfig;
|
|
61
43
|
private _configFetched;
|
|
62
|
-
private _isLoading;
|
|
63
|
-
private _isStarted;
|
|
64
44
|
private _loadError;
|
|
45
|
+
private _bubbleDragHandle;
|
|
65
46
|
private _pendingMessages;
|
|
66
47
|
private _pendingCallbacks;
|
|
67
48
|
private _messageCallbacks;
|
|
68
49
|
private _typingCallbacks;
|
|
69
50
|
private _connectionCallbacks;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
* Self-contained - vtilt.ts doesn't need to know config details.
|
|
74
|
-
*/
|
|
51
|
+
/** True after vt.showChat() so preloaded widget stays visible after replacing the lightweight bubble. */
|
|
52
|
+
private _bubbleExplicitShow;
|
|
53
|
+
constructor(instance: VTilt, config?: ChatConfig);
|
|
75
54
|
static extractConfig(config: VTiltConfig): ChatConfig;
|
|
76
55
|
get isEnabled(): boolean;
|
|
77
|
-
get isStarted(): boolean;
|
|
78
56
|
/**
|
|
79
|
-
*
|
|
80
|
-
*
|
|
57
|
+
* Chat has a custom start flow: fetch server settings, show bubble,
|
|
58
|
+
* lazy-load full widget on user interaction.
|
|
81
59
|
*/
|
|
82
60
|
startIfEnabled(): void;
|
|
83
|
-
/**
|
|
84
|
-
* Stop the chat widget (Feature interface).
|
|
85
|
-
*/
|
|
86
61
|
stop(): void;
|
|
87
|
-
/**
|
|
88
|
-
* Handle config updates (Feature interface).
|
|
89
|
-
*/
|
|
90
62
|
onConfigUpdate(config: VTiltConfig): void;
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
*/
|
|
94
|
-
onRemoteConfig(remoteConfig: RemoteConfig): void;
|
|
95
|
-
/**
|
|
96
|
-
* Async start implementation
|
|
97
|
-
*/
|
|
63
|
+
protected _createLoaded(): LazyLoadedChatInterface;
|
|
64
|
+
protected _onLoaded(loaded: LazyLoadedChatInterface): void;
|
|
98
65
|
private _startAsync;
|
|
99
|
-
/**
|
|
100
|
-
* Whether the chat widget is open
|
|
101
|
-
*/
|
|
102
66
|
get isOpen(): boolean;
|
|
103
|
-
/**
|
|
104
|
-
* Whether connected to realtime service
|
|
105
|
-
*/
|
|
106
67
|
get isConnected(): boolean;
|
|
107
|
-
/**
|
|
108
|
-
* Whether the widget is loading
|
|
109
|
-
*/
|
|
110
68
|
get isLoading(): boolean;
|
|
111
|
-
/**
|
|
112
|
-
* Number of unread messages
|
|
113
|
-
*/
|
|
114
69
|
get unreadCount(): number;
|
|
115
|
-
/**
|
|
116
|
-
* Current channel (if any)
|
|
117
|
-
*/
|
|
118
70
|
get channel(): import("./types").ChatChannel | null;
|
|
119
|
-
/**
|
|
120
|
-
* List of user's channels (multi-channel support)
|
|
121
|
-
*/
|
|
122
71
|
get channels(): ChatChannelSummary[];
|
|
123
|
-
/**
|
|
124
|
-
* Current view state ('list' or 'conversation')
|
|
125
|
-
*/
|
|
126
72
|
get currentView(): ChatWidgetView;
|
|
127
|
-
/**
|
|
128
|
-
* Open the chat widget
|
|
129
|
-
*/
|
|
130
73
|
open(): void;
|
|
131
|
-
/**
|
|
132
|
-
* Close the chat widget
|
|
133
|
-
*/
|
|
134
74
|
close(): void;
|
|
135
|
-
/**
|
|
136
|
-
* Toggle the chat widget open/closed
|
|
137
|
-
*/
|
|
138
75
|
toggle(): void;
|
|
139
|
-
/**
|
|
140
|
-
* Show the chat widget (make visible but not necessarily open)
|
|
141
|
-
*/
|
|
142
76
|
show(): void;
|
|
143
|
-
/**
|
|
144
|
-
* Hide the chat widget
|
|
145
|
-
*/
|
|
146
77
|
hide(): void;
|
|
147
|
-
/**
|
|
148
|
-
* Fetch/refresh the list of user's channels
|
|
149
|
-
*/
|
|
150
78
|
getChannels(): void;
|
|
151
|
-
/**
|
|
152
|
-
* Select a channel and load its messages
|
|
153
|
-
*/
|
|
154
79
|
selectChannel(channelId: string): void;
|
|
155
|
-
/**
|
|
156
|
-
* Create a new channel and enter it
|
|
157
|
-
*/
|
|
158
80
|
createChannel(): void;
|
|
159
|
-
/**
|
|
160
|
-
* Go back to channel list from conversation view
|
|
161
|
-
*/
|
|
162
81
|
goToChannelList(): void;
|
|
163
|
-
|
|
164
|
-
* Send a message
|
|
165
|
-
*/
|
|
166
|
-
sendMessage(content: string): void;
|
|
167
|
-
/**
|
|
168
|
-
* Mark messages as read
|
|
169
|
-
*/
|
|
82
|
+
sendMessage(content: SendChatMessageContent, options?: SendChatMessageOptions): void;
|
|
170
83
|
markAsRead(): void;
|
|
171
|
-
|
|
172
|
-
* Subscribe to new messages
|
|
173
|
-
*/
|
|
84
|
+
registerWidget(definition: Parameters<NonNullable<LazyLoadedChatInterface["registerWidget"]>>[0]): void;
|
|
174
85
|
onMessage(callback: MessageCallback): Unsubscribe;
|
|
175
|
-
/**
|
|
176
|
-
* Subscribe to typing indicators
|
|
177
|
-
*/
|
|
178
86
|
onTyping(callback: TypingCallback): Unsubscribe;
|
|
179
|
-
/**
|
|
180
|
-
* Subscribe to connection changes
|
|
181
|
-
*/
|
|
182
87
|
onConnectionChange(callback: ConnectionCallback): Unsubscribe;
|
|
183
|
-
/**
|
|
184
|
-
* Update configuration
|
|
185
|
-
*/
|
|
186
88
|
updateConfig(config: Partial<ChatConfig>): void;
|
|
187
|
-
/**
|
|
188
|
-
* Get the merged configuration (server + code, code takes precedence)
|
|
189
|
-
*/
|
|
190
89
|
getMergedConfig(): ChatConfig;
|
|
191
|
-
/**
|
|
192
|
-
* Destroy the chat widget
|
|
193
|
-
*/
|
|
194
90
|
destroy(): void;
|
|
195
|
-
/**
|
|
196
|
-
* Fetch chat settings from the server
|
|
197
|
-
* This enables "snippet-only" installation where widget configures from dashboard
|
|
198
|
-
*/
|
|
199
91
|
private _fetchServerSettings;
|
|
200
|
-
|
|
201
|
-
* Show the chat bubble (launcher button) without fully loading the widget
|
|
202
|
-
* This creates a lightweight bubble that loads the full widget on click
|
|
203
|
-
*/
|
|
92
|
+
private _fetchUnreadForBubble;
|
|
204
93
|
private _showBubble;
|
|
205
|
-
private
|
|
206
|
-
/**
|
|
207
|
-
* Schedule preload on idle
|
|
208
|
-
*/
|
|
94
|
+
private _onVisibilityChange;
|
|
209
95
|
private _schedulePreload;
|
|
210
|
-
/**
|
|
211
|
-
* Lazy load and then execute callback
|
|
212
|
-
*/
|
|
213
96
|
private _lazyLoadAndThen;
|
|
214
|
-
/**
|
|
215
|
-
* Lazy load the chat script
|
|
216
|
-
*/
|
|
217
|
-
private _lazyLoad;
|
|
218
|
-
/**
|
|
219
|
-
* Called after the chat script is loaded
|
|
220
|
-
*/
|
|
221
|
-
private _onScriptLoaded;
|
|
222
97
|
}
|