handler-playable-sdk 0.3.41 → 0.3.43

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
@@ -3817,6 +3817,29 @@
3817
3817
  }
3818
3818
 
3819
3819
 
3820
+ /* ========== 08-breadcrumbs.css ========== */
3821
+ /* Breadcrumbs */
3822
+ .scene-breadcrumbs {
3823
+ display: flex;
3824
+ align-items: center;
3825
+ gap: 6px;
3826
+ padding: 8px 14px;
3827
+ background: var(--ui-surface-2);
3828
+ border-bottom: 1px solid var(--ui-border);
3829
+ font-size: 11px;
3830
+ color: var(--ui-muted);
3831
+ }
3832
+
3833
+ .breadcrumb-item {
3834
+ font-weight: var(--font-weight-medium);
3835
+ color: var(--ui-text);
3836
+ }
3837
+
3838
+ .breadcrumb-separator {
3839
+ color: var(--ui-muted);
3840
+ font-size: 12px;
3841
+ }
3842
+
3820
3843
  /* ========== 08-inspector.css ========== */
3821
3844
  /* 08 Inspector */
3822
3845
  /* Auto-generated from preview.css */
@@ -4619,6 +4642,183 @@
4619
4642
 
4620
4643
 
4621
4644
 
4645
+ /* ========== 13-nudge-panel.css ========== */
4646
+ /* Nudge Panel - Floating on left side */
4647
+ .nudge-panel {
4648
+ position: absolute;
4649
+ left: 16px;
4650
+ top: 50%;
4651
+ transform: translateY(-50%);
4652
+ width: 180px;
4653
+ background: var(--ui-surface);
4654
+ border: 1px solid var(--ui-border);
4655
+ border-radius: 14px;
4656
+ box-shadow: var(--ui-shadow);
4657
+ z-index: 60;
4658
+ pointer-events: auto;
4659
+ transition: opacity var(--ui-duration-fast) var(--ui-ease);
4660
+ }
4661
+
4662
+ .nudge-panel.hidden {
4663
+ opacity: 0;
4664
+ pointer-events: none;
4665
+ }
4666
+
4667
+ .nudge-panel-header {
4668
+ padding: 10px 12px;
4669
+ background: var(--ui-bg-2);
4670
+ border-bottom: 1px solid var(--ui-border);
4671
+ border-radius: 14px 14px 0 0;
4672
+ }
4673
+
4674
+ .nudge-panel-title {
4675
+ font-size: 11px;
4676
+ font-weight: var(--font-weight-semibold);
4677
+ color: var(--ui-text);
4678
+ letter-spacing: 0.4px;
4679
+ text-transform: uppercase;
4680
+ }
4681
+
4682
+ .nudge-panel-body {
4683
+ padding: 12px;
4684
+ display: flex;
4685
+ flex-direction: column;
4686
+ gap: 14px;
4687
+ }
4688
+
4689
+ .nudge-section {
4690
+ display: flex;
4691
+ flex-direction: column;
4692
+ gap: 8px;
4693
+ }
4694
+
4695
+ .nudge-section-label {
4696
+ font-size: 11px;
4697
+ font-weight: var(--font-weight-medium);
4698
+ color: var(--ui-muted);
4699
+ text-transform: uppercase;
4700
+ letter-spacing: 0.3px;
4701
+ }
4702
+
4703
+ .nudge-step-input {
4704
+ background: var(--ui-bg);
4705
+ border: 1px solid var(--ui-border);
4706
+ border-radius: 6px;
4707
+ padding: 6px 8px;
4708
+ font-size: 12px;
4709
+ color: var(--ui-text);
4710
+ font-family: var(--font-primary);
4711
+ width: 100%;
4712
+ }
4713
+
4714
+ .nudge-step-input:focus {
4715
+ outline: none;
4716
+ border-color: var(--ui-terracotta);
4717
+ box-shadow: 0 0 0 2px rgba(227, 138, 90, 0.2);
4718
+ }
4719
+
4720
+ /* Nudge arrow grid */
4721
+ .nudge-arrow-grid {
4722
+ display: grid;
4723
+ grid-template-columns: repeat(3, 1fr);
4724
+ grid-template-rows: repeat(2, 1fr);
4725
+ gap: 4px;
4726
+ }
4727
+
4728
+ .nudge-arrow-btn {
4729
+ background: var(--ui-surface);
4730
+ border: 1px solid var(--ui-border);
4731
+ border-radius: 8px;
4732
+ padding: 8px;
4733
+ cursor: pointer;
4734
+ transition: all var(--ui-duration-fast) var(--ui-ease);
4735
+ color: var(--ui-text);
4736
+ display: flex;
4737
+ align-items: center;
4738
+ justify-content: center;
4739
+ }
4740
+
4741
+ .nudge-arrow-btn svg {
4742
+ width: 16px;
4743
+ height: 16px;
4744
+ stroke-width: var(--ui-icon-stroke);
4745
+ }
4746
+
4747
+ .nudge-arrow-btn:hover {
4748
+ background: var(--ui-terracotta);
4749
+ border-color: var(--ui-terracotta);
4750
+ color: var(--ui-text-white);
4751
+ transform: translateY(-1px);
4752
+ }
4753
+
4754
+ .nudge-arrow-btn:active {
4755
+ transform: translateY(0);
4756
+ background: var(--ui-terracotta-active);
4757
+ }
4758
+
4759
+ .nudge-arrow-btn[data-nudge="up"] {
4760
+ grid-column: 2;
4761
+ grid-row: 1;
4762
+ }
4763
+
4764
+ .nudge-arrow-btn[data-nudge="left"] {
4765
+ grid-column: 1;
4766
+ grid-row: 2;
4767
+ }
4768
+
4769
+ .nudge-arrow-btn[data-nudge="down"] {
4770
+ grid-column: 2;
4771
+ grid-row: 2;
4772
+ }
4773
+
4774
+ .nudge-arrow-btn[data-nudge="right"] {
4775
+ grid-column: 3;
4776
+ grid-row: 2;
4777
+ }
4778
+
4779
+ /* Scale controls */
4780
+ .nudge-scale-controls {
4781
+ display: flex;
4782
+ flex-direction: column;
4783
+ gap: 6px;
4784
+ }
4785
+
4786
+ .nudge-scale-btn {
4787
+ background: var(--ui-surface);
4788
+ border: 1px solid var(--ui-border);
4789
+ border-radius: 8px;
4790
+ padding: 8px 10px;
4791
+ cursor: pointer;
4792
+ transition: all var(--ui-duration-fast) var(--ui-ease);
4793
+ color: var(--ui-text);
4794
+ display: flex;
4795
+ align-items: center;
4796
+ gap: 6px;
4797
+ font-size: 11px;
4798
+ font-weight: var(--font-weight-medium);
4799
+ }
4800
+
4801
+ .nudge-scale-btn svg {
4802
+ width: 14px;
4803
+ height: 14px;
4804
+ stroke-width: var(--ui-icon-stroke);
4805
+ }
4806
+
4807
+ .nudge-scale-btn:hover {
4808
+ background: var(--ui-terracotta);
4809
+ border-color: var(--ui-terracotta);
4810
+ color: var(--ui-text-white);
4811
+ }
4812
+
4813
+ .nudge-scale-btn:active {
4814
+ background: var(--ui-terracotta-active);
4815
+ }
4816
+
4817
+ /* Hide nudge panel in compare mode */
4818
+ .preview-shell.compare-mode .nudge-panel {
4819
+ display: none;
4820
+ }
4821
+
4622
4822
  /* ========== 99-misc.css ========== */
4623
4823
  /* 99 Misc */
4624
4824
  /* Auto-generated from preview.css */
package/dist/index.d.cts CHANGED
@@ -217,7 +217,6 @@ declare class SceneToolsPanel {
217
217
  private isCollapsed;
218
218
  render(): string;
219
219
  initialize(container: HTMLElement, options: SceneToolsPanelOptions): void;
220
- getNudgeStep(): number;
221
220
  updateInfo(info: {
222
221
  instanceId: string;
223
222
  worldX: number;
@@ -227,6 +226,20 @@ declare class SceneToolsPanel {
227
226
  } | null): void;
228
227
  }
229
228
 
229
+ type NudgePanelOptions = {
230
+ onNudge: (dx: number, dy: number) => void;
231
+ onScale: (delta: number) => void;
232
+ };
233
+ declare class NudgePanel {
234
+ private root;
235
+ private options;
236
+ render(): string;
237
+ initialize(container: HTMLElement, options: NudgePanelOptions): void;
238
+ show(): void;
239
+ hide(): void;
240
+ getNudgeStep(): number;
241
+ }
242
+
230
243
  type LibraryPanelOptions = {
231
244
  onApply: (objectId: string, assetPath: string, category: string) => Promise<void>;
232
245
  onReset: (objectId: string, defaultAsset: string, category: string) => Promise<void>;
@@ -581,6 +594,7 @@ declare class DebugPanel implements DebugPanelContext {
581
594
  activeTab: WorkbenchTab;
582
595
  sceneObjectsPanel: SceneObjectsPanel;
583
596
  sceneToolsPanel: SceneToolsPanel;
597
+ nudgePanel: NudgePanel;
584
598
  inspectorPanel: InspectorPanel;
585
599
  libraryPanel: LibraryPanel;
586
600
  brandVisionPanel: BrandVisionPanel;
@@ -633,7 +647,7 @@ declare class DebugPanel implements DebugPanelContext {
633
647
  toggleDebug(force?: boolean): void;
634
648
  updateDebugBadge(): void;
635
649
  private handleObjectSelect;
636
- private nudgeSelectedObject;
650
+ nudgeSelectedObject(dx: number, dy: number): void;
637
651
  }
638
652
 
639
653
  /**
package/dist/index.d.ts CHANGED
@@ -217,7 +217,6 @@ declare class SceneToolsPanel {
217
217
  private isCollapsed;
218
218
  render(): string;
219
219
  initialize(container: HTMLElement, options: SceneToolsPanelOptions): void;
220
- getNudgeStep(): number;
221
220
  updateInfo(info: {
222
221
  instanceId: string;
223
222
  worldX: number;
@@ -227,6 +226,20 @@ declare class SceneToolsPanel {
227
226
  } | null): void;
228
227
  }
229
228
 
229
+ type NudgePanelOptions = {
230
+ onNudge: (dx: number, dy: number) => void;
231
+ onScale: (delta: number) => void;
232
+ };
233
+ declare class NudgePanel {
234
+ private root;
235
+ private options;
236
+ render(): string;
237
+ initialize(container: HTMLElement, options: NudgePanelOptions): void;
238
+ show(): void;
239
+ hide(): void;
240
+ getNudgeStep(): number;
241
+ }
242
+
230
243
  type LibraryPanelOptions = {
231
244
  onApply: (objectId: string, assetPath: string, category: string) => Promise<void>;
232
245
  onReset: (objectId: string, defaultAsset: string, category: string) => Promise<void>;
@@ -581,6 +594,7 @@ declare class DebugPanel implements DebugPanelContext {
581
594
  activeTab: WorkbenchTab;
582
595
  sceneObjectsPanel: SceneObjectsPanel;
583
596
  sceneToolsPanel: SceneToolsPanel;
597
+ nudgePanel: NudgePanel;
584
598
  inspectorPanel: InspectorPanel;
585
599
  libraryPanel: LibraryPanel;
586
600
  brandVisionPanel: BrandVisionPanel;
@@ -633,7 +647,7 @@ declare class DebugPanel implements DebugPanelContext {
633
647
  toggleDebug(force?: boolean): void;
634
648
  updateDebugBadge(): void;
635
649
  private handleObjectSelect;
636
- private nudgeSelectedObject;
650
+ nudgeSelectedObject(dx: number, dy: number): void;
637
651
  }
638
652
 
639
653
  /**
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-NN7DY2BF.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-JXBG6UFL.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-XSKUGJJF.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-JXBG6UFL.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};