handler-playable-sdk 0.5.36 → 0.5.40

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/index.css CHANGED
@@ -636,13 +636,6 @@
636
636
  order: -1;
637
637
  }
638
638
 
639
- .scene-tools-title {
640
- font-size: 12px;
641
- font-weight: var(--font-weight-semibold);
642
- color: var(--ui-text);
643
- letter-spacing: 0.4px;
644
- text-transform: uppercase;
645
- }
646
639
 
647
640
  .scene-tools-collapse-btn {
648
641
  width: 24px;
@@ -846,6 +839,68 @@
846
839
  gap: 8px;
847
840
  }
848
841
 
842
+ /* Unsaved changes indicator */
843
+ .preview-unsaved-indicator {
844
+ font-size: 16px;
845
+ color: var(--ui-accent);
846
+ animation: preview-star-pulse 2s ease-in-out infinite;
847
+ display: inline-block;
848
+ margin-right: 4px;
849
+ line-height: 1;
850
+ }
851
+
852
+ @keyframes preview-star-pulse {
853
+ 0%, 100% {
854
+ opacity: 1;
855
+ transform: scale(1);
856
+ }
857
+ 50% {
858
+ opacity: 0.7;
859
+ transform: scale(1.1);
860
+ }
861
+ }
862
+
863
+ /* Save button in toolbar */
864
+ .preview-save-btn {
865
+ display: inline-flex;
866
+ align-items: center;
867
+ gap: 6px;
868
+ padding: 8px 12px;
869
+ background: linear-gradient(135deg, var(--ui-accent), var(--ui-accent-overlay-3));
870
+ color: var(--ui-black);
871
+ border: none;
872
+ border-radius: 6px;
873
+ font-size: 11px;
874
+ font-weight: 700;
875
+ letter-spacing: 0.02em;
876
+ cursor: pointer;
877
+ box-shadow: 0 2px 8px var(--ui-accent-overlay-1);
878
+ transition: all var(--ui-duration-fast) var(--ui-ease);
879
+ }
880
+
881
+ .preview-save-btn:hover {
882
+ transform: translateY(-1px);
883
+ box-shadow: 0 4px 12px var(--ui-accent-overlay-2);
884
+ }
885
+
886
+ .preview-save-btn:active {
887
+ transform: translateY(0);
888
+ }
889
+
890
+ .preview-save-btn svg {
891
+ width: 14px;
892
+ height: 14px;
893
+ stroke-width: 2.5;
894
+ }
895
+
896
+ .preview-save-shortcut {
897
+ font-size: 9px;
898
+ opacity: 0.7;
899
+ font-weight: 600;
900
+ letter-spacing: 0.5px;
901
+ margin-left: 2px;
902
+ }
903
+
849
904
  .view-toggle {
850
905
  display: flex;
851
906
  flex-direction: row;
@@ -1053,6 +1108,25 @@
1053
1108
  color: #ff9500;
1054
1109
  }
1055
1110
 
1111
+ .scene-object-badge.template {
1112
+ background: rgba(168, 85, 247, 0.18);
1113
+ color: #c084fc;
1114
+ }
1115
+
1116
+ .scene-templates-toggle {
1117
+ display: inline-flex;
1118
+ align-items: center;
1119
+ gap: 6px;
1120
+ font-size: 12px;
1121
+ color: var(--ui-text-secondary);
1122
+ margin-left: 10px;
1123
+ user-select: none;
1124
+ }
1125
+
1126
+ .scene-templates-toggle input[type="checkbox"] {
1127
+ accent-color: var(--ui-accent);
1128
+ }
1129
+
1056
1130
  .scene-object-group-system {
1057
1131
  border-left: 3px solid #ff9500;
1058
1132
  padding-left: 8px;
@@ -2591,6 +2665,7 @@
2591
2665
  display: none;
2592
2666
  }
2593
2667
 
2668
+
2594
2669
  /* ========== 04-device-frame.css ========== */
2595
2670
  /* 04 Device Frame */
2596
2671
  /* Auto-generated from preview.css */
@@ -5232,6 +5307,166 @@
5232
5307
  word-wrap: break-word;
5233
5308
  }
5234
5309
 
5310
+ /* Add Object Menu modals – Screen picker & name prompt (hierarchy + Add) */
5311
+ .add-menu-modal-overlay {
5312
+ position: fixed;
5313
+ top: 0;
5314
+ left: 0;
5315
+ width: 100%;
5316
+ height: 100%;
5317
+ background-color: var(--ui-overlay-dark-4);
5318
+ z-index: 10002;
5319
+ display: flex;
5320
+ align-items: center;
5321
+ justify-content: center;
5322
+ }
5323
+
5324
+ .add-menu-modal {
5325
+ background-color: var(--ui-surface);
5326
+ border: 1px solid var(--ui-border);
5327
+ border-radius: 10px;
5328
+ box-shadow: var(--ui-shadow-strong);
5329
+ width: 90%;
5330
+ max-width: 380px;
5331
+ display: flex;
5332
+ flex-direction: column;
5333
+ }
5334
+
5335
+ .add-menu-modal-header {
5336
+ display: flex;
5337
+ align-items: center;
5338
+ justify-content: space-between;
5339
+ padding: 14px 18px;
5340
+ border-bottom: 1px solid var(--ui-border);
5341
+ }
5342
+
5343
+ .add-menu-modal-title {
5344
+ margin: 0;
5345
+ color: var(--ui-text);
5346
+ font-size: 15px;
5347
+ font-weight: 600;
5348
+ }
5349
+
5350
+ .add-menu-modal-close {
5351
+ background: none;
5352
+ border: none;
5353
+ color: var(--ui-muted);
5354
+ font-size: 20px;
5355
+ line-height: 1;
5356
+ padding: 0;
5357
+ width: 28px;
5358
+ height: 28px;
5359
+ display: flex;
5360
+ align-items: center;
5361
+ justify-content: center;
5362
+ border-radius: 6px;
5363
+ cursor: pointer;
5364
+ transition: color 0.15s var(--ui-ease), background 0.15s var(--ui-ease);
5365
+ }
5366
+
5367
+ .add-menu-modal-close:hover {
5368
+ color: var(--ui-text);
5369
+ background: var(--ui-accent-overlay-1);
5370
+ }
5371
+
5372
+ .add-menu-modal-body {
5373
+ padding: 18px;
5374
+ display: flex;
5375
+ flex-direction: column;
5376
+ gap: 10px;
5377
+ }
5378
+
5379
+ .add-menu-modal-label {
5380
+ display: block;
5381
+ color: var(--ui-text);
5382
+ font-size: 13px;
5383
+ font-weight: 500;
5384
+ margin-bottom: 2px;
5385
+ }
5386
+
5387
+ .add-menu-modal-select,
5388
+ .add-menu-modal-input {
5389
+ width: 100%;
5390
+ background-color: var(--ui-surface);
5391
+ color: var(--ui-text);
5392
+ border: 1px solid var(--ui-border);
5393
+ border-radius: 6px;
5394
+ padding: 8px 12px;
5395
+ font-size: 13px;
5396
+ transition: border-color var(--ui-duration-fast) var(--ui-ease),
5397
+ box-shadow var(--ui-duration-fast) var(--ui-ease);
5398
+ appearance: none;
5399
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23888' d='M6 8L2 4h8z'/%3E%3C/svg%3E");
5400
+ background-repeat: no-repeat;
5401
+ background-position: right 10px center;
5402
+ padding-right: 32px;
5403
+ }
5404
+
5405
+ .add-menu-modal-input {
5406
+ background-image: none;
5407
+ padding-right: 12px;
5408
+ }
5409
+
5410
+ .add-menu-modal-select:hover,
5411
+ .add-menu-modal-input:hover {
5412
+ border-color: var(--ui-terracotta);
5413
+ background-color: var(--ui-accent-overlay-1);
5414
+ }
5415
+
5416
+ .add-menu-modal-select:focus,
5417
+ .add-menu-modal-input:focus {
5418
+ outline: none;
5419
+ border-color: var(--ui-accent);
5420
+ box-shadow: 0 0 0 2px var(--ui-accent-overlay-1);
5421
+ }
5422
+
5423
+ .add-menu-modal-hint {
5424
+ font-size: 11px;
5425
+ color: var(--ui-muted);
5426
+ margin-top: 2px;
5427
+ }
5428
+
5429
+ .add-menu-modal-footer {
5430
+ display: flex;
5431
+ align-items: center;
5432
+ justify-content: flex-end;
5433
+ gap: 10px;
5434
+ padding: 14px 18px;
5435
+ border-top: 1px solid var(--ui-border);
5436
+ }
5437
+
5438
+ .add-menu-modal-btn {
5439
+ padding: 8px 16px;
5440
+ border-radius: 6px;
5441
+ font-size: 13px;
5442
+ font-weight: 500;
5443
+ cursor: pointer;
5444
+ transition: all 0.15s var(--ui-ease);
5445
+ border: 1px solid transparent;
5446
+ }
5447
+
5448
+ .add-menu-modal-btn-secondary {
5449
+ background: var(--ui-surface);
5450
+ color: var(--ui-text);
5451
+ border-color: var(--ui-border);
5452
+ }
5453
+
5454
+ .add-menu-modal-btn-secondary:hover {
5455
+ background: var(--ui-surface-2);
5456
+ border-color: var(--ui-accent);
5457
+ }
5458
+
5459
+ .add-menu-modal-btn-primary {
5460
+ background: var(--ui-accent);
5461
+ color: var(--ui-text-white);
5462
+ border-color: var(--ui-accent);
5463
+ }
5464
+
5465
+ .add-menu-modal-btn-primary:hover {
5466
+ background: var(--ui-terracotta-hover);
5467
+ border-color: var(--ui-terracotta-hover);
5468
+ }
5469
+
5235
5470
  /* ========== 11-wizard.css ========== */
5236
5471
  /* Wizard Modal Overlay */
5237
5472
  .wizard-modal {
package/dist/index.d.cts CHANGED
@@ -115,6 +115,8 @@ declare class PreviewShell {
115
115
  private gameReady;
116
116
  private resizeListenersDisabled;
117
117
  private compareSnapshotTimer;
118
+ private hasUnsavedChanges;
119
+ private getShortcutKey;
118
120
  constructor(options?: PreviewOptions);
119
121
  mount(target?: HTMLElement): void;
120
122
  destroy(): void;
@@ -152,6 +154,8 @@ declare class PreviewShell {
152
154
  private setupSpaceKeyListener;
153
155
  private isInputFocused;
154
156
  private setupShortcutListeners;
157
+ private setupUnsavedChangesIndicator;
158
+ private updateUnsavedChangesIndicator;
155
159
  private updateDragCursor;
156
160
  private onFrameDragMove;
157
161
  private onFrameDragEnd;
@@ -181,20 +185,28 @@ declare function createPreviewShell(options?: PreviewOptions): PreviewShell;
181
185
 
182
186
  type SceneObjectsPanelOptions = {
183
187
  onSelect: (objectId: string) => void;
188
+ onMultiSelect?: (objectIds: string[]) => void;
184
189
  };
185
190
  declare class SceneObjectsPanel {
186
191
  private root;
187
192
  private listContainer;
188
193
  private searchInput;
189
194
  private selectedId;
195
+ private selectedIds;
196
+ private lastSelectedIndex;
197
+ private objectEntries;
190
198
  private options;
191
199
  private retryTimer;
192
200
  private screenFilter;
201
+ private showTemplates;
193
202
  private isContextMenuOpen;
194
203
  private getScreenFilterStorageKey;
204
+ private getShowTemplatesStorageKey;
195
205
  render(): string;
196
206
  initialize(container: HTMLElement, options: SceneObjectsPanelOptions): void;
197
207
  setSelected(objectId: string | null): void;
208
+ getSelectedIds(): string[];
209
+ private updateSelectionUI;
198
210
  refreshObjects(): void;
199
211
  /**
200
212
  * Format display name: removes json. prefix, converts underscores to spaces, title case
@@ -214,6 +226,9 @@ declare class SceneObjectsPanel {
214
226
  private getMetadata;
215
227
  private scheduleRetry;
216
228
  private select;
229
+ private toggleSelect;
230
+ private selectRange;
231
+ private updateLastSelectedIndex;
217
232
  private getDefaultScreenForCreate;
218
233
  private openAddObjectMenu;
219
234
  /**
@@ -222,7 +237,10 @@ declare class SceneObjectsPanel {
222
237
  private openAddObjectWizard;
223
238
  private showContextMenu;
224
239
  private deleteObject;
240
+ private deleteMultipleObjects;
225
241
  private deleteSystemGroup;
242
+ private moveObject;
243
+ private moveMultipleObjects;
226
244
  private syncScreens;
227
245
  }
228
246
 
@@ -685,7 +703,7 @@ declare class DebugPanel implements DebugPanelContext {
685
703
  toggleDebug(force?: boolean): void;
686
704
  updateDebugBadge(): void;
687
705
  private handleObjectSelect;
688
- nudgeSelectedObject(dx: number, dy: number): void;
706
+ nudgeSelectedObject(dx: number, dy: number): Promise<void>;
689
707
  }
690
708
 
691
709
  /**
@@ -809,6 +827,8 @@ interface ConfigChange {
809
827
  oldValue: any;
810
828
  newValue: any;
811
829
  ts: number;
830
+ changeType?: 'property' | 'object_create' | 'object_delete';
831
+ metadata?: any;
812
832
  }
813
833
  interface ConfigOverrideOptions {
814
834
  silent?: boolean;
@@ -855,6 +875,14 @@ declare function undoLastConfigChange(): boolean;
855
875
  * Returns true if redo was successful, false if no changes to redo
856
876
  */
857
877
  declare function redoLastConfigChange(): boolean;
878
+ /**
879
+ * Track object creation in undo history
880
+ */
881
+ declare function trackObjectCreation(objectId: string, screenId: string, objectConfig: any): void;
882
+ /**
883
+ * Track object deletion in undo history
884
+ */
885
+ declare function trackObjectDeletion(objectId: string, screenId: string, objectConfig: any): void;
858
886
  /**
859
887
  * Deep clone utility for baseline copying
860
888
  */
@@ -1031,4 +1059,4 @@ declare const Handler: {
1031
1059
  resize(width?: number, height?: number): void;
1032
1060
  };
1033
1061
 
1034
- export { COLORS, 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, PlayableLoadingScreen, type PreviewOptions, PreviewShell, type ReloadStrategy, STROKE_WIDTH, type SetupLiveEditBridgeOptions, THEME, applyConfigOverride, applyConfigOverrides, applyConfigsToDisk, baseLottie, bootstrap, clearConfigOverrides, clearConfigOverridesForObject, configOverrideManager, createPreviewShell, deepClone, Handler as default, defaultPreset, deviceGroups, devicePresets, diffConfigs, exportConfigsAsJSON, getConfigOverrides, getConfigStateSummary, getOverrideMode, getPresetById, getPresetsByCategory, redoLastConfigChange, rehydrateObject, removeConfigOverride, resetToApplied, resetToOriginal, setBootstrapDependencies, setOverrideMode, setupHotReload, setupLiveEditBridge, undoLastConfigChange };
1062
+ export { COLORS, 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, PlayableLoadingScreen, type PreviewOptions, PreviewShell, type ReloadStrategy, STROKE_WIDTH, type SetupLiveEditBridgeOptions, THEME, applyConfigOverride, applyConfigOverrides, applyConfigsToDisk, baseLottie, bootstrap, clearConfigOverrides, clearConfigOverridesForObject, configOverrideManager, createPreviewShell, deepClone, Handler as default, defaultPreset, deviceGroups, devicePresets, diffConfigs, exportConfigsAsJSON, getConfigOverrides, getConfigStateSummary, getOverrideMode, getPresetById, getPresetsByCategory, redoLastConfigChange, rehydrateObject, removeConfigOverride, resetToApplied, resetToOriginal, setBootstrapDependencies, setOverrideMode, setupHotReload, setupLiveEditBridge, trackObjectCreation, trackObjectDeletion, undoLastConfigChange };
package/dist/index.d.ts CHANGED
@@ -115,6 +115,8 @@ declare class PreviewShell {
115
115
  private gameReady;
116
116
  private resizeListenersDisabled;
117
117
  private compareSnapshotTimer;
118
+ private hasUnsavedChanges;
119
+ private getShortcutKey;
118
120
  constructor(options?: PreviewOptions);
119
121
  mount(target?: HTMLElement): void;
120
122
  destroy(): void;
@@ -152,6 +154,8 @@ declare class PreviewShell {
152
154
  private setupSpaceKeyListener;
153
155
  private isInputFocused;
154
156
  private setupShortcutListeners;
157
+ private setupUnsavedChangesIndicator;
158
+ private updateUnsavedChangesIndicator;
155
159
  private updateDragCursor;
156
160
  private onFrameDragMove;
157
161
  private onFrameDragEnd;
@@ -181,20 +185,28 @@ declare function createPreviewShell(options?: PreviewOptions): PreviewShell;
181
185
 
182
186
  type SceneObjectsPanelOptions = {
183
187
  onSelect: (objectId: string) => void;
188
+ onMultiSelect?: (objectIds: string[]) => void;
184
189
  };
185
190
  declare class SceneObjectsPanel {
186
191
  private root;
187
192
  private listContainer;
188
193
  private searchInput;
189
194
  private selectedId;
195
+ private selectedIds;
196
+ private lastSelectedIndex;
197
+ private objectEntries;
190
198
  private options;
191
199
  private retryTimer;
192
200
  private screenFilter;
201
+ private showTemplates;
193
202
  private isContextMenuOpen;
194
203
  private getScreenFilterStorageKey;
204
+ private getShowTemplatesStorageKey;
195
205
  render(): string;
196
206
  initialize(container: HTMLElement, options: SceneObjectsPanelOptions): void;
197
207
  setSelected(objectId: string | null): void;
208
+ getSelectedIds(): string[];
209
+ private updateSelectionUI;
198
210
  refreshObjects(): void;
199
211
  /**
200
212
  * Format display name: removes json. prefix, converts underscores to spaces, title case
@@ -214,6 +226,9 @@ declare class SceneObjectsPanel {
214
226
  private getMetadata;
215
227
  private scheduleRetry;
216
228
  private select;
229
+ private toggleSelect;
230
+ private selectRange;
231
+ private updateLastSelectedIndex;
217
232
  private getDefaultScreenForCreate;
218
233
  private openAddObjectMenu;
219
234
  /**
@@ -222,7 +237,10 @@ declare class SceneObjectsPanel {
222
237
  private openAddObjectWizard;
223
238
  private showContextMenu;
224
239
  private deleteObject;
240
+ private deleteMultipleObjects;
225
241
  private deleteSystemGroup;
242
+ private moveObject;
243
+ private moveMultipleObjects;
226
244
  private syncScreens;
227
245
  }
228
246
 
@@ -685,7 +703,7 @@ declare class DebugPanel implements DebugPanelContext {
685
703
  toggleDebug(force?: boolean): void;
686
704
  updateDebugBadge(): void;
687
705
  private handleObjectSelect;
688
- nudgeSelectedObject(dx: number, dy: number): void;
706
+ nudgeSelectedObject(dx: number, dy: number): Promise<void>;
689
707
  }
690
708
 
691
709
  /**
@@ -809,6 +827,8 @@ interface ConfigChange {
809
827
  oldValue: any;
810
828
  newValue: any;
811
829
  ts: number;
830
+ changeType?: 'property' | 'object_create' | 'object_delete';
831
+ metadata?: any;
812
832
  }
813
833
  interface ConfigOverrideOptions {
814
834
  silent?: boolean;
@@ -855,6 +875,14 @@ declare function undoLastConfigChange(): boolean;
855
875
  * Returns true if redo was successful, false if no changes to redo
856
876
  */
857
877
  declare function redoLastConfigChange(): boolean;
878
+ /**
879
+ * Track object creation in undo history
880
+ */
881
+ declare function trackObjectCreation(objectId: string, screenId: string, objectConfig: any): void;
882
+ /**
883
+ * Track object deletion in undo history
884
+ */
885
+ declare function trackObjectDeletion(objectId: string, screenId: string, objectConfig: any): void;
858
886
  /**
859
887
  * Deep clone utility for baseline copying
860
888
  */
@@ -1031,4 +1059,4 @@ declare const Handler: {
1031
1059
  resize(width?: number, height?: number): void;
1032
1060
  };
1033
1061
 
1034
- export { COLORS, 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, PlayableLoadingScreen, type PreviewOptions, PreviewShell, type ReloadStrategy, STROKE_WIDTH, type SetupLiveEditBridgeOptions, THEME, applyConfigOverride, applyConfigOverrides, applyConfigsToDisk, baseLottie, bootstrap, clearConfigOverrides, clearConfigOverridesForObject, configOverrideManager, createPreviewShell, deepClone, Handler as default, defaultPreset, deviceGroups, devicePresets, diffConfigs, exportConfigsAsJSON, getConfigOverrides, getConfigStateSummary, getOverrideMode, getPresetById, getPresetsByCategory, redoLastConfigChange, rehydrateObject, removeConfigOverride, resetToApplied, resetToOriginal, setBootstrapDependencies, setOverrideMode, setupHotReload, setupLiveEditBridge, undoLastConfigChange };
1062
+ export { COLORS, 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, PlayableLoadingScreen, type PreviewOptions, PreviewShell, type ReloadStrategy, STROKE_WIDTH, type SetupLiveEditBridgeOptions, THEME, applyConfigOverride, applyConfigOverrides, applyConfigsToDisk, baseLottie, bootstrap, clearConfigOverrides, clearConfigOverridesForObject, configOverrideManager, createPreviewShell, deepClone, Handler as default, defaultPreset, deviceGroups, devicePresets, diffConfigs, exportConfigsAsJSON, getConfigOverrides, getConfigStateSummary, getOverrideMode, getPresetById, getPresetsByCategory, redoLastConfigChange, rehydrateObject, removeConfigOverride, resetToApplied, resetToOriginal, setBootstrapDependencies, setOverrideMode, setupHotReload, setupLiveEditBridge, trackObjectCreation, trackObjectDeletion, undoLastConfigChange };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{E as H,F as I,G as J,H as K,I as L,J as M,K as N,L as O,M as P,N as Q,O as R,P as S,Q as T,R as U,S as V,T as W,U as X,a}from"./chunk-ROFM4I6A.js";import"./chunk-I5OOVR5U.js";import{a as s,b as t,c as u,d as v,e as w,f as x,g as y,h as z,i as A,j as B,k as C,l as D,m as E,n as F,o as G}from"./chunk-NHKCXBUZ.js";import{a as b,b as c,c as d,d as e,e as f,f as g,g as h,h as i,i as j,j as k,k as l,l as m,m as n,n as o,o as p,p as q,q as r}from"./chunk-C4GAOSNW.js";import"./chunk-E6WJCS24.js";import"./chunk-JXBG6UFL.js";export{S as COLORS,D as ConfigWatcher,M as DebugPanel,C as DefaultReloadStrategy,W as Handler,V as PlayableLoadingScreen,N as PreviewShell,T as STROKE_WIDTH,U as THEME,d as applyConfigOverride,e as applyConfigOverrides,p as applyConfigsToDisk,z as applyDefaults,a as baseLottie,R as bootstrap,f as clearConfigOverrides,g as clearConfigOverridesForObject,j as configOverrideManager,O as createPreviewShell,m as deepClone,X as default,J as defaultPreset,I as deviceGroups,H as devicePresets,E as diffConfigs,n as exportConfigsAsJSON,i as getConfigOverrides,o as getConfigStateSummary,b as getOverrideMode,K as getPresetById,L as getPresetsByCategory,u as loadAllObjectConfigs,s as loadComponentSchemas,v as loadEngineConfig,w as loadGamePromptConfig,A as loadObjectCentricConfig,t as loadObjectConfig,x as loadSceneConfig,l as redoLastConfigChange,F as rehydrateObject,h as removeConfigOverride,q as resetToApplied,r as resetToOriginal,Q as setBootstrapDependencies,c as setOverrideMode,G as setupHotReload,P as setupLiveEditBridge,B as toLegacyFormat,k as undoLastConfigChange,y as validateObjectConfig};
1
+ import{E as J,F as K,G as L,H as M,I as N,J as O,K as P,L as Q,M as R,N as S,O as T,P as U,Q as V,R as W,S as X,T as Y,U as Z,a}from"./chunk-WTWSWRFR.js";import"./chunk-I5OOVR5U.js";import{a as u,b as v,c as w,d as x,e as y,f as z,g as A,h as B,i as C,j as D,k as E,l as F,m as G,n as H,o as I}from"./chunk-PW2FGMCO.js";import{a as b,b as c,c as d,d as e,e as f,f as g,g as h,h as i,i as j,j as k,k as l,l as m,m as n,n as o,o as p,p as q,q as r,r as s,s as t}from"./chunk-HVKF2KYL.js";import"./chunk-E6WJCS24.js";import"./chunk-JXBG6UFL.js";export{U as COLORS,F as ConfigWatcher,O as DebugPanel,E as DefaultReloadStrategy,Y as Handler,X as PlayableLoadingScreen,P as PreviewShell,V as STROKE_WIDTH,W as THEME,d as applyConfigOverride,e as applyConfigOverrides,r as applyConfigsToDisk,B as applyDefaults,a as baseLottie,T as bootstrap,f as clearConfigOverrides,g as clearConfigOverridesForObject,j as configOverrideManager,Q as createPreviewShell,o as deepClone,Z as default,L as defaultPreset,K as deviceGroups,J as devicePresets,G as diffConfigs,p as exportConfigsAsJSON,i as getConfigOverrides,q as getConfigStateSummary,b as getOverrideMode,M as getPresetById,N as getPresetsByCategory,w as loadAllObjectConfigs,u as loadComponentSchemas,x as loadEngineConfig,y as loadGamePromptConfig,C as loadObjectCentricConfig,v as loadObjectConfig,z as loadSceneConfig,l as redoLastConfigChange,H as rehydrateObject,h as removeConfigOverride,s as resetToApplied,t as resetToOriginal,S as setBootstrapDependencies,c as setOverrideMode,I as setupHotReload,R as setupLiveEditBridge,D as toLegacyFormat,m as trackObjectCreation,n as trackObjectDeletion,k as undoLastConfigChange,A as validateObjectConfig};