castle-web-cli 0.4.121 → 0.4.122
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/editorConfig.d.ts +6 -1
- package/dist/editorConfig.js +20 -1
- package/dist/ide.js +3 -1
- package/dist/shell/assets/{index-UEwjXWKI.js → index-DXBpj3-y.js} +1 -1
- package/dist/shell/index.html +1 -1
- package/dist/vitePlugins.js +21 -8
- package/kits/physics-2d/castle.json +1 -1
- package/kits/physics-2d/editors/SingleEditor.jsx +43 -2
- package/kits/physics-2d/editors/editorRegistry.jsx +34 -0
- package/kits/physics-2d/main.jsx +11 -2
- package/kits/physics-2d/package-lock.json +1 -1
- package/package.json +1 -1
package/dist/editorConfig.d.ts
CHANGED
|
@@ -15,11 +15,16 @@ export interface FileTypeConfig {
|
|
|
15
15
|
new?: string;
|
|
16
16
|
icon?: string;
|
|
17
17
|
editor?: string;
|
|
18
|
-
data?: boolean;
|
|
18
|
+
data?: boolean | DataMode;
|
|
19
19
|
unsupported?: string;
|
|
20
20
|
}
|
|
21
|
+
export type DataMode = 'json' | 'text';
|
|
22
|
+
export declare function dataModeOf(type: {
|
|
23
|
+
data?: boolean | DataMode;
|
|
24
|
+
}): DataMode | null;
|
|
21
25
|
export interface ResolvedFileType extends FileTypeConfig {
|
|
22
26
|
from?: string;
|
|
27
|
+
module?: string;
|
|
23
28
|
}
|
|
24
29
|
export interface EditorConfig {
|
|
25
30
|
initialPanels?: InitialPanel[];
|
package/dist/editorConfig.js
CHANGED
|
@@ -17,6 +17,13 @@ import * as fs from 'fs';
|
|
|
17
17
|
import * as path from 'path';
|
|
18
18
|
import { readCastleJson } from './castleJson.js';
|
|
19
19
|
import { IMPORTS_DIR } from './imports.js';
|
|
20
|
+
export function dataModeOf(type) {
|
|
21
|
+
if (type.data === true)
|
|
22
|
+
return 'json';
|
|
23
|
+
if (type.data === 'json' || type.data === 'text')
|
|
24
|
+
return type.data;
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
20
27
|
// An array with no usable entries stays an (empty) array rather than becoming
|
|
21
28
|
// undefined: "I declare no file types" is a real answer, distinct from "I say
|
|
22
29
|
// nothing about file types", and only the second one defers to the imports.
|
|
@@ -121,5 +128,17 @@ export function resolveFileTypes(deckDir) {
|
|
|
121
128
|
if (imported)
|
|
122
129
|
add(imported, alias);
|
|
123
130
|
}
|
|
124
|
-
|
|
131
|
+
if (!anyDeclared)
|
|
132
|
+
return null;
|
|
133
|
+
// Rewrite each declared editor path so it is addressable from the DECK root.
|
|
134
|
+
// This is the whole routing decision: the deck's entry imports the named
|
|
135
|
+
// module, whoever declared it, instead of anything guessing which page owns
|
|
136
|
+
// the type.
|
|
137
|
+
for (const type of byExt.values()) {
|
|
138
|
+
if (!type.editor || type.editor === 'kit')
|
|
139
|
+
continue;
|
|
140
|
+
const declared = type.editor.replace(/^\.\//, '');
|
|
141
|
+
type.module = type.from ? `${IMPORTS_DIR}/${type.from}/${declared}` : declared;
|
|
142
|
+
}
|
|
143
|
+
return [...byExt.values()];
|
|
125
144
|
}
|
package/dist/ide.js
CHANGED
|
@@ -250,7 +250,9 @@ function listDeckFiles(deckDir) {
|
|
|
250
250
|
// editors, and the builtin code editor renders everything.
|
|
251
251
|
function kitEditorExtensions(config, fileTypes) {
|
|
252
252
|
if (fileTypes) {
|
|
253
|
-
|
|
253
|
+
// ANY declared editor means "not the builtin code editor" -- the legacy
|
|
254
|
+
// "kit" (this deck's own dispatcher) and a named module both count.
|
|
255
|
+
return fileTypes.filter((t) => Boolean(t.editor)).map((t) => t.ext);
|
|
254
256
|
}
|
|
255
257
|
// A deck saved before file types existed named its kit extensions directly.
|
|
256
258
|
return config.extensions ?? [];
|
|
@@ -431,4 +431,4 @@ ${s.join(`
|
|
|
431
431
|
animation: castle-lb-spin 1.25s linear infinite;
|
|
432
432
|
}
|
|
433
433
|
@keyframes castle-lb-spin { to { transform: rotate(360deg); } }
|
|
434
|
-
`,wV=`<svg viewBox="0 0 24 24" fill="none" stroke="#E3E6FD" stroke-width="2.5" stroke-linecap="round"><path d="M4 4 L20 20 M20 4 L4 20"/></svg>`;function $(e,t,n){let r=e.createElement(t);return r.className=n,r}function TV(e,t){e.classList.toggle(`castle-lb-hidden`,t)}function EV(e,t){TV(e,!t),e.src=t??``}function DV(e){let t=$(e,`div`,`castle-lb-row`),n=$(e,`div`,`castle-lb-place`),r=$(e,`div`,`castle-lb-avatar-box castle-lb-tappable`),i=$(e,`img`,`castle-lb-avatar`),a=$(e,`img`,`castle-lb-avatar-frame`),o=$(e,`div`,`castle-lb-name-box castle-lb-tappable`),s=$(e,`div`,`castle-lb-name-row`),c=$(e,`div`,`castle-lb-username`),l=$(e,`img`,`castle-lb-badge`),u=$(e,`div`,`castle-lb-annotation`),d=$(e,`div`,`castle-lb-score`);return r.append(i,a),s.append(c,l),o.append(s,u),t.append(n,r,o,d),{root:t,place:n,avatarBox:r,avatar:i,frame:a,nameBox:o,username:c,badge:l,annotation:u,score:d}}function OV(e){let t=$(e,`div`,`castle-lb-row`),n=$(e,`img`,`castle-lb-party-single`),r=$(e,`div`,`castle-lb-party-multi`),i=$(e,`img`,`castle-lb-party-multi-a`),a=$(e,`img`,`castle-lb-party-multi-b`),o=$(e,`div`,`castle-lb-name-box`),s=$(e,`div`,`castle-lb-party-name`),c=$(e,`div`,`castle-lb-party-time`);return r.append($(e,`div`,`castle-lb-party-multi-slot castle-lb-party-multi-slot-a`),i,$(e,`div`,`castle-lb-party-multi-slot castle-lb-party-multi-slot-b`),a),o.append(s),t.append(n,r,o,c),{root:t,single:n,multi:r,multiA:i,multiB:a,name:s,time:c}}function kV(e){let t=$(e,`div`,`castle-lb-tabs`),n=$(e,`div`,`castle-lb-tab castle-lb-at-foryou`);n.textContent=`FOR YOU`;let r=$(e,`div`,`castle-lb-tab castle-lb-at-global`);r.textContent=`GLOBAL`;let i=$(e,`div`,`castle-lb-indicator castle-lb-at-foryou`),a=$(e,`div`,`castle-lb-indicator castle-lb-at-global`),o=$(e,`div`,`castle-lb-close`);return o.innerHTML=wV,t.append(n,r,$(e,`div`,`castle-lb-rule`),i,a,o),{root:t,forYou:n,global:r,forYouIndicator:i,globalIndicator:a,close:o}}function AV(e){let t=$(e,`div`,`castle-lb-root`),n=$(e,`div`,`castle-lb-panel`),r=kV(e),i=$(e,`div`,`castle-lb-header`),a=$(e,`div`,`castle-lb-header-name`),o=$(e,`div`,`castle-lb-header-label`);i.append(a,o);let s=$(e,`div`,`castle-lb-rows`),c=[];for(let t=0;t<mV;t+=1){let t=DV(e);c.push(t),s.append(t.root)}let l=$(e,`div`,`castle-lb-row castle-lb-parties-header`);l.textContent=`PARTIES TO PLAY WITH`,s.append(l);let u=[];for(let t=0;t<hV;t+=1){let t=OV(e);u.push(t),s.append(t.root)}let d=$(e,`div`,`castle-lb-spinner`),f=$(e,`div`,`castle-lb-share`);return n.append(r.root,i,s,d),t.append(n,f),{root:t,panel:n,tabs:r,nameHeader:a,labelHeader:o,rows:c,partiesHeader:l,parties:u,spinner:d,share:f}}var jV=60,MV=jV*60,NV=MV*24,PV=NV*7,FV=NV*365/12,IV=NV*365;function LV(e){if(e===0)return`0`;let t=e>0?e:1,[n,r]=t<jV?[Math.round(t),`s`]:t<MV?[Math.round(t/jV),`m`]:t<NV?[Math.round(t/MV),`h`]:t<PV?[Math.round(t/NV),`d`]:t<FV?[Math.round(t/PV),`w`]:t<IV?[Math.round(t/FV),`mo`]:[Math.round(t/IV),`yr`];return`${n}${r.length>1&&n!==1?`${r}s`:r}`}function RV(e){let t=new Date(e).getTime();return Number.isFinite(t)?LV((Date.now()-t)/1e3):null}function zV(e,t){let n=t>0?mV-1-t:mV;if(e.length<=n)return e;let r=e.slice();for(;r.length>n;){let e=-1;for(let t=r.length-1;t>=0;--t)if(!r[t]?.isRequiredUser){e=t;break}if(e===-1)break;r.splice(e,1)}return r.slice(0,n)}function BV(e){return e.isDeckCreator?`Creator`:e.isLinkSharer?`Challenger`:e.user.isAnonymous?`Tap to save your score`:e.isRequiredUser?`You`:null}function VV(e,t,n){TV(e.root,!1),TV(e.place,!n),e.place.textContent=t.place===null?``:`#${t.place}`,e.score.textContent=t.score,e.username.textContent=t.user.isAnonymous?`You are not signed in`:t.user.username??``,e.username.style.color=t.user.isAnonymous?vV:t.user.color??(t.isRequiredUser?`#FFFFFF`:gV),e.avatar.src=t.user.avatarUrl??pV,EV(e.badge,t.user.badgeUrl),EV(e.frame,t.user.frameUrl);let r=BV(t);e.annotation.textContent=r??``,TV(e.annotation,!r),e.nameBox.classList.toggle(`castle-lb-annotated`,!!r)}function HV(e,t){TV(e.root,!1),e.name.textContent=t.name;let n=t.avatarUrls[0]??null,r=t.avatarUrls[1]??null,i=!!(n&&r);EV(e.single,i?null:n),TV(e.multi,!i),e.multiA.src=n??``,e.multiB.src=r??``;let a=t.lastMessageTime?RV(t.lastMessageTime):null;e.time.textContent=a??``,TV(e.time,!a),e.time.style.width=a?`calc(${30+a.length*20} * var(--castle-lb-u))`:``}function UV(e){TV(e.panel,!0),TV(e.share,!0),TV(e.spinner,!0),TV(e.partiesHeader,!0),e.nameHeader.textContent=``,e.labelHeader.textContent=``,e.rows.forEach(e=>TV(e.root,!0)),e.parties.forEach(e=>TV(e.root,!0))}function WV(e,t,n){let r=()=>{n(t.user.isAnonymous?{type:`savePrompt`,userId:t.user.userId}:{type:`openProfile`,userId:t.user.userId,username:t.user.username})};e.avatarBox.onclick=r,e.nameBox.onclick=r}function GV(e,t,n,r){let i=n===`forYou`,a=t.loading===!0;TV(e.panel,!1),e.tabs.forYou.classList.toggle(`castle-lb-tab-active`,i),e.tabs.global.classList.toggle(`castle-lb-tab-active`,!i),TV(e.tabs.forYouIndicator,!i),TV(e.tabs.globalIndicator,i),e.nameHeader.textContent=i?`RELEVANT PLAYERS`:`NAME`,e.labelHeader.textContent=t.label.toUpperCase(),TV(e.nameHeader,a),TV(e.labelHeader,a),TV(e.spinner,!a),TV(e.share,!1),e.share.textContent=t.isAnonymous?`Share Deck`:`Share Leaderboard`,e.share.classList.toggle(`castle-lb-share-narrow`,t.isAnonymous);let o=i&&t.showParties&&!a?t.parties.slice(0,hV):[],s=a?[]:zV(i?t.followList:t.list,o.length);e.rows.forEach((e,t)=>{let n=s[t];if(!n){TV(e.root,!0);return}VV(e,n,!i),WV(e,n,r)}),TV(e.partiesHeader,o.length===0),e.parties.forEach((e,t)=>{let n=o[t];n?HV(e,n):TV(e.root,!0)})}function KV(e){if(e.getElementById(yV))return;let t=e.createElement(`style`);t.id=yV,t.textContent=qV()+CV,(e.head??e.documentElement).append(t)}function qV(){return`@font-face{font-family:'Castle Overlay';font-weight:500;font-display:block;src:url(data:font/woff2;base64,${YV}) format('woff2')}`}function JV(e,t){let n=e.ownerDocument;KV(n),n.defaultView?.getComputedStyle(e).position===`static`&&(e.style.position=`relative`);let r=AV(n);e.append(r.root);let i=null,a=`forYou`,o=e=>{try{t(e)}catch{}},s=()=>{i&&GV(r,i,a,o)},c=e=>{!i||i.loading||a===e||(a=e,o({type:`switchTab`,tab:e}),s())},l=()=>{let t=e.clientWidth;t>0&&r.root.style.setProperty(`--castle-lb-u`,`${t/800}px`)};r.root.addEventListener(`click`,e=>{e.target===r.root&&o({type:`close`})}),r.tabs.close.addEventListener(`click`,()=>o({type:`close`})),r.tabs.forYou.addEventListener(`click`,()=>c(`forYou`)),r.tabs.global.addEventListener(`click`,()=>c(`global`)),r.share.addEventListener(`click`,()=>o({type:`share`})),l();let u=typeof ResizeObserver>`u`?null:new ResizeObserver(l);u?.observe(e);let d=()=>{i=null,a=`forYou`,UV(r)};return d(),{render(e){i=e,a=`forYou`,l(),s()},clear:d,destroy(){u?.disconnect(),r.root.remove()}}}var YV=`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`;function XV(e){let t=e;return!!(t&&Array.isArray(t.list)&&Array.isArray(t.followList))}function ZV(e){window.open(e,`_blank`)?.focus()}function QV(e){if(!e.deckId)return null;let t=new URLSearchParams({lv:e.variable,lt:e.type,label:e.label});return e.scope&&t.set(`ls`,e.scope),`https://castle.xyz/d/${e.deckId}?${t.toString()}`}function $V(){let e=g.useRef(null),t=g.useRef(null),n=g.useRef(null),[r,i]=g.useState(!1);return g.useEffect(()=>{let r=e.current;if(!r)return;let a=JV(r,e=>{if(e.type===`close`)i(!1),a.clear();else if(e.type===`share`&&n.current){let e=QV(n.current);e&&ZV(e)}else e.type===`openProfile`&&e.username&&ZV(`https://castle.xyz/@${e.username}`)});t.current=a;let o=Gs(`castle_leaderboard_show`,e=>{XV(e.payload)&&(n.current=e.payload,a.render(e.payload),i(!0))});return()=>{o(),a.destroy(),t.current=null}},[]),(0,I.jsx)(`div`,{ref:e,style:{position:`absolute`,inset:0,visibility:r?`visible`:`hidden`,pointerEvents:r?`auto`:`none`}})}function eH(e){return(0,I.jsx)(`div`,{className:`deck-panel`,children:(0,I.jsx)(`iframe`,{className:`deck-frame`,src:e.src,title:e.title,allow:`autoplay; clipboard-read; clipboard-write; fullscreen; gamepad`})})}async function tH(){let e=Array.from(document.querySelectorAll(`iframe.deck-frame`));if(e.length===0)return null;let t=e.find(e=>(e.getAttribute(`src`)||``).includes(`edit=0`))??e[0],n=await Ef(t);if(n)return n;for(let n of e){if(n===t)continue;let e=Tf(n);if(e)return e}return null}function nH(e){return Jo(e)?.label??`Visual`}var rH=e=>{let t=e.lastIndexOf(`/`);return t<0?``:e.slice(0,t)},iH=e=>e.split(`/`).pop()||e,aH=(0,I.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:15,height:15,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,I.jsx)(`rect`,{x:`3`,y:`4`,width:`18`,height:`16`,rx:`2`}),(0,I.jsx)(`path`,{d:`M9 4v16`})]});function oH(e){let t=Xc(),[n,r]=g.useState(null);g.useEffect(()=>{let e=!0;return ns().then(t=>e&&r(t),()=>e&&r([])),()=>{e=!1}},[]);let i=g.useMemo(()=>{let e=new Map;for(let t of n??[]){let n=rH(t),r=e.get(n);r?r.push(t):e.set(n,[t])}return[...e.entries()].sort((e,t)=>e[0].localeCompare(t[0]))},[n]);return(0,I.jsx)(`aside`,{className:`editor-drawer`,children:n===null?(0,I.jsx)(`div`,{className:`editor-drawer-empty`,children:`loading…`}):n.length===0?(0,I.jsx)(`div`,{className:`editor-drawer-empty`,children:`no files`}):i.map(([n,r])=>(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`div`,{className:`editor-drawer-folder`,children:n||`/`}),r.sort().map(n=>(0,I.jsx)(`button`,{type:`button`,className:`editor-drawer-item${n===e.currentFile?` current`:``}`,title:n,onClick:()=>t.openFile(n),children:iH(n)},n))]},n||`(root)`))})}function sH(e){let t=Xc(),n=e.file??``,r=t.kitEditorExts,i=g.useRef(null),{lifecycle:a}=e,[o,s]=g.useState(`visual`);g.useEffect(()=>s(`visual`),[n]);let[c,l]=g.useState(!1);g.useEffect(()=>{let e=()=>{let e=i.current;(e?.querySelector(`.cm-content`)??e?.querySelector(`iframe`))?.focus()};pu(a.id,e);let t=a.onDidActiveChange(t=>{t&&requestAnimationFrame(e)});return()=>{mu(a.id),t()}},[a]);let u=r!==null&&r.includes(hs(n)),d;return d=r===null?(0,I.jsx)(`div`,{className:`code-editor-overlay`,children:`loading…`}):u&&o===`visual`?(0,I.jsx)(eH,{src:`/index.html?file=${encodeURIComponent(n)}`,title:n}):(0,I.jsx)(jM,{file:n}),(0,I.jsxs)(`div`,{ref:i,className:`editor-panel-root`,children:[(0,I.jsxs)(`div`,{className:`editor-contextbar`,children:[(0,I.jsx)(`button`,{type:`button`,className:`editor-drawer-toggle${c?` on`:``}`,"aria-label":`Toggle files`,"aria-pressed":c,title:`Toggle files`,onClick:()=>l(e=>!e),children:aH}),u&&(0,I.jsxs)(`select`,{className:`editor-view-picker`,value:o,onChange:e=>s(e.target.value===`code`?`code`:`visual`),"aria-label":`Editor view`,title:`Switch editor view`,children:[(0,I.jsx)(`option`,{value:`visual`,children:nH(n)}),(0,I.jsx)(`option`,{value:`code`,children:`Code`})]}),(0,I.jsx)(`span`,{className:`editor-contextbar-path`,title:n,children:n})]}),(0,I.jsxs)(`div`,{className:`editor-shell`,children:[c&&(0,I.jsx)(oH,{currentFile:n}),(0,I.jsx)(`div`,{className:`editor-panel-body`,children:d})]})]})}var cH=500,[lH,uH,,,dH]=L.icon,fH=(0,I.jsx)(`svg`,{viewBox:`0 0 ${lH} ${uH}`,"aria-hidden":`true`,style:{width:13,height:13,display:`inline-block`,fill:`currentColor`},children:(0,I.jsx)(`path`,{d:Array.isArray(dH)?dH.join(` `):dH})});function pH(e){let[t,n]=g.useState(!1),r=g.useRef(null);return g.useEffect(()=>{t&&r.current&&(r.current.scrollTop=r.current.scrollHeight)},[e.logs,t]),(0,I.jsxs)(`div`,{className:`play-logs ${t?`open`:``}`,children:[(0,I.jsxs)(`div`,{className:`play-logs-header`,children:[(0,I.jsxs)(`button`,{type:`button`,className:`play-logs-toggle`,onClick:()=>n(e=>!e),"aria-label":t?`collapse logs`:`expand logs`,children:[(0,I.jsx)(`span`,{className:`play-logs-caret`,children:t?`▾`:`▸`}),(0,I.jsx)(`span`,{children:`logs`}),e.logs.length>0&&(0,I.jsx)(`span`,{className:`play-logs-count`,children:e.logs.length})]}),(0,I.jsxs)(`div`,{className:`play-logs-actions`,children:[t&&(0,I.jsx)(`button`,{type:`button`,className:`play-logs-clear`,onClick:e.onClear,children:`clear`}),e.actions,(0,I.jsxs)(`button`,{type:`button`,className:`play-logs-btn`,onClick:e.onReload,"aria-label":`restart deck`,title:`Restart the deck`,children:[(0,I.jsx)(`span`,{className:`play-restart-icon${e.reloadSpinning?` spinning`:``}`,children:fH}),(0,I.jsx)(`span`,{children:`Restart`})]})]})]}),t&&(0,I.jsx)(`div`,{className:`play-logs-body`,ref:r,children:e.logs.length===0?(0,I.jsx)(`div`,{className:`play-logs-empty`,children:`no output`}):e.logs.map(e=>(0,I.jsx)(`div`,{className:`play-logs-line play-logs-${e.level}`,children:e.text},e.id))})]})}var mH=e=>e.replace(/^scenes\//,``).replace(/\.scene$/,``),hH={flex:`0 0 auto`,display:`flex`,alignItems:`center`,gap:8,padding:`6px 8px`,borderBottom:`1px solid #2a2a3a`},gH={fontSize:12,opacity:.7},_H=2500,vH=3e4;function yH(e){let[t,n]=g.useState(`idle`),[r,i]=g.useState(null),a=g.useRef(0),o=g.useRef(null),s=g.useCallback(()=>{n(`working`),i(null),Ef(e.current).then(async e=>{if(!e){n(`error`),i(`Nothing to capture yet — start the deck first.`);return}let t=await Df(e);t.ok?(n(`saved`),window.setTimeout(()=>n(`idle`),2e3)):(n(`error`),i(t.error??`Could not save the cover.`))})},[e]),c=g.useCallback(()=>{o.current&&clearTimeout(o.current);let t=Date.now()-a.current,n=Math.max(_H,vH-t);o.current=setTimeout(()=>{o.current=null,Ef(e.current).then(e=>{e&&(a.current=Date.now(),Of(e))})},n)},[e]);return g.useEffect(()=>{let t=e.current;if(t)return t.addEventListener(`load`,c),()=>{t.removeEventListener(`load`,c),o.current&&clearTimeout(o.current)}},[e,c]),{status:t,error:r,capture:s}}var bH={width:13,height:13,display:`block`,fill:`currentColor`},xH={display:`inline-flex`,alignItems:`center`},SH=(0,I.jsx)(`svg`,{viewBox:`0 0 24 24`,"aria-hidden":`true`,style:bH,children:(0,I.jsx)(`path`,{d:`M9 3 7.6 5H4a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-3.6L15 3H9Zm3 5a5 5 0 1 1 0 10 5 5 0 0 1 0-10Zm0 2a3 3 0 1 0 0 6 3 3 0 0 0 0-6Z`})}),CH={background:`#1b1b2b`,color:`#e7e7ef`,border:`1px solid #3a3a52`,borderRadius:6,padding:`3px 6px`,font:`12px system-ui, sans-serif`};function wH(e){let[t,n]=g.useState([]),r=g.useRef(1);return g.useEffect(()=>{let t=t=>{if(!e.current||t.source!==e.current.contentWindow)return;let i=t.data;if(!i||i.type!==`castle-console`)return;let a=i.level===`warn`||i.level===`error`?i.level:`log`;n(e=>{let t=e.concat({id:r.current++,level:a,text:typeof i.text==`string`?i.text:``});return t.length>cH?t.slice(t.length-cH):t})};return window.addEventListener(`message`,t),()=>window.removeEventListener(`message`,t)},[e]),{logs:t,clear:()=>n([])}}function TH(e){let t=e.scene??Yo()??``,[n,r]=g.useState(t),[i,a]=g.useState([]);g.useEffect(()=>{let e=!0;return ns().then(t=>{e&&a(t.filter(e=>e.startsWith(`scenes/`)&&e.endsWith(`.scene`)).sort())},()=>{}),()=>{e=!1}},[]);let o=n?`/index.html?edit=0&logs=1&scene=${encodeURIComponent(n)}`:`/index.html?edit=0&logs=1`,s=g.useRef(null),{logs:c,clear:l}=wH(s),u=g.useCallback(()=>{let e=s.current;if(e)try{e.contentWindow?.location.reload()}catch{let{src:t}=e;e.src=t}},[]),[d,f]=g.useState(!1),p=g.useCallback(()=>{u(),f(!0),window.setTimeout(()=>f(!1),600)},[u]),m=yH(s);return(0,I.jsxs)(`div`,{className:`play-panel`,children:[i.length>1?(0,I.jsxs)(`div`,{style:hH,children:[(0,I.jsx)(`label`,{style:gH,children:`Scene`}),(0,I.jsx)(`select`,{value:n,onChange:e=>r(e.target.value),style:CH,children:i.map(e=>(0,I.jsx)(`option`,{value:e,children:mH(e)},e))})]}):null,(0,I.jsx)(`div`,{className:`play-stage`,children:(0,I.jsxs)(`div`,{className:`play-frame-shell`,children:[(0,I.jsx)(`iframe`,{ref:s,className:`deck-frame`,src:o,title:`play`,allow:`autoplay; clipboard-read; clipboard-write; fullscreen; gamepad`}),(0,I.jsx)($V,{})]})}),(0,I.jsx)(pH,{logs:c,onClear:l,onReload:p,reloadSpinning:d,actions:(0,I.jsx)(EH,{cover:m})})]})}function EH({cover:e}){let{status:t,error:n}=e,r=t===`working`?`Saving…`:t===`saved`?`Cover set`:`Set cover`;return(0,I.jsxs)(I.Fragment,{children:[n?(0,I.jsx)(`span`,{style:DH,role:`status`,title:n,children:n}):null,(0,I.jsxs)(`button`,{type:`button`,className:`play-logs-btn`,onClick:e.capture,disabled:t===`working`,"aria-label":`set deck cover`,title:n??`Save the current frame as the deck’s cover`,children:[(0,I.jsx)(`span`,{style:xH,children:SH}),(0,I.jsx)(`span`,{children:r})]})]})}var DH={fontSize:11,color:`#ff9aa2`,maxWidth:220,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`};function OH(e){let t=Xc(),n=g.useRef(null),r=g.useRef(null),{lifecycle:i}=e;return g.useEffect(()=>{let e=n.current;if(!e)return;let a=fV(e,t.terminalTheme);r.current=a;let o=()=>{i.isVisible()&&(a.activate(),a.fit(),i.isActive()&&a.focus())};o();let s=i.onDidVisibilityChange(o),c=i.onDidActiveChange(o);return()=>{s(),c(),a.dispose(),r.current=null}},[i]),g.useEffect(()=>{r.current?.setTheme(t.terminalTheme)},[t.terminalTheme]),(0,I.jsx)(`div`,{className:`term-panel`,children:(0,I.jsx)(`div`,{className:`term-host`,ref:n})})}function kH(e){return{id:e.id,isVisible:()=>e.isVisible,isActive:()=>e.isActive,onDidActiveChange:t=>{let n=e.onDidActiveChange(e=>t(e.isActive));return()=>n.dispose()},onDidVisibilityChange:t=>{let n=e.onDidVisibilityChange(e=>t(e.isVisible));return()=>n.dispose()}}}function AH(e){return function(t){let n=g.useMemo(()=>kH(t.api),[t.api]);return(0,I.jsx)(e,{file:typeof t.params.file==`string`?t.params.file:void 0,scene:typeof t.params.scene==`string`?t.params.scene:void 0,lifecycle:n})}}var jH=`castle-flow-layout:`,MH=1;function NH(e,t){if(e)try{let n={version:MH,state:t};localStorage.setItem(jH+e,JSON.stringify(n))}catch{}}function PH(e,t){if(!e)return null;try{let n=localStorage.getItem(jH+e);if(!n)return null;let r=JSON.parse(n);if(r.version!==MH||!r.state||!Array.isArray(r.state.groups))return null;let i=IH(r.state,t);return i.groups.length===0?null:ad(i)}catch{return null}}var FH=new Set([`operator`,`files`]);function IH(e,t){let n=new Set,r=e.groups.filter(e=>{let r=e.tabs[0];if(r&&r.kind===`editor`&&r.path!==void 0&&!t.has(r.path))return!1;if(r&&FH.has(r.kind)){if(n.has(r.kind))return!1;n.add(r.kind)}return!0});return{groups:r,activeGroupId:r.some(t=>t.id===e.activeGroupId)?e.activeGroupId:r[0]?.id??null,pinnedGroupId:r.some(t=>t.id===e.pinnedGroupId)?e.pinnedGroupId:null,maximizedGroupId:null}}var LH=g.createContext(null),RH={groups:[],activeGroupId:null,pinnedGroupId:null,maximizedGroupId:null},zH=12;function BH(e){return Array.isArray(e.column)}function VH(e){return Array.isArray(e.tabs)}function HH(e){let t=[],n=e=>{VH(e)?t.push(...e.tabs??[]):t.push(e)};for(let t of e)BH(t)?(t.column??[]).forEach(n):n(t);return t}function UH(e){return e===`files`?`files`:e===`playtest`?`play`:e===`terminal`?`terminal`:e===`editor`?`editor`:null}var WH=[{type:`files`},{type:`playtest`},{type:`editor`,file:`scenes/main.scene`}];function GH(e){let t=e&&e.length>0?HH(e):WH,n=rd(`operator`),r=[id([n],ed(n))],i=null;for(let e of t){let t=UH(e.type);if(!t||t===`editor`&&!e.file)continue;let n=rd(t,e.file),a=id([n],ed(n));r.push(a),!i&&t===`editor`&&(i=a.id)}return{groups:r,activeGroupId:i??r[0]?.id??null,pinnedGroupId:null,maximizedGroupId:null}}function KH(){let[e,t]=g.useState(()=>{try{return window.matchMedia(`(max-width: 768px)`).matches}catch{return!1}});return g.useEffect(()=>{let e=window.matchMedia(`(max-width: 768px)`),n=()=>t(e.matches);return e.addEventListener(`change`,n),()=>e.removeEventListener(`change`,n)},[]),e}function qH(e,t){let n=e,r=t.parentElement;for(;n&&n!==r;){if(n.nodeType===1){let e=getComputedStyle(n).overflowY;if((e===`auto`||e===`scroll`)&&n.scrollHeight>n.clientHeight+1)return!0}if(n===t)break;n=n.parentElement}return!1}function JH(e){g.useEffect(()=>{let t=e.current;if(!t)return;let n=e=>{e.deltaY!==0&&(t.scrollWidth<=t.clientWidth||!e.shiftKey&&qH(e.target,t)||(t.scrollLeft+=e.deltaX-e.deltaY,e.preventDefault()))};return t.addEventListener(`wheel`,n,{passive:!1}),()=>t.removeEventListener(`wheel`,n)},[e])}function YH(e,t,n){g.useLayoutEffect(()=>{let n=e.current,r=n?.querySelector(`.flow-row`);if(!n||!r)return;let i=()=>{let e=r.lastElementChild,i=e?e.offsetLeft+e.offsetWidth:0,a=t&&i>n.clientWidth?n.clientWidth/2:0;r.style.setProperty(`--flow-overscroll`,`${Math.round(a)}px`)};i();let a=new ResizeObserver(i);return a.observe(n),()=>a.disconnect()},[e,t,n])}function XH(e,t){let n=g.useRef(new Map),r=g.useCallback(e=>{let t=n.current.get(e);if(t)return t.obj;let r={visible:!1,active:!1,activeCbs:new Set,visibleCbs:new Set,obj:{id:e,isVisible:()=>r.visible,isActive:()=>r.active,onDidActiveChange:e=>(r.activeCbs.add(e),()=>r.activeCbs.delete(e)),onDidVisibilityChange:e=>(r.visibleCbs.add(e),()=>r.visibleCbs.delete(e))}};return n.current.set(e,r),r.obj},[]);return g.useEffect(()=>{let r=new Set;for(let i of e.groups){let a=t?i.id===e.activeGroupId:!0;for(let t of i.tabs){r.add(t.id);let o=n.current.get(t.id);if(!o)continue;let s=i.activeTabId===t.id,c=a&&s,l=i.id===e.activeGroupId&&s;c!==o.visible&&(o.visible=c,o.visibleCbs.forEach(e=>e(c))),l!==o.active&&(o.active=l,o.activeCbs.forEach(e=>e(l)))}}for(let e of n.current.keys())r.has(e)||n.current.delete(e)}),r}function ZH({agent:e}){let[t,n]=g.useState(RH),[r,i]=g.useState(null),[a,o]=g.useState([]),s=g.useRef(null),c=g.useRef(!1),l=KH(),u=g.useRef(l);u.current=l;let d=g.useRef(RH),f=g.useRef(null);d.current=t;let p=g.useRef(new Map),m=g.useRef(null),h=g.useRef(null),_=g.useRef({page:0,count:0,ids:[]});JH(m),YH(m,!l&&!t.maximizedGroupId,t.groups);let v=XH(t,l);g.useEffect(()=>{let e=!0;Promise.all([Zo(),ns().catch(()=>[])]).then(([t,r])=>{e&&(s.current=t.deckId,Ko(t),i(t.kitEditorExtensions),o(r),n(PH(t.deckId,new Set(r))??GH(t.initialPanels)),c.current=!0)},()=>{e&&(i([]),n(GH(null)),c.current=!0)});let t=Us(t=>{t.changes.some(e=>e.path===`castle.json`||e.path.startsWith(`imports/`))&&Zo().then(t=>{e&&(Ko(t),i(t.kitEditorExtensions))},()=>{})});return()=>{e=!1,t()}},[]),g.useEffect(()=>{if(!c.current)return;let e=window.setTimeout(()=>NH(s.current,t),400);return()=>window.clearTimeout(e)},[t]);let y=g.useMemo(()=>{let e=t.groups.find(e=>e.id===t.activeGroupId),n=e?.tabs.find(t=>t.id===e.activeTabId)??e?.tabs[0];return n&&n.kind===`editor`?n.path??null:null},[t.groups,t.activeGroupId]),b=g.useMemo(()=>({openFile:e=>n(t=>gd(t,`editor`,e)),openPlaytest:()=>n(e=>gd(e,`play`)),closeEditor:e=>n(t=>{let n=cd(t,e);return n?md(t,n.group.id,n.tab.id):t}),activeEditorPath:y,kitEditorExts:r,terminalTheme:`dark`}),[r,y]),x=g.useCallback(e=>{n(t=>t.maximizedGroupId?xd({...t,maximizedGroupId:null},e):fd(t,e)),u.current||requestAnimationFrame(()=>{p.current.get(e)?.scrollIntoView({block:`nearest`,inline:`nearest`})})},[]),S=g.useCallback(e=>{let t=sd(d.current,e)?.tabs[0];t?.kind===`editor`&&t.path&&uu(t.path),n(t=>vd(t,e))},[]),C=g.useCallback(e=>n(t=>bd(t,e)),[]),w=g.useCallback(e=>n(t=>xd(t,e)),[]),ee=g.useCallback((e,t,r)=>{n(n=>Cd(Sd(n,e,t),e,r))},[]);g.useEffect(()=>{if(!l)return;let e=m.current,t=h.current;if(!e||!t)return;let r=0,i=0,a=0,o=1,s=!1,c=!1,u=e=>t.style.setProperty(`--flow-drag`,`${e}px`),d=t=>{t.touches.length===1&&(r=t.touches[0].clientX,i=t.touches[0].clientY,a=t.timeStamp,o=e.clientWidth||1,s=!1,c=!1)},f=e=>{if(e.touches.length!==1)return;let n=e.touches[0].clientX-r,a=e.touches[0].clientY-i;if(!s){if(Math.abs(n)<8&&Math.abs(a)<8)return;s=!0,c=Math.abs(n)>Math.abs(a),c&&t.classList.add(`flow-dragging`)}if(!c)return;e.preventDefault();let{page:o,count:l}=_.current;u(o===0&&n>0||o===l-1&&n<0?n*.3:n)},p=e=>{if(!c){t.classList.remove(`flow-dragging`);return}c=!1,t.classList.remove(`flow-dragging`);let i=e.changedTouches[0],s=i?i.clientX-r:0,l=e.timeStamp-a,{page:d,count:f,ids:p}=_.current,m=Math.abs(s)>50&&l<250,h=Math.abs(s)>o*.25,g=d;s<0&&(m||h)?g=Math.min(f-1,d+1):s>0&&(m||h)&&(g=Math.max(0,d-1));let v=p[g];g!==d&&v?n(e=>fd(e,v)):u(0)};return e.addEventListener(`touchstart`,d,{passive:!0}),e.addEventListener(`touchmove`,f,{passive:!1}),e.addEventListener(`touchend`,p,{passive:!0}),e.addEventListener(`touchcancel`,p,{passive:!0}),()=>{e.removeEventListener(`touchstart`,d),e.removeEventListener(`touchmove`,f),e.removeEventListener(`touchend`,p),e.removeEventListener(`touchcancel`,p)}},[l]);let T=g.useCallback((e,t)=>{t?p.current.set(e,t):p.current.delete(e)},[]),[E,te]=g.useState(null),D=g.useRef(null);g.useLayoutEffect(()=>{let e=D.current;if(!e)return;D.current=null;let t=p.current.get(e.id);if(!t)return;let n=t.getBoundingClientRect(),r=e.first.left-n.left,i=e.first.top-n.top;if(Math.abs(r)<1&&Math.abs(i)<1)return;t.style.transition=`none`,t.style.transform=`translate(${r}px, ${i}px)`,t.getBoundingClientRect(),t.style.transition=`transform 180ms ease`,t.style.transform=`translate(0px, 0px)`;let a=()=>{t.style.transition=``,t.style.transform=``,t.removeEventListener(`transitionend`,a)};t.addEventListener(`transitionend`,a)});let O=g.useCallback((e,r)=>{if(l||e.button!==0||e.target.closest(`.flow-titlebar-btn`)||!p.current.get(r))return;let i=zH/2,a=e.clientX,o=e=>{let n=t.groups.filter(e=>e.id!==r).map(e=>{let t=p.current.get(e.id)?.getBoundingClientRect();return{left:t?.left??1/0,right:t?.right??1/0,center:t?t.left+t.width/2:1/0}}),a=0;for(;a<n.length&&n[a].center<e;)a+=1;let o=a<n.length?n[a].left-i:n.length?n[n.length-1].right+i:e;return{target:a,x:o}},s=!1,c=e.clientX,u=0,d=()=>{let e=m.current;if(e&&e.scrollWidth>e.clientWidth+1){let t=e.getBoundingClientRect(),n=0;c<t.left+64?n=-(1-Math.max(0,c-t.left)/64):c>t.right-64&&(n=1-Math.max(0,t.right-c)/64),n!==0&&(e.scrollLeft+=n*24,te({id:r,x:o(c).x}))}u=requestAnimationFrame(d)},f=e=>{!s&&Math.abs(e.clientX-a)<5||(s||(document.body.classList.add(`flow-reordering`),s=!0,u=requestAnimationFrame(d)),c=e.clientX,te({id:r,x:o(e.clientX).x}))},h=e=>{if(document.removeEventListener(`pointermove`,f),document.removeEventListener(`pointerup`,h),u&&cancelAnimationFrame(u),document.body.classList.remove(`flow-reordering`),s){let t=p.current.get(r)?.getBoundingClientRect();t&&(D.current={id:r,first:t}),n(t=>yd(t,r,o(e.clientX).target))}te(null)};document.addEventListener(`pointermove`,f),document.addEventListener(`pointerup`,h)},[l,t.groups]),[k,ne]=g.useState(null),A=g.useCallback(e=>ne(t=>t&&t.groupId===void 0?null:{anchor:e}),[]),j=g.useCallback((e,t)=>ne(n=>n&&n.groupId===e?null:{anchor:t,groupId:e}),[]),re=g.useCallback(()=>{let e=h.current?.querySelector(`.flow-tabs-add`);ne({anchor:e?.getBoundingClientRect()??new DOMRect(window.innerWidth/2,48)})},[]);g.useEffect(()=>{let e=(e,t)=>(t&&t!==window?[...document.querySelectorAll(`iframe.deck-frame`)].find(e=>e.contentWindow===t):e)?.closest?.(`.flow-group`)?.getAttribute(`data-group-id`)??null;return Vl(`pointermove`,t=>{f.current=e(t.target,t.view)},{passive:!0})},[]);let ie=g.useMemo(()=>Od({getState:()=>d.current,setState:n,focusGroup:x,closeGroup:S,openNewGroupPicker:re,getHoveredGroupId:()=>f.current}),[x,S,re]),ae=Wl(ie),oe=t.groups.some(e=>e.id===t.activeGroupId)?t.activeGroupId:t.groups[0]?.id??null,M=l?null:t.maximizedGroupId,N=Math.max(0,t.groups.findIndex(e=>e.id===oe));return _.current={page:N,count:t.groups.length,ids:t.groups.map(e=>e.id)},g.useLayoutEffect(()=>{let e=h.current;e&&(e.style.setProperty(`--flow-page`,String(N)),e.style.setProperty(`--flow-drag`,`0px`))},[N,l]),cf(h),lf(()=>k?(ne(null),!0):!1),(0,I.jsx)(Yc,{value:b,children:(0,I.jsx)(LH.Provider,{value:e,children:(0,I.jsxs)(`div`,{ref:h,className:`flow-root${l?` is-mobile`:``}${M?` is-maximized`:``}`,children:[(0,I.jsx)(QH,{state:t,activeId:oe,onFocusGroup:x,onNewGroup:A}),(0,I.jsx)(`div`,{className:`flow-scroller`,ref:m,children:(0,I.jsx)(`div`,{className:`flow-field`,children:(0,I.jsx)(`div`,{className:`flow-row`,children:t.groups.map(e=>(0,I.jsx)(tU,{group:e,active:e.id===oe,mobile:l,pinned:e.id===t.pinnedGroupId&&!M,maximized:e.id===M,hidden:M!==null&&e.id!==M,dragging:E?.id===e.id,getLifecycle:v,registerEl:T,onFocusGroup:x,onClose:S,onSwitch:j,onTogglePin:C,onToggleMaximize:w,onStartDrag:O,onResize:ee},e.id))})})}),E&&(()=>{let e=m.current?.getBoundingClientRect();return e?(0,I.jsx)(`div`,{className:`flow-drop-indicator`,style:{left:E.x,top:e.top,height:e.height}}):null})(),k&&(0,I.jsx)(dU,{anchor:k.anchor,files:a,onOpenFile:e=>n(t=>k.groupId?_d(t,k.groupId,`editor`,e):gd(t,`editor`,e)),onSpawnPanel:e=>n(t=>k.groupId?_d(t,k.groupId,e):gd(t,e)),onClose:()=>ne(null)}),(0,I.jsx)(Xl,{openFile:e=>n(t=>gd(t,`editor`,e)),openPanel:e=>n(t=>gd(t,e===`playtest`?`play`:e)),panels:lU,getCommands:ie}),ae?(0,I.jsxs)(`div`,{className:`chord-hint`,role:`status`,children:[(0,I.jsx)(`kbd`,{children:ae}),(0,I.jsx)(`span`,{children:`waiting for the next key…`})]}):null]})})})}function QH(e){let{state:t,activeId:n,onFocusGroup:r,onNewGroup:i}=e,a=uf(),[o,s]=g.useState(!1),c=a?.title?.trim()||`Untitled deck`,l=a?.visibility===`public`?Gd:a?.visibility===`unlisted`?Kd:qd,u=a?.saving??`idle`,d=g.useRef(null),[f,p]=g.useState({left:!1,right:!1}),m=g.useCallback(()=>{let e=d.current;if(!e)return;let t=e.scrollLeft>1,n=e.scrollLeft+e.clientWidth<e.scrollWidth-1;p(e=>e.left===t&&e.right===n?e:{left:t,right:n})},[]);g.useEffect(()=>{let e=d.current;if(!e)return;m(),e.addEventListener(`scroll`,m,{passive:!0});let t=new ResizeObserver(m);return t.observe(e),()=>{e.removeEventListener(`scroll`,m),t.disconnect()}},[m]),g.useEffect(()=>{d.current?.querySelector(`.flow-chip.active`)?.scrollIntoView({inline:`nearest`,block:`nearest`}),m()},[n,t.groups.length,m]);let[h,_]=g.useState(null),v=g.useRef(!1);g.useEffect(()=>{h!==null&&(u===`working`&&(v.current=!0),u===`done`&&v.current&&_(`done`))},[u,h]);let y=g.useCallback(()=>{v.current=!1,_(`pushing`),of(`push`)},[]);return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`div`,{className:`flow-topbar`,children:[(0,I.jsxs)(`div`,{className:`flow-topbar-leading`,children:[mf()?null:(0,I.jsxs)(`div`,{className:`flow-castle-wrap`,children:[(0,I.jsx)(`button`,{type:`button`,className:`flow-castle-btn`,title:`Menu`,"aria-haspopup":`menu`,"aria-expanded":o,onClick:()=>s(e=>!e),children:Wd}),o&&(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:`flow-menu-backdrop`,onClick:()=>s(!1)}),(0,I.jsxs)(`div`,{className:`flow-castle-menu`,role:`menu`,children:[(0,I.jsx)(`button`,{type:`button`,role:`menuitem`,onClick:()=>{s(!1),of(`back-to-decks`)},children:`‹ Back to decks`}),(0,I.jsx)(`button`,{type:`button`,role:`menuitem`,onClick:()=>{s(!1),of(`new-deck`)},children:`+ New deck`}),(0,I.jsx)(`div`,{className:`flow-menu-sep flow-menu-narrow`}),(0,I.jsx)(`button`,{type:`button`,role:`menuitem`,className:`flow-menu-narrow`,onClick:()=>{s(!1),of(`open-settings`)},children:`Deck settings`}),(0,I.jsx)(`button`,{type:`button`,role:`menuitem`,className:`flow-menu-narrow`,disabled:u===`working`,onClick:()=>{s(!1),y()},children:u===`working`?`Pushing…`:u===`done`?`Pushed ✓`:`Push to Castle`})]})]})]}),(0,I.jsxs)(`button`,{type:`button`,className:`flow-deck-identity`,title:`Deck settings`,onClick:()=>of(`open-settings`),children:[(0,I.jsx)(`span`,{className:`flow-deck-vis`,children:l}),(0,I.jsx)(`span`,{className:`flow-deck-name`,children:c}),(0,I.jsx)(`span`,{className:`flow-deck-caret`,children:Yd})]})]}),(0,I.jsxs)(`div`,{className:`flow-tabs-wrap`,children:[(0,I.jsx)(`div`,{className:`flow-tabs${f.left?` more-left`:``}${f.right?` more-right`:``}`,children:(0,I.jsx)(`div`,{className:`flow-tabs-scroll`,ref:d,"aria-label":`Open panels`,children:t.groups.map(e=>(0,I.jsx)($H,{group:e,active:e.id===n,onClick:()=>r(e.id)},e.id))})}),(0,I.jsx)(`button`,{type:`button`,className:`flow-tabs-add flow-picker-trigger`,title:`New group`,"aria-label":`New group`,onClick:e=>i(e.currentTarget.getBoundingClientRect()),children:Bd})]}),(0,I.jsx)(`div`,{className:`flow-topbar-trailing`,children:(0,I.jsxs)(`button`,{type:`button`,className:`flow-preview-btn`,title:`Publish this deck to your Castle account (sandbox edits stay local until pushed)`,disabled:u===`working`,onClick:()=>of(`push`),children:[Jd,(0,I.jsx)(`span`,{children:u===`working`?`Pushing…`:u===`done`?`Pushed ✓`:`Push to Castle`})]})})]}),h!==null&&(0,I.jsx)(`div`,{className:`flow-push-modal-backdrop`,children:(0,I.jsx)(`div`,{className:`flow-push-modal`,role:`dialog`,"aria-modal":`true`,children:h===`done`?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:`flow-push-check`,children:`✓`}),(0,I.jsx)(`div`,{className:`flow-push-title`,children:`Pushed to Castle`}),a?.shareUrl?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:`flow-push-sub`,children:`Your deck is live at`}),(0,I.jsx)(`a`,{className:`flow-push-url`,href:a.shareUrl,target:`_blank`,rel:`noreferrer`,children:a.shareUrl.replace(/^https?:\/\//,``)})]}):(0,I.jsx)(`div`,{className:`flow-push-sub`,children:`Saved to your Castle account.`}),(0,I.jsx)(`button`,{type:`button`,className:`flow-push-done`,onClick:()=>_(null),children:`Done`})]}):(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:`flow-push-spinner`}),(0,I.jsx)(`div`,{className:`flow-push-title`,children:`Pushing to Castle…`}),(0,I.jsx)(`div`,{className:`flow-push-sub`,children:`Publishing your latest changes.`})]})})})]})}function $H(e){let{group:t,active:n,onClick:r}=e,i=t.tabs[0];return(0,I.jsx)(`button`,{type:`button`,className:`flow-chip${n?` active`:``}`,onClick:r,title:i?.label??`panel`,children:(0,I.jsx)(`span`,{className:`flow-chip-icon`,children:zd(i?.kind??`files`,i?.path)})})}function eU(e,t){e.currentTarget.blur(),t()}var tU=g.memo(function(e){let{group:t,active:n,mobile:r,pinned:i,maximized:a,hidden:o,dragging:s,getLifecycle:c,registerEl:l}=e,{onFocusGroup:u,onClose:d,onSwitch:f}=e,p=t.tabs[0],m=fU(t,e.onResize),h=r?void 0:a?{flex:`1 1 auto`}:{flex:`0 0 auto`,width:t.w,height:t.h};return(0,I.jsxs)(`div`,{ref:e=>l(t.id,e),"data-group-id":t.id,className:`flow-group${n?` active`:``}${i?` pinned`:``}${a?` maximized`:``}${o?` hidden`:``}${s?` dragging`:``}`,style:h,onMouseDown:()=>u(t.id),children:[(0,I.jsxs)(`div`,{className:`flow-titlebar`,onPointerDown:n=>{a||e.onStartDrag(n,t.id)},children:[(0,I.jsx)(`button`,{type:`button`,className:`flow-titlebar-btn flow-picker-trigger`,title:`Switch panel`,"aria-label":`Switch panel`,onClick:e=>f(t.id,e.currentTarget.getBoundingClientRect()),children:Hd}),(0,I.jsx)(`span`,{className:`flow-titlebar-icon`,children:p&&zd(p.kind,p.path)}),(0,I.jsx)(`span`,{className:`flow-titlebar-title`,children:p?.label}),!r&&!a&&(0,I.jsx)(`button`,{type:`button`,className:`flow-titlebar-btn${i?` pinned`:``}`,title:i?`Unpin`:`Pin to left`,"aria-label":i?`Unpin`:`Pin to left`,"aria-pressed":i,onClick:n=>eU(n,()=>e.onTogglePin(t.id)),children:Ud}),!r&&(0,I.jsx)(`button`,{type:`button`,className:`flow-titlebar-btn${a?` pinned`:``}`,title:a?`Restore`:`Maximize`,"aria-label":a?`Restore`:`Maximize`,"aria-pressed":a,onClick:n=>eU(n,()=>e.onToggleMaximize(t.id)),children:a?Zd:Xd}),(0,I.jsx)(`button`,{type:`button`,className:`flow-titlebar-btn flow-titlebar-close`,title:`Close`,"aria-label":`Close`,onClick:e=>eU(e,()=>d(t.id)),children:Vd})]}),(0,I.jsx)(`div`,{className:`flow-panel-body`,children:p&&(0,I.jsx)(nU,{tab:p,lifecycle:c(p.id)})}),!r&&!a&&(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:`flow-resize-e`,onPointerDown:m(`x`),title:`Drag to resize width`}),(0,I.jsx)(`div`,{className:`flow-resize-s`,onPointerDown:m(`y`),title:`Drag to resize height`}),(0,I.jsx)(`div`,{className:`flow-resize-se`,onPointerDown:m(`xy`),title:`Drag to resize`})]})]})}),nU=g.memo(function(e){let{tab:t,lifecycle:n}=e;switch(t.kind){case`editor`:return(0,I.jsx)(sH,{file:t.path,lifecycle:n});case`play`:return(0,I.jsx)(TH,{lifecycle:n});case`terminal`:return(0,I.jsx)(OH,{lifecycle:n});case`files`:return(0,I.jsx)(xl,{lifecycle:n});case`operator`:return(0,I.jsx)(rU,{});default:return(0,I.jsx)(iU,{tab:t})}});function rU(){let e=g.useContext(LH);if(!e)return(0,I.jsx)(`div`,{className:`flow-placeholder`,children:`operator unavailable`});let t=()=>{};return(0,I.jsx)(`div`,{className:`shell-root docked anim-ready flow-operator-host`,style:{"--operator-col":`100%`},children:(0,I.jsx)(ko,{agent:e,floating:!1,setFloating:t,columnWidth:0,setColumnWidth:t,minWidth:0,maxWidth:0})})}function iU(e){let{tab:t}=e;return(0,I.jsxs)(`div`,{className:`flow-placeholder kind-${t.kind}`,children:[(0,I.jsx)(`div`,{className:`flow-placeholder-icon`,children:zd(t.kind,t.path)}),(0,I.jsx)(`div`,{className:`flow-placeholder-label`,children:t.label}),(0,I.jsx)(`div`,{className:`flow-placeholder-kind`,children:t.path??t.kind})]})}function aU(e,t){g.useEffect(()=>{let n=n=>{n.target.closest(e)||t()},r=window.setTimeout(()=>document.addEventListener(`mousedown`,n),0);return()=>{window.clearTimeout(r),document.removeEventListener(`mousedown`,n)}},[e,t])}function oU(e,t){return Math.max(8,Math.min(e,window.innerWidth-t-8))}var sU=300,cU=[{kind:`operator`,label:`Operator`},{kind:`play`,label:`Play`},{kind:`terminal`,label:`Terminal`},{kind:`files`,label:`Files`}],lU=cU.map(({kind:e,label:t})=>({kind:e===`play`?`playtest`:e,label:t}));function uU(e,t){let n=t.trim().toLowerCase(),r=cU.filter(e=>e.label.toLowerCase().includes(n)).map(e=>({kind:`panel`,panel:e.kind,label:e.label})),i=e.filter(e=>e.toLowerCase().includes(n)).slice(0,40).map(e=>({kind:`file`,path:e}));return[...r,...i]}function dU(e){let{anchor:t,files:n,onOpenFile:r,onSpawnPanel:i,onClose:a}=e,[o,s]=g.useState(``),[c,l]=g.useState(0);aU(`.flow-picker, .flow-picker-trigger`,a);let u=uU(n,o),d=Math.min(c,Math.max(0,u.length-1)),f=e=>{e.kind===`panel`?i(e.panel):r(e.path),a()};return(0,Qn.createPortal)((0,I.jsxs)(`div`,{className:`flow-picker`,style:{top:t.bottom+4,left:oU(t.left,sU),width:sU},onMouseDown:e=>e.stopPropagation(),children:[(0,I.jsx)(`input`,{className:`flow-picker-input`,autoFocus:!0,placeholder:`Open a file or panel…`,value:o,onChange:e=>{s(e.target.value),l(0)},onKeyDown:e=>{e.key===`Escape`?a():e.key===`ArrowDown`?(e.preventDefault(),l(e=>Math.min(e+1,u.length-1))):e.key===`ArrowUp`?(e.preventDefault(),l(e=>Math.max(e-1,0))):e.key===`Enter`&&u[d]&&f(u[d])}}),(0,I.jsxs)(`div`,{className:`flow-picker-list`,children:[u.length===0&&(0,I.jsx)(`div`,{className:`flow-picker-empty`,children:`No matches`}),u.map((e,t)=>(0,I.jsxs)(`button`,{type:`button`,className:`flow-picker-item${t===d?` sel`:``}`,onMouseEnter:()=>l(t),onClick:()=>f(e),children:[(0,I.jsx)(`span`,{className:`flow-tab-icon`,children:e.kind===`panel`?zd(e.panel):zd(`editor`,e.path)}),(0,I.jsx)(`span`,{className:`flow-picker-label`,children:e.kind===`panel`?e.label:e.path})]},e.kind===`panel`?`p:${e.panel}`:`f:${e.path}`))]})]}),document.body)}function fU(e,t){return g.useCallback(n=>r=>{r.preventDefault(),r.stopPropagation();let i=r.clientX,a=r.clientY,o=e.w,s=e.h,c=r.currentTarget;c.setPointerCapture(r.pointerId);let l=!1,u=r=>{let c=r.clientX-i,u=r.clientY-a;if(!l&&Math.abs(c)<5&&Math.abs(u)<5)return;l=!0;let d=n===`y`?o:Math.max(200,o+c),f=n===`x`?s:Math.max(160,s+u);t(e.id,d,f)},d=()=>{c.removeEventListener(`pointermove`,u),c.removeEventListener(`pointerup`,d)};c.addEventListener(`pointermove`,u),c.addEventListener(`pointerup`,d)},[e.id,e.w,e.h,t])}var pU=`input,textarea,[contenteditable]:not([contenteditable="false"]),.cm-editor,.xterm,[data-castle-allow-select]`,mU=`*{-webkit-user-select:none!important;user-select:none!important;-webkit-touch-callout:none!important;-webkit-tap-highlight-color:transparent!important;}${pU.split(`,`).flatMap(e=>[e,`${e} *`]).join(`,`)}{-webkit-user-select:text!important;user-select:text!important;-webkit-touch-callout:default!important;}`,hU=`castle-touch-selection-lock`,gU=1;function _U(e){let t=e;return t?t.nodeType===gU?t:t.parentElement:null}function vU(e){return!!_U(e)?.closest(pU)}function yU(e){if(e.getElementById(hU))return!0;let t=e.head??e.documentElement;if(!t)return!1;let n=e.createElement(`style`);return n.id=hU,n.textContent=mU,t.appendChild(n),!0}function bU(e){let t=e.getSelection();!t||t.isCollapsed||vU(t.anchorNode)||t.removeAllRanges()}function xU(e){let t=e=>{vU(e.target)||e.preventDefault()};e.addEventListener(`selectstart`,t,!0),e.addEventListener(`contextmenu`,t,!0),e.addEventListener(`selectionchange`,()=>bU(e))}var SU=new WeakSet;function CU(e){SU.has(e)||(SU.add(e),e.addEventListener(`load`,()=>EU(e.contentWindow))),EU(e.contentWindow)}function wU(e){e.querySelectorAll(`iframe`).forEach(CU)}function TU(e){new MutationObserver(e=>{e.forEach(e=>e.addedNodes.forEach(e=>{let t=_U(e);t&&(t.tagName===`IFRAME`?CU(t):wU(t))}))}).observe(e,{childList:!0,subtree:!0})}function EU(e){if(e)try{let t=e.document;if(t.__castleTouchSelectionLockInstalled)return;t.__castleTouchSelectionLockInstalled=!0,yU(t)||t.addEventListener(`DOMContentLoaded`,()=>yU(t)),xU(t),wU(t),TU(t)}catch{}}function DU(){return typeof window.matchMedia==`function`&&window.matchMedia(`(pointer: coarse)`).matches}function OU(){typeof window>`u`||!DU()||EU(window)}var kU=[{kind:`files`,label:`Files Panel`},{kind:`playtest`,label:`Play Panel`},{kind:`terminal`,label:`Terminal`}],AU=10,jU={...mn,gap:AU},MU={...hn,gap:AU},NU={terminal:jo(AH(OH)),editor:jo(AH(sH)),files:jo(AH(xl)),playtest:jo(AH(TH))},PU=`castle-operator-width`,FU=400,IU=320,LU=900;function RU(){try{let e=Number(localStorage.getItem(PU));if(Number.isFinite(e)&&e>0)return Math.max(IU,Math.min(LU,e))}catch{}return FU}var zU=`castle-operator-float`,BU=300;function VU(){try{return localStorage.getItem(zU)===`1`}catch{return!1}}function HU(){g.useEffect(()=>{let e=e=>{let t=e.data;if(!t||t.type!==`castle-capture-cover`||e.source!==window.parent)return;let n=typeof t.requestId==`string`?t.requestId:void 0;tH().then(e=>{window.parent.postMessage({type:`castle-capture-cover-result`,requestId:n,dataUrl:e,ok:!!e},`*`)})};return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)},[])}function UU(e){let t=e.group;return(0,I.jsx)(`div`,{className:`empty-dock-state`,children:(0,I.jsxs)(`div`,{className:`empty-dock-card`,children:[(0,I.jsx)(`div`,{className:`empty-dock-title`,children:`Open a panel`}),(0,I.jsx)(`div`,{className:`empty-dock-actions`,role:`menu`,"aria-label":`Open panel`,children:Bo.map(n=>(0,I.jsxs)(`button`,{type:`button`,role:`menuitem`,className:`empty-dock-item`,onClick:()=>Vo(e.containerApi,n,t),children:[(0,I.jsx)(`span`,{className:`dv-add-panel-item-icon`,children:n.icon}),(0,I.jsx)(`span`,{className:`dv-add-panel-item-label`,children:n.label})]},n.label))})]})})}function WU(e,t,n,r){return g.useMemo(()=>({openFile:t=>{e.current&&Ns(e.current,t)},openPlaytest:t=>{e.current&&Fs(e.current,t)},closeEditor:t=>{e.current&&Is(e.current,t)},activeEditorPath:r,kitEditorExts:t,terminalTheme:n}),[e,t,n,r])}function GU({agent:e}){let[t]=g.useState(`dark`),[n,r]=g.useState(VU),[i,a]=g.useState(RU),[o,s]=g.useState(!1),[c,l]=g.useState(!1),[u,d]=g.useState(null),[f,p]=g.useState(null);g.useEffect(()=>{let e=e=>{Ko(e),d(e)};return Zo().then(e,()=>e(Xo)),ns().then(p,()=>p([])),Us(t=>{t.changes.some(e=>e.path===`castle.json`||e.path.startsWith(`imports/`))&&Zo().then(e,()=>{})})},[]);let m=u?u.kitEditorExtensions:null,[h,_]=g.useState(!1);g.useEffect(()=>{if(!u||!f)return;let e=0,t=requestAnimationFrame(()=>{e=requestAnimationFrame(()=>_(!0))});return()=>{cancelAnimationFrame(t),e&&cancelAnimationFrame(e)}},[u,f]),g.useEffect(()=>{if(!o)return;let e=0,t=requestAnimationFrame(()=>{e=requestAnimationFrame(()=>l(!0))});return()=>{cancelAnimationFrame(t),e&&cancelAnimationFrame(e)}},[o]);let v=g.useCallback(e=>{r(e);try{localStorage.setItem(zU,e?`1`:`0`)}catch{}},[]),y=g.useCallback(e=>{let t=Math.max(IU,Math.min(LU,Math.round(e)));a(t);try{localStorage.setItem(PU,String(t))}catch{}},[]),b=g.useRef(null),[x,S]=g.useState(null);g.useEffect(()=>{let e=e=>{let t=e.data;if(t){if(t.type===`castle-open-file`&&typeof t.path==`string`)b.current&&Ns(b.current,t.path);else if(t.type===`castle-open-playtest`){let e=typeof t.scene==`string`?t.scene:void 0;b.current&&Fs(b.current,e)}}};return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)},[]),g.useEffect(()=>{let e=e=>{e.target.closest(`.dv-sash`)&&document.body.classList.add(`shell-sash-resizing`)},t=()=>{document.body.classList.remove(`shell-sash-resizing`)};return document.addEventListener(`pointerdown`,e,!0),document.addEventListener(`pointerup`,t,!0),document.addEventListener(`pointercancel`,t,!0),()=>{document.removeEventListener(`pointerdown`,e,!0),document.removeEventListener(`pointerup`,t,!0),document.removeEventListener(`pointercancel`,t,!0)}},[]);let C=g.useCallback(e=>{let t=e.api;b.current=t;let n=u?.deckId??null,r=()=>{let e=t.activePanel?.id??``;S(e.startsWith(`editor:`)?e.slice(7):null)};t.onDidActivePanelChange(r),r();let i=!1,a=Au(n);if(a&&zu(a))try{let e=Iu(a,new Set(f??[]));e&&zu(e)&&(t.fromJSON(e),Ms(t),i=!0)}catch{try{t.clear()}catch{}}i||As(t,u?.initialPanels??xs),s(!0),t.onDidRemovePanel(e=>{e.id.startsWith(`editor:`)&&uu(e.id.slice(7));let n=null;try{n=e.api.group}catch{n=null}n&&t.groups.length>1&&t.groups.includes(n)&&n.panels.length===0&&n.api.close()});let o=null;t.onDidLayoutChange(()=>{n&&(o&&clearTimeout(o),o=setTimeout(()=>{o=null,t.panels.length!==0&&ju(n,t.toJSON())},BU))})},[u,f]),w=g.useMemo(()=>Du(()=>b.current),[]),ee=Wl(w);return(0,I.jsx)(Yc,{value:WU(b,m,t,x),children:(0,I.jsxs)(`div`,{className:`shell-root ${n?`floating`:`docked`}${h?` anim-ready`:``}${c?``:` dock-hidden`}`,style:{"--operator-col":`${i}px`},children:[u&&f&&(0,I.jsx)(fr,{className:`shell-dockview`,theme:t===`dark`?jU:MU,components:NU,defaultTabComponent:nu,rightHeaderActionsComponent:Ho,watermarkComponent:UU,defaultRenderer:`always`,onReady:C}),(0,I.jsx)(ko,{agent:e,floating:n,setFloating:v,columnWidth:i,setColumnWidth:y,minWidth:IU,maxWidth:LU}),(0,I.jsx)(Xl,{openFile:e=>{let t=b.current;t&&Ns(t,e)},openPanel:e=>{let t=b.current;t&&e!==`operator`&&Ps(t,e)},panels:kU,getCommands:w}),(0,I.jsx)(ou,{getApi:()=>b.current}),ee?(0,I.jsxs)(`div`,{className:`chord-hint`,role:`status`,children:[(0,I.jsx)(`kbd`,{children:ee}),(0,I.jsx)(`span`,{children:`waiting for the next key…`})]}):null]})})}function KU(){let e=Or(),[t,n]=g.useState(Ju);return g.useEffect(()=>Yu({onChange:n}),[]),HU(),t===`flow`?(0,I.jsx)(ZH,{agent:e}):(0,I.jsx)(GU,{agent:e})}var qU=document.getElementById(`root`);if(!qU)throw Error(`Missing #root`);ac(),OU(),(0,_.createRoot)(qU).render((0,I.jsx)(KU,{}));
|
|
434
|
+
`,wV=`<svg viewBox="0 0 24 24" fill="none" stroke="#E3E6FD" stroke-width="2.5" stroke-linecap="round"><path d="M4 4 L20 20 M20 4 L4 20"/></svg>`;function $(e,t,n){let r=e.createElement(t);return r.className=n,r}function TV(e,t){e.classList.toggle(`castle-lb-hidden`,t)}function EV(e,t){TV(e,!t),e.src=t??``}function DV(e){let t=$(e,`div`,`castle-lb-row`),n=$(e,`div`,`castle-lb-place`),r=$(e,`div`,`castle-lb-avatar-box castle-lb-tappable`),i=$(e,`img`,`castle-lb-avatar`),a=$(e,`img`,`castle-lb-avatar-frame`),o=$(e,`div`,`castle-lb-name-box castle-lb-tappable`),s=$(e,`div`,`castle-lb-name-row`),c=$(e,`div`,`castle-lb-username`),l=$(e,`img`,`castle-lb-badge`),u=$(e,`div`,`castle-lb-annotation`),d=$(e,`div`,`castle-lb-score`);return r.append(i,a),s.append(c,l),o.append(s,u),t.append(n,r,o,d),{root:t,place:n,avatarBox:r,avatar:i,frame:a,nameBox:o,username:c,badge:l,annotation:u,score:d}}function OV(e){let t=$(e,`div`,`castle-lb-row`),n=$(e,`img`,`castle-lb-party-single`),r=$(e,`div`,`castle-lb-party-multi`),i=$(e,`img`,`castle-lb-party-multi-a`),a=$(e,`img`,`castle-lb-party-multi-b`),o=$(e,`div`,`castle-lb-name-box`),s=$(e,`div`,`castle-lb-party-name`),c=$(e,`div`,`castle-lb-party-time`);return r.append($(e,`div`,`castle-lb-party-multi-slot castle-lb-party-multi-slot-a`),i,$(e,`div`,`castle-lb-party-multi-slot castle-lb-party-multi-slot-b`),a),o.append(s),t.append(n,r,o,c),{root:t,single:n,multi:r,multiA:i,multiB:a,name:s,time:c}}function kV(e){let t=$(e,`div`,`castle-lb-tabs`),n=$(e,`div`,`castle-lb-tab castle-lb-at-foryou`);n.textContent=`FOR YOU`;let r=$(e,`div`,`castle-lb-tab castle-lb-at-global`);r.textContent=`GLOBAL`;let i=$(e,`div`,`castle-lb-indicator castle-lb-at-foryou`),a=$(e,`div`,`castle-lb-indicator castle-lb-at-global`),o=$(e,`div`,`castle-lb-close`);return o.innerHTML=wV,t.append(n,r,$(e,`div`,`castle-lb-rule`),i,a,o),{root:t,forYou:n,global:r,forYouIndicator:i,globalIndicator:a,close:o}}function AV(e){let t=$(e,`div`,`castle-lb-root`),n=$(e,`div`,`castle-lb-panel`),r=kV(e),i=$(e,`div`,`castle-lb-header`),a=$(e,`div`,`castle-lb-header-name`),o=$(e,`div`,`castle-lb-header-label`);i.append(a,o);let s=$(e,`div`,`castle-lb-rows`),c=[];for(let t=0;t<mV;t+=1){let t=DV(e);c.push(t),s.append(t.root)}let l=$(e,`div`,`castle-lb-row castle-lb-parties-header`);l.textContent=`PARTIES TO PLAY WITH`,s.append(l);let u=[];for(let t=0;t<hV;t+=1){let t=OV(e);u.push(t),s.append(t.root)}let d=$(e,`div`,`castle-lb-spinner`),f=$(e,`div`,`castle-lb-share`);return n.append(r.root,i,s,d),t.append(n,f),{root:t,panel:n,tabs:r,nameHeader:a,labelHeader:o,rows:c,partiesHeader:l,parties:u,spinner:d,share:f}}var jV=60,MV=jV*60,NV=MV*24,PV=NV*7,FV=NV*365/12,IV=NV*365;function LV(e){if(e===0)return`0`;let t=e>0?e:1,[n,r]=t<jV?[Math.round(t),`s`]:t<MV?[Math.round(t/jV),`m`]:t<NV?[Math.round(t/MV),`h`]:t<PV?[Math.round(t/NV),`d`]:t<FV?[Math.round(t/PV),`w`]:t<IV?[Math.round(t/FV),`mo`]:[Math.round(t/IV),`yr`];return`${n}${r.length>1&&n!==1?`${r}s`:r}`}function RV(e){let t=new Date(e).getTime();return Number.isFinite(t)?LV((Date.now()-t)/1e3):null}function zV(e,t){let n=t>0?mV-1-t:mV;if(e.length<=n)return e;let r=e.slice();for(;r.length>n;){let e=-1;for(let t=r.length-1;t>=0;--t)if(!r[t]?.isRequiredUser){e=t;break}if(e===-1)break;r.splice(e,1)}return r.slice(0,n)}function BV(e){return e.isDeckCreator?`Creator`:e.isLinkSharer?`Challenger`:e.user.isAnonymous?`Tap to save your score`:e.isRequiredUser?`You`:null}function VV(e,t,n){TV(e.root,!1),TV(e.place,!n),e.place.textContent=t.place===null?``:`#${t.place}`,e.score.textContent=t.score,e.username.textContent=t.user.isAnonymous?`You are not signed in`:t.user.username??``,e.username.style.color=t.user.isAnonymous?vV:t.user.color??(t.isRequiredUser?`#FFFFFF`:gV),e.avatar.src=t.user.avatarUrl??pV,EV(e.badge,t.user.badgeUrl),EV(e.frame,t.user.frameUrl);let r=BV(t);e.annotation.textContent=r??``,TV(e.annotation,!r),e.nameBox.classList.toggle(`castle-lb-annotated`,!!r)}function HV(e,t){TV(e.root,!1),e.name.textContent=t.name;let n=t.avatarUrls[0]??null,r=t.avatarUrls[1]??null,i=!!(n&&r);EV(e.single,i?null:n),TV(e.multi,!i),e.multiA.src=n??``,e.multiB.src=r??``;let a=t.lastMessageTime?RV(t.lastMessageTime):null;e.time.textContent=a??``,TV(e.time,!a),e.time.style.width=a?`calc(${30+a.length*20} * var(--castle-lb-u))`:``}function UV(e){TV(e.panel,!0),TV(e.share,!0),TV(e.spinner,!0),TV(e.partiesHeader,!0),e.nameHeader.textContent=``,e.labelHeader.textContent=``,e.rows.forEach(e=>TV(e.root,!0)),e.parties.forEach(e=>TV(e.root,!0))}function WV(e,t,n){let r=()=>{n(t.user.isAnonymous?{type:`savePrompt`,userId:t.user.userId}:{type:`openProfile`,userId:t.user.userId,username:t.user.username})};e.avatarBox.onclick=r,e.nameBox.onclick=r}function GV(e,t,n,r){let i=n===`forYou`,a=t.loading===!0;TV(e.panel,!1),e.tabs.forYou.classList.toggle(`castle-lb-tab-active`,i),e.tabs.global.classList.toggle(`castle-lb-tab-active`,!i),TV(e.tabs.forYouIndicator,!i),TV(e.tabs.globalIndicator,i),e.nameHeader.textContent=i?`RELEVANT PLAYERS`:`NAME`,e.labelHeader.textContent=t.label.toUpperCase(),TV(e.nameHeader,a),TV(e.labelHeader,a),TV(e.spinner,!a),TV(e.share,!1),e.share.textContent=t.isAnonymous?`Share Deck`:`Share Leaderboard`,e.share.classList.toggle(`castle-lb-share-narrow`,t.isAnonymous);let o=i&&t.showParties&&!a?t.parties.slice(0,hV):[],s=a?[]:zV(i?t.followList:t.list,o.length);e.rows.forEach((e,t)=>{let n=s[t];if(!n){TV(e.root,!0);return}VV(e,n,!i),WV(e,n,r)}),TV(e.partiesHeader,o.length===0),e.parties.forEach((e,t)=>{let n=o[t];n?HV(e,n):TV(e.root,!0)})}function KV(e){if(e.getElementById(yV))return;let t=e.createElement(`style`);t.id=yV,t.textContent=qV()+CV,(e.head??e.documentElement).append(t)}function qV(){return`@font-face{font-family:'Castle Overlay';font-weight:500;font-display:block;src:url(data:font/woff2;base64,${YV}) format('woff2')}`}function JV(e,t){let n=e.ownerDocument;KV(n),n.defaultView?.getComputedStyle(e).position===`static`&&(e.style.position=`relative`);let r=AV(n);e.append(r.root);let i=null,a=`forYou`,o=e=>{try{t(e)}catch{}},s=()=>{i&&GV(r,i,a,o)},c=e=>{!i||i.loading||a===e||(a=e,o({type:`switchTab`,tab:e}),s())},l=()=>{let t=e.clientWidth;t>0&&r.root.style.setProperty(`--castle-lb-u`,`${t/800}px`)};r.root.addEventListener(`click`,e=>{e.target===r.root&&o({type:`close`})}),r.tabs.close.addEventListener(`click`,()=>o({type:`close`})),r.tabs.forYou.addEventListener(`click`,()=>c(`forYou`)),r.tabs.global.addEventListener(`click`,()=>c(`global`)),r.share.addEventListener(`click`,()=>o({type:`share`})),l();let u=typeof ResizeObserver>`u`?null:new ResizeObserver(l);u?.observe(e);let d=()=>{i=null,a=`forYou`,UV(r)};return d(),{render(e){i=e,a=`forYou`,l(),s()},clear:d,destroy(){u?.disconnect(),r.root.remove()}}}var YV=`d09GMgABAAAAAGwIABEAAAABGVAAAGukAAEzMwAAAAAAAAAAAAAAAAAAAAAAAAAAGoFAG4GOHhyJBgZgAIkgCGAJnAwRCAqCvVSCmjoBNgIkA40AC4ZOAAQgBYlEB5MzDIE9Wz8DcQQHh6sE/t+u4V2nSKYfbGlWwXbl4bbBWzvrB1xkNiJyOwRK/69nZP///+9IKjJmk0HabaIIoIIe9Zf/JubuFoJczLPAqxzjkHOXi465KHfFcwY/9eVcvEAHPoz04BObPVU9lVMlXLCT8DraTdaJ9aJZ7LzUYKspC+8mdJy0LiTyw/Rll9ZsKfNTJth6HGHRja1HqjucMFZwOAQKilPZdE56wXaxKxOP9vh1SezhSd5hUjvG7dvEf5wKhRJ8LCx4NPP+aHLmW4f7/FsCa9/bWCGsOob9NfKCYc/wQfeESJlZbXq1Xf8iLiY9lOYpkprfWdhE7k5Pw6u0ZTCxTKvE1PgqMHY9RNVYp14iyC7+q2dxeMQHEYFiCCOl9uf5bf6571FSBpEiIYI2mCh2bK0uy0WKVUvn0sSoZf7v0rlwncaqXZSK/5Wq9d5P3Q2AkqmQSSpMCgETooonCvayYPg09oajCxuk23lDGqDprLBK2gBVTdpGRO9ySe5yEW3Ea2lyqSo6WqyIyAbM2LzYzFgf5sB+YuiGT4zDubzYxo5REytAxSjk5GbnH4mTlp7v9/63Xvv+d/6QoiRbFMKEkGUUikJSIy0peQoXy+MoFFkNcDCSwew9AhTCoxQILCHBYdyUW/z8/DIzrWeewOYwD0KCoh29Tl26mMuSnGRBiq/vRWDbCrSdIrwOOPlm3ovIFq2p9BHK1ZiyUBzACfIF7+eJky36vXMOfwmUSNK7oGTj+ybk8j8AwBtDVP/8g+2+5hjbCZUiFCUrsb0xXZoD/iRlcFJgFwhmU4FNVIRlI7TaZaOVIUTD2g66aXsBEd0JFU+oqN3Uj0sX9h5LgID/S1UdpjkZpgyzp7Q+uRe6UWe6tM+ZB8i0hYC+t4yANCJCiAW6vepdDnXmSZaR5IQNAQIlfj8WgKZO43dbMoydmPvXEthKW+Fb4epg4wBSEfQw4SV3KeH5urF4Af7PQjZrZmObBGpKoUdP7NXzZhzNy/mhUc266d7pb6dMhTBx7L8UY21/yW77c3nX9C+FQqFQKBQWs2XBojPAIvcxka5Im8FzgAvQEsp4+MD1FQEQ+Rq5Sd4E0Y2aXGWaQvzvvHE0rj/KgtTDf9SlPEwpq/DUXyC7QAGX5IOWnSvpF6Wcc8N8w6xtelLYrLG8PJYVUWbS3EPWuC0Q3D2Mb42sk+WB2o/1VuwLZktjSI2meUPsV8KlBhSwrp1QDsQLJWhet+phHTyGxxmC6Jrm6iu6Sv68b7K1XW6DVHgTDUD4f35sVh4Hswse6pr2gOid+U/LREIok5AXopc6eL7Xfdq+4/X16JsSBQ2kmSgIRQPYEYDgfXj7VpPoG/9XiGTW/pCJNLZ2Z+tQUUNRGrgLdDsp06WjokrRp02dpnK6/Lzv7LO9hwcSM7MBftRmzV8H/U2hR8E5FL2L5nLDSxcQvAcSAqEA0qyQJgDSjFHYPzxA+o8HE9KGECc4BYUJChvkEFIsU+rWncvtaq+L1tUWXeeidW0enpb/zu5Juoxw/8rIETqxYjJ/E7hZWnu/KOrQlz7ULhQ8J1hHK0phDEoA3z/3TefOe3+3kFJcd8ravZNYCAElkN87azbZmVmg4U4eo6uKkQ23/BxOtXtcWYU7JRJjIyvhrnTA55Z8vgm0l/YgwycsIkUkeFjf+Vb2SXsdGYYQQjDBNcI1QriqMSEd3ONr4fPsyV7O6/6tqqovYlTEM3rYZS1rEhIujzawSlukFoX6+O3rmmxqRRQ7fbf7EjeKhCRUQKWBwcn/mmeHNa2WBKe75VrNGIomqGBHuuD4uvIpAiwIjAT6MHwWECwYwgEhQKEvtkpcIeF+JhlEwe5RTXPLna/0YpRgumZK0zxFKrFapapltEO77Ndh7erQoU43dMsd3dOtXq9ab0JTK3+PJS4TlISsUHJbDYeAITtBsFUejhsOzH1eXzwXmAiAriNAYHu/vXAusH8u18BEQuC6Lf0sJKG8vxtBgfpTzlvgvQ/o3h2Hgt46777+HADXd/lzD3dhwLyb2b692c/F51zcl8U5FeChqAHa/09Sr9/g9rY/rw/u96v7+n687tyUr4PrfnGdub7PrCPuA+C671otD911oL3i/m1Ya8ANOw1cmhMeiqNAe4jfueLg+u60gte22bI9dGst7VIN8lktS7vOmaFgydxLCtbO9MXmMo/eRBrK7QPQ/8pC7Kfb2/x+Ln5wf1xHTu/si6JbwPX8/PTgVmjefso1r57On07fv7bTIXDD7gOX5o6H4qaVdNrtl5/Wges8C+iO08dySnPKKeddyWGqzfHz6voCFQyA4yZu9k/s9eoT5PV1ZNQuBtM0NMuwscGzPgAmD+78MoO0rNNV9KhIH0mf8yaB3aTrEBQOKTLSZiId7YWJ6NN69CfVHhRNizqMHCbd77BNGLe+Pt0D85T4icCsuu1C7c9guqkCIkHWABtnQE7AtsATjlehPRFMEdGdqMWNIrSt/dC1rF228ColqBbCiT3PpFMga+eBKcf9lOKXwbr1SBKGO0AA0JFiiwtehDOeKWSQx1pqaWYf+2njBJ2+Ojrw+qNvMICDgH2A3YAdgK32cVBsEuvFGl5prNnFeEEukeIgH264jTNpbCQTV3biUxMoDWNjy68rUFBgwxWosN4qBDDY5IKIjLXJlDt3BJ6FGl3tA1Srg89wmRjUWNtvwbzsiJt54mqGMpLyhbJ6LZmoArevBekR+gytdgv4m2PK33nrAG8alLZxVJha1bbsOxqUjBam9GoX13Q0JiR+v8MfZbI6IlDuZucnLCrcDA+RHK5Pttb8w9Wba3USrsIM/XKzctXg/XmfnfTzgry1oaawtReytni09RET99LDH1kc+OpP1MFH4jeAYPC8tnRou24+0GMPSv3vpDsWpaYatd+16xsQ416UtYU8Xhctv/NKqzem2+lBUaWq6rJWfOnLYCXDU5K7Y7owzwRtpQ+t7q4k3815C8x+mL/uumlrnqFbH6xTavvPbeUxEQFL45KBR95mxdsWyYy1G5T6V8Zog8k1seMUEhsrUbt/egievSqmJ6WaFI6WW3XCq8IrnOUwdnbw86d/oSlNIy9MmwyBqK/NO62qv7sMN/6TQ8a8500a7l89QdljTeMFTm5eVPbci0xhAl+pZSFccrRj0HkQiDN7CzGEOpgcy0W1rJFkVZ5gUWzE0FFJBPXoV4lUptpkRg3m2WW3xQ5pt1SH84qGEVZkd60fQ9Tm1Mfy0f0GXkncp2hKOkVzjjvRkjZPrfm2KbanX8OOgkPsHFgWHWwoUxxuVI8jMK4290xGQyfCZAUzazGA5bEwCfHjMcOMQpVsDJaxpiOZYQbxcAVzV4uZMShCUNJAu6pnpUkzXCsubnvwcw/5P2n7rw1nzQXtGel0Ge6KG+iVDtcWoxdE0+p9j+KTr8z1GRi9EwLL2uHDh/3AiH8fEhZ4SchLGrxC02IXzhC3iCFOkeOhqJBVAteonrzHyNy6CGA0zpiIXToWLoT3edx5sOHJF82lQMdjIImG4q5HdyOv4IAjzVu8vkQ6NoMCBMXsx5RYxVy1MfceWRowqScs8Q1SYIc7YM45D8MKii0dg2GyP1hjDd/M/kA4A2L4iBAgygu2iVnRewjK/zGhMgYBZDxP8RdfMr1Cs3n3ed+PPR3FtoCZXAsXuWSVm8p5hzXWMu+wJlEv26Q2R6CxDmsVK4cZZgKXcaKZvNOM9y75pRNM9Es3t79q32veE+0NRZwHUf6jfFt6SYNQPlXPxqqAiSbJ28lrsdpi0l+kq8ql9TX1ZQeYIMlLyoJFBeFiFUTrF9z4nK6Z1Lrr3PbW/RXfK758oHyQGHz/hFGCya0hNuIECT71lEvSrVxVdUnVYFVqZVmFrfRkyR8lluKjRWcLrrJP5n/JurX1+ZlZmg/kvWH5ZA46vwbfiXdlPoc7gRPhODgSroQ6MsoycGORW73rEGl7QGu8VwzPrt4Vx6fz7qW1vaSIJbnrLEl7On6Bf3I4SU8Y4cvZu+PDvGvmFoDhQRqAm7Wkti3ePLDJDjs122O/VgfdtV2Pr67oD8HTcITD88iI5UXibH1Nlcrf7HPyL5f8mbJTYOYoOKScEnJU0vBcVTYyX1WNKRSx2SWra0G91WdoNLIgzHojgEAIRlAMZ4kjngQSSSKZFNLIQGbSDf2GAcOgYRwSFEYlqXaqg+pS7FbsUexV7FPsV/zOYrXZHS63x+vzS9UJ6kSUMT5ukNQpDcs7T6vV12qo1QxrjrXWaqvVR9FXYS1AgiREwiRCoiRG4iRBkiQF1AATZ+FsnINzAY/kkwJSSIpIMS6xKLUosyi3qLCotKgVaUPakQ6kE+nm9fB6eX28ft4An+1/jizAB1FEHFXG+SSfy+S5KcGUZsq7SUnSkkoOaoNmRHOiO9GD6QP7QuDdS/ipk2QqwQzEPmHccxLlghKgkjjjGHxVRlgawIEcxMEcwqEcxuEcwZEc5VrNNROwABtwANcBT86XC+RCuUgupiRACmRADhRACXQjPUgv0of0IwOuzLfGAzLwFYRgBMVwggxTzGJzwsV5fIFwidonrMjkCiaozEVcO/NpVVLgs1HQOxmXJyj8kXpDP7wcb3Z0fHZm6kuZbApY5UhPrULTDx63CMKU/YwIX3oiWLf2WYiJNCGhttUD3XGKquRDD02uybPYGDJkFPb9lPfV54YLsQeBoTYYJaJRj8tYfg2/dRH8Nkh/Bms1yDXaIIMNMZWmSbP1Nthok8222GqbHXba87G90PdC+7DfAQcdctgRRx1zvHSN80R8gVAkkcrkCiWDtZ8ZngWysWArRWphWz0Tiw6V7beIEwky6VNpNs6bS3tRCKFjp6mFqk0bZ5dj1W4s8DcONwHAQUEwgmI4QYZyrBYmw2JzeHyBUBSJRCqTK6bycm736BJzO8FBUlVy5MpTq049EpAGREtHD4ZAGVlCAoweFocnEElkCpVGZzBZbA6XxxcIRWKJVCZXKFVqO41WpzcYTWaL1ZaX0FmhgWZYjhdEKdrSlbLlyJWnVp16JCANiJaOHgyBMrLECG2dAIAgMAQKgyOQKAwWhycQSWQKlUZnMFlsDpfHFwhFYolUJlcoVep4xfXaG2+9iw8SH33yOXYmGq1ObzCazBbrtF0VRhYV7JiJztuMTsAkllm1Y7OjtXzS9o7Ilwu/TW1pobAG1CkgEIIRFMNZjhdESVY0gzk63y8gON+cP/5U/3RnRBe7hIMNHJ5AJJEpVBqdwWSxOVweXyAUiSVSmVyhVKntNFqd3mA0mS3WaXuHTUc2vYphejYCvdPc9CSL3ZvVGPRCe9Y8Xd5l4mW6mwfP0otT3hzzGXX7aL67LT/oe/BuKoQMHxmBSFFbo3avSxg8MZ80hwVLVsHiiYOHT0BIRMyahA0pGXkodi9bSnah4knNnsPoSM+JK+coXXhyFUpTavcD7jx5tEt6wZsPHT96/gIECuqVAx01AaKlowdDGKCMYeolc1pgZUs7HOFr5hcQLOPtlsjnC4SiSFqvW49effpjBGQGAILAECgMjkCigjHA4vAEIolModLoDCaLzeHy+IK4bu2Gm27FXZ57f+1+aq3Z2ZLC1iJsK972Vf6En/3iV7/5PUIDkVgilckVSpU6nvE898LLeOXotTfeehc7A41WpzcYTWaL1XZw4IMbTJcD6Dmy6UPUU+nKyegL4wbvlSc+evjqV4n3yqyH23Fltvt0qt33rFfkuJvTrtLdPHiWXnsu8d6RT4Tu5sLGoTwbuS83avfDC/bWFu5rGXiWQWE01DXB4AiISMgozFCD1q1GL7Ubfx8M6wCAIDAECoMjkKhgaCwOTyCSyBQqjc5gstgcLo8vGB8XbUdMbYjEEqkscxRKlTpeMbz2xlvvcodGmx16g9Fktlin7R3B/c3Q/sdZ9v9M961xHwkoKS7jNuWmtrsMFJo4P8LnZbniqq987ZtguFgcnkAkkSlUGp3BZLE5XB5fIBSJJVKZXKFUqcsvPP93zmdffI0+rkar0xuMJrPFOm1PBnqY+ku30qW49Dxquk5aXQ4+mn0LEwERCMEIiuEEGcq42m/pCzHvoSmemD7Wbs3ONZknKpF/PeNrSphPVnJa22wdWFexIFtuGdwgppTV2Jx9XHqwpemKXKF8FvXEXP12EAcyk2CJzaknBhWZXKHcl+UWXC/TwGvEIIMNMZWmSbP1Nthok8222GqbHXbaE6aAxeaUrpCH8QVCUSTWpDK5QhnvGR989Km3EFoz29CuQ2d0Y3r06tM/DfxIEqSd9XHetz1IDVisY1sxiiUhWZxK+53y01BZ0gM4EVABgWAExXCCDGVBrXXI6CIez0cgFC2x6yxbkSuUcYKDzne+94MfAUAQGAKFwRFIVDAUFocnEElkCpVGZzBZbA6XxxfEddoNN93qj5Noi4wQS6QyuUKpUscrX1574613saM0Wp3eYDSZLdZpexKgObreTDrhQjwfmJDZc/bcXhmV1KWuLD7CZC2+PJY8AEawAlCChmAExXCCLFcYw5Sx2JwZQMQVgVC0xIlzUJHJFcp9WijMghBC+NuYw0Z0YijpD1g5Om91HtP1YlWfapCGfQaa+xZcrWcAFAgEIyiGE2QoWm2OLUIIoS30hKaia2latWnPDnTq1qNXn/5p4IEcIDuc/qzO9njl3aCHTvMZzATUQEMwgmI4QYYi1MoVxjJZFpuzuDSgXhEIRXvFGA+0MK+yUY6AuRs0ymPuNkDIuNkl5j8a1RCMoBhOkBX2m+yENIQQQkgQBEGcEZ8YnMez+annU8ce/y0/MUuRDXf5bZ9RegRYAQ3BCIrhBBkNys5ny5ErT6069UjJU4KZGoFo6ejBkG5goaQRlu+PN8t/P8OQCAAQBIZAYXAEEpUMWByeQEwJMoVKozOYLDaHy+MLymuRGXXdcNOtDxX9SXkj43Extu/7tKAcXvIBAAAwDOvMK1bXYqqqqqqqAAAAAAAASkqOHW91s1MPZcAdikPcjeO+MCyPp4Q6eC4pLiPtXcYv1iv5dqvXs2FNrbKN1wF1Y0Q0iVkTmsfCbsvxSBUoO5HndPnvesgypguldEVJvynN1PXYbyeqbr+5iVu47c5xZdhmEvEhW+J5fZ9LlfCsr1YQjv5VwoEB9kF9o2XLClcVCEZQDCfID8kBIYRYlmXZ89Z1RSZXKOPmiltuT3faEp8oi0/nBGaBnCflq3WF1O9ya1Gfa+ic7e+eL7kex4QssRcHmmUcx3EcwzAM0+oax3Ecx1VlXuOzCX10+rIVppkOqIMNghEUwwnyU4r3W2Qe5dN/vntU9m5ue6NxKNgPvfxo7a9Bv+vAIAQjKIazHC+IkqxoBnN0gV9AcA4GryKpXUd02Xfr0atPf0qICSwOTyCSyKlApdEZTBabw+XxBU2QfVtW2kZGEkukMrlCqVLHl056nX1kg1anNxhNZot12l4T3Sz94OZvCmrpm6EWzOO/sUI5OKMuh9GA1RCMoBhOkDc92yfVum+jBEJCCCH8JVTRcvQjuvHacIx51QFCijoGUCm39YS/WGV6UEn13G3QV/2yerIJPs9RGfHjtlqa0TrcbhlYGa4EDASBIVAYHIFEBcPE4vAEIolModLoDCaLzeHy+AKhSCyRyuQKpUptp9Hq9AajyWyx2pYTb43ibYuZoW18fYFhzwADQWAIFAZHIFHBIBaHJxBJZAqVRmcwWWwOl8cXlNdiMzLdcHO5tQtERESs9D8EyswKdbxie+2Nt97Fh0667c5yNyWIiIiIiFg5OHC0v1xE9DnnELmzx2sJwjRH8mxvzJjmW7cIy9EYFfIdOdiW5KXio8QFCw5PIJLIFCqNzmCy2Bwujy8QisQSqUyuUKrUreX3Py39hb/941//xc5Fo9XpDUaT2WKdtuZ+H0x6ypdXW+m10euc1oNS94lbOU4zbgPmhvVPxAlnxA5bZmAVFchhkfjEt0swYHYSJ/sdkJ4NIAxKdG/L8RVjqiHRkLGT3K7cbXvstc/+6cBfjII6FVrciNJhxJcsP+h7sKA0hI6+CJFTVCEZgxoLBw+fgJCImDUJG1Iycipq9hw4cuLMhSsNdx48efHmQ8ePnr8AgYLEiZcoyRBDx2J6NWgayF3YbY+99tnvgIPOuxmfOPnsy/T1XxIZbKPA8DKBExXk0YGdOUiyoMySOhafZPQphEYWHU18HPo0OOmEJOOZHxQ92JQ00NGDIeGgzpAHVMZbCKG8+2aCTwryHOjJVuhTD94iyTZ+BLgt63xfzyx5JeOSQmAqqhzExNTnXdHmw5EQHAmBAYNkkkneVzJcz15T7ZdnJNuJfVyL8Qz7QYbJJItscsglj3wKKKToiONeY5SpFXXUf76FBEtHTsnB+ZX1XRXXuM6NMj8rGdwBE7UAFAmx0e6zBbsrtWp4KHv123VBTvPcmPDS90bvuf8murTRpZF6vdSmNjlJNPKB+/RxaMmdXPc1r2vcsj1JqKUY9V+9dglxCB+TP9JZcgdBC7P0B4kkLgirWtPuXaL35hI1oYZ9ZpeMqfscd9nLXZRSAoGCvM2k5q52itHFyVLZm7GYckSda7ZFBcLOQNb+mustnq/BhUYziMEMYSoaTTSzng1sZBOb2cJWtrGDnez5r5NmHMWsom+vRMrkITCvecNb77PCF77yje/84Ce/+M0f/n6dFoatt9yBSmXSzR//1yySTUms9CKGYlhYbr/RxbQ013mtGx36a9v5iLEjyO9+rqoFxYwWCRYEaVCS4A0InZkUpycmXnBygj0lxtAHD+lR1wNEQaxTdm1E9A49XzPQHEOEgWyql6utj9XwZ3wIB0wOBrjKkhevd9rRorH0F1S29NysVy61AF3SLBlZWqCKBJwoxEN0VTQ4KI6V2l3aMNmpFL2mU0sCxEDfVFz3o9Fxd7LaFK9BlrShTr9AIzKbprfUbYfTZAN2stJqmVyhjM+xvvjqm+9++OmX3/74q1Wbdh1TZwvM4VUXUQXBCIrhBBmmAxabk+73U7StbxVB+sty8RLRGtXAD1gDgWAExXCCDGVI7VS/YmH09PT09PR4nucVCoVCoVDQNE2j+7/TnjmEFStWdpXHspxzqX558xJZAvFQI6N3sCyhkSvKs1Ai48Rp44J5uWJabNBaSXel0J5YprL8yNgDrJUJXNSY8fZwxVqIUqn5dCp678IakTNm+UWULueM9WO62xoelv9ozcYeWuaJVaXEtshSmsaFdxtlEnunlRelPR3tOin0rCHAgAaBIVAYHIHUtefU6xaXL9FUgKsCq05gB4SgQGAIFAZHIM+rz51Rd5ZznOcCF7nEZa5wlWtcP+K6f/bQXGGWRQBbvKkrlwXMv3rrv2tFkqgw9blJDFfrG+wBP1RN327P5mMRFubHiGIX2JmZPKBBUubHVWiyHPb80ct0n5oQ6fhagF5gEBgChcERyACyoTLUHU7LCQ/rH4/GQLSMeYLKIEsWNxnhBqfNxyx2YgKbPYQuDJPcYpnG2UCdk2K0zHZK87WZJErqz7GV8QJZZy6D2AQBQ9sa/mccyfk3Wgxf+b7hUkMfiXFSHs8nxktxQddpgMDgSMgozFDR0DHQJS498eIIGQEkx9Wbexgtc0sDrOdfyn39Garut/Sz/JTYl+/ZUqSvBZ9I4xhFWpySdnXip7ifmxbrYP6NDx1BkOhsWJKVZClZSOYSXSJKJIksMSUaYKKs89lTOQuHNuKOsK8xdLKWVrUwkU+uaJEu3QRRHCAgKDB0eCyzigXBQ0UMZJEgeplJsC/bNUJMMrx7gyIdGzaMOH7NK3h9SvXBITBYrLMGWSY9hJDfL1T/2SQFB8yeMMA0QpCacqVMhBAQ8RoUEPLBDNpugLwtKhzwYA76wagZTLC2aM/CEDJ+0ZCRBTDzGXGC4aJCCBHBYx8NMEykCIKMGRJGLo1goSCqG0DXEI20cuGY5eIEOliU0fYk6YClFgE+zrhA2O8wyCCeLIQRIQT00yjKVOMeKwKVvfhIqa67wxDFdDx2mfDRIoD6EJZVrY5rYiQrfwWbyW0l4Nsb4RpVgi8ZxxiavpexjAvTF6GNN8WQ/zkEo4zxzXc//PTLb3/89U+/AYNMARREhBvuxo4TL6tYHZVG5D1AKvv0ZsiUJVuOXHnyFShUxKhWnXptlZdEQWaI1tef6azzziddvvmlRyiufUcE5awZDay9XDzb0eZgevwTwCL3gvQJ+CJZ/ZkYCUEY/wze/f/LoPoyr9sALgbkxzkOzNooAfTgiXDIT6jXvOk6TBAiLwyudHLKQKIUafIuqkCtLWxdGxoY0STPu/P0IOAUnI6rj9O3FA88MfCb5I+ULRVKJVK51E7qJvWVhkkPkd4xeNfgE0NYMrnMTuYix+RLfo38ejlHLpRL5I7yKPkO8l2VL/8rJhMYRcqNr4aoSJI6r3TFFS6u6e8f/lrvzIMD8Ban4qq2U97A4wP7JL+lLClfKpZKv/VN1/062AXlyrINfIBz/3+7H2S/bz/y5n9ti391wZpf/n917SF1/9Td/OVd/oZ4yZd7djd0g922rmRXU5cf4Itbl70L7pJ3CZ79A598twgQcAhwQfxeDQWzGtuxm7Bpmm5AuWKqQbluGmbHHJgjKH9sTs+ZOQt4xadzrpjwgTVw3/H/Y5Q1IxQcpYQ6600TI+dUjawybeLsk2TT2PwFq20BhIGJhUdOQUVNy50nP3rB4iRINEyysWaYaa55lsTJIU1TErWRQbESq5WpYdSg0U677HHIYW3OuaDTFbfc06PXa298yiVD7CaFRiwuZ+ZcjdbfhpaUivybHL+lbSm9aIVxW9Oc+qqvLHZEFJAwQaJskWAIqIjM0FiS4BMRc2HPkRO2IBFChIkRnle0ScaZYKL54t2UI0OWAtnyFVqp3DobbbJVs1ZbrPG/U445ocPJkp3x2H0PPfLWee+R5cJloshjbjkrq1hYgaMU11o2KgisZ20zqUpCG9iqZaeeUh2NHVxt46CFm+2cNfGwm5e9fOznbR+dA3wd5O+IQP8JcFSUdqGOi3RarLOSXDTUZUNcMtxVI103wjWp7khx23TdpnhqvAem6TLZE1M9M9sLC7yz0FKfpftqmS/oioxywxh3W9faSttQReVVtqn8CipqRSsrKa/cpiqsWJpXZnlujpdkqizywWIf80ufd7p88ymziUjNylOkMApNvc/2BTzG7ANKJWebUd7cFXVzTudOh69/p7J0fC50sjO48zehh/8y3vqhAh+OwXj5gcL9L8/ZFluvYYb09oXY44mUJPg9lR1jLeEjIZVBAQRpcBURGJZZRQyxYityQL/HLZ9ecC1dIgSX8XLrcr2ZEvPbHNSMmG3sSW7mBTdwGhyj6UUbKS7GyuL5Il7oVSSuuOLWNxLCC7+rhQruDZEiLujTE+5HlDfu2qAH/3ck+VdpiZ4Op0MKh9525l0nvz0Vm/RB+eLmXWNocPV2cPWqyGA89mwpfoTPXCN9hIT+F2CG9FhfSNHCTg/rdeXNtUCLZFBt24bYqXFKeOUJD1vNlqpRrkpp5TweW2nauuoxn36p9lGJInHhkX4BklKcVuSBIUg89qDIzlM0R8mcsVaJSkVhrDGhmM7iyKGByBoyvJNfWN25DKfkh/bTTqTw7yKRR+06Sd72oTNxol7UKsjuPelGJZyPq1UUQZl3C2AdI6lQNicgjI8WiUczonGS4tClZEDQYoPTY5J+HQenFCsKzDDIb6SgyEuQDt0dazVItVpRSKMwhEJqYyQeikMpqehH2oCiNnAe3SIbrSQ5Pw0NyLeid42xdgGgZoEMIs3u9/QF4LLOWyNW79iKJjJuZPzTM17RglMBKZPvOwcfSXNaIUfwCqzxijaedERWwzFJv1NSafOCmhxO+BDJpg4+fPOZTAZ6jfpU5jvkTmz7D18fYsY6ye3qIYPTfledZQFRdbRD5ZnG7rL5CFYZ0aqAnI96HrtSEnfpUfsct4ZWvpH3IdOGcDDS50KlyTEtCFaqaKoe/e2YASbIgIiEQ0GCnj7ffCxkOPvm6ZjDkIY56kauOISj3Poi2AtrC865wSNvdaKavZku/8XWVVUFFFlE7K7pglqb2li0tdHOVns7NfY6OKi1qnM8E7EuRPU/KZQP37ygJvoMlIH97DVUNH/6+1Ujf78WYoGXMcQnUT14WLSBjwxNJBRTCVWj6lSDalItqk11aG1yA6CxVjQsDswVtLIVrT5VNOkDd42OcKKG+6gZVhwDGMOQWYnrEtXrb9XNwNGE3Wez0cmcbSOOh5kXf+gf6ADFdGyW0Z6bAU+FzsyxAJocsksThRg167YFug+AVV7Kep6JP8wPkgXQYCx6kpAabD+alqjPNhVXcFGiarC1fI2ME72OWqcISaBMvUuPxybTEX7HJNxyc2UlyD91RxVvQKAM5hjxQGGSWUvbVVXe3U0DA5q0gh62cdS0ohR2MmIK/JFOytmt3yO6GpplOq8W1CXZGYVICXJURv6sAn1VD4mOzUhrEIZeyDP2XiWrZrIeklxV9KEo6CzIMorrxqUUjmYrUyGDcwYUugBNqnrQxBDvMVaFSJFkDlyucQtPohVsVJ0jOzVoqCT4DJLSrH9u35tU2tQRkB6JASOHeioJUzLePdobX6MRa+QHHSKFSWNM8KLh3bKFabCmo3ND6Wbv9qMQEepKDxc3VeWV9ZtkkB6iQBw3D+g7M1GPRus8Eu/uSffTe5yYrvkZr27kVzgFN9HbwitwGynUxr3OM63giiiw5kihzATqmqGs9GSk5pnc5EWV9knUsk679BpZadUdWGl7foMYOzAZDklhL9nIurGukrAqIroZgc1dhWi3BR4SVko+EEV+uAv5Pm8UCG51reZdDPtyP/WADGgT45LUJ+faekVPrwd0KKgxSklVlPEM1owPgq+i5yhmAaymT4jNRtrSIrDVaLWtndVtWB27AoAzehenhwGszESBFHcIJIGU9gBCZSBVdQhUB1o9aoodzBoMfXwmI7Ay25G2kNhjICewdkWChkfBn7woSKxDAI2IQjwBShKvFJmE9tbZ0ZFsM0esihEfZ8hF+RHAmwoWI9Z1uoCaE8mCtCnpUm56QmoAcI6InJCaT6RKsaRiTcWWin36XR0FdBZYXlSaOzVPat7UfFPoL84C0mOBHv/wrw61/1PYKqTBZV6ssaruLqUpuf1u/puar3R2ZR0I6kz/0/bLbb/qqnVAzgWT3wGY+TOA/q+guQCs8gmDddMAmZ+DQhH+qOys8lsJAWun4rA0f+SPNHASYUgpDgM3oTzIWXXbsG7Ko6W62nrWWg34XBtIqFjY+3uOQd3kXQrzqIQChTv3bw7KwgCoAWlRQ4AssSEcoTeidliTVuISeauUKUu1GJ0oAFdYyQe8skwlK+98HSYipzk5EyrkXLfxagZbRPIviwXFEsymUdNi3AZqZTo4AEVJODjHklOi6mZMO5pjjVPrb23c3WE7hoDpM0mSz4V49hx5d47taRrbypte8vOSBWaNQRESgDw0mG32x4DqekpnXkfOVyuF5+d4m5zHSgxyyZGvU/JAEbqsOKhcXf3ODczRXvXbpEtuL5Ryv34JI17WcQjmkgkbDGgLq3Ht21JcvPf7+xDkWXJIEDUwhi2Pd3np/e3mRqzx8mqDVcKpPmGQ65R15ze3m6fOMMe5U1So/Ik5iIW/5SK1z76JbetRNAdF6I7L3AzEegv2JBdpYVJdcxXaoqu2fXxgs/zVgPjPVcmVt5Uwwsn7J2f1LSuYcHkFtF6mYDHPzHudpyEEBoK0PYamPWIOdJlCRpZfrxWrfqOEyx3M20S+QRxiO2oL9keS+8lNXS0dYakgGj2IDuNW/C1i1gk5nYMO8hWyR8heLenZ4EAA9kPZt6QYfPQJoVbkHpHGj6vBMkJC3g84YKU99skLFUZ9e81ARizNoMcqI21dm7mhkRJTmTfa7pO+huYTdFh6Z1WeGn031EaeQfFYCRjVFo1TKKIgosTf7GkN7G33dttNkYcrKeQ2ZFikxDwgD9oOzlnG5v5Y4i9K5y5Os4vmDzCh+Dk1seE9IVLS8rQlqN6nHeIjqpUmGyHlGTlYscH2XoDVRHzFjCX3jNpzmpiSbV15+E8V8CLn+DCtHouXf8zcxvEIo9cwhP7cZXpBIIvRNa+FWkFYi02wIeQkvRWsyE/D0E+1mxJKcQxhBZC/q4ZLrYewZU60xjfdxlUlbrHVK3koraTqSk4TB4hGsR6O2NtvqBjbQ9TQosHycCeOGfP2zf1JkwdF7hx+RBo/B9F/FbIaSls1MeEhxwW/XaGKvs+5ziBWuoQ69Vsz1X4xp6HceDoISaDai080FLC6KCk3GymsXuU6QEpSPtUgJj6Xm+Bhnz+KyQoL+Ekw54czKGfWWTcvYOw58rvtI9VJ+iarT0A3kGNH3SiEXUrYFXLuaqjJNDFYq9nG5F+vXqkKrQbXhs00WtFxVkEbRuhjqaovludv1+VWQPEUOueEuQevvvQ0s8RgzhMgyVLURzrTijKXXHfvxvIt69MRlGMoiJ3qaBPBGpwGRV4+8I+DKhVxlCdwOQbRe48VR8t59AdTqQUF7GfED4eUsD3dwXu1dNdQ0k7Qk42Dab5mWphR7sBlGxgTHwBhq1veGi/EU3ZKW+v0VBFleakRvfdciJ6OI8/5xzgb7clk/XJHss8pHzC36Zw25aL3MBfnjwETqzFRrW+zDO4MdRc+L7DtyaotVeudq1Fs+bmE/Sb7JSpAVwWwcoAjBzNbjDne36LSBMrLK2+wbkND1run/sNJFEorntPP8J2gyHSrFUb8iM9JRyTi4G9UUWCCxdZg0Aim0JKkqiaKLcQzLw5ZCDO0C9vsvi0a43QFKGcIb9SnCF6SbEploIELknxZEqZxM8RJlv6mDyT2lohjKzxd4WimVJ1tYWyOw6ihsdYcram4wtpaAZd5ybHADI0+WHGJQqkHO6H+6dThlKTGymRxMv/Aq57ALq4VeaTaE4HtDt/bZ9gwDRUmGtSGpkMaatZ6k72pkJJb3pKlLDAo7DM6UrnHXQ8NmWhp8Rzf5muYwdlSQOBfpCd5jqOXpOJ5sY3GEJtZMRDUsddNGhpujPNx4+lOQ2jOCqNcCLEFAdVKo5n7Qk+x5jyCLPWdZ2Uu0xnr3khmrn6NbE8Mao/3XAx6EWo1D+tFSsLp0plKrEuvwuSc8VHLhM3JQGG1RIPlUt6q9DMWG5GM1HstUCnK2QSpZhoeI82moLneMKQ0NpRFJkIWKSwiCBPGPlKU14xOgS4GJEXCkDvaMVI7t5DVolcrlnRlc6PGXSGWNfDs1nKJD7+UJBwZa7ZMfdmUY7nOCH9Vxml0xD7PINOl25c8nkPC1sc/wXQb5cPeQrnsqqg/wTzzEVarPYYs+S4V40S6WsdGrJnjLAvhdh+bfUBeEi39+GHbv/mP2r/4Tzu7xi++9JzexuA3OQsWw2jCIX8W2thcu0y4tkaD8vRKfJnBXK0ObxLFDZUqQHQo80olxGqGxfTNYDKr8EVHEVc6zw6lVsCzZDabbE8G6oGj9Tyf7iFYAT/AEnUTAGxPdxIxYNQ7CBG+6BJrTRMCu5zFSq4fObKzDN2yD8SVMfA02gNspbVYA4NYq5lRDr0Y25e7Chm+L2wLDMhC5wX42d/Zush+F5fXti2w7XaBs2/LfMctpliX5BevxVScX4E79D1+5AcnJI9JzwQer3u1UQ7VWWwJvcnGS+NzodDpuNQelA8S4pUrsYvxXdC/UkHQMBI7ks6IHrOMlkhpg1rnm6Lavz+fU+XBcwkyXlOzK+k5QJgSRJO6rrMiv07r0ECs7cmlPllVkCslrPXH5RDjw/aYuOdG1GlNnSnIXIJmt4sgehNetKnMJ9wM0OSMVPbzPtj0fdkqbpuVLcZudl6nndetYRws9RpUSwjtA2IOZK93JoLJjgm6PWUHUbK+CN9zTBHtW+arIVgHlxODTEg3ho59XImrKImkmEzZ8jOSLQCTLouVY41JF9o0N/pWVMefrl0SMc1of/fjmUQv7Y8ZccU1N1O8ytCIs+H1LDC2cyt06WRN+fGkIPSXoDjRENZCgwbrzFRPejiLDS5pMlSsrxcZfWPKEZo57xQWxFWmXl5Um8BpRDWS8gyEicx0zo0TdyRRf1JjeE762F6Hpmu/4ftUvZNUEDEXDXJJVG20B8onVxVcCEf7XKk/IQ//iMecZ5c6iUFHi3CLzrBccC9rJ773J0W5Y2qBvbgwjc+/7Vpyn4jD/UCL3CtS682dc3QPCsifuUtErhI/5/zCXPvm5bRxFz5M6FEsRq/QptKzKG/3jp/w95yacP2CjvsuiBpljQ31IPFr1Koqt2+c0c2h6Bu5RUvu4xgkQPxYs/c7R1zj+8+QgzAl1EBxOj9RvaI4ROdf9OQeqccqirm4ZHDSSoGrqovFUvZ755pCu5UlyFn4Be4rMLptyZxq0sjX2PxSEVZqhKZNYGTWg8iCQg3BtecTPzm0AQqU5otgTllwNUFNFvc6B1lJAjFk5JgYcXYLsubSsmV5QFYZuEb8ODtEmk6BCVmOVTYD1KDWEGG+XhAW+6lk3ZRPP8/xhP2w3h1jXFESrM4hRexrXt0K5OG8ACXUwHTFXv/Djq9wY4p828nYFXx6w2lUkoam0crmnOp/GNnkx6vCHN9/33erGGefzMy2Ia/oC0G1RVO4rZCHskQ1vuvifRD/S91VtvzUO66S//8d+venEtfSLan2zQ1tny3+HIRP4zq6Ws0QbGEO3aqFaSKBu5WLHlm3QfkHj3staF32dkAvF4kMKvVW6UJ8fKvffjDZbj+4NRAf2zVUkBz8KgCbEyNrJ8ZHphPmAHRpsKBt14A8Ez79w9jeBtPu9qRp917X2LBvINKp5PTZ7ZyBTlVkgOxl20N2TuHvUrL97IGuv1n5xZnQGTF8+ozbeUnoEn4/zM2GT7/sNv+/oKFAQB3EN2/y2Q+0J52Hdgax4X19xa3Dv4cC0c6J6YmJsdVt8fgArvGsgzreiIuREvKFqLsavMfiyLN53qbTlLHj8GmM4WRgy7jUKSVvPt6nS3G38E29HS0YjwNKxF9r/sL+NqdhdJQf53z6srlFuMNLPnHC5nTS2WnOhzRBUxBXuapJ308bSAsFoea3GMPG7+9CsWpRh7gJ19voxvLH5Lgo21jmCV1EWE432aPOOVQZPQUTNy/cuDDROi/ts/2Oz/elsi7lwguysV8NdQdPWP5w4pDQKsBKfHxXwHMwmYw4afEMbnCXt4URTC0fcjoRYx5BkmoZYsQ4j1kbSHRQx9AOtHtDZbx6z7MJf3yCOo7ibJpQxGueem5eqImqcTx63AnztHzo1xDye1dOXqEDcCw/Pj2JR8f5oSj/UZstfmpDkXEBanxUvat7n1t4iecq/t7Tva9z56MqbRjqUIMXVCfgpEEZAAB2vxk+/cAxWyQIK6S8cFLsWl3WM2kEAIkMDeOk4k9bs7oJSfZM/wggUjdlS/uDqs22D2YefWJyfNk8kcx/BJLDp+84Z4n5YRmoTSBFmyljU6UTZdgSRKOTSEANupjfmEnLb1a6eq7+t4OtTLy5Twg0p2i7M4xmnVIrY9XPnzYUT9vKbA36LIknxtFpY1ypN6u7/ESEnAPwWdS/nWIHx87mmBVCoT8pkWfiZ0fvsbguCI3fXDxD+MbNFufmxILKKspcgzzRJFahXYZCcCBf708skzlatvpdhzrbnfu3+1qjymaOMvwIdBYQhZsE0I3Y/9wZ7tkYAZf5Honb9/8AnSGPKU1447BMPxJ+EXsp6Gkwop6G4EvYi2FkZFRWhyuae6rngvljc/fcU4TPII57V0H7oIGd0Cqo99VT49vr9tSR676YeNE3cjhtR9rQl+HLwZEjGTsySH/OvTIzfNh+yD7008zcWqbDnI3633ZYsh1+9nWa2k4la6lIlzO+NFN2TcsAaAlMpzJFKbJ4T3uYG8S5EKuY3kA/WgNJBtVGApH06G282kWlaamGDkfrikzZNVfqpXSsQWEMU8RKP21LWogmhjG1LAlmFc8fzaGA39ZyL7yOv660hVkKMCm7+3VU9ZpHNhUFhXybKq2c9EIIyh5RSAnEkg4fXuZl7sgyRs5jzF6nUIN0QKoBo1HV36HxB7SeoJFLNupoLK07hBrdwaVMvKEXBPrNZqC/FzQExyO59q7tEJNFBklkVCwmoyCZzIKYO7pyrBONchwuE1eHRzog5YDRqOzv1CByL3MlAzsfyTL1OoWsAMmwtpevBXraUhneMqSF+hEj1N+vQemO8upylActpUMNFbPimHrOQprWWiZH5cd8XmTpKIL4aAYKwygQMFADhUZHMqCqMf20hkxlsbiSIkGoGYsWDp8v4qDJTXF/sG1eC6+1Y3YDbJB0+TLZS8MbugF1n9miGugGjYYkIE+CWenzl6bCLlTCfK8Xy9cNhjwnhHbV2hKqEYJwZfgGkKFi6ZGbvryVHPCiRA73gAa3CPo7YXAb7IMRu02PCvx1tV/J4V5f7zb2/G1k3LHH/tyW34TzmAAGy9LEMccXW2zV82TIjydLGjwb7FyWzcdW0+Qzek/qMI/HsnrZKgdrMZO1jsVex2IubqDSjTSpGGKRK7/83hcu3/WQvne+xRhuV99/Ntkp6p/h0+Q8xlnl5Yh8rV1dlYm89X0Ki9OSwlxormqpqGip+lXsMN/GvjAheqpS3JLKX3f4N2l+cu1Xcj4msNv1BgF0HnvqzLlFH397hzn52b+D9sd2p3DXdPXJ86W4P63D14TZYsSsvR6ujLc8jDrQFBOi87w2UclDXu52SXiU4ocOr5xwmSdNwv7bfZrHSNDtMEU3YKELBpnB436uMJTo6qrE8tZ3SvROSwrv7RJr/p4lZHeHVyDzx2T1D8pNrZjqhIcHib/VMA0PdwNgv8Wi6e8B9LlNs4qfBNSTUYmEhKYwCeC49AGzDjTur3QLIJ7IfnGPHzCurzr2wraPe8Hvlfs2fnJfxyFDJIp541WKhkQ1yyqfXrZ3mO7rw1E3Cc5/jgs1dvqpakDFPIB7ZcbrKluYpQLbhA8/C+FJXjHVCEncM6CeU8hTzhdy+ZzvWFOMbkg+T5uyk55o1PZW8WRCWv7jpObjy9SN1W8vO8sYOZdKD9RfEIug2xFKaH1QoumqZGgrKFrlr9GnkQk6+OvjGJo/NoDDh0cCOGOy5wSX83IZ6YOU7Y7KGBtsdvudMSsOiVkfoVJOlJV9JCpzVYhFKSnmk2ei26cu6/5x7Xkv09sdwTXElINs+hUl4ViTrUwnZVa9mBw5UUYD2VIdiIB/Yrha0tgutsLNTIGJRXiic+ho3oK0n88aSgGjzNDmn843NOgDDxqSG+ZNhBau8a15QGXRpX5hoZ3NrS8QBJv98SKsyw7x4+04nA7ElDSKUjzxIQ/Rtf1gMMtsKEfAR4QCA4PwXr9b1Bjz54/Z/8S7uAsDYxiz/ULb7MytrpWrZPXOV24RHttwC4sMJAcGGa8qtkl29CxXHeT8Z34v6Sk6s+xM75vaq3H+DUIavzyYWvnm+b5tnXs7u9UfOhDdODDNO+HOAnO87BT+QZJmbLndTIreiYWZX5+Dijd24fx4SNzULemQVwboEnACkLp/ly9mvq60hW7EcxL+FXhbYWfpjYez5xaQ//r1EF/lCtBJM7ozgcSsQywHAg4nFPPLtfpuDdhvQMG+bg2sDAm2ZlqjH7u0/QMKu4IN06goh0s1wFQ2C6ZSDVwOFYVpb/xLzu6ON4Y5hxQkz/4wbob5WiS7jVWc35amqWqprGiuqmquqGwZfSfAMTLodpGYbkMZbC5A+ndhbMQ4cROoLwUYX3mLLzvRLnuLvwq5FBS7mGy7SMSxuxjivIfBQdzPHaYIpF3Tya470D7wlb4/r3+v2SFxmPdiez/YWx/GR1b4kYPt7RGnTCQylWEoD4elXjV3yOlUGDJSmSfH8H8QM9dpu0stOyHtaYLUBAnHOqKYOMap8ebR1CprRluKQdEc44PNg53NckmfH2sL/QR4BSS8tpMDNs9BE8WICQIgvRDwKzUCr1COiPn05QLR1y6JComvmQvqwxyOgytROpWnzX5EJowmpJbJNRGX+fLop03BpjWuK3fHa2V4NClQBbH4BisgZ/xVCzNhq0spMHBSW+VToyFa7cmEjciHWwFRB6SX93RqVsB4c0IKRMqH1P3AUyNRj65RKPK5mpdBYqEhvGLu9FiLUiOPiYEWnVKebNfYAjSwNkwBHEaApqkPk6idmlrD8IJoe+CieV5nvRCv7+ZpAiq1vvmAVmrj8oWuGA9FYzyhi8+ROaCD+ia1Cgx083SHZBo5WwiK5XJQLGSDcpkBgbUihQmAIDOgECFaHRcvxq1tYvXRRnNCqo5UCD3LHqWB9Z3cqLTn18/aTgrgNBpoqdp2NhhNNcS9sAECUUQNmgxQCzLzPMF/yPbGyfjc4e6W2LIhhI43dauVXToRsS1+7O/RbfcK6gu0bVJZHDYAHV1KJKi1OLQ/OiGrA9KVSV55/F6qMF93DFKfuqN7galbrerSiWo7p9MVWhSKqmnz90hRKJIL5fBbGLwooTai6HW/ZK4unSlgNTg5elCj0gB0Cj3HzH9RE3rcDyFSrYv+oKT0Gq+EWkZnUstwpYXvC0tf4lvlsEIrM8kY1eLP8SteAtUoOf1aBDgm3fu9/1uaggYcGQusaMhedyqx/lQpxmxqPNJ1KhYSl1JYdjlWwG5w1PghFbi3vMa2B/aTPxLpP9Xad8qinWHv/qXrOovP0p4cSj525KRQ76C47J1xUTDV4B89FVOzzdoZ9vZf+kh8bswMYsf/S29Pq4qVV8SqqtwV5e6yjAHpjZmBG1WZmd5Z/M1eSFE/tWnyVVfGFsQYK56pbq0sPyorr2z1KvA3/PiFzVk3+8hBksifn5CKIZVYCiqFLXhRoIWv1bRyJUEQVvqTNP3cAPNTG3d5hZvKYgQ9VtVaUdFa9asgbNC0cKVt+xGlL0nfNvTIIZLIlx+XijVqiRRQEbtosJlva58n5ibVL39Uu4FSV0fdUFu3oTTtsmRD9f+mZ28ccFPhKcmkiKQbdudssoVP3ZC7XjspmRJT9AMN2RvRdaSZdZHDNTu2RI6RX275QR8UtJBenozseu9cE9lPnkEzYzPykg/s6h/ApbHsQ1g8+3msuOAJz6NDhynNTI50DbGK/t76Ae96wYlYLOJUPoBl+YLtt6amoMgfzKonrt9KHciXwT417YPC6hvo0XrkwDavxULc9rieHPPf7qhq9aNu/MxrQWQ+MrmFWrEpaM74xt2whh+EpJ1Wsd1CJvv4kgMXSeR+avnmoDHnG3dBIz8IyDvNUrufTPLRVcqooce71h091nDsWK30+K54+v3nZj1YJealiPd7k5VJz+y5Kf/Ay/ZWLfD22ita6ltIGf3i6wsj16vysZjo+iJI0qrOk4q+Cf9syPaTm/Vk9PofgBaF60BaUHf+eKpUNxR8WnyxyNO+2tDTvlj06RT/1rInPVat1wE9Bkb5K4ZaR+u5Q6/r1L+hwn8QyfrgUtavGI1bqI3OoUrd1sxev8mGzmpemPxcPP3+Aj7VzuJkSdmLmjEtLeR/WKU/fMf7WNPo2VPKmBqYfZQ6Xr8G5a+2iSf9Wh6mjTj9IDjZ2BKF8U3+Bfpr228oC7SNQQQf1bW7z+34RwXMO37u/zMy6cxH547fJxGqi+7vOHfqA5n8ZIxZs14sXkKotYvFtrZH3ObGrIG+lFD3AqG+/E4PcemHIZ/YFHuyzYuzae3uzEQixdqdsgr4vPd+7/0XHI/tjkj1qaYdzZRLuW+4b6dMcDe+9lWaR194K9yaX1CUb9X7y3uOrlj0Seenc+CmH7ZY2+3Fhiv6+/lFhXn3da+L0A671eKHrg986hkdW9z3Jq+s18O5QPaWlB3jirOgDI9WmhnsciUyfCKPVdqZ4ekSZ2XY3Ro0Qux1egNelxe+7koK+UG5lBfERO7FgVnnbB/Wd+W3nB8LYwBQLAU0GvT0r452sSAkN7i7g9kna8afLbdXtC9GAUgiBbTo4h0djaNBnCspuy/iMYiEe6iVMxetvObO4CBBGhjpiWZYk5IjAq6RSLhT/7Wp6m8Biwf7KE/YAS/DppkvVfSi/l3/1AHiUBMPRKMSbkTaVKfSybmwHKya99RZ9HE6dQGT4GxIuDXSPcb3Si/uMC49IBg+7JNP29B+wVLj8Yul78W+txfbC8kf+E48G3z2jO/Mc8HnzMVqFb6qkejXi5eMT/w6+JYs+TU5Mf6ff8r0zMXp5+I3V/n2+mZfOpuXUESCu4I7P/+1KTuhq9XYg0uAkTdC94igVxu20EF58G6tpheZvP6D+Cav/WDWs37Tk89gveLC67NXzkzdOHvjzOQ6R8Ihqb/w7sz1syuunrl6NnG3SJXre2syOPnW46fmzdzgj0FZbtOvlZ8YWorKas3W+XaLWVb1Q4azuA9RZZ33eSrFfbL6slP3tZ741M35LTfmtz+79rm15LPLIa8V4VK1cB1DYVH8vNIllWl8uy9nmhapY8qs0gdTDvHEtrrtxNpXwP2NdTU711PrLruvM9fXnayv366nXKB4C0r9NWnP63C2BkBXiPPlFU+p73dtt2sQisCxRE/XbnJbhUuiwUVcFF3MTThHre79dwCYvsSR6zaXNK9qtQODnWoY6QRUg7bW5lWmEregzFGa8JQmHJX2Z7+8renEzI4dDjOGYXSMtn70v/8G/8DIVgeY9YeVMkdt5/1OW/IDRP6pPjhwoewTAVxdu5WguXxuJSGZOiKkhvGvXVIh+eqYOzhJgCeO2yHSIBxo5MsZOkoaozoKiSV5Oq1Cyekbe2LPUtOpyVajn28EqZ0gKtPzeKia1q41qXTGjzrYKJVuEglj1khls3KvUITV5tGO9afi606JZmq+deOcl9XcXka+PfY2pMfsNh9gmWpuIVzYrVv0fpK8QrjN5dwhEO5wuLdPvXXXirzO3I7iCAL+6OqaOfux+5z4/bv2g/UV4Gvj1ArcCx91HHT6t8c7jDMrV8+YunqPNPh3tMgruyReh0DEX+y7FGQLjS6/RUxoUVvcTGFjpQkPetn5cV5t9Q2JLttBWbRn/bRvm6arX7nLv0x9p1/JcOfacnQBElxEBmlUVA1xDSIWJKx1sjlZD50Wb+wUKCOA3tJhqrn3KknX7PfJnHS6YUFbBpVAviSrzMj7343lb67vJCMU68CuXUtdLl4P8/NHEptBw7USPe+8s02CTJY1L5/viIu4IYmUF4yL7bk1gVnLLJV0JfyT5DuyTlgpKV3/dIrsBAfn0vL6Ct3JI5LPm/dm7ecI+7h2VH7TY2L5ZvzwKjKL4K526Be8s5PMfG5a46iv6lmV2rbb794fj7v3aa0tez37vJ79q8WooSmLYToUNqwBPQT2rwmHDNNlTmWTSBYzIBHj55LS2GXPNYRfep8iNJgtZoNFSNv5djhX3+VM/EtXBAX8oELODyWsg7kzJFfwg/mjiCdgiPdADF/6uz5vIfRVc3/xdqo4tjz7CAX/1/x5f+IpCWsgmoiltKc0RdE59+PfpW1//6NKqXjBFNCbUgU9/Vz9hXgaLXyhXqFxn7bQd3VwcZRIsBUXdROIUam+WYAJSvXLUQxNXLNl1B8IWd++gXPqmaw7CbM7b+nMb9kwWnEd7yAz8kwrUORnNdN+6WGF6U07Lb6t7XHT0c1N7fZxoStA71er5h1Fw3SNaQA8fkKp2WSsmOx7Rm0alEdp87TfiYuzi0uCr/ghX28Xh9mCDy0bH4Ev5hSnBKs1L/IvzvNeHEsvNZlvh970PUTjIV/00PfaQ17PIVqtdY1t2maddqSvIayxWdY4p52W9I11epNFlS2vG+RwB+sU2WqzmdtOZgASHg+QMlh/8nh/fFz8X2n5v8VF/5aX/ie9rKzQpxfWBeUjg7Ryd3phzgBJPjwlNZgTZlJa+AORP/1jWrUN5Qr4iEAQHZ/lGllCklgDV6ctwwivWxV+IajZ2Ezz80rq1+zIzW376nauvNQSB/OIzWjtb64gE7qNg17ynCDfPDWe4IeRh9TC8rabZ3koS0gSaeDqwmUY91l7UrXThAuukq+HS47fVJa70wvq3cqYy239zoLaVDPv6eJ/fk2hevEF/1T/9QrxVu2Xk2/fjdp+71bu5a9b3MLTqs7m/U87l2QcENCLMRUIsMEZrNOJVS5ijZ3YrBEbvfVN2ojmjUNnJjTEUb0+k7eWPLYp7quLSiyR3fjQAntPvPdGfxkblGM9Y1yHVWq12tdem5qLD53mdwXamq6pjkpJ8dTgG48sU4JV99oYn9q04Vda9xut+j2tfhC05gc7zd+YvLT+kljR9PPSE874YutjqQwD86R3nLSiz28Hvsk5CkZjqdjgF9YZwCqDWKMbazPHZvd8k0+UiEYvfb3laVicfsgwKW/7xOleJlO1Vo4rD2VOUhpbDUlkLLXJWDotY6ldxubN0Fq3GqyrYFKVOwyFRj3jSmk/z+x2KsC6JmJVk3xNYTQPjUxYpwGrNGKNQt9kAy1BoxdYr8RXe0wGXeNtr828UD7oQbUjcj2m5tYde8MiPSc/8XtXdcnC22VVqObyb0oWSKOHECrWVapL/kpDb4dTmWX7bwKUFaFiVayhrjAYnoyqyvbZnL3TuOEve6NHC++wpZF2maOeMqzvl03UkdYkld+m2ody/U3Npwv7QdNoqPN2hfes3dPUfhCtOx320+JJgAqj96ygNpQMoKwENWvWenxkLdv/DS11zt519D44wnSamBP/PQoaLujN5Qpd5ytyoFEKDvhP9yT2y4SQsQYpGxRtY2+GH4r3pBZWfq+emGl4zzrAiesQ6n1PJABSfiHab497RG+Q0IeUTQFt88js8vBtrEvF/OnefzzyKdsq6jF7Td8cr7H2/xgZzUjZjmg7ELc68PLH7ti/UbxBflHkOdWpH0SE79nBRjlvDfbzQsagprSnFLmlnRjx3DmWShfkl106sr4G5l6w1CpVbUzjR/03RQsK9qvO0yTQHSqdf3ridc9XD3HxjP7UDdeWMOkvnbK+NNVu7cHHf9eGHta91/VgA1CdwA2oBZk+Ph2UC47dkFIpq1qUkklymSkuVLutcNnfZydUqfP/n/nTGRbTRIJy4cqQld00x8nUVU0XVyplsqgqDWrSB6sZSgk7RcN0EC9a6mSedFt4447SHXhDvGyHnx3gi4QBj1ScfavmQRp7XvSYtF/vgsNzfO9z7ZQS6gfNdS17VBiRTGvt1suok5RKWdWilGyUSbHG/LJYSRYzjjI20osqdf7/89Z0Eos5jHjOFXNcCCa1oheZlnVVfSSbaFLaZq58WGwh2KYqU9UsZSzSsRWWoKwJWVfVh2ILZ5C/Zk1SetE02v29n9Mj7dJRtTVFua/pb/1iGlOZHosrSvPeCKaX1Bnn/z9hVYe2kY63np6La5cO2bpZolz5T6p/7UrKzR/OtCNkTijI0unWeKOw9u14Ldax3VUbbOvuAffuqP6UBad8W7vg7NzYU5AZpzK3fbTTzDJxehqhrdRsqaLO0i4dVVtTckHKdemB80vWclBLrbQbc7xEcP7/M6V+unSoK03SLh1VW1NygXJfM+boi5hs5V8uUQs1S4dsPWcP1rYdZ+mo2horVpKD3DFrknbdotf8pwtyStqrWlNs8jUT0j8yMKZ87tHhXcafmNyI7X62OoADSh+7Qb3/2n+S5+1VLhGcbzgBcvn42Y0S8d+KcFeVdTwCclP6q677qwYbAEagPZFyScJVRuF3EMINCp1avy+2nWhgyxCa3AU0H74LOcMAMSMhTQdwo4dig8Z12MNqQ9qEQmsT49efF/P/wCpwUHPN/xQJzGYEUjqSMzXMUnxo40UIoaxRvuDNsJgZ2CfOVtugNeBWj8QeJi75NUGzaG8RlqNHYtXtEwk2X40U95kdYGY7Y2xOv+7G15nYhdKFLcFN3N9eikmuKgk37aumKnMEnInGZ173/aOvIOoqPo6r20N8CHbIcy+635XASQPjMMpwGld1SThm73VP/jD//9vTrLbWFxt7DtZZulFGhXJm+/mEzDyZCCN6xGVFItqj6apTnWn/IavXAQk2MDkbgKcHvTcmYNXGIlEVOWTUm+StHusmDVjBjzpBuimifIZv9EjOLdbZfl7I/wNrQjRUYhRwi9GzjEE6lZTP6HHp5sOTZrBmVkwsWUB5lJHbj1OO0cq45+WP50XJVenthHWu14K07ZO1xVIEa2sKkzPp4myVK+hNd9JKSGg3tDUQprQ+cmBjiKaqq9ygaIlgvVOfS2ndtxHj76HYsAWqKGWk+uBFxx1rvabOYYpNbnp/GyUphpqAbSgfnnQRmans1giuraL/iKAMfK4Lk6U1hkcqODZQ7Yk6TZk0rrFdviiJi+CAXCXUt3Xw6XClB/L7kv8/sLhpzyrjrt8NIlV0AC4+EI+rLmLmhllCIFAdOiBam8sXozkD+ZbI/0eyXlTx6eja2RUc/A71wcan0Fhz5G4FdQJ+KnNqVVc5cQceGVfX5U9gO8WcTIWZYCvRHTUmu0ux7WZVVViiIFAZR+oe/KGhKBotoIcYNhrB6ibgQcSB2Lcv67lgO4G0K3j0JaOG4rLc1rHQ03k2gbvWcXEYphxwL9gFBPOWT5ibaXh6oU3McDuAuLazJpBgQgta5K0euLD/iNylqzyhi7mzRCBPgkJHmy5EIo4gbNZfzDvXDk5bOwuWsrMjMndCX0O5aXoE7xLE6yWw8DDvh+EYUXlXtSQCXToD1mGFoCvIO4uHDNVMK2/leJHqxVdt6V0e6+jM5rL4+zZHk5GdxglNKW7YggFF2bOlPm6w7NJNat2mHjvd2EFpD4QbjXUURE36KYqHtrn2o3B04zHWb8HQapYAnWAOyQ0zoUEYRufCfXx2Fy5mKdZEg9QL2GbuOToyihSbdknsR6A9KXOv/HTzdJNOT+B/NIsUOfW6Zomy7u5RCp42DjaNpDijE1wFKQiDty7W6cZOilN8cfWWvnuQjJ2VTe0+Al5ww3M8BI5v8KuLY6Xnrgqef+Ti+bdcxvPT48Ox06bGQgyEkPzEIpzRk1jHdk6JO7pExDtrNj6rmpa2BKVJXedpGOIiWxECXDlxhJiOL2XgmiQJ+FcxDMdNoFZiu6WCXoBuCYlWiapQAv8ybWRIpm/igEa4vsEqMf8pKobRoyIaJT1ipOCWWvaZSJIQ7ZsBTBSQ+eC9G4wS1MKGpsoqqciegqKeJ8hpVFryHgKJrpTGEhsmSu3weYdPk7S9ZaQHpWDKPkpZiPb7EqHFHtwkxGeoykWCXgzpLhc1Ncxw3eoRzq70+v4GFHsfGi8iZG3JGjlcb/1xCyeMzOh3DIyiXGpuSQldefj5FL/zzsVHH2x/7H6sXz09bss4mJOSddnTE17mWZ9cr6sUXZUwaecBkKfSY8oQmdPVc49SlFojc+BOUdskkDOI/lgWbbhALo5jxDEP0yJ9fItZgPqWoz09Gj1OmAP/jIPicGzHXd1+cMIHhq578RY7aGYA4r3IXpS3PQNQCvYeRSR0BksC2Sy3JkaWBnD9RKlplPaB8pUZzCuzylPvafdoTwx8FSuC/jmt3IpHexH9BDbLf4DAweQISCZJrmNOzYQx7jvFvfHNNDlb1y4xuzDDvALl22zGTElGGN/B72OZQEAI++f6CT4e6yMLjzyqgMuOT2Kqq7GfDdvaTun7TEcQKT3mKzyAzP9gaec6TUcNClXWPXpHLsjnUuWselvqYrG6gWpZb71NfZHzqjaNeaC9mTlit3iXWFRMDXAkzyV9Ny6Uk/d49/GZ55WoRZ5hmCYx4ZBtHLNI4KhTDUiP1irnkRFIRk2VidRJq3Q9NcEDbLHhBUUt9LMLmGtuI6kBuNMTseZXCfzDpzW+dBlazPaNRC9EdgzBTDopWvIoYfOMQ7RhxhmGChjHEaYOkt+uUFdKFzQw6FPliXAiI62V7BxlRHHlGDBxnZPxhfnTVb4bXXzw/tvXYxufpqdWKylYUuNJbrLAXof5r2Klfet57Brjwc/KGgAFHC6VDVpTbDi1tBJFztFxdYNHCb+ZEV49yAfOrFBONCXWEP2NmntNF+XA8DH9Gr7V1tRjedYvsPQx/eDy4LWvczWos5ZTBR9xmlBDtC+rnjd9dUyy8fIJPsPA36+ydPf2yS7K8OEyT0NVBM/L8yah2hpQaifkDEWdG9TKCsHitjzMTLMG6ZmOJVCsz1X7LQvypccmms1m+fU6tPp/Cma79tp55LSxqyh4cy0Muz3E4memPH3fvgwnuSvlG9GrEmf2qciFzuJLqCQQOSNVNcgqiDwStSHVXSFLECZeAviU/V5bRPjPlnVU9fh3YAuJoZTRWcoS3IrFrhFLKFNV4B6Xz/SUncBCAg711BYXrzf3O+2QD8Bu2EZdlRzOFoQZ24RxKSwGTDeBMisX2/RNLJdzStxbazPvm1HvHm+VTkOmzl6TepVMzcrO7iOlkyw9S6GzyRXgU5CPwpsWs8bUNUiWaA08ncl51HHXk0p0YH838DCKoLLqQzI4O+hfrJ9/9AkCwlP0UjF7XlfbLjs2Mardp10uzM+Rg3kux1RlkRN8TwgqnOy3nUch3fHU3NRR2x6kyndqg94v2hd9uFj1pBz0q544ddYSHyF4tHeqlB+BTYkahAtHCepJe0kid19aW2KAxS+xu9DDzV6/r1/b1zz2RgnaVJwkSe3yeIzLqslgeWvHFDlQhnPRR0RVAhcp1bMxI0WK5lfjehCQF3b0WiL6+KBnx8zR0HkfNnbrLqH2EzeBOj90Eoz+QRIGGPNcFBQgvEPgHRVBeEeBe+0iv9tpOmbbcMCBiIgSxISSaLDKqpVf/Itpl1tjcjaB61IcY3lXWWqb5NhAqHaTNqkwNxoBo0MhRhomfsOWffu/p0dnnSRFTpA38tnwOFeg+6PeJ66jT1yErGlnGYeqoXCpXOkdpYo6PHeuudXBTYBmCcpT2WYNID2sYFyuQ+k6PBCje7FLPNIwWhWMpF/jpcKKTXBp5LokiIkW+Q5cpRkdShhbVlTJcOqu3bzNXH8+FRFs48qBMkTJ4B6rEOiSBeFWdnX44oPjU6DNAljPGXa1M/c/vfZakhNbVrtWQBTeg8wK1Z3KVYdCzUIjr7TLtcMAOKkvKNDgvpgoGepC7LO2/LgryKnk3jSsUrVum7su2Fm42CmFhsEdSTuhHjlPEK4DxA8iLbK3bUhGTuwdRdz3vO0TzCYcB+bqgrP4R96m3dtC15cu13SEPjKbSugYaynIrJe9JMxjVPO1b4u67OruYssvTLVt6rf9BZmeIHBQ85eTVC6z81raU0vFJ+8XcMP+CALK82wf3qTRx2NUYFGsP1QVu9TkIdhM1pADOSc6b2F1nBPQ5nKqDNK54pSYZL40P9LYAZ7fb6jZPP/41Z8/uHjr9fDz+HNsy9ybVnG2DJkgEeF9nuauS1t1e7sOvjDw61b2d5YRMyXPEvd10UXOPYPcf7Y8tQ9y7guStAwOli7yB51kQrD+out2+Iq9LHlqkrvaA6lmGj/mTjmm2ne8SPVt78zH7eFSJA8bxXa4NY8Kr87dkPOdDFWVOn0mDdLWnZq93KCWTyUMn7Ko5ARAWHo8xPThMx22Lu1l+2GWHXFaDaPGciX1khJX66bag3ndF9f5Y/kwnZZ1GYqYzE+XuzdIWOxLdH0JxpCRoIj8u10IK2SUFLdBtDEj4BWWzinnkKzTr2mdOTikmcyls9TS9kj4Qp2NHyeBTEdakmekgeuZwGfRI/707hlmelSmEEYCUzfwGfFoiLYUF8GDeoiYuiSa8sPt+2kNaq3AZGxFlsfQzvZoD7sQVmaTi60IGaHaOZ6Gv4od4B1zB2WLUFBHANf1cwGdZqt490M2akINhyL70KCx/i7t5mHyjLuzQWk60CHCNy/cOcs4LfysOZgm9SS77zPcx/SwZv2yIm05HwcT3AWZ5pCDqt7mDLJ+a/Xcd4NJIOcMYZWqR4Eu1OEr8RPmKQvdF0/ruPSxib6BzD5QcVwl8h4/SXQLvjzc95w+5q89upiRUirW9o5wC6VvrJ4272lX8njPF7FwYFFcVxlzWhCOV1Le79WiG+5pwdkP4kLQgrbB72FZ24wnr7d3Vn1+7x+GBy0bQ40jgLErqXJ3DfSYdImOjaKnBsl57xNDPCc9poDyzKf1WzABSt9DGKGBUAsXFWPP2A+MM1YFYYaep+eJJuJzQdxruTVkbewtRb8+EZmIq5Kxw8LTdE5JaLBNAw5iiCLyGGXwiseJOgvtHbTDwVSQ7gOeRTF0hkxehcoTIvIABjyDnh2dpTJhahcya/3R11oHCpibeN8TxqAM9WaO/gA+TeEDKD0Dt7mUARrp43NuL+d1sAxm5/KRxXKch+dbnuao0eX3P8lNjDZlhjLV008nKvTwDOcJok8hvL4SCV40mpMYxTp3ekz7XT6Y1k9HBxpqkt5YswdnyfxBhDKWgL1G67a6Z1TTpUm62qvKhn43yynqhacxw1ge5pwSkM/FOAn3fgzD2wRmyWNDFKZMnzDmsnZyHOC5QQttPy9IX/mCdSCc49GvVc30foSKDLAfwiwuhwi7aizse/YsyOevNxCjOzbWgecuPqPHSga7Vd0YbHd5GxVeJDVvTk8G3af8CaTGeGNMdayqcr9L8Eg+DJStdAtoBPc2NVXVXK6Yl1ydqqb6fvZJqw/VYXpbvYHyo+MVbPKUfSz3JIJAA15bZ9LddzpLeVPhk93GjPq0Vxs+XMfRxVvv9VX0l9j/1P2+jQucY57mqXe6I31/lw8CkOhE7jJfskuNIi6Ly5UGxacBfhfgTf0/HGvHhPHLc9i2ZbocMcnY4lrbt7pmHzRCiAFqS1yyrp++6Hehcj3D+2RTMDI4zEdQeoL3yB0QBydFN2JO3yBf9w76qu6aztlpF2h4kr4ei30KZW7qo+ThKUbMhBEDDE/mgxaJpQ65PUjIj+cmLhrBynV9Irysl3VyVR0lEJGl+EaJH2BdRUzjokC423oDdfW/2DCyQRgqA1oTo97Gn5ztbhhaTHH3nWoafaLtlThEN7MIVe5eLGFTCWouqOvOadVS17M8QKrKIWevfRIE6QdfSdiixAOI6/va/tTPdV2SPdOzYanQ9T5MAWK05UMyWaNYUogORfzgmeNeF9d1Pp74wql68yqegg3vwsDiUR8kVeGNCVHKoACzDG4j01XwGz23lXmGnUc8suZk7qINjT7F6trzcBXAIz1MyyJLKQ3XHSB7P2ilbEl/ITiW1sMlBT2h/hlW/xWm+JZ1FdRfebopzAyREU83yenmyUskS+HzVUQFKWKF9mxpGK4PUpERlpW83otiFGQC1maUJiv+cF1HXTIcvuXQ6fjqm6UIb2O9YuKs3bf/tiYXq8DIWaljZP1CfJlAnmvV0nTmZpYZJiOoLBe57Td1Xyr2s3qm+aUlXM+AQzUbmKeUEJIJQWOHsb385xHJua3PqJZzSxlURB09U3n69TaQemGy4VNt8VifvuDsWVsiOEdcpUUxoY1MxfQhQAgZlPsyQneB76D+HeCkk9MpXEFRtlU/0RGKWZxnFwyKtBcl+OqA/FL3WeJaCijccNNA8rZg3gh0OEEcXmYxhqTwB1xX/+0nzQY+rOO1VfI5SAcNgVfCV77Us5BXgyhIU2uVow4v68YP0Wm0O0ovMvVGvAUmVjmNKSBBcrW6VKWuxhpJ/YD6h7kxkVKj9MmFn6pbNZ3fXJQB8EAP1sF0rRIcA6ikCGCQ6ELB/WupwMBEbSgkKPoFCF2X0lkoqWlSeCAkLFGGkX6Ih05vtbHRN1N6PhpvIkPeuUCdJRKiP5Siqx3ezN9kvGxDPL5SVr6NNj7QyTkg0rmcEzyZbvcoa6Ta6sp+TpNkSXlUUFelHhiSUkavAZu5OmejNl1O0p4OfwFCyEujO0Vc7MxOhdsiFPa9PvZ1Fqypi1/5z7tHXXH8yFgEptdKU44lDCIRPeJ2ofNtiIEh+xzd6jYARKEO5L7OxTIFZaoFlJbPO95tUFeSC3KfqYb9jFmkHdtoE3Icgu9E2JnAi6gQ4Sxgr1P5s2dhLlUEYbws8pE2Ztp3k6ORrl+/nDv0z+NLo6e0DElU9y56k5FPVICPXjSDZ4ChOSpISTNHf9z85na4OE3DKmxm0SZd5WX2AEsVLpVaMpo5Q6+nA6tqv20KEO/v6Fp8tyHAy6a4FmcgvjsurShSsA9T328yS+bskJK/vtEEfqGIbHMEA9cNPiuvIVOFb1Gi5HSqPI221I55rBiEBHNzmJ3VdnOwjxSJYzsi8fdt6iT8Uu1m5wEsYctCQSgHyRVofpIMPzB2PZhGueQw7LP2Dk3q64vnbV1kKIDcJ24dDKFjdPruWeUGPuWSqYcx2K1HS44coJEW+588bUy7Kknbx9y33uNPRMQS4kYfGgPs8sHUYnXbxy9dPLt2hzlaxRqCbDGSRLcn+WwdxDytrX9OzTWrT9rrD/G1HbMLGFuEgTZE2qUhskwdkhVc6GIEeUje+uNp9kApYKtULvo1CK4/utaeaP+5TKhZikU4KWvyaJnR4OcPo6rQhVCvUTyrQrM9YOZFxdJxudWl6KLIe9oT/9EQsWUIAJLOCWPvJsmPmM4U21mWKKXL5EIayLBk5KKILUAPO9e8BUjtcOtRdBuUhuZ6IAXRO6jRY0aA3vmh5NGWjmxcno2UU6S9wTO2PiW9ilYRyTBgUHIq9+KN1zqnIWftzlmnADEdoPURvlAbd7phtXg6s8zQ2aYNoWkBJCG6L4zuk10KgtPUxev3/eP4GIzY5FaXmBOeohRB4IrCJmuNdzJxb3x4RZqwrlL9WOBVc50qc4kbnbqxP57IgkqYOaN1RVi3rPmGyJrXJmTte4nt/ycn1sZfhH764cn7p+9vMvZweli/2n+On/bCbsnZ1wJROpDvyundZLvw1dtQeQfI1s6qh/bk8oXAGF8fKzE6aMt2TENhqMKq4VjiUUBJiC4wiq6OYAJ9lDGcVeYVpzpREHSvWyjEKEpI91IP+XmVFeVHga2JjPUXoaJ6u4g+fbv47JPD3+Pf9atjG0zrdH7Yc5aveJcP6U43NJImL/w73Vz7lKdINw5S7ZjhXk9yD/l3Ur+mLUwWN6D1oYBtwCB/x2fXUyt4hiGIKzzB9ZfFDcCIQsYUOf1vpcBKnOjFqYkmBiIBs/7/qteXfIHhxOpHeJgAHWMcU7GprOCadtj7ss3jvZKs8dUNb/LmE11hFn+DTiVFGaf1F0l+iFCnDoIUngbb0CTbsBNAlrtUnyLBD2dHcJv35uv5cV/nyTzVh/zY2oOJEuRF39b3me2R4iHh0uNIQfejZCtXhPAc/U32njSlLx6noemb45uZltOopPVkfMCO+3nFPx5bFVMXl5sagTsuf36tcKvG4d+dN1Dv1P3t8ocAvYFnqz6pF0io1EMqklWPiPJzZfighzbdgOgrp9/JhTXt8dIehHJdaxe/SboapJtwZQ7fG7S1w2Jtvnls/nHNjwVb70YtEXT+KWourO+v6TAg7SqmHK+r8H95YskirysMk9FRgIT34y/Uaqi0/JR03kxB/DDZxLYdrus6EKuMpPoDnwzF+NeFTs9+pOiiiiOuwyHn4p9gbYp4w+iedAzYwCyjqSOEpPs9vpxxU2dzlmtokoikWnM6XGOL/LzsEBzDYC6ErwoZlt+Ub9yTESIaDUzBvosWqnLYt2sCiMRCY0kpNfiBa81ckO21BuVXPWPcMphWwMoLl7/+W24Lu8O/7WG5/AG5Aj28sj3w73Kwrhg3l8NFyyxd3psVc2VG28ryZUX5sbwA7BsYHt/In2G1EcKO7oS1V25QONtix/ELS6YOnV+RGgAIyBL33NM9XTLeXPEPxRx/A/joxFgD+P7r6T7V//+y4fgQaGEAAf88wbS+sdIbdfkXIdNfLFeNjch5gvC63b5t3lGLZz0zRc5FLubU6o0LyAt+pRDV1/yXy8mHRfpd2xaBCWfCGNEw5IL7IYBoJou8pLKcj31MZIjXcfsPBVy6lhRwzkalM6SO3RQOJmzC127iaP7oi4HEuHGMQh7tk1jHU4LnPMvIJ4XlNe0432BX2olH/bOePKFjoCFPZaUHIdgyclF4ZsdScEZDuWqCUAN8fckYta1xcOnlVQPbYvUpU/ft8IWiIU3rFwOr9oppAVCrTbuhLHz9PTTdJLZwjptx7ZruoSlL6K1PCsz7SLuFtZnNnTMJdPchwD6oj8NYYU3wLbpFHtncZkw8Pl3dlM6JwZnYU3WeTUcPMSVUc5JLYSSjJ0/iNvO+B5shcNJ5DJdo5tCPME6fzH1G0nxPjwkbTdYIvOLxu7WjuXBiqtn1Pw4eUruC4knO+YE3097OQiimTibY9NunD9sCPn0QdNBRVU6I8zhJWQEXT9Fxoz1d8SJdn6EwWhWnR3KozQV3UFKIW8tmkdInHJ/f6hlHOtpkIMv17OwmKm2S+Gw4WWHkDkaIJ9cPDISFI9CVCjrWP/FgArf4fX0yKc5SxUwTh0mzudIk0A/TTr/PN2x+w+U/tUHRnfBujM47fvUlgSMmpz9rM5cppJhbFNFM9w8O+zlFOI/JesBh3mPNaKEDsTu8qc8aqceJ7IwEMXObaqaRzQiOB5dbf2kOKVHjqc7Pd4bHaVH8b3p+cjYVAiaUEAQjtMHhEqEa3DjzKPsswFQDLJupbfphv3BuMxrZcAQYB6OUAree6YDDgDHa4FBtBpAaJ20+Ip53PoZZnvg4t9m1PSHtE0VMzCcRTpxPIR0n30xAnwwN2efThdTpMyKV4DN5EPoWmOjG8vrtg3Xt6zXFq3WducedQFBxkiTaYbP7SMSLkkqjj1dqdCFW0+rCnTeOV+F6KEilAjCdPqi9pvGkaU8N05LWIfrA8QAFlO7nZHmna3d32irCUrTRlA0bwp1JbAmUpbmsq6gxVUtTMTLTqAfqwT8QJJoe4i2QBNFMH3ve8Bd2VtobRR6uHsXQRWu8IjRAQFViWGfGQDc0+gw1mq9IN9v6wOJa6XTkqnbezGQWnE4lzEkF1D+BRrUwpbnNlHCZb6NAekd5aNjsqtotGeJx+n55TX/eAHUKbBFrbZoyKNIkfmo+NWMI9tif0Uu7ivCStup2OlFnN3KROK1IDJsnrL+CqxziCpirJv7aDC2i/cTeq3lATBP71P+TddTWhtV+o8ZF5ZnombR0/ZAFVEGnyTbbImpgieVOr7OWa0lrYAjZDtdM/SFPNSgzMPAB6K6hBW82mtuAOV0Mgwsm2R2OCDDZHusigpKdASa/Kx1U3kZGFFCbWiaiQqdL0eBydMRATLDn4HfmyIIjJ1eydNU1f13PKlZszlzicI0bL34CvdxoEiZKbBqtG1m7abrbSbKx3l77uPvIg2fSZMl5pfDCv2xT8s4uVWo+7mTvrhnu5ZBjTjnnQsc319zSpOVH733ujuWRJ/+8vMpbmJlJzDbHrKT5mitNQ37CRRgMYP8UIr3LPwRR5qcq0EKLAiwITBOUVrQYfwpPL1ac+xYHW2qZJSEZQsVLyCgxU+YsWT2XZEi27DmkG8qQU6YsGblq0CjbfsN8MtyI3HnyGpnPS/2lWGlUgYKFjJZTWJ58uUWK1lhTzZKl1FJrsdqkGuNDM7Q1M8zYkl43p44666q7nnrrq7+BBhtquJFGG2vcae1q1anBwsbBxcMnICQiLruFLWpx+RVU6LjvfvjJkjlrEjsRNJNr0mE5BhIrgRWhoRtnggBBLCp2wEEhzjrnkMOOOGq7HU46hYiakpa3opWtajU8aypV5ARy1tpSWesUK289ps+++I9UGRkbm22y0VYTtQi2gbENbVStSmubVKI4738KZlYosdoqaxQa742CNjtTeRVVVlV1NRmrra76GmqsqWalHuvxzANrPRGqyyPdnnpYS61taWvb2t6Odrar3e1pb/9LXXASpHs6Q12QhCFDaDHoIkPnIOuk54jCBFLqkBiVQBgYlYSQGMvBm660YnCOwSQyRsXDSiH4dk2nu4u0LqJRUAspth7lVvhTR/KlotA5tjCEwCtlwmuWpI+hMDGrOtDKaQObZHLRdm9Xs0B1t4Q6ZXYPcebBB3qq8ZJPD4fp8vlz+oYAIWGpaTgiJN49dIc4sQGMTYfkT0wWDsNkMe0z5+Nbtiv/aZxeejZWXt9cdXzQYQl6AanJ0lOmtom2hUwTAVkof/Tk7hynkEYKKEOVzkK1qT7Jda2WOq7p7IlMeAIeW+6llz7qg8MUTYf5M/ESLcFijVdZ+YiOaw7nh4ALCIcEiEFAgICBn/qz8fBT/6IvbONHJfDXG/+8bXPKK/meCMTAaftNh54MrDkjjkZoMxCezc0PmOAUGGPOP4cmQ2BgoMs72TRjAZRRnloOEjwbmR7YNl3TYzH+XweQ9xndn36wUYfeUDilSs6oFHYecvHhjnJ6vAm+BM59pWNZuokD7H9kmNz+AFovjvNzKbEhNzkU/m0n/d8PY6W0Kq3SJt8rzKbVi7xM3QgoxlE8ld2+6G+my9x8kfWSYhLwutGLh9tXQLcZVj433WAY6x9tQMwql7zx+nDaeciTPdaIg5YsyG6dIJcl/MRoUvzuuHe5/kWG9EVhWoliT/tACsyB1hXDi8JYqUiaC1WZu/xrGMNC7J/O1+j9QWtf25d/5Oe6H/uRV/qY8mYcHB6XfjY/QXjB6gynPjzUwph8cWdt6kpfD0+v02en4WgGMQxB3yjQvljWhVV+5kQrnhu9b4UVWwA0xTXv8H99KEtglbfowVHbgrZ+HlT3DOw8vJJ83c3RBTHxYg/OdPgcTcXvE0o/wIbS32bKSgm7AwA=`;function XV(e){let t=e;return!!(t&&Array.isArray(t.list)&&Array.isArray(t.followList))}function ZV(e){window.open(e,`_blank`)?.focus()}function QV(e){if(!e.deckId)return null;let t=new URLSearchParams({lv:e.variable,lt:e.type,label:e.label});return e.scope&&t.set(`ls`,e.scope),`https://castle.xyz/d/${e.deckId}?${t.toString()}`}function $V(){let e=g.useRef(null),t=g.useRef(null),n=g.useRef(null),[r,i]=g.useState(!1);return g.useEffect(()=>{let r=e.current;if(!r)return;let a=JV(r,e=>{if(e.type===`close`)i(!1),a.clear();else if(e.type===`share`&&n.current){let e=QV(n.current);e&&ZV(e)}else e.type===`openProfile`&&e.username&&ZV(`https://castle.xyz/@${e.username}`)});t.current=a;let o=Gs(`castle_leaderboard_show`,e=>{XV(e.payload)&&(n.current=e.payload,a.render(e.payload),i(!0))});return()=>{o(),a.destroy(),t.current=null}},[]),(0,I.jsx)(`div`,{ref:e,style:{position:`absolute`,inset:0,visibility:r?`visible`:`hidden`,pointerEvents:r?`auto`:`none`}})}function eH(e){return(0,I.jsx)(`div`,{className:`deck-panel`,children:(0,I.jsx)(`iframe`,{className:`deck-frame`,src:e.src,title:e.title,allow:`autoplay; clipboard-read; clipboard-write; fullscreen; gamepad`})})}async function tH(){let e=Array.from(document.querySelectorAll(`iframe.deck-frame`));if(e.length===0)return null;let t=e.find(e=>(e.getAttribute(`src`)||``).includes(`edit=0`))??e[0],n=await Ef(t);if(n)return n;for(let n of e){if(n===t)continue;let e=Tf(n);if(e)return e}return null}function nH(e){return Jo(e)?.label??`Visual`}var rH=e=>{let t=e.lastIndexOf(`/`);return t<0?``:e.slice(0,t)},iH=e=>e.split(`/`).pop()||e,aH=(0,I.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:15,height:15,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,I.jsx)(`rect`,{x:`3`,y:`4`,width:`18`,height:`16`,rx:`2`}),(0,I.jsx)(`path`,{d:`M9 4v16`})]});function oH(e){let t=Xc(),[n,r]=g.useState(null);g.useEffect(()=>{let e=!0;return ns().then(t=>e&&r(t),()=>e&&r([])),()=>{e=!1}},[]);let i=g.useMemo(()=>{let e=new Map;for(let t of n??[]){let n=rH(t),r=e.get(n);r?r.push(t):e.set(n,[t])}return[...e.entries()].sort((e,t)=>e[0].localeCompare(t[0]))},[n]);return(0,I.jsx)(`aside`,{className:`editor-drawer`,children:n===null?(0,I.jsx)(`div`,{className:`editor-drawer-empty`,children:`loading…`}):n.length===0?(0,I.jsx)(`div`,{className:`editor-drawer-empty`,children:`no files`}):i.map(([n,r])=>(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`div`,{className:`editor-drawer-folder`,children:n||`/`}),r.sort().map(n=>(0,I.jsx)(`button`,{type:`button`,className:`editor-drawer-item${n===e.currentFile?` current`:``}`,title:n,onClick:()=>t.openFile(n),children:iH(n)},n))]},n||`(root)`))})}function sH(e){let t=Xc(),n=e.file??``,r=t.kitEditorExts,i=g.useRef(null),{lifecycle:a}=e,[o,s]=g.useState(`visual`);g.useEffect(()=>s(`visual`),[n]);let[c,l]=g.useState(!1);g.useEffect(()=>{let e=()=>{let e=i.current;(e?.querySelector(`.cm-content`)??e?.querySelector(`iframe`))?.focus()};pu(a.id,e);let t=a.onDidActiveChange(t=>{t&&requestAnimationFrame(e)});return()=>{mu(a.id),t()}},[a]);let u=r!==null&&r.includes(hs(n)),d;if(r===null)d=(0,I.jsx)(`div`,{className:`code-editor-overlay`,children:`loading…`});else if(u&&o===`visual`){let e=Jo(n)?.module;d=(0,I.jsx)(eH,{src:`/index.html?file=${encodeURIComponent(n)}`+(e?`&editorModule=${encodeURIComponent(e)}`:``),title:n})}else d=(0,I.jsx)(jM,{file:n});return(0,I.jsxs)(`div`,{ref:i,className:`editor-panel-root`,children:[(0,I.jsxs)(`div`,{className:`editor-contextbar`,children:[(0,I.jsx)(`button`,{type:`button`,className:`editor-drawer-toggle${c?` on`:``}`,"aria-label":`Toggle files`,"aria-pressed":c,title:`Toggle files`,onClick:()=>l(e=>!e),children:aH}),u&&(0,I.jsxs)(`select`,{className:`editor-view-picker`,value:o,onChange:e=>s(e.target.value===`code`?`code`:`visual`),"aria-label":`Editor view`,title:`Switch editor view`,children:[(0,I.jsx)(`option`,{value:`visual`,children:nH(n)}),(0,I.jsx)(`option`,{value:`code`,children:`Code`})]}),(0,I.jsx)(`span`,{className:`editor-contextbar-path`,title:n,children:n})]}),(0,I.jsxs)(`div`,{className:`editor-shell`,children:[c&&(0,I.jsx)(oH,{currentFile:n}),(0,I.jsx)(`div`,{className:`editor-panel-body`,children:d})]})]})}var cH=500,[lH,uH,,,dH]=L.icon,fH=(0,I.jsx)(`svg`,{viewBox:`0 0 ${lH} ${uH}`,"aria-hidden":`true`,style:{width:13,height:13,display:`inline-block`,fill:`currentColor`},children:(0,I.jsx)(`path`,{d:Array.isArray(dH)?dH.join(` `):dH})});function pH(e){let[t,n]=g.useState(!1),r=g.useRef(null);return g.useEffect(()=>{t&&r.current&&(r.current.scrollTop=r.current.scrollHeight)},[e.logs,t]),(0,I.jsxs)(`div`,{className:`play-logs ${t?`open`:``}`,children:[(0,I.jsxs)(`div`,{className:`play-logs-header`,children:[(0,I.jsxs)(`button`,{type:`button`,className:`play-logs-toggle`,onClick:()=>n(e=>!e),"aria-label":t?`collapse logs`:`expand logs`,children:[(0,I.jsx)(`span`,{className:`play-logs-caret`,children:t?`▾`:`▸`}),(0,I.jsx)(`span`,{children:`logs`}),e.logs.length>0&&(0,I.jsx)(`span`,{className:`play-logs-count`,children:e.logs.length})]}),(0,I.jsxs)(`div`,{className:`play-logs-actions`,children:[t&&(0,I.jsx)(`button`,{type:`button`,className:`play-logs-clear`,onClick:e.onClear,children:`clear`}),e.actions,(0,I.jsxs)(`button`,{type:`button`,className:`play-logs-btn`,onClick:e.onReload,"aria-label":`restart deck`,title:`Restart the deck`,children:[(0,I.jsx)(`span`,{className:`play-restart-icon${e.reloadSpinning?` spinning`:``}`,children:fH}),(0,I.jsx)(`span`,{children:`Restart`})]})]})]}),t&&(0,I.jsx)(`div`,{className:`play-logs-body`,ref:r,children:e.logs.length===0?(0,I.jsx)(`div`,{className:`play-logs-empty`,children:`no output`}):e.logs.map(e=>(0,I.jsx)(`div`,{className:`play-logs-line play-logs-${e.level}`,children:e.text},e.id))})]})}var mH=e=>e.replace(/^scenes\//,``).replace(/\.scene$/,``),hH={flex:`0 0 auto`,display:`flex`,alignItems:`center`,gap:8,padding:`6px 8px`,borderBottom:`1px solid #2a2a3a`},gH={fontSize:12,opacity:.7},_H=2500,vH=3e4;function yH(e){let[t,n]=g.useState(`idle`),[r,i]=g.useState(null),a=g.useRef(0),o=g.useRef(null),s=g.useCallback(()=>{n(`working`),i(null),Ef(e.current).then(async e=>{if(!e){n(`error`),i(`Nothing to capture yet — start the deck first.`);return}let t=await Df(e);t.ok?(n(`saved`),window.setTimeout(()=>n(`idle`),2e3)):(n(`error`),i(t.error??`Could not save the cover.`))})},[e]),c=g.useCallback(()=>{o.current&&clearTimeout(o.current);let t=Date.now()-a.current,n=Math.max(_H,vH-t);o.current=setTimeout(()=>{o.current=null,Ef(e.current).then(e=>{e&&(a.current=Date.now(),Of(e))})},n)},[e]);return g.useEffect(()=>{let t=e.current;if(t)return t.addEventListener(`load`,c),()=>{t.removeEventListener(`load`,c),o.current&&clearTimeout(o.current)}},[e,c]),{status:t,error:r,capture:s}}var bH={width:13,height:13,display:`block`,fill:`currentColor`},xH={display:`inline-flex`,alignItems:`center`},SH=(0,I.jsx)(`svg`,{viewBox:`0 0 24 24`,"aria-hidden":`true`,style:bH,children:(0,I.jsx)(`path`,{d:`M9 3 7.6 5H4a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-3.6L15 3H9Zm3 5a5 5 0 1 1 0 10 5 5 0 0 1 0-10Zm0 2a3 3 0 1 0 0 6 3 3 0 0 0 0-6Z`})}),CH={background:`#1b1b2b`,color:`#e7e7ef`,border:`1px solid #3a3a52`,borderRadius:6,padding:`3px 6px`,font:`12px system-ui, sans-serif`};function wH(e){let[t,n]=g.useState([]),r=g.useRef(1);return g.useEffect(()=>{let t=t=>{if(!e.current||t.source!==e.current.contentWindow)return;let i=t.data;if(!i||i.type!==`castle-console`)return;let a=i.level===`warn`||i.level===`error`?i.level:`log`;n(e=>{let t=e.concat({id:r.current++,level:a,text:typeof i.text==`string`?i.text:``});return t.length>cH?t.slice(t.length-cH):t})};return window.addEventListener(`message`,t),()=>window.removeEventListener(`message`,t)},[e]),{logs:t,clear:()=>n([])}}function TH(e){let t=e.scene??Yo()??``,[n,r]=g.useState(t),[i,a]=g.useState([]);g.useEffect(()=>{let e=!0;return ns().then(t=>{e&&a(t.filter(e=>e.startsWith(`scenes/`)&&e.endsWith(`.scene`)).sort())},()=>{}),()=>{e=!1}},[]);let o=n?`/index.html?edit=0&logs=1&scene=${encodeURIComponent(n)}`:`/index.html?edit=0&logs=1`,s=g.useRef(null),{logs:c,clear:l}=wH(s),u=g.useCallback(()=>{let e=s.current;if(e)try{e.contentWindow?.location.reload()}catch{let{src:t}=e;e.src=t}},[]),[d,f]=g.useState(!1),p=g.useCallback(()=>{u(),f(!0),window.setTimeout(()=>f(!1),600)},[u]),m=yH(s);return(0,I.jsxs)(`div`,{className:`play-panel`,children:[i.length>1?(0,I.jsxs)(`div`,{style:hH,children:[(0,I.jsx)(`label`,{style:gH,children:`Scene`}),(0,I.jsx)(`select`,{value:n,onChange:e=>r(e.target.value),style:CH,children:i.map(e=>(0,I.jsx)(`option`,{value:e,children:mH(e)},e))})]}):null,(0,I.jsx)(`div`,{className:`play-stage`,children:(0,I.jsxs)(`div`,{className:`play-frame-shell`,children:[(0,I.jsx)(`iframe`,{ref:s,className:`deck-frame`,src:o,title:`play`,allow:`autoplay; clipboard-read; clipboard-write; fullscreen; gamepad`}),(0,I.jsx)($V,{})]})}),(0,I.jsx)(pH,{logs:c,onClear:l,onReload:p,reloadSpinning:d,actions:(0,I.jsx)(EH,{cover:m})})]})}function EH({cover:e}){let{status:t,error:n}=e,r=t===`working`?`Saving…`:t===`saved`?`Cover set`:`Set cover`;return(0,I.jsxs)(I.Fragment,{children:[n?(0,I.jsx)(`span`,{style:DH,role:`status`,title:n,children:n}):null,(0,I.jsxs)(`button`,{type:`button`,className:`play-logs-btn`,onClick:e.capture,disabled:t===`working`,"aria-label":`set deck cover`,title:n??`Save the current frame as the deck’s cover`,children:[(0,I.jsx)(`span`,{style:xH,children:SH}),(0,I.jsx)(`span`,{children:r})]})]})}var DH={fontSize:11,color:`#ff9aa2`,maxWidth:220,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`};function OH(e){let t=Xc(),n=g.useRef(null),r=g.useRef(null),{lifecycle:i}=e;return g.useEffect(()=>{let e=n.current;if(!e)return;let a=fV(e,t.terminalTheme);r.current=a;let o=()=>{i.isVisible()&&(a.activate(),a.fit(),i.isActive()&&a.focus())};o();let s=i.onDidVisibilityChange(o),c=i.onDidActiveChange(o);return()=>{s(),c(),a.dispose(),r.current=null}},[i]),g.useEffect(()=>{r.current?.setTheme(t.terminalTheme)},[t.terminalTheme]),(0,I.jsx)(`div`,{className:`term-panel`,children:(0,I.jsx)(`div`,{className:`term-host`,ref:n})})}function kH(e){return{id:e.id,isVisible:()=>e.isVisible,isActive:()=>e.isActive,onDidActiveChange:t=>{let n=e.onDidActiveChange(e=>t(e.isActive));return()=>n.dispose()},onDidVisibilityChange:t=>{let n=e.onDidVisibilityChange(e=>t(e.isVisible));return()=>n.dispose()}}}function AH(e){return function(t){let n=g.useMemo(()=>kH(t.api),[t.api]);return(0,I.jsx)(e,{file:typeof t.params.file==`string`?t.params.file:void 0,scene:typeof t.params.scene==`string`?t.params.scene:void 0,lifecycle:n})}}var jH=`castle-flow-layout:`,MH=1;function NH(e,t){if(e)try{let n={version:MH,state:t};localStorage.setItem(jH+e,JSON.stringify(n))}catch{}}function PH(e,t){if(!e)return null;try{let n=localStorage.getItem(jH+e);if(!n)return null;let r=JSON.parse(n);if(r.version!==MH||!r.state||!Array.isArray(r.state.groups))return null;let i=IH(r.state,t);return i.groups.length===0?null:ad(i)}catch{return null}}var FH=new Set([`operator`,`files`]);function IH(e,t){let n=new Set,r=e.groups.filter(e=>{let r=e.tabs[0];if(r&&r.kind===`editor`&&r.path!==void 0&&!t.has(r.path))return!1;if(r&&FH.has(r.kind)){if(n.has(r.kind))return!1;n.add(r.kind)}return!0});return{groups:r,activeGroupId:r.some(t=>t.id===e.activeGroupId)?e.activeGroupId:r[0]?.id??null,pinnedGroupId:r.some(t=>t.id===e.pinnedGroupId)?e.pinnedGroupId:null,maximizedGroupId:null}}var LH=g.createContext(null),RH={groups:[],activeGroupId:null,pinnedGroupId:null,maximizedGroupId:null},zH=12;function BH(e){return Array.isArray(e.column)}function VH(e){return Array.isArray(e.tabs)}function HH(e){let t=[],n=e=>{VH(e)?t.push(...e.tabs??[]):t.push(e)};for(let t of e)BH(t)?(t.column??[]).forEach(n):n(t);return t}function UH(e){return e===`files`?`files`:e===`playtest`?`play`:e===`terminal`?`terminal`:e===`editor`?`editor`:null}var WH=[{type:`files`},{type:`playtest`},{type:`editor`,file:`scenes/main.scene`}];function GH(e){let t=e&&e.length>0?HH(e):WH,n=rd(`operator`),r=[id([n],ed(n))],i=null;for(let e of t){let t=UH(e.type);if(!t||t===`editor`&&!e.file)continue;let n=rd(t,e.file),a=id([n],ed(n));r.push(a),!i&&t===`editor`&&(i=a.id)}return{groups:r,activeGroupId:i??r[0]?.id??null,pinnedGroupId:null,maximizedGroupId:null}}function KH(){let[e,t]=g.useState(()=>{try{return window.matchMedia(`(max-width: 768px)`).matches}catch{return!1}});return g.useEffect(()=>{let e=window.matchMedia(`(max-width: 768px)`),n=()=>t(e.matches);return e.addEventListener(`change`,n),()=>e.removeEventListener(`change`,n)},[]),e}function qH(e,t){let n=e,r=t.parentElement;for(;n&&n!==r;){if(n.nodeType===1){let e=getComputedStyle(n).overflowY;if((e===`auto`||e===`scroll`)&&n.scrollHeight>n.clientHeight+1)return!0}if(n===t)break;n=n.parentElement}return!1}function JH(e){g.useEffect(()=>{let t=e.current;if(!t)return;let n=e=>{e.deltaY!==0&&(t.scrollWidth<=t.clientWidth||!e.shiftKey&&qH(e.target,t)||(t.scrollLeft+=e.deltaX-e.deltaY,e.preventDefault()))};return t.addEventListener(`wheel`,n,{passive:!1}),()=>t.removeEventListener(`wheel`,n)},[e])}function YH(e,t,n){g.useLayoutEffect(()=>{let n=e.current,r=n?.querySelector(`.flow-row`);if(!n||!r)return;let i=()=>{let e=r.lastElementChild,i=e?e.offsetLeft+e.offsetWidth:0,a=t&&i>n.clientWidth?n.clientWidth/2:0;r.style.setProperty(`--flow-overscroll`,`${Math.round(a)}px`)};i();let a=new ResizeObserver(i);return a.observe(n),()=>a.disconnect()},[e,t,n])}function XH(e,t){let n=g.useRef(new Map),r=g.useCallback(e=>{let t=n.current.get(e);if(t)return t.obj;let r={visible:!1,active:!1,activeCbs:new Set,visibleCbs:new Set,obj:{id:e,isVisible:()=>r.visible,isActive:()=>r.active,onDidActiveChange:e=>(r.activeCbs.add(e),()=>r.activeCbs.delete(e)),onDidVisibilityChange:e=>(r.visibleCbs.add(e),()=>r.visibleCbs.delete(e))}};return n.current.set(e,r),r.obj},[]);return g.useEffect(()=>{let r=new Set;for(let i of e.groups){let a=t?i.id===e.activeGroupId:!0;for(let t of i.tabs){r.add(t.id);let o=n.current.get(t.id);if(!o)continue;let s=i.activeTabId===t.id,c=a&&s,l=i.id===e.activeGroupId&&s;c!==o.visible&&(o.visible=c,o.visibleCbs.forEach(e=>e(c))),l!==o.active&&(o.active=l,o.activeCbs.forEach(e=>e(l)))}}for(let e of n.current.keys())r.has(e)||n.current.delete(e)}),r}function ZH({agent:e}){let[t,n]=g.useState(RH),[r,i]=g.useState(null),[a,o]=g.useState([]),s=g.useRef(null),c=g.useRef(!1),l=KH(),u=g.useRef(l);u.current=l;let d=g.useRef(RH),f=g.useRef(null);d.current=t;let p=g.useRef(new Map),m=g.useRef(null),h=g.useRef(null),_=g.useRef({page:0,count:0,ids:[]});JH(m),YH(m,!l&&!t.maximizedGroupId,t.groups);let v=XH(t,l);g.useEffect(()=>{let e=!0;Promise.all([Zo(),ns().catch(()=>[])]).then(([t,r])=>{e&&(s.current=t.deckId,Ko(t),i(t.kitEditorExtensions),o(r),n(PH(t.deckId,new Set(r))??GH(t.initialPanels)),c.current=!0)},()=>{e&&(i([]),n(GH(null)),c.current=!0)});let t=Us(t=>{t.changes.some(e=>e.path===`castle.json`||e.path.startsWith(`imports/`))&&Zo().then(t=>{e&&(Ko(t),i(t.kitEditorExtensions))},()=>{})});return()=>{e=!1,t()}},[]),g.useEffect(()=>{if(!c.current)return;let e=window.setTimeout(()=>NH(s.current,t),400);return()=>window.clearTimeout(e)},[t]);let y=g.useMemo(()=>{let e=t.groups.find(e=>e.id===t.activeGroupId),n=e?.tabs.find(t=>t.id===e.activeTabId)??e?.tabs[0];return n&&n.kind===`editor`?n.path??null:null},[t.groups,t.activeGroupId]),b=g.useMemo(()=>({openFile:e=>n(t=>gd(t,`editor`,e)),openPlaytest:()=>n(e=>gd(e,`play`)),closeEditor:e=>n(t=>{let n=cd(t,e);return n?md(t,n.group.id,n.tab.id):t}),activeEditorPath:y,kitEditorExts:r,terminalTheme:`dark`}),[r,y]),x=g.useCallback(e=>{n(t=>t.maximizedGroupId?xd({...t,maximizedGroupId:null},e):fd(t,e)),u.current||requestAnimationFrame(()=>{p.current.get(e)?.scrollIntoView({block:`nearest`,inline:`nearest`})})},[]),S=g.useCallback(e=>{let t=sd(d.current,e)?.tabs[0];t?.kind===`editor`&&t.path&&uu(t.path),n(t=>vd(t,e))},[]),C=g.useCallback(e=>n(t=>bd(t,e)),[]),w=g.useCallback(e=>n(t=>xd(t,e)),[]),ee=g.useCallback((e,t,r)=>{n(n=>Cd(Sd(n,e,t),e,r))},[]);g.useEffect(()=>{if(!l)return;let e=m.current,t=h.current;if(!e||!t)return;let r=0,i=0,a=0,o=1,s=!1,c=!1,u=e=>t.style.setProperty(`--flow-drag`,`${e}px`),d=t=>{t.touches.length===1&&(r=t.touches[0].clientX,i=t.touches[0].clientY,a=t.timeStamp,o=e.clientWidth||1,s=!1,c=!1)},f=e=>{if(e.touches.length!==1)return;let n=e.touches[0].clientX-r,a=e.touches[0].clientY-i;if(!s){if(Math.abs(n)<8&&Math.abs(a)<8)return;s=!0,c=Math.abs(n)>Math.abs(a),c&&t.classList.add(`flow-dragging`)}if(!c)return;e.preventDefault();let{page:o,count:l}=_.current;u(o===0&&n>0||o===l-1&&n<0?n*.3:n)},p=e=>{if(!c){t.classList.remove(`flow-dragging`);return}c=!1,t.classList.remove(`flow-dragging`);let i=e.changedTouches[0],s=i?i.clientX-r:0,l=e.timeStamp-a,{page:d,count:f,ids:p}=_.current,m=Math.abs(s)>50&&l<250,h=Math.abs(s)>o*.25,g=d;s<0&&(m||h)?g=Math.min(f-1,d+1):s>0&&(m||h)&&(g=Math.max(0,d-1));let v=p[g];g!==d&&v?n(e=>fd(e,v)):u(0)};return e.addEventListener(`touchstart`,d,{passive:!0}),e.addEventListener(`touchmove`,f,{passive:!1}),e.addEventListener(`touchend`,p,{passive:!0}),e.addEventListener(`touchcancel`,p,{passive:!0}),()=>{e.removeEventListener(`touchstart`,d),e.removeEventListener(`touchmove`,f),e.removeEventListener(`touchend`,p),e.removeEventListener(`touchcancel`,p)}},[l]);let T=g.useCallback((e,t)=>{t?p.current.set(e,t):p.current.delete(e)},[]),[E,te]=g.useState(null),D=g.useRef(null);g.useLayoutEffect(()=>{let e=D.current;if(!e)return;D.current=null;let t=p.current.get(e.id);if(!t)return;let n=t.getBoundingClientRect(),r=e.first.left-n.left,i=e.first.top-n.top;if(Math.abs(r)<1&&Math.abs(i)<1)return;t.style.transition=`none`,t.style.transform=`translate(${r}px, ${i}px)`,t.getBoundingClientRect(),t.style.transition=`transform 180ms ease`,t.style.transform=`translate(0px, 0px)`;let a=()=>{t.style.transition=``,t.style.transform=``,t.removeEventListener(`transitionend`,a)};t.addEventListener(`transitionend`,a)});let O=g.useCallback((e,r)=>{if(l||e.button!==0||e.target.closest(`.flow-titlebar-btn`)||!p.current.get(r))return;let i=zH/2,a=e.clientX,o=e=>{let n=t.groups.filter(e=>e.id!==r).map(e=>{let t=p.current.get(e.id)?.getBoundingClientRect();return{left:t?.left??1/0,right:t?.right??1/0,center:t?t.left+t.width/2:1/0}}),a=0;for(;a<n.length&&n[a].center<e;)a+=1;let o=a<n.length?n[a].left-i:n.length?n[n.length-1].right+i:e;return{target:a,x:o}},s=!1,c=e.clientX,u=0,d=()=>{let e=m.current;if(e&&e.scrollWidth>e.clientWidth+1){let t=e.getBoundingClientRect(),n=0;c<t.left+64?n=-(1-Math.max(0,c-t.left)/64):c>t.right-64&&(n=1-Math.max(0,t.right-c)/64),n!==0&&(e.scrollLeft+=n*24,te({id:r,x:o(c).x}))}u=requestAnimationFrame(d)},f=e=>{!s&&Math.abs(e.clientX-a)<5||(s||(document.body.classList.add(`flow-reordering`),s=!0,u=requestAnimationFrame(d)),c=e.clientX,te({id:r,x:o(e.clientX).x}))},h=e=>{if(document.removeEventListener(`pointermove`,f),document.removeEventListener(`pointerup`,h),u&&cancelAnimationFrame(u),document.body.classList.remove(`flow-reordering`),s){let t=p.current.get(r)?.getBoundingClientRect();t&&(D.current={id:r,first:t}),n(t=>yd(t,r,o(e.clientX).target))}te(null)};document.addEventListener(`pointermove`,f),document.addEventListener(`pointerup`,h)},[l,t.groups]),[k,ne]=g.useState(null),A=g.useCallback(e=>ne(t=>t&&t.groupId===void 0?null:{anchor:e}),[]),j=g.useCallback((e,t)=>ne(n=>n&&n.groupId===e?null:{anchor:t,groupId:e}),[]),re=g.useCallback(()=>{let e=h.current?.querySelector(`.flow-tabs-add`);ne({anchor:e?.getBoundingClientRect()??new DOMRect(window.innerWidth/2,48)})},[]);g.useEffect(()=>{let e=(e,t)=>(t&&t!==window?[...document.querySelectorAll(`iframe.deck-frame`)].find(e=>e.contentWindow===t):e)?.closest?.(`.flow-group`)?.getAttribute(`data-group-id`)??null;return Vl(`pointermove`,t=>{f.current=e(t.target,t.view)},{passive:!0})},[]);let ie=g.useMemo(()=>Od({getState:()=>d.current,setState:n,focusGroup:x,closeGroup:S,openNewGroupPicker:re,getHoveredGroupId:()=>f.current}),[x,S,re]),ae=Wl(ie),oe=t.groups.some(e=>e.id===t.activeGroupId)?t.activeGroupId:t.groups[0]?.id??null,M=l?null:t.maximizedGroupId,N=Math.max(0,t.groups.findIndex(e=>e.id===oe));return _.current={page:N,count:t.groups.length,ids:t.groups.map(e=>e.id)},g.useLayoutEffect(()=>{let e=h.current;e&&(e.style.setProperty(`--flow-page`,String(N)),e.style.setProperty(`--flow-drag`,`0px`))},[N,l]),cf(h),lf(()=>k?(ne(null),!0):!1),(0,I.jsx)(Yc,{value:b,children:(0,I.jsx)(LH.Provider,{value:e,children:(0,I.jsxs)(`div`,{ref:h,className:`flow-root${l?` is-mobile`:``}${M?` is-maximized`:``}`,children:[(0,I.jsx)(QH,{state:t,activeId:oe,onFocusGroup:x,onNewGroup:A}),(0,I.jsx)(`div`,{className:`flow-scroller`,ref:m,children:(0,I.jsx)(`div`,{className:`flow-field`,children:(0,I.jsx)(`div`,{className:`flow-row`,children:t.groups.map(e=>(0,I.jsx)(tU,{group:e,active:e.id===oe,mobile:l,pinned:e.id===t.pinnedGroupId&&!M,maximized:e.id===M,hidden:M!==null&&e.id!==M,dragging:E?.id===e.id,getLifecycle:v,registerEl:T,onFocusGroup:x,onClose:S,onSwitch:j,onTogglePin:C,onToggleMaximize:w,onStartDrag:O,onResize:ee},e.id))})})}),E&&(()=>{let e=m.current?.getBoundingClientRect();return e?(0,I.jsx)(`div`,{className:`flow-drop-indicator`,style:{left:E.x,top:e.top,height:e.height}}):null})(),k&&(0,I.jsx)(dU,{anchor:k.anchor,files:a,onOpenFile:e=>n(t=>k.groupId?_d(t,k.groupId,`editor`,e):gd(t,`editor`,e)),onSpawnPanel:e=>n(t=>k.groupId?_d(t,k.groupId,e):gd(t,e)),onClose:()=>ne(null)}),(0,I.jsx)(Xl,{openFile:e=>n(t=>gd(t,`editor`,e)),openPanel:e=>n(t=>gd(t,e===`playtest`?`play`:e)),panels:lU,getCommands:ie}),ae?(0,I.jsxs)(`div`,{className:`chord-hint`,role:`status`,children:[(0,I.jsx)(`kbd`,{children:ae}),(0,I.jsx)(`span`,{children:`waiting for the next key…`})]}):null]})})})}function QH(e){let{state:t,activeId:n,onFocusGroup:r,onNewGroup:i}=e,a=uf(),[o,s]=g.useState(!1),c=a?.title?.trim()||`Untitled deck`,l=a?.visibility===`public`?Gd:a?.visibility===`unlisted`?Kd:qd,u=a?.saving??`idle`,d=g.useRef(null),[f,p]=g.useState({left:!1,right:!1}),m=g.useCallback(()=>{let e=d.current;if(!e)return;let t=e.scrollLeft>1,n=e.scrollLeft+e.clientWidth<e.scrollWidth-1;p(e=>e.left===t&&e.right===n?e:{left:t,right:n})},[]);g.useEffect(()=>{let e=d.current;if(!e)return;m(),e.addEventListener(`scroll`,m,{passive:!0});let t=new ResizeObserver(m);return t.observe(e),()=>{e.removeEventListener(`scroll`,m),t.disconnect()}},[m]),g.useEffect(()=>{d.current?.querySelector(`.flow-chip.active`)?.scrollIntoView({inline:`nearest`,block:`nearest`}),m()},[n,t.groups.length,m]);let[h,_]=g.useState(null),v=g.useRef(!1);g.useEffect(()=>{h!==null&&(u===`working`&&(v.current=!0),u===`done`&&v.current&&_(`done`))},[u,h]);let y=g.useCallback(()=>{v.current=!1,_(`pushing`),of(`push`)},[]);return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`div`,{className:`flow-topbar`,children:[(0,I.jsxs)(`div`,{className:`flow-topbar-leading`,children:[mf()?null:(0,I.jsxs)(`div`,{className:`flow-castle-wrap`,children:[(0,I.jsx)(`button`,{type:`button`,className:`flow-castle-btn`,title:`Menu`,"aria-haspopup":`menu`,"aria-expanded":o,onClick:()=>s(e=>!e),children:Wd}),o&&(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:`flow-menu-backdrop`,onClick:()=>s(!1)}),(0,I.jsxs)(`div`,{className:`flow-castle-menu`,role:`menu`,children:[(0,I.jsx)(`button`,{type:`button`,role:`menuitem`,onClick:()=>{s(!1),of(`back-to-decks`)},children:`‹ Back to decks`}),(0,I.jsx)(`button`,{type:`button`,role:`menuitem`,onClick:()=>{s(!1),of(`new-deck`)},children:`+ New deck`}),(0,I.jsx)(`div`,{className:`flow-menu-sep flow-menu-narrow`}),(0,I.jsx)(`button`,{type:`button`,role:`menuitem`,className:`flow-menu-narrow`,onClick:()=>{s(!1),of(`open-settings`)},children:`Deck settings`}),(0,I.jsx)(`button`,{type:`button`,role:`menuitem`,className:`flow-menu-narrow`,disabled:u===`working`,onClick:()=>{s(!1),y()},children:u===`working`?`Pushing…`:u===`done`?`Pushed ✓`:`Push to Castle`})]})]})]}),(0,I.jsxs)(`button`,{type:`button`,className:`flow-deck-identity`,title:`Deck settings`,onClick:()=>of(`open-settings`),children:[(0,I.jsx)(`span`,{className:`flow-deck-vis`,children:l}),(0,I.jsx)(`span`,{className:`flow-deck-name`,children:c}),(0,I.jsx)(`span`,{className:`flow-deck-caret`,children:Yd})]})]}),(0,I.jsxs)(`div`,{className:`flow-tabs-wrap`,children:[(0,I.jsx)(`div`,{className:`flow-tabs${f.left?` more-left`:``}${f.right?` more-right`:``}`,children:(0,I.jsx)(`div`,{className:`flow-tabs-scroll`,ref:d,"aria-label":`Open panels`,children:t.groups.map(e=>(0,I.jsx)($H,{group:e,active:e.id===n,onClick:()=>r(e.id)},e.id))})}),(0,I.jsx)(`button`,{type:`button`,className:`flow-tabs-add flow-picker-trigger`,title:`New group`,"aria-label":`New group`,onClick:e=>i(e.currentTarget.getBoundingClientRect()),children:Bd})]}),(0,I.jsx)(`div`,{className:`flow-topbar-trailing`,children:(0,I.jsxs)(`button`,{type:`button`,className:`flow-preview-btn`,title:`Publish this deck to your Castle account (sandbox edits stay local until pushed)`,disabled:u===`working`,onClick:()=>of(`push`),children:[Jd,(0,I.jsx)(`span`,{children:u===`working`?`Pushing…`:u===`done`?`Pushed ✓`:`Push to Castle`})]})})]}),h!==null&&(0,I.jsx)(`div`,{className:`flow-push-modal-backdrop`,children:(0,I.jsx)(`div`,{className:`flow-push-modal`,role:`dialog`,"aria-modal":`true`,children:h===`done`?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:`flow-push-check`,children:`✓`}),(0,I.jsx)(`div`,{className:`flow-push-title`,children:`Pushed to Castle`}),a?.shareUrl?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:`flow-push-sub`,children:`Your deck is live at`}),(0,I.jsx)(`a`,{className:`flow-push-url`,href:a.shareUrl,target:`_blank`,rel:`noreferrer`,children:a.shareUrl.replace(/^https?:\/\//,``)})]}):(0,I.jsx)(`div`,{className:`flow-push-sub`,children:`Saved to your Castle account.`}),(0,I.jsx)(`button`,{type:`button`,className:`flow-push-done`,onClick:()=>_(null),children:`Done`})]}):(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:`flow-push-spinner`}),(0,I.jsx)(`div`,{className:`flow-push-title`,children:`Pushing to Castle…`}),(0,I.jsx)(`div`,{className:`flow-push-sub`,children:`Publishing your latest changes.`})]})})})]})}function $H(e){let{group:t,active:n,onClick:r}=e,i=t.tabs[0];return(0,I.jsx)(`button`,{type:`button`,className:`flow-chip${n?` active`:``}`,onClick:r,title:i?.label??`panel`,children:(0,I.jsx)(`span`,{className:`flow-chip-icon`,children:zd(i?.kind??`files`,i?.path)})})}function eU(e,t){e.currentTarget.blur(),t()}var tU=g.memo(function(e){let{group:t,active:n,mobile:r,pinned:i,maximized:a,hidden:o,dragging:s,getLifecycle:c,registerEl:l}=e,{onFocusGroup:u,onClose:d,onSwitch:f}=e,p=t.tabs[0],m=fU(t,e.onResize),h=r?void 0:a?{flex:`1 1 auto`}:{flex:`0 0 auto`,width:t.w,height:t.h};return(0,I.jsxs)(`div`,{ref:e=>l(t.id,e),"data-group-id":t.id,className:`flow-group${n?` active`:``}${i?` pinned`:``}${a?` maximized`:``}${o?` hidden`:``}${s?` dragging`:``}`,style:h,onMouseDown:()=>u(t.id),children:[(0,I.jsxs)(`div`,{className:`flow-titlebar`,onPointerDown:n=>{a||e.onStartDrag(n,t.id)},children:[(0,I.jsx)(`button`,{type:`button`,className:`flow-titlebar-btn flow-picker-trigger`,title:`Switch panel`,"aria-label":`Switch panel`,onClick:e=>f(t.id,e.currentTarget.getBoundingClientRect()),children:Hd}),(0,I.jsx)(`span`,{className:`flow-titlebar-icon`,children:p&&zd(p.kind,p.path)}),(0,I.jsx)(`span`,{className:`flow-titlebar-title`,children:p?.label}),!r&&!a&&(0,I.jsx)(`button`,{type:`button`,className:`flow-titlebar-btn${i?` pinned`:``}`,title:i?`Unpin`:`Pin to left`,"aria-label":i?`Unpin`:`Pin to left`,"aria-pressed":i,onClick:n=>eU(n,()=>e.onTogglePin(t.id)),children:Ud}),!r&&(0,I.jsx)(`button`,{type:`button`,className:`flow-titlebar-btn${a?` pinned`:``}`,title:a?`Restore`:`Maximize`,"aria-label":a?`Restore`:`Maximize`,"aria-pressed":a,onClick:n=>eU(n,()=>e.onToggleMaximize(t.id)),children:a?Zd:Xd}),(0,I.jsx)(`button`,{type:`button`,className:`flow-titlebar-btn flow-titlebar-close`,title:`Close`,"aria-label":`Close`,onClick:e=>eU(e,()=>d(t.id)),children:Vd})]}),(0,I.jsx)(`div`,{className:`flow-panel-body`,children:p&&(0,I.jsx)(nU,{tab:p,lifecycle:c(p.id)})}),!r&&!a&&(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:`flow-resize-e`,onPointerDown:m(`x`),title:`Drag to resize width`}),(0,I.jsx)(`div`,{className:`flow-resize-s`,onPointerDown:m(`y`),title:`Drag to resize height`}),(0,I.jsx)(`div`,{className:`flow-resize-se`,onPointerDown:m(`xy`),title:`Drag to resize`})]})]})}),nU=g.memo(function(e){let{tab:t,lifecycle:n}=e;switch(t.kind){case`editor`:return(0,I.jsx)(sH,{file:t.path,lifecycle:n});case`play`:return(0,I.jsx)(TH,{lifecycle:n});case`terminal`:return(0,I.jsx)(OH,{lifecycle:n});case`files`:return(0,I.jsx)(xl,{lifecycle:n});case`operator`:return(0,I.jsx)(rU,{});default:return(0,I.jsx)(iU,{tab:t})}});function rU(){let e=g.useContext(LH);if(!e)return(0,I.jsx)(`div`,{className:`flow-placeholder`,children:`operator unavailable`});let t=()=>{};return(0,I.jsx)(`div`,{className:`shell-root docked anim-ready flow-operator-host`,style:{"--operator-col":`100%`},children:(0,I.jsx)(ko,{agent:e,floating:!1,setFloating:t,columnWidth:0,setColumnWidth:t,minWidth:0,maxWidth:0})})}function iU(e){let{tab:t}=e;return(0,I.jsxs)(`div`,{className:`flow-placeholder kind-${t.kind}`,children:[(0,I.jsx)(`div`,{className:`flow-placeholder-icon`,children:zd(t.kind,t.path)}),(0,I.jsx)(`div`,{className:`flow-placeholder-label`,children:t.label}),(0,I.jsx)(`div`,{className:`flow-placeholder-kind`,children:t.path??t.kind})]})}function aU(e,t){g.useEffect(()=>{let n=n=>{n.target.closest(e)||t()},r=window.setTimeout(()=>document.addEventListener(`mousedown`,n),0);return()=>{window.clearTimeout(r),document.removeEventListener(`mousedown`,n)}},[e,t])}function oU(e,t){return Math.max(8,Math.min(e,window.innerWidth-t-8))}var sU=300,cU=[{kind:`operator`,label:`Operator`},{kind:`play`,label:`Play`},{kind:`terminal`,label:`Terminal`},{kind:`files`,label:`Files`}],lU=cU.map(({kind:e,label:t})=>({kind:e===`play`?`playtest`:e,label:t}));function uU(e,t){let n=t.trim().toLowerCase(),r=cU.filter(e=>e.label.toLowerCase().includes(n)).map(e=>({kind:`panel`,panel:e.kind,label:e.label})),i=e.filter(e=>e.toLowerCase().includes(n)).slice(0,40).map(e=>({kind:`file`,path:e}));return[...r,...i]}function dU(e){let{anchor:t,files:n,onOpenFile:r,onSpawnPanel:i,onClose:a}=e,[o,s]=g.useState(``),[c,l]=g.useState(0);aU(`.flow-picker, .flow-picker-trigger`,a);let u=uU(n,o),d=Math.min(c,Math.max(0,u.length-1)),f=e=>{e.kind===`panel`?i(e.panel):r(e.path),a()};return(0,Qn.createPortal)((0,I.jsxs)(`div`,{className:`flow-picker`,style:{top:t.bottom+4,left:oU(t.left,sU),width:sU},onMouseDown:e=>e.stopPropagation(),children:[(0,I.jsx)(`input`,{className:`flow-picker-input`,autoFocus:!0,placeholder:`Open a file or panel…`,value:o,onChange:e=>{s(e.target.value),l(0)},onKeyDown:e=>{e.key===`Escape`?a():e.key===`ArrowDown`?(e.preventDefault(),l(e=>Math.min(e+1,u.length-1))):e.key===`ArrowUp`?(e.preventDefault(),l(e=>Math.max(e-1,0))):e.key===`Enter`&&u[d]&&f(u[d])}}),(0,I.jsxs)(`div`,{className:`flow-picker-list`,children:[u.length===0&&(0,I.jsx)(`div`,{className:`flow-picker-empty`,children:`No matches`}),u.map((e,t)=>(0,I.jsxs)(`button`,{type:`button`,className:`flow-picker-item${t===d?` sel`:``}`,onMouseEnter:()=>l(t),onClick:()=>f(e),children:[(0,I.jsx)(`span`,{className:`flow-tab-icon`,children:e.kind===`panel`?zd(e.panel):zd(`editor`,e.path)}),(0,I.jsx)(`span`,{className:`flow-picker-label`,children:e.kind===`panel`?e.label:e.path})]},e.kind===`panel`?`p:${e.panel}`:`f:${e.path}`))]})]}),document.body)}function fU(e,t){return g.useCallback(n=>r=>{r.preventDefault(),r.stopPropagation();let i=r.clientX,a=r.clientY,o=e.w,s=e.h,c=r.currentTarget;c.setPointerCapture(r.pointerId);let l=!1,u=r=>{let c=r.clientX-i,u=r.clientY-a;if(!l&&Math.abs(c)<5&&Math.abs(u)<5)return;l=!0;let d=n===`y`?o:Math.max(200,o+c),f=n===`x`?s:Math.max(160,s+u);t(e.id,d,f)},d=()=>{c.removeEventListener(`pointermove`,u),c.removeEventListener(`pointerup`,d)};c.addEventListener(`pointermove`,u),c.addEventListener(`pointerup`,d)},[e.id,e.w,e.h,t])}var pU=`input,textarea,[contenteditable]:not([contenteditable="false"]),.cm-editor,.xterm,[data-castle-allow-select]`,mU=`*{-webkit-user-select:none!important;user-select:none!important;-webkit-touch-callout:none!important;-webkit-tap-highlight-color:transparent!important;}${pU.split(`,`).flatMap(e=>[e,`${e} *`]).join(`,`)}{-webkit-user-select:text!important;user-select:text!important;-webkit-touch-callout:default!important;}`,hU=`castle-touch-selection-lock`,gU=1;function _U(e){let t=e;return t?t.nodeType===gU?t:t.parentElement:null}function vU(e){return!!_U(e)?.closest(pU)}function yU(e){if(e.getElementById(hU))return!0;let t=e.head??e.documentElement;if(!t)return!1;let n=e.createElement(`style`);return n.id=hU,n.textContent=mU,t.appendChild(n),!0}function bU(e){let t=e.getSelection();!t||t.isCollapsed||vU(t.anchorNode)||t.removeAllRanges()}function xU(e){let t=e=>{vU(e.target)||e.preventDefault()};e.addEventListener(`selectstart`,t,!0),e.addEventListener(`contextmenu`,t,!0),e.addEventListener(`selectionchange`,()=>bU(e))}var SU=new WeakSet;function CU(e){SU.has(e)||(SU.add(e),e.addEventListener(`load`,()=>EU(e.contentWindow))),EU(e.contentWindow)}function wU(e){e.querySelectorAll(`iframe`).forEach(CU)}function TU(e){new MutationObserver(e=>{e.forEach(e=>e.addedNodes.forEach(e=>{let t=_U(e);t&&(t.tagName===`IFRAME`?CU(t):wU(t))}))}).observe(e,{childList:!0,subtree:!0})}function EU(e){if(e)try{let t=e.document;if(t.__castleTouchSelectionLockInstalled)return;t.__castleTouchSelectionLockInstalled=!0,yU(t)||t.addEventListener(`DOMContentLoaded`,()=>yU(t)),xU(t),wU(t),TU(t)}catch{}}function DU(){return typeof window.matchMedia==`function`&&window.matchMedia(`(pointer: coarse)`).matches}function OU(){typeof window>`u`||!DU()||EU(window)}var kU=[{kind:`files`,label:`Files Panel`},{kind:`playtest`,label:`Play Panel`},{kind:`terminal`,label:`Terminal`}],AU=10,jU={...mn,gap:AU},MU={...hn,gap:AU},NU={terminal:jo(AH(OH)),editor:jo(AH(sH)),files:jo(AH(xl)),playtest:jo(AH(TH))},PU=`castle-operator-width`,FU=400,IU=320,LU=900;function RU(){try{let e=Number(localStorage.getItem(PU));if(Number.isFinite(e)&&e>0)return Math.max(IU,Math.min(LU,e))}catch{}return FU}var zU=`castle-operator-float`,BU=300;function VU(){try{return localStorage.getItem(zU)===`1`}catch{return!1}}function HU(){g.useEffect(()=>{let e=e=>{let t=e.data;if(!t||t.type!==`castle-capture-cover`||e.source!==window.parent)return;let n=typeof t.requestId==`string`?t.requestId:void 0;tH().then(e=>{window.parent.postMessage({type:`castle-capture-cover-result`,requestId:n,dataUrl:e,ok:!!e},`*`)})};return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)},[])}function UU(e){let t=e.group;return(0,I.jsx)(`div`,{className:`empty-dock-state`,children:(0,I.jsxs)(`div`,{className:`empty-dock-card`,children:[(0,I.jsx)(`div`,{className:`empty-dock-title`,children:`Open a panel`}),(0,I.jsx)(`div`,{className:`empty-dock-actions`,role:`menu`,"aria-label":`Open panel`,children:Bo.map(n=>(0,I.jsxs)(`button`,{type:`button`,role:`menuitem`,className:`empty-dock-item`,onClick:()=>Vo(e.containerApi,n,t),children:[(0,I.jsx)(`span`,{className:`dv-add-panel-item-icon`,children:n.icon}),(0,I.jsx)(`span`,{className:`dv-add-panel-item-label`,children:n.label})]},n.label))})]})})}function WU(e,t,n,r){return g.useMemo(()=>({openFile:t=>{e.current&&Ns(e.current,t)},openPlaytest:t=>{e.current&&Fs(e.current,t)},closeEditor:t=>{e.current&&Is(e.current,t)},activeEditorPath:r,kitEditorExts:t,terminalTheme:n}),[e,t,n,r])}function GU({agent:e}){let[t]=g.useState(`dark`),[n,r]=g.useState(VU),[i,a]=g.useState(RU),[o,s]=g.useState(!1),[c,l]=g.useState(!1),[u,d]=g.useState(null),[f,p]=g.useState(null);g.useEffect(()=>{let e=e=>{Ko(e),d(e)};return Zo().then(e,()=>e(Xo)),ns().then(p,()=>p([])),Us(t=>{t.changes.some(e=>e.path===`castle.json`||e.path.startsWith(`imports/`))&&Zo().then(e,()=>{})})},[]);let m=u?u.kitEditorExtensions:null,[h,_]=g.useState(!1);g.useEffect(()=>{if(!u||!f)return;let e=0,t=requestAnimationFrame(()=>{e=requestAnimationFrame(()=>_(!0))});return()=>{cancelAnimationFrame(t),e&&cancelAnimationFrame(e)}},[u,f]),g.useEffect(()=>{if(!o)return;let e=0,t=requestAnimationFrame(()=>{e=requestAnimationFrame(()=>l(!0))});return()=>{cancelAnimationFrame(t),e&&cancelAnimationFrame(e)}},[o]);let v=g.useCallback(e=>{r(e);try{localStorage.setItem(zU,e?`1`:`0`)}catch{}},[]),y=g.useCallback(e=>{let t=Math.max(IU,Math.min(LU,Math.round(e)));a(t);try{localStorage.setItem(PU,String(t))}catch{}},[]),b=g.useRef(null),[x,S]=g.useState(null);g.useEffect(()=>{let e=e=>{let t=e.data;if(t){if(t.type===`castle-open-file`&&typeof t.path==`string`)b.current&&Ns(b.current,t.path);else if(t.type===`castle-open-playtest`){let e=typeof t.scene==`string`?t.scene:void 0;b.current&&Fs(b.current,e)}}};return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)},[]),g.useEffect(()=>{let e=e=>{e.target.closest(`.dv-sash`)&&document.body.classList.add(`shell-sash-resizing`)},t=()=>{document.body.classList.remove(`shell-sash-resizing`)};return document.addEventListener(`pointerdown`,e,!0),document.addEventListener(`pointerup`,t,!0),document.addEventListener(`pointercancel`,t,!0),()=>{document.removeEventListener(`pointerdown`,e,!0),document.removeEventListener(`pointerup`,t,!0),document.removeEventListener(`pointercancel`,t,!0)}},[]);let C=g.useCallback(e=>{let t=e.api;b.current=t;let n=u?.deckId??null,r=()=>{let e=t.activePanel?.id??``;S(e.startsWith(`editor:`)?e.slice(7):null)};t.onDidActivePanelChange(r),r();let i=!1,a=Au(n);if(a&&zu(a))try{let e=Iu(a,new Set(f??[]));e&&zu(e)&&(t.fromJSON(e),Ms(t),i=!0)}catch{try{t.clear()}catch{}}i||As(t,u?.initialPanels??xs),s(!0),t.onDidRemovePanel(e=>{e.id.startsWith(`editor:`)&&uu(e.id.slice(7));let n=null;try{n=e.api.group}catch{n=null}n&&t.groups.length>1&&t.groups.includes(n)&&n.panels.length===0&&n.api.close()});let o=null;t.onDidLayoutChange(()=>{n&&(o&&clearTimeout(o),o=setTimeout(()=>{o=null,t.panels.length!==0&&ju(n,t.toJSON())},BU))})},[u,f]),w=g.useMemo(()=>Du(()=>b.current),[]),ee=Wl(w);return(0,I.jsx)(Yc,{value:WU(b,m,t,x),children:(0,I.jsxs)(`div`,{className:`shell-root ${n?`floating`:`docked`}${h?` anim-ready`:``}${c?``:` dock-hidden`}`,style:{"--operator-col":`${i}px`},children:[u&&f&&(0,I.jsx)(fr,{className:`shell-dockview`,theme:t===`dark`?jU:MU,components:NU,defaultTabComponent:nu,rightHeaderActionsComponent:Ho,watermarkComponent:UU,defaultRenderer:`always`,onReady:C}),(0,I.jsx)(ko,{agent:e,floating:n,setFloating:v,columnWidth:i,setColumnWidth:y,minWidth:IU,maxWidth:LU}),(0,I.jsx)(Xl,{openFile:e=>{let t=b.current;t&&Ns(t,e)},openPanel:e=>{let t=b.current;t&&e!==`operator`&&Ps(t,e)},panels:kU,getCommands:w}),(0,I.jsx)(ou,{getApi:()=>b.current}),ee?(0,I.jsxs)(`div`,{className:`chord-hint`,role:`status`,children:[(0,I.jsx)(`kbd`,{children:ee}),(0,I.jsx)(`span`,{children:`waiting for the next key…`})]}):null]})})}function KU(){let e=Or(),[t,n]=g.useState(Ju);return g.useEffect(()=>Yu({onChange:n}),[]),HU(),t===`flow`?(0,I.jsx)(ZH,{agent:e}):(0,I.jsx)(GU,{agent:e})}var qU=document.getElementById(`root`);if(!qU)throw Error(`Missing #root`);ac(),OU(),(0,_.createRoot)(qU).render((0,I.jsx)(KU,{}));
|
package/dist/shell/index.html
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<link rel="icon" type="image/png" sizes="32x32" href="/__castle/ide/favicon-32x32.png" />
|
|
11
11
|
<link rel="icon" type="image/png" sizes="16x16" href="/__castle/ide/favicon-16x16.png" />
|
|
12
12
|
<link rel="icon" href="/__castle/ide/favicon.ico" sizes="any" />
|
|
13
|
-
<script type="module" crossorigin src="/__castle/ide/assets/index-
|
|
13
|
+
<script type="module" crossorigin src="/__castle/ide/assets/index-DXBpj3-y.js"></script>
|
|
14
14
|
<link rel="stylesheet" crossorigin href="/__castle/ide/assets/index-BkJ87APM.css">
|
|
15
15
|
</head>
|
|
16
16
|
<body>
|
package/dist/vitePlugins.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as path from 'path';
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import { IMPORTS_DIR } from './imports.js';
|
|
4
|
-
import { resolveFileTypes } from './editorConfig.js';
|
|
4
|
+
import { dataModeOf, resolveFileTypes } from './editorConfig.js';
|
|
5
5
|
// Mirrors castle-web-sdk's IMPORTS_PREFIX, which is the definition deck code
|
|
6
6
|
// uses. Duplicated rather than imported: the CLI compiles under node16 module
|
|
7
7
|
// resolution and the SDK's published types don't, and one short string is not
|
|
@@ -25,13 +25,22 @@ const IMPORTS_PREFIX = '@imports/';
|
|
|
25
25
|
// declares anything, kept so decks written before the declaration existed behave
|
|
26
26
|
// as they did.
|
|
27
27
|
const FALLBACK_DATA_FILE_EXTS = ['.scene', '.drawing', '.pxart', '.sprite'];
|
|
28
|
-
|
|
28
|
+
// Extension -> how to hand it back when a module imports it. "json" parses it,
|
|
29
|
+
// "text" returns the raw string; a format that is neither (a `.md` an editor
|
|
30
|
+
// owns, say) simply isn't in here and stays an ordinary module.
|
|
31
|
+
function dataFileModes(root) {
|
|
29
32
|
const resolved = resolveFileTypes(root);
|
|
30
33
|
// Declared file types with no data entries mean exactly that: a deck whose
|
|
31
34
|
// files are all modules. Only "nobody said anything" falls back.
|
|
32
35
|
if (!resolved)
|
|
33
|
-
return FALLBACK_DATA_FILE_EXTS;
|
|
34
|
-
|
|
36
|
+
return new Map(FALLBACK_DATA_FILE_EXTS.map((ext) => [ext, 'json']));
|
|
37
|
+
const modes = new Map();
|
|
38
|
+
for (const type of resolved) {
|
|
39
|
+
const mode = dataModeOf(type);
|
|
40
|
+
if (mode)
|
|
41
|
+
modes.set(type.ext, mode);
|
|
42
|
+
}
|
|
43
|
+
return modes;
|
|
35
44
|
}
|
|
36
45
|
// `@imports/<alias>/...` is how a deck names a file of another deck it imports,
|
|
37
46
|
// in JS as in everything else (see castle-web-sdk's resolveDeckFile). Imports are
|
|
@@ -62,19 +71,23 @@ export function importsAliasPlugin() {
|
|
|
62
71
|
export function sceneFilesPlugin() {
|
|
63
72
|
// Resolved once per plugin instance, from the root vite is configured with --
|
|
64
73
|
// the deck being served or bundled.
|
|
65
|
-
let
|
|
74
|
+
let modes = new Map(FALLBACK_DATA_FILE_EXTS.map((ext) => [ext, 'json']));
|
|
66
75
|
return {
|
|
67
76
|
name: 'castle-scene-files',
|
|
68
77
|
configResolved(config) {
|
|
69
|
-
|
|
78
|
+
modes = dataFileModes(config.root);
|
|
70
79
|
},
|
|
71
80
|
load(id) {
|
|
72
81
|
const [filePath, query] = id.split('?');
|
|
73
82
|
if (query !== undefined)
|
|
74
83
|
return null;
|
|
75
|
-
|
|
84
|
+
for (const [ext, mode] of modes) {
|
|
85
|
+
if (!filePath.endsWith(ext))
|
|
86
|
+
continue;
|
|
76
87
|
const text = fs.readFileSync(filePath, 'utf-8');
|
|
77
|
-
return
|
|
88
|
+
return mode === 'text'
|
|
89
|
+
? `export default ${JSON.stringify(text)};\n`
|
|
90
|
+
: `export default JSON.parse(${JSON.stringify(text)});\n`;
|
|
78
91
|
}
|
|
79
92
|
return null;
|
|
80
93
|
},
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import React, { useEffect, useRef, useState } from 'react';
|
|
8
8
|
import { onBeforeRestart, onSaveReloadState, takeReloadState, writeFile } from 'castle-web-sdk';
|
|
9
9
|
import { getFileKind } from '../engine/files';
|
|
10
|
+
import { hasEditorModule, loadEditorModule } from './editorRegistry';
|
|
10
11
|
import { useLiveDeckFiles } from '../engine/liveReload';
|
|
11
12
|
import { collectAssets } from '../engine/assets';
|
|
12
13
|
import { MainEditor, styles } from '../engine/ui';
|
|
@@ -65,7 +66,33 @@ function useFileSaver() {
|
|
|
65
66
|
return { schedule, hasPending };
|
|
66
67
|
}
|
|
67
68
|
|
|
68
|
-
|
|
69
|
+
// A file type whose declaring deck named an editor module: load that module and
|
|
70
|
+
// render it, rather than matching the path against this kit's own list. This is
|
|
71
|
+
// what lets a deck hold two kits -- each type reaches its own declarer's editor,
|
|
72
|
+
// and neither kit has to know the other exists.
|
|
73
|
+
function DeclaredEditor({ path, module: modulePath, text, onChange, files, onChangeFile }) {
|
|
74
|
+
const [Editor, setEditor] = useState(null);
|
|
75
|
+
const [error, setError] = useState(null);
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
let alive = true;
|
|
78
|
+
setEditor(null);
|
|
79
|
+
setError(null);
|
|
80
|
+
loadEditorModule(modulePath).then(
|
|
81
|
+
(loaded) => alive && setEditor(() => loaded),
|
|
82
|
+
(e) => alive && setError(e instanceof Error ? e.message : String(e)),
|
|
83
|
+
);
|
|
84
|
+
return () => {
|
|
85
|
+
alive = false;
|
|
86
|
+
};
|
|
87
|
+
}, [modulePath]);
|
|
88
|
+
if (error) return <div className={styles.editorBody}>{error}</div>;
|
|
89
|
+
if (!Editor) return <div className={styles.editorBody}>loading editor…</div>;
|
|
90
|
+
return (
|
|
91
|
+
<Editor path={path} text={text} onChange={onChange} files={files} onChangeFile={onChangeFile} />
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export function SingleEditor({ path, editor, editorModule }) {
|
|
69
96
|
// Selection survives a code-change reload: stashed via the SDK's save-state
|
|
70
97
|
// hook right before the reload, picked back up here on boot.
|
|
71
98
|
const stashKey = `single-editor:${path}`;
|
|
@@ -96,7 +123,21 @@ export function SingleEditor({ path, editor }) {
|
|
|
96
123
|
const kind = editor || getFileKind(path);
|
|
97
124
|
const text = files[path] ?? '';
|
|
98
125
|
let body = null;
|
|
99
|
-
|
|
126
|
+
// A declared module wins over this kit's own extension matching -- including
|
|
127
|
+
// over its own types, so the kit's editors are reachable the same way anyone
|
|
128
|
+
// else's are once physics-2d names them in castle.json.
|
|
129
|
+
if (editorModule && hasEditorModule(editorModule)) {
|
|
130
|
+
body = (
|
|
131
|
+
<DeclaredEditor
|
|
132
|
+
path={path}
|
|
133
|
+
module={editorModule}
|
|
134
|
+
text={text}
|
|
135
|
+
onChange={onChange}
|
|
136
|
+
files={files}
|
|
137
|
+
onChangeFile={onChangeFile}
|
|
138
|
+
/>
|
|
139
|
+
);
|
|
140
|
+
} else if (kind === 'scene') {
|
|
100
141
|
body = (
|
|
101
142
|
<SceneEditor
|
|
102
143
|
path={path}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Every editor module any deck here declares -- this deck's own and each
|
|
2
|
+
// import's -- keyed by its path from the deck root, which is exactly what
|
|
3
|
+
// `castle.json` `editor` resolves to (see resolveFileTypes in the CLI).
|
|
4
|
+
//
|
|
5
|
+
// A glob rather than a dynamic `import(path)`: the specifier has to be static
|
|
6
|
+
// for the module to survive bundling into a deck's single published file, the
|
|
7
|
+
// same reason behaviorRegistry and files.js glob. NOT eager, so an editor is a
|
|
8
|
+
// separate chunk that the play route never evaluates.
|
|
9
|
+
//
|
|
10
|
+
// Editors live under `editors/` by convention; that is what makes a third
|
|
11
|
+
// party's editor reachable from here without this kit knowing it exists.
|
|
12
|
+
const modules = {
|
|
13
|
+
...import.meta.glob('/imports/*/editors/**/*.{jsx,js}'),
|
|
14
|
+
...import.meta.glob('/editors/**/*.{jsx,js}'),
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export function hasEditorModule(path) {
|
|
18
|
+
return Boolean(path && modules[`/${path}`]);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Load one, returning its default export. Throws a legible error rather than
|
|
22
|
+
// letting the caller see `undefined is not a function` three frames later.
|
|
23
|
+
export async function loadEditorModule(path) {
|
|
24
|
+
const load = modules[`/${path}`];
|
|
25
|
+
if (!load) {
|
|
26
|
+
throw new Error(
|
|
27
|
+
`No editor module at "${path}". Editors must live under editors/ so the registry glob can reach them.`,
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
const mod = await load();
|
|
31
|
+
const Editor = mod.default ?? mod.Editor;
|
|
32
|
+
if (!Editor) throw new Error(`"${path}" has no default export to render as an editor.`);
|
|
33
|
+
return Editor;
|
|
34
|
+
}
|
package/kits/physics-2d/main.jsx
CHANGED
|
@@ -12,13 +12,22 @@ if (!root) throw new Error('Missing root element');
|
|
|
12
12
|
// File browsing and the code/text editor are now builtin shell panels, so the
|
|
13
13
|
// kit only renders the deck (play) and its rich per-file editors (scene/pxart):
|
|
14
14
|
// (no edit / ?edit=0) -> play the deck (playtest panel)
|
|
15
|
-
// ?file=<path>[&
|
|
15
|
+
// ?file=<path>[&editorModule=<path>] -> a single rich editor for that file
|
|
16
16
|
const params = new URLSearchParams(window.location.search);
|
|
17
17
|
function pick() {
|
|
18
18
|
const initialScene = params.get('scene') ?? undefined;
|
|
19
19
|
if (!isEdit()) return <PlayOnly initialScene={initialScene} />;
|
|
20
20
|
const file = params.get('file');
|
|
21
|
-
if (file)
|
|
21
|
+
if (file)
|
|
22
|
+
return (
|
|
23
|
+
<SingleEditor
|
|
24
|
+
path={file}
|
|
25
|
+
editor={params.get('editor') ?? undefined}
|
|
26
|
+
// Which module edits this file, resolved by the serve from whichever
|
|
27
|
+
// deck declared the type -- see `editor` in castle.json.
|
|
28
|
+
editorModule={params.get('editorModule') ?? undefined}
|
|
29
|
+
/>
|
|
30
|
+
);
|
|
22
31
|
return <PlayOnly initialScene={initialScene} />;
|
|
23
32
|
}
|
|
24
33
|
createRoot(root).render(<ErrorBoundary>{pick()}</ErrorBoundary>);
|