handler-playable-sdk 0.3.2 → 0.3.4
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/AssetEditorModal-DBAGQINC.js +1 -0
- package/dist/AssetTextures-AZY5VKWH.js +1 -0
- package/dist/ConfigOverride-DFTDUTRQ.js +1 -0
- package/dist/chunk-C2CEUBBT.js +1325 -0
- package/dist/chunk-DEUORFXE.js +1 -0
- package/dist/chunk-DHSGG7NF.js +1 -0
- package/dist/chunk-E6WJCS24.js +46 -0
- package/dist/chunk-PWGHKK3J.js +1 -0
- package/dist/chunk-Q7FPWOA3.js +1 -0
- package/dist/config-7DI6U2YD.js +1 -0
- package/dist/index.cjs +1360 -0
- package/dist/index.css +4537 -1
- package/dist/index.d.cts +892 -0
- package/dist/index.d.ts +494 -39
- package/dist/index.js +1 -1
- package/dist/{loader-object-centric-C1QteFfG.d.mts → loader-object-centric-Ce6MVkQw.d.cts} +1 -1
- package/dist/{loader-object-centric-C1QteFfG.d.ts → loader-object-centric-Ce6MVkQw.d.ts} +1 -1
- package/dist/pixi/index.cjs +256 -0
- package/dist/pixi/index.css +4537 -1
- package/dist/pixi/{index.d.mts → index.d.cts} +156 -144
- package/dist/pixi/index.d.ts +156 -144
- package/dist/pixi/index.js +1 -27
- package/dist/three/index.cjs +363 -0
- package/dist/three/index.css +4537 -1
- package/dist/three/index.js +1 -134
- package/package.json +29 -18
- package/dist/ConfigOverride-6YH2ILBJ.mjs +0 -1
- package/dist/chunk-BDZGKN5O.mjs +0 -1
- package/dist/chunk-GYW3GFXA.mjs +0 -830
- package/dist/chunk-HN7I4BLB.mjs +0 -1
- package/dist/config-QLS2MDB6.mjs +0 -1
- package/dist/index.d.mts +0 -437
- package/dist/index.mjs +0 -1
- package/dist/pixi/index.mjs +0 -1
- package/dist/three/index.mjs +0 -118
- /package/dist/three/{index.d.mts → index.d.cts} +0 -0
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,892 @@
|
|
|
1
|
+
import { Graphics } from 'pixi.js';
|
|
2
|
+
import { O as ObjectCentricConfig } from './loader-object-centric-Ce6MVkQw.cjs';
|
|
3
|
+
export { g as applyDefaults, c as loadAllObjectConfigs, a as loadComponentSchemas, d as loadEngineConfig, e as loadGamePromptConfig, l as loadObjectCentricConfig, b as loadObjectConfig, f as loadSceneConfig, t as toLegacyFormat, v as validateObjectConfig } from './loader-object-centric-Ce6MVkQw.cjs';
|
|
4
|
+
|
|
5
|
+
type TelemetryConfig = {
|
|
6
|
+
endpoint: string;
|
|
7
|
+
transport?: 'beacon' | 'fetch';
|
|
8
|
+
batchSize?: number;
|
|
9
|
+
flushIntervalMs?: number;
|
|
10
|
+
maxQueue?: number;
|
|
11
|
+
debug?: boolean;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
declare global {
|
|
15
|
+
interface Window {
|
|
16
|
+
cachedContainerSize?: {
|
|
17
|
+
width: number;
|
|
18
|
+
height: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
declare function setBootstrapDependencies(deps: {
|
|
23
|
+
initGame: any;
|
|
24
|
+
CustomAssets: any;
|
|
25
|
+
updateScreenState: any;
|
|
26
|
+
globalResponsiveMultipliers: any;
|
|
27
|
+
layout: any;
|
|
28
|
+
clearResponsiveElements: any;
|
|
29
|
+
}): void;
|
|
30
|
+
/**
|
|
31
|
+
* Bootstrap the Handler game
|
|
32
|
+
*/
|
|
33
|
+
declare const bootstrap: () => Promise<void>;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Device Presets for Preview System
|
|
37
|
+
*
|
|
38
|
+
* Real device resolutions organized by category.
|
|
39
|
+
* The preview system will scale-to-fit these within the browser window.
|
|
40
|
+
*/
|
|
41
|
+
interface DevicePreset {
|
|
42
|
+
id: string;
|
|
43
|
+
label: string;
|
|
44
|
+
width: number;
|
|
45
|
+
height: number;
|
|
46
|
+
category: DeviceCategory;
|
|
47
|
+
ratio: string;
|
|
48
|
+
mraidScale?: number;
|
|
49
|
+
}
|
|
50
|
+
type DeviceCategory = 'iphone' | 'android' | 'tablet' | 'playable' | 'social';
|
|
51
|
+
interface DeviceGroup {
|
|
52
|
+
category: DeviceCategory;
|
|
53
|
+
label: string;
|
|
54
|
+
devices: DevicePreset[];
|
|
55
|
+
}
|
|
56
|
+
declare const devicePresets: DevicePreset[];
|
|
57
|
+
declare const deviceGroups: DeviceGroup[];
|
|
58
|
+
declare const defaultPreset: DevicePreset;
|
|
59
|
+
declare function getPresetById(id: string): DevicePreset;
|
|
60
|
+
declare function getPresetsByCategory(category: DeviceCategory): DevicePreset[];
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Preview Shell
|
|
64
|
+
* Google Ads & Meta Style Preview System.
|
|
65
|
+
* Uses CSS transform scaling for device frame preview,
|
|
66
|
+
* and emits resize events so PIXI can reflow reliably.
|
|
67
|
+
*/
|
|
68
|
+
|
|
69
|
+
interface PreviewOptions {
|
|
70
|
+
defaultDevice?: string;
|
|
71
|
+
onDeviceChange?: (preset: DevicePreset) => void;
|
|
72
|
+
onRefresh?: () => void;
|
|
73
|
+
onRestart?: () => void;
|
|
74
|
+
}
|
|
75
|
+
declare class PreviewShell {
|
|
76
|
+
private container;
|
|
77
|
+
private previewContainer;
|
|
78
|
+
private singleStage;
|
|
79
|
+
private compareStage;
|
|
80
|
+
private frameDragger;
|
|
81
|
+
private frameWrapper;
|
|
82
|
+
private deviceFrame;
|
|
83
|
+
private gameContainer;
|
|
84
|
+
private currentPreset;
|
|
85
|
+
private isLandscape;
|
|
86
|
+
private autoScale;
|
|
87
|
+
private userScaleMultiplier;
|
|
88
|
+
private options;
|
|
89
|
+
private viewMode;
|
|
90
|
+
private lastSinglePresetId;
|
|
91
|
+
private comparePresets;
|
|
92
|
+
private activeCompareId;
|
|
93
|
+
private compareViewports;
|
|
94
|
+
private resizeObserver;
|
|
95
|
+
private rafFitHandle;
|
|
96
|
+
private ignoreNextWindowResize;
|
|
97
|
+
private frameDragOffsetX;
|
|
98
|
+
private frameDragOffsetY;
|
|
99
|
+
private frameDragActive;
|
|
100
|
+
private frameDragStartX;
|
|
101
|
+
private frameDragStartY;
|
|
102
|
+
private frameDragOriginX;
|
|
103
|
+
private frameDragOriginY;
|
|
104
|
+
private consolePanel;
|
|
105
|
+
private consoleMessages;
|
|
106
|
+
private isConsoleOpen;
|
|
107
|
+
private debugPanel;
|
|
108
|
+
private hasInitialFit;
|
|
109
|
+
private isMounted;
|
|
110
|
+
private isInitialized;
|
|
111
|
+
private gameReady;
|
|
112
|
+
private resizeListenersDisabled;
|
|
113
|
+
private compareSnapshotTimer;
|
|
114
|
+
constructor(options?: PreviewOptions);
|
|
115
|
+
mount(target?: HTMLElement): void;
|
|
116
|
+
destroy(): void;
|
|
117
|
+
getGameContainer(): HTMLElement;
|
|
118
|
+
getScreen(): {
|
|
119
|
+
width: number;
|
|
120
|
+
height: number;
|
|
121
|
+
};
|
|
122
|
+
getEffectivePreset(): DevicePreset;
|
|
123
|
+
notifyGameLoaded(): void;
|
|
124
|
+
notifyGameDestroyed(): void;
|
|
125
|
+
private disableResizeListeners;
|
|
126
|
+
private enableResizeListeners;
|
|
127
|
+
refresh(): void;
|
|
128
|
+
setDevice(deviceId: string, opts?: {
|
|
129
|
+
suppressCallback?: boolean;
|
|
130
|
+
}): void;
|
|
131
|
+
private createShell;
|
|
132
|
+
private setupEventListeners;
|
|
133
|
+
private applyDeviceFrameStyles;
|
|
134
|
+
private setupObserversAndListeners;
|
|
135
|
+
private onWindowResize;
|
|
136
|
+
private scheduleFit;
|
|
137
|
+
private applyPresetDimensions;
|
|
138
|
+
private fitToScreen;
|
|
139
|
+
private applyTransform;
|
|
140
|
+
private applyFrameDrag;
|
|
141
|
+
private setupFrameDragging;
|
|
142
|
+
private onFrameDragMove;
|
|
143
|
+
private onFrameDragEnd;
|
|
144
|
+
private adjustUserZoom;
|
|
145
|
+
private toggleRotation;
|
|
146
|
+
private emitScreenChange;
|
|
147
|
+
private safeStringify;
|
|
148
|
+
private setupConsoleInterceptor;
|
|
149
|
+
private appendConsoleMessage;
|
|
150
|
+
private escapeHtml;
|
|
151
|
+
private toggleConsole;
|
|
152
|
+
private clearConsole;
|
|
153
|
+
private setupCompareViewports;
|
|
154
|
+
private setViewMode;
|
|
155
|
+
private updateViewToggleUI;
|
|
156
|
+
private activateCompareViewport;
|
|
157
|
+
private applyCompareDimensions;
|
|
158
|
+
private fitCompareGhosts;
|
|
159
|
+
private captureCompareSnapshot;
|
|
160
|
+
private refreshCompareSnapshots;
|
|
161
|
+
private startCompareSnapshots;
|
|
162
|
+
private stopCompareSnapshots;
|
|
163
|
+
private getFitBounds;
|
|
164
|
+
private mustQuery;
|
|
165
|
+
}
|
|
166
|
+
declare function createPreviewShell(options?: PreviewOptions): PreviewShell;
|
|
167
|
+
|
|
168
|
+
type SceneObjectsPanelOptions = {
|
|
169
|
+
onSelect: (objectId: string) => void;
|
|
170
|
+
};
|
|
171
|
+
declare class SceneObjectsPanel {
|
|
172
|
+
private root;
|
|
173
|
+
private listContainer;
|
|
174
|
+
private searchInput;
|
|
175
|
+
private selectedId;
|
|
176
|
+
private options;
|
|
177
|
+
private retryTimer;
|
|
178
|
+
private filterMode;
|
|
179
|
+
render(): string;
|
|
180
|
+
initialize(container: HTMLElement, options: SceneObjectsPanelOptions): void;
|
|
181
|
+
setSelected(objectId: string | null): void;
|
|
182
|
+
refreshObjects(): void;
|
|
183
|
+
/**
|
|
184
|
+
* Format display name: removes json. prefix, converts underscores to spaces, title case
|
|
185
|
+
*/
|
|
186
|
+
private formatDisplayName;
|
|
187
|
+
/**
|
|
188
|
+
* Get object type for icon display
|
|
189
|
+
*/
|
|
190
|
+
private getObjectType;
|
|
191
|
+
private renderGroup;
|
|
192
|
+
private getTypeIconByType;
|
|
193
|
+
private getTypeIcon;
|
|
194
|
+
private getAssetPreview;
|
|
195
|
+
private getColorIndicator;
|
|
196
|
+
private getMetadata;
|
|
197
|
+
private scheduleRetry;
|
|
198
|
+
private select;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
type SceneToolsPanelOptions = {
|
|
202
|
+
onHighlightObject: (enabled: boolean) => void;
|
|
203
|
+
onHighlightAnchor: (enabled: boolean) => void;
|
|
204
|
+
onNudge: (dx: number, dy: number) => void;
|
|
205
|
+
onShowSplash?: () => void;
|
|
206
|
+
onUpdateSplash?: (patch: Record<string, any>) => void;
|
|
207
|
+
};
|
|
208
|
+
declare class SceneToolsPanel {
|
|
209
|
+
private root;
|
|
210
|
+
private infoEls;
|
|
211
|
+
private options;
|
|
212
|
+
render(): string;
|
|
213
|
+
initialize(container: HTMLElement, options: SceneToolsPanelOptions): void;
|
|
214
|
+
getNudgeStep(): number;
|
|
215
|
+
updateInfo(info: {
|
|
216
|
+
instanceId: string;
|
|
217
|
+
worldX: number;
|
|
218
|
+
worldY: number;
|
|
219
|
+
anchorX: number | null;
|
|
220
|
+
anchorY: number | null;
|
|
221
|
+
} | null): void;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
type LibraryPanelOptions = {
|
|
225
|
+
onApply: (objectId: string, assetPath: string, category: string) => Promise<void>;
|
|
226
|
+
onReset: (objectId: string, defaultAsset: string, category: string) => Promise<void>;
|
|
227
|
+
};
|
|
228
|
+
declare class LibraryPanel {
|
|
229
|
+
private root;
|
|
230
|
+
private slotsContainer;
|
|
231
|
+
private options;
|
|
232
|
+
private registry;
|
|
233
|
+
private expandedSlot;
|
|
234
|
+
private mergeRegistries;
|
|
235
|
+
/**
|
|
236
|
+
* Render the library panel HTML template (called by DebugPanel)
|
|
237
|
+
*/
|
|
238
|
+
render(): string;
|
|
239
|
+
initialize(container: HTMLElement, options: LibraryPanelOptions): void;
|
|
240
|
+
/**
|
|
241
|
+
* Re-renders the slots using the current in-memory registry.
|
|
242
|
+
* Useful when registry is updated locally (e.g. after conversion)
|
|
243
|
+
*/
|
|
244
|
+
reRender(): void;
|
|
245
|
+
refresh(): Promise<void>;
|
|
246
|
+
private loadAssetRegistry;
|
|
247
|
+
private renderSlots;
|
|
248
|
+
private createSlotElement;
|
|
249
|
+
private createLibraryElement;
|
|
250
|
+
private fetchFolderAssets;
|
|
251
|
+
private handleApply;
|
|
252
|
+
private handleReset;
|
|
253
|
+
private formatCategoryName;
|
|
254
|
+
/**
|
|
255
|
+
* Handle AI Edit for existing asset
|
|
256
|
+
*/
|
|
257
|
+
private handleAIEdit;
|
|
258
|
+
/**
|
|
259
|
+
* Handle Create with AI (new asset from scratch)
|
|
260
|
+
*/
|
|
261
|
+
private handleCreateWithAI;
|
|
262
|
+
/**
|
|
263
|
+
* Highlights and scrolls to a specific slot
|
|
264
|
+
*/
|
|
265
|
+
highlightSlot(objectId: string, category?: string): void;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
type InspectorPanelOptions = {
|
|
269
|
+
onPropertyChange?: (objectId: string, path: string, value: any) => void;
|
|
270
|
+
};
|
|
271
|
+
declare class InspectorPanel {
|
|
272
|
+
private root;
|
|
273
|
+
private contentContainer;
|
|
274
|
+
private selectedObjectId;
|
|
275
|
+
private options;
|
|
276
|
+
private showAdvanced;
|
|
277
|
+
private rendererRegistry;
|
|
278
|
+
private updateManager;
|
|
279
|
+
private quickActions;
|
|
280
|
+
constructor();
|
|
281
|
+
render(): string;
|
|
282
|
+
initialize(container: HTMLElement, options: InspectorPanelOptions): void;
|
|
283
|
+
loadObject(objectId: string): void;
|
|
284
|
+
private renderProperties;
|
|
285
|
+
private renderConversionButtons;
|
|
286
|
+
private renderFooter;
|
|
287
|
+
private renderSection;
|
|
288
|
+
private attachEventListeners;
|
|
289
|
+
private addComponent;
|
|
290
|
+
private isSectionMeaningful;
|
|
291
|
+
private showError;
|
|
292
|
+
private formatLabel;
|
|
293
|
+
private getSectionIcon;
|
|
294
|
+
clear(): void;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Brand Vision Mapper Panel
|
|
299
|
+
*
|
|
300
|
+
* Three-tab UI for importing brand assets and mapping them to game objects:
|
|
301
|
+
* - Tab 1: Upload manifest + assets + flat design
|
|
302
|
+
* - Tab 2: Review AI-generated mappings (APPLY / GENERATE / KEEP)
|
|
303
|
+
* - Tab 3: Generation progress + Apply all
|
|
304
|
+
*
|
|
305
|
+
* Pipeline logic is handled by brandVisionPipeline.ts
|
|
306
|
+
* Prompts are defined in brandVisionPrompts.ts
|
|
307
|
+
*/
|
|
308
|
+
|
|
309
|
+
declare class BrandVisionPanel {
|
|
310
|
+
private root;
|
|
311
|
+
private currentTab;
|
|
312
|
+
private onClose?;
|
|
313
|
+
private uploadMethod;
|
|
314
|
+
private uploadedJsons;
|
|
315
|
+
private normalizedManifest;
|
|
316
|
+
private flatDesignDataUrl;
|
|
317
|
+
private assetFiles;
|
|
318
|
+
private zipFile;
|
|
319
|
+
private mappingResult;
|
|
320
|
+
private analysisRawResponse;
|
|
321
|
+
private analysisParsedOk;
|
|
322
|
+
private analysisParseError;
|
|
323
|
+
private isAnalyzing;
|
|
324
|
+
private isGenerating;
|
|
325
|
+
private get manifest();
|
|
326
|
+
render(): string;
|
|
327
|
+
initialize(container: HTMLElement, onClose?: () => void): void;
|
|
328
|
+
private attachEventListeners;
|
|
329
|
+
private switchTab;
|
|
330
|
+
private switchUploadMethod;
|
|
331
|
+
private handleZipUpload;
|
|
332
|
+
private processZipFile;
|
|
333
|
+
private fileToDataUrl;
|
|
334
|
+
private blobToDataUrl;
|
|
335
|
+
private inferAssetCategory;
|
|
336
|
+
private addAssetsToRegistry;
|
|
337
|
+
private refreshLibrary;
|
|
338
|
+
private handleManifestUpload;
|
|
339
|
+
private handleAssetsUpload;
|
|
340
|
+
private handleFlatDesignUpload;
|
|
341
|
+
private runAnalysis;
|
|
342
|
+
private generateAllMissing;
|
|
343
|
+
private renderMappings;
|
|
344
|
+
private applyAll;
|
|
345
|
+
private getEngineAssets;
|
|
346
|
+
private getPreviewValueForMapping;
|
|
347
|
+
private stageOverridesFromMappings;
|
|
348
|
+
private applyOne;
|
|
349
|
+
private saveAndApplyOne;
|
|
350
|
+
private openEditorForOne;
|
|
351
|
+
private generateOne;
|
|
352
|
+
private stageEngineAssetOverride;
|
|
353
|
+
private saveToLibraryAndReturnPath;
|
|
354
|
+
private inferCategoryFromAssetKey;
|
|
355
|
+
private copyRawAnalysis;
|
|
356
|
+
private setStatus;
|
|
357
|
+
private getGameObjects;
|
|
358
|
+
private getGamePrompt;
|
|
359
|
+
private setupResizeHandle;
|
|
360
|
+
refresh(): void;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
type CustomizeSettingsPanelOptions = {
|
|
364
|
+
onApply: (payload: {
|
|
365
|
+
assets: Record<string, string>;
|
|
366
|
+
runtime: {
|
|
367
|
+
theme: Record<string, string>;
|
|
368
|
+
ui: Record<string, string>;
|
|
369
|
+
fonts: Record<string, string>;
|
|
370
|
+
audio: Record<string, string | number>;
|
|
371
|
+
};
|
|
372
|
+
}, options?: {
|
|
373
|
+
source?: 'manual' | 'auto';
|
|
374
|
+
}) => void;
|
|
375
|
+
};
|
|
376
|
+
declare class CustomizeSettingsPanel {
|
|
377
|
+
private root;
|
|
378
|
+
private assetsContainer;
|
|
379
|
+
private colorsContainer;
|
|
380
|
+
private fontsContainer;
|
|
381
|
+
private textsContainer;
|
|
382
|
+
private audioContainer;
|
|
383
|
+
private options;
|
|
384
|
+
private previewModal;
|
|
385
|
+
private autoApplyTimer;
|
|
386
|
+
private activePreviewKey;
|
|
387
|
+
private activePreviewValue;
|
|
388
|
+
private activePreviewFileInput;
|
|
389
|
+
private retryTimer;
|
|
390
|
+
private aiModal;
|
|
391
|
+
private aiTargetKey;
|
|
392
|
+
private aiKeyInput;
|
|
393
|
+
private aiPromptInput;
|
|
394
|
+
private aiStrengthInput;
|
|
395
|
+
private aiStrengthValue;
|
|
396
|
+
private aiModelSelect;
|
|
397
|
+
private aiModalSubtitle;
|
|
398
|
+
private aiGalleryToggle;
|
|
399
|
+
private aiGalleryEl;
|
|
400
|
+
private aiGalleryGrid;
|
|
401
|
+
private aiReferenceInput;
|
|
402
|
+
private aiReferenceName;
|
|
403
|
+
private aiReferenceFile;
|
|
404
|
+
private aiRemoveBgToggle;
|
|
405
|
+
private aiUseOutputToggle;
|
|
406
|
+
private aiGenerateBtn;
|
|
407
|
+
private aiApplyBtn;
|
|
408
|
+
private aiSaveLibraryBtn;
|
|
409
|
+
private aiCropBtn;
|
|
410
|
+
private aiDownloadBtn;
|
|
411
|
+
private aiPreviewImg;
|
|
412
|
+
private aiStatusEl;
|
|
413
|
+
private aiOutputDataUrl;
|
|
414
|
+
private aiBaseDataUrl;
|
|
415
|
+
private aiBaseValue;
|
|
416
|
+
private aiOutputKey;
|
|
417
|
+
private aiContext;
|
|
418
|
+
private aiBgToleranceInput;
|
|
419
|
+
private aiBgToleranceValue;
|
|
420
|
+
private aiRawOutputDataUrl;
|
|
421
|
+
private aiLoadingEl;
|
|
422
|
+
render(): string;
|
|
423
|
+
initialize(container: HTMLElement, options: CustomizeSettingsPanelOptions): void;
|
|
424
|
+
private setupRenderModeHandlers;
|
|
425
|
+
private applyEndgamePngMode;
|
|
426
|
+
private applySplashPngMode;
|
|
427
|
+
openAiEditor(assetKey: string, prompt?: string, initialValue?: string, context?: {
|
|
428
|
+
objectId?: string;
|
|
429
|
+
path?: string;
|
|
430
|
+
}): void;
|
|
431
|
+
refresh(): void;
|
|
432
|
+
private getEngineSnapshot;
|
|
433
|
+
private renderAssets;
|
|
434
|
+
private renderColors;
|
|
435
|
+
private renderFonts;
|
|
436
|
+
private renderTexts;
|
|
437
|
+
private renderAudio;
|
|
438
|
+
private readUiValue;
|
|
439
|
+
private getObjectTextValue;
|
|
440
|
+
private getObjectPropertyValue;
|
|
441
|
+
private handleApply;
|
|
442
|
+
private handleApplyWithSource;
|
|
443
|
+
private setupAiPanel;
|
|
444
|
+
private setAiStatus;
|
|
445
|
+
private getSelectedAssetKey;
|
|
446
|
+
private getSelectedAssetInput;
|
|
447
|
+
private getImageDataFromAsset;
|
|
448
|
+
private updateAiBasePreview;
|
|
449
|
+
private updateAiPreview;
|
|
450
|
+
private updateAiModalPreview;
|
|
451
|
+
private setAiLoading;
|
|
452
|
+
private toggleAiGallery;
|
|
453
|
+
private renderAiGallery;
|
|
454
|
+
private getAiGalleryEntries;
|
|
455
|
+
private isAiGalleryImage;
|
|
456
|
+
private selectAiGalleryAsset;
|
|
457
|
+
private openAiModal;
|
|
458
|
+
private closeAiModal;
|
|
459
|
+
private handleAiGenerate;
|
|
460
|
+
private refreshAiOutputFromRaw;
|
|
461
|
+
private setAiOutput;
|
|
462
|
+
private setAiOutputButtonsEnabled;
|
|
463
|
+
private handleAiApply;
|
|
464
|
+
private handleAiSaveToLibrary;
|
|
465
|
+
private inferCategoryFromAssetKey;
|
|
466
|
+
private inferObjectIdFromAssetKey;
|
|
467
|
+
private inferPathFromAssetKey;
|
|
468
|
+
private getFilenameFromPath;
|
|
469
|
+
private handleAiCrop;
|
|
470
|
+
private handleAiDownload;
|
|
471
|
+
private handleAssetValueChange;
|
|
472
|
+
private handleAssetUpload;
|
|
473
|
+
private scheduleAutoApply;
|
|
474
|
+
private previewAsset;
|
|
475
|
+
private resolveAssetUrls;
|
|
476
|
+
private guessMimeType;
|
|
477
|
+
private openPreviewModal;
|
|
478
|
+
private loadWithFallback;
|
|
479
|
+
private fetchWithFallback;
|
|
480
|
+
private applyObjectPropertyValue;
|
|
481
|
+
private applyTextColorToObject;
|
|
482
|
+
private closePreviewModal;
|
|
483
|
+
private updatePreviewIfOpen;
|
|
484
|
+
private scheduleRetry;
|
|
485
|
+
private clearRetry;
|
|
486
|
+
private setupResizeHandle;
|
|
487
|
+
private getImageDimensions;
|
|
488
|
+
private loadImage;
|
|
489
|
+
private showManualCropModal;
|
|
490
|
+
private loadImageForValue;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
type WorkbenchTab = 'hierarchy' | 'inspector' | 'library' | 'ai' | 'changes';
|
|
494
|
+
/**
|
|
495
|
+
* DebugPanel context interface - used to pass 'this' context to modular functions
|
|
496
|
+
*/
|
|
497
|
+
interface DebugPanelContext {
|
|
498
|
+
container: HTMLElement | null;
|
|
499
|
+
debugOverlay: HTMLElement | null;
|
|
500
|
+
configViewer: HTMLElement | null;
|
|
501
|
+
isDebugOpen: boolean;
|
|
502
|
+
selectedObjectId: string | null;
|
|
503
|
+
activeTab: WorkbenchTab;
|
|
504
|
+
highlightObject: boolean;
|
|
505
|
+
highlightAnchor: boolean;
|
|
506
|
+
objectAutoApplyTimer: number | null;
|
|
507
|
+
objectDebugRaf: number | null;
|
|
508
|
+
objectBoundsGfx: Graphics | null;
|
|
509
|
+
objectAnchorGfx: Graphics | null;
|
|
510
|
+
sceneObjectsPanel: SceneObjectsPanel;
|
|
511
|
+
sceneToolsPanel: SceneToolsPanel;
|
|
512
|
+
inspectorPanel: InspectorPanel;
|
|
513
|
+
libraryPanel: LibraryPanel;
|
|
514
|
+
brandVisionPanel: BrandVisionPanel;
|
|
515
|
+
customizeSettingsPanel: CustomizeSettingsPanel;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
declare class ConfigPersistencePanel {
|
|
519
|
+
private container;
|
|
520
|
+
initialize(container: HTMLElement): void;
|
|
521
|
+
render(): string;
|
|
522
|
+
private formatValue;
|
|
523
|
+
setupEventListeners(): void;
|
|
524
|
+
private showSuccessNotification;
|
|
525
|
+
refreshPanel(): void;
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
/**
|
|
529
|
+
* DebugPanel - Refactored using modular functions
|
|
530
|
+
* Original methods are now in separate modules under ./debug/
|
|
531
|
+
*/
|
|
532
|
+
declare class DebugPanel implements DebugPanelContext {
|
|
533
|
+
debugOverlay: HTMLElement | null;
|
|
534
|
+
isDebugOpen: boolean;
|
|
535
|
+
selectedObjectId: string | null;
|
|
536
|
+
configViewer: HTMLElement | null;
|
|
537
|
+
container: HTMLElement | null;
|
|
538
|
+
objectAutoApplyTimer: number | null;
|
|
539
|
+
objectDebugRaf: number | null;
|
|
540
|
+
objectBoundsGfx: Graphics | null;
|
|
541
|
+
objectAnchorGfx: Graphics | null;
|
|
542
|
+
highlightObject: boolean;
|
|
543
|
+
highlightAnchor: boolean;
|
|
544
|
+
activeTab: WorkbenchTab;
|
|
545
|
+
sceneObjectsPanel: SceneObjectsPanel;
|
|
546
|
+
sceneToolsPanel: SceneToolsPanel;
|
|
547
|
+
inspectorPanel: InspectorPanel;
|
|
548
|
+
libraryPanel: LibraryPanel;
|
|
549
|
+
brandVisionPanel: BrandVisionPanel;
|
|
550
|
+
customizeSettingsPanel: CustomizeSettingsPanel;
|
|
551
|
+
configPersistencePanel: ConfigPersistencePanel;
|
|
552
|
+
private applyAssetChange;
|
|
553
|
+
private resetAsset;
|
|
554
|
+
private applySlotAsset;
|
|
555
|
+
private resetSlotAsset;
|
|
556
|
+
private startObjectVisuals;
|
|
557
|
+
private stopObjectVisuals;
|
|
558
|
+
private shouldRunObjectVisuals;
|
|
559
|
+
private updateObjectVisuals;
|
|
560
|
+
private getSelectedInstanceId;
|
|
561
|
+
private getDisplayObjectById;
|
|
562
|
+
private getSelectedObjectConfig;
|
|
563
|
+
private getConfigAnchorWorldPoint;
|
|
564
|
+
private getScreenSize;
|
|
565
|
+
private ensureBoundsGfx;
|
|
566
|
+
private ensureAnchorGfx;
|
|
567
|
+
private drawBounds;
|
|
568
|
+
private drawAnchor;
|
|
569
|
+
private clearBounds;
|
|
570
|
+
private clearAnchor;
|
|
571
|
+
private clearObjectVisuals;
|
|
572
|
+
private updateObjectInfo;
|
|
573
|
+
private resetDebugConfig;
|
|
574
|
+
private applyDebugConfig;
|
|
575
|
+
private exportDebugConfig;
|
|
576
|
+
private loadObjectConfig;
|
|
577
|
+
private fillConfigViewer;
|
|
578
|
+
private copyConfigValues;
|
|
579
|
+
private applyObjectConfig;
|
|
580
|
+
private applyCustomizeSettings;
|
|
581
|
+
private scheduleObjectAutoApply;
|
|
582
|
+
setupDebugEventListeners(): void;
|
|
583
|
+
private setupDebugInputListeners;
|
|
584
|
+
private setupPanelLayout;
|
|
585
|
+
private setupCollapsiblePanels;
|
|
586
|
+
private setupRangeInput;
|
|
587
|
+
private updateWorkbenchTabs;
|
|
588
|
+
private saveWorkbenchState;
|
|
589
|
+
private loadWorkbenchState;
|
|
590
|
+
initialize(container: HTMLElement): void;
|
|
591
|
+
selectObject(objectId: string): void;
|
|
592
|
+
private highlightChangesTab;
|
|
593
|
+
getDebugOverlayHTML(): string;
|
|
594
|
+
refresh(): void;
|
|
595
|
+
toggleDebug(force?: boolean): void;
|
|
596
|
+
updateDebugBadge(): void;
|
|
597
|
+
private handleObjectSelect;
|
|
598
|
+
private nudgeSelectedObject;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
/**
|
|
602
|
+
* Preview Live-Edit Bridge (SDK)
|
|
603
|
+
*
|
|
604
|
+
* Provides the window hooks used by preview panels + hot-reload systems.
|
|
605
|
+
* This is intentionally small and defensive: it does not assume any specific
|
|
606
|
+
* GameObject implementation beyond "getDisplayObject" or common PIXI fields.
|
|
607
|
+
*/
|
|
608
|
+
type LiveEditBridge = {
|
|
609
|
+
/** Apply a full object config (usually after reloading from disk) */
|
|
610
|
+
applyObjectConfig: (objectId: string, nextConfig: any) => Promise<void>;
|
|
611
|
+
/** Rebuild lookup tables used by panels */
|
|
612
|
+
rebuildIndexes: () => void;
|
|
613
|
+
};
|
|
614
|
+
type SetupLiveEditBridgeOptions = {
|
|
615
|
+
getConfig: () => any;
|
|
616
|
+
gameObjectManager: any;
|
|
617
|
+
assets?: any;
|
|
618
|
+
onObjectConfigApplied?: (objectId: string, nextConfig: any, instanceIds: string[]) => void;
|
|
619
|
+
};
|
|
620
|
+
/**
|
|
621
|
+
* Setup the live-edit bridge.
|
|
622
|
+
*
|
|
623
|
+
* Call this after you have a loaded config and an initialized gameObjectManager.
|
|
624
|
+
*/
|
|
625
|
+
declare function setupLiveEditBridge(options: SetupLiveEditBridgeOptions): LiveEditBridge;
|
|
626
|
+
|
|
627
|
+
/**
|
|
628
|
+
* Hot-Reload System for Object-Centric Config
|
|
629
|
+
*
|
|
630
|
+
* Enables live config editing during development.
|
|
631
|
+
* Edit your config JSON files and see changes instantly!
|
|
632
|
+
*/
|
|
633
|
+
interface HotReloadWatcher {
|
|
634
|
+
watch(configPath: string, callback: (event: ConfigChangeEvent) => void): void;
|
|
635
|
+
unwatch(configPath: string): void;
|
|
636
|
+
stop(): void;
|
|
637
|
+
}
|
|
638
|
+
interface ConfigChangeEvent {
|
|
639
|
+
type: 'object' | 'component' | 'engine' | 'scene';
|
|
640
|
+
path: string;
|
|
641
|
+
objectId?: string;
|
|
642
|
+
componentName?: string;
|
|
643
|
+
}
|
|
644
|
+
interface ReloadStrategy {
|
|
645
|
+
shouldFullReload(event: ConfigChangeEvent): boolean;
|
|
646
|
+
getAffectedObjects(event: ConfigChangeEvent): string[];
|
|
647
|
+
}
|
|
648
|
+
/**
|
|
649
|
+
* Determines reload strategy based on config change type
|
|
650
|
+
*/
|
|
651
|
+
declare class DefaultReloadStrategy implements ReloadStrategy {
|
|
652
|
+
shouldFullReload(event: ConfigChangeEvent): boolean;
|
|
653
|
+
getAffectedObjects(event: ConfigChangeEvent): string[];
|
|
654
|
+
}
|
|
655
|
+
/**
|
|
656
|
+
* File watcher for config hot-reload
|
|
657
|
+
*/
|
|
658
|
+
declare class ConfigWatcher implements HotReloadWatcher {
|
|
659
|
+
private pollingInterval;
|
|
660
|
+
private fileHashes;
|
|
661
|
+
private callbacks;
|
|
662
|
+
private intervalMs;
|
|
663
|
+
constructor(intervalMs?: number);
|
|
664
|
+
watch(configPath: string, callback: (event: ConfigChangeEvent) => void): void;
|
|
665
|
+
private checkAllFiles;
|
|
666
|
+
private determineEventType;
|
|
667
|
+
private hashString;
|
|
668
|
+
unwatch(configPath: string): void;
|
|
669
|
+
stop(): void;
|
|
670
|
+
}
|
|
671
|
+
/**
|
|
672
|
+
* Diff utility for comparing configs
|
|
673
|
+
*/
|
|
674
|
+
declare function diffConfigs(oldConfig: any, newConfig: any): string[];
|
|
675
|
+
/**
|
|
676
|
+
* Rehydrate object with new config
|
|
677
|
+
*/
|
|
678
|
+
declare function rehydrateObject(objectId: string, oldConfig: any, newConfig: any, schemas: Map<string, any>): any;
|
|
679
|
+
|
|
680
|
+
interface HotReloadDependencies {
|
|
681
|
+
activeConfig: ObjectCentricConfig;
|
|
682
|
+
setActiveConfig: (config: ObjectCentricConfig) => void;
|
|
683
|
+
gameObjectManager: any;
|
|
684
|
+
CustomAssets: any;
|
|
685
|
+
audioSystem: any;
|
|
686
|
+
setAudioSystem: (audioSystem: any) => void;
|
|
687
|
+
liveEditBridge: any;
|
|
688
|
+
createAudioSystem: (config: ObjectCentricConfig) => any;
|
|
689
|
+
}
|
|
690
|
+
/**
|
|
691
|
+
* Setup hot reload for config files.
|
|
692
|
+
*
|
|
693
|
+
* SDK-owned plumbing so demo projects only provide dependencies.
|
|
694
|
+
*/
|
|
695
|
+
declare function setupHotReload(deps: HotReloadDependencies): void;
|
|
696
|
+
|
|
697
|
+
/**
|
|
698
|
+
* Config Override System
|
|
699
|
+
*
|
|
700
|
+
* Allows preview panel to override config values at runtime.
|
|
701
|
+
* Changes are applied immediately and can be:
|
|
702
|
+
* - persisted across restarts (in-memory, via window)
|
|
703
|
+
* - exported (diff/patch/json) via ConfigExport
|
|
704
|
+
*
|
|
705
|
+
* NOTE:
|
|
706
|
+
* In a pure-browser environment we cannot write back to disk.
|
|
707
|
+
* "Apply (real changes)" should be implemented via an optional dev-server endpoint
|
|
708
|
+
* (e.g. Vite plugin) that receives exported patches and writes config files.
|
|
709
|
+
*/
|
|
710
|
+
interface ConfigOverride {
|
|
711
|
+
objectId?: string;
|
|
712
|
+
sceneId?: string;
|
|
713
|
+
path: string;
|
|
714
|
+
value: any;
|
|
715
|
+
}
|
|
716
|
+
interface ConfigChange {
|
|
717
|
+
objectId?: string;
|
|
718
|
+
path: string;
|
|
719
|
+
oldValue: any;
|
|
720
|
+
newValue: any;
|
|
721
|
+
ts: number;
|
|
722
|
+
}
|
|
723
|
+
interface ConfigOverrideOptions {
|
|
724
|
+
silent?: boolean;
|
|
725
|
+
persist?: boolean;
|
|
726
|
+
}
|
|
727
|
+
declare function getOverrideMode(): boolean;
|
|
728
|
+
declare function setOverrideMode(enabled: boolean): void;
|
|
729
|
+
/**
|
|
730
|
+
* Apply a config override
|
|
731
|
+
*/
|
|
732
|
+
declare function applyConfigOverride(override: ConfigOverride, options?: ConfigOverrideOptions): void;
|
|
733
|
+
/**
|
|
734
|
+
* Apply multiple config overrides
|
|
735
|
+
*/
|
|
736
|
+
declare function applyConfigOverrides(overrides: ConfigOverride[], options?: ConfigOverrideOptions): void;
|
|
737
|
+
/**
|
|
738
|
+
* Clear all config overrides
|
|
739
|
+
*/
|
|
740
|
+
declare function clearConfigOverrides(): void;
|
|
741
|
+
declare function clearConfigOverridesForObject(objectId: string): void;
|
|
742
|
+
declare function removeConfigOverride(objectId: string | undefined, path: string): void;
|
|
743
|
+
/**
|
|
744
|
+
* Get all active overrides
|
|
745
|
+
*/
|
|
746
|
+
declare function getConfigOverrides(): ConfigOverride[];
|
|
747
|
+
/**
|
|
748
|
+
* SDK-facing manager used by ConfigExport.
|
|
749
|
+
* Kept minimal to avoid forcing consumers into a specific persistence strategy.
|
|
750
|
+
*/
|
|
751
|
+
declare const configOverrideManager: {
|
|
752
|
+
getCurrentConfig(): any | null;
|
|
753
|
+
getChanges(): ConfigChange[];
|
|
754
|
+
clearChanges(): void;
|
|
755
|
+
};
|
|
756
|
+
/**
|
|
757
|
+
* Deep clone utility for baseline copying
|
|
758
|
+
*/
|
|
759
|
+
declare function deepClone(obj: any): any;
|
|
760
|
+
/**
|
|
761
|
+
* Export full config snapshots (Safeguard #1)
|
|
762
|
+
* CRITICAL: Must start from loader-resolved baseline, never from scratch
|
|
763
|
+
* Must output full object trees, never just changed keys
|
|
764
|
+
*/
|
|
765
|
+
declare function exportConfigsAsJSON(): Record<string, any>;
|
|
766
|
+
/**
|
|
767
|
+
* Get summary of config state (for UI display)
|
|
768
|
+
*/
|
|
769
|
+
declare function getConfigStateSummary(): {
|
|
770
|
+
modifiedObjects: string[];
|
|
771
|
+
overrideCount: number;
|
|
772
|
+
hasChanges: boolean;
|
|
773
|
+
overrides: ConfigOverride[];
|
|
774
|
+
};
|
|
775
|
+
/**
|
|
776
|
+
* Apply configs to disk (Safeguard #2)
|
|
777
|
+
* CRITICAL: Clear cache ONLY after successful API response
|
|
778
|
+
*/
|
|
779
|
+
declare function applyConfigsToDisk(): Promise<void>;
|
|
780
|
+
/**
|
|
781
|
+
* Reset to applied state (clear cache, reload)
|
|
782
|
+
*/
|
|
783
|
+
declare function resetToApplied(): void;
|
|
784
|
+
/**
|
|
785
|
+
* Reset to original configs (restore from backup)
|
|
786
|
+
*/
|
|
787
|
+
declare function resetToOriginal(): Promise<void>;
|
|
788
|
+
|
|
789
|
+
/**
|
|
790
|
+
* Base Layer - Lottie Instance
|
|
791
|
+
*
|
|
792
|
+
* Provides isolated lottie-web instance for base layer.
|
|
793
|
+
* Prevents conflicts with student layer's lottie instance.
|
|
794
|
+
*
|
|
795
|
+
* DO NOT EDIT - Base Layer
|
|
796
|
+
*/
|
|
797
|
+
declare const baseLottie: any;
|
|
798
|
+
|
|
799
|
+
declare global {
|
|
800
|
+
const mraid: any;
|
|
801
|
+
const dapi: any;
|
|
802
|
+
const AD_PROTOCOL: string;
|
|
803
|
+
const AD_NETWORK: string;
|
|
804
|
+
}
|
|
805
|
+
type IDs = {
|
|
806
|
+
mechanic_id: string;
|
|
807
|
+
variant_id: string;
|
|
808
|
+
deployment_id: string;
|
|
809
|
+
export_id: string;
|
|
810
|
+
profile_id: string;
|
|
811
|
+
instance_id: string;
|
|
812
|
+
};
|
|
813
|
+
type Consent = {
|
|
814
|
+
analytics?: boolean;
|
|
815
|
+
personalization?: boolean;
|
|
816
|
+
};
|
|
817
|
+
type InitOptions = {
|
|
818
|
+
rootEl?: HTMLElement;
|
|
819
|
+
ids?: Partial<IDs>;
|
|
820
|
+
profile?: 'web_embed' | 'mraid' | string;
|
|
821
|
+
consent?: Consent;
|
|
822
|
+
destinationUrl?: string;
|
|
823
|
+
telemetry?: TelemetryConfig;
|
|
824
|
+
};
|
|
825
|
+
type Envelope = {
|
|
826
|
+
event_name: string;
|
|
827
|
+
ts: number;
|
|
828
|
+
session_id: string;
|
|
829
|
+
deployment_id: string;
|
|
830
|
+
variant_id: string;
|
|
831
|
+
export_profile_id: string;
|
|
832
|
+
instance_id: string;
|
|
833
|
+
env: 'web' | 'mraid' | 'native';
|
|
834
|
+
attribution?: {
|
|
835
|
+
campaign_id?: string;
|
|
836
|
+
placement_id?: string;
|
|
837
|
+
experiment_id?: string;
|
|
838
|
+
};
|
|
839
|
+
payload?: any;
|
|
840
|
+
};
|
|
841
|
+
declare const Handler: {
|
|
842
|
+
init(options?: InitOptions, callback?: (w: number, h: number) => void): void;
|
|
843
|
+
getRoot(): HTMLElement;
|
|
844
|
+
readonly version: string;
|
|
845
|
+
readonly maxWidth: number;
|
|
846
|
+
readonly maxHeight: number;
|
|
847
|
+
readonly isLandscape: boolean;
|
|
848
|
+
readonly isReady: boolean;
|
|
849
|
+
readonly isStarted: boolean;
|
|
850
|
+
readonly isPaused: boolean;
|
|
851
|
+
readonly isFinished: boolean;
|
|
852
|
+
readonly volume: number;
|
|
853
|
+
readonly interactions: number;
|
|
854
|
+
on(event: string, fn: (...args: any[]) => void): void;
|
|
855
|
+
off(event: string, fn?: (...args: any[]) => void): void;
|
|
856
|
+
start(): void;
|
|
857
|
+
finish(): void;
|
|
858
|
+
install(url?: string): void;
|
|
859
|
+
emit(name: string, payload?: any): void;
|
|
860
|
+
gameStart(): void;
|
|
861
|
+
gameEnd(): void;
|
|
862
|
+
ctaClick(url?: string, options?: {
|
|
863
|
+
open?: boolean;
|
|
864
|
+
}): void;
|
|
865
|
+
ctaShow(meta?: any): void;
|
|
866
|
+
ctaDismiss(meta?: any): void;
|
|
867
|
+
getGameTimeMs(): number | null;
|
|
868
|
+
endSession(reason?: "complete" | "cta" | "manual"): void;
|
|
869
|
+
setAttribution(attribution?: Envelope["attribution"]): void;
|
|
870
|
+
abTest(experimentId: string, variants: string[]): string;
|
|
871
|
+
levelStart(levelId: string | number, meta?: any): void;
|
|
872
|
+
levelComplete(levelId: string | number, meta?: any): void;
|
|
873
|
+
levelFail(levelId: string | number, meta?: any): void;
|
|
874
|
+
checkpoint(checkpointId: string | number, meta?: any): void;
|
|
875
|
+
reward(rewardId: string, meta?: any): void;
|
|
876
|
+
tutorialStart(stepId?: string | number, meta?: any): void;
|
|
877
|
+
tutorialComplete(stepId?: string | number, meta?: any): void;
|
|
878
|
+
tutorialSkip(stepId?: string | number, meta?: any): void;
|
|
879
|
+
timerStart(key: string): void;
|
|
880
|
+
timerEnd(key: string, eventName?: "load_time" | "level_time" | "custom", meta?: any): void;
|
|
881
|
+
fps(value: number, meta?: any): void;
|
|
882
|
+
memory(bytes: number, meta?: any): void;
|
|
883
|
+
assetLoadStart(assetId: string, meta?: any): void;
|
|
884
|
+
assetLoadComplete(assetId: string, meta?: any): void;
|
|
885
|
+
reportError(code: string, message: string, meta?: any): void;
|
|
886
|
+
retry(): void;
|
|
887
|
+
pause(): void;
|
|
888
|
+
resume(): void;
|
|
889
|
+
resize(width?: number, height?: number): void;
|
|
890
|
+
};
|
|
891
|
+
|
|
892
|
+
export { type ConfigChange, type ConfigChangeEvent, type ConfigOverride, type ConfigOverrideOptions, ConfigWatcher, DebugPanel, DefaultReloadStrategy, type DeviceCategory, type DeviceGroup, type DevicePreset, Handler, type HotReloadDependencies, type HotReloadWatcher, type LiveEditBridge, ObjectCentricConfig, type PreviewOptions, PreviewShell, type ReloadStrategy, type SetupLiveEditBridgeOptions, applyConfigOverride, applyConfigOverrides, applyConfigsToDisk, baseLottie, bootstrap, clearConfigOverrides, clearConfigOverridesForObject, configOverrideManager, createPreviewShell, deepClone, Handler as default, defaultPreset, deviceGroups, devicePresets, diffConfigs, exportConfigsAsJSON, getConfigOverrides, getConfigStateSummary, getOverrideMode, getPresetById, getPresetsByCategory, rehydrateObject, removeConfigOverride, resetToApplied, resetToOriginal, setBootstrapDependencies, setOverrideMode, setupHotReload, setupLiveEditBridge };
|