UNPKG

@genart-api/adapter-layer

Version:

GenArtAPI platform adapter for layer.com

2 lines (1 loc) 3.88 kB
"use strict";(()=>{var P={choice:"LIST",color:"COLOR",range:"NUMBER",toggle:"BOOLEAN",text:"HASH",vector:"NUMBER",xy:"NUMBER"},{prng:{SFC32:$},utils:{equiv:h,isString:y,parseUUID:f}}=$genart,g=/layer(static)?\.(com|art)$/.test(location.host),u=class{opts={autoReload:g,hidePrivate:g};_prng;_params;_cache={};_adaptations={};constructor(){$genart.on("genart:state-change",({state:a})=>a==="ready"&&!$layer.controlled&&$genart.start()),window.addEventListener("layer:play",()=>{($genart.state==="ready"||$genart.state==="stop")&&$genart.start($genart.state==="stop")}),window.addEventListener("layer:pause",()=>$genart.stop()),window.addEventListener("layer:paramchange",a=>{let{id:n,value:c}=a.detail,r=this._adaptations[n];r&&(n=r.id,c=r.adapt(c));let t=this._params?.[n];if(!t){this.warn(`ignoring change for unknown param: ${n}...`);return}h(this._cache[n],c)||(this._cache[n]=c,$genart.setParamValue(n,c),t.update==="reload"&&this.opts.autoReload&&setTimeout(()=>location.reload(),100))}),window.addEventListener("layer:dimensionschange",a=>{$genart.emit({type:"genart:resize",screen:{...a.detail,dpr:1}})})}configure(a){Object.assign(this.opts,a)}get id(){return"@genart-api/adapter-layer"}get mode(){return"play"}get screen(){return{width:$layer.width,height:$layer.height,dpr:1}}get prng(){return this._prng||(this._prng=new $(f($layer.uuid)))}get seed(){return $layer.uuid}async updateParam(a,n){let c;if(Object.values(this._adaptations).find(r=>r.id===a))return c=this._cache[a],{value:c};if(c=$layer.parameters[a],!(c==null||h(this._cache[a],c)))return this._cache[a]=c,{value:c}}async initParams(a){this._params=a;let n=[];for(let r in a){let t=a[r];if(t.edit==="private"&&this.opts.hidePrivate)continue;let l=P[t.type];if(!l){this.warn(`unsupported type '${t.type}' for param id: ${r}, skipping...`);continue}let m=[];t.edit==="private"&&m.push("private"),t.update==="reload"&&m.push(`${this.opts.autoReload?"triggers":"requires"} reload`);let p={id:r,kind:l,name:t.name||r,description:t.desc+(m.length?`(${m.join(", ")})`:""),default:t.default,customization_level:t.edit==="private"?"ARTIST":t.edit==="public"?"VIEWER":"CURATOR"};switch(n.push(p),this._cache[r]=t.default,t.type){case"choice":{let e=t,s=p;s.options=e.options.map(i=>Array.isArray(i)?{value:i[0],label:i[1]}:{value:i,label:i});break}case"color":{this._adaptations[r]={id:r,adapt:e=>y(e)?e:e.hex};break}case"range":{let e=t,s=p;s.min=e.min,s.max=e.max,s.step=e.step;break}case"text":{let e=t,s=p;switch(s.minLength=e.minLength,s.maxLength=e.maxLength,e.match instanceof RegExp?e.match.source:e.match){case"^[0-9a-f]+$":case"^[0-9a-fA-F]+$":s.pattern="HEX";break;case"^[a-zA-Z0-9-_=]+$":s.pattern="BASE64";break;case"^[a-zA-Z ]+$":s.pattern="ALPHABETICAL";break;case"^[a-zA-Z0-9_ ]+$":s.pattern="ALPHANUMERIC";break;default:this.warn(`couldn't determine pattern type for text param: ${r}, using 'ALPHANUMERIC'...`),s.pattern="ALPHANUMERIC"}break}case"vector":{n.pop();let e=t,s=e.size,i=e.labels;for(let o=0;o<s;o++){let d={...p};d.id=r+"__"+i[o],d.name=e.name+` (${i[o]})`,d.min=e.min[o],d.max=e.max[o],d.step=e.step[o],e.default&&(d.default=e.default[o]),n.push(d),this._adaptations[d.id]=this.adaptVectorParam(r,o)}break}case"weighted":{let e=t,s=p;s.options=e.options.map(i=>({value:i[1],label:i[2]}));break}case"xy":{n.pop();let e="xy",s=t;for(let i=0;i<2;i++){let o={...p};o.id=r+"__"+e[i],o.name=s.name+` (${e[i]})`,o.min=0,o.max=1,o.step=.001,s.default&&(o.default=s.default[i]),n.push(o),this._adaptations[o.id]=this.adaptVectorParam(r,i)}}}}let c=await $layer.params(...n);for(let[r,t]of Object.entries(this._adaptations)){let l=c[r];l!=null&&(this._cache[t.id]=t.adapt(l))}}setTraits(){}capture(a){$layer.registerCanvas(a)}adaptVectorParam(a,n){return{id:a,adapt:c=>{let r=this._cache[a].slice();return r[n]=c,r}}}warn(a,...n){console.warn(`${this.id}:`,a,...n)}};$genart.setAdapter(new u);})();