handler-playable-sdk 0.3.34 → 0.3.36

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
@@ -358,6 +358,316 @@
358
358
  border-radius: 0 0 2px 0;
359
359
  }
360
360
 
361
+ /* Corner Controls - HANDLER Style */
362
+ .preview-corner-controls {
363
+ position: absolute;
364
+ bottom: 24px;
365
+ right: 24px;
366
+ display: flex;
367
+ flex-direction: column;
368
+ gap: 8px;
369
+ z-index: 50;
370
+ pointer-events: auto;
371
+ }
372
+
373
+ .corner-control-btn {
374
+ width: 44px;
375
+ height: 44px;
376
+ background: var(--ui-surface);
377
+ border: 1px solid var(--ui-border);
378
+ border-radius: 12px;
379
+ display: flex;
380
+ align-items: center;
381
+ justify-content: center;
382
+ cursor: pointer;
383
+ transition: all var(--ui-duration-fast) var(--ui-ease);
384
+ box-shadow: var(--ui-shadow);
385
+ color: var(--ui-text);
386
+ }
387
+
388
+ .corner-control-btn svg {
389
+ width: 20px;
390
+ height: 20px;
391
+ stroke-width: var(--ui-icon-stroke);
392
+ }
393
+
394
+ .corner-control-btn:hover {
395
+ background: var(--ui-terracotta);
396
+ border-color: var(--ui-terracotta);
397
+ color: var(--ui-text-white);
398
+ transform: translateY(-2px);
399
+ box-shadow: var(--ui-shadow-hover);
400
+ }
401
+
402
+ .corner-control-btn:active {
403
+ background: var(--ui-terracotta-active);
404
+ transform: translateY(0);
405
+ }
406
+
407
+ /* Hide corner controls in compare mode */
408
+ .preview-shell.compare-mode .preview-corner-controls {
409
+ display: none;
410
+ }
411
+
412
+ /* Scene Tools Corner Panel - HANDLER Style */
413
+ .scene-tools-corner-panel {
414
+ position: absolute;
415
+ bottom: 200px;
416
+ right: 24px;
417
+ width: 280px;
418
+ background: var(--ui-surface);
419
+ border: 1px solid var(--ui-border);
420
+ border-radius: 14px;
421
+ box-shadow: var(--ui-shadow);
422
+ z-index: 60;
423
+ pointer-events: auto;
424
+ transition: all var(--ui-duration-normal) var(--ui-ease);
425
+ }
426
+
427
+ .scene-tools-header {
428
+ display: flex;
429
+ align-items: center;
430
+ justify-content: space-between;
431
+ padding: 12px 14px;
432
+ background: var(--ui-bg-2);
433
+ border-bottom: 1px solid var(--ui-border);
434
+ border-radius: 14px 14px 0 0;
435
+ cursor: move;
436
+ user-select: none;
437
+ }
438
+
439
+ .scene-tools-header-actions {
440
+ display: flex;
441
+ align-items: center;
442
+ gap: 8px;
443
+ }
444
+
445
+ .scene-tools-status-icons {
446
+ display: flex;
447
+ align-items: center;
448
+ gap: 4px;
449
+ }
450
+
451
+ .status-icon {
452
+ width: 24px;
453
+ height: 24px;
454
+ display: flex;
455
+ align-items: center;
456
+ justify-content: center;
457
+ border-radius: 6px;
458
+ color: var(--ui-muted);
459
+ transition: all var(--ui-duration-fast) var(--ui-ease);
460
+ cursor: help;
461
+ }
462
+
463
+ .status-icon svg {
464
+ width: 14px;
465
+ height: 14px;
466
+ stroke-width: var(--ui-icon-stroke);
467
+ }
468
+
469
+ .status-icon.active {
470
+ background: rgba(227, 138, 90, 0.15);
471
+ color: var(--ui-terracotta);
472
+ }
473
+
474
+ .status-icon:hover {
475
+ background: var(--ui-bg);
476
+ }
477
+
478
+ /* Icon-only mode when collapsed */
479
+ .scene-tools-corner-panel.collapsed .scene-tools-title {
480
+ display: none;
481
+ }
482
+
483
+ .scene-tools-corner-panel.collapsed .scene-tools-header {
484
+ border-bottom: none;
485
+ border-radius: 14px;
486
+ padding: 8px 10px;
487
+ }
488
+
489
+ .scene-tools-corner-panel.collapsed .scene-tools-status-icons {
490
+ order: -1;
491
+ }
492
+
493
+ .scene-tools-title {
494
+ font-size: 12px;
495
+ font-weight: var(--font-weight-semibold);
496
+ color: var(--ui-text);
497
+ letter-spacing: 0.4px;
498
+ text-transform: uppercase;
499
+ }
500
+
501
+ .scene-tools-collapse-btn {
502
+ width: 24px;
503
+ height: 24px;
504
+ background: transparent;
505
+ border: none;
506
+ border-radius: 6px;
507
+ display: flex;
508
+ align-items: center;
509
+ justify-content: center;
510
+ cursor: pointer;
511
+ color: var(--ui-muted);
512
+ transition: all var(--ui-duration-fast) var(--ui-ease);
513
+ }
514
+
515
+ .scene-tools-collapse-btn svg {
516
+ width: 16px;
517
+ height: 16px;
518
+ transition: transform var(--ui-duration-normal) var(--ui-ease);
519
+ }
520
+
521
+ .scene-tools-collapse-btn:hover {
522
+ background: var(--ui-bg);
523
+ color: var(--ui-text);
524
+ }
525
+
526
+ .scene-tools-body {
527
+ padding: 14px;
528
+ display: flex;
529
+ flex-direction: column;
530
+ gap: 10px;
531
+ max-height: 400px;
532
+ overflow-y: auto;
533
+ transition: max-height var(--ui-duration-normal) var(--ui-ease), opacity var(--ui-duration-normal) var(--ui-ease);
534
+ }
535
+
536
+ /* Collapsed state */
537
+ .scene-tools-corner-panel.collapsed .scene-tools-body {
538
+ max-height: 0;
539
+ opacity: 0;
540
+ padding-top: 0;
541
+ padding-bottom: 0;
542
+ overflow: hidden;
543
+ }
544
+
545
+ .scene-tools-corner-panel.collapsed .scene-tools-collapse-btn svg {
546
+ transform: rotate(180deg);
547
+ }
548
+
549
+ .scene-tools-corner-panel.collapsed {
550
+ border-radius: 14px;
551
+ }
552
+
553
+ /* Debug field styles */
554
+ .scene-tools-body .debug-field {
555
+ display: flex;
556
+ flex-direction: column;
557
+ gap: 6px;
558
+ }
559
+
560
+ .scene-tools-body .debug-field.checkbox-field {
561
+ flex-direction: row;
562
+ align-items: center;
563
+ gap: 8px;
564
+ }
565
+
566
+ .scene-tools-body .debug-field label {
567
+ font-size: 12px;
568
+ color: var(--ui-text);
569
+ font-weight: var(--font-weight-medium);
570
+ cursor: pointer;
571
+ }
572
+
573
+ .scene-tools-body .debug-field input[type="checkbox"] {
574
+ width: 16px;
575
+ height: 16px;
576
+ cursor: pointer;
577
+ accent-color: var(--ui-terracotta);
578
+ }
579
+
580
+ .scene-tools-body .debug-field input[type="number"] {
581
+ background: var(--ui-bg);
582
+ border: 1px solid var(--ui-border);
583
+ border-radius: 6px;
584
+ padding: 6px 8px;
585
+ font-size: 12px;
586
+ color: var(--ui-text);
587
+ font-family: var(--font-primary);
588
+ }
589
+
590
+ .scene-tools-body .debug-field input[type="number"]:focus {
591
+ outline: none;
592
+ border-color: var(--ui-terracotta);
593
+ box-shadow: 0 0 0 2px rgba(227, 138, 90, 0.2);
594
+ }
595
+
596
+ /* Debug nudge controls */
597
+ .debug-nudge {
598
+ display: flex;
599
+ flex-direction: column;
600
+ gap: 10px;
601
+ padding: 10px;
602
+ background: var(--ui-bg);
603
+ border-radius: 8px;
604
+ margin-top: 4px;
605
+ transition: all var(--ui-duration-normal) var(--ui-ease);
606
+ }
607
+
608
+ .debug-nudge.hidden {
609
+ display: none;
610
+ }
611
+
612
+ .debug-arrow-pad {
613
+ display: grid;
614
+ grid-template-columns: repeat(3, 1fr);
615
+ grid-template-rows: repeat(2, 1fr);
616
+ gap: 6px;
617
+ max-width: 150px;
618
+ margin: 0 auto;
619
+ }
620
+
621
+ .debug-arrow-btn {
622
+ background: var(--ui-surface);
623
+ border: 1px solid var(--ui-border);
624
+ border-radius: 8px;
625
+ padding: 10px;
626
+ font-size: 16px;
627
+ cursor: pointer;
628
+ transition: all var(--ui-duration-fast) var(--ui-ease);
629
+ color: var(--ui-text);
630
+ display: flex;
631
+ align-items: center;
632
+ justify-content: center;
633
+ }
634
+
635
+ .debug-arrow-btn:hover {
636
+ background: var(--ui-terracotta);
637
+ border-color: var(--ui-terracotta);
638
+ color: var(--ui-text-white);
639
+ transform: translateY(-1px);
640
+ }
641
+
642
+ .debug-arrow-btn:active {
643
+ transform: translateY(0);
644
+ background: var(--ui-terracotta-active);
645
+ }
646
+
647
+ .debug-arrow-btn[data-nudge="up"] {
648
+ grid-column: 2;
649
+ grid-row: 1;
650
+ }
651
+
652
+ .debug-arrow-btn[data-nudge="left"] {
653
+ grid-column: 1;
654
+ grid-row: 2;
655
+ }
656
+
657
+ .debug-arrow-btn[data-nudge="down"] {
658
+ grid-column: 2;
659
+ grid-row: 2;
660
+ }
661
+
662
+ .debug-arrow-btn[data-nudge="right"] {
663
+ grid-column: 3;
664
+ grid-row: 2;
665
+ }
666
+
667
+ /* Hide scene tools in compare mode */
668
+ .preview-shell.compare-mode .scene-tools-corner-panel {
669
+ display: none;
670
+ }
361
671
 
362
672
  /* ========== 03-toolbar.css ========== */
363
673
  /* 03 Toolbar */
package/dist/index.d.cts CHANGED
@@ -101,6 +101,7 @@ declare class PreviewShell {
101
101
  private frameDragStartY;
102
102
  private frameDragOriginX;
103
103
  private frameDragOriginY;
104
+ private isSpaceKeyPressed;
104
105
  private consolePanel;
105
106
  private consoleMessages;
106
107
  private isConsoleOpen;
@@ -139,6 +140,9 @@ declare class PreviewShell {
139
140
  private applyTransform;
140
141
  private applyFrameDrag;
141
142
  private setupFrameDragging;
143
+ private setupSpaceKeyListener;
144
+ private isInputFocused;
145
+ private updateDragCursor;
142
146
  private onFrameDragMove;
143
147
  private onFrameDragEnd;
144
148
  private adjustUserZoom;
@@ -209,8 +213,8 @@ type SceneToolsPanelOptions = {
209
213
  };
210
214
  declare class SceneToolsPanel {
211
215
  private root;
212
- private infoEls;
213
216
  private options;
217
+ private isCollapsed;
214
218
  render(): string;
215
219
  initialize(container: HTMLElement, options: SceneToolsPanelOptions): void;
216
220
  getNudgeStep(): number;
package/dist/index.d.ts CHANGED
@@ -101,6 +101,7 @@ declare class PreviewShell {
101
101
  private frameDragStartY;
102
102
  private frameDragOriginX;
103
103
  private frameDragOriginY;
104
+ private isSpaceKeyPressed;
104
105
  private consolePanel;
105
106
  private consoleMessages;
106
107
  private isConsoleOpen;
@@ -139,6 +140,9 @@ declare class PreviewShell {
139
140
  private applyTransform;
140
141
  private applyFrameDrag;
141
142
  private setupFrameDragging;
143
+ private setupSpaceKeyListener;
144
+ private isInputFocused;
145
+ private updateDragCursor;
142
146
  private onFrameDragMove;
143
147
  private onFrameDragEnd;
144
148
  private adjustUserZoom;
@@ -209,8 +213,8 @@ type SceneToolsPanelOptions = {
209
213
  };
210
214
  declare class SceneToolsPanel {
211
215
  private root;
212
- private infoEls;
213
216
  private options;
217
+ private isCollapsed;
214
218
  render(): string;
215
219
  initialize(container: HTMLElement, options: SceneToolsPanelOptions): void;
216
220
  getNudgeStep(): number;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{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,T as U,U as V,a}from"./chunk-PHSE57CN.js";import"./chunk-I5OOVR5U.js";import{a as q,b as r,c as s,d as t,e as u,f as v,g as w,h as x,i as y,j as z,k as A,l as B,m as C,n as D,o as E}from"./chunk-LV4HGC5G.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}from"./chunk-ZLL42OOV.js";import"./chunk-E6WJCS24.js";import"./chunk-Q7FPWOA3.js";export{Q as COLORS,B as ConfigWatcher,K as DebugPanel,A as DefaultReloadStrategy,U as Handler,T as PlayableLoadingScreen,L as PreviewShell,R as STROKE_WIDTH,S as THEME,d as applyConfigOverride,e as applyConfigOverrides,n as applyConfigsToDisk,x as applyDefaults,a as baseLottie,P as bootstrap,f as clearConfigOverrides,g as clearConfigOverridesForObject,j as configOverrideManager,M as createPreviewShell,k as deepClone,V as default,H as defaultPreset,G as deviceGroups,F as devicePresets,C as diffConfigs,l as exportConfigsAsJSON,i as getConfigOverrides,m as getConfigStateSummary,b as getOverrideMode,I as getPresetById,J as getPresetsByCategory,s as loadAllObjectConfigs,q as loadComponentSchemas,t as loadEngineConfig,u as loadGamePromptConfig,y as loadObjectCentricConfig,r as loadObjectConfig,v as loadSceneConfig,D as rehydrateObject,h as removeConfigOverride,o as resetToApplied,p as resetToOriginal,O as setBootstrapDependencies,c as setOverrideMode,E as setupHotReload,N as setupLiveEditBridge,z as toLegacyFormat,w as validateObjectConfig};
1
+ import{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,T as U,U as V,a}from"./chunk-DSJ7EQPG.js";import"./chunk-I5OOVR5U.js";import{a as q,b as r,c as s,d as t,e as u,f as v,g as w,h as x,i as y,j as z,k as A,l as B,m as C,n as D,o as E}from"./chunk-LV4HGC5G.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}from"./chunk-ZLL42OOV.js";import"./chunk-E6WJCS24.js";import"./chunk-ZFQCFKYD.js";export{Q as COLORS,B as ConfigWatcher,K as DebugPanel,A as DefaultReloadStrategy,U as Handler,T as PlayableLoadingScreen,L as PreviewShell,R as STROKE_WIDTH,S as THEME,d as applyConfigOverride,e as applyConfigOverrides,n as applyConfigsToDisk,x as applyDefaults,a as baseLottie,P as bootstrap,f as clearConfigOverrides,g as clearConfigOverridesForObject,j as configOverrideManager,M as createPreviewShell,k as deepClone,V as default,H as defaultPreset,G as deviceGroups,F as devicePresets,C as diffConfigs,l as exportConfigsAsJSON,i as getConfigOverrides,m as getConfigStateSummary,b as getOverrideMode,I as getPresetById,J as getPresetsByCategory,s as loadAllObjectConfigs,q as loadComponentSchemas,t as loadEngineConfig,u as loadGamePromptConfig,y as loadObjectCentricConfig,r as loadObjectConfig,v as loadSceneConfig,D as rehydrateObject,h as removeConfigOverride,o as resetToApplied,p as resetToOriginal,O as setBootstrapDependencies,c as setOverrideMode,E as setupHotReload,N as setupLiveEditBridge,z as toLegacyFormat,w as validateObjectConfig};