@roughapp/feature 0.1.0

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/index.js ADDED
@@ -0,0 +1,79 @@
1
+ import{z as e}from"zod";import{errorBoundary as t}from"@stayradiated/error-boundary";import{z as n}from"zod/mini";import*as r from"svelte/internal/client";import{getContext as i,mount as a,onDestroy as o,onMount as s,unmount as c,untrack as l}from"svelte";import"svelte/internal/disclose-version";import"svelte/internal/flags/async";import{SvelteMap as u,SvelteSet as d}from"svelte/reactivity";import{newMessagePortRpcSession as f}from"capnweb";import"@andypf/json-viewer";var p=e=>Object.fromEntries(e.map(e=>{switch(e.type){case`mutation`:case`query`:return[e.id,t=>e.call(t)];case`subscription`:return[e.id,async(t,n)=>{let r=n.dup(),i=await e.subscribe(r,t);return async()=>{i(),r[Symbol.dispose]()}}];default:throw Error(`Unknown tool type: '${JSON.stringify(e)}'`)}})),m=e=>Object.fromEntries(e.map(e=>{switch(e.type){case`mutation`:case`query`:return[e.id,async t=>e.outputSample];case`subscription`:return[e.id,async(t,n)=>{let r=n.dup();return r(e.outputSample),async()=>{r[Symbol.dispose]()}}];default:throw Error(`Unknown tool type: '${JSON.stringify(e)}'`)}})),h=e=>({type:e.type,id:e.id,name:e.name,description:e.description,inputSchema:e.inputSchema.toJSONSchema(),outputSchema:e.outputSchema.toJSONSchema(),outputSample:e.outputSample}),g=class t{type=`mutation`;id;name;description;inputSchema;outputSchema;outputSample;implementation;static create(e){new t(e)}constructor(e){this.id=e.id,this.name=e.name,this.description=e.description,this.inputSchema=e.inputSchema,this.outputSchema=e.outputSchema,this.outputSample=e.outputSample,this.implementation=e.implementation}toJSON(){return h(this)}async call(t){let n=this.inputSchema.safeParse(t);if(!n.success)throw Error(`Invalid input for ${this.id}: ${e.prettifyError(n.error)}`);let r=await this.implementation(n.data),i=this.outputSchema.safeParse(r);if(!i.success)throw Error(`Invalid output for ${this.id}: ${e.prettifyError(i.error)}`);return i.data}},_=class t{type=`query`;id;name;description;inputSchema;outputSchema;outputSample;implementation;static create(e){new t(e)}constructor(e){this.id=e.id,this.name=e.name,this.description=e.description,this.inputSchema=e.inputSchema,this.outputSchema=e.outputSchema,this.outputSample=e.outputSample,this.implementation=e.implementation}toJSON(){return h(this)}async call(t){let n=this.inputSchema.safeParse(t);if(!n.success)throw Error(`Invalid input for ${this.id}: ${e.prettifyError(n.error)}`);let r=await this.implementation(n.data),i=this.outputSchema.safeParse(r);if(!i.success)throw Error(`Invalid output for ${this.id}: ${e.prettifyError(i.error)}`);return i.data}},v=class t{type=`subscription`;id;name;description;inputSchema;outputSchema;outputSample;implementation;static create(e){new t(e)}constructor(e){this.id=e.id,this.name=e.name,this.description=e.description,this.inputSchema=e.inputSchema,this.outputSchema=e.outputSchema,this.outputSample=e.outputSample,this.implementation=e.implementation}toJSON(){return h(this)}async subscribe(t,n){let r=this.inputSchema.safeParse(n);if(!r.success)throw Error(`Invalid input for ${this.id}: ${e.prettifyError(r.error)}`);return await this.implementation(n=>{let r=this.outputSchema.safeParse(n);if(!r.success)throw Error(`Invalid output for ${this.id}: ${e.prettifyError(r.error)}`);t(r.data)},r.data)}},y=e=>e,b=e=>n.object({token:n.string().check(n.minLength(1),n.refine(e=>e.trim()!==``,{message:`Token must not be empty or whitespace`})),expiresAt:n.number().check(n.int(),n.gt(e))}),x=(e,t=Date.now())=>{let r=b(t).safeParse(e);return r.success?r.data:Error(n.prettifyError(r.error))},S=`https://gateway.rough.app`,C=S,w,ee=e=>{C=e.baseUrl??S,w=e.projectId},te=()=>C,T=()=>{if(!w)throw Error("You must call `initRough()` before using the components");return w},E=e=>{let t=new URL(e.path,te());for(let[n,r]of Object.entries(e.query??{}))r!==void 0&&t.searchParams.set(n,String(r));return t.toString()},D=class extends Error{status;constructor(e,t){super(t),this.name=`GatewayHttpError`,this.status=e}},O=n.object({message:n.string()}),k=async e=>{let t=`Gateway request failed with status ${e.status}`;try{let n=await e.json(),r=O.safeParse(n);r.success&&(t=r.data.message)}catch{}return new D(e.status,t)},A=async e=>{try{return await e.json()}catch{return Error(`Gateway returned an invalid JSON response`)}},ne=async e=>{let{projectId:n,userToken:r}=e,i=await t(()=>fetch(E({path:`/api/v1/project/${encodeURIComponent(n)}/session-token`}),{method:`POST`,headers:{authorization:`Bearer ${r}`}}));if(i instanceof Error)return i;if(!i.ok)return k(i);let a=await A(i);return a instanceof Error?a:x(a)},re=n.object({token:n.string(),expiresAt:n.number()}),j=e=>re.safeParse(e).success,M=1e3,ie=3e4,N=6e4,P=e=>Math.min(M*2**Math.max(e-1,0),ie),F=(e,t)=>t>=e.expiresAt-N,ae=e=>{let{fetchSessionToken:t,now:n=Date.now}=e,r,i,a=0,o=0,s=0,c=()=>{r=void 0,i=void 0,a=0,o=0,s+=1},l=e=>{r&&(e!==void 0&&r.token!==e||(r=void 0))},u=()=>{let e=o-n();if(e>0)return Promise.reject(Error(`fetchSessionToken is rate limited after repeated failures; retry in ${e}ms`));let c=s;return i=t().then(e=>{if(c!==s)throw Error(`Session token fetch was reset before it completed`);return r=e,a=0,o=0,e.token}).catch(e=>{throw c===s&&(r=void 0,a+=1,o=n()+P(a)),e}).finally(()=>{c===s&&(i=void 0)}),i};return{getToken:()=>r&&!F(r,n())?Promise.resolve(r.token):i===void 0?u():i,invalidateToken:l,reset:c}},I,L,R,z,oe=e=>{let{baseUrl:t,projectId:n,fetchUserToken:r,exchangeIdentityTokenForSessionToken:i=ne}=e;(I!==t||L!==n||R!==r)&&(z?.reset(),z=ae({fetchSessionToken:async()=>{let e=await r();if(typeof e==`string`){if(e.trim()===``)throw Error(`fetchUserToken must return a non-empty string`);let t=await i({projectId:n,userToken:e});if(t instanceof Error)throw t;return t}if(j(e)){let t=x(e);if(t instanceof Error)throw t;return t}throw Error(`fetchUserToken must return a non-empty string`)}}),I=t,L=n,R=r)},B=async()=>{if(!z)throw Error(`fetchUserToken must be provided!`);return z.getToken()},se=e=>{z?.invalidateToken(e)},V=e=>e instanceof D&&e.status===401,H=async e=>{let t=await e.getSessionToken(),n=await e.call(t);if(!(n instanceof Error)||!V(n))return n;e.invalidateSessionToken(t);let r=await e.getSessionToken();return e.call(r)},U=async e=>H({getSessionToken:B,invalidateSessionToken:se,call:e.call}),W=async e=>{let{path:t,method:r=`GET`,bearerToken:i,body:a,query:o,signal:s,schema:c,invalidResponseMessage:l}=e,u;try{u=await fetch(E({path:t,query:o}),{method:r,signal:s,headers:{authorization:`Bearer ${i}`,...a===void 0?{}:{"content-type":`application/json`}},...a===void 0?{}:{body:JSON.stringify(a)}})}catch(e){return e instanceof Error?e:Error(String(e))}if(!u.ok)return k(u);let d=await A(u);if(d instanceof Error)return d;let f=c.safeParse(d);return f.success?f.data:Error(`${l}\n${n.prettifyError(f.error)}`)},G=n.enum([`PENDING`,`IN_PROGRESS`,`READY`,`ERROR`]),K=n.object({id:n.string().check(n.minLength(1)),name:n.string()}),q=n.object({id:n.string().check(n.minLength(1)),spriteId:n.string().check(n.minLength(1)),parentSpriteBuildId:n.nullable(n.string().check(n.minLength(1))),createdByPerson:K,prompt:n.string(),status:G,artifactUrl:n.nullable(n.url()),sourceUrl:n.nullable(n.url()),startedAt:n.nullable(n.number()),stoppedAt:n.nullable(n.number()),error:n.nullable(n.record(n.string(),n.unknown())),reasoningSummary:n.nullable(n.string()),publishedAt:n.nullable(n.number())}),ce=n.array(q),J=n.object({id:n.string().check(n.minLength(1)),name:n.string(),ownedByPersonId:n.string().check(n.minLength(1)),publishedSpriteBuild:n.nullable(q)}),le=n.array(J),ue=async e=>{let{name:t,prompt:n,toolList:r,surfaceId:i,projectId:a,signal:o}=e;return U({call:e=>W({path:`/api/v1/project/${encodeURIComponent(a)}/sprite`,method:`POST`,bearerToken:e,signal:o,schema:J,invalidResponseMessage:`Create sprite returned an invalid response`,body:{surfaceId:i,name:t,prompt:n,toolList:r.map(e=>e.toJSON())}})})},de=async e=>{let{spriteId:t,parentSpriteBuildId:n,prompt:r,signal:i}=e,a=T();return U({call:e=>W({path:`/api/v1/project/${encodeURIComponent(a)}/sprite/${encodeURIComponent(t)}/build`,method:`POST`,bearerToken:e,signal:i,schema:q,invalidResponseMessage:`Create sprite build returned an invalid response`,body:{parentSpriteBuildId:n,prompt:r}})})},fe=async e=>{let{spriteId:t,signal:n}=e,r=T();return U({call:e=>W({path:`/api/v1/project/${encodeURIComponent(r)}/sprite/${encodeURIComponent(t)}`,bearerToken:e,signal:n,schema:J,invalidResponseMessage:`Get sprite returned an invalid response`})})},pe=async e=>{let{spriteId:t,spriteBuildId:n,signal:r}=e,i=T();return U({call:e=>W({path:`/api/v1/project/${encodeURIComponent(i)}/sprite/${encodeURIComponent(t)}/build/${encodeURIComponent(n)}`,bearerToken:e,signal:r,schema:q,invalidResponseMessage:`Get sprite build returned an invalid response`})})},me=n.enum([`STEP_STARTED`,`STEP_COMPLETED`,`STEP_FAILED`,`EXEC_STARTED`,`EXEC_COMPLETED`,`EXEC_FAILED`,`FETCH_STARTED`,`FETCH_COMPLETED`,`FETCH_FAILED`,`AGENT_STARTED`,`AGENT_COMPLETED`,`AGENT_TOOL_STARTED`,`AGENT_TOOL_COMPLETED`,`AGENT_TOOL_FAILED`,`AGENT_META`,`AGENT_MESSAGE`,`AGENT_THOUGHT`]),he=n.object({id:n.string().check(n.minLength(1)),spriteBuildId:n.string().check(n.minLength(1)),actionedAt:n.number(),type:me,detail:n.unknown()}),ge=n.array(he),_e=async e=>{let{spriteId:t,spriteBuildId:n,cursor:r,limit:i,signal:a}=e,o=T();return U({call:e=>W({path:`/api/v1/project/${encodeURIComponent(o)}/sprite/${encodeURIComponent(t)}/build/${encodeURIComponent(n)}/logs`,bearerToken:e,signal:a,schema:ge,invalidResponseMessage:`Get sprite build events returned an invalid response`,query:{cursor:r,limit:i}})})},ve=async e=>{let{spriteId:t,signal:n}=e,r=T();return U({call:e=>W({path:`/api/v1/project/${encodeURIComponent(r)}/sprite/${encodeURIComponent(t)}/build`,bearerToken:e,signal:n,schema:ce,invalidResponseMessage:`Get sprite build list returned an invalid response`})})},ye=async e=>{let{surfaceId:t,signal:n}=e,r=T();return U({call:e=>W({path:`/api/v1/project/${encodeURIComponent(r)}/sprite`,bearerToken:e,signal:n,schema:le,invalidResponseMessage:`Get sprite list returned an invalid response`,query:{surfaceId:t}})})},be=async e=>{let{projectId:t,signal:r}=e,i=await U({call:e=>W({path:`/api/v1/project/${encodeURIComponent(t)}/ping`,method:`POST`,bearerToken:e,signal:r,schema:n.object({success:n.boolean()}),invalidResponseMessage:`Ping project returned an invalid response`})});if(i instanceof Error)return i},xe=async e=>{let{spriteId:t,spriteBuildId:n,signal:r}=e,i=T();return U({call:e=>W({path:`/api/v1/project/${encodeURIComponent(i)}/sprite/${encodeURIComponent(t)}/publish`,method:`POST`,bearerToken:e,signal:r,schema:J,invalidResponseMessage:`Publish sprite returned an invalid response`,body:{spriteBuildId:n}})})},Se=n.object({id:n.string().check(n.minLength(1)),key:n.string(),name:n.string(),description:n.string()}),Ce=async e=>{let{key:t,name:n,description:r,toolList:i,projectId:a,signal:o}=e;return U({call:e=>W({path:`/api/v1/project/${encodeURIComponent(a)}/surface`,method:`POST`,bearerToken:e,signal:o,schema:Se,invalidResponseMessage:`Register surface returned an invalid response`,body:{key:t,name:n,description:r,toolList:i.map(e=>e.toJSON())}})})},we=e=>new Promise(t=>setTimeout(t,e)),Te=async e=>{let{spriteId:t,spriteBuildId:n,signal:r,onUpdate:i}=e;if(r?.aborted)return Error(r.reason);let a=await pe({spriteId:t,spriteBuildId:n,signal:r});return a instanceof Error?a:(i?.(a),a.status===`PENDING`||a.status===`IN_PROGRESS`?(await we(1e3),Te(e)):a)},Y=r.proxy({}),Ee=(e,t)=>(Y[e]=[...Y[e]??[],t],()=>{Y[e]=(Y[e]??[]).filter(e=>e!==t),Y[e].length===0&&delete Y[e]}),De=e=>{let t=Y[e];if(!t?.length)return;let[n]=t;if(n)return{surfaceId:n.surfaceId,toolList:n.toolList,triggerRefresh:()=>{for(let e of t)e.triggerRefresh()}}},Oe=(e,t)=>{let n=new AbortController,r,i,a=async()=>{if(!i||n.signal.aborted)return;let e=await ye({surfaceId:i,signal:n.signal});!(e instanceof Error)&&!n.signal.aborted&&t([...e.filter(e=>e.publishedSpriteBuild?.artifactUrl)].sort((e,t)=>e.id<t.id?1:e.id>t.id?-1:0))};return(async()=>{let t=T(),o=await Ce({key:e.key,name:e.name,description:e.description,toolList:e.toolList,projectId:t,signal:n.signal});!(o instanceof Error)&&!n.signal.aborted&&(i=o.id,r=Ee(e.key,{surfaceId:i,toolList:e.toolList,triggerRefresh:a}),await a())})(),()=>{n.abort(),r?.()}},ke=e=>{let{baseUrl:t,projectId:n,fetchUserToken:r}=e;ee({baseUrl:t,projectId:n}),oe({baseUrl:t,projectId:n,fetchUserToken:r}),be({projectId:n})},Ae={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":2,"stroke-linecap":`round`,"stroke-linejoin":`round`},je=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},Me=Symbol(`lucide-context`),Ne=()=>i(Me),Pe=new Set([`$$slots`,`$$events`,`$$legacy`,`$$host`,`name`,`color`,`size`,`strokeWidth`,`absoluteStrokeWidth`,`iconNode`,`children`]),Fe=r.from_svg(`<svg><!><!></svg>`);function Ie(e,t){r.push(t,!0);let n=Ne()??{},i=r.prop(t,`name`,7),a=r.prop(t,`color`,23,()=>n.color??`currentColor`),o=r.prop(t,`size`,23,()=>n.size??24),s=r.prop(t,`strokeWidth`,23,()=>n.strokeWidth??2),c=r.prop(t,`absoluteStrokeWidth`,23,()=>n.absoluteStrokeWidth??!1),l=r.prop(t,`iconNode`,23,()=>[]),u=r.prop(t,`children`,7),d=r.rest_props(t,Pe),f=r.derived(()=>c()?Number(s())*24/Number(o()):s());var p={get name(){return i()},set name(e){i(e),r.flush()},get color(){return a()},set color(e=n.color??`currentColor`){a(e),r.flush()},get size(){return o()},set size(e=n.size??24){o(e),r.flush()},get strokeWidth(){return s()},set strokeWidth(e=n.strokeWidth??2){s(e),r.flush()},get absoluteStrokeWidth(){return c()},set absoluteStrokeWidth(e=n.absoluteStrokeWidth??!1){c(e),r.flush()},get iconNode(){return l()},set iconNode(e=[]){l(e),r.flush()},get children(){return u()},set children(e){u(e),r.flush()}},m=Fe();r.attribute_effect(m,e=>({...Ae,...e,...d,width:o(),height:o(),stroke:a(),"stroke-width":r.get(f),class:[`lucide-icon lucide`,n.class,i()&&`lucide-${i()}`,t.class]}),[()=>!u()&&!je(d)&&{"aria-hidden":`true`}]);var h=r.child(m);r.each(h,17,l,r.index,(e,t)=>{var n=r.derived(()=>r.to_array(r.get(t),2));let i=()=>r.get(n)[0],a=()=>r.get(n)[1];var o=r.comment(),s=r.first_child(o);r.element(s,i,!0,(e,t)=>{r.attribute_effect(e,()=>({...a()}))}),r.append(e,o)});var g=r.sibling(h);return r.snippet(g,()=>u()??r.noop),r.reset(m),r.append(e,m),r.pop(p)}r.create_custom_element(Ie,{name:{},color:{},size:{},strokeWidth:{},absoluteStrokeWidth:{},iconNode:{},children:{}},[],[],{mode:`open`});var Le=new Set([`$$slots`,`$$events`,`$$legacy`,`$$host`]);function Re(e,t){let n=r.rest_props(t,Le),i=[[`path`,{d:`m5 12 7-7 7 7`}],[`path`,{d:`M12 19V5`}]];Ie(e,r.spread_props({name:`arrow-up`},()=>n,{get iconNode(){return i}}))}r.create_custom_element(Re,{},[],[],{mode:`open`});var ze=new Set([`$$slots`,`$$events`,`$$legacy`,`$$host`]);function Be(e,t){let n=r.rest_props(t,ze),i=[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`}]];Ie(e,r.spread_props({name:`loader-circle`},()=>n,{get iconNode(){return i}}))}r.create_custom_element(Be,{},[],[],{mode:`open`});var Ve=r.from_html(`<span class="loader-circle svelte-galthg" aria-hidden="true"><!></span>`),He={hash:`svelte-galthg`,code:`.loader-circle.svelte-galthg {display:inline-flex;
2
+ animation: svelte-galthg-spin 700ms linear infinite;}
3
+
4
+ @keyframes svelte-galthg-spin {
5
+ to {
6
+ transform: rotate(360deg);
7
+ }
8
+ }`};function X(e){r.append_styles(e,He);var t=Ve();Be(r.child(t),{size:16}),r.reset(t),r.append(e,t)}r.create_custom_element(X,{},[],[],{mode:`open`});var Ue=r.from_html(`<div class="summary dots svelte-qp0d57">Planning</div>`),We=r.from_html(`<span class="svelte-qp0d57">Done</span>`),Ge=r.from_html(`<span class="svelte-qp0d57">Failed</span>`),Ke=r.from_html(`<span class="chip svelte-qp0d57"> </span>`),qe=r.from_html(`<span class="svelte-qp0d57"> </span> <!>`,1),Je=r.from_html(`<span class="phase svelte-qp0d57"> </span>`),Ye=r.from_html(`<div class="trailing svelte-qp0d57"><!></div>`),Xe=r.from_html(`<span class="dots svelte-qp0d57"></span>`),Ze=r.from_html(`<div class="summary svelte-qp0d57"> <!></div>`),Qe=r.from_html(`<div class="summary placeholder svelte-qp0d57">Just getting started<span class="dots svelte-qp0d57"></span></div>`),$e=r.from_html(`<div class="top svelte-qp0d57"><div class="label svelte-qp0d57"><!></div> <!></div> <!>`,1),et=r.from_html(`<div><!></div>`),tt={hash:`svelte-qp0d57`,code:`.card.svelte-qp0d57 {padding:0.75rem 1rem;border:1px solid var(--base1, #93a1a1);background:transparent;display:flex;flex-direction:column;gap:0.4rem;}.top.svelte-qp0d57 {display:flex;align-items:center;justify-content:space-between;gap:0.75rem;color:var(--base01, #586e75);font-weight:600;}.label.svelte-qp0d57 {display:inline-flex;align-items:center;gap:0.5rem;min-width:0;}.trailing.svelte-qp0d57 {display:inline-flex;align-items:center;gap:0.5rem;color:var(--base1, #93a1a1);}.chip.svelte-qp0d57 {font-family:ui-monospace, SFMono-Regular, Menlo, monospace;font-size:0.8rem;font-weight:500;padding:0.1rem 0.4rem;background:var(--base2, #eee8d5);color:var(--base01, #586e75);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.phase.svelte-qp0d57 {text-transform:capitalize;}.summary.svelte-qp0d57 {font-size:0.95rem;color:var(--base00, #657b83);word-break:break-word;}.summary.placeholder.svelte-qp0d57 {color:var(--base1, #93a1a1);}.terminal.svelte-qp0d57 .label:where(.svelte-qp0d57) {color:var(--base01, #586e75);}.failed.svelte-qp0d57 .label:where(.svelte-qp0d57) {color:var(--orange, #cb4b16);}.dots.svelte-qp0d57::after {content:'';
9
+ animation: svelte-qp0d57-ellipsis 1.5s steps(4, end) infinite;}
10
+
11
+ @keyframes svelte-qp0d57-ellipsis {
12
+ 0% { content: ''; }
13
+ 25% { content: '.'; }
14
+ 50% { content: '..'; }
15
+ 75% { content: '...'; }
16
+ }`};function nt(e,t){r.push(t,!0),r.append_styles(e,tt);let n=r.prop(t,`activity`,7),i=r.prop(t,`summaryText`,7),a=r.derived(()=>n().status===`ready`||n().status===`error`),o=r.derived(()=>n().status===`error`||n().toolOutcome===`failed`||n().phase?.outcome===`failed`);var s={get activity(){return n()},set activity(e){n(e),r.flush()},get summaryText(){return i()},set summaryText(e){i(e),r.flush()}},c=et();let l;var u=r.child(c),d=e=>{var t=Ue();r.append(e,t)},f=e=>{var t=$e(),a=r.first_child(t),o=r.child(a),s=r.child(o),c=e=>{var t=We();r.append(e,t)},l=e=>{var t=Ge();r.append(e,t)},u=e=>{var t=qe(),i=r.first_child(t),a=r.child(i,!0);r.reset(i);var o=r.sibling(i,2),s=e=>{var t=Ke(),i=r.child(t,!0);r.reset(t),r.template_effect(()=>r.set_text(i,n().action.filename)),r.append(e,t)};r.if(o,e=>{n().action.filename&&e(s)}),r.template_effect(()=>r.set_text(a,n().action.verb)),r.append(e,t)},d=e=>{var t=Je(),i=r.child(t,!0);r.reset(t),r.template_effect(()=>r.set_text(i,n().phase.name)),r.append(e,t)};r.if(s,e=>{n().status===`ready`?e(c):n().status===`error`?e(l,1):n().action?e(u,2):n().phase&&e(d,3)}),r.reset(o);var f=r.sibling(o,2),p=e=>{var t=Ye();X(r.child(t),{}),r.reset(t),r.append(e,t)};r.if(f,e=>{n().status===`working`&&!n().toolOutcome&&!n().phase?.outcome&&e(p)}),r.reset(a);var m=r.sibling(a,2),h=e=>{var t=Ze(),a=r.child(t,!0),o=r.sibling(a),s=e=>{var t=Xe();r.append(e,t)};r.if(o,e=>{n().status===`working`&&e(s)}),r.reset(t),r.template_effect(()=>r.set_text(a,i())),r.append(e,t)},g=e=>{var t=Qe();r.append(e,t)};r.if(m,e=>{i()?e(h):n().status===`working`&&e(g,1)}),r.append(e,t)};return r.if(u,e=>{n().status===`idle`?e(d):e(f,-1)}),r.reset(c),r.template_effect(()=>l=r.set_class(c,1,`card svelte-qp0d57`,null,l,{terminal:r.get(a),failed:r.get(o)})),r.append(e,c),r.pop(s)}r.create_custom_element(nt,{activity:{},summaryText:{}},[],[],{mode:`open`});var rt=e=>{switch(e.name){case`edit`:return`Editing`;case`write`:return`Writing`;case`read`:return`Reading`;case`bash`:return`Running`;default:return`Using tool`}},it=(e,t)=>{let n,r,i;for(let t of e){let e=t;switch(e.type){case`AGENT_TOOL_STARTED`:{let{toolCallId:t,tool:i}=e.detail;n={tool:i.name,toolCallId:t,verb:rt(i),filename:`path`in i?i.path:i.command},r=void 0;break}case`AGENT_TOOL_COMPLETED`:n?.toolCallId===e.detail.toolCallId&&(r=`success`);break;case`AGENT_TOOL_FAILED`:n?.toolCallId===e.detail.toolCallId&&(r=`failed`);break;case`AGENT_STARTED`:i={name:`agent`,outcome:void 0};break;case`AGENT_COMPLETED`:i={name:`agent`,outcome:`success`};break}}let a;return a=t===`READY`?`ready`:t===`ERROR`?`error`:n||i?`working`:`idle`,{activity:a===`ready`?{status:a}:{status:a,action:n,toolOutcome:r,phase:i}}},at=r.from_html(`<div class="panel pending svelte-rsawb0"><!> <span>Waiting for build to start</span></div>`),ot=r.from_html(`<div class="build-log svelte-rsawb0"><!></div>`),st={hash:`svelte-rsawb0`,code:`.build-log.svelte-rsawb0 {width:100%;display:flex;flex-direction:column;gap:0.5rem;}.panel.svelte-rsawb0 {padding:0.75rem 1rem;border:1px solid var(--base1, #93a1a1);background:transparent;}.pending.svelte-rsawb0 {color:var(--base01, #586e75);font-weight:600;}.pending.svelte-rsawb0 {display:flex;align-items:center;gap:0.5rem;}`};function ct(e,t){r.push(t,!0),r.append_styles(e,st);let n=r.prop(t,`spriteBuild`,7),i=r.state(r.proxy([])),a=r.derived(()=>n().spriteId),o=r.derived(()=>n().id),s=r.derived(()=>n().status),c=r.derived(()=>it(r.get(i),r.get(s))),u=r.derived(()=>n().reasoningSummary??void 0),d=r.derived(()=>r.get(s)===`PENDING`);r.user_effect(()=>{let e=r.get(a),t=r.get(o),n=new AbortController,c;r.set(i,[],!0);let u=async()=>{let a=await _e({spriteId:e,spriteBuildId:t,cursor:c,signal:n.signal});if(a instanceof Error){console.error(a);return}a.length>0&&(c=a.at(-1)?.id,r.set(i,[...r.get(i),...a],!0))};return(async()=>{for(;!n.signal.aborted;){await u();let e=l(()=>r.get(s));if(e===`READY`||e===`ERROR`)return;await new Promise(e=>setTimeout(e,1e3))}})(),()=>{n.abort()}});var f={get spriteBuild(){return n()},set spriteBuild(e){n(e),r.flush()}},p=ot(),m=r.child(p),h=e=>{var t=at();X(r.child(t),{}),r.next(2),r.reset(t),r.append(e,t)},g=e=>{nt(e,{get activity(){return r.get(c).activity},get summaryText(){return r.get(u)}})};return r.if(m,e=>{r.get(d)?e(h):e(g,-1)}),r.reset(p),r.append(e,p),r.pop(f)}r.create_custom_element(ct,{spriteBuild:{}},[],[],{mode:`open`});var lt=e=>e.toLowerCase().split(/[_-]+/).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),ut=e=>{switch(e.name){case`edit`:case`read`:case`write`:return`${e.name} ${e.path}`;case`bash`:return e.command;default:return`tool call`}},dt=e=>{switch(e?.name){case`bash`:return`command`;case`read`:case`edit`:case`write`:return`path`;default:return`plain`}},ft=e=>{if(!(!e||typeof e!=`object`)){if(`message`in e&&typeof e.message==`string`)return e.message;if(`error`in e&&e.error&&typeof e.error==`object`){let t=ft(e.error);if(t)return t}if(`url`in e&&typeof e.url==`string`)return e.url;if(`command`in e&&typeof e.command==`string`)return e.command}},pt=e=>{let t=new Map,n=new Map,r=new Map;return e.map(e=>{let i=e,a,o=`plain`,s=`neutral`;switch(i.type){case`STEP_STARTED`:a=lt(i.detail.stepName),o=`xml-open`,s=`active`;break;case`STEP_COMPLETED`:a=lt(i.detail.stepName),o=`xml-close`,s=`success`;break;case`STEP_FAILED`:a=ft(i.detail.error)??lt(i.detail.stepName),s=`error`;break;case`EXEC_STARTED`:n.set(i.detail.execId,{command:i.detail.command,cwd:i.detail.cwd}),a=i.detail.command,o=`command`,s=`active`;break;case`EXEC_COMPLETED`:a=n.get(i.detail.execId)?.command,o=`command`,s=`success`;break;case`EXEC_FAILED`:a=n.get(i.detail.execId)?.command,o=`command`,s=`error`;break;case`FETCH_STARTED`:r.set(i.detail.fetchId,{url:i.detail.url}),a=i.detail.url,s=`active`;break;case`FETCH_COMPLETED`:a=r.get(i.detail.fetchId)?.url,s=`success`;break;case`FETCH_FAILED`:{let e=r.get(i.detail.fetchId);a=ft(i.detail.error)??e?.url,s=`error`;break}case`AGENT_STARTED`:s=`active`;break;case`AGENT_COMPLETED`:s=`success`;break;case`AGENT_TOOL_STARTED`:t.set(i.detail.toolCallId,i.detail.tool),a=ut(i.detail.tool),o=dt(i.detail.tool),s=`active`;break;case`AGENT_TOOL_COMPLETED`:{let e=t.get(i.detail.toolCallId);a=e?ut(e):i.detail.toolCallId,o=dt(e),s=`success`;break}case`AGENT_TOOL_FAILED`:{let e=t.get(i.detail.toolCallId);a=e?ut(e):i.detail.toolCallId,o=dt(e),s=`error`;break}case`AGENT_META`:a=i.detail.message,s=`neutral`;break;case`AGENT_MESSAGE`:a=i.detail.message,s=`neutral`;break;case`AGENT_THOUGHT`:a=i.detail.message,s=`neutral`;break;default:a=ft(e.detail),s=`neutral`;break}return{id:e.id,actionedAt:e.actionedAt,type:e.type,detailText:a,detailStyle:o,tone:s}})},mt=r.from_html(`<div class="polling-indicator svelte-5iw9fb"><!> <span>Live</span></div>`),ht=r.from_html(`<div class="panel state-panel svelte-5iw9fb"><!> <span>Loading build events…</span></div>`),gt=r.from_html(`<div class="panel state-panel error-panel svelte-5iw9fb"><div class="state-title svelte-5iw9fb">Couldn't load build events</div> <div class="state-detail svelte-5iw9fb"> </div></div>`),_t=r.from_html(`<div class="panel state-panel empty-panel svelte-5iw9fb"><div class="state-title svelte-5iw9fb"><!></div> <div class="state-detail"><!></div></div>`),vt=r.from_html(`<code class="svelte-5iw9fb"><strong class="svelte-5iw9fb"> </strong> </code>`),yt=r.from_html(`<code class="svelte-5iw9fb"> </code>`),bt=r.from_html(`<div><!></div>`),xt=r.from_html(`<span class="event-detail-empty svelte-5iw9fb">—</span>`),St=r.from_html(`<li><time class="event-date svelte-5iw9fb"> </time> <div class="event-type-cell svelte-5iw9fb"><span class="event-type svelte-5iw9fb"> </span></div> <div class="event-detail-cell svelte-5iw9fb"><!></div></li>`),Ct=r.from_html(`<ol class="event-list svelte-5iw9fb"></ol>`),wt=r.from_html(`<div class="detailed-build-log svelte-5iw9fb" aria-live="polite"><div class="header svelte-5iw9fb"><div><div class="eyebrow svelte-5iw9fb">Detailed logs</div> <div class="title svelte-5iw9fb">Build event stream</div></div> <!></div> <!></div>`),Tt={hash:`svelte-5iw9fb`,code:`.detailed-build-log.svelte-5iw9fb {border:1px solid var(--rough-surface-border, rgba(147, 161, 161, 0.32));}.header.svelte-5iw9fb {display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:0.85rem 1rem;border-bottom:1px solid var(--rough-surface-border, rgba(147, 161, 161, 0.32));}.eyebrow.svelte-5iw9fb {font-size:0.72rem;font-weight:700;letter-spacing:0.05em;text-transform:uppercase;color:var(--base01, #586e75);}.title.svelte-5iw9fb {margin-top:0.15rem;color:var(--rough-text, #073642);font-weight:600;}.polling-indicator.svelte-5iw9fb {display:inline-flex;align-items:center;gap:0.45rem;color:var(--rough-accent, #268bd2);font-size:0.85rem;font-weight:600;}.panel.svelte-5iw9fb {padding:0.85rem 1rem;}.state-panel.svelte-5iw9fb {display:flex;flex-direction:column;gap:0.35rem;color:var(--base00, #657b83);}.state-title.svelte-5iw9fb {color:var(--base01, #586e75);font-weight:600;}.error-panel.svelte-5iw9fb .state-title:where(.svelte-5iw9fb),
17
+ .error-panel.svelte-5iw9fb .state-detail:where(.svelte-5iw9fb) {color:var(--orange, #cb4b16);}.event-list.svelte-5iw9fb {list-style:none;margin:0;padding:0;display:grid;grid-template-columns:minmax(7.5rem, auto) minmax(12rem, auto) minmax(0, 1fr);}.event.svelte-5iw9fb {display:contents;}.event-date.svelte-5iw9fb,
18
+ .event-type-cell.svelte-5iw9fb,
19
+ .event-detail-cell.svelte-5iw9fb {padding-top:0.85rem;padding-bottom:0.85rem;border-top:1px solid var(--rough-surface-border, rgba(147, 161, 161, 0.24));}.event-date.svelte-5iw9fb {padding-left:1rem;font-size:0.8rem;color:var(--base01, #586e75);}.event-type-cell.svelte-5iw9fb,
20
+ .event-detail-cell.svelte-5iw9fb {min-width:0;}.event-detail-cell.svelte-5iw9fb {padding-right:1rem;}.event.svelte-5iw9fb:first-child .event-date:where(.svelte-5iw9fb),
21
+ .event.svelte-5iw9fb:first-child .event-type-cell:where(.svelte-5iw9fb),
22
+ .event.svelte-5iw9fb:first-child .event-detail-cell:where(.svelte-5iw9fb) {border-top:none;}.event-type.svelte-5iw9fb {display:inline-flex;align-self:flex-start;max-width:100%;padding:0.1rem 0.4rem;background:color-mix(in srgb, currentColor 12%, white);color:var(--base01, #586e75);font-size:0.72rem;font-weight:700;letter-spacing:0.03em;word-break:break-word;}.event-detail.svelte-5iw9fb {color:var(--base00, #657b83);font-size:0.92rem;white-space:pre-wrap;word-break:break-word;}.event-detail-xml.svelte-5iw9fb code:where(.svelte-5iw9fb) {font:inherit;font-family:var(
23
+ --rough-font-mono,
24
+ ui-monospace,
25
+ 'SFMono-Regular',
26
+ 'SF Mono',
27
+ Consolas,
28
+ 'Liberation Mono',
29
+ Menlo,
30
+ monospace
31
+ );font-weight:700;color:var(--rough-text, #073642);}.event-detail-empty.svelte-5iw9fb {color:var(--base1, #93a1a1);}.event-detail-command.svelte-5iw9fb code:where(.svelte-5iw9fb),
32
+ .event-detail-path.svelte-5iw9fb code:where(.svelte-5iw9fb) {font:inherit;font-family:var(
33
+ --rough-font-mono,
34
+ ui-monospace,
35
+ 'SFMono-Regular',
36
+ 'SF Mono',
37
+ Consolas,
38
+ 'Liberation Mono',
39
+ Menlo,
40
+ monospace
41
+ );font-weight:400;}.event-detail-command.svelte-5iw9fb strong:where(.svelte-5iw9fb) {font-weight:700;}.tone-active.svelte-5iw9fb .event-type:where(.svelte-5iw9fb) {color:var(--rough-accent, #268bd2);}.tone-success.svelte-5iw9fb .event-type:where(.svelte-5iw9fb) {color:var(--green, #859900);}.tone-error.svelte-5iw9fb .event-type:where(.svelte-5iw9fb) {color:var(--orange, #cb4b16);}
42
+
43
+ @media (max-width: 720px) {.event-list.svelte-5iw9fb {grid-template-columns:1fr;column-gap:0;}.event.svelte-5iw9fb {display:block;padding:0.85rem 0;border-top:1px solid var(--rough-surface-border, rgba(147, 161, 161, 0.24));}.event.svelte-5iw9fb:first-child {border-top:none;}.event-date.svelte-5iw9fb,
44
+ .event-type-cell.svelte-5iw9fb,
45
+ .event-detail-cell.svelte-5iw9fb {display:block;border-top:none;padding-top:0;padding-bottom:0;padding-left:1rem;padding-right:1rem;}.event-type-cell.svelte-5iw9fb {margin-top:0.35rem;}.event-detail-cell.svelte-5iw9fb {margin-top:0.55rem;}
46
+ }`};function Et(e,t){r.push(t,!0),r.append_styles(e,Tt);let n=r.prop(t,`spriteBuild`,7),i=r.prop(t,`loadEventList`,7,_e),a=r.prop(t,`pollIntervalMs`,7,1e3),o=r.state(r.proxy([])),s=r.state(void 0),c=r.state(!0),d=r.derived(()=>n().spriteId),f=r.derived(()=>n().id),p=r.derived(()=>n().status),m=r.derived(()=>pt(r.get(o))),h=r.derived(()=>r.get(p)===`PENDING`||r.get(p)===`IN_PROGRESS`),g=(e,t)=>{let n=new u(e.map(e=>[e.id,e]));for(let e of t)n.set(e.id,e);return[...n.values()].sort((e,t)=>e.actionedAt-t.actionedAt||e.id.localeCompare(t.id))},_=(e,t)=>new Promise(n=>{let r=setTimeout(n,e);t.addEventListener(`abort`,()=>{clearTimeout(r),n()},{once:!0})}),v=e=>new Intl.DateTimeFormat(void 0,{hour:`numeric`,minute:`2-digit`,second:`2-digit`}).format(new Date(e)),y=e=>{let t=e.trim(),n=t.match(/^(\S+)(?:\s+(.*))?$/);return n?{head:n[1]??t,tail:n[2]??``}:{head:t,tail:``}};r.user_effect(()=>{let e=r.get(d),t=r.get(f),n=i(),u=a(),p=new AbortController,m;r.set(o,[],!0),r.set(s,void 0),r.set(c,!0);let v=async()=>{for(;!p.signal.aborted;){let i=await n({spriteId:e,spriteBuildId:t,cursor:m,limit:100,signal:p.signal});if(p.signal.aborted)return;if(i instanceof Error){r.set(s,i,!0);return}if(i.length===0||(m=i.at(-1)?.id,r.set(o,g(r.get(o),i),!0),i.length<100))return}};return(async()=>{for(;!p.signal.aborted;){if(await v(),r.set(c,!1),r.get(s)||!l(()=>r.get(h)))return;await _(u,p.signal)}})(),()=>{p.abort()}});var b={get spriteBuild(){return n()},set spriteBuild(e){n(e),r.flush()},get loadEventList(){return i()},set loadEventList(e=_e){i(e),r.flush()},get pollIntervalMs(){return a()},set pollIntervalMs(e=1e3){a(e),r.flush()}},x=wt(),S=r.child(x),C=r.sibling(r.child(S),2),w=e=>{var t=mt();X(r.child(t),{}),r.next(2),r.reset(t),r.append(e,t)};r.if(C,e=>{r.get(h)&&!r.get(s)&&e(w)}),r.reset(S);var ee=r.sibling(S,2),te=e=>{var t=ht();X(r.child(t),{}),r.next(2),r.reset(t),r.append(e,t)},T=e=>{var t=gt(),n=r.sibling(r.child(t),2),i=r.child(n,!0);r.reset(n),r.reset(t),r.template_effect(()=>r.set_text(i,r.get(s).message)),r.append(e,t)},E=e=>{var t=_t(),n=r.child(t),i=r.child(n),a=e=>{var t=r.text(`Waiting for the build to emit logs`);r.append(e,t)},o=e=>{var t=r.text(`No build events yet`);r.append(e,t)};r.if(i,e=>{r.get(p)===`PENDING`?e(a):e(o,-1)}),r.reset(n);var s=r.sibling(n,2),c=r.child(s),l=e=>{var t=r.text(`Events will appear here as the build progresses.`);r.append(e,t)},u=e=>{var t=r.text(`This build did not record any events.`);r.append(e,t)};r.if(c,e=>{r.get(p)===`PENDING`||r.get(p)===`IN_PROGRESS`?e(l):e(u,-1)}),r.reset(s),r.reset(t),r.append(e,t)},D=e=>{var t=Ct();r.each(t,21,()=>r.get(m),e=>e.id,(e,t)=>{var n=St(),i=r.child(n),a=r.child(i,!0);r.reset(i);var o=r.sibling(i,2),s=r.child(o),c=r.child(s,!0);r.reset(s),r.reset(o);var l=r.sibling(o,2),u=r.child(l),d=e=>{var n=bt();let i;var a=r.child(n),o=e=>{let n=r.derived(()=>y(r.get(t).detailText));var i=vt(),a=r.child(i),o=r.child(a,!0);r.reset(a);var s=r.sibling(a,1,!0);r.reset(i),r.template_effect(()=>{r.set_text(o,r.get(n).head),r.set_text(s,r.get(n).tail?` ${r.get(n).tail}`:``)}),r.append(e,i)},s=e=>{let n=r.derived(()=>y(r.get(t).detailText));var i=vt(),a=r.child(i),o=r.child(a,!0);r.reset(a);var s=r.sibling(a,1,!0);r.reset(i),r.template_effect(()=>{r.set_text(o,r.get(n).head),r.set_text(s,r.get(n).tail?` ${r.get(n).tail}`:``)}),r.append(e,i)},c=e=>{var n=yt(),i=r.child(n);r.reset(n),r.template_effect(e=>r.set_text(i,`<${e??``}>`),[()=>r.get(t).detailText.replaceAll(` `,``)]),r.append(e,n)},l=e=>{var n=yt(),i=r.child(n);r.reset(n),r.template_effect(e=>r.set_text(i,`</${e??``}>`),[()=>r.get(t).detailText.replaceAll(` `,``)]),r.append(e,n)},u=e=>{var n=r.text();r.template_effect(()=>r.set_text(n,r.get(t).detailText)),r.append(e,n)};r.if(a,e=>{r.get(t).detailStyle===`command`?e(o):r.get(t).detailStyle===`path`?e(s,1):r.get(t).detailStyle===`xml-open`?e(c,2):r.get(t).detailStyle===`xml-close`?e(l,3):e(u,-1)}),r.reset(n),r.template_effect(()=>i=r.set_class(n,1,`event-detail svelte-5iw9fb`,null,i,{"event-detail-xml":r.get(t).detailStyle===`xml-open`||r.get(t).detailStyle===`xml-close`,"event-detail-command":r.get(t).detailStyle===`command`,"event-detail-path":r.get(t).detailStyle===`path`})),r.append(e,n)},f=e=>{var t=xt();r.append(e,t)};r.if(u,e=>{r.get(t).detailText?e(d):e(f,-1)}),r.reset(l),r.reset(n),r.template_effect((e,o)=>{r.set_class(n,1,`event tone-${r.get(t).tone}`,`svelte-5iw9fb`),r.set_attribute(i,`datetime`,e),r.set_text(a,o),r.set_text(c,r.get(t).type)},[()=>new Date(r.get(t).actionedAt).toISOString(),()=>v(r.get(t).actionedAt)]),r.append(e,n)}),r.reset(t),r.append(e,t)};return r.if(ee,e=>{r.get(c)?e(te):r.get(s)?e(T,1):r.get(m).length===0?e(E,2):e(D,-1)}),r.reset(x),r.append(e,x),r.pop(b)}r.create_custom_element(Et,{spriteBuild:{},loadEventList:{},pollIntervalMs:{}},[],[],{mode:`open`});var Dt=r.from_html(`<p class="detail svelte-elh43j"> </p>`),Ot=r.from_html(`<div class="error svelte-elh43j"><div class="error-label svelte-elh43j">Error</div> <div class="error-detail svelte-elh43j"> </div></div>`),kt=r.from_html(`<div class="overlay svelte-elh43j" role="dialog" aria-modal="true" aria-labelledby="confirm-overlay-title"><div class="panel svelte-elh43j"><h4 id="confirm-overlay-title" class="title svelte-elh43j"> </h4> <!> <!> <div class="actions svelte-elh43j"><!></div></div></div>`),At={hash:`svelte-elh43j`,code:`.overlay.svelte-elh43j {position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(7, 54, 66, 0.32);z-index:10;}.panel.svelte-elh43j {width:min(28rem, 90%);background:var(--rough-surface, white);border:1px solid var(--rough-surface-border, rgba(147, 161, 161, 0.32));padding:1.25rem;display:flex;flex-direction:column;gap:0.75rem;}.title.svelte-elh43j {margin:0;font-size:1rem;color:var(--rough-text, #073642);}.detail.svelte-elh43j {margin:0;font-size:0.9rem;color:var(--base01, #586e75);}.error.svelte-elh43j {background:color-mix(in srgb, var(--rough-danger, #cb4b16) 10%, white);border:1px solid var(--rough-danger, #cb4b16);padding:0.5rem 0.75rem;}.error-label.svelte-elh43j {font-size:0.75rem;font-weight:700;text-transform:uppercase;letter-spacing:0.05em;color:var(--rough-danger, #cb4b16);}.error-detail.svelte-elh43j {font-size:0.85rem;color:var(--rough-text, #073642);margin-top:0.25rem;}.actions.svelte-elh43j {display:flex;justify-content:flex-end;gap:0.5rem;margin-top:0.5rem;}`};function jt(e,t){r.push(t,!0),r.append_styles(e,At);let n=r.prop(t,`title`,7),i=r.prop(t,`detail`,7),a=r.prop(t,`error`,7),o=r.prop(t,`actions`,7);var s={get title(){return n()},set title(e){n(e),r.flush()},get detail(){return i()},set detail(e){i(e),r.flush()},get error(){return a()},set error(e){a(e),r.flush()},get actions(){return o()},set actions(e){o(e),r.flush()}},c=kt(),l=r.child(c),u=r.child(l),d=r.child(u,!0);r.reset(u);var f=r.sibling(u,2),p=e=>{var t=Dt(),n=r.child(t,!0);r.reset(t),r.template_effect(()=>r.set_text(n,i())),r.append(e,t)};r.if(f,e=>{i()&&e(p)});var m=r.sibling(f,2),h=e=>{var t=Ot(),n=r.sibling(r.child(t),2),i=r.child(n,!0);r.reset(n),r.reset(t),r.template_effect(()=>r.set_text(i,a().message)),r.append(e,t)};r.if(m,e=>{a()&&e(h)});var g=r.sibling(m,2),_=r.child(g);return r.snippet(_,o),r.reset(g),r.reset(l),r.reset(c),r.template_effect(()=>r.set_text(d,n())),r.append(e,c),r.pop(s)}r.create_custom_element(jt,{title:{},detail:{},error:{},actions:{}},[],[],{mode:`open`});var Mt=r.from_html(`<button type="button" role="tab"> </button>`),Nt=r.from_html(`<footer class="MobileTabBar svelte-17gs0md"><div class="tabs svelte-17gs0md" role="tablist"></div></footer>`),Pt={hash:`svelte-17gs0md`,code:`.MobileTabBar.svelte-17gs0md {display:none;flex:none;padding-bottom:env(safe-area-inset-bottom);border-top:1px solid var(--rough-surface-border, rgba(147, 161, 161, 0.32));background:var(--rough-surface, white);}.tabs.svelte-17gs0md {display:grid;grid-template-columns:repeat(var(--mobile-tab-count, 3), minmax(0, 1fr));}.tab.svelte-17gs0md {appearance:none;min-width:0;border:0;border-right:1px solid var(--rough-surface-border, rgba(147, 161, 161, 0.32));border-top:3px solid transparent;padding:0.7rem 0.75rem 0.85rem;background:transparent;color:var(--base01, #586e75);cursor:pointer;font:inherit;font-size:0.9rem;font-weight:650;line-height:1;transition:background-color 120ms ease, border-color 120ms ease, color 120ms ease;}.tab.svelte-17gs0md:last-child {border-right:0;}.tab.svelte-17gs0md:hover {background:color-mix(in srgb, var(--rough-text, #073642) 4%, white);color:var(--rough-text, #073642);}.tab.active.svelte-17gs0md {border-top-color:var(--rough-accent, #268bd2);background:white;color:var(--rough-accent, #268bd2);}.tab.svelte-17gs0md:focus-visible {outline:2px solid var(--rough-accent, #268bd2);outline-offset:-2px;}
47
+
48
+ @media (max-width: 1000px) {.MobileTabBar.svelte-17gs0md {display:block;}
49
+ }`};function Ft(e,t){r.push(t,!0),r.append_styles(e,Pt);let n=r.prop(t,`active`,15),i=r.prop(t,`tabs`,7),a=r.prop(t,`ariaLabel`,7,`Navigation`),o=e=>{let t=e.key;if(![`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes(t))return;let n=e.currentTarget,r=n.closest(`[role="tablist"]`),i=Array.from(r?.querySelectorAll(`[role="tab"]`)??[]),a=i.indexOf(n);if(a===-1||i.length===0)return;e.preventDefault();let o=t===`Home`?0:t===`End`?i.length-1:t===`ArrowLeft`?(a-1+i.length)%i.length:(a+1)%i.length;i[o]?.focus(),i[o]?.click()};var s={get active(){return n()},set active(e){n(e),r.flush()},get tabs(){return i()},set tabs(e){i(e),r.flush()},get ariaLabel(){return a()},set ariaLabel(e=`Navigation`){a(e),r.flush()}},c=Nt(),l=r.child(c);let u;return r.each(l,21,i,e=>e.key,(e,t)=>{var i=Mt();let a;var s=r.child(i,!0);r.reset(i),r.template_effect(()=>{a=r.set_class(i,1,`tab svelte-17gs0md`,null,a,{active:n()===r.get(t).key}),r.set_attribute(i,`aria-selected`,n()===r.get(t).key),r.set_attribute(i,`tabindex`,n()===r.get(t).key?0:-1),r.set_text(s,r.get(t).label)}),r.delegated(`click`,i,()=>n(r.get(t).key)),r.delegated(`keydown`,i,o),r.append(e,i)}),r.reset(l),r.reset(c),r.template_effect(()=>{r.set_attribute(c,`aria-label`,a()),r.set_attribute(l,`aria-label`,a()),u=r.set_style(l,``,u,{"--mobile-tab-count":i().length})}),r.append(e,c),r.pop(s)}r.delegate([`click`,`keydown`]),r.create_custom_element(Ft,{active:{},tabs:{},ariaLabel:{}},[],[],{mode:`open`});var It=r.from_html(`<button><!></button>`),Lt={hash:`svelte-om76s9`,code:`button.svelte-om76s9 {appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:0.5rem;border:1px solid var(--rough-accent, #268bd2);border-radius:0;padding:0.7rem 1rem;font-weight:600;cursor:pointer;color:var(--rough-background, #fdf6e3);background:var(--rough-accent, #268bd2);transition:background-color 120ms ease,
50
+ border-color 120ms ease,
51
+ opacity 120ms ease;}button.svelte-om76s9:hover {background:#1f7fc3;border-color:#1f7fc3;}button.svelte-om76s9:focus-visible {outline:3px solid color-mix(in srgb, var(--rough-accent, #268bd2) 25%, white);outline-offset:2px;}button.svelte-om76s9:disabled {cursor:not-allowed;opacity:0.55;}.block.svelte-om76s9 {display:flex;width:100%;}.iconOnly.svelte-om76s9 {padding-inline:0.7rem;min-width:2.6rem;min-height:2.6rem;}.alignStart.svelte-om76s9 {justify-content:flex-start;}`};function Z(e,t){r.push(t,!0),r.append_styles(e,Lt);let n=r.prop(t,`children`,7),i=r.prop(t,`class`,7,``),a=r.prop(t,`type`,7,`button`),o=r.prop(t,`disabled`,7,!1),s=r.prop(t,`onclick`,7),c=r.prop(t,`role`,7),l=r.prop(t,`block`,7,!1),u=r.prop(t,`iconOnly`,7,!1),d=r.prop(t,`alignStart`,7,!1),f=r.prop(t,`aria-label`,7),p=r.prop(t,`aria-haspopup`,7),m=r.prop(t,`aria-expanded`,7);var h={get children(){return n()},set children(e){n(e),r.flush()},get class(){return i()},set class(e=``){i(e),r.flush()},get type(){return a()},set type(e=`button`){a(e),r.flush()},get disabled(){return o()},set disabled(e=!1){o(e),r.flush()},get onclick(){return s()},set onclick(e){s(e),r.flush()},get role(){return c()},set role(e){c(e),r.flush()},get block(){return l()},set block(e=!1){l(e),r.flush()},get iconOnly(){return u()},set iconOnly(e=!1){u(e),r.flush()},get alignStart(){return d()},set alignStart(e=!1){d(e),r.flush()},get"aria-label"(){return f()},set"aria-label"(e){f(e),r.flush()},get"aria-haspopup"(){return p()},set"aria-haspopup"(e){p(e),r.flush()},get"aria-expanded"(){return m()},set"aria-expanded"(e){m(e),r.flush()}},g=It();let _;var v=r.child(g);return r.snippet(v,()=>n()??r.noop),r.reset(g),r.template_effect(()=>{r.set_attribute(g,`type`,a()),g.disabled=o(),r.set_attribute(g,`role`,c()),r.set_attribute(g,`aria-label`,f()),r.set_attribute(g,`aria-haspopup`,p()),r.set_attribute(g,`aria-expanded`,m()),_=r.set_class(g,1,r.clsx(i()),`svelte-om76s9`,_,{block:l(),iconOnly:u(),alignStart:d()})}),r.delegated(`click`,g,function(...e){s()?.apply(this,e)}),r.append(e,g),r.pop(h)}r.delegate([`click`]),r.create_custom_element(Z,{children:{},class:{},type:{},disabled:{},onclick:{},role:{},block:{},iconOnly:{},alignStart:{},"aria-label":{},"aria-haspopup":{},"aria-expanded":{}},[],[],{mode:`open`});var Rt=(e=window.document.body)=>t=>(e.appendChild(t),t.hidden=!1,()=>{t.parentNode===e&&e.removeChild(t)}),zt=r.from_html(`<dialog class="svelte-1phmmvx"><!></dialog>`),Bt={hash:`svelte-1phmmvx`,code:`dialog.svelte-1phmmvx {position:fixed;inset:2rem;width:auto;height:auto;max-width:none;max-height:none;margin:0;padding:0;border:none;background:transparent;}dialog.svelte-1phmmvx::backdrop {background:rgba(7, 54, 66, 0.42);}`};function Vt(e,t){r.push(t,!0),r.append_styles(e,Bt);let n=r.prop(t,`isOpen`,15,!0),i=r.prop(t,`onclose`,7),a=r.prop(t,`oncancel`,7),o=r.prop(t,`children`,7),s=r.state(void 0);r.user_effect(()=>{if(r.get(s)){if(n()&&!r.get(s).open){r.get(s).showModal();return}!n()&&r.get(s).open&&r.get(s).close()}});var c={get isOpen(){return n()},set isOpen(e=!0){n(e),r.flush()},get onclose(){return i()},set onclose(e){i(e),r.flush()},get oncancel(){return a()},set oncancel(e){a(e),r.flush()},get children(){return o()},set children(e){o(e),r.flush()}},l=zt(),u=r.child(l);return r.snippet(u,()=>o()??r.noop),r.reset(l),r.bind_this(l,e=>r.set(s,e),()=>r.get(s)),r.attach(l,Rt),r.event(`close`,l,()=>{n(!1),i()?.()}),r.event(`cancel`,l,function(...e){a()?.apply(this,e)}),r.append(e,l),r.pop(c)}r.create_custom_element(Vt,{isOpen:{},onclose:{},oncancel:{},children:{}},[],[],{mode:`open`});var Ht=r.from_html(`<button><!></button>`),Ut={hash:`svelte-1yyy6r1`,code:`button.svelte-1yyy6r1 {appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:0.5rem;border:1px solid var(--rough-border, #93a1a1);border-radius:0;padding:0.7rem 1rem;font-weight:600;cursor:pointer;color:var(--rough-text-secondary, #586e75);background:var(--rough-background, #fdf6e3);transition:border-color 120ms ease,
52
+ background-color 120ms ease,
53
+ opacity 120ms ease;}button.svelte-1yyy6r1:hover {border-color:var(--rough-accent-secondary, #2aa198);background:var(--rough-background-muted, #eee8d5);}button.svelte-1yyy6r1:focus-visible {outline:3px solid color-mix(in srgb, var(--rough-accent-secondary, #2aa198) 18%, white);outline-offset:2px;}button.svelte-1yyy6r1:disabled {cursor:not-allowed;opacity:0.55;}.block.svelte-1yyy6r1 {display:flex;width:100%;}.iconOnly.svelte-1yyy6r1 {padding-inline:0.7rem;min-width:2.6rem;min-height:2.6rem;}.alignStart.svelte-1yyy6r1 {justify-content:flex-start;}`};function Q(e,t){r.push(t,!0),r.append_styles(e,Ut);let n=r.prop(t,`children`,7),i=r.prop(t,`class`,7,``),a=r.prop(t,`type`,7,`button`),o=r.prop(t,`disabled`,7,!1),s=r.prop(t,`onclick`,7),c=r.prop(t,`role`,7),l=r.prop(t,`block`,7,!1),u=r.prop(t,`iconOnly`,7,!1),d=r.prop(t,`alignStart`,7,!1),f=r.prop(t,`aria-label`,7),p=r.prop(t,`aria-haspopup`,7),m=r.prop(t,`aria-expanded`,7);var h={get children(){return n()},set children(e){n(e),r.flush()},get class(){return i()},set class(e=``){i(e),r.flush()},get type(){return a()},set type(e=`button`){a(e),r.flush()},get disabled(){return o()},set disabled(e=!1){o(e),r.flush()},get onclick(){return s()},set onclick(e){s(e),r.flush()},get role(){return c()},set role(e){c(e),r.flush()},get block(){return l()},set block(e=!1){l(e),r.flush()},get iconOnly(){return u()},set iconOnly(e=!1){u(e),r.flush()},get alignStart(){return d()},set alignStart(e=!1){d(e),r.flush()},get"aria-label"(){return f()},set"aria-label"(e){f(e),r.flush()},get"aria-haspopup"(){return p()},set"aria-haspopup"(e){p(e),r.flush()},get"aria-expanded"(){return m()},set"aria-expanded"(e){m(e),r.flush()}},g=Ht();let _;var v=r.child(g);return r.snippet(v,()=>n()??r.noop),r.reset(g),r.template_effect(()=>{r.set_attribute(g,`type`,a()),g.disabled=o(),r.set_attribute(g,`role`,c()),r.set_attribute(g,`aria-label`,f()),r.set_attribute(g,`aria-haspopup`,p()),r.set_attribute(g,`aria-expanded`,m()),_=r.set_class(g,1,r.clsx(i()),`svelte-1yyy6r1`,_,{block:l(),iconOnly:u(),alignStart:d()})}),r.delegated(`click`,g,function(...e){s()?.apply(this,e)}),r.append(e,g),r.pop(h)}r.delegate([`click`]),r.create_custom_element(Q,{children:{},class:{},type:{},disabled:{},onclick:{},role:{},block:{},iconOnly:{},alignStart:{},"aria-label":{},"aria-haspopup":{},"aria-expanded":{}},[],[],{mode:`open`});var Wt=`2.0.0`,Gt=`app.rough.frame.server.port`,Kt=(e,t)=>!!e&&typeof e==`object`&&`type`in e&&e.type===t&&`version`in e&&typeof e.version==`string`,qt=class{serverWindow;clientWindow;clientOrigin;createSession;createMessageChannel;session;listening=!1;constructor(e){this.serverWindow=e.serverWindow,this.clientWindow=e.clientWindow,this.clientOrigin=e.clientOrigin,this.createSession=e.createSession,this.createMessageChannel=e.createMessageChannel??(()=>new MessageChannel)}start(){this.listening||=(this.serverWindow.addEventListener(`message`,this.onMessage),!0)}stop(){this.listening&&(this.serverWindow.removeEventListener(`message`,this.onMessage),this.listening=!1,this.disposeSession())}onMessage=e=>{if(this.clientOrigin!==`*`&&e.origin!==this.clientOrigin){console.warn(`ignoring message from unexpected origin: "${e.origin}"`);return}if(!Kt(e.data,`app.rough.frame.client.ready`)){console.warn(`ignoring message with unexpected type: "${e.data.type}"`);return}if(e.source!==this.clientWindow){console.warn(`ignoring message from unexpected source`);return}let t=this.createMessageChannel();this.disposeSession(),this.session=this.createSession(t.port1),this.clientWindow.postMessage({type:Gt,version:Wt},{targetOrigin:this.clientOrigin,transfer:[t.port2]})};disposeSession(){this.session&&=(this.session[Symbol.dispose]?.(),void 0)}},Jt=[{},{}],Yt=e=>{let{store:t,iframeElement:n,onReportSize:r,getBridgeMethodDefinitions:i}=e;return{_internal:{reportSize(e){n&&(n.style.minHeight=`${e.height}px`),r?.(e)},getBridgeMethodDefinitions(){return i?.()??[]},state:{get(){return t.get()??Jt},set(e){t.set(e)},addListener(e){let n=e.dup(),r=t.addListener(n);return()=>{r(),n[Symbol.dispose]()}}}}}},Xt=class{containerElement;channelServer;iframeElement;constructor(e){let{iframe:t,serverWindow:n=globalThis.window,clientOrigin:r=`*`,getTools:i,getBridgeMethodDefinitions:a,store:o}=e,s;if(`contentWindow`in t)this.iframeElement=void 0,s=t.contentWindow;else{let{containerElement:e,src:n,title:r,allow:i=[`fullscreen`,`camera`,`microphone`]}=t;this.containerElement=e,this.iframeElement=document.createElement(`iframe`),this.iframeElement.width=`100%`,this.iframeElement.src=n,this.iframeElement.title=r,this.iframeElement.allow=i.join(`; `),this.iframeElement.style=`border: none;`,e.appendChild(this.iframeElement),s=this.iframeElement.contentWindow??void 0}if(!s)throw Error(`no client window`);let c=Yt({store:o,iframeElement:this.iframeElement,onReportSize:t.onReportSize,getBridgeMethodDefinitions:a});this.channelServer=new qt({clientWindow:s,serverWindow:n,clientOrigin:r,createSession:e=>f(e,{...i(),...c})})}start(){this.channelServer.start()}stop(){this.channelServer.stop(),this.containerElement&&this.iframeElement&&(this.containerElement.removeChild(this.iframeElement),this.iframeElement=void 0)}},Zt=r.from_html(`<div><!></div>`);function Qt(e,t){r.push(t,!0);let n=r.prop(t,`handle`,7),i=r.prop(t,`children`,7),a=r.prop(t,`class`,7,``),s,c=r.derived(()=>[n().class,a()].filter(Boolean).join(` `));o(()=>{s&&n().destroy(s)});var l={get handle(){return n()},set handle(e){n(e),r.flush()},get children(){return i()},set children(e){i(e),r.flush()},get class(){return a()},set class(e=``){a(e),r.flush()}},u=Zt(),d=r.child(u);return r.snippet(d,()=>i()??r.noop),r.reset(u),r.bind_this(u,e=>s=e,()=>s),r.template_effect(()=>{r.set_class(u,1,r.clsx(r.get(c))),r.set_attribute(u,`role`,n().role),r.set_attribute(u,`aria-orientation`,n()[`aria-orientation`]),r.set_attribute(u,`aria-label`,n()[`aria-label`]),r.set_attribute(u,`title`,n().title)}),r.delegated(`pointerdown`,u,function(...e){n().onpointerdown?.apply(this,e)}),r.delegated(`pointermove`,u,function(...e){n().onpointermove?.apply(this,e)}),r.delegated(`pointerup`,u,function(...e){n().onpointerup?.apply(this,e)}),r.event(`pointercancel`,u,function(...e){n().onpointercancel?.apply(this,e)}),r.delegated(`dblclick`,u,function(...e){n().ondblclick?.apply(this,e)}),r.append(e,u),r.pop(l)}r.delegate([`pointerdown`,`pointermove`,`pointerup`,`dblclick`]),r.create_custom_element(Qt,{handle:{},children:{},class:{}},[],[],{mode:`open`});var $t=e=>e.minHeight??100,en=e=>e.maxHeight??2e3,tn=(e,t)=>Math.min(en(t),Math.max($t(t),Math.round(e))),nn={resized:`Resizable--resized`,handle:`Resizable__resize-handle`},rn={triggerPx:60,maxSpeedPx:16},an=e=>{let t,n=0,r=()=>{t=void 0,!(!e.isActive()||n===0)&&(e.scrollBy(n),e.onScroll(),t=requestAnimationFrame(r))},i=e=>{n=e,t===void 0&&(t=requestAnimationFrame(r))},a=()=>{t!==void 0&&(cancelAnimationFrame(t),t=void 0),n=0};return{stop:a,updateForPointer:t=>{let n=e.getViewport(),r=n.bottom-t,o=t-n.top;if(r<rn.triggerPx){let e=Math.min(1,1-r/rn.triggerPx);i(Math.max(1,Math.round(rn.maxSpeedPx*e)))}else o<=0?i(-rn.maxSpeedPx):a()}}},on=()=>{let e=document.documentElement,t=document.body;return Math.max(e.clientHeight,t?.offsetHeight??0,t?.scrollHeight??0)},sn=()=>{let e,t,n=()=>{t!==void 0&&(cancelAnimationFrame(t),t=void 0)};return{lock:()=>{n();let t=document.documentElement;e={previous:e?.previous??t.style.minHeight,element:t},t.style.minHeight=`${t.scrollHeight}px`},growToContent:()=>{if(!e)return;let t=e.element,n=Number.parseFloat(t.style.minHeight),r=Math.max(Number.isFinite(n)?n:0,t.scrollHeight);t.style.minHeight=`${r}px`},release:(r=!0)=>{if(n(),!e)return;let i=e,a=i.element,o=a.scrollHeight,s=Number.parseFloat(i.previous),c=Math.max(on(),Number.isFinite(s)?s:0);if(!r||c>=o){a.style.minHeight=i.previous,e=void 0;return}let l=performance.now(),u=n=>{let r=Math.min(1,(n-l)/180),s=1-(1-r)**3;if(a.style.minHeight=`${o+(c-o)*s}px`,r<1){t=requestAnimationFrame(u);return}a.style.minHeight=i.previous,e=void 0,t=void 0};t=requestAnimationFrame(u)}}},cn=e=>{let t=e.parentElement;for(;t&&t!==document.body&&t!==document.documentElement;){let e=window.getComputedStyle(t);if((e.overflowY===`auto`||e.overflowY===`scroll`)&&t.scrollHeight>t.clientHeight)return t;t=t.parentElement}},ln=e=>({...nn,...e.classNames}),un=(e={})=>{let t,n,r,i,a=sn(),o=n=>{if(t)if(i&&=(t.classList.remove(i),void 0),typeof n==`number`){let r=ln(e);t.style.height=`${n}px`,t.classList.add(r.resized),i=r.resized}else t.style.removeProperty(`height`)},s=()=>{if(n?.scrollTarget){let e=n.scrollTarget.getBoundingClientRect();return{top:e.top,bottom:e.bottom}}return{top:0,bottom:window.innerHeight}},c=e=>{e!==0&&(n?.scrollTarget?n.scrollTarget.scrollTop+=e:window.scrollBy({top:e,left:0,behavior:`instant`}))},l=()=>{if(!n||!t)return;let r=t.getBoundingClientRect();o(tn(n.lastClientY-n.grabOffset-r.top,e)),a.growToContent()},u=an({getViewport:s,isActive:()=>n!==void 0,scrollBy:c,onScroll:l}),d=(e=!0)=>{n=void 0,r=void 0,u.stop(),a.release(e)},f=i=>{if(!t||i.button!==0&&i.pointerType===`mouse`)return;i.preventDefault();let s=i.currentTarget,c=t.getBoundingClientRect();n={pointerId:i.pointerId,grabOffset:i.clientY-c.bottom,lastClientY:i.clientY,scrollTarget:cn(t)},r=s,o(tn(c.height,e)),a.lock(),s.setPointerCapture(i.pointerId)},p=e=>{n?.pointerId===e.pointerId&&(n.lastClientY=e.clientY,l(),u.updateForPointer(e.clientY))},m=r=>{if(n?.pointerId!==r.pointerId)return;let i=r.currentTarget;if(d(),i.hasPointerCapture(r.pointerId)&&i.releasePointerCapture(r.pointerId),!t)return;let a=Number.parseFloat(t.style.height);Number.isFinite(a)&&e.heightStore?.set(a)},h=()=>{e.heightStore?.clear(),o(void 0)},g=e=>{r===e&&d(!1)},_=i=>(t=i,o(e.heightStore?.get()),()=>{u.stop(),a.release(!1),o(void 0),n=void 0,r=void 0,t=void 0});return _.handle=()=>({class:ln(e).handle,role:`separator`,"aria-orientation":`horizontal`,"aria-label":e.label??`Resize`,title:e.title??`Drag to resize, double-click to reset`,onpointerdown:f,onpointermove:p,onpointerup:m,onpointercancel:m,ondblclick:h,destroy:g}),_},dn=()=>{let e=new Set;return{addListener(t){return e.add(t),()=>{e.delete(t)}},notify(t){for(let n of e)n(t)}}},fn=e=>e,pn=e=>e,mn=e=>e,hn=e=>({get:()=>pn(e.get()),set:t=>{e.set(mn(t))},addListener:t=>e.addListener(e=>{t(fn(e))})}),gn=()=>{let e=dn(),t;return{get:()=>t,set:n=>{t=n,e.notify(n)},addListener:e.addListener}},_n=(e,t=globalThis.localStorage)=>{let n=dn(),r=`app.rough.feature/sprite/${e}`;return{get:()=>{let e=t.getItem(r);return e===null?void 0:JSON.parse(e)},set:e=>{t.setItem(r,JSON.stringify(e)),n.notify(e)},addListener:n.addListener}},vn=({datastore:e,isMock:t,spriteInstanceId:n,storage:r})=>{if(e)return hn(e);if(t)return gn();if(n)return _n(n,r);throw Error(`SpriteFrame is missing a spriteInstanceId.`)},$=e=>{let t=r.state(!0),n=r.state(void 0),i=r.state(void 0);return r.user_effect(()=>{let a=new AbortController;return e(a.signal).then(e=>{e instanceof Error?(r.set(n,e),r.set(i,void 0)):(r.set(i,e),r.set(n,void 0)),r.set(t,!1)}),()=>{a.abort()}}),{get isLoading(){return r.get(t)},get error(){return r.get(n)},get data(){return r.get(i)}}};$.resolve=e=>({data:e,isLoading:!1,error:void 0});var yn=r.from_html(`<div class="SpriteFrame svelte-ncf2zx"><!></div>`),bn={hash:`svelte-ncf2zx`,code:`.SpriteFrame.svelte-ncf2zx {position:relative;width:100%;flex:1;border:1px solid var(--rough-surface-border, rgba(147, 161, 161, 0.32));background:white;box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.6);min-height:100px;
54
+ /* The frame's iframe sets its own min-height from reportSize, so tall
55
+ content would push past the bounded preview viewport and clip at the
56
+ modal. Scroll inside the frame instead. */overflow-y:auto;}.SpriteFrame.svelte-ncf2zx.Resizable--resized {flex:none;overflow:hidden;}.SpriteFrame.svelte-ncf2zx.Resizable--resized iframe {height:100%;min-height:0 !important;}.SpriteFrame.svelte-ncf2zx .Resizable__resize-handle {position:absolute;left:0;right:0;bottom:0;height:8px;cursor:ns-resize;touch-action:none;z-index:1;}.SpriteFrame.svelte-ncf2zx .Resizable__resize-handle::after {content:'';position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--rough-surface-border, rgba(147, 161, 161, 0.32));transition:height 120ms ease, background-color 120ms ease;}.SpriteFrame.svelte-ncf2zx .Resizable__resize-handle:hover::after,
57
+ .SpriteFrame.svelte-ncf2zx .Resizable__resize-handle:active::after {height:4px;background:var(--rough-accent, rgba(60, 90, 220, 0.55));}`};function xn(e,t){r.push(t,!0),r.append_styles(e,bn);let n=r.prop(t,`spriteId`,7),i=r.prop(t,`spriteBuildId`,7),a=r.prop(t,`artifactUrl`,7),o=r.prop(t,`toolList`,7),s=r.prop(t,`datastore`,7),c=r.prop(t,`isMock`,7),l=r.prop(t,`spriteInstanceId`,7),u=r.prop(t,`minHeight`,7,100),d=r.prop(t,`maxHeight`,7,2e3),f=$(e=>pe({spriteId:n(),spriteBuildId:i(),signal:e})),h=r.derived(()=>typeof a()==`string`?a():f.data?.artifactUrl??void 0),g=r.state(void 0),_=r.derived(()=>s()?vn({datastore:s(),spriteInstanceId:void 0}):void 0),v=r.derived(()=>vn({isMock:c(),spriteInstanceId:l()})),y=r.derived(()=>r.get(_)??r.get(v)),b=e=>{if(!e||c()){let e;return{get:()=>e,set:t=>{e=t},clear:()=>{e=void 0}}}let t=`app.rough.feature/sprite/${e}/height`;return{get:()=>{let e=localStorage.getItem(t);if(e!==null)try{let t=JSON.parse(e);return typeof t?.height==`number`?t.height:void 0}catch{return}},set:e=>{localStorage.setItem(t,JSON.stringify({height:e}))},clear:()=>{localStorage.removeItem(t)}}},x=r.derived(()=>b(l())),S=un({get minHeight(){return u()},get maxHeight(){return d()},get heightStore(){return r.get(x)},label:`Resize Rough feature`,title:`Drag to resize, double-click to reset`});r.user_effect(()=>{if(!r.get(h)||!r.get(g))return;let e=new Xt({iframe:{containerElement:r.get(g),src:r.get(h),title:`Sprite Frame`},getTools:()=>c()?m(o()):p(o()),getBridgeMethodDefinitions:()=>o().map(e=>e.toJSON()),store:r.get(y)});return e.start(),()=>{e.stop()}});var C={get spriteId(){return n()},set spriteId(e){n(e),r.flush()},get spriteBuildId(){return i()},set spriteBuildId(e){i(e),r.flush()},get artifactUrl(){return a()},set artifactUrl(e){a(e),r.flush()},get toolList(){return o()},set toolList(e){o(e),r.flush()},get datastore(){return s()},set datastore(e){s(e),r.flush()},get isMock(){return c()},set isMock(e){c(e),r.flush()},get spriteInstanceId(){return l()},set spriteInstanceId(e){l(e),r.flush()},get minHeight(){return u()},set minHeight(e=100){u(e),r.flush()},get maxHeight(){return d()},set maxHeight(e=2e3){d(e),r.flush()}},w=yn(),ee=r.child(w);{let e=r.derived(()=>S.handle());Qt(ee,{get handle(){return r.get(e)}})}return r.reset(w),r.bind_this(w,e=>r.set(g,e),()=>r.get(g)),r.attach(w,()=>S),r.append(e,w),r.pop(C)}r.create_custom_element(xn,{spriteId:{},spriteBuildId:{},artifactUrl:{},toolList:{},datastore:{},isMock:{},spriteInstanceId:{},minHeight:{},maxHeight:{}},[],[],{mode:`open`});var Sn=r.from_html(`<button type="button" role="tab"> </button>`),Cn=r.from_html(`<div class="TabBar svelte-1jp57o0" role="tablist"></div>`),wn={hash:`svelte-1jp57o0`,code:`.TabBar.svelte-1jp57o0 {display:flex;flex-shrink:0;border-bottom:1px solid var(--rough-surface-border);}.tab.svelte-1jp57o0 {padding:0.45rem 0.9rem;font:inherit;font-size:0.85rem;color:var(--base01);background:transparent;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;cursor:pointer;transition:color 120ms ease, border-color 120ms ease, box-shadow 120ms ease,
58
+ background-color 120ms ease;&:hover:not(:disabled) {color:var(--base02);}&.active {color:var(--rough-accent);border-bottom-color:var(--rough-accent);font-weight:600;}&:focus-visible {outline:none;background:color-mix(in srgb, var(--rough-accent) 8%, white);box-shadow:inset 0 0 0 2px var(--rough-accent);}&:disabled {cursor:not-allowed;opacity:0.5;}}`};function Tn(e,t){r.push(t,!0),r.append_styles(e,wn);let n=r.prop(t,`active`,15),i=r.prop(t,`tabs`,7),a=e=>{e.disabled||n(e.key)},o=e=>{let t=e.key;if(![`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes(t))return;let n=e.currentTarget,r=n.closest(`[role="tablist"]`),i=Array.from(r?.querySelectorAll(`[role="tab"]:not(:disabled)`)??[]),a=i.indexOf(n);if(a===-1||i.length===0)return;e.preventDefault();let o=t===`Home`?0:t===`End`?i.length-1:t===`ArrowLeft`?(a-1+i.length)%i.length:(a+1)%i.length;i[o]?.focus(),i[o]?.click()};var s={get active(){return n()},set active(e){n(e),r.flush()},get tabs(){return i()},set tabs(e){i(e),r.flush()}},c=Cn();return r.each(c,21,i,e=>e.key,(e,t)=>{var i=Sn();let s;var c=r.child(i,!0);r.reset(i),r.template_effect(()=>{s=r.set_class(i,1,`tab svelte-1jp57o0`,null,s,{active:n()===r.get(t).key}),r.set_attribute(i,`aria-selected`,n()===r.get(t).key),r.set_attribute(i,`tabindex`,n()===r.get(t).key?0:-1),i.disabled=r.get(t).disabled,r.set_text(c,r.get(t).label)}),r.delegated(`click`,i,()=>a(r.get(t))),r.delegated(`keydown`,i,o),r.append(e,i)}),r.reset(c),r.append(e,c),r.pop(s)}r.delegate([`click`,`keydown`]),r.create_custom_element(Tn,{active:{},tabs:{}},[],[],{mode:`open`});var En=r.from_html(`<div role="tabpanel"><!></div>`),Dn={hash:`svelte-1ermak1`,code:`.TabPanel.svelte-1ermak1 {display:none;min-width:0;min-height:0;}.TabPanel.isActive.svelte-1ermak1 {display:flex;flex:1;flex-direction:column;}`};function On(e,t){r.push(t,!0),r.append_styles(e,Dn);let n=r.prop(t,`isActive`,7),i=r.prop(t,`children`,7),a=r.prop(t,`class`,7,``);var o={get isActive(){return n()},set isActive(e){n(e),r.flush()},get children(){return i()},set children(e){i(e),r.flush()},get class(){return a()},set class(e=``){a(e),r.flush()}},s=En();let c;var l=r.child(s);return r.snippet(l,()=>i()??r.noop),r.reset(s),r.template_effect(()=>{c=r.set_class(s,1,`TabPanel ${a()}`,`svelte-1ermak1`,c,{isActive:n()}),r.set_attribute(s,`aria-hidden`,!n()),s.inert=!n()}),r.append(e,s),r.pop(o)}r.create_custom_element(On,{isActive:{},children:{},class:{}},[],[],{mode:`open`});var kn=new Set([`$$slots`,`$$events`,`$$legacy`,`$$host`]);function An(e,t){let n=r.rest_props(t,kn),i=[[`path`,{d:`m6 9 6 6 6-6`}]];Ie(e,r.spread_props({name:`chevron-down`},()=>n,{get iconNode(){return i}}))}r.create_custom_element(An,{},[],[],{mode:`open`});var jn=r.from_html(`<div class="preview svelte-khztz9"><!></div>`),Mn=r.from_html(`<details class="Accordion svelte-khztz9"><summary class="svelte-khztz9"><header class="svelte-khztz9"><span class="heading svelte-khztz9"><!></span> <span class="chevron svelte-khztz9"><!></span></header> <!></summary> <!></details>`),Nn={hash:`svelte-khztz9`,code:`.Accordion.svelte-khztz9 {box-sizing:border-box;width:100%;max-width:420px;display:flex;flex-direction:column;gap:0.4rem;border:1px solid var(--rough-surface-border, rgba(147, 161, 161, 0.32));padding:0.75rem 0.85rem;&[open] {
59
+ /* note: we must use strict descendant selectors here */
60
+ /* otherwise nested Accordions will not be displayed correctly */> summary:where(.svelte-khztz9) > header:where(.svelte-khztz9) > .chevron:where(.svelte-khztz9) {transform:rotate(0deg);}> summary:where(.svelte-khztz9) > .preview:where(.svelte-khztz9) {display:none;}}}summary.svelte-khztz9 {display:flex;flex-direction:column;}header.svelte-khztz9 {display:flex;align-items:center;justify-content:space-between;width:100%;background:none;border:none;padding:0.1rem 0;cursor:pointer;font:inherit;gap:0.5rem;text-align:left;}.heading.svelte-khztz9 {font-size:0.72rem;font-weight:600;text-transform:uppercase;letter-spacing:0.07em;color:var(--base01, #586e75);}.chevron.svelte-khztz9 {color:var(--base1, #93a1a1);flex-shrink:0;transition:transform 150ms ease;transform:rotate(-90deg);}.preview.svelte-khztz9 {margin:0;font-size:0.8rem;color:var(--base01, #586e75);padding:0 0.1rem;}`};function Pn(e,t){r.push(t,!0),r.append_styles(e,Nn);let n=r.prop(t,`heading`,7),i=r.prop(t,`preview`,7),a=r.prop(t,`children`,7);var o={get heading(){return n()},set heading(e){n(e),r.flush()},get preview(){return i()},set preview(e){i(e),r.flush()},get children(){return a()},set children(e){a(e),r.flush()}},s=Mn(),c=r.child(s),l=r.child(c),u=r.child(l),d=r.child(u),f=e=>{var t=r.text();r.template_effect(()=>r.set_text(t,n())),r.append(e,t)},p=e=>{var t=r.comment(),i=r.first_child(t);r.snippet(i,n),r.append(e,t)};r.if(d,e=>{typeof n()==`string`?e(f):e(p,-1)}),r.reset(u);var m=r.sibling(u,2);An(r.child(m),{size:14}),r.reset(m),r.reset(l);var h=r.sibling(l,2),g=e=>{var t=jn(),n=r.child(t);r.snippet(n,i),r.reset(t),r.append(e,t)};r.if(h,e=>{i()&&e(g)}),r.reset(c);var _=r.sibling(c,2);return r.snippet(_,()=>a()??r.noop),r.reset(s),r.append(e,s),r.pop(o)}r.create_custom_element(Pn,{heading:{},preview:{},children:{}},[],[],{mode:`open`});var Fn=r.from_html(`<andypf-json-viewer></andypf-json-viewer>`,2);function In(e,t){r.push(t,!0);let n=r.prop(t,`value`,7);var i={get value(){return n()},set value(e){n(e),r.flush()}},a=Fn();return r.template_effect(()=>r.set_custom_element_data(a,`data`,n())),r.set_custom_element_data(a,`expanded`,2),r.set_custom_element_data(a,`indent`,2),r.set_custom_element_data(a,`theme`,`default-light`),r.set_custom_element_data(a,`showDataTypes`,!1),r.set_custom_element_data(a,`showToolbar`,!1),r.set_custom_element_data(a,`showCopy`,!1),r.set_custom_element_data(a,`showSize`,!1),r.set_custom_element_data(a,`expandIconType`,`arrow`),r.set_custom_element_data(a,`expandEmpty`,!1),r.append(e,a),r.pop(i)}r.create_custom_element(In,{value:{}},[],[],{mode:`open`});var Ln=r.from_html(`<div class="tool-desc svelte-15f985v"> </div>`),Rn=r.from_html(`<div class="tool-list svelte-15f985v"></div>`),zn=r.from_html(`<!> <div class="arrows svelte-15f985v" aria-hidden="true"><span class="arrow svelte-15f985v">↓</span> <span class="arrow svelte-15f985v">↓</span> <span class="arrow svelte-15f985v">↓</span></div>`,1),Bn=r.from_html(`<div class="arrows svelte-15f985v" aria-hidden="true"><span class="arrow svelte-15f985v">↓</span> <span class="arrow svelte-15f985v">↓</span> <span class="arrow svelte-15f985v">↓</span></div>`),Vn=r.from_html(`<div class="tool-card svelte-15f985v"><div class="tool-name svelte-15f985v"> </div> <!></div>`),Hn=r.from_html(`<div class="tool-list svelte-15f985v"><!> <div class="tool-card tool-card-builtin svelte-15f985v"><div class="tool-name svelte-15f985v">Save feature data</div> <div class="tool-desc svelte-15f985v">Features can save their own data that persists across sessions</div></div></div>`),Un=r.from_html(`<div class="diagram svelte-15f985v"><!> <div class="feature-node svelte-15f985v"><span class="feature-node-label svelte-15f985v">This is your feature, you can build anything here</span></div> <!> <!></div>`),Wn={hash:`svelte-15f985v`,code:`.diagram.svelte-15f985v {display:flex;flex-direction:column;align-items:center;gap:1.5rem;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;padding:2rem 1.5rem;min-height:0;}.feature-node.svelte-15f985v {box-sizing:border-box;width:100%;max-width:420px;border:2px solid var(--rough-accent, #268bd2);padding:0.85rem 1.25rem;background:color-mix(in srgb, var(--rough-accent, #268bd2) 6%, white);text-align:center;flex-shrink:0;}.feature-node-label.svelte-15f985v {font-size:0.85rem;font-weight:600;color:var(--rough-accent, #268bd2);}.tool-list.svelte-15f985v {display:flex;flex-direction:column;gap:0.4rem;}.tool-card.svelte-15f985v {box-sizing:border-box;border:1px solid var(--rough-surface-border, rgba(147, 161, 161, 0.32));padding:0.65rem 0.85rem;background:white;display:flex;flex-direction:column;gap:0.3rem;width:100%;font:inherit;text-align:left;}.tool-card-builtin.svelte-15f985v {background:var(--base3, #fdf6e3);}.tool-name.svelte-15f985v {font-size:0.875rem;font-weight:600;color:var(--base02, #073642);}.tool-desc.svelte-15f985v {font-size:0.8rem;color:var(--base01, #586e75);line-height:1.45;}.arrows.svelte-15f985v {display:flex;justify-content:space-evenly;align-items:center;width:100%;max-width:420px;}.arrow.svelte-15f985v {font-size:1.25rem;color:var(--base1, #93a1a1);line-height:1;}`};function Gn(e,t){r.push(t,!0),r.append_styles(e,Wn);let n=r.prop(t,`toolList`,7),i=r.derived(()=>n().filter(e=>e.type===`query`||e.type===`subscription`)),a=r.derived(()=>n().filter(e=>e.type===`mutation`));var o={get toolList(){return n()},set toolList(e){n(e),r.flush()}},s=Un(),c=r.child(s),l=e=>{var t=zn();Pn(r.first_child(t),{heading:`Data this feature can see`,preview:e=>{r.next();var t=r.text();r.template_effect(e=>r.set_text(t,e),[()=>r.get(i).map(e=>e.name).join(`, `)]),r.append(e,t)},children:(e,t)=>{var n=Rn();r.each(n,21,()=>r.get(i),e=>e.name,(e,t)=>{Pn(e,{get heading(){return r.get(t).name},preview:e=>{var n=r.comment(),i=r.first_child(n),a=e=>{var n=Ln(),i=r.child(n,!0);r.reset(n),r.template_effect(()=>r.set_text(i,r.get(t).description)),r.append(e,n)};r.if(i,e=>{r.get(t).description&&e(a)}),r.append(e,n)},children:(e,n)=>{var i=r.comment(),a=r.first_child(i),o=e=>{In(e,{get value(){return r.get(t).outputSample}})};r.if(a,e=>{r.get(t).outputSample!=null&&e(o)}),r.append(e,i)},$$slots:{preview:!0,default:!0}})}),r.reset(n),r.append(e,n)},$$slots:{preview:!0,default:!0}}),r.next(2),r.append(e,t)};r.if(c,e=>{r.get(i).length>0&&e(l)});var u=r.sibling(c,4),d=e=>{var t=Bn();r.append(e,t)};return r.if(u,e=>{r.get(i).length>0&&e(d)}),Pn(r.sibling(u,2),{heading:`Changes you can make`,preview:e=>{r.next();var t=r.text();r.template_effect(e=>r.set_text(t,e),[()=>[...r.get(a).map(e=>e.name),`Save feature data`].join(`, `)]),r.append(e,t)},children:(e,t)=>{var n=Hn(),i=r.child(n);r.each(i,17,()=>r.get(a),e=>e.name,(e,t)=>{var n=Vn(),i=r.child(n),a=r.child(i,!0);r.reset(i);var o=r.sibling(i,2),s=e=>{var n=Ln(),i=r.child(n,!0);r.reset(n),r.template_effect(()=>r.set_text(i,r.get(t).description)),r.append(e,n)};r.if(o,e=>{r.get(t).description&&e(s)}),r.reset(n),r.template_effect(()=>r.set_text(a,r.get(t).name)),r.append(e,n)}),r.next(2),r.reset(n),r.append(e,n)},$$slots:{preview:!0,default:!0}}),r.reset(s),r.append(e,s),r.pop(o)}r.create_custom_element(Gn,{toolList:{}},[],[],{mode:`open`});var Kn=100,qn=e=>{let t=e.keyStepPx??Kn,n=r.state(void 0),i=r.derived(()=>r.get(n)===void 0?`1fr`:`${r.get(n)}px`),a=(t,n)=>{let r=n-e.minColumnPx-e.dividerWidthPx;return Math.max(e.minColumnPx,Math.min(r,t))},o=e=>{e.currentTarget.setPointerCapture(e.pointerId),e.preventDefault()},s=t=>{let i=e.getContainer();if(!t.currentTarget.hasPointerCapture(t.pointerId)||!i)return;let o=i.getBoundingClientRect(),s=t.clientX-o.left-e.dividerWidthPx/2;r.set(n,a(s,o.width),!0)},c=e=>{e.currentTarget.hasPointerCapture(e.pointerId)&&e.currentTarget.releasePointerCapture(e.pointerId)};return{get column(){return r.get(i)},get widthPx(){return r.get(n)},onpointerdown:o,onpointermove:s,onpointerup:c,onpointercancel:c,onkeydown:i=>{if(i.key!==`ArrowLeft`&&i.key!==`ArrowRight`)return;let o=e.getContainer();if(!o)return;i.preventDefault();let s=o.getBoundingClientRect(),c=r.get(n)??s.width*.25,l=i.key===`ArrowLeft`?-t:t;r.set(n,a(c+l,s.width),!0)}}},Jn=r.from_html(`<p class="svelte-t9dwgq">Loading…</p>`),Yn=r.from_html(`<div class="error svelte-t9dwgq"> </div>`),Xn=r.from_html(`<div class="system-message-detail svelte-t9dwgq"> </div>`),Zn=r.from_html(`<details class="system-message-raw svelte-t9dwgq"><summary class="svelte-t9dwgq">Details</summary> <pre class="svelte-t9dwgq"> </pre></details>`),Qn=r.from_html(`<div class="system-message system-message-error svelte-t9dwgq"><div class="system-message-label svelte-t9dwgq"> </div> <!> <!></div>`),$n=r.from_html(`<p class="loading svelte-t9dwgq">Loading…</p>`),er=r.from_html(`<div class="bubble svelte-t9dwgq"><span class="author svelte-t9dwgq"> </span> <pre class="svelte-t9dwgq"> </pre></div>`),tr=r.from_html(`<span class="published-tag svelte-t9dwgq">Published</span>`),nr=r.from_html(`<div class="system-message system-message-ready svelte-t9dwgq"><button type="button" class="system-message-button svelte-t9dwgq"><span class="system-message-label svelte-t9dwgq"> <!></span></button></div>`),rr=r.from_html(`<div><!> <!> <!></div>`),ir=r.from_html(`<!> <!>`,1),ar=r.from_html(`<div class="preview-placeholder svelte-t9dwgq">Your feature preview will appear here.</div>`),or=r.from_html(`<div class="preview-placeholder svelte-t9dwgq">Build logs will appear here.</div>`),sr=r.from_html(`<div class="logs-panel svelte-t9dwgq"><!></div>`),cr=r.from_html(`<!> <!> <!>`,1),lr=r.from_html(`<div><div class="transcript svelte-t9dwgq"><div class="transcript-content svelte-t9dwgq"><!></div></div> <div class="divider svelte-t9dwgq" role="slider" aria-label="Resize chat column" tabindex="0"></div> <div class="preview svelte-t9dwgq"><div class="desktop-preview-tabs svelte-t9dwgq"><!></div> <!> <!> <!> <!></div> <form class="composer svelte-t9dwgq"><div><textarea rows="1" placeholder="Describe what you want to generate" class="svelte-t9dwgq"></textarea> <button type="submit" class="send-button svelte-t9dwgq"><!></button></div></form> <div class="preview-actions svelte-t9dwgq"><!></div> <!></div>`),ur=r.from_html(`<div class="surface svelte-t9dwgq"><header class="surface-header svelte-t9dwgq"><h3 class="svelte-t9dwgq"> </h3> <button type="button" class="close-button svelte-t9dwgq" aria-label="Close">×</button></header> <!> <!></div>`),dr={hash:`svelte-t9dwgq`,code:`.surface.svelte-t9dwgq {width:100%;height:100%;overflow:hidden;display:flex;flex-direction:column;border:1px solid var(--rough-surface-border, rgba(147, 161, 161, 0.32));border-radius:0;padding:0;background:var(--rough-surface, rgba(255, 255, 255));box-shadow:var(--rough-shadow, 0 24px 70px rgba(7, 54, 66, 0.12));box-sizing:border-box;}.surface-header.svelte-t9dwgq {display:flex;align-items:center;justify-content:space-between;gap:1rem;flex:none;padding:1rem 1.25rem;border-bottom:1px solid var(--rough-surface-border, rgba(147, 161, 161, 0.32));}h3.svelte-t9dwgq {margin:0;font-size:1.25rem;color:var(--rough-text, #073642);}.close-button.svelte-t9dwgq {appearance:none;background:transparent;border:1px solid transparent;color:var(--rough-text, #073642);cursor:pointer;font-size:1.75rem;line-height:1;padding:0.1rem 0.55rem 0.25rem;}.close-button.svelte-t9dwgq:hover {background:color-mix(in srgb, var(--rough-text, #073642) 8%, white);}.close-button.svelte-t9dwgq:focus-visible {outline:3px solid color-mix(in srgb, var(--rough-accent, #268bd2) 25%, white);outline-offset:2px;}.feature-builder.svelte-t9dwgq {display:grid;grid-template-columns:var(--chat-column, 1fr) 12px 3fr;grid-template-rows:1fr auto;column-gap:0;row-gap:0.5rem;min-height:0;flex:1;padding:1rem 1.25rem;}.error.svelte-t9dwgq {color:var(--rough-danger, #cb4b16);flex:1;padding:1rem 1.25rem;}.transcript.svelte-t9dwgq {grid-column:1;grid-row:1;overflow-y:auto;min-height:0;}
61
+
62
+ /* Inner wrapper so the ResizeObserver can watch content growth separately
63
+ from the outer scroll container; needed to auto-scroll on streaming logs. */.transcript-content.svelte-t9dwgq {padding:0.25rem 0;display:flex;flex-direction:column;gap:1rem;}.composer.svelte-t9dwgq {grid-column:1;grid-row:2;display:flex;flex-direction:column;gap:0.5rem;}.divider.svelte-t9dwgq {grid-column:2;grid-row:1 / span 2;position:relative;cursor:col-resize;background:transparent;touch-action:none;}.divider.svelte-t9dwgq::before {content:'';position:absolute;top:0;bottom:0;left:50%;width:1px;background:var(--rough-surface-border, rgba(147, 161, 161, 0.32));transform:translateX(-50%);transition:width 120ms ease, background-color 120ms ease;}.divider.svelte-t9dwgq:hover::before,
64
+ .divider.svelte-t9dwgq:active::before,
65
+ .divider.svelte-t9dwgq:focus-visible::before {width:3px;background:var(--rough-accent, #268bd2);}.divider.svelte-t9dwgq:focus-visible {outline:none;}.preview.svelte-t9dwgq {grid-column:3;grid-row:1;display:flex;flex-direction:column;min-height:0;min-width:0;border:1px solid var(--rough-surface-border, rgba(147, 161, 161, 0.32));background:white;}.preview-actions.svelte-t9dwgq {grid-column:3;grid-row:2;display:flex;justify-content:flex-end;align-items:center;}.desktop-preview-tabs.svelte-t9dwgq {flex:none;}.published-tag.svelte-t9dwgq {display:inline-block;margin-left:0.5rem;padding:0.05rem 0.4rem;font-size:0.7rem;font-weight:700;text-transform:uppercase;letter-spacing:0.05em;color:var(--rough-accent, #268bd2);border:1px solid var(--rough-accent, #268bd2);}.turn-published.svelte-t9dwgq .system-message-ready:where(.svelte-t9dwgq) {border-color:var(--rough-accent, #268bd2);}.preview-placeholder.svelte-t9dwgq {flex:1;display:flex;align-items:center;justify-content:center;color:var(--base01, #586e75);padding:1rem;text-align:center;}.logs-panel.svelte-t9dwgq {flex:1;min-height:0;display:flex;flex-direction:column;padding:0.75rem;overflow:auto;}.turn.svelte-t9dwgq {display:flex;flex-direction:column;gap:0.5rem;}.bubble.svelte-t9dwgq {border:1px solid var(--base1, #93a1a1);padding:0.6rem 0.85rem;background:color-mix(in srgb, var(--rough-accent, #268bd2) 8%, white);align-self:flex-end;max-width:85%;display:flex;flex-direction:column;gap:0.35rem;}.author.svelte-t9dwgq {font-size:0.75rem;color:var(--base01, #586e75);}.bubble.svelte-t9dwgq pre:where(.svelte-t9dwgq) {margin:0;white-space:pre-wrap;word-break:break-word;font-family:inherit;font-size:0.95rem;}.system-message.svelte-t9dwgq {padding:0.75rem 1rem;border:1px solid var(--base1, #93a1a1);background:transparent;display:flex;flex-direction:column;gap:0.4rem;}.system-message-button.svelte-t9dwgq {appearance:none;width:100%;border:none;padding:0;background:transparent;text-align:left;cursor:pointer;font:inherit;}.system-message-button.svelte-t9dwgq:focus-visible {outline:3px solid color-mix(in srgb, var(--rough-accent, #268bd2) 25%, white);outline-offset:2px;}.system-message-label.svelte-t9dwgq {color:var(--base01, #586e75);font-weight:600;}.system-message-ready.svelte-t9dwgq {border-color:color-mix(in srgb, var(--green, #859900) 40%, white);background:color-mix(in srgb, var(--green, #859900) 10%, white);}.system-message-ready.svelte-t9dwgq .system-message-label:where(.svelte-t9dwgq) {color:var(--green, #859900);}.system-message-error.svelte-t9dwgq .system-message-label:where(.svelte-t9dwgq) {color:var(--orange, #cb4b16);}.system-message-detail.svelte-t9dwgq {font-size:0.95rem;color:var(--base00, #657b83);word-break:break-word;}.system-message-raw.svelte-t9dwgq {font-size:0.85rem;}.system-message-raw.svelte-t9dwgq summary:where(.svelte-t9dwgq) {cursor:pointer;color:var(--base01, #586e75);}.system-message-raw.svelte-t9dwgq pre:where(.svelte-t9dwgq) {margin:0.4rem 0 0;padding:0.4rem 0.5rem;background:var(--base2, #eee8d5);color:var(--base02, #073642);white-space:pre-wrap;word-break:break-word;overflow-x:auto;font-size:0.8rem;}.composer-input.svelte-t9dwgq {display:flex;align-items:flex-end;gap:0.5rem;border:1px solid var(--rough-border, #93a1a1);padding:0.4rem 0.4rem 0.4rem 0.85rem;background:white;transition:border-color 120ms ease, box-shadow 120ms ease;}.composer-input.svelte-t9dwgq:focus-within {border-color:var(--rough-accent, #268bd2);box-shadow:0 0 0 3px color-mix(in srgb, var(--rough-accent, #268bd2) 18%, white);}.composer-input.isBuilding.svelte-t9dwgq {opacity:0.75;}textarea.svelte-t9dwgq {flex:1;min-width:0;border:none;outline:none;padding:0.45rem 0;color:var(--rough-text, #073642);background:transparent;font:inherit;resize:none;min-height:1.5rem;max-height:12rem;overflow-y:auto;line-height:1.4;}textarea.svelte-t9dwgq::placeholder {color:var(--base01, #586e75);opacity:0.7;}.send-button.svelte-t9dwgq {display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;flex:none;border:none;padding:0;background:var(--rough-accent, #268bd2);color:var(--rough-background, #fdf6e3);cursor:pointer;transition:background-color 120ms ease, transform 120ms ease;}.send-button.svelte-t9dwgq:hover:not(:disabled) {background:color-mix(in srgb, var(--rough-accent, #268bd2) 85%, black);}.send-button.svelte-t9dwgq:active:not(:disabled) {transform:scale(0.95);}.send-button.svelte-t9dwgq:focus-visible {outline:3px solid color-mix(in srgb, var(--rough-accent, #268bd2) 25%, white);outline-offset:2px;}.send-button.svelte-t9dwgq:disabled {background:color-mix(in srgb, var(--rough-accent, #268bd2) 30%, white);cursor:not-allowed;}.loading.svelte-t9dwgq {margin:0;color:var(--base01, #586e75);font-size:0.9rem;}.surface.svelte-t9dwgq > p:where(.svelte-t9dwgq) {flex:1;margin:0;padding:1rem 1.25rem;}
66
+
67
+ @media (max-width: 1000px) {.feature-builder.svelte-t9dwgq {grid-template-columns:1fr;}.desktop-preview-tabs.svelte-t9dwgq,
68
+ .divider.svelte-t9dwgq,
69
+ .transcript.svelte-t9dwgq,
70
+ .composer.svelte-t9dwgq,
71
+ .preview.svelte-t9dwgq,
72
+ .preview-actions.svelte-t9dwgq {display:none;}.feature-builder.tab-chat.svelte-t9dwgq .transcript:where(.svelte-t9dwgq) {display:block;grid-column:1;grid-row:1;}.feature-builder.tab-chat.svelte-t9dwgq .composer:where(.svelte-t9dwgq) {display:flex;grid-column:1;grid-row:2;}.feature-builder.tab-preview.svelte-t9dwgq .preview:where(.svelte-t9dwgq),
73
+ .feature-builder.tab-capabilities.svelte-t9dwgq .preview:where(.svelte-t9dwgq),
74
+ .feature-builder.tab-logs.svelte-t9dwgq .preview:where(.svelte-t9dwgq) {display:flex;grid-column:1;grid-row:1;}.feature-builder.tab-preview.svelte-t9dwgq .preview-actions:where(.svelte-t9dwgq),
75
+ .feature-builder.tab-capabilities.svelte-t9dwgq .preview-actions:where(.svelte-t9dwgq),
76
+ .feature-builder.tab-logs.svelte-t9dwgq .preview-actions:where(.svelte-t9dwgq) {display:flex;grid-column:1;grid-row:2;}
77
+ }`};function fr(e,t){r.push(t,!0),r.append_styles(e,dr);let n=r.prop(t,`toolList`,7),i=r.prop(t,`onpublish`,7),a=r.prop(t,`onclose`,7),o=r.prop(t,`action`,7),s=r.state(!0),c=r.state(void 0),l=r.derived(()=>o().type===`edit`?$(e=>fe({spriteId:o().spriteId,signal:e})):$.resolve(r.get(c))),f=r.state(!1),p=r.state(void 0),m=r.state(void 0),h=r.state(void 0),g=r.derived(()=>r.get(f)||r.get(p)!=null&&r.get(p).status!==`READY`&&r.get(p).status!==`ERROR`&&!r.get(h)),_=(e,t)=>JSON.stringify(e)!==JSON.stringify(t),v=e=>{r.set(p,e,!0),r.set(m,e.id,!0),se.add(e.id)};r.user_effect(()=>{let e=r.get(l).data,t=r.get(m);if(!e||!t)return;let n=new AbortController;return Te({spriteId:e.id,spriteBuildId:t,signal:n.signal,onUpdate:e=>{e.id===t&&_(r.get(p),e)&&r.set(p,e,!0)}}).then(e=>{if(!n.signal.aborted){if(e instanceof Error){r.set(h,e,!0);return}if(e.status!==`READY`&&e.status!==`ERROR`){r.set(h,Error(`Unexpected status: '${e.status}'`),!0);return}r.set(p,e,!0),r.set(m,void 0)}}),()=>n.abort()});let y=[{key:`preview`,label:`Preview`},{key:`capabilities`,label:`Capabilities`},{key:`logs`,label:`Logs`}],b=[{key:`chat`,label:`Chat`},...y],x=r.state(`chat`),S=r.state(`capabilities`),C=r.derived(()=>r.get(x)===`chat`),w=r.derived(()=>r.get(x)===`capabilities`),ee=r.derived(()=>r.get(x)===`preview`),te=r.derived(()=>r.get(x)===`logs`),T=r.derived(()=>r.get(S)===`capabilities`),E=r.derived(()=>r.get(S)===`preview`),D=r.derived(()=>r.get(S)===`logs`),O=r.state(``),k=r.state(void 0),A=r.state(void 0),ne=r.state(void 0),re=r.state(void 0),j=r.state(void 0),M=qn({getContainer:()=>r.get(j),minColumnPx:280,dividerWidthPx:12}),ie=r.derived(()=>{if(M.widthPx===void 0||!r.get(j))return;let e=r.get(j).getBoundingClientRect().width;if(e)return Math.round(M.widthPx/e*100)}),N=$(e=>r.get(l).data?ve({spriteId:r.get(l).data.id,signal:e}):Promise.resolve([])),P=r.derived(()=>{let e=new u;for(let t of N.data??[])e.set(t.id,t);return r.get(p)&&e.set(r.get(p).id,r.get(p)),[...e.values()].sort((e,t)=>e.id.localeCompare(t.id))}),F=!1,ae=e=>{r.set(A,e,!0),F=!0,r.set(S,`preview`),r.set(x,`preview`)},I=r.derived(()=>r.get(P).findLast(e=>e.status===`READY`&&e.artifactUrl)),L=r.derived(()=>{if(r.get(A)){let e=r.get(P).find(e=>e.id===r.get(A));if(e)return e}return r.get(I)??r.get(P).at(-1)}),R=r.derived(()=>r.get(L)?.status===`READY`&&r.get(L).artifactUrl?r.get(L):void 0),z=r.derived(()=>r.get(R)??r.get(I)),oe=!1;r.user_effect(()=>{!oe&&r.get(I)&&(r.set(x,`preview`),r.set(S,`preview`),oe=!0)}),r.user_effect(()=>{if(r.get(P).length===0){r.set(A,void 0),F=!1;return}(!F||!r.get(A)||!r.get(P).some(e=>e.id===r.get(A)))&&(r.set(A,r.get(I)?.id??r.get(P).at(-1)?.id,!0),F=!1)});let B=r.derived(()=>r.get(I)?.id),se=new d,V=r.state(void 0),H=r.derived(()=>r.get(V)??r.get(l).data?.publishedSpriteBuild?.id??void 0),U=r.derived(()=>!r.get(g)&&r.get(z)!=null&&r.get(z).id!==r.get(H)),W=r.derived(()=>r.get(H)!==r.get(B)),G=r.state(!1),K=r.state(void 0),q=r.state(!1),ce=async()=>{if(!(!r.get(l).data||!r.get(z)||r.get(G))){r.set(G,!0),r.set(K,void 0);try{let e=await xe({spriteId:r.get(l).data.id,spriteBuildId:r.get(z).id});if(e instanceof Error){r.set(K,e,!0);return}let t=e.publishedSpriteBuild;r.set(V,t?.id??void 0,!0),t&&i()?.(e,t),r.set(q,!1)}finally{r.set(G,!1)}}},J=()=>{r.set(s,!1)},le=()=>{r.get(W)?r.set(q,!0):J()},pe=()=>{r.set(q,!1),J()},me=()=>{r.set(q,!1)},he=e=>{if(e){if(typeof e.message==`string`)return e.message;if(typeof e.error==`string`)return e.error}},ge=e=>e.createdByPerson.name,_e=r.derived(()=>!r.get(g)&&r.get(O).trim().length>0),ye=async e=>{e.preventDefault();let t=r.get(O).trim();if(!(!t||r.get(g))){r.set(O,``),r.set(h,void 0),r.set(f,!0);try{if(o().type===`create`&&!r.get(l).data){let e=await ue({toolList:n(),prompt:t,surfaceId:o().surfaceId,projectId:o().projectId});if(e instanceof Error){r.set(h,e,!0);return}let i=await ve({spriteId:e.id});if(i instanceof Error){r.set(h,i,!0);return}let a=i.toSorted((e,t)=>e.id.localeCompare(t.id)).at(-1);if(!a){r.set(h,Error(`Server did not provide an initial sprite build`),!0);return}r.set(c,e,!0),v(a);return}if(!r.get(B)){r.set(h,Error(`Missing parent build id`),!0);return}if(!r.get(l).data){r.set(h,Error(`No sprite?`),!0);return}let e=await de({spriteId:r.get(l)?.data.id,parentSpriteBuildId:r.get(B),prompt:t});if(e instanceof Error){r.set(h,e,!0);return}v(e)}finally{r.set(f,!1)}}},be=e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),ye(e))};return r.user_effect(()=>{r.get(x)!==`chat`&&r.set(S,r.get(x),!0)}),r.user_effect(()=>{let e=r.get(k);e&&(r.get(O),e.style.height=`auto`,e.style.height=`${e.scrollHeight}px`)}),r.user_effect(()=>{let e=r.get(re),t=r.get(ne);if(!e||!t)return;let n=new ResizeObserver(()=>{t.scrollTop=t.scrollHeight});return n.observe(e),()=>n.disconnect()}),Vt(e,{oncancel:le,get onclose(){return a()},get isOpen(){return r.get(s)},set isOpen(e){r.set(s,e,!0)},children:(e,t)=>{var i=ur(),a=r.child(i),o=r.child(a),s=r.child(o,!0);r.reset(o);var c=r.sibling(o,2);r.reset(a);var u=r.sibling(a,2),d=e=>{var t=Jn();r.append(e,t)},f=e=>{var t=Yn(),n=r.child(t,!0);r.reset(t),r.template_effect(()=>r.set_text(n,r.get(l)?.error.message)),r.append(e,t)},p=e=>{var t=lr();let i,a;{let e=(e,t=r.noop,n=r.noop,i=r.noop)=>{var a=Qn(),o=r.child(a),s=r.child(o,!0);r.reset(o);var c=r.sibling(o,2),l=e=>{var t=Xn(),i=r.child(t,!0);r.reset(t),r.template_effect(()=>r.set_text(i,n())),r.append(e,t)};r.if(c,e=>{n()&&e(l)});var u=r.sibling(c,2),d=e=>{var t=Zn(),n=r.sibling(r.child(t),2),a=r.child(n,!0);r.reset(n),r.reset(t),r.template_effect(e=>r.set_text(a,e),[()=>JSON.stringify(i(),null,2)]),r.append(e,t)};r.if(u,e=>{i()&&e(d)}),r.reset(a),r.template_effect(()=>r.set_text(s,t())),r.append(e,a)};var o=r.child(t),s=r.child(o),c=r.child(s),u=e=>{var t=$n();r.append(e,t)},d=t=>{e(t,()=>`Couldn't load versions`,()=>N.error.message)},f=t=>{var n=ir(),i=r.first_child(n);r.each(i,19,()=>r.get(P),e=>e.id,(t,n,i)=>{let a=r.derived(()=>r.get(n).id===r.get(H));var o=rr();let s;var c=r.child(o),l=e=>{var t=er(),i=r.child(t),a=r.child(i,!0);r.reset(i);var o=r.sibling(i,2),s=r.child(o,!0);r.reset(o),r.reset(t),r.template_effect(e=>{r.set_text(a,e),r.set_text(s,r.get(n).prompt)},[()=>ge(r.get(n))]),r.append(e,t)};r.if(c,e=>{r.get(n).prompt&&e(l)});var u=r.sibling(c,2);ct(u,{get spriteBuild(){return r.get(n)}});var d=r.sibling(u,2),f=e=>{var t=nr(),o=r.child(t),s=r.child(o),c=r.child(s),l=r.sibling(c),u=e=>{var t=tr();r.append(e,t)};r.if(l,e=>{r.get(a)&&e(u)}),r.reset(s),r.reset(o),r.reset(t),r.template_effect(()=>r.set_text(c,`Version ${r.get(i)+1} ready `)),r.delegated(`click`,o,()=>ae(r.get(n).id)),r.append(e,t)},p=t=>{{let a=r.derived(()=>he(r.get(n).error));e(t,()=>`Version ${r.get(i)+1} failed`,()=>r.get(a),()=>r.get(n).error)}};r.if(d,e=>{r.get(n).status===`READY`?e(f):r.get(n).status===`ERROR`&&e(p,1)}),r.reset(o),r.template_effect(()=>s=r.set_class(o,1,`turn svelte-t9dwgq`,null,s,{"turn-published":r.get(a)})),r.append(t,o)});var a=r.sibling(i,2),o=t=>{e(t,()=>`Couldn't send message`,()=>r.get(h).message)};r.if(a,e=>{r.get(h)&&e(o)}),r.append(t,n)};r.if(c,e=>{N.isLoading?e(u):N.error?e(d,1):e(f,-1)}),r.reset(s),r.bind_this(s,e=>r.set(re,e),()=>r.get(re)),r.reset(o),r.bind_this(o,e=>r.set(ne,e),()=>r.get(ne));var p=r.sibling(o,2);r.set_attribute(p,`aria-valuemin`,0),r.set_attribute(p,`aria-valuemax`,100);var m=r.sibling(p,2),_=r.child(m);Tn(r.child(_),{get tabs(){return y},get active(){return r.get(S)},set active(e){r.set(S,e,!0)}}),r.reset(_);var v=r.sibling(_,2),b=t=>{e(t,()=>`Couldn't publish version`,()=>r.get(K).message)};r.if(v,e=>{r.get(K)&&e(b)});var x=r.sibling(v,2);On(x,{get isActive(){return r.get(T)},children:(e,t)=>{Gn(e,{get toolList(){return n()}})},$$slots:{default:!0}});var A=r.sibling(x,2);On(A,{get isActive(){return r.get(E)},children:(e,t)=>{var i=r.comment(),a=r.first_child(i),o=e=>{{let t=r.derived(()=>r.get(L).artifactUrl??void 0);xn(e,{get toolList(){return n()},get spriteId(){return r.get(l).data.id},get spriteBuildId(){return r.get(L).id},get artifactUrl(){return r.get(t)},spriteInstanceId:void 0,isMock:!0})}},s=e=>{var t=ar();r.append(e,t)};r.if(a,e=>{r.get(l).data&&r.get(L)?.status===`READY`&&r.get(L).artifactUrl?e(o):e(s,-1)}),r.append(e,i)},$$slots:{default:!0}}),On(r.sibling(A,2),{get isActive(){return r.get(D)},children:(e,t)=>{var n=sr(),i=r.child(n),a=e=>{Et(e,{get spriteBuild(){return r.get(L)}})},o=e=>{var t=or();r.append(e,t)};r.if(i,e=>{r.get(L)?e(a):e(o,-1)}),r.reset(n),r.append(e,n)},$$slots:{default:!0}}),r.reset(m);var F=r.sibling(m,2),I=r.child(F);let i;var R=r.child(I);r.remove_textarea_child(R),r.bind_this(R,e=>r.set(k,e),()=>r.get(k));var z=r.sibling(R,2),oe=r.child(z),B=e=>{X(e,{})},se=e=>{Re(e,{size:16,"aria-hidden":`true`})};r.if(oe,e=>{r.get(g)?e(B):e(se,-1)}),r.reset(z),r.reset(I),r.reset(F);var V=r.sibling(F,2),W=r.child(V);{let e=r.derived(()=>!r.get(U)||r.get(G));Z(W,{get disabled(){return r.get(e)},onclick:()=>void ce(),children:(e,t)=>{r.next();var n=r.text();r.template_effect(()=>r.set_text(n,r.get(G)?`Publishing…`:`Publish`)),r.append(e,n)},$$slots:{default:!0}})}r.reset(V);var J=r.sibling(V,2),le=e=>{jt(e,{title:`Publish before closing?`,detail:`You have iterations from this session that aren't published yet.`,get error(){return r.get(K)},actions:e=>{var t=cr(),n=r.first_child(t);Q(n,{onclick:me,children:(e,t)=>{r.next();var n=r.text(`Keep editing`);r.append(e,n)},$$slots:{default:!0}});var i=r.sibling(n,2);Q(i,{onclick:pe,children:(e,t)=>{r.next();var n=r.text(`Close anyway`);r.append(e,n)},$$slots:{default:!0}});var a=r.sibling(i,2);{let e=r.derived(()=>!r.get(U)||r.get(G));Z(a,{get disabled(){return r.get(e)},onclick:()=>void ce(),children:(e,t)=>{r.next();var n=r.text();r.template_effect(()=>r.set_text(n,r.get(G)?`Publishing…`:`Publish`)),r.append(e,n)},$$slots:{default:!0}})}r.append(e,t)},$$slots:{actions:!0}})};r.if(J,e=>{r.get(q)&&e(le)}),r.reset(t),r.bind_this(t,e=>r.set(j,e),()=>r.get(j)),r.template_effect(()=>{r.set_attribute(p,`aria-valuenow`,r.get(ie)),i=r.set_class(I,1,`composer-input svelte-t9dwgq`,null,i,{isBuilding:r.get(g)}),R.disabled=r.get(g),z.disabled=!r.get(_e),r.set_attribute(z,`aria-label`,r.get(g)?`Building`:`Send message`)}),r.delegated(`pointerdown`,p,function(...e){M.onpointerdown?.apply(this,e)}),r.delegated(`pointermove`,p,function(...e){M.onpointermove?.apply(this,e)}),r.delegated(`pointerup`,p,function(...e){M.onpointerup?.apply(this,e)}),r.event(`pointercancel`,p,function(...e){M.onpointercancel?.apply(this,e)}),r.delegated(`keydown`,p,function(...e){M.onkeydown?.apply(this,e)}),r.event(`submit`,F,ye),r.delegated(`keydown`,R,be),r.bind_value(R,()=>r.get(O),e=>r.set(O,e))}r.template_effect(()=>{i=r.set_class(t,1,`feature-builder svelte-t9dwgq`,null,i,{"tab-chat":r.get(C),"tab-preview":r.get(ee),"tab-capabilities":r.get(w),"tab-logs":r.get(te)}),a=r.set_style(t,``,a,{"--chat-column":M.column})}),r.append(e,t)};r.if(u,e=>{r.get(l).isLoading?e(d):r.get(l).error?e(f,1):e(p,-1)}),Ft(r.sibling(u,2),{get tabs(){return b},ariaLabel:`Feature builder sections`,get active(){return r.get(x)},set active(e){r.set(x,e,!0)}}),r.reset(i),r.template_effect(()=>r.set_text(s,`⌥ ${r.get(l).data?.name??`Rough`}`)),r.delegated(`click`,c,le),r.append(e,i)},$$slots:{default:!0}}),r.pop({get toolList(){return n()},set toolList(e){n(e),r.flush()},get onpublish(){return i()},set onpublish(e){i(e),r.flush()},get onclose(){return a()},set onclose(e){a(e),r.flush()},get action(){return o()},set action(e){o(e),r.flush()}})}r.delegate([`click`,`pointerdown`,`pointermove`,`pointerup`,`keydown`]),r.create_custom_element(fr,{toolList:{},onpublish:{},onclose:{},action:{}},[],[],{mode:`open`});function pr(e,t){r.push(t,!0);let n=r.prop(t,`toolList`,7),i=r.prop(t,`surfaceId`,7),a=r.prop(t,`projectId`,23,T),o=r.prop(t,`onclose`,7),s=r.prop(t,`onpublish`,7);var c={get toolList(){return n()},set toolList(e){n(e),r.flush()},get surfaceId(){return i()},set surfaceId(e){i(e),r.flush()},get projectId(){return a()},set projectId(e=T()){a(e),r.flush()},get onclose(){return o()},set onclose(e){o(e),r.flush()},get onpublish(){return s()},set onpublish(e){s(e),r.flush()}};{let t=r.derived(()=>({type:`create`,surfaceId:i(),projectId:a()}));fr(e,{get action(){return r.get(t)},get toolList(){return n()},get onpublish(){return s()},get onclose(){return o()}})}return r.pop(c)}customElements.define(`rough-create-modal`,r.create_custom_element(pr,{toolList:{},surfaceId:{},projectId:{},onclose:{},onpublish:{}},[],[]));var mr=(e,t={})=>{let n=De(e.key);if(!n){console.warn(`[Rough] No surface registered for key "${e.key}". Make sure the surface has mounted or getRoughFeatures() has been called.`);return}let r;if(t.projectId)r=t.projectId;else try{r=T()}catch{console.warn(`[Rough] Pass a projectId option to openRoughCreate(), or call initRough() first.`);return}let i=document.createElement(`div`);document.body.appendChild(i);let o=a(pr,{target:i,props:{surfaceId:n.surfaceId,projectId:r,toolList:n.toolList,onclose:()=>{c(o),document.body.removeChild(i)},onpublish:()=>{n.triggerRefresh()}}})};function hr(e,t){r.push(t,!0);let n=r.prop(t,`toolList`,7),i=r.prop(t,`spriteId`,7),a=r.prop(t,`onclose`,7),o=r.prop(t,`onpublish`,7);var s={get toolList(){return n()},set toolList(e){n(e),r.flush()},get spriteId(){return i()},set spriteId(e){i(e),r.flush()},get onclose(){return a()},set onclose(e){a(e),r.flush()},get onpublish(){return o()},set onpublish(e){o(e),r.flush()}};{let t=r.derived(()=>({type:`edit`,spriteId:i()}));fr(e,{get action(){return r.get(t)},get toolList(){return n()},get onpublish(){return o()},get onclose(){return a()}})}return r.pop(s)}customElements.define(`rough-edit-modal`,r.create_custom_element(hr,{toolList:{},spriteId:{},onclose:{},onpublish:{}},[],[]));var gr=r.from_html(`<!> <!>`,1);function _r(e,t){r.push(t,!0);let n=r.prop(t,`toolList`,7),i=r.prop(t,`label`,7,`Edit Rough Feature`),a=r.prop(t,`spriteId`,7),o=r.prop(t,`onpublish`,7),s=r.state(!1),c=()=>{r.set(s,!0)},l=()=>{r.set(s,!1)};var u={get toolList(){return n()},set toolList(e){n(e),r.flush()},get label(){return i()},set label(e=`Edit Rough Feature`){i(e),r.flush()},get spriteId(){return a()},set spriteId(e){a(e),r.flush()},get onpublish(){return o()},set onpublish(e){o(e),r.flush()}},d=gr(),f=r.first_child(d);Z(f,{onclick:c,children:(e,t)=>{r.next();var n=r.text();r.template_effect(()=>r.set_text(n,`⌥ ${i()??``}`)),r.append(e,n)},$$slots:{default:!0}});var p=r.sibling(f,2),m=e=>{hr(e,{get toolList(){return n()},get spriteId(){return a()},onclose:l,get onpublish(){return o()}})};return r.if(p,e=>{r.get(s)&&e(m)}),r.append(e,d),r.pop(u)}customElements.define(`rough-edit-button`,r.create_custom_element(_r,{toolList:{},label:{},spriteId:{},onpublish:{}},[],[]));var vr=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='17441%2015570%20441%20441'%20fill='none'%20stroke='currentColor'%20stroke-linecap='square'%20stroke-linejoin='miter'%20%3e%3ctitle%3eRough%20logo%3c/title%3e%3cdefs%3e%3cclipPath%20id='rough-logo'%3e%3crect%20x='17501'%20y='15630'%20width='321'%20height='321'%20/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23rough-logo)'%3e%3cg%20transform='matrix(1,0,0,1,17606.5311,15766.3152)'%3e%3cpolygon%20fill='currentColor'%20stroke='none'%20points='17.41,-136.32%20173.47,179.78%20173.47,184.68%2088.38,184.68%20-63.53,-122.94%20-63.53,-136.32'%20/%3e%3c/g%3e%3cpath%20stroke-width='78.5'%20d='M%2017473%2015669.25%20L%2017543%2015669.25'%20/%3e%3cpath%20stroke-width='78.5'%20d='M%2017780%2015669.25%20L%2017750%2015669.25'%20/%3e%3cpath%20stroke-width='78.5'%20d='M%2017780%2015911.75%20L%2017850%2015911.75'%20/%3e%3c/g%3e%3c/svg%3e`,yr=r.from_html(`<div class="chrome svelte-1aurlo0"><button class="badge svelte-1aurlo0" aria-label="Edit Rough Feature"><img alt="Rough Logo"/></button> <!></div> <!>`,1),br={hash:`svelte-1aurlo0`,code:`.chrome.svelte-1aurlo0 {position:relative;isolation:isolate;}.badge.svelte-1aurlo0 {position:absolute;top:8px;right:8px;z-index:10;width:24px;height:24px;border-radius:2px;background:var(--rough-danger, #cb4b16);border:none;padding:1px;display:flex;align-items:center;justify-content:center;cursor:pointer;pointer-events:none;opacity:0;transition:opacity 150ms ease;}.chrome.svelte-1aurlo0:hover .badge:where(.svelte-1aurlo0),
78
+ .chrome.svelte-1aurlo0:focus-within .badge:where(.svelte-1aurlo0),
79
+ .chrome.svelte-1aurlo0:active .badge:where(.svelte-1aurlo0) {opacity:1;pointer-events:auto;}`};function xr(e,t){r.push(t,!0),r.append_styles(e,br);let n=r.prop(t,`spriteId`,7),i=r.prop(t,`toolList`,7),a=r.prop(t,`onpublish`,7),o=r.prop(t,`children`,7),s=r.state(!1),c=()=>{r.set(s,!0)},l=()=>{r.set(s,!1)};var u={get spriteId(){return n()},set spriteId(e){n(e),r.flush()},get toolList(){return i()},set toolList(e){i(e),r.flush()},get onpublish(){return a()},set onpublish(e){a(e),r.flush()},get children(){return o()},set children(e){o(e),r.flush()}},d=yr(),f=r.first_child(d),p=r.child(f),m=r.child(p);r.reset(p);var h=r.sibling(p,2);r.snippet(h,o),r.reset(f);var g=r.sibling(f,2),_=e=>{hr(e,{get toolList(){return i()},get spriteId(){return n()},onclose:l,get onpublish(){return a()}})};return r.if(g,e=>{r.get(s)&&e(_)}),r.template_effect(()=>r.set_attribute(m,`src`,vr)),r.delegated(`click`,p,c),r.append(e,d),r.pop(u)}r.delegate([`click`]),r.create_custom_element(xr,{spriteId:{},toolList:{},onpublish:{},children:{}},[],[],{mode:`open`});function Sr(e,t){r.push(t,!0);let n=r.prop(t,`featureId`,7),i=r.prop(t,`buildId`,7),a=r.prop(t,`surfaceKey`,7),o=r.prop(t,`datastore`,7),s=r.derived(()=>De(a()));var c={get featureId(){return n()},set featureId(e){n(e),r.flush()},get buildId(){return i()},set buildId(e){i(e),r.flush()},get surfaceKey(){return a()},set surfaceKey(e){a(e),r.flush()},get datastore(){return o()},set datastore(e){o(e),r.flush()}},l=r.comment(),u=r.first_child(l),d=e=>{xr(e,{get spriteId(){return n()},get toolList(){return r.get(s).toolList},get onpublish(){return r.get(s).triggerRefresh},children:(e,t)=>{xn(e,{get spriteId(){return n()},get spriteBuildId(){return i()},get spriteInstanceId(){return n()},get toolList(){return r.get(s).toolList},get datastore(){return o()}})},$$slots:{default:!0}})};return r.if(u,e=>{r.get(s)&&e(d)}),r.append(e,l),r.pop(c)}customElements.define(`rough-feature`,r.create_custom_element(Sr,{featureId:{},buildId:{},surfaceKey:{},datastore:{}},[],[]));var Cr=r.from_html(`<div class="surface svelte-1f41bpr"><div class="frame-container svelte-1f41bpr"></div></div>`),wr={hash:`svelte-1f41bpr`,code:`.surface.svelte-1f41bpr {flex:1;width:100%;outline:1px dashed rgba(147, 161, 161, 0.5);padding:0.5rem;}.frame-container.svelte-1f41bpr {display:flex;flex-direction:column;gap:0.5rem;}`};function Tr(e,t){r.push(t,!0),r.append_styles(e,wr);let n=r.prop(t,`surface`,7),i=r.prop(t,`getDatastore`,7),a=r.state(r.proxy([]));s(()=>Oe(n(),e=>{r.set(a,e,!0)}));var o={get surface(){return n()},set surface(e){n(e),r.flush()},get getDatastore(){return i()},set getDatastore(e){i(e),r.flush()}},c=Cr(),l=r.child(c);return r.each(l,21,()=>r.get(a),e=>e.id,(e,t)=>{let a=r.derived(()=>r.get(t).publishedSpriteBuild),o=r.derived(()=>i()?.({spriteId:r.get(t).id,spriteInstanceId:r.get(t).id}));var s=r.comment(),c=r.first_child(s),l=e=>{Sr(e,{get featureId(){return r.get(t).id},get buildId(){return r.get(a).id},get surfaceKey(){return n().key},get datastore(){return r.get(o)}})};r.if(c,e=>{r.get(a)?.artifactUrl&&e(l)}),r.append(e,s)}),r.reset(l),r.reset(c),r.append(e,c),r.pop(o)}customElements.define(`rough-surface`,r.create_custom_element(Tr,{surface:{},getDatastore:{}},[],[]));var Er=r.from_html(`<div class="SpriteBuildMenuItem svelte-1uvsqdj" role="none"><div class="copy svelte-1uvsqdj"><h3> </h3> <p class="svelte-1uvsqdj"> </p></div> <!></div>`),Dr={hash:`svelte-1uvsqdj`,code:`.SpriteBuildMenuItem.svelte-1uvsqdj {display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:0.75rem;background:var(--rough-background-muted, #eee8d5);border:1px solid var(--rough-border, #93a1a1);}.copy.svelte-1uvsqdj {min-width:0;}.copy.svelte-1uvsqdj p:where(.svelte-1uvsqdj) {margin-bottom:0;}`};function Or(e,t){r.push(t,!0),r.append_styles(e,Dr);let n=r.prop(t,`sprite`,7),i=r.prop(t,`spriteBuild`,7),a=r.prop(t,`onselect`,7),o=async()=>{a()?.(n(),i())};var s={get sprite(){return n()},set sprite(e){n(e),r.flush()},get spriteBuild(){return i()},set spriteBuild(e){i(e),r.flush()},get onselect(){return a()},set onselect(e){a(e),r.flush()}},c=Er(),l=r.child(c),u=r.child(l),d=r.child(u,!0);r.reset(u);var f=r.sibling(u,2),p=r.child(f,!0);return r.reset(f),r.reset(l),Z(r.sibling(l,2),{onclick:o,role:`menuitem`,children:(e,t)=>{r.next();var n=r.text(`Insert`);r.append(e,n)},$$slots:{default:!0}}),r.reset(c),r.template_effect(()=>{r.set_text(d,n().name),r.set_text(p,i().prompt)}),r.append(e,c),r.pop(s)}r.create_custom_element(Or,{sprite:{},spriteBuild:{},onselect:{}},[],[],{mode:`open`});var kr=r.from_html(`<!> Insert Existing Rough Feature`,1),Ar=r.from_html(`<p>Loading…</p>`),jr=r.from_html(`<p> </p>`),Mr=r.from_html(`<div class="menu svelte-17o42e2" role="menu"><!></div>`),Nr=r.from_html(`<div class="SpriteBuildMenu svelte-17o42e2"><!> <!></div>`),Pr={hash:`svelte-17o42e2`,code:`.SpriteBuildMenu.svelte-17o42e2 {position:relative;}.menu.svelte-17o42e2 {position:absolute;top:calc(100% + 0.5rem);left:0;min-width:22rem;display:grid;gap:0.5rem;padding:0.5rem;background:var(--rough-background, #fdf6e3);border:1px solid var(--rough-border, #93a1a1);z-index:10;}`};function Fr(e,t){r.push(t,!0),r.append_styles(e,Pr);let n=r.prop(t,`surfaceId`,7),i=r.prop(t,`onselect`,7),a=$(e=>ye({surfaceId:n(),signal:e})),o=r.state(!1),s=()=>{r.set(o,!r.get(o))},c=(e,t)=>{r.set(o,!1),i()?.(e,t)};var l={get surfaceId(){return n()},set surfaceId(e){n(e),r.flush()},get onselect(){return i()},set onselect(e){i(e),r.flush()}},u=Nr(),d=r.child(u);Q(d,{onclick:s,"aria-haspopup":`menu`,get"aria-expanded"(){return r.get(o)},children:(e,t)=>{var n=kr();An(r.first_child(n),{size:20}),r.next(),r.append(e,n)},$$slots:{default:!0}});var f=r.sibling(d,2),p=e=>{var t=Mr(),n=r.child(t),i=e=>{var t=Ar();r.append(e,t)},o=e=>{var t=jr(),n=r.child(t);r.reset(t),r.template_effect(()=>r.set_text(n,`ERROR: ${a.error.message??``}`)),r.append(e,t)},s=e=>{var t=r.comment(),n=r.first_child(t);r.each(n,17,()=>a.data,e=>e.id,(e,t)=>{let n=r.derived(()=>r.get(t).publishedSpriteBuild);var i=r.comment(),a=r.first_child(i),o=e=>{Or(e,{get sprite(){return r.get(t)},get spriteBuild(){return r.get(n)},onselect:c})};r.if(a,e=>{r.get(n)&&e(o)}),r.append(e,i)}),r.append(e,t)};r.if(n,e=>{a.isLoading?e(i):a.error?e(o,1):e(s,-1)}),r.reset(t),r.append(e,t)};return r.if(f,e=>{r.get(o)&&e(p)}),r.reset(u),r.append(e,u),r.pop(l)}r.create_custom_element(Fr,{surfaceId:{},onselect:{}},[],[],{mode:`open`});export{g as Mutation,Z as PrimaryButton,_ as Query,Qt as ResizeHandle,pr as RoughCreateModal,_r as RoughEditButton,Sr as RoughFeature,Tr as RoughSurface,Q as SecondaryButton,Fr as SpriteBuildMenu,xn as SpriteFrame,v as Subscription,y as defineSurface,Oe as getRoughFeatures,ke as initRough,mr as openRoughCreate,Ee as registerSurfaceEntry};
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@roughapp/feature",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "license": "UNLICENSED",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "exports": {
10
+ ".": {
11
+ "types": "./index.d.ts",
12
+ "import": "./index.js",
13
+ "default": "./index.js"
14
+ },
15
+ "./style.css": "./style.css"
16
+ },
17
+ "types": "./index.d.ts",
18
+ "files": [
19
+ "index.js",
20
+ "index.d.ts",
21
+ "style.css",
22
+ "README.md"
23
+ ],
24
+ "sideEffects": [
25
+ "./index.js",
26
+ "./style.css"
27
+ ],
28
+ "dependencies": {
29
+ "@andypf/json-viewer": "^2.8.0",
30
+ "@stayradiated/error-boundary": "^4.3.0",
31
+ "capnweb": "^0.8.0",
32
+ "svelte": "^5.56.4",
33
+ "zod": "^4.4.3"
34
+ }
35
+ }
package/style.css ADDED
@@ -0,0 +1,2 @@
1
+ :root{--rough-background:#fdf6e3;--rough-background-muted:#eee8d5;--rough-border:#93a1a1;--rough-text-secondary:#586e75;--rough-text:#073642;--rough-danger:#cb4b16;--rough-accent:#268bd2;--rough-accent-secondary:#2aa198;--rough-surface:#fff;--rough-surface-border:#93a1a152;--rough-shadow:0 24px 70px #0736421f}
2
+ /*$vite$:1*/