handler-playable-sdk 0.2.7 → 0.3.2
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-6YH2ILBJ.mjs +1 -0
- package/dist/chunk-BDZGKN5O.mjs +1 -0
- package/dist/chunk-GYW3GFXA.mjs +830 -0
- package/dist/chunk-HN7I4BLB.mjs +1 -0
- package/dist/config-QLS2MDB6.mjs +1 -0
- package/dist/index.css +1 -0
- package/dist/index.d.mts +388 -2
- package/dist/index.d.ts +388 -2
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/loader-object-centric-C1QteFfG.d.mts +81 -0
- package/dist/loader-object-centric-C1QteFfG.d.ts +81 -0
- package/dist/pixi/index.css +1 -0
- package/dist/pixi/index.d.mts +407 -93
- package/dist/pixi/index.d.ts +407 -93
- package/dist/pixi/index.js +9 -9
- package/dist/pixi/index.mjs +1 -11
- package/dist/three/index.css +1 -0
- package/dist/three/index.js +55 -55
- package/dist/three/index.mjs +1 -1
- package/package.json +2 -2
- package/dist/chunk-UVBNGLP3.mjs +0 -17
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function f(e,i={}){let{objectId:n,path:o,value:t}=e,{silent:a=!1,persist:s=!0}=i,r=window.__editableConfig;if(!r){console.warn("[CONFIG] No editable config found");return}let g=n?r.objects.get(n):r.engine;if(!g){console.warn("[CONFIG] Override target not found:",{objectId:n,path:o});return}let d=l(g,o);c(g,o,t),window.__configChanges=window.__configChanges||[],window.__configChanges.push({objectId:n,path:o,oldValue:d,newValue:t,ts:Date.now()}),s&&(window.__configOverrides=window.__configOverrides||[],window.__configOverrides.push(e)),a||console.log("[CONFIG] Applied override:",e)}function u(e,i={}){e.forEach(n=>f(n,i))}function w(){window.__configOverrides=[],window.__configChanges=[],console.log("[CONFIG] Cleared all overrides")}function p(){return window.__configOverrides||[]}var _={getCurrentConfig(){return window.__editableConfig||null},getChanges(){return window.__configChanges||[]},clearChanges(){window.__configChanges=[]}};function c(e,i,n){var s;let o=i.split("."),t=o.pop(),a=e;for(let r of o)a[r]=(s=a[r])!=null?s:{},a=a[r];a[t]=n}function l(e,i){return i.split(".").reduce((n,o)=>n?n[o]:void 0,e)}export{f as a,u as b,w as c,p as d,_ as e};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o}from"./chunk-BDZGKN5O.mjs";import"./chunk-HN7I4BLB.mjs";export{l as ConfigWatcher,k as DefaultReloadStrategy,h as applyDefaults,m as diffConfigs,c as loadAllObjectConfigs,a as loadComponentSchemas,d as loadEngineConfig,e as loadGamePromptConfig,i as loadObjectCentricConfig,b as loadObjectConfig,f as loadSceneConfig,n as rehydrateObject,o as setupHotReload,j as toLegacyFormat,g as validateObjectConfig};
|
package/dist/index.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--ui-bg: #0f1218;--ui-bg-2: #101520;--ui-surface: #171c25;--ui-surface-2: #1f2530;--ui-border: #2b3544;--ui-text: #e8edf3;--ui-muted: #9aa7b4;--ui-accent: #3dd6c6;--ui-accent-2: #ff9f43;--ui-accent-3: #6f8cff;--ui-danger: #ff5c70;--ui-shadow: 0 18px 40px rgba(5, 10, 18, .45)}.preview-shell{height:100vh;width:100vw;background:radial-gradient(circle at top left,#182033 0%,var(--ui-bg) 45%,#0c1018 100%);color:var(--ui-text);font-family:Avenir Next,Avenir,Futura,Gill Sans,Trebuchet MS,sans-serif;display:flex;flex-direction:column;box-sizing:border-box}.preview-stage{height:100%;display:flex;flex-direction:column}.preview-toolbar{height:54px;background:linear-gradient(135deg,var(--ui-bg-2),#121926 50%,#141b28 100%);border-bottom:1px solid var(--ui-border);display:flex;align-items:center;justify-content:flex-start;padding:0 12px;z-index:10;gap:10px;width:100%;box-sizing:border-box;overflow:hidden;flex-shrink:0}.zoom-controls{display:flex;align-items:center;gap:2px;margin-left:auto;flex-shrink:0}.device-dropdown{flex-shrink:1;min-width:0;max-width:100%}.preview-btn{flex-shrink:0;white-space:nowrap}@media(max-width:768px){.preview-toolbar{padding:0 4px;height:50px;gap:4px}.device-dropdown{font-size:11px;padding:2px 4px;min-width:100px}.preview-btn{padding:3px 6px;font-size:11px}.zoom-label{font-size:11px;min-width:30px}@media(max-width:480px){#refresh-btn,#debug-toggle,#console-toggle{display:none}}}.device-frame{box-shadow:0 0 0 1px #ffffff14,0 18px 40px #0000008c;border-radius:14px;background-color:#000;transition:width .3s ease,height .3s ease;overflow:hidden;position:relative}.console-panel{position:absolute;bottom:0;left:0;right:0;height:200px;background:#10141cf5;border-top:1px solid var(--ui-border);display:flex;flex-direction:column;transition:opacity .3s ease,visibility .3s ease;z-index:100}.console-panel.closed{opacity:0;visibility:hidden;pointer-events:none}.console-msg{font-family:Consolas,Monaco,monospace;font-size:12px;padding:4px 8px;border-bottom:1px solid #333}.console-msg.type-warn{color:#feca57}.preview-toolbar-left{display:flex;align-items:center}.preview-logo{font-weight:700;font-size:13px;color:var(--ui-text);letter-spacing:1.2px;text-transform:uppercase}.preview-toolbar-center,.preview-toolbar-right{display:flex;align-items:center;gap:8px}.view-toggle{display:flex;align-items:center;gap:6px;padding:2px;background:#121826;border:1px solid var(--ui-border);border-radius:999px}.view-toggle-btn{border:none;background:transparent;color:var(--ui-muted);font-size:11px;padding:6px 12px;border-radius:999px;cursor:pointer;transition:all .2s ease}.view-toggle-btn.active{color:var(--ui-text);background:#263146;box-shadow:inset 0 0 0 1px #6f8cff66}.device-selector-wrapper{position:relative}.device-dropdown{background-color:#1d2430;color:var(--ui-text);border:1px solid var(--ui-border);border-radius:8px;padding:6px 10px;font-size:12px;min-width:150px;max-width:100%;cursor:pointer;overflow:hidden;text-overflow:ellipsis}.device-dropdown:focus{outline:none;border-color:var(--ui-accent-3)}.preview-btn{background-color:#202836;color:var(--ui-text);border:1px solid var(--ui-border);border-radius:8px;padding:6px 10px;font-size:12px;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;gap:6px}.preview-btn:hover{background-color:#2a3446;border-color:#3b475c}.preview-btn:active{background-color:#343f55}.preview-btn:disabled,.device-dropdown:disabled{opacity:.5;cursor:not-allowed}.icon-btn{padding:6px;width:30px;height:30px;justify-content:center}@media(max-width:768px){.icon-btn{padding:3px;width:24px;height:24px}.icon-btn svg{width:12px;height:12px}}.icon-btn svg{width:16px;height:16px}.toolbar-divider{width:1px;height:20px;background-color:#555;margin:0 4px}.zoom-label{font-size:12px;color:var(--ui-muted);min-width:35px;text-align:center}.console-toggle{position:relative}.console-badge{background-color:#ff6b6b;color:#fff;font-size:10px;padding:2px 4px;border-radius:8px;margin-left:4px;display:none}.console-badge.has-errors{display:inline-block}.preview-main{flex:1;position:relative;overflow:hidden;background:radial-gradient(circle at 30% 20%,rgba(61,214,198,.1),transparent 45%),radial-gradient(circle at 70% 80%,rgba(111,140,255,.14),transparent 50%),#0e1118}.preview-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:16px;box-sizing:border-box}.frame-wrapper{display:flex;justify-content:center;align-items:center;transform-origin:center center;transition:transform .2s cubic-bezier(.25,.46,.45,.94);filter:drop-shadow(0 12px 24px rgba(0,0,0,.45))}.game-container{width:100%;height:100%;position:relative}.console-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--ui-border);background-color:#141a24}.console-title{font-weight:600;font-size:14px;color:var(--ui-text)}.console-actions{display:flex;gap:8px}.console-action-btn{background-color:transparent;color:var(--ui-muted);border:1px solid var(--ui-border);border-radius:3px;padding:4px 8px;font-size:11px;cursor:pointer;transition:all .2s ease}.console-action-btn:hover{background-color:#243041;color:var(--ui-text)}.console-messages{flex:1;overflow-y:auto;padding:4px 0}.console-msg{font-family:Consolas,Monaco,monospace;font-size:12px;padding:4px 12px;border-bottom:1px solid #333;word-wrap:break-word}.console-msg .time{color:#888;margin-right:8px;font-size:11px}.console-msg.type-log{color:#fff}.console-msg.type-info{color:#74c0fc}.console-msg.type-error{color:#ff6b6b;background:#ff00001a}.console-msg.type-warn{color:#feca57;background:#ffc1071a}.debug-overlay{position:absolute;inset:0;z-index:200;pointer-events:none}.debug-overlay.hidden{display:none}.scene-panel{position:absolute;width:320px;max-height:78vh;background:#12161ef5;border:1px solid var(--ui-border);border-radius:14px;box-shadow:var(--ui-shadow);pointer-events:auto;overflow:hidden;box-sizing:border-box}.scene-panel.scene-objects{width:300px}.scene-panel.scene-tools{max-height:46vh}.scene-panel.scene-tools .scene-panel-body{max-height:calc(46vh - 44px)}.customize-panel{width:320px}.customize-list{display:flex;flex-direction:column;gap:8px}.customize-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.customize-row{display:flex;align-items:center;gap:8px;background:#141a24b3;border:1px solid rgba(255,255,255,.05);border-radius:8px;padding:6px 8px}.customize-key{flex:0 0 120px;font-size:11px;color:var(--ui-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.customize-input{flex:1;background-color:#1d2430;color:var(--ui-text);border:1px solid var(--ui-border);border-radius:6px;padding:4px 6px;font-size:11px;font-family:JetBrains Mono,SF Mono,Consolas,Monaco,monospace}.customize-actions{display:flex;align-items:center;gap:6px}.customize-icon-btn{width:28px;height:28px;border-radius:8px;border:1px solid rgba(111,140,255,.4);background:#19202ccc;color:var(--ui-text);display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.customize-icon-btn svg{width:14px;height:14px;fill:currentColor}.customize-icon-btn.ai{font-size:10px;font-weight:700;letter-spacing:.05em;padding:4px 6px}.customize-file{display:none}.customize-color-field{display:flex;flex-direction:column;gap:6px;padding:8px;border-radius:8px;background:#141a24b3;border:1px solid rgba(255,255,255,.05);font-size:11px;color:var(--ui-muted)}.customize-color-field input[type=color]{width:100%;height:28px;padding:0;border:none;background:transparent}.customize-color-text{background-color:#1d2430;color:var(--ui-text);border:1px solid var(--ui-border);border-radius:6px;padding:4px 6px;font-size:11px;font-family:JetBrains Mono,SF Mono,Consolas,Monaco,monospace}.customize-help{margin-top:6px;font-size:10px;color:var(--ui-muted)}.customize-empty{font-size:11px;color:var(--ui-muted);padding:6px 0}.batch-ai-label{font-size:11px;color:var(--ui-muted)}.batch-ai-input,.batch-ai-textarea,.batch-ai-select{width:100%;padding:6px 8px;border-radius:8px;border:1px solid rgba(255,255,255,.08);background:#0a0e14d9;color:var(--ui-text);font-size:12px}.batch-ai-textarea{min-height:70px;resize:vertical}.batch-ai-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.batch-ai-actions{margin-top:6px}.batch-ai-btn{border:1px solid var(--ui-border);background:#19202ccc;color:var(--ui-text);border-radius:8px;padding:4px 10px;font-size:11px;cursor:pointer}.batch-ai-btn.primary{border-color:#bf7eff99;background:#bf7eff33}.batch-ai-file{display:none}.batch-ai-file-name,.batch-ai-status{font-size:11px;color:var(--ui-muted)}.batch-ai-dna{margin-top:8px;padding:8px;border-radius:10px;border:1px solid rgba(255,255,255,.06);background:#10141c99}.batch-ai-palette{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.batch-ai-swatch{width:22px;height:22px;border-radius:6px;border:1px solid rgba(255,255,255,.2)}.batch-ai-muted{font-size:11px;color:var(--ui-muted)}.batch-ai-asset-list{margin-top:10px;display:flex;flex-direction:column;gap:10px}.batch-ai-item{border-radius:10px;border:1px solid rgba(255,255,255,.06);background:#0c1016b3;padding:8px;display:flex;flex-direction:column;gap:8px}.batch-ai-item-header{display:flex;align-items:center;justify-content:space-between;gap:8px}.batch-ai-toggle{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--ui-text)}.batch-ai-item-body{display:flex;flex-direction:column;gap:8px}.batch-ai-thumb{width:100%;max-height:140px;object-fit:contain;border-radius:8px;border:1px solid rgba(255,255,255,.08);background:#080a0e99}.batch-ai-thumb.hidden{display:none}.batch-ai-item-status{font-size:11px;color:var(--ui-muted)}.batch-ai-item-actions{display:flex;gap:8px;flex-wrap:wrap}.batch-ai-empty{font-size:11px;color:var(--ui-muted);padding:6px 0}.brand-dna-label{font-size:11px;color:var(--ui-muted)}.brand-dna-input,.brand-dna-textarea,.brand-dna-select{width:100%;padding:6px 8px;border-radius:8px;border:1px solid rgba(255,255,255,.08);background:#0a0e14d9;color:var(--ui-text);font-size:12px}.brand-dna-textarea{min-height:70px;resize:vertical}.brand-dna-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.brand-dna-btn{border:1px solid var(--ui-border);background:#19202ccc;color:var(--ui-text);border-radius:8px;padding:4px 10px;font-size:11px;cursor:pointer}.brand-dna-btn.primary{border-color:#6f8cff99;background:#6f8cff33}.brand-dna-file{display:none}.brand-dna-file-name,.brand-dna-status{font-size:11px;color:var(--ui-muted)}.brand-dna-meta{margin-top:8px}.brand-dna-prompt{margin:6px 0 0;padding:8px;border-radius:10px;border:1px solid rgba(255,255,255,.06);background:#0c1016b3;color:var(--ui-text);font-size:11px;white-space:pre-wrap}.brand-dna-output{margin-top:8px;padding:8px;border-radius:10px;border:1px solid rgba(255,255,255,.06);background:#10141c99}.brand-dna-palette{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.brand-dna-swatch{width:22px;height:22px;border-radius:6px;border:1px solid rgba(255,255,255,.2)}.brand-dna-muted{font-size:11px;color:var(--ui-muted)}.brand-dna-object-list{margin-top:10px;display:flex;flex-direction:column;gap:10px}.brand-dna-object{border-radius:10px;border:1px solid rgba(255,255,255,.06);background:#0c1016b3;padding:8px;display:flex;flex-direction:column;gap:8px}.brand-dna-object-header{display:flex;align-items:center;justify-content:space-between;gap:8px}.brand-dna-object-title{font-size:11px;color:var(--ui-text);word-break:break-all}.brand-dna-object-status{font-size:11px;color:var(--ui-muted)}.brand-dna-empty{font-size:11px;color:var(--ui-muted);padding:6px 0}.ai-panel{display:flex;flex-direction:column;gap:10px;padding:8px;border-radius:10px;border:1px solid rgba(255,255,255,.06);background:#10141c99}.ai-modal{position:fixed;inset:0;background:#060a10d1;display:flex;align-items:center;justify-content:center;z-index:10080}.ai-modal-card{width:min(760px,92vw);max-height:90vh;overflow:auto;background:#10141cfa;border:1px solid var(--ui-border);border-radius:16px;box-shadow:0 20px 50px #00000073}.ai-modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid rgba(255,255,255,.06)}.ai-modal-actions{display:inline-flex;align-items:center;gap:8px}.ai-modal-title{font-size:14px;font-weight:700;color:var(--ui-text)}.ai-modal-subtitle{font-size:11px;color:var(--ui-muted);margin-top:3px}.ai-modal-close,.ai-modal-gallery{border:1px solid var(--ui-border);background:#19202ccc;color:var(--ui-text);border-radius:8px;padding:4px 12px;font-size:11px;cursor:pointer}.ai-loading{display:none;align-items:center;gap:12px;padding:10px 12px;border-radius:10px;background:linear-gradient(120deg,#58a3ff1a,#ff639424);border:1px solid rgba(88,163,255,.25)}.ai-loading.active{display:flex}.ai-loading-ring{width:26px;height:26px;border-radius:50%;border:3px solid rgba(255,255,255,.15);border-top-color:#58a3ffe6;animation:ai-spin .9s linear infinite}.ai-loading-bar{flex:1;height:8px;border-radius:999px;background:linear-gradient(90deg,#58a3ff33,#ff6394b3,#58a3ff33);background-size:200% 100%;animation:ai-bar 1.4s ease infinite}.ai-loading-text{font-size:11px;color:var(--ui-text)}@keyframes ai-spin{to{transform:rotate(360deg)}}@keyframes ai-bar{0%{background-position:0% 50%}to{background-position:100% 50%}}.ai-label{font-size:11px;color:var(--ui-muted)}.ai-input,.ai-select,.ai-textarea{width:100%;padding:6px 8px;border-radius:8px;border:1px solid rgba(255,255,255,.08);background:#0a0e14d9;color:var(--ui-text);font-size:12px}.ai-textarea{min-height:70px;resize:vertical}.ai-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.ai-strength{gap:10px}.ai-strength input[type=range]{flex:1;min-width:160px}.ai-strength-value{font-size:11px;color:var(--ui-text);min-width:20px;text-align:right}.ai-gallery{border-radius:10px;border:1px solid rgba(255,255,255,.06);background:#0c1016a6;padding:8px}.ai-gallery.hidden{display:none}.ai-gallery-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(90px,1fr));gap:8px}.ai-gallery-item{border:1px solid rgba(255,255,255,.08);background:#080a0eb3;border-radius:10px;padding:6px;display:flex;flex-direction:column;gap:6px;cursor:pointer;text-align:left}.ai-gallery-item.active{border-color:#6f8cff99;box-shadow:0 0 0 1px #6f8cff40}.ai-gallery-thumb{width:100%;height:70px;object-fit:contain;border-radius:6px;background:#06080cb3;border:1px solid rgba(255,255,255,.08)}.ai-gallery-label{font-size:10px;color:var(--ui-text);word-break:break-all}.ai-gallery-empty{font-size:11px;color:var(--ui-muted)}.ai-btn{border:1px solid var(--ui-border);background:#19202ccc;color:var(--ui-text);border-radius:8px;padding:4px 10px;font-size:11px;cursor:pointer}.ai-file{display:none}.ai-file-name{font-size:11px;color:var(--ui-muted)}.ai-toggles label{font-size:11px;color:var(--ui-text);display:inline-flex;align-items:center;gap:6px}.ai-actions .debug-btn{flex:1}.ai-status{font-size:11px;color:var(--ui-muted)}.ai-preview{width:100%;border-radius:10px;border:1px solid rgba(255,255,255,.08);background:#080a0e99;padding:8px;display:flex;justify-content:center;align-items:center;min-height:140px}.ai-preview img{max-width:100%;max-height:220px;object-fit:contain}.asset-preview-modal{position:fixed;inset:0;background:#080a0eb8;display:flex;align-items:center;justify-content:center;z-index:10050}.asset-preview-card{width:min(720px,92vw);max-height:82vh;background:#10141cfa;border:1px solid var(--ui-border);border-radius:14px;box-shadow:var(--ui-shadow);display:flex;flex-direction:column}.asset-preview-header{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid rgba(255,255,255,.06);color:var(--ui-text)}.asset-preview-title{font-size:12px;font-weight:600;word-break:break-all}.asset-preview-close{border:1px solid var(--ui-border);background:#19202ccc;color:var(--ui-text);border-radius:8px;padding:4px 10px;font-size:11px;cursor:pointer}.asset-preview-meta{padding:0 14px 10px;color:var(--ui-muted);font-size:11px;word-break:break-all;border-bottom:1px solid rgba(255,255,255,.06)}.asset-preview-actions{display:flex;align-items:center;gap:8px}.asset-preview-change,.asset-preview-ai{border:1px solid var(--ui-border);background:#19202ccc;color:var(--ui-text);border-radius:8px;padding:4px 10px;font-size:11px;cursor:pointer}.asset-preview-body{padding:12px;overflow:auto;display:flex;align-items:center;justify-content:center}.asset-preview-ai-output{border-top:1px solid rgba(255,255,255,.06);padding:10px 12px 14px}.asset-preview-ai-output.hidden{display:none}.asset-preview-ai-label{font-size:11px;color:var(--ui-muted);margin-bottom:6px}.asset-preview-ai-image{width:100%;max-height:200px;object-fit:contain;border-radius:10px;border:1px solid rgba(255,255,255,.08);background:#080a0e99}.asset-preview-body img{max-width:100%;max-height:60vh;object-fit:contain}.asset-preview-body audio{width:100%}.asset-preview-body pre{width:100%;white-space:pre-wrap;color:var(--ui-text);font-family:JetBrains Mono,SF Mono,Consolas,Monaco,monospace;font-size:12px}.asset-crop-modal{position:fixed;inset:0;background:#080a0ec7;display:flex;align-items:center;justify-content:center;z-index:10060}.asset-crop-card{width:min(860px,96vw);background:#10141cfa;border:1px solid var(--ui-border);border-radius:14px;box-shadow:var(--ui-shadow);display:flex;flex-direction:column}.asset-crop-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 16px;border-bottom:1px solid rgba(255,255,255,.06);color:var(--ui-text)}.asset-crop-title{font-size:13px;font-weight:600}.asset-crop-subtitle{font-size:11px;color:var(--ui-muted);margin-top:2px}.asset-crop-close{border:1px solid var(--ui-border);background:#19202ccc;color:var(--ui-text);border-radius:8px;padding:4px 10px;font-size:11px;cursor:pointer}.asset-crop-body{padding:16px;display:flex;justify-content:center;gap:16px;flex-wrap:nowrap;align-items:flex-start}.asset-crop-column{display:flex;flex-direction:column;gap:8px;align-items:center;min-width:0}.asset-crop-label{font-size:11px;color:var(--ui-muted);text-transform:uppercase;letter-spacing:.08em}.asset-crop-canvas{border-radius:12px;border:1px solid rgba(255,255,255,.08);background:#080a0e8c;cursor:grab}.asset-crop-preview{border-radius:12px;border:1px solid rgba(255,255,255,.08);background:#080a0e8c}.asset-crop-canvas:active{cursor:grabbing}.asset-crop-controls{display:flex;align-items:center;gap:12px;padding:0 16px 12px;color:var(--ui-text);font-size:12px}.asset-crop-controls label{min-width:42px}.asset-crop-zoom{flex:1}.asset-crop-zoom-value{min-width:50px;text-align:right;color:var(--ui-muted)}.asset-crop-reset{border:1px solid var(--ui-border);background:#19202ccc;color:var(--ui-text);border-radius:8px;padding:4px 10px;font-size:11px;cursor:pointer}.asset-crop-actions{display:flex;justify-content:flex-end;gap:10px;padding:0 16px 16px}.asset-crop-actions button{border-radius:10px;padding:6px 14px;font-size:12px;border:1px solid var(--ui-border);background:#1c2432d9;color:var(--ui-text);cursor:pointer}.asset-crop-apply{background:var(--ui-accent);border-color:transparent;color:#10151f;font-weight:600}@media(max-width:720px){.customize-grid{grid-template-columns:1fr}}.scene-panel-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;background-color:#181c26f2;color:var(--ui-text);font-size:12px;user-select:none;cursor:move;border-bottom:1px solid rgba(255,255,255,.05)}.scene-panel-actions{display:flex;align-items:center;gap:8px}.scene-panel-action{border:1px solid var(--ui-border);border-radius:6px;background:#1f2633;color:var(--ui-muted);font-size:11px;padding:4px 8px;cursor:pointer}.scene-panel-action:hover{border-color:#ff9f4399;color:var(--ui-text)}.scene-panel-toggle{border:none;background:transparent;color:var(--ui-muted);font-size:14px;cursor:pointer;transition:transform .2s ease}.panel-title{display:flex;align-items:center;gap:8px}.panel-pill{padding:2px 8px;border-radius:999px;background:#3dd6c61f;color:var(--ui-accent);font-size:10px;text-transform:uppercase;letter-spacing:.6px}.panel-accent-blue .panel-pill{background:#6f8cff24;color:var(--ui-accent-3)}.panel-accent-amber .panel-pill{background:#ff9f4329;color:var(--ui-accent-2)}.panel-accent-violet .panel-pill{background:#bf7eff2e;color:#d6b7ff}.panel-title-text{font-weight:700;font-size:12px;letter-spacing:.4px}.panel-accent-teal{border-color:#3dd6c659}.panel-accent-blue{border-color:#6f8cff59}.panel-accent-amber{border-color:#ff9f4366}.panel-accent-violet{border-color:#bf7eff59}.scene-panel-body{padding:12px 14px 16px;overflow-y:auto;max-height:calc(78vh - 44px)}.scene-panel.collapsed .scene-panel-body{display:none}.scene-panel.collapsed .scene-panel-toggle{transform:rotate(-90deg)}.scene-panel-search input{width:100%;background-color:#1d2430;color:var(--ui-text);border:1px solid var(--ui-border);border-radius:6px;padding:6px 8px;font-size:12px}.scene-panel-search input:focus{outline:none;border-color:var(--ui-accent);box-shadow:0 0 0 2px #3dd6c633}.scene-panel-filters{display:flex;gap:6px;margin-top:10px}.filter-chip{border:1px solid rgba(111,140,255,.3);background:#131822b3;color:var(--ui-muted);font-size:11px;border-radius:999px;padding:4px 10px;cursor:pointer;transition:all .2s ease}.filter-chip.active{color:var(--ui-text);border-color:#3dd6c680;background:#3dd6c626}.scene-object-list{margin-top:12px;display:flex;flex-direction:column;gap:12px}.scene-object-group-title{font-size:11px;color:var(--ui-muted);text-transform:uppercase;letter-spacing:.6px;margin-bottom:6px}.scene-object-count{margin-left:6px;padding:2px 6px;border-radius:999px;background:#ffffff14;color:var(--ui-text);font-size:10px}.scene-object-group-items{display:flex;flex-direction:column;gap:6px}.scene-object-item{width:100%;text-align:left;border:1px solid rgba(255,255,255,.06);border-radius:6px;background-color:#191e28e6;color:var(--ui-text);font-size:12px;padding:6px 8px;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:8px}.scene-object-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.scene-object-badge{font-size:10px;padding:2px 6px;border-radius:999px;text-transform:uppercase;letter-spacing:.4px;border:1px solid rgba(255,255,255,.1)}.scene-object-badge.ui{background:#3dd6c61f;color:var(--ui-accent)}.scene-object-badge.scene{background:#6f8cff1f;color:var(--ui-accent-3)}.scene-object-item:hover{border-color:#3dd6c680;color:var(--ui-text)}.scene-object-item.selected{border-color:#3dd6c6b3;color:var(--ui-text);box-shadow:inset 0 0 0 1px #3dd6c666}.scene-edit-selected{font-size:12px;color:var(--ui-muted);margin-bottom:10px}.debug-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #444;background-color:#252525;border-radius:8px 8px 0 0;cursor:move;user-select:none}.debug-tabs{display:flex;gap:6px;padding:8px 12px;border-bottom:1px solid #333;background-color:#1f1f1f}.debug-tab{flex:1;border:1px solid #444;border-radius:6px;background-color:#262626;color:#bfc3c7;font-size:12px;padding:6px 10px;cursor:pointer;transition:all .2s ease}.debug-tab.active{background-color:#323232;color:#fff;border-color:#ffb43b;box-shadow:inset 0 0 0 1px #ffb43b59}.debug-hint{font-size:11px;color:#9aa0a6;margin-bottom:10px}.debug-tab-panel{display:none}.debug-tab-panel.active{display:block}.debug-collapsible{border:1px solid rgba(255,255,255,.08);border-radius:10px;background-color:#151a24d9;overflow:hidden;margin-bottom:12px}.debug-collapsible-header{width:100%;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;background-color:#181e2ae6;border:none;color:var(--ui-text);font-size:12px;cursor:pointer}.debug-collapsible-body{padding:10px 12px}.debug-collapsible-icon{transition:transform .2s ease}.debug-collapsible.collapsed .debug-collapsible-body{display:none}.debug-collapsible.collapsed .debug-collapsible-icon{transform:rotate(-90deg)}.debug-nudge.hidden{display:none}.debug-arrow-pad{display:grid;grid-template-columns:repeat(3,36px);grid-auto-rows:32px;gap:6px;justify-content:center;margin-top:8px}.debug-arrow-btn{border:1px solid #444;border-radius:6px;background-color:#2b2b2b;color:#e7e7e7;font-size:14px;cursor:pointer;transition:all .15s ease}.debug-arrow-btn:hover{border-color:#ffb43b;color:#fff}.debug-arrow-btn:active{transform:translateY(1px)}.debug-arrow-btn[data-nudge=up]{grid-column:2}.debug-arrow-btn[data-nudge=left]{grid-column:1}.debug-arrow-btn[data-nudge=down]{grid-column:2}.debug-arrow-btn[data-nudge=right]{grid-column:3}.debug-info-grid{display:flex;flex-direction:column;gap:8px;padding:8px;border-radius:6px;background-color:#191e28cc;border:1px solid rgba(255,255,255,.08)}.debug-info-row{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:11px}.debug-info-label{color:#9aa0a6}.debug-info-value{color:#f1f3f5;font-weight:600}.debug-title{font-weight:600;font-size:14px;color:#fff}.debug-actions{display:flex;gap:8px}.debug-action-btn{background-color:transparent;color:#ccc;border:1px solid #555;border-radius:3px;padding:4px 8px;font-size:11px;cursor:pointer;transition:all .2s ease}.debug-action-btn:hover{background-color:#444;color:#fff}.debug-content{flex:1;overflow-y:auto;padding:12px 16px}.debug-section{margin-bottom:20px}.panel-section{margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid rgba(255,255,255,.06)}.panel-section:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.panel-section-title{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ui-muted);margin-bottom:8px}.field-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}@media(max-width:520px){.field-grid{grid-template-columns:1fr}}.debug-section-title{font-size:12px;font-weight:600;color:var(--ui-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px;border-bottom:1px solid rgba(255,255,255,.08);padding-bottom:4px}.debug-field{margin-bottom:12px}.debug-field label{display:block;font-size:11px;color:#aaa;margin-bottom:4px;font-weight:500}.debug-field input,.debug-field select{width:100%;background-color:#1d2430;color:var(--ui-text);border:1px solid var(--ui-border);border-radius:4px;padding:6px 8px;font-size:12px;font-family:JetBrains Mono,SF Mono,Consolas,Monaco,monospace;transition:border-color .2s ease}.debug-field input:focus,.debug-field select:focus{outline:none;border-color:var(--ui-accent-3);box-shadow:0 0 0 2px #6f8cff33}.debug-field input[type=range]{-webkit-appearance:none;appearance:none;height:6px;background:#555;border-radius:3px;outline:none}.debug-field input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:var(--ui-accent-3);cursor:pointer}.debug-field input[type=range]::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(--ui-accent-3);cursor:pointer;border:none}.debug-field input[type=checkbox]{width:auto;margin-right:8px}.debug-field.checkbox-field{display:flex;align-items:center;gap:8px}.debug-field.checkbox-field label{margin-bottom:0;flex:1}.debug-value-display{display:inline-block;margin-left:8px;font-size:11px;color:var(--ui-muted);font-family:JetBrains Mono,SF Mono,Consolas,Monaco,monospace}.debug-btn-group{display:flex;gap:6px;margin-top:8px}.debug-btn{flex:1;background-color:#444;color:#fff;border:1px solid #666;border-radius:4px;padding:6px 8px;font-size:11px;cursor:pointer;transition:all .2s ease}.debug-btn:hover{background-color:#555;border-color:#888}.debug-btn.primary{background-color:#2a5bd7;border-color:#2a5bd7}.debug-btn.primary:hover{background-color:#2147a7;border-color:#2147a7}.debug-btn.danger{background-color:#dc3545;border-color:#dc3545}.debug-btn.danger:hover{background-color:#c82333;border-color:#c82333}.debug-btn.secondary{background-color:#3dd6c61a;border-color:#3dd6c64d;color:#3dd6c6}.debug-btn.secondary:hover{background-color:#3dd6c633;border-color:#3dd6c666}.config-editor{border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:12px;margin-top:8px;background-color:#191e28d9}.debug-select{width:100%;background-color:#1d2430;color:var(--ui-text);border:1px solid var(--ui-border);border-radius:4px;padding:6px 8px;font-size:11px}.debug-select:focus{outline:none;border-color:var(--ui-accent-3);box-shadow:0 0 0 2px #6f8cff33}.debug-select option{background-color:#333;color:#fff}.json-modal{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000c;z-index:10000;display:flex;align-items:center;justify-content:center}.json-modal-content{background-color:#1e1e1e;border:1px solid #555;border-radius:8px;width:80%;max-width:800px;max-height:80%;display:flex;flex-direction:column}.json-modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #444}.json-modal-header h3{margin:0;color:#fff;font-size:16px;font-weight:600}.json-modal-body{flex:1;padding:16px 20px;overflow-y:auto}.json-modal-body pre{margin:0;color:#fff;font-family:Consolas,Monaco,monospace;font-size:12px;line-height:1.4;white-space:pre-wrap;word-wrap:break-word}.debug-toggle{position:relative}.debug-toggle-badge{background-color:#28a745;color:#fff;font-size:10px;padding:2px 4px;border-radius:8px;margin-left:4px;display:none}.debug-toggle-badge.active{display:inline-block}.preview-stage{width:100%;height:100%;display:flex;align-items:center;justify-content:center;position:relative}.preview-stage.hidden{display:none}.compare-grid{width:100%;height:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;padding:8px;box-sizing:border-box}.compare-viewport{display:flex;flex-direction:column;background:#141820e6;border:1px solid rgba(111,140,255,.2);border-radius:14px;box-shadow:var(--ui-shadow);overflow:hidden;position:relative}.compare-viewport.is-active{border-color:#3dd6c699;box-shadow:0 0 0 1px #3dd6c666,var(--ui-shadow)}.compare-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;background:#121720e6;border-bottom:1px solid rgba(255,255,255,.06);color:var(--ui-text)}.compare-title{display:flex;flex-direction:column;gap:2px}.compare-title-text{font-size:12px;font-weight:700;letter-spacing:.6px;text-transform:uppercase}.compare-meta{font-size:11px;color:var(--ui-muted)}.compare-focus{border:1px solid rgba(111,140,255,.5);background:#1e2638b3;color:var(--ui-text);border-radius:999px;padding:4px 10px;font-size:11px;cursor:pointer}.compare-viewport.is-active .compare-focus{border-color:#3dd6c699;background:#3dd6c62e;color:#e9fff9}.compare-body{position:relative;flex:1;display:flex;align-items:center;justify-content:center;padding:10px;box-sizing:border-box}.compare-slot,.compare-ghost{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}.compare-ghost.hidden{display:none}.compare-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:11px;color:var(--ui-muted);background:#0a0d1259;opacity:0;transition:opacity .2s ease;pointer-events:none}.compare-viewport:not(.is-active) .compare-overlay{opacity:1}.snapshot-canvas{width:100%;height:100%;display:block;background:#000}@media(max-width:1100px){.compare-grid{grid-template-columns:1fr;grid-auto-rows:minmax(0,1fr)}}@media(max-width:720px){.scene-panel.scene-tools{width:calc(100% - 32px);left:16px!important;right:auto}}.panel-resize-handle{position:absolute;top:0;right:0;width:10px;height:100%;cursor:ew-resize}.panel-resize-handle:after{content:"";position:absolute;top:30%;right:3px;width:2px;height:40%;border-radius:2px;background:#ffffff1f}.debug-workbench{position:absolute;width:350px;height:600px;min-width:250px;min-height:200px;background:#12161ef5;border:1px solid var(--ui-border);border-radius:14px;box-shadow:var(--ui-shadow);pointer-events:auto;display:flex;flex-direction:column;overflow:hidden;z-index:1000}.workbench-header{display:flex;align-items:center;justify-content:space-between;padding:8px 14px;background-color:#181c26f2;border-bottom:1px solid rgba(255,255,255,.05);cursor:move;flex-shrink:0}.workbench-tabs{display:flex;background:#0c1018e6;padding:4px;gap:4px;border-bottom:1px solid var(--ui-border);flex-shrink:0;overflow-x:auto}.workbench-tab{flex:1;padding:6px 10px;font-size:11px;font-weight:600;color:var(--ui-muted);background:transparent;border:1px solid transparent;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .2s ease;text-align:center}.workbench-tab:hover{background:#ffffff0d;color:var(--ui-text)}.workbench-tab.active{background:#3dd6c61f;color:var(--ui-accent);border-color:#3dd6c64d}.workbench-content{flex:1;overflow-y:auto;padding:0}.workbench-tab-panel{display:none}.workbench-tab-panel.active{display:block}.workbench-resize-handle{position:absolute;bottom:0;right:0;width:16px;height:16px;cursor:nwse-resize;background:linear-gradient(135deg,transparent 50%,var(--ui-border) 50%,var(--ui-border) 75%,transparent 75%,transparent 85%,var(--ui-border) 85%);z-index:10}.workbench-content .scene-panel{position:static;width:100%!important;max-height:none!important;border:none;background:transparent;box-shadow:none;border-radius:0}.workbench-content .scene-panel-header{display:none}.workbench-content .scene-panel-body{max-height:none;padding:12px}.library-panel{border-color:#3dd6c659}.library-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(80px,1fr));gap:8px;margin-top:12px}.library-item{display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px;border:2px solid transparent;border-radius:8px;cursor:pointer;transition:all .2s ease;background:#191e28cc}.library-item:hover{border-color:#3dd6c680;background:#3dd6c61a}.library-item.selected{border-color:#3dd6c6cc;background:#3dd6c626;box-shadow:0 0 0 1px #3dd6c666}.library-thumbnail{width:60px;height:40px;object-fit:cover;border-radius:4px;border:1px solid rgba(255,255,255,.1)}.library-label{font-size:11px;color:var(--ui-muted);text-align:center;word-break:break-all}.library-selected{font-size:12px;color:var(--ui-text);margin:12px 0;padding:8px;background:#191e28cc;border-radius:6px;border:1px solid rgba(255,255,255,.08)}.library-empty{font-size:11px;color:var(--ui-muted);padding:20px;text-align:center;grid-column:1 / -1}.library-category-tabs{display:flex;background:#0c1018e6;padding:4px;gap:2px;border-bottom:1px solid var(--ui-border);margin-bottom:12px}.library-category-tab{flex:1;padding:6px 8px;font-size:11px;font-weight:600;color:var(--ui-muted);background:transparent;border:1px solid transparent;border-radius:6px;cursor:pointer;white-space:nowrap;text-align:center;transition:all .2s ease}.library-category-tab:hover{background:#ffffff0d;color:var(--ui-text)}.library-category-tab.active{background:#3dd6c61f;color:var(--ui-accent);border-color:#3dd6c64d}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,3 +1,389 @@
|
|
|
1
|
+
import { O as ObjectCentricConfig } from './loader-object-centric-C1QteFfG.mjs';
|
|
2
|
+
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-C1QteFfG.mjs';
|
|
3
|
+
|
|
4
|
+
declare global {
|
|
5
|
+
interface Window {
|
|
6
|
+
cachedContainerSize?: {
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
declare function setBootstrapDependencies(deps: {
|
|
13
|
+
initGame: any;
|
|
14
|
+
CustomAssets: any;
|
|
15
|
+
updateScreenState: any;
|
|
16
|
+
globalResponsiveMultipliers: any;
|
|
17
|
+
layout: any;
|
|
18
|
+
clearResponsiveElements: any;
|
|
19
|
+
}): void;
|
|
20
|
+
/**
|
|
21
|
+
* Bootstrap the Handler game
|
|
22
|
+
*/
|
|
23
|
+
declare const bootstrap: () => Promise<void>;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Device Presets for Preview System
|
|
27
|
+
*
|
|
28
|
+
* Real device resolutions organized by category.
|
|
29
|
+
* The preview system will scale-to-fit these within the browser window.
|
|
30
|
+
*/
|
|
31
|
+
interface DevicePreset {
|
|
32
|
+
id: string;
|
|
33
|
+
label: string;
|
|
34
|
+
width: number;
|
|
35
|
+
height: number;
|
|
36
|
+
category: DeviceCategory;
|
|
37
|
+
ratio: string;
|
|
38
|
+
mraidScale?: number;
|
|
39
|
+
}
|
|
40
|
+
type DeviceCategory = 'iphone' | 'android' | 'tablet' | 'playable' | 'social';
|
|
41
|
+
interface DeviceGroup {
|
|
42
|
+
category: DeviceCategory;
|
|
43
|
+
label: string;
|
|
44
|
+
devices: DevicePreset[];
|
|
45
|
+
}
|
|
46
|
+
declare const devicePresets: DevicePreset[];
|
|
47
|
+
declare const deviceGroups: DeviceGroup[];
|
|
48
|
+
declare const defaultPreset: DevicePreset;
|
|
49
|
+
declare function getPresetById(id: string): DevicePreset;
|
|
50
|
+
declare function getPresetsByCategory(category: DeviceCategory): DevicePreset[];
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Preview Shell
|
|
54
|
+
* Google Ads & Meta Style Preview System.
|
|
55
|
+
* Uses CSS transform scaling for device frame preview,
|
|
56
|
+
* and emits resize events so PIXI can reflow reliably.
|
|
57
|
+
*/
|
|
58
|
+
|
|
59
|
+
interface PreviewOptions {
|
|
60
|
+
defaultDevice?: string;
|
|
61
|
+
onDeviceChange?: (preset: DevicePreset) => void;
|
|
62
|
+
onRefresh?: () => void;
|
|
63
|
+
onRestart?: () => void;
|
|
64
|
+
}
|
|
65
|
+
declare class PreviewShell {
|
|
66
|
+
private container;
|
|
67
|
+
private previewContainer;
|
|
68
|
+
private singleStage;
|
|
69
|
+
private compareStage;
|
|
70
|
+
private frameDragger;
|
|
71
|
+
private frameWrapper;
|
|
72
|
+
private deviceFrame;
|
|
73
|
+
private gameContainer;
|
|
74
|
+
private currentPreset;
|
|
75
|
+
private isLandscape;
|
|
76
|
+
private autoScale;
|
|
77
|
+
private userScaleMultiplier;
|
|
78
|
+
private options;
|
|
79
|
+
private viewMode;
|
|
80
|
+
private lastSinglePresetId;
|
|
81
|
+
private comparePresets;
|
|
82
|
+
private activeCompareId;
|
|
83
|
+
private compareViewports;
|
|
84
|
+
private resizeObserver;
|
|
85
|
+
private rafFitHandle;
|
|
86
|
+
private ignoreNextWindowResize;
|
|
87
|
+
private frameDragOffsetX;
|
|
88
|
+
private frameDragOffsetY;
|
|
89
|
+
private frameDragActive;
|
|
90
|
+
private frameDragStartX;
|
|
91
|
+
private frameDragStartY;
|
|
92
|
+
private frameDragOriginX;
|
|
93
|
+
private frameDragOriginY;
|
|
94
|
+
private consolePanel;
|
|
95
|
+
private consoleMessages;
|
|
96
|
+
private isConsoleOpen;
|
|
97
|
+
private debugPanel;
|
|
98
|
+
private hasInitialFit;
|
|
99
|
+
private isMounted;
|
|
100
|
+
private isInitialized;
|
|
101
|
+
private gameReady;
|
|
102
|
+
private resizeListenersDisabled;
|
|
103
|
+
private compareSnapshotTimer;
|
|
104
|
+
constructor(options?: PreviewOptions);
|
|
105
|
+
mount(target?: HTMLElement): void;
|
|
106
|
+
destroy(): void;
|
|
107
|
+
getGameContainer(): HTMLElement;
|
|
108
|
+
getScreen(): {
|
|
109
|
+
width: number;
|
|
110
|
+
height: number;
|
|
111
|
+
};
|
|
112
|
+
getEffectivePreset(): DevicePreset;
|
|
113
|
+
notifyGameLoaded(): void;
|
|
114
|
+
notifyGameDestroyed(): void;
|
|
115
|
+
private disableResizeListeners;
|
|
116
|
+
private enableResizeListeners;
|
|
117
|
+
refresh(): void;
|
|
118
|
+
setDevice(deviceId: string, opts?: {
|
|
119
|
+
suppressCallback?: boolean;
|
|
120
|
+
}): void;
|
|
121
|
+
private createShell;
|
|
122
|
+
private setupEventListeners;
|
|
123
|
+
private applyDeviceFrameStyles;
|
|
124
|
+
private setupObserversAndListeners;
|
|
125
|
+
private onWindowResize;
|
|
126
|
+
private scheduleFit;
|
|
127
|
+
private applyPresetDimensions;
|
|
128
|
+
private fitToScreen;
|
|
129
|
+
private applyTransform;
|
|
130
|
+
private applyFrameDrag;
|
|
131
|
+
private setupFrameDragging;
|
|
132
|
+
private onFrameDragMove;
|
|
133
|
+
private onFrameDragEnd;
|
|
134
|
+
private adjustUserZoom;
|
|
135
|
+
private toggleRotation;
|
|
136
|
+
private emitScreenChange;
|
|
137
|
+
private safeStringify;
|
|
138
|
+
private setupConsoleInterceptor;
|
|
139
|
+
private appendConsoleMessage;
|
|
140
|
+
private escapeHtml;
|
|
141
|
+
private toggleConsole;
|
|
142
|
+
private clearConsole;
|
|
143
|
+
private setupCompareViewports;
|
|
144
|
+
private setViewMode;
|
|
145
|
+
private updateViewToggleUI;
|
|
146
|
+
private activateCompareViewport;
|
|
147
|
+
private applyCompareDimensions;
|
|
148
|
+
private fitCompareGhosts;
|
|
149
|
+
private captureCompareSnapshot;
|
|
150
|
+
private refreshCompareSnapshots;
|
|
151
|
+
private startCompareSnapshots;
|
|
152
|
+
private stopCompareSnapshots;
|
|
153
|
+
private getFitBounds;
|
|
154
|
+
private mustQuery;
|
|
155
|
+
}
|
|
156
|
+
declare function createPreviewShell(options?: PreviewOptions): PreviewShell;
|
|
157
|
+
|
|
158
|
+
declare class DebugPanel {
|
|
159
|
+
private debugOverlay;
|
|
160
|
+
private isDebugOpen;
|
|
161
|
+
private selectedObjectId;
|
|
162
|
+
private configViewer;
|
|
163
|
+
private container;
|
|
164
|
+
private objectAutoApplyTimer;
|
|
165
|
+
private objectDebugRaf;
|
|
166
|
+
private objectBoundsGfx;
|
|
167
|
+
private objectAnchorGfx;
|
|
168
|
+
private highlightObject;
|
|
169
|
+
private highlightAnchor;
|
|
170
|
+
private sceneObjectsPanel;
|
|
171
|
+
private sceneEditPanel;
|
|
172
|
+
private sceneToolsPanel;
|
|
173
|
+
private customizeSettingsPanel;
|
|
174
|
+
private libraryPanel;
|
|
175
|
+
private batchAiPanel;
|
|
176
|
+
private brandDnaPanel;
|
|
177
|
+
private activeTab;
|
|
178
|
+
initialize(container: HTMLElement): void;
|
|
179
|
+
selectObject(objectId: string): void;
|
|
180
|
+
getDebugOverlayHTML(): string;
|
|
181
|
+
setupDebugEventListeners(): void;
|
|
182
|
+
private updateWorkbenchTabs;
|
|
183
|
+
toggleDebug(force?: boolean): void;
|
|
184
|
+
private applyAssetChange;
|
|
185
|
+
private resetAsset;
|
|
186
|
+
updateDebugBadge(): void;
|
|
187
|
+
private setupDebugInputListeners;
|
|
188
|
+
private setupPanelLayout;
|
|
189
|
+
private saveWorkbenchState;
|
|
190
|
+
private loadWorkbenchState;
|
|
191
|
+
private setupCollapsiblePanels;
|
|
192
|
+
private handleObjectSelect;
|
|
193
|
+
private nudgeSelectedObject;
|
|
194
|
+
private startObjectVisuals;
|
|
195
|
+
private stopObjectVisuals;
|
|
196
|
+
private shouldRunObjectVisuals;
|
|
197
|
+
private updateObjectVisuals;
|
|
198
|
+
private getSelectedInstanceId;
|
|
199
|
+
private getDisplayObjectById;
|
|
200
|
+
private getSelectedObjectConfig;
|
|
201
|
+
private getConfigAnchorWorldPoint;
|
|
202
|
+
private getScreenSize;
|
|
203
|
+
private ensureBoundsGfx;
|
|
204
|
+
private ensureAnchorGfx;
|
|
205
|
+
private drawBounds;
|
|
206
|
+
private drawAnchor;
|
|
207
|
+
private clearBounds;
|
|
208
|
+
private clearAnchor;
|
|
209
|
+
private clearObjectVisuals;
|
|
210
|
+
private updateObjectInfo;
|
|
211
|
+
private scheduleObjectAutoApply;
|
|
212
|
+
private setupRangeInput;
|
|
213
|
+
private getNestedValue;
|
|
214
|
+
private setNestedValue;
|
|
215
|
+
private resetDebugConfig;
|
|
216
|
+
private applyDebugConfig;
|
|
217
|
+
private exportDebugConfig;
|
|
218
|
+
private loadObjectConfig;
|
|
219
|
+
private fillConfigViewer;
|
|
220
|
+
private copyConfigValues;
|
|
221
|
+
private applyObjectConfig;
|
|
222
|
+
private applyCustomizeSettings;
|
|
223
|
+
private shouldUseOffsetPosition;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Preview Live-Edit Bridge (SDK)
|
|
228
|
+
*
|
|
229
|
+
* Provides the window hooks used by preview panels + hot-reload systems.
|
|
230
|
+
* This is intentionally small and defensive: it does not assume any specific
|
|
231
|
+
* GameObject implementation beyond "getDisplayObject" or common PIXI fields.
|
|
232
|
+
*/
|
|
233
|
+
type LiveEditBridge = {
|
|
234
|
+
/** Apply a full object config (usually after reloading from disk) */
|
|
235
|
+
applyObjectConfig: (objectId: string, nextConfig: any) => Promise<void>;
|
|
236
|
+
/** Rebuild lookup tables used by panels */
|
|
237
|
+
rebuildIndexes: () => void;
|
|
238
|
+
};
|
|
239
|
+
type SetupLiveEditBridgeOptions = {
|
|
240
|
+
getConfig: () => any;
|
|
241
|
+
gameObjectManager: any;
|
|
242
|
+
assets?: any;
|
|
243
|
+
onObjectConfigApplied?: (objectId: string, nextConfig: any, instanceIds: string[]) => void;
|
|
244
|
+
};
|
|
245
|
+
/**
|
|
246
|
+
* Setup the live-edit bridge.
|
|
247
|
+
*
|
|
248
|
+
* Call this after you have a loaded config and an initialized gameObjectManager.
|
|
249
|
+
*/
|
|
250
|
+
declare function setupLiveEditBridge(options: SetupLiveEditBridgeOptions): LiveEditBridge;
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Hot-Reload System for Object-Centric Config
|
|
254
|
+
*
|
|
255
|
+
* Enables live config editing during development.
|
|
256
|
+
* Edit your config JSON files and see changes instantly!
|
|
257
|
+
*/
|
|
258
|
+
interface HotReloadWatcher {
|
|
259
|
+
watch(configPath: string, callback: (event: ConfigChangeEvent) => void): void;
|
|
260
|
+
unwatch(configPath: string): void;
|
|
261
|
+
stop(): void;
|
|
262
|
+
}
|
|
263
|
+
interface ConfigChangeEvent {
|
|
264
|
+
type: 'object' | 'component' | 'engine' | 'scene';
|
|
265
|
+
path: string;
|
|
266
|
+
objectId?: string;
|
|
267
|
+
componentName?: string;
|
|
268
|
+
}
|
|
269
|
+
interface ReloadStrategy {
|
|
270
|
+
shouldFullReload(event: ConfigChangeEvent): boolean;
|
|
271
|
+
getAffectedObjects(event: ConfigChangeEvent): string[];
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Determines reload strategy based on config change type
|
|
275
|
+
*/
|
|
276
|
+
declare class DefaultReloadStrategy implements ReloadStrategy {
|
|
277
|
+
shouldFullReload(event: ConfigChangeEvent): boolean;
|
|
278
|
+
getAffectedObjects(event: ConfigChangeEvent): string[];
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* File watcher for config hot-reload
|
|
282
|
+
*/
|
|
283
|
+
declare class ConfigWatcher implements HotReloadWatcher {
|
|
284
|
+
private pollingInterval;
|
|
285
|
+
private fileHashes;
|
|
286
|
+
private callbacks;
|
|
287
|
+
private intervalMs;
|
|
288
|
+
constructor(intervalMs?: number);
|
|
289
|
+
watch(configPath: string, callback: (event: ConfigChangeEvent) => void): void;
|
|
290
|
+
private checkAllFiles;
|
|
291
|
+
private determineEventType;
|
|
292
|
+
private hashString;
|
|
293
|
+
unwatch(configPath: string): void;
|
|
294
|
+
stop(): void;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Diff utility for comparing configs
|
|
298
|
+
*/
|
|
299
|
+
declare function diffConfigs(oldConfig: any, newConfig: any): string[];
|
|
300
|
+
/**
|
|
301
|
+
* Rehydrate object with new config
|
|
302
|
+
*/
|
|
303
|
+
declare function rehydrateObject(objectId: string, oldConfig: any, newConfig: any, schemas: Map<string, any>): any;
|
|
304
|
+
|
|
305
|
+
interface HotReloadDependencies {
|
|
306
|
+
activeConfig: ObjectCentricConfig;
|
|
307
|
+
setActiveConfig: (config: ObjectCentricConfig) => void;
|
|
308
|
+
gameObjectManager: any;
|
|
309
|
+
CustomAssets: any;
|
|
310
|
+
audioSystem: any;
|
|
311
|
+
setAudioSystem: (audioSystem: any) => void;
|
|
312
|
+
liveEditBridge: any;
|
|
313
|
+
createAudioSystem: (config: ObjectCentricConfig) => any;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Setup hot reload for config files.
|
|
317
|
+
*
|
|
318
|
+
* SDK-owned plumbing so demo projects only provide dependencies.
|
|
319
|
+
*/
|
|
320
|
+
declare function setupHotReload(deps: HotReloadDependencies): void;
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Config Override System
|
|
324
|
+
*
|
|
325
|
+
* Allows preview panel to override config values at runtime.
|
|
326
|
+
* Changes are applied immediately and can be:
|
|
327
|
+
* - persisted across restarts (in-memory, via window)
|
|
328
|
+
* - exported (diff/patch/json) via ConfigExport
|
|
329
|
+
*
|
|
330
|
+
* NOTE:
|
|
331
|
+
* In a pure-browser environment we cannot write back to disk.
|
|
332
|
+
* "Apply (real changes)" should be implemented via an optional dev-server endpoint
|
|
333
|
+
* (e.g. Vite plugin) that receives exported patches and writes config files.
|
|
334
|
+
*/
|
|
335
|
+
interface ConfigOverride {
|
|
336
|
+
objectId?: string;
|
|
337
|
+
path: string;
|
|
338
|
+
value: any;
|
|
339
|
+
}
|
|
340
|
+
interface ConfigChange {
|
|
341
|
+
objectId?: string;
|
|
342
|
+
path: string;
|
|
343
|
+
oldValue: any;
|
|
344
|
+
newValue: any;
|
|
345
|
+
ts: number;
|
|
346
|
+
}
|
|
347
|
+
interface ConfigOverrideOptions {
|
|
348
|
+
silent?: boolean;
|
|
349
|
+
persist?: boolean;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Apply a config override
|
|
353
|
+
*/
|
|
354
|
+
declare function applyConfigOverride(override: ConfigOverride, options?: ConfigOverrideOptions): void;
|
|
355
|
+
/**
|
|
356
|
+
* Apply multiple config overrides
|
|
357
|
+
*/
|
|
358
|
+
declare function applyConfigOverrides(overrides: ConfigOverride[], options?: ConfigOverrideOptions): void;
|
|
359
|
+
/**
|
|
360
|
+
* Clear all config overrides
|
|
361
|
+
*/
|
|
362
|
+
declare function clearConfigOverrides(): void;
|
|
363
|
+
/**
|
|
364
|
+
* Get all active overrides
|
|
365
|
+
*/
|
|
366
|
+
declare function getConfigOverrides(): ConfigOverride[];
|
|
367
|
+
/**
|
|
368
|
+
* SDK-facing manager used by ConfigExport.
|
|
369
|
+
* Kept minimal to avoid forcing consumers into a specific persistence strategy.
|
|
370
|
+
*/
|
|
371
|
+
declare const configOverrideManager: {
|
|
372
|
+
getCurrentConfig(): any | null;
|
|
373
|
+
getChanges(): ConfigChange[];
|
|
374
|
+
clearChanges(): void;
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* Base Layer - Lottie Instance
|
|
379
|
+
*
|
|
380
|
+
* Provides isolated lottie-web instance for base layer.
|
|
381
|
+
* Prevents conflicts with student layer's lottie instance.
|
|
382
|
+
*
|
|
383
|
+
* DO NOT EDIT - Base Layer
|
|
384
|
+
*/
|
|
385
|
+
declare const baseLottie: any;
|
|
386
|
+
|
|
1
387
|
declare global {
|
|
2
388
|
const mraid: any;
|
|
3
389
|
const dapi: any;
|
|
@@ -26,7 +412,7 @@ type InitOptions = {
|
|
|
26
412
|
declare const Handler: {
|
|
27
413
|
init(options?: InitOptions, callback?: (w: number, h: number) => void): void;
|
|
28
414
|
getRoot(): HTMLElement;
|
|
29
|
-
readonly version:
|
|
415
|
+
readonly version: string;
|
|
30
416
|
readonly maxWidth: number;
|
|
31
417
|
readonly maxHeight: number;
|
|
32
418
|
readonly isLandscape: boolean;
|
|
@@ -48,4 +434,4 @@ declare const Handler: {
|
|
|
48
434
|
resize(width?: number, height?: number): void;
|
|
49
435
|
};
|
|
50
436
|
|
|
51
|
-
export { Handler, Handler as default };
|
|
437
|
+
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, baseLottie, bootstrap, clearConfigOverrides, configOverrideManager, createPreviewShell, Handler as default, defaultPreset, deviceGroups, devicePresets, diffConfigs, getConfigOverrides, getPresetById, getPresetsByCategory, rehydrateObject, setBootstrapDependencies, setupHotReload, setupLiveEditBridge };
|