handler-playable-sdk 0.5.38 → 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/ConfigOverride-V7DLPL5I.js +1 -0
- package/dist/chunk-HVKF2KYL.js +1 -0
- package/dist/{chunk-NHKCXBUZ.js → chunk-PW2FGMCO.js} +1 -1
- package/dist/{chunk-FWI4XZGW.js → chunk-WTWSWRFR.js} +111 -111
- package/dist/cli/brand-dna.mjs +1 -1
- package/dist/cli/canva-import.mjs +1 -1
- package/dist/cli/cleanup-assets.mjs +1 -1
- package/dist/cli/fix-scales.mjs +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/screen-helper.mjs +1 -1
- package/dist/cli/setup-library.mjs +1 -1
- package/dist/cli/student-helper.mjs +1 -1
- package/dist/cli/sync-screens.mjs +1 -1
- package/dist/cli/validate-assets.mjs +1 -1
- package/dist/cli/validate.mjs +1 -1
- package/dist/{config-OH6SMCBB.js → config-3JDCJ3GB.js} +1 -1
- package/dist/index.cjs +129 -129
- package/dist/index.css +243 -84
- package/dist/index.d.cts +30 -5
- package/dist/index.d.ts +30 -5
- package/dist/index.js +1 -1
- package/dist/pixi/index.cjs +8 -8
- package/dist/pixi/index.css +243 -84
- package/dist/pixi/index.js +1 -1
- package/dist/three/index.cjs +52 -52
- package/dist/three/index.css +243 -84
- package/dist/three/index.js +1 -1
- package/package.json +1 -1
- package/dist/ConfigOverride-X57ZHK2W.js +0 -1
- package/dist/chunk-C4GAOSNW.js +0 -1
package/dist/index.css
CHANGED
|
@@ -622,7 +622,7 @@
|
|
|
622
622
|
}
|
|
623
623
|
|
|
624
624
|
/* Icon-only mode when collapsed */
|
|
625
|
-
.scene-tools-corner-panel.collapsed .scene-tools-title
|
|
625
|
+
.scene-tools-corner-panel.collapsed .scene-tools-title {
|
|
626
626
|
display: none;
|
|
627
627
|
}
|
|
628
628
|
|
|
@@ -636,89 +636,6 @@
|
|
|
636
636
|
order: -1;
|
|
637
637
|
}
|
|
638
638
|
|
|
639
|
-
.scene-tools-title-wrapper {
|
|
640
|
-
display: flex;
|
|
641
|
-
align-items: center;
|
|
642
|
-
gap: 6px;
|
|
643
|
-
}
|
|
644
|
-
|
|
645
|
-
.scene-tools-title {
|
|
646
|
-
font-size: 12px;
|
|
647
|
-
font-weight: var(--font-weight-semibold);
|
|
648
|
-
color: var(--ui-text);
|
|
649
|
-
letter-spacing: 0.4px;
|
|
650
|
-
text-transform: uppercase;
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
.scene-tools-unsaved-star {
|
|
654
|
-
font-size: 14px;
|
|
655
|
-
color: var(--ui-accent);
|
|
656
|
-
animation: scene-tools-star-pulse 2s ease-in-out infinite;
|
|
657
|
-
display: inline-block;
|
|
658
|
-
margin-left: 4px;
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
@keyframes scene-tools-star-pulse {
|
|
662
|
-
0%, 100% {
|
|
663
|
-
opacity: 1;
|
|
664
|
-
transform: scale(1);
|
|
665
|
-
}
|
|
666
|
-
50% {
|
|
667
|
-
opacity: 0.7;
|
|
668
|
-
transform: scale(1.1);
|
|
669
|
-
}
|
|
670
|
-
}
|
|
671
|
-
|
|
672
|
-
.scene-tools-save-btn {
|
|
673
|
-
display: flex;
|
|
674
|
-
align-items: center;
|
|
675
|
-
gap: 6px;
|
|
676
|
-
padding: 6px 10px;
|
|
677
|
-
background: linear-gradient(135deg, var(--ui-accent), var(--ui-accent-overlay-3));
|
|
678
|
-
color: var(--ui-black);
|
|
679
|
-
border: none;
|
|
680
|
-
border-radius: 6px;
|
|
681
|
-
font-size: 11px;
|
|
682
|
-
font-weight: 700;
|
|
683
|
-
letter-spacing: 0.02em;
|
|
684
|
-
cursor: pointer;
|
|
685
|
-
box-shadow: 0 2px 8px var(--ui-accent-overlay-1);
|
|
686
|
-
transition: all var(--ui-duration-fast) var(--ui-ease);
|
|
687
|
-
white-space: nowrap;
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
.scene-tools-save-btn:hover {
|
|
691
|
-
transform: translateY(-1px);
|
|
692
|
-
box-shadow: 0 4px 12px var(--ui-accent-overlay-2);
|
|
693
|
-
}
|
|
694
|
-
|
|
695
|
-
.scene-tools-save-btn:active {
|
|
696
|
-
transform: translateY(0);
|
|
697
|
-
}
|
|
698
|
-
|
|
699
|
-
.scene-tools-save-btn svg {
|
|
700
|
-
width: 14px;
|
|
701
|
-
height: 14px;
|
|
702
|
-
stroke-width: 2.5;
|
|
703
|
-
}
|
|
704
|
-
|
|
705
|
-
.scene-tools-save-text {
|
|
706
|
-
display: flex;
|
|
707
|
-
align-items: center;
|
|
708
|
-
gap: 4px;
|
|
709
|
-
}
|
|
710
|
-
|
|
711
|
-
.scene-tools-save-shortcut {
|
|
712
|
-
font-size: 9px;
|
|
713
|
-
opacity: 0.7;
|
|
714
|
-
font-weight: 600;
|
|
715
|
-
letter-spacing: 0.5px;
|
|
716
|
-
}
|
|
717
|
-
|
|
718
|
-
/* Hide save button when collapsed */
|
|
719
|
-
.scene-tools-corner-panel.collapsed .scene-tools-save-btn {
|
|
720
|
-
display: none;
|
|
721
|
-
}
|
|
722
639
|
|
|
723
640
|
.scene-tools-collapse-btn {
|
|
724
641
|
width: 24px;
|
|
@@ -922,6 +839,68 @@
|
|
|
922
839
|
gap: 8px;
|
|
923
840
|
}
|
|
924
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
|
+
|
|
925
904
|
.view-toggle {
|
|
926
905
|
display: flex;
|
|
927
906
|
flex-direction: row;
|
|
@@ -1129,6 +1108,25 @@
|
|
|
1129
1108
|
color: #ff9500;
|
|
1130
1109
|
}
|
|
1131
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
|
+
|
|
1132
1130
|
.scene-object-group-system {
|
|
1133
1131
|
border-left: 3px solid #ff9500;
|
|
1134
1132
|
padding-left: 8px;
|
|
@@ -2667,6 +2665,7 @@
|
|
|
2667
2665
|
display: none;
|
|
2668
2666
|
}
|
|
2669
2667
|
|
|
2668
|
+
|
|
2670
2669
|
/* ========== 04-device-frame.css ========== */
|
|
2671
2670
|
/* 04 Device Frame */
|
|
2672
2671
|
/* Auto-generated from preview.css */
|
|
@@ -5308,6 +5307,166 @@
|
|
|
5308
5307
|
word-wrap: break-word;
|
|
5309
5308
|
}
|
|
5310
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
|
+
|
|
5311
5470
|
/* ========== 11-wizard.css ========== */
|
|
5312
5471
|
/* Wizard Modal Overlay */
|
|
5313
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
|
|
|
@@ -237,11 +255,8 @@ declare class SceneToolsPanel {
|
|
|
237
255
|
private root;
|
|
238
256
|
private options;
|
|
239
257
|
private isCollapsed;
|
|
240
|
-
private hasUnsavedChanges;
|
|
241
|
-
private getShortcutKey;
|
|
242
258
|
render(): string;
|
|
243
259
|
initialize(container: HTMLElement, options: SceneToolsPanelOptions): void;
|
|
244
|
-
private refreshUnsavedState;
|
|
245
260
|
updateInfo(info: {
|
|
246
261
|
instanceId: string;
|
|
247
262
|
worldX: number;
|
|
@@ -688,7 +703,7 @@ declare class DebugPanel implements DebugPanelContext {
|
|
|
688
703
|
toggleDebug(force?: boolean): void;
|
|
689
704
|
updateDebugBadge(): void;
|
|
690
705
|
private handleObjectSelect;
|
|
691
|
-
nudgeSelectedObject(dx: number, dy: number): void
|
|
706
|
+
nudgeSelectedObject(dx: number, dy: number): Promise<void>;
|
|
692
707
|
}
|
|
693
708
|
|
|
694
709
|
/**
|
|
@@ -812,6 +827,8 @@ interface ConfigChange {
|
|
|
812
827
|
oldValue: any;
|
|
813
828
|
newValue: any;
|
|
814
829
|
ts: number;
|
|
830
|
+
changeType?: 'property' | 'object_create' | 'object_delete';
|
|
831
|
+
metadata?: any;
|
|
815
832
|
}
|
|
816
833
|
interface ConfigOverrideOptions {
|
|
817
834
|
silent?: boolean;
|
|
@@ -858,6 +875,14 @@ declare function undoLastConfigChange(): boolean;
|
|
|
858
875
|
* Returns true if redo was successful, false if no changes to redo
|
|
859
876
|
*/
|
|
860
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;
|
|
861
886
|
/**
|
|
862
887
|
* Deep clone utility for baseline copying
|
|
863
888
|
*/
|
|
@@ -1034,4 +1059,4 @@ declare const Handler: {
|
|
|
1034
1059
|
resize(width?: number, height?: number): void;
|
|
1035
1060
|
};
|
|
1036
1061
|
|
|
1037
|
-
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
|
|
|
@@ -237,11 +255,8 @@ declare class SceneToolsPanel {
|
|
|
237
255
|
private root;
|
|
238
256
|
private options;
|
|
239
257
|
private isCollapsed;
|
|
240
|
-
private hasUnsavedChanges;
|
|
241
|
-
private getShortcutKey;
|
|
242
258
|
render(): string;
|
|
243
259
|
initialize(container: HTMLElement, options: SceneToolsPanelOptions): void;
|
|
244
|
-
private refreshUnsavedState;
|
|
245
260
|
updateInfo(info: {
|
|
246
261
|
instanceId: string;
|
|
247
262
|
worldX: number;
|
|
@@ -688,7 +703,7 @@ declare class DebugPanel implements DebugPanelContext {
|
|
|
688
703
|
toggleDebug(force?: boolean): void;
|
|
689
704
|
updateDebugBadge(): void;
|
|
690
705
|
private handleObjectSelect;
|
|
691
|
-
nudgeSelectedObject(dx: number, dy: number): void
|
|
706
|
+
nudgeSelectedObject(dx: number, dy: number): Promise<void>;
|
|
692
707
|
}
|
|
693
708
|
|
|
694
709
|
/**
|
|
@@ -812,6 +827,8 @@ interface ConfigChange {
|
|
|
812
827
|
oldValue: any;
|
|
813
828
|
newValue: any;
|
|
814
829
|
ts: number;
|
|
830
|
+
changeType?: 'property' | 'object_create' | 'object_delete';
|
|
831
|
+
metadata?: any;
|
|
815
832
|
}
|
|
816
833
|
interface ConfigOverrideOptions {
|
|
817
834
|
silent?: boolean;
|
|
@@ -858,6 +875,14 @@ declare function undoLastConfigChange(): boolean;
|
|
|
858
875
|
* Returns true if redo was successful, false if no changes to redo
|
|
859
876
|
*/
|
|
860
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;
|
|
861
886
|
/**
|
|
862
887
|
* Deep clone utility for baseline copying
|
|
863
888
|
*/
|
|
@@ -1034,4 +1059,4 @@ declare const Handler: {
|
|
|
1034
1059
|
resize(width?: number, height?: number): void;
|
|
1035
1060
|
};
|
|
1036
1061
|
|
|
1037
|
-
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
|
|
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};
|