@puzzmo/sdk 1.0.30 → 1.0.31

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.
@@ -327,7 +327,7 @@ const e=require(`./objectSpread2-CuluYLUL.cjs`),t=require(`./asyncToGenerator-DA
327
327
  ${t()}
328
328
  </div>
329
329
  </div>
330
- `},bind(e){X(e)},onMessage(n,r,i){var a;if(n!==`KEYBOARD_UPDATE_CONFIG`)return;e=!(!(r==null||(a=r.layout)==null)&&a.length)||r.layout.every(e=>!e)?null:r;let o=i.getElement(`#sim-kb-content`);o&&(o.innerHTML=t(),X(i)),i.updateBadge(`kbd`,void 0)}}}function X(e){var t;let n=(t=e.getElement(`#sim-kb-content`))==null?void 0:t.querySelectorAll(`.sim-kb-key`);n==null||n.forEach(t=>{t.addEventListener(`click`,()=>{let n=t.getAttribute(`data-key`);n&&e.sendToGame(`KEYBOARD_KEY_PRESS`,{key:n})})})}function Ue(){let t=e=>{let t=e.state.settingsComponents;return!t||t.length===0?`<div class="sim-settings-empty">No settings registered by the game yet.<br>The game calls <code>sdk.settings.initialize(components)</code> to describe its settings UI.</div>`:`<div class="sim-settings-form">${t.map(t=>We(t,e.state.gameSettings)).join(``)}</div><div class="sim-settings-actions"><button class="simulator-btn tiny" id="sim-settings-reset">Reset to defaults</button></div>`},n=e=>{let n=e.getElement(`#sim-settings-content`);n&&(n.innerHTML=t(e),i(e))},r=e=>{d(e.state.gameSettings),e.sendToGame(`SETTINGS_UPDATE`,e.state.gameSettings)},i=t=>{var i;let a=t.getElement(`#sim-settings-content`);a&&(a.querySelectorAll(`[data-setting]`).forEach(n=>{let i=n.getAttribute(`data-setting`),a=n.getAttribute(`data-setting-type`);n.addEventListener(`change`,()=>{let o;o=n instanceof HTMLInputElement&&n.type===`checkbox`?n.checked:a===`number`?Number(n.value):n.value,t.state.gameSettings=e.t(e.t({},t.state.gameSettings),{},{[i]:o}),r(t)})}),(i=a.querySelector(`#sim-settings-reset`))==null||i.addEventListener(`click`,()=>{var e;f(),t.state.gameSettings=Ge((e=t.state.settingsComponents)==null?[]:e),r(t),n(t)}))};return{id:`settings`,label:`Set`,render(){return`
330
+ `},bind(e){X(e)},onMessage(n,r,i){var a;if(n!==`KEYBOARD_UPDATE_CONFIG`)return;e=!(!(r==null||(a=r.layout)==null)&&a.length)||r.layout.every(e=>!e)?null:r;let o=i.getElement(`#sim-kb-content`);o&&(o.innerHTML=t(),X(i)),i.updateBadge(`kbd`,void 0)}}}function X(e){var t;let n=(t=e.getElement(`#sim-kb-content`))==null?void 0:t.querySelectorAll(`.sim-kb-key`);n==null||n.forEach(t=>{t.addEventListener(`click`,()=>{let n=t.getAttribute(`data-key`);n&&e.sendToGame(`KEYBOARD_KEY_PRESS`,{key:n})})})}function Ue(){let t=e=>{let t=e.state.settingsComponents;return!t||t.length===0?`<div class="sim-settings-empty">No settings registered by the game yet.<br>The game calls <code>sdk.settings.initialize(components)</code> to describe its settings UI.</div>`:`<div class="sim-settings-form">${t.map(t=>We(t,e.state.gameSettings)).join(``)}</div><div class="sim-settings-actions"><button class="simulator-btn tiny" id="sim-settings-reset">Reset to defaults</button></div>`},n=e=>{let n=e.getElement(`#sim-settings-content`);n&&(n.innerHTML=t(e),i(e))},r=e=>{d(e.state.gameSettings),e.sendToGame(`SETTINGS_UPDATE`,e.state.gameSettings)},i=t=>{var i;let a=t.getElement(`#sim-settings-content`);a&&(a.querySelectorAll(`[data-setting]`).forEach(n=>{let i=n.getAttribute(`data-setting`),o=n.getAttribute(`data-setting-type`);n.addEventListener(`change`,()=>{let s;if(o===`multiselect`){let e=a.querySelectorAll(`input[data-multiselect="${i}"]`);s=Array.from(e).filter(e=>e.checked).map(e=>e.value)}else s=n instanceof HTMLInputElement&&n.type===`checkbox`?n.checked:o===`number`?Number(n.value):n.value;t.state.gameSettings=e.t(e.t({},t.state.gameSettings),{},{[i]:s}),r(t)})}),(i=a.querySelector(`#sim-settings-reset`))==null||i.addEventListener(`click`,()=>{var e;f(),t.state.gameSettings=Ge((e=t.state.settingsComponents)==null?[]:e),r(t),n(t)}))};return{id:`settings`,label:`Set`,render(){return`
331
331
  <div class="settings-view-container">
332
332
  <div id="sim-settings-content"></div>
333
333
  </div>
@@ -342,11 +342,19 @@ const e=require(`./objectSpread2-CuluYLUL.cjs`),t=require(`./asyncToGenerator-DA
342
342
  <div class="simulator-field">
343
343
  ${Z(e)}
344
344
  <select class="simulator-select" data-setting="${e.name}">${i}</select>
345
- </div>`}case`number`:{var i;let n=(i=t[e.name])==null?e.defaultValue:i,r=e.values.map(e=>`<option value="${e}" ${e===n?`selected`:``}>${e}</option>`).join(``);return`
345
+ </div>`}case`multiselect`:{var i;let n=(i=t[e.name])==null?e.defaultValue:i,r=Array.isArray(n)?n:[],a=e.values.map((t,n)=>{var i;return`
346
+ <label class="sim-settings-row">
347
+ <input type="checkbox" data-setting="${e.name}" data-setting-type="multiselect" data-multiselect="${e.name}" value="${Q(t)}" ${r.includes(t)?`checked`:``} />
348
+ <span class="simulator-label">${Q((i=e.displays[n])==null?t:i)}</span>
349
+ </label>`}).join(``);return`
350
+ <div class="simulator-field">
351
+ ${Z(e)}
352
+ ${a}
353
+ </div>`}case`number`:{var a;let n=(a=t[e.name])==null?e.defaultValue:a,r=e.values.map(e=>`<option value="${e}" ${e===n?`selected`:``}>${e}</option>`).join(``);return`
346
354
  <div class="simulator-field">
347
355
  ${Z(e)}
348
356
  <select class="simulator-select" data-setting="${e.name}" data-setting-type="number">${r}</select>
349
- </div>`}case`text`:{var a,o;let n=String((a=(o=t[e.name])==null?e.defaultValue:o)==null?``:a),r=e.textarea?`<textarea class="simulator-textarea" data-setting="${e.name}">${Q(n)}</textarea>`:`<input class="simulator-input" type="text" data-setting="${e.name}" value="${Q(n)}" />`;return`
357
+ </div>`}case`text`:{var o,s;let n=String((o=(s=t[e.name])==null?e.defaultValue:s)==null?``:o),r=e.textarea?`<textarea class="simulator-textarea" data-setting="${e.name}">${Q(n)}</textarea>`:`<input class="simulator-input" type="text" data-setting="${e.name}" value="${Q(n)}" />`;return`
350
358
  <div class="simulator-field">
351
359
  ${Z(e)}
352
360
  ${r}
@@ -1616,4 +1624,4 @@ const e=require(`./objectSpread2-CuluYLUL.cjs`),t=require(`./asyncToGenerator-DA
1616
1624
  </div>
1617
1625
  </div>
1618
1626
  `,document.body.appendChild(g);let _=g.querySelector(`#simulator-panel`),ee=g.querySelector(`#simulator-header`),v=g.querySelector(`#simulator-header-indicator`),y=g.querySelector(`#simulator-header-status-text`),b=g.querySelector(`#simulator-header-pause`),x=g.querySelector(`#simulator-header-retry`),S=g.querySelector(`#simulator-header-settings`),C=g.querySelector(`#simulator-toggle`),w=g.querySelector(`#simulator-timer`),T=g.querySelector(`#simulator-tabs`),E=g.querySelector(`#simulator-content`),D=e=>g.querySelector(e),O=e=>{b.innerHTML=e?h.play:h.pause,b.title=e?`Resume`:`Pause`},k=(e,t)=>{let n=D(`#simulator-status .text`),r=D(`#simulator-status .indicator`),i=t===`complete`?`✓`:``;n&&(n.textContent=e),r&&(r.className=`indicator ${t}`,r.textContent=i),v.className=t,v.textContent=i,y.textContent=e},A=(e,t)=>{t&&t!==`0`?w.innerHTML=`${e}<span class="penalty">+${t}</span>`:w.textContent=e},j=e=>{var t;f.activeTab=e,E.classList.remove(`hidden`),m(e),T.querySelectorAll(`.simulator-tab`).forEach(t=>{t.classList.toggle(`active`,t.getAttribute(`data-tab`)===e)}),g.querySelectorAll(`.simulator-tab-content`).forEach(t=>{t.classList.toggle(`active`,t.id===`simulator-tab-${e}`)}),S.classList.toggle(`active`,e===`auth`);let n=l.find(t=>t.id===e);n==null||(t=n.onActivate)==null||t.call(n,R)},M=e=>{f.isCollapsed=e,_.classList.toggle(`collapsed`,e),p(e),e?(E.classList.add(`hidden`),T.querySelectorAll(`.simulator-tab`).forEach(e=>e.classList.remove(`active`))):j(f.activeTab)},N=()=>{c.updatePreview(R)},P=function(){var e=t.t(function*(){var e,t;if(f.puzzleData)return f.puzzleData;if(!a||a.size===0)throw Error(`No fixtures configured. Add puzzle fixture files (.json or .toml) to a fixtures directory and pass fixturesGlob to the simulator.`);let n=(e=f.selectedCategory)==null?o[0]:e,r=n?a.get(n):void 0;if(!r||r.size===0)throw Error(`No puzzles found in fixture category "${n}"`);let i=(t=f.selectedPuzzle)==null?r.keys().next().value:t,s=i?r.get(i):void 0;if(!s)throw Error(`Puzzle "${i}" not found in category "${n}"`);f.puzzleData=s,console.log(`Simulator: Puzzle loaded from fixtures`,{category:n,puzzle:i}),f.originalPuzzle=s;let c=D(`#simulator-puzzle`);return c&&(c.value=f.originalPuzzle),f.activeTab===`thumb`&&N(),f.puzzleData});return function(){return e.apply(this,arguments)}}(),F=te(e=>{s.addLogEntry(e,R)}),I=(e,t)=>{ne(e,t,F)},L=(e,t)=>{let n=g.querySelector(`[data-badge="${e}"]`);n&&(n.textContent=t&&t>0?String(t):``)},R={state:f,getElement:D,sendToGame:I,logMessage:F.log,loadPuzzle:P,updateStatus:k,updateTimer:A,setCollapsed:M,switchTab:j,updateThumbnail:N,updateBadge:L,fixtures:a,fixtureCategories:o,gameSlug:(r=e.slug)==null?null:r};console.log(`[Simulator] Context created with gameSlug:`,R.gameSlug),l.forEach(e=>e.bind(R)),T.querySelectorAll(`.simulator-tab`).forEach(e=>{e.addEventListener(`click`,()=>{let t=e.getAttribute(`data-tab`);j(t),L(t,0)})}),C.addEventListener(`click`,e=>{e.stopPropagation(),M(!0)}),b.addEventListener(`click`,e=>{e.stopPropagation(),f.isPaused?(I(`RESUME_GAME`,{}),f.isPaused=!1,O(!1),k(`Running`,`ready`)):(I(`PAUSE_GAME`,{}),f.isPaused=!0,O(!0),k(`Paused`,`paused`));let t=D(`#simulator-pause`);t&&(t.textContent=f.isPaused?`Resume`:`Pause`)}),x.addEventListener(`click`,e=>{e.stopPropagation(),I(`RETRY_PUZZLE`,{}),f.hasStarted=!1,f.isPaused=!1,O(!1),b.disabled=!0,k(`Ready to retry`,`ready`);let t=D(`#simulator-pause`),n=D(`#simulator-start`);t&&(t.disabled=!0,t.textContent=`Pause`),n&&(n.textContent=`Start`)}),S.addEventListener(`click`,e=>{e.stopPropagation(),f.isCollapsed&&M(!1),j(`auth`)}),ee.addEventListener(`click`,e=>{f.isCollapsed&&e.target!==C&&M(!1)}),f.isCollapsed||j(f.activeTab);let z=new URLSearchParams(window.location.search);(z.has(`code`)||z.has(`error`))&&(M(!1),j(`auth`));let fe=e=>({userState:{gameSettings:f.gameSettings,id:`simulator-user`,ownerID:`simulator-owner`},currentUser:{id:`simulator-user`,name:`Simulator`,username:`simulator`,usernameID:`0000`,type:`User`,roles:``,nakamaID:null},startOrFindGameplay:{gamePlayed:{additionalTimeAddedSecs:0,boardState:f.currentInputStr,combinedTimeSecs:0,completed:!1,createdAt:new Date().toISOString(),elapsedTimeSecs:0,id:`simulator-gameplay-${Date.now()}`,ownerID:`simulator-owner`,pointsAwarded:0,slug:`simulator-game`,viewerOwnsPuzzle:!0,puzzle:{id:`simulator-puzzle`,name:`Proto Jig Puzzle`,puzzle:e,game:{displayName:`Proto Game`,jsPath:``,slug:`proto-game`},mostRecentDaily:null}}},theme:f.selectedTheme,hostContext:[{type:`app`,layout:`desktop`,host:null}],appRuntimeContract:`1.0`}),B=function(){var e=t.t(function*(){k(`Loading puzzle...`,`waiting`);try{let e=fe(yield P());k(`Sending READY_DATA...`,`waiting`),I(`READY_DATA`,e),k(`Waiting for game to load...`,`waiting`)}catch(e){k(`Error: ${e}`,`paused`)}});return function(){return e.apply(this,arguments)}}(),pe=()=>{console.log(`Simulator: Game loaded, ready to start`),x.disabled=!1,l.forEach(e=>{var t;return(t=e.onMessage)==null?void 0:t.call(e,`READY_GAME_LOADED`,void 0,R)}),i&&!f.hasStarted&&setTimeout(()=>{let e=D(`#simulator-start`);e==null||e.click(),b.disabled=!1,f.hasStarted=!0,k(`Running`,`ready`)},100)};return re((e,t)=>{var n,r;if(e===`READY`){console.log(`Simulator: Received READY from game`),B();return}if(e===`READY_GAME_LOADED`){pe();return}if(e===`TIMER_TICK`){if(t!=null&&t.display){let[e,n]=t.display;A(e,n)}return}if(e===`TIMER_SYNC`)return;if(e===`SIDEBAR_UPDATE`){console.log(`Simulator: Sidebar update`,t);return}l.forEach(n=>{var r;return(r=n.onMessage)==null?void 0:r.call(n,e,t,R)});let i=(n=t==null||(r=t.input)==null?void 0:r.boardState)==null?t==null?void 0:t.boardState:n;e===`UPLOAD_NEW_GAME_STATE`&&i&&(f.currentInputStr=i,f.activeTab===`thumb`&&N(),console.log(`Simulator: Game state uploaded`,t)),e===`GAME_COMPLETED`&&(console.log(`Simulator: Game completed!`,t),b.disabled=!0,f.hasStarted=!1,k(`Completed!`,`complete`))},F),console.log(`Simulator initialized`),$={updateFixtures:e=>{a=ie(e),o=Array.from(a.keys()).sort(),R.fixtures=a,R.fixtureCategories=o;let t=localStorage.getItem(`simulator-fixture-category`);if(!f.selectedCategory||!o.includes(f.selectedCategory)){var n;f.selectedCategory=t&&o.includes(t)?t:(n=o[0])==null?null:n}let r=l.find(e=>e.id===`ctrl`);r==null||r.bind(R),console.log(`Simulator: Fixtures updated`,{categories:o,selectedCategory:f.selectedCategory})},sendToGame:I,loadPuzzle:P},$}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Ke}});
1619
- //# sourceMappingURL=createSimulator-B7x0QRdO.cjs.map
1627
+ //# sourceMappingURL=createSimulator-GzKfEQWQ.cjs.map