@nil-/xit 0.4.13 → 0.4.15

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
@@ -14,7 +14,7 @@ import Component from "${e.replace(/\\/g,"/")}";
14
14
  export const action = (target, context) => {
15
15
  const ref = mount(Component, { target, context });
16
16
  return { destroy: () => unmount(ref) };
17
- };`,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:(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.13`:`${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(`
17
+ };`,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:(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.15`:`${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(`
18
18
  `).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(`
19
19
  `),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)}
20
20
  ${n}`}return`${a}: ${Ul(i)}`}).join(`
@@ -21,12 +21,12 @@ interface ToWritableType {
21
21
  type: infer T extends keyof MapType;
22
22
  } ? Writable<MapType[T]> : never;
23
23
  }
24
- interface ExtractItem {
24
+ interface ExtractValue {
25
25
  output: this extends {
26
26
  mask: infer Mask extends {
27
27
  output: any;
28
28
  };
29
- item: {
29
+ value: {
30
30
  readonly key: infer Key extends string;
31
31
  readonly type: infer Type;
32
32
  };
@@ -36,27 +36,27 @@ interface ExtractItem {
36
36
  })["output"];
37
37
  } : never;
38
38
  }
39
- interface ExtractItems {
39
+ interface ExtractValues {
40
40
  output: this extends {
41
41
  mask: infer Mask;
42
- items: infer Items;
43
- } ? Items extends readonly [infer F, ...infer Rest] ? (ExtractItem & {
44
- item: F;
42
+ values: infer Values;
43
+ } ? Values extends readonly [infer F, ...infer Rest] ? (ExtractValue & {
44
+ value: F;
45
45
  mask: Mask;
46
- })["output"] & (ExtractItems & {
47
- items: Rest;
46
+ })["output"] & (ExtractValues & {
47
+ values: Rest;
48
48
  mask: Mask;
49
- })["output"] : Items extends readonly [] ? {} : never : never;
49
+ })["output"] : Values extends readonly [] ? {} : never : never;
50
50
  }
51
51
  interface ExtractFrames {
52
52
  output: this extends {
53
53
  mask: infer Mask;
54
54
  frames: infer Frames;
55
55
  } ? Frames extends readonly [infer F extends {
56
- items: any;
56
+ values: any;
57
57
  }, ...infer Rest] ? [
58
- Prettify<(ExtractItems & {
59
- items: F["items"];
58
+ Prettify<(ExtractValues & {
59
+ values: F["values"];
60
60
  mask: Mask;
61
61
  })["output"]>,
62
62
  ...(ExtractFrames & {
@@ -65,7 +65,7 @@ interface ExtractFrames {
65
65
  })["output"]
66
66
  ] : Frames extends readonly [] ? [] : never : never;
67
67
  }
68
- type ItemDetail<T extends keyof MapType> = T extends "json" ? {
68
+ type ValueDetail<T extends keyof MapType> = T extends "json" ? {
69
69
  key: string;
70
70
  type: T;
71
71
  default: MapType[T];
@@ -79,7 +79,7 @@ type ItemDetail<T extends keyof MapType> = T extends "json" ? {
79
79
  export type FrameDetails = {
80
80
  readonly id: string;
81
81
  readonly tag?: string;
82
- readonly items: readonly ItemDetail<keyof MapType>[];
82
+ readonly values: readonly ValueDetail<keyof MapType>[];
83
83
  };
84
84
  export type ReactiveFrames<T> = (ExtractFrames & {
85
85
  frames: T;
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" module>
2
- import type { FrameDetails, ReactiveFrames, Prettify } from "./Helpers";
2
+ import type { FrameDetails, ReactiveFrames } from "./Helpers";
3
3
  </script>
4
4
 
5
5
  <script lang="ts" generics="const T extends readonly FrameDetails[]">
@@ -10,7 +10,7 @@
10
10
 
11
11
  type Props = {
12
12
  frames: T;
13
- loaded_data?: Snippet<[ReactiveFrames<T>]>;
13
+ loaded_data: Snippet<[ReactiveFrames<T>]>;
14
14
  };
15
15
 
16
16
  const { frames, loaded_data }: Props = $props();
@@ -24,26 +24,22 @@
24
24
  const frame_data = await load_frame_data(frame.id, frame.tag);
25
25
  if (unmounted) {
26
26
  frame_data.unsub();
27
- } else {
28
- unsubs.push(frame_data.unsub);
29
- for (const item of frame.items) {
30
- if (item.type == "boolean") {
31
- data[index][item.key] = frame_data.values.boolean(item.key, item.default);
32
- } else if (item.type == "double") {
33
- data[index][item.key] = frame_data.values.double(item.key, item.default);
34
- } else if (item.type == "number") {
35
- data[index][item.key] = frame_data.values.number(item.key, item.default);
36
- } else if (item.type == "string") {
37
- data[index][item.key] = frame_data.values.string(item.key, item.default);
38
- } else if (item.type == "buffer") {
39
- data[index][item.key] = frame_data.values.buffer(item.key, item.default);
40
- } else if (item.type == "json") {
41
- data[index][item.key] = frame_data.values.json(
42
- item.key,
43
- item.default,
44
- item.codec
45
- );
46
- }
27
+ return;
28
+ }
29
+ unsubs.push(frame_data.unsub);
30
+ for (const value of frame.values) {
31
+ if (value.type == "boolean") {
32
+ data[index][value.key] = frame_data.values.boolean(value.key, value.default);
33
+ } else if (value.type == "double") {
34
+ data[index][value.key] = frame_data.values.double(value.key, value.default);
35
+ } else if (value.type == "number") {
36
+ data[index][value.key] = frame_data.values.number(value.key, value.default);
37
+ } else if (value.type == "string") {
38
+ data[index][value.key] = frame_data.values.string(value.key, value.default);
39
+ } else if (value.type == "buffer") {
40
+ data[index][value.key] = frame_data.values.buffer(value.key, value.default);
41
+ } else if (value.type == "json") {
42
+ data[index][value.key] = frame_data.values.json(value.key, value.default, value.codec);
47
43
  }
48
44
  }
49
45
  };
@@ -10,7 +10,7 @@
10
10
 
11
11
  type Props = {
12
12
  frames: T;
13
- loaded_data?: Snippet<[ReadOnlyFrames<T>]>;
13
+ loaded_data: Snippet<[ReadOnlyFrames<T>]>;
14
14
  };
15
15
 
16
16
  const { frames, loaded_data }: Props = $props();
@@ -24,47 +24,47 @@
24
24
  const frame_data = await load_frame_data(frame.id, frame.tag);
25
25
  if (unmounted) {
26
26
  frame_data.unsub();
27
- } else {
28
- unsubs.push(frame_data.unsub);
29
- for (const item of frame.items) {
30
- const { key } = item;
31
- if (item.type == "boolean") {
32
- unsubs.push(
33
- frame_data.values
34
- .boolean(item.key, item.default)
35
- .subscribe((v) => (data[index][key] = v))
36
- );
37
- } else if (item.type == "double") {
38
- unsubs.push(
39
- frame_data.values
40
- .double(item.key, item.default)
41
- .subscribe((v) => (data[index][key] = v))
42
- );
43
- } else if (item.type == "number") {
44
- unsubs.push(
45
- frame_data.values
46
- .number(item.key, item.default)
47
- .subscribe((v) => (data[index][key] = v))
48
- );
49
- } else if (item.type == "string") {
50
- unsubs.push(
51
- frame_data.values
52
- .string(item.key, item.default)
53
- .subscribe((v) => (data[index][key] = v))
54
- );
55
- } else if (item.type == "buffer") {
56
- unsubs.push(
57
- frame_data.values
58
- .buffer(item.key, item.default)
59
- .subscribe((v) => (data[index] = v))
60
- );
61
- } else if (item.type == "json") {
62
- unsubs.push(
63
- frame_data.values
64
- .json(item.key, item.default, item.codec)
65
- .subscribe((v) => (data[index][key] = v))
66
- );
67
- }
27
+ return;
28
+ }
29
+ unsubs.push(frame_data.unsub);
30
+ for (const value of frame.values) {
31
+ const { key } = value;
32
+ if (value.type == "boolean") {
33
+ unsubs.push(
34
+ frame_data.values
35
+ .boolean(value.key, value.default)
36
+ .subscribe((v) => (data[index][key] = v))
37
+ );
38
+ } else if (value.type == "double") {
39
+ unsubs.push(
40
+ frame_data.values
41
+ .double(value.key, value.default)
42
+ .subscribe((v) => (data[index][key] = v))
43
+ );
44
+ } else if (value.type == "number") {
45
+ unsubs.push(
46
+ frame_data.values
47
+ .number(value.key, value.default)
48
+ .subscribe((v) => (data[index][key] = v))
49
+ );
50
+ } else if (value.type == "string") {
51
+ unsubs.push(
52
+ frame_data.values
53
+ .string(value.key, value.default)
54
+ .subscribe((v) => (data[index][key] = v))
55
+ );
56
+ } else if (value.type == "buffer") {
57
+ unsubs.push(
58
+ frame_data.values
59
+ .buffer(value.key, value.default)
60
+ .subscribe((v) => (data[index] = v))
61
+ );
62
+ } else if (value.type == "json") {
63
+ unsubs.push(
64
+ frame_data.values
65
+ .json(value.key, value.default, value.codec)
66
+ .subscribe((v) => (data[index][key] = v))
67
+ );
68
68
  }
69
69
  }
70
70
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nil-/xit",
3
- "version": "0.4.13",
3
+ "version": "0.4.15",
4
4
  "peerDependencies": {
5
5
  "svelte": "^5.7.1"
6
6
  },
package/test/Frame.svelte CHANGED
@@ -1,16 +1,16 @@
1
1
  <script lang="ts">
2
- import { xit, type CoDec, type Action } from "..";
2
+ import { xit, type CoDec, type Action } from "..";
3
3
  import { get } from "svelte/store";
4
4
 
5
5
  import type { Snippet } from "svelte";
6
6
 
7
- type ActionItem = { name: string; action: Action<HTMLElement> };
7
+ type ActionItem = {
8
+ name: string;
9
+ action: Action<HTMLElement>;
10
+ url: (tag: string) => string;
11
+ };
8
12
 
9
- let {
10
- decoder,
11
- selected = -1,
12
- load
13
- }: {
13
+ type Props = {
14
14
  decoder: CoDec<any>["decode"];
15
15
  selected?: number;
16
16
  load: Snippet<
@@ -22,7 +22,9 @@
22
22
  }
23
23
  ]
24
24
  >;
25
- } = $props();
25
+ };
26
+
27
+ let { decoder, selected = $bindable(-1), load }: Props = $props();
26
28
 
27
29
  let { signals, values, load_frame_data, load_frame_ui } = xit();
28
30
 
@@ -44,11 +46,19 @@
44
46
  }
45
47
  if (mark === "T") {
46
48
  return load_frame_ui(frame_id, tag).then((f) => {
47
- return { name: frame_id, action: f };
49
+ return {
50
+ name: frame_id,
51
+ action: f,
52
+ url: (tag) => `/?frame=${frame_id}&tag=${tag}`
53
+ } satisfies ActionItem;
48
54
  });
49
55
  } else if (mark === "U") {
50
56
  return load_frame_ui(frame_id).then((f) => {
51
- return { name: frame_id, action: f };
57
+ return {
58
+ name: frame_id,
59
+ action: f,
60
+ url: (tag) => `/?frame=${frame_id}`
61
+ } satisfies ActionItem;
52
62
  });
53
63
  }
54
64
  })
@@ -64,10 +74,15 @@
64
74
  decode: decoder,
65
75
  encode: () => new Uint8Array()
66
76
  });
77
+
78
+ if ($tags.length > 0) {
79
+ selected = 0;
80
+ }
81
+
67
82
  const finalize = signals.string("finalize");
68
83
 
69
- let a_inputs = $state([] as { name: string; action: Action<HTMLElement> }[]);
70
- let a_outputs = $state([] as { name: string; action: Action<HTMLElement> }[]);
84
+ let a_inputs = $state([] as ActionItem[]);
85
+ let a_outputs = $state([] as ActionItem[]);
71
86
  let title = $derived(selected > $tags.length ? "" : $tags[selected]);
72
87
  const update = async (v: number) => {
73
88
  a_inputs = [];
@@ -3,8 +3,9 @@ import type { Snippet } from "svelte";
3
3
  type ActionItem = {
4
4
  name: string;
5
5
  action: Action<HTMLElement>;
6
+ url: (tag: string) => string;
6
7
  };
7
- type $$ComponentProps = {
8
+ type Props = {
8
9
  decoder: CoDec<any>["decode"];
9
10
  selected?: number;
10
11
  load: Snippet<[
@@ -15,6 +16,6 @@ type $$ComponentProps = {
15
16
  }
16
17
  ]>;
17
18
  };
18
- declare const Frame: import("svelte").Component<$$ComponentProps, {}, "">;
19
+ declare const Frame: import("svelte").Component<Props, {}, "selected">;
19
20
  type Frame = ReturnType<typeof Frame>;
20
21
  export default Frame;
package/test/Main.svelte CHANGED
@@ -7,22 +7,17 @@
7
7
 
8
8
  import { config } from "$xit/config.js";
9
9
 
10
- let { children }: { children?: Snippet<[string]> } = $props();
10
+ type Props = {
11
+ children?: Snippet<[string]>,
12
+ input: Snippet<[{name: string; url: string;}]>
13
+ };
14
+
15
+ let { children, input }: Props = $props();
11
16
 
12
17
  let selected = $state(-1);
13
18
  </script>
14
19
 
15
- {#snippet combo(tags: string[])}
16
- <div class="combo">
17
- <select bind:value={selected}>
18
- {#each tags as id, i}
19
- <option value={i}>{id}</option>
20
- {/each}
21
- </select>
22
- </div>
23
- {/snippet}
24
-
25
- <TestFrame decoder={config.codec.decode} {selected}>
20
+ <TestFrame decoder={config.codec.decode} bind:selected>
26
21
  {#snippet load({ tags, inputs, outputs })}
27
22
  <Scrollable>
28
23
  <Split vertical offset={200}>
@@ -36,11 +31,25 @@
36
31
  </Scrollable>
37
32
  {/snippet}
38
33
  {#snippet side_b()}
39
- {@render combo(tags)}
34
+ <div class="combo">
35
+ <select bind:value={selected}>
36
+ {#each tags as id, i}
37
+ <option value={i}>{id}</option>
38
+ {/each}
39
+ </select>
40
+ </div>
41
+ {#if 0 <= selected && selected < tags.length }
40
42
  {@render children?.(tags[selected])}
41
- {#each inputs as { name }}
42
- <a href={`/?frame=${name}&tag=${tags[selected]}`} target="_blank">{name}</a>
43
- {/each}
43
+ <div style="display: flex; flex-direction: column;">
44
+ {#each inputs as { name, url }}
45
+ {#if input != null}
46
+ {@render input({ name, url: url(tags[selected]) })}
47
+ {:else}
48
+ <a href={url(tags[selected])} target="_blank">{name}</a>
49
+ {/if}
50
+ {/each}
51
+ </div>
52
+ {/if}
44
53
  {/snippet}
45
54
  </Split>
46
55
  </Scrollable>
@@ -1,7 +1,11 @@
1
1
  import type { Snippet } from "svelte";
2
- type $$ComponentProps = {
2
+ type Props = {
3
3
  children?: Snippet<[string]>;
4
+ input: Snippet<[{
5
+ name: string;
6
+ url: string;
7
+ }]>;
4
8
  };
5
- declare const Main: import("svelte").Component<$$ComponentProps, {}, "">;
9
+ declare const Main: import("svelte").Component<Props, {}, "">;
6
10
  type Main = ReturnType<typeof Main>;
7
11
  export default Main;