@nil-/xit 0.4.16 → 0.4.18

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/assets/bundler.js CHANGED
@@ -21,7 +21,7 @@ if (window.process == null) {
21
21
  export const action = (target, context) => {
22
22
  const ref = mount(Component, { target, context });
23
23
  return { destroy: () => unmount(ref) };
24
- };`,ml=new Map,uS=/^(@[^/]*\/[^/]*)(?:\/(.*))?$/s,DS=/^([^/]*)(?:\/(.*))?$/s,dS=async(e,A)=>{if(A!=null){const t=new URL(A);return new URL(e,t).href}return e},Fn=async(e,A)=>e.endsWith("..")?(await fetch(new URL(`${e}/index.js`,A),{method:"HEAD"})).url:e.endsWith(".")?(await fetch(new URL(`${e}/index.js`,A),{method:"HEAD"})).url:e.endsWith("/")?(await fetch(new URL(`${e}index.js`,A),{method:"HEAD"})).url:(await fetch(new URL(e,A),{method:"HEAD"})).url,pS=async e=>{const A=await fetch(e);if(A.ok)return JSON.parse(await A.text())},wS=async(e,A)=>{const[t,g,I=""]=e.split(e.startsWith("@")?uS:DS),Q=g=="@nil-/xit"?`${A}/${g}@0.4.16`:`${A}/${g}`,C=`${Q}/package.json`;if(ml.has(C))return{...ml.get(C),rest:I};const i=await pS(C);if(i!=null)return ml.set(C,{base:Q,json:i}),{base:Q,json:i,rest:I}},fS=(e,A)=>({input:t=>({resolved:t}),hook:async(t,g)=>{if(t.startsWith(Xd))return t;if(t.startsWith(".")){if(g!=null&&g.startsWith(Jn))return await dS(t,g);if(g!=null&&g.startsWith(uI))return`${uI}${await Fn(t,g.slice(uI.length))}`}if(t.startsWith("$")){const Q=t.indexOf("/"),C=t.slice(1,Q);return C in A?`${Jn}${A[C]}${t.slice(Q)}`:null}if(t.startsWith("https://"))return null;const I=await wS(t,e);if(I!=null){const Q=lS(I.json,I.rest,{browser:!0,conditions:["svelte","production"]});if(Q!=null){if(Array.isArray(Q)&&Q.length>0)return`${uI}${await Fn(`${I.base}/${Q[0]}`)}`;if(typeof Q=="string")return`${uI}${await Fn(`${I.base}/${Q}`)}`}else{const C=cS(I.json);if(C!=null)return`${uI}${await Fn(`${I.base}/${C}`)}`}}throw"unknown file, should be unreachable"}});function ZA(e,A,t){const g=t._;let I=!1;function Q(i,{next:B,state:s}){B(s)}function C(i,B,s){if(I||!i.type)return;let a;const n={},o={path:B,state:s,next:(f=s)=>{B.push(i);for(const d in i){if(d==="type")continue;const l=i[d];if(l&&typeof l=="object")if(Array.isArray(l)){const c={};l.forEach((h,w)=>{if(h&&typeof h=="object"){const N=C(h,B,f);N&&(c[w]=N)}}),Object.keys(c).length>0&&(n[d]=l.map((h,w)=>c[w]??h))}else{const c=C(l,B,f);c&&(n[d]=c)}}if(B.pop(),Object.keys(n).length>0)return zd(i,n)},stop:()=>{I=!0},visit:(f,d=s)=>{B.push(i);const l=C(f,B,d)??f;return B.pop(),l}};let D=t[i.type]??Q;if(g){let f;a=g(i,{...o,next:(d=s)=>(s=d,f=D(i,{...o,state:d}),f)}),!a&&f&&(a=f)}else a=D(i,o);if(a||Object.keys(n).length>0&&(a=zd(i,n)),a)return a}return C(e,[],A)??e}function zd(e,A){const t={},g=Object.getOwnPropertyDescriptors(e);for(const I in g)Object.defineProperty(t,I,g[I]);for(const I in A)t[I]=A[I];return t}const KQ=/\s/,Nl=/\s+/,Sn=/^\r?\n/,yS=/^\s/,TC=/^[ \t\r\n]+/,$d=/\s$/,_Q=/[ \t\r\n]+$/,PQ=/[^ \t\r\n]/,Ap=/[ \t\n\r\f]+/g,kS=/^[ \t\n\r\f]+$/,ep=/[^\n]/g,tp=/^[a-zA-Z_$][a-zA-Z_$0-9]*$/,GS=/(^[^a-zA-Z_$]|[^a-zA-Z0-9_$])/g,mS=/^[aeiou]/,NS=/^h[1-6]$/,MS=/(^[0-9-.])|[\^$@%&#?!|()[\]{}^*+~;]/,Ln=/[\u202a\u202b\u202c\u202d\u202e\u2066\u2067\u2068\u2069]+/g,Ml=1,Yn=2,RS=4,JS=8,FS=16,SS=1,LS=2,YS=4,US=8,bS=16,qS=1,vS=2,xS=4,HS=1,gp=2,KS=4,_S=8,PS="[",TS="[!",jS="]",OS=1,Ip=2,Qp="http://www.w3.org/2000/svg",Cp="http://www.w3.org/1998/Math/MathML",ZS=["state_snapshot_uncloneable","binding_property_non_reactive","hydration_attribute_changed","hydration_html_changed","ownership_invalid_binding","ownership_invalid_mutation"];function Un(e,A){if(A.length===0)return null;const g=new $S(A).get(e);return g&&g[0][0]>.7?g[0][1]:null}const Rl=2,Jl=3;function VS(e,A){if(e===null&&A===null)throw"Trying to compare two null values";return e===null||A===null?0:(e=String(e),A=String(A),1-WS(e,A)/Math.max(e.length,A.length))}function WS(e,A){const t=[];let g=0,I=0;for(let Q=0;Q<=A.length;Q++)for(let C=0;C<=e.length;C++)Q&&C?e.charAt(C-1)===A.charAt(Q-1)?I=g:I=Math.min(t[C],t[C-1],g)+1:I=Q+C,g=t[C],t[C]=I;return t.pop()}const XS=/[^\w, ]+/;function zS(e,A=2){const t="-"+e.toLowerCase().replace(XS,"")+"-",g=A-t.length,I=[];if(g>0)for(let Q=0;Q<g;++Q)e+="-";for(let Q=0;Q<t.length-A+1;++Q)I.push(t.slice(Q,Q+A));return I}function ip(e,A=2){const t={},g=zS(e,A);let I=0;for(I;I<g.length;++I)g[I]in t?t[g[I]]+=1:t[g[I]]=1;return t}function Bp(e,A){return A[0]-e[0]}class $S{constructor(A){nA(this,"exact_set",{});nA(this,"match_dict",{});nA(this,"items",{});for(let t=Rl;t<Jl+1;++t)this.items[t]=[];for(let t=0;t<A.length;++t)this.add(A[t])}add(A){if(A.toLowerCase()in this.exact_set)return!1;let g=Rl;for(g;g<Jl+1;++g)this._add(A,g)}_add(A,t){const g=A.toLowerCase(),I=this.items[t]||[],Q=I.length;I.push(0);const C=ip(g,t);let i=0,B,s;for(B in C)s=C[B],i+=Math.pow(s,2),B in this.match_dict?this.match_dict[B].push([Q,s]):this.match_dict[B]=[[Q,s]];const a=Math.sqrt(i);I[Q]=[a,g],this.items[t]=I,this.exact_set[g]=A}get(A){const t=A.toLowerCase(),g=this.exact_set[t];if(g)return[[1,g]];for(let I=Jl;I>=Rl;--I){const Q=this.__get(A,I);if(Q.length>0)return Q}return null}__get(A,t){const g=A.toLowerCase(),I={},Q=ip(g,t),C=this.items[t];let i=0,B,s,a,n,o;for(B in Q)if(s=Q[B],i+=Math.pow(s,2),B in this.match_dict)for(a=0;a<this.match_dict[B].length;++a)n=this.match_dict[B][a][0],o=this.match_dict[B][a][1],n in I?I[n]+=s*o:I[n]=s*o;const D=Math.sqrt(i);let f=[],d;for(const h in I)d=I[h],f.push([d/(D*C[h][0]),C[h][1]]);f.sort(Bp);let l=[];const c=Math.min(50,f.length);for(let h=0;h<c;++h)l.push([VS(f[h][1],g),f[h][1]]);f=l,f.sort(Bp),l=[];for(let h=0;h<f.length;++h)f[h][0]===f[0][0]&&l.push([f[h][0],this.exact_set[f[h][1]]]);return l}}function AL(e,A){return e.start<=A&&A<e.end}function sp(e,A={}){const{offsetLine:t=0,offsetColumn:g=0}=A;let I=0;const Q=e.split(`
24
+ };`,ml=new Map,uS=/^(@[^/]*\/[^/]*)(?:\/(.*))?$/s,DS=/^([^/]*)(?:\/(.*))?$/s,dS=async(e,A)=>{if(A!=null){const t=new URL(A);return new URL(e,t).href}return e},Fn=async(e,A)=>e.endsWith("..")?(await fetch(new URL(`${e}/index.js`,A),{method:"HEAD"})).url:e.endsWith(".")?(await fetch(new URL(`${e}/index.js`,A),{method:"HEAD"})).url:e.endsWith("/")?(await fetch(new URL(`${e}index.js`,A),{method:"HEAD"})).url:(await fetch(new URL(e,A),{method:"HEAD"})).url,pS=async e=>{const A=await fetch(e);if(A.ok)return JSON.parse(await A.text())},wS=async(e,A)=>{const[t,g,I=""]=e.split(e.startsWith("@")?uS:DS),Q=g=="@nil-/xit"?`${A}/${g}@0.4.18`:`${A}/${g}`,C=`${Q}/package.json`;if(ml.has(C))return{...ml.get(C),rest:I};const i=await pS(C);if(i!=null)return ml.set(C,{base:Q,json:i}),{base:Q,json:i,rest:I}},fS=(e,A)=>({input:t=>({resolved:t}),hook:async(t,g)=>{if(t.startsWith(Xd))return t;if(t.startsWith(".")){if(g!=null&&g.startsWith(Jn))return await dS(t,g);if(g!=null&&g.startsWith(uI))return`${uI}${await Fn(t,g.slice(uI.length))}`}if(t.startsWith("$")){const Q=t.indexOf("/"),C=t.slice(1,Q);return C in A?`${Jn}${A[C]}${t.slice(Q)}`:null}if(t.startsWith("https://"))return null;const I=await wS(t,e);if(I!=null){const Q=lS(I.json,I.rest,{browser:!0,conditions:["svelte","production"]});if(Q!=null){if(Array.isArray(Q)&&Q.length>0)return`${uI}${await Fn(`${I.base}/${Q[0]}`)}`;if(typeof Q=="string")return`${uI}${await Fn(`${I.base}/${Q}`)}`}else{const C=cS(I.json);if(C!=null)return`${uI}${await Fn(`${I.base}/${C}`)}`}}throw"unknown file, should be unreachable"}});function ZA(e,A,t){const g=t._;let I=!1;function Q(i,{next:B,state:s}){B(s)}function C(i,B,s){if(I||!i.type)return;let a;const n={},o={path:B,state:s,next:(f=s)=>{B.push(i);for(const d in i){if(d==="type")continue;const l=i[d];if(l&&typeof l=="object")if(Array.isArray(l)){const c={};l.forEach((h,w)=>{if(h&&typeof h=="object"){const N=C(h,B,f);N&&(c[w]=N)}}),Object.keys(c).length>0&&(n[d]=l.map((h,w)=>c[w]??h))}else{const c=C(l,B,f);c&&(n[d]=c)}}if(B.pop(),Object.keys(n).length>0)return zd(i,n)},stop:()=>{I=!0},visit:(f,d=s)=>{B.push(i);const l=C(f,B,d)??f;return B.pop(),l}};let D=t[i.type]??Q;if(g){let f;a=g(i,{...o,next:(d=s)=>(s=d,f=D(i,{...o,state:d}),f)}),!a&&f&&(a=f)}else a=D(i,o);if(a||Object.keys(n).length>0&&(a=zd(i,n)),a)return a}return C(e,[],A)??e}function zd(e,A){const t={},g=Object.getOwnPropertyDescriptors(e);for(const I in g)Object.defineProperty(t,I,g[I]);for(const I in A)t[I]=A[I];return t}const KQ=/\s/,Nl=/\s+/,Sn=/^\r?\n/,yS=/^\s/,TC=/^[ \t\r\n]+/,$d=/\s$/,_Q=/[ \t\r\n]+$/,PQ=/[^ \t\r\n]/,Ap=/[ \t\n\r\f]+/g,kS=/^[ \t\n\r\f]+$/,ep=/[^\n]/g,tp=/^[a-zA-Z_$][a-zA-Z_$0-9]*$/,GS=/(^[^a-zA-Z_$]|[^a-zA-Z0-9_$])/g,mS=/^[aeiou]/,NS=/^h[1-6]$/,MS=/(^[0-9-.])|[\^$@%&#?!|()[\]{}^*+~;]/,Ln=/[\u202a\u202b\u202c\u202d\u202e\u2066\u2067\u2068\u2069]+/g,Ml=1,Yn=2,RS=4,JS=8,FS=16,SS=1,LS=2,YS=4,US=8,bS=16,qS=1,vS=2,xS=4,HS=1,gp=2,KS=4,_S=8,PS="[",TS="[!",jS="]",OS=1,Ip=2,Qp="http://www.w3.org/2000/svg",Cp="http://www.w3.org/1998/Math/MathML",ZS=["state_snapshot_uncloneable","binding_property_non_reactive","hydration_attribute_changed","hydration_html_changed","ownership_invalid_binding","ownership_invalid_mutation"];function Un(e,A){if(A.length===0)return null;const g=new $S(A).get(e);return g&&g[0][0]>.7?g[0][1]:null}const Rl=2,Jl=3;function VS(e,A){if(e===null&&A===null)throw"Trying to compare two null values";return e===null||A===null?0:(e=String(e),A=String(A),1-WS(e,A)/Math.max(e.length,A.length))}function WS(e,A){const t=[];let g=0,I=0;for(let Q=0;Q<=A.length;Q++)for(let C=0;C<=e.length;C++)Q&&C?e.charAt(C-1)===A.charAt(Q-1)?I=g:I=Math.min(t[C],t[C-1],g)+1:I=Q+C,g=t[C],t[C]=I;return t.pop()}const XS=/[^\w, ]+/;function zS(e,A=2){const t="-"+e.toLowerCase().replace(XS,"")+"-",g=A-t.length,I=[];if(g>0)for(let Q=0;Q<g;++Q)e+="-";for(let Q=0;Q<t.length-A+1;++Q)I.push(t.slice(Q,Q+A));return I}function ip(e,A=2){const t={},g=zS(e,A);let I=0;for(I;I<g.length;++I)g[I]in t?t[g[I]]+=1:t[g[I]]=1;return t}function Bp(e,A){return A[0]-e[0]}class $S{constructor(A){nA(this,"exact_set",{});nA(this,"match_dict",{});nA(this,"items",{});for(let t=Rl;t<Jl+1;++t)this.items[t]=[];for(let t=0;t<A.length;++t)this.add(A[t])}add(A){if(A.toLowerCase()in this.exact_set)return!1;let g=Rl;for(g;g<Jl+1;++g)this._add(A,g)}_add(A,t){const g=A.toLowerCase(),I=this.items[t]||[],Q=I.length;I.push(0);const C=ip(g,t);let i=0,B,s;for(B in C)s=C[B],i+=Math.pow(s,2),B in this.match_dict?this.match_dict[B].push([Q,s]):this.match_dict[B]=[[Q,s]];const a=Math.sqrt(i);I[Q]=[a,g],this.items[t]=I,this.exact_set[g]=A}get(A){const t=A.toLowerCase(),g=this.exact_set[t];if(g)return[[1,g]];for(let I=Jl;I>=Rl;--I){const Q=this.__get(A,I);if(Q.length>0)return Q}return null}__get(A,t){const g=A.toLowerCase(),I={},Q=ip(g,t),C=this.items[t];let i=0,B,s,a,n,o;for(B in Q)if(s=Q[B],i+=Math.pow(s,2),B in this.match_dict)for(a=0;a<this.match_dict[B].length;++a)n=this.match_dict[B][a][0],o=this.match_dict[B][a][1],n in I?I[n]+=s*o:I[n]=s*o;const D=Math.sqrt(i);let f=[],d;for(const h in I)d=I[h],f.push([d/(D*C[h][0]),C[h][1]]);f.sort(Bp);let l=[];const c=Math.min(50,f.length);for(let h=0;h<c;++h)l.push([VS(f[h][1],g),f[h][1]]);f=l,f.sort(Bp),l=[];for(let h=0;h<f.length;++h)f[h][0]===f[0][0]&&l.push([f[h][0],this.exact_set[f[h][1]]]);return l}}function AL(e,A){return e.start<=A&&A<e.end}function sp(e,A={}){const{offsetLine:t=0,offsetColumn:g=0}=A;let I=0;const Q=e.split(`
25
25
  `).map((B,s)=>{const a=I+B.length+1,n={start:I,end:a,line:s};return I=a,n});let C=0;function i(B,s){if(typeof B=="string"&&(B=e.indexOf(B,s??0)),B===-1)return;let a=Q[C];const n=B>=a.end?1:-1;for(;a;){if(AL(a,B))return{line:t+a.line,column:g+B-a.start,character:B};C+=n,a=Q[C]}}return i}const eL=/\r/g;function tL(e){e=e.replace(eL,"");let A=5381,t=e.length;for(;t--;)A=(A<<5)-A^e.charCodeAt(t);return(A>>>0).toString(36)}const gL=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"];function jC(e){return gL.includes(e)||e.toLowerCase()==="!doctype"}const IL=["arguments","await","break","case","catch","class","const","continue","debugger","default","delete","do","else","enum","eval","export","extends","false","finally","for","function","if","implements","import","in","instanceof","interface","let","new","null","package","private","protected","public","return","static","super","switch","this","throw","true","try","typeof","var","void","while","with","yield"];function Ep(e){return IL.includes(e)}function ap(e){return e.endsWith("capture")&&e!=="gotpointercapture"&&e!=="lostpointercapture"}const QL=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"];function op(e){return QL.includes(e)}const np=["allowfullscreen","async","autofocus","autoplay","checked","controls","default","disabled","formnovalidate","hidden","indeterminate","inert","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","seamless","selected","webkitdirectory","defer","disablepictureinpicture","disableremoteplayback"];function Fl(e){return np.includes(e)}const CL={formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly",defaultvalue:"defaultValue",defaultchecked:"defaultChecked",srcobject:"srcObject",novalidate:"noValidate",allowfullscreen:"allowFullscreen",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback"};function iL(e){return e=e.toLowerCase(),CL[e]??e}const BL=[...np,"formNoValidate","isMap","noModule","playsInline","readOnly","value","volume","defaultValue","defaultChecked","srcObject","noValidate","allowFullscreen","disablePictureInPicture","disableRemotePlayback"];function sL(e){return BL.includes(e)}const EL=["autofocus","muted","defaultValue","defaultChecked"];function Sl(e){return EL.includes(e)}const aL=["touchstart","touchmove"];function oL(e){return aL.includes(e)}const nL=["textContent","innerHTML","innerText"];function Ll(e){return nL.includes(e)}const rL=["body","embed","iframe","img","link","object","script","style","track"];function bn(e){return rL.includes(e)}const cL=["altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","discard","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignObject","g","glyph","glyphRef","hatch","hatchpath","hkern","image","line","linearGradient","marker","mask","mesh","meshgradient","meshpatch","meshrow","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","set","solidcolor","stop","svg","switch","symbol","text","textPath","tref","tspan","unknown","use","view","vkern"];function Yl(e){return cL.includes(e)}const lL=["annotation","annotation-xml","maction","math","merror","mfrac","mi","mmultiscripts","mn","mo","mover","mpadded","mphantom","mprescripts","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msubsup","msup","mtable","mtd","mtext","mtr","munder","munderover","semantics"];function rp(e){return lL.includes(e)}const cp=["$state","$state.raw","$derived","$derived.by"],hL=[...cp,"$state.snapshot","$props","$props.id","$bindable","$effect","$effect.pre","$effect.tracking","$effect.root","$inspect","$inspect().with","$inspect.trace","$host"];function DI(e){return hL.includes(e)}function uL(e){return cp.includes(e)}function DL(e){return e==null?void 0:e.replace(/\//g,"/​")}let TQ=[],xt,qn,MA,Gt=sp("",{offsetLine:1});function lp(e){const A=Gt(e.start);return`${DL(xt)}:${A==null?void 0:A.line}:${A.column}`}let hp,ZI=[],vn=new Map;function dL(e){const A=new Set([...ZI.at(-1)||[],...e]);ZI.push(A)}function pL(){ZI.pop()}function up(e=()=>!0){hp=e}function vg(e,A){var t;return MA&&!!((t=vn.get(e))!=null&&t.some(g=>g.has(A)))}function Dp(e,A){var g;qn=e;const t=(g=A.rootDir)==null?void 0:g.replace(/\\/g,"/");xt=A.filename.replace(/\\/g,"/"),MA=!!A.dev,typeof t=="string"&&xt.startsWith(t)&&(xt=xt.replace(t,"").replace(/^[/\\]/,"")),Gt=sp(qn,{offsetLine:1}),TQ=[],ZI=[],vn.clear()}const wL=/^\t+/;function Ul(e){return e.replace(wL,A=>A.split(" ").join(" "))}function fL(e,A,t){const g=e.split(`
26
26
  `),I=Math.max(0,A-2),Q=Math.min(A+3,g.length),C=String(Q+1).length;return g.slice(I,Q).map((i,B)=>{const s=I+B===A,a=String(B+I+1).padStart(C," ");if(s){const n=" ".repeat(C+2+Ul(i.slice(0,t)).length)+"^";return`${a}: ${Ul(i)}
27
27
  ${n}`}return`${a}: ${Ul(i)}`}).join(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nil-/xit",
3
- "version": "0.4.16",
3
+ "version": "0.4.18",
4
4
  "peerDependencies": {
5
5
  "svelte": "^5.7.1"
6
6
  },
package/test/Frame.svelte CHANGED
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
- import { xit, type CoDec, type Action } from "..";
3
- import { get } from "svelte/store";
2
+ import { xit, type Action } from "..";
3
+ import { derived, get } from "svelte/store";
4
4
 
5
5
  import type { Snippet } from "svelte";
6
6
 
@@ -11,7 +11,6 @@
11
11
  };
12
12
 
13
13
  type Props = {
14
- decoder: CoDec<any>["decode"];
15
14
  selected?: number;
16
15
  load: Snippet<
17
16
  [
@@ -19,26 +18,23 @@
19
18
  tags: string[];
20
19
  inputs: ActionItem[];
21
20
  outputs: ActionItem[];
21
+ expects: ActionItem[];
22
22
  }
23
23
  ]
24
24
  >;
25
25
  };
26
26
 
27
- let { decoder, selected = $bindable(-1), load }: Props = $props();
27
+ let { selected = $bindable(-1), load }: Props = $props();
28
28
 
29
29
  let { signals, values, load_frame_data, load_frame_ui } = xit();
30
30
 
31
- const frame_info = async (tag: string, decoder: CoDec<any>["decode"]) => {
31
+ const frame_info = async (tag: string) => {
32
32
  const { values, unsub } = await load_frame_data("frame_info", tag);
33
33
  const load = async (key: string) => {
34
- const v = values.json(key, [] as string[], {
35
- decode: decoder,
36
- encode: () => {
37
- return new Uint8Array();
38
- }
39
- });
34
+ const v = values.string(key, "");
40
35
  return Promise.all(
41
36
  get(v)
37
+ .split(",")
42
38
  .map((v) => {
43
39
  const [frame_id, mark, g] = v.split(":");
44
40
  if (g !== "V") {
@@ -65,15 +61,14 @@
65
61
  .filter((v) => v != null)
66
62
  );
67
63
  };
68
- const [inputs, outputs] = await Promise.all([load("inputs"), load("outputs")]);
64
+ const [inputs, outputs, expects] = await Promise.all([load("inputs"), load("outputs"), load("expects")]);
69
65
  unsub();
70
- return { inputs, outputs };
66
+ return { inputs, outputs, expects };
71
67
  };
72
68
 
73
- const tags = values.json("tags", [] as string[], {
74
- decode: decoder,
75
- encode: () => new Uint8Array()
76
- });
69
+ const tags_str = values.string("tags", "");
70
+ tags_str.subscribe(console.log);
71
+ const tags = derived(tags_str, v => v.split(','));
77
72
 
78
73
  if ($tags.length > 0) {
79
74
  selected = 0;
@@ -83,15 +78,18 @@
83
78
 
84
79
  let a_inputs = $state([] as ActionItem[]);
85
80
  let a_outputs = $state([] as ActionItem[]);
81
+ let a_expects = $state([] as ActionItem[]);
86
82
  let title = $derived(selected > $tags.length ? "" : $tags[selected]);
87
83
  const update = async (v: number) => {
88
84
  a_inputs = [];
89
85
  a_outputs = [];
86
+ a_expects = [];
90
87
  const t = $tags;
91
88
  if (0 <= v && v < t.length) {
92
- const { inputs, outputs } = await frame_info(t[v], decoder);
89
+ const { inputs, outputs, expects } = await frame_info(t[v]);
93
90
  a_inputs = inputs;
94
91
  a_outputs = outputs;
92
+ a_expects = expects
95
93
  }
96
94
  };
97
95
 
@@ -105,7 +103,7 @@
105
103
  </svelte:head>
106
104
 
107
105
  <svelte:window
108
- onkeydown={(event) => {
106
+ onkeydowncapture={(event) => {
109
107
  if ((event.ctrlKey || event.metaKey) && event.key === "s") {
110
108
  if (0 <= selected && selected < $tags.length) {
111
109
  finalize($tags[selected]);
@@ -115,4 +113,4 @@
115
113
  }}
116
114
  />
117
115
 
118
- {@render load({ tags: $tags.sort(), inputs: a_inputs, outputs: a_outputs })}
116
+ {@render load({ tags: $tags.sort(), inputs: a_inputs, outputs: a_outputs, expects: a_expects })}
@@ -1,4 +1,4 @@
1
- import { type CoDec, type Action } from "..";
1
+ import { type Action } from "..";
2
2
  import type { Snippet } from "svelte";
3
3
  type ActionItem = {
4
4
  name: string;
@@ -6,13 +6,13 @@ type ActionItem = {
6
6
  url: (tag: string) => string;
7
7
  };
8
8
  type Props = {
9
- decoder: CoDec<any>["decode"];
10
9
  selected?: number;
11
10
  load: Snippet<[
12
11
  {
13
12
  tags: string[];
14
13
  inputs: ActionItem[];
15
14
  outputs: ActionItem[];
15
+ expects: ActionItem[];
16
16
  }
17
17
  ]>;
18
18
  };
package/test/Main.svelte CHANGED
@@ -5,20 +5,19 @@
5
5
 
6
6
  import type { Snippet } from "svelte";
7
7
 
8
- import { config } from "$xit/config.js";
9
-
10
8
  type Props = {
11
9
  children?: Snippet<[string]>,
12
- input: Snippet<[{name: string; url: string;}]>
10
+ input?: Snippet<[{name: string; url: string;}]>,
11
+ expect?: Snippet<[{name: string; url: string;}]>,
13
12
  };
14
13
 
15
- let { children, input }: Props = $props();
14
+ let { children, input, expect }: Props = $props();
16
15
 
17
16
  let selected = $state(-1);
18
17
  </script>
19
18
 
20
- <TestFrame decoder={config.codec.decode} bind:selected>
21
- {#snippet load({ tags, inputs, outputs })}
19
+ <TestFrame bind:selected>
20
+ {#snippet load({ tags, inputs, outputs, expects })}
22
21
  <Scrollable>
23
22
  <Split vertical offset={200}>
24
23
  {#snippet side_a()}
@@ -48,6 +47,13 @@
48
47
  <a href={url(tags[selected])} target="_blank">{name}</a>
49
48
  {/if}
50
49
  {/each}
50
+ {#each expects as { name, url }}
51
+ {#if expect != null}
52
+ {@render expect({ name, url: url(tags[selected]) })}
53
+ {:else}
54
+ <a href={url(tags[selected])} target="_blank">{name}</a>
55
+ {/if}
56
+ {/each}
51
57
  {/if}
52
58
  </div>
53
59
  {/snippet}
@@ -1,7 +1,11 @@
1
1
  import type { Snippet } from "svelte";
2
2
  type Props = {
3
3
  children?: Snippet<[string]>;
4
- input: Snippet<[{
4
+ input?: Snippet<[{
5
+ name: string;
6
+ url: string;
7
+ }]>;
8
+ expect?: Snippet<[{
5
9
  name: string;
6
10
  url: string;
7
11
  }]>;
@@ -0,0 +1,20 @@
1
+ <script lang="ts">
2
+ import { xit } from "..";
3
+ const { signals } = xit();
4
+ const finalize = signals.none("finalize");
5
+ </script>
6
+
7
+ <svelte:window
8
+ onkeydowncapture={(event) => {
9
+ if ((event.ctrlKey || event.metaKey) && event.key === "s") {
10
+ finalize();
11
+ event.preventDefault();
12
+ }
13
+ }}
14
+ />
15
+
16
+ <!--
17
+ @component
18
+ This component is intended to be added inside a Frame.
19
+ Once instantiated, pressing ctrl+s will finalize the Frame.
20
+ -->
@@ -0,0 +1,22 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ /**
15
+ * This component is intended to be added inside a Frame.
16
+ * Once instantiated, pressing ctrl+s will finalize the Frame.
17
+ */
18
+ declare const Save: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
19
+ [evt: string]: CustomEvent<any>;
20
+ }, {}, {}, string>;
21
+ type Save = InstanceType<typeof Save>;
22
+ export default Save;