tosijs 1.0.3
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/LICENSE +29 -0
- package/README.md +385 -0
- package/dist/bind.d.ts +9 -0
- package/dist/bindings.d.ts +4 -0
- package/dist/blueprint-loader.d.ts +19 -0
- package/dist/by-path.d.ts +8 -0
- package/dist/color.d.ts +46 -0
- package/dist/component.d.ts +37 -0
- package/dist/css-colors.d.ts +3 -0
- package/dist/css-system-color.d.ts +1 -0
- package/dist/css-types.d.ts +250 -0
- package/dist/css.d.ts +22 -0
- package/dist/deep-clone.d.ts +5 -0
- package/dist/dom.d.ts +9 -0
- package/dist/elements.d.ts +142 -0
- package/dist/get-css-var.d.ts +1 -0
- package/dist/hot-reload.d.ts +2 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +33 -0
- package/dist/list-binding.d.ts +37 -0
- package/dist/main.js +13 -0
- package/dist/main.js.map +33 -0
- package/dist/make-component.d.ts +39 -0
- package/dist/make-error.d.ts +1 -0
- package/dist/metadata.d.ts +32 -0
- package/dist/module.js +13 -0
- package/dist/module.js.map +33 -0
- package/dist/more-math.d.ts +10 -0
- package/dist/object-property-list.d.ts +8 -0
- package/dist/path-listener.d.ts +13 -0
- package/dist/settings.d.ts +4 -0
- package/dist/string-case.d.ts +2 -0
- package/dist/throttle.d.ts +4 -0
- package/dist/version.d.ts +1 -0
- package/dist/xin-proxy.d.ts +4 -0
- package/dist/xin-types.d.ts +111 -0
- package/dist/xin.d.ts +16 -0
- package/package.json +71 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { XinObject, XinBinding, XinEventHandler, Unboxed } from './xin-types';
|
|
2
|
+
export declare const BOUND_CLASS = "-xin-data";
|
|
3
|
+
export declare const BOUND_SELECTOR = ".-xin-data";
|
|
4
|
+
export declare const EVENT_CLASS = "-xin-event";
|
|
5
|
+
export declare const EVENT_SELECTOR = ".-xin-event";
|
|
6
|
+
export declare const XIN_PATH = "xinPath";
|
|
7
|
+
export declare const XIN_VALUE = "xinValue";
|
|
8
|
+
export declare const XIN_OBSERVE = "xinObserve";
|
|
9
|
+
export declare const XIN_BIND = "xinBind";
|
|
10
|
+
export declare const XIN_ON = "xinOn";
|
|
11
|
+
export declare const xinPath: (x: any) => string | undefined;
|
|
12
|
+
export declare function xinValue<T>(x: T): Unboxed<T>;
|
|
13
|
+
export interface DataBinding<T extends Element = Element> {
|
|
14
|
+
path: string;
|
|
15
|
+
binding: XinBinding<T>;
|
|
16
|
+
options?: XinObject;
|
|
17
|
+
}
|
|
18
|
+
export type DataBindings = DataBinding[];
|
|
19
|
+
export interface XinEventBindings {
|
|
20
|
+
[eventType: string]: Set<XinEventHandler>;
|
|
21
|
+
}
|
|
22
|
+
export declare const elementToHandlers: WeakMap<Element, XinEventBindings>;
|
|
23
|
+
export declare const elementToBindings: WeakMap<Element, DataBindings>;
|
|
24
|
+
interface ElementMetadata {
|
|
25
|
+
eventBindings?: XinEventBindings;
|
|
26
|
+
dataBindings?: DataBindings;
|
|
27
|
+
}
|
|
28
|
+
export declare const getElementBindings: (element: Element) => ElementMetadata;
|
|
29
|
+
export declare const cloneWithBindings: (element: Node) => Node;
|
|
30
|
+
export declare const elementToItem: WeakMap<Element, XinObject>;
|
|
31
|
+
export declare const getListItem: (element: Element) => any;
|
|
32
|
+
export {};
|
package/dist/module.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
var F={debug:!1,perf:!1};function T(n){if(n==null||typeof n!=="object")return n;if(n instanceof Set)return new Set(n);else if(Array.isArray(n))return n.map(T);let e={};for(let o in n){let t=n[o];if(n!=null&&typeof n==="object")e[o]=T(t);else e[o]=t}return e}var un="-xin-data",v=`.${un}`,pn="-xin-event",yn=`.${pn}`,m="xinPath",O="xinValue",In="xinObserve",Yn="xinBind",_n="xinOn",C=(n)=>{return n&&n[m]||void 0};function x(n){return typeof n==="object"&&n!==null?n[O]||n:n}var L=new WeakMap,E=new WeakMap;var B=(n)=>{let e=n.cloneNode();if(e instanceof Element){let o=E.get(n),t=L.get(n);if(o!=null)E.set(e,T(o));if(t!=null)L.set(e,T(t))}for(let o of Array.from(n instanceof HTMLTemplateElement?n.content.childNodes:n.childNodes))if(o instanceof Element||o instanceof DocumentFragment)e.appendChild(B(o));else e.appendChild(o.cloneNode());return e},q=new WeakMap,mn=(n)=>{let e=document.body.parentElement;while(n.parentElement!=null&&n.parentElement!==e){let o=q.get(n);if(o!=null)return o;n=n.parentElement}return!1};var Vn=Symbol("observer should be removed"),N=[],nn=[],xn=!1,hn,bn;class qn{description;test;callback;constructor(n,e){let o=typeof e==="string"?`"${e}"`:`function ${e.name}`,t;if(typeof n==="string")this.test=(i)=>typeof i==="string"&&i!==""&&(n.startsWith(i)||i.startsWith(n)),t=`test = "${n}"`;else if(n instanceof RegExp)this.test=n.test.bind(n),t=`test = "${n.toString()}"`;else if(n instanceof Function)this.test=n,t=`test = function ${n.name}`;else throw new Error("expect listener test to be a string, RegExp, or test function");if(this.description=`${t}, ${o}`,typeof e==="function")this.callback=e;else throw new Error("expect callback to be a path or function");N.push(this)}}var Jn=async()=>{if(hn===void 0)return;await hn},be=()=>{if(F.perf)console.time("xin async update");let n=Array.from(nn);for(let e of n)N.filter((o)=>{let t;try{t=o.test(e)}catch(i){throw new Error(`Listener ${o.description} threw "${i}" at "${e}"`)}if(t===Vn)return J(o),!1;return t}).forEach((o)=>{let t;try{t=o.callback(e)}catch(i){console.error(`Listener ${o.description} threw "${i}" handling "${e}"`)}if(t===Vn)J(o)});if(nn.splice(0),xn=!1,typeof bn==="function")bn();if(F.perf)console.timeEnd("xin async update")},j=(n)=>{let e=typeof n==="string"?n:C(n);if(e===void 0)throw console.error("touch was called on an invalid target",n),new Error("touch was called on an invalid target");if(xn===!1)hn=new Promise((o)=>{bn=o}),xn=setTimeout(be);if(nn.find((o)=>e.startsWith(o))==null)nn.push(e)},gn=(n,e)=>{return new qn(n,e)},J=(n)=>{let e=N.indexOf(n);if(e>-1)N.splice(e,1);else throw new Error("unobserve failed, listener not found")};var ge=(n)=>{try{return JSON.stringify(n)}catch(e){return"{has circular references}"}},wn=(...n)=>new Error(n.map(ge).join(" "));var we=()=>new Date(parseInt("1000000000",36)+Date.now()).valueOf().toString(36).slice(1),Xe=0,Te=()=>(parseInt("10000",36)+ ++Xe).toString(36).slice(-5),Ee=()=>we()+Te(),Xn={},Zn={};function Qn(n){if(n==="")return[];if(Array.isArray(n))return n;else{let e=[];while(n.length>0){let o=n.search(/\[[^\]]+\]/);if(o===-1){e.push(n.split("."));break}else{let t=n.slice(0,o);if(n=n.slice(o),t!=="")e.push(t.split("."));if(o=n.indexOf("]")+1,e.push(n.slice(1,o-1)),n.slice(o,o+1)===".")o+=1;n=n.slice(o)}}return e}}var S=new WeakMap;function Kn(n,e){if(S.get(n)===void 0)S.set(n,{});if(S.get(n)[e]===void 0)S.get(n)[e]={};let o=S.get(n)[e];if(e==="_auto_")n.forEach((t,i)=>{if(t._auto_===void 0)t._auto_=Ee();o[t._auto_+""]=i});else n.forEach((t,i)=>{o[W(t,e)+""]=i});return o}function Se(n,e){if(S.get(n)===void 0||S.get(n)[e]===void 0)return Kn(n,e);else return S.get(n)[e]}function ke(n,e,o){o=o+"";let t=Se(n,e)[o];if(t===void 0||W(n[t],e)+""!==o)t=Kn(n,e)[o];return t}function ve(n,e,o){if(n[e]===void 0&&o!==void 0)n[e]=o;return n[e]}function Rn(n,e,o,t){let i=e!==""?ke(n,e,o):o;if(t===Xn)return n.splice(i,1),S.delete(n),Symbol("deleted");else if(t===Zn){if(e===""&&n[i]===void 0)n[i]={}}else if(t!==void 0)if(i!==void 0)n[i]=t;else if(e!==""&&W(t,e)+""===o+"")n.push(t),i=n.length-1;else throw new Error(`byIdPath insert failed at [${e}=${o}]`);return n[i]}function Un(n){if(!Array.isArray(n))throw wn("setByPath failed: expected array, found",n)}function Gn(n){if(n==null||!(n instanceof Object))throw wn("setByPath failed: expected Object, found",n)}function W(n,e){let o=Qn(e),t=n,i,s,r,c;for(i=0,s=o.length;t!==void 0&&i<s;i++){let l=o[i];if(Array.isArray(l))for(r=0,c=l.length;t!==void 0&&r<c;r++){let f=l[r];t=t[f]}else if(t.length===0){if(t=t[Number(l.slice(1))],l[0]!=="=")return}else if(l.includes("=")){let[f,...w]=l.split("=");t=Rn(t,f,w.join("="))}else r=parseInt(l,10),t=t[r]}return t}function Nn(n,e,o){let t=n,i=Qn(e);while(t!=null&&i.length>0){let s=i.shift();if(typeof s==="string"){let r=s.indexOf("=");if(r>-1){if(r===0)Gn(t);else Un(t);let c=s.slice(0,r),l=s.slice(r+1);if(t=Rn(t,c,l,i.length>0?Zn:o),i.length===0)return!0}else{Un(t);let c=parseInt(s,10);if(i.length>0)t=t[c];else{if(o!==Xn){if(t[c]===o)return!1;t[c]=o}else t.splice(c,1);return!0}}}else if(Array.isArray(s)&&s.length>0){Gn(t);while(s.length>0){let r=s.shift();if(s.length>0||i.length>0)t=ve(t,r,s.length>0?{}:[]);else{if(o!==Xn){if(t[r]===o)return!1;t[r]=o}else{if(!Object.prototype.hasOwnProperty.call(t,r))return!1;delete t[r]}return!0}}}else throw new Error(`setByPath failed, bad path ${e}`)}throw new Error(`setByPath(${n}, ${e}, ${o}) failed`)}var Ce=["sort","splice","copyWithin","fill","pop","push","reverse","shift","unshift"],En={},Me=!0,De=/^\.?([^.[\](),])+(\.[^.[\](),]+|\[\d+\]|\[[^=[\](),]*=[^[\]()]+\])*$/,Fe=(n)=>De.test(n),H=(n="",e="")=>{if(n==="")return e;else if(e.match(/^\d+$/)!==null||e.includes("="))return`${n}[${e}]`;else return`${n}.${e}`},Le={string(n){return new String(n)},boolean(n){return new Boolean(n)},bigint(n){return n},symbol(n){return n},number(n){return new Number(n)}};function Tn(n,e){let o=typeof n;if(n===void 0||o==="object"||o==="function")return n;else return new Proxy(Le[typeof n](n),I(e,!0))}var I=(n,e)=>({get(o,t){switch(t){case m:return n;case O:return o.valueOf?o.valueOf():o;case In:return(r)=>{let c=gn(n,r);return()=>J(c)};case _n:return(r,c)=>z(r,c,x(o));case Yn:return(r,c,l)=>{h(r,n,c,l)}}if(typeof t==="symbol")return o[t];let i=t,s=i.match(/^([^.[]+)\.(.+)$/)??i.match(/^([^\]]+)(\[.+)/)??i.match(/^(\[[^\]]+\])\.(.+)$/)??i.match(/^(\[[^\]]+\])\[(.+)$/);if(s!==null){let[,r,c]=s,l=H(n,r),f=W(o,r);return f!==null&&typeof f==="object"?new Proxy(f,I(l,e))[c]:f}if(i.startsWith("[")&&i.endsWith("]"))i=i.substring(1,i.length-1);if(!Array.isArray(o)&&o[i]!==void 0||Array.isArray(o)&&i.includes("=")){let r;if(i.includes("=")){let[c,l]=i.split("=");r=o.find((f)=>`${W(f,c)}`===l)}else r=o[i];if(r instanceof Object){let c=H(n,i);return new Proxy(r instanceof Function?r.bind(o):r,I(c,e))}else return e?Tn(r,H(n,i)):r}else if(Array.isArray(o)){let r=o[i];return typeof r==="function"?(...c)=>{let l=r.apply(o,c);if(Ce.includes(i))j(n);return l}:typeof r==="object"?new Proxy(r,I(H(n,i),e)):e?Tn(r,H(n,i)):r}else return e?Tn(o[i],H(n,i)):o[i]},set(o,t,i){i=x(i);let s=t!==O?H(n,t):n;if(Me&&!Fe(s))throw new Error(`setting invalid path ${s}`);if(x(d[s])!==i&&Nn(En,s,i))j(s);return!0}}),U=(n,e)=>{let o=typeof e==="function"?e:d[e];if(typeof o!=="function")throw new Error(`observe expects a function or path to a function, ${e} is neither`);return gn(n,o)},d=new Proxy(En,I("",!1)),Y=new Proxy(En,I("",!0));var Sn=(n,e)=>{let o=new Event(e);n.dispatchEvent(o)},ee=(n)=>{if(n instanceof HTMLInputElement)return n.type;else if(n instanceof HTMLSelectElement&&n.hasAttribute("multiple"))return"multi-select";else return"other"},oe=(n,e)=>{switch(ee(n)){case"radio":n.checked=n.value===e;break;case"checkbox":n.checked=!!e;break;case"date":n.valueAsDate=new Date(e);break;case"multi-select":for(let o of Array.from(n.querySelectorAll("option")))o.selected=e[o.value];break;default:n.value=e}},te=(n)=>{switch(ee(n)){case"radio":{let e=n.parentElement?.querySelector(`[name="${n.name}"]:checked`);return e!=null?e.value:null}case"checkbox":return n.checked;case"date":return n.valueAsDate?.toISOString();case"multi-select":return Array.from(n.querySelectorAll("option")).reduce((e,o)=>{return e[o.value]=o.selected,e},{});default:return n.value}},{ResizeObserver:ne}=globalThis,G=ne!=null?new ne((n)=>{for(let e of n){let o=e.target;Sn(o,"resize")}}):{observe(){},unobserve(){}},kn=(n,e,o=!0)=>{if(n!=null&&e!=null)if(typeof e==="string")n.textContent=e;else if(Array.isArray(e))e.forEach((t)=>{n.append(t instanceof Node&&o?B(t):t)});else if(e instanceof Node)n.append(o?B(e):e);else throw new Error("expect text content or document node")};var vn=(n,e=250)=>{let o;return(...t)=>{if(o!==void 0)clearTimeout(o);o=setTimeout(()=>{n(...t)},e)}},en=(n,e=250)=>{let o,t=Date.now()-e,i=!1;return(...s)=>{if(clearTimeout(o),o=setTimeout(async()=>{n(...s),t=Date.now()},e),!i&&Date.now()-t>=e){i=!0;try{n(...s),t=Date.now()}finally{i=!1}}}};var on=Symbol("list-binding"),Oe=16,Be=100;function ie(n,e){let o=Array.from(n.querySelectorAll(v));if(n.matches(v))o.unshift(n);for(let t of o){let i=E.get(t);for(let s of i){if(s.path.startsWith("^"))s.path=`${e}${s.path.substring(1)}`;if(s.binding.toDOM!=null)s.binding.toDOM(t,d[s.path])}}}class re{boundElement;listTop;listBottom;template;options;itemToElement;_array=[];_update;_previousSlice;static filterBoundObservers=new WeakMap;constructor(n,e,o={}){if(this.boundElement=n,this.itemToElement=new WeakMap,n.children.length!==1)throw new Error("ListBinding expects an element with exactly one child element");if(n.children[0]instanceof HTMLTemplateElement){let t=n.children[0];if(t.content.children.length!==1)throw new Error("ListBinding expects a template with exactly one child element");this.template=B(t.content.children[0])}else this.template=n.children[0],this.template.remove();if(this.listTop=document.createElement("div"),this.listBottom=document.createElement("div"),this.boundElement.append(this.listTop),this.boundElement.append(this.listBottom),this.options=o,o.virtual!=null)G.observe(this.boundElement),this._update=en(()=>{this.update(this._array,!0)},Oe),this.boundElement.addEventListener("scroll",this._update),this.boundElement.addEventListener("resize",this._update)}visibleSlice(){let{virtual:n,hiddenProp:e,visibleProp:o}=this.options,t=this._array;if(e!==void 0)t=t.filter((l)=>l[e]!==!0);if(o!==void 0)t=t.filter((l)=>l[o]===!0);if(this.options.filter&&this.needle!==void 0)t=this.options.filter(t,this.needle);let i=0,s=t.length-1,r=0,c=0;if(n!=null&&this.boundElement instanceof HTMLElement){let l=this.boundElement.offsetWidth,f=this.boundElement.offsetHeight,w=n.width!=null?Math.max(1,Math.floor(l/n.width)):1,A=Math.ceil(f/n.height)+1,P=Math.ceil(t.length/w),K=w*A,D=Math.floor(this.boundElement.scrollTop/n.height);if(D>P-A+1)D=Math.max(0,P-A+1);i=D*w,s=i+K-1,r=D*n.height,c=Math.max(P*n.height-f-r,0)}return{items:t,firstItem:i,lastItem:s,topBuffer:r,bottomBuffer:c}}needle;filter=en((n)=>{if(this.needle!==n)this.needle=n,this.update(this._array)},Be);update(n,e){if(n==null)n=[];this._array=n;let{hiddenProp:o,visibleProp:t}=this.options,i=C(n),s=this.visibleSlice();this.boundElement.classList.toggle("-xin-empty-list",s.items.length===0);let r=this._previousSlice,{firstItem:c,lastItem:l,topBuffer:f,bottomBuffer:w}=s;if(o===void 0&&t===void 0&&e===!0&&r!=null&&c===r.firstItem&&l===r.lastItem)return;this._previousSlice=s;let A=0,P=0,K=0;for(let u of Array.from(this.boundElement.children)){if(u===this.listTop||u===this.listBottom)continue;let X=q.get(u);if(X==null)u.remove();else{let y=s.items.indexOf(X);if(y<c||y>l)u.remove(),this.itemToElement.delete(X),q.delete(u),A++}}this.listTop.style.height=String(f)+"px",this.listBottom.style.height=String(w)+"px";let D=[],{idPath:dn}=this.options;for(let u=c;u<=l;u++){let X=s.items[u];if(X===void 0)continue;let y=this.itemToElement.get(x(X));if(y==null){if(K++,y=B(this.template),typeof X==="object")this.itemToElement.set(x(X),y),q.set(y,x(X));if(this.boundElement.insertBefore(y,this.listBottom),dn!=null){let fn=X[dn],he=`${i}[${dn}=${fn}]`;ie(y,he)}else{let fn=`${i}[${u}]`;ie(y,fn)}}D.push(y)}let R=null;for(let u of D){if(u.previousElementSibling!==R)if(P++,R?.nextElementSibling!=null)this.boundElement.insertBefore(u,R.nextElementSibling);else this.boundElement.insertBefore(u,this.listBottom);R=u}if(F.perf)console.log(i,"updated",{removed:A,created:K,moved:P})}}var se=(n,e,o)=>{let t=n[on];if(t===void 0)t=new re(n,e,o),n[on]=t;return t};var{document:Z,MutationObserver:ce}=globalThis,Cn=(n,e)=>{let o=E.get(n);if(o==null)return;for(let t of o){let{binding:i,options:s}=t,{path:r}=t,{toDOM:c}=i;if(c!=null){if(r.startsWith("^")){let l=mn(n);if(l!=null&&l[m]!=null)r=t.path=`${l[m]}${r.substring(1)}`;else throw console.error(`Cannot resolve relative binding ${r}`,n,"is not part of a list"),new Error(`Cannot resolve relative binding ${r}`)}if(e==null||r.startsWith(e))c(n,d[r],s)}}};if(ce!=null)new ce((e)=>{e.forEach((o)=>{Array.from(o.addedNodes).forEach((t)=>{if(t instanceof Element)Array.from(t.querySelectorAll(v)).forEach((i)=>Cn(i))})})}).observe(Z.body,{subtree:!0,childList:!0});U(()=>!0,(n)=>{let e=Array.from(Z.querySelectorAll(v));for(let o of e)Cn(o,n)});var le=(n)=>{let e=n.target.closest(v);while(e!=null){let o=E.get(e);for(let t of o){let{binding:i,path:s}=t,{fromDOM:r}=i;if(r!=null){let c;try{c=r(e,t.options)}catch(l){throw console.error("Cannot get value from",e,"via",t),new Error("Cannot obtain value fromDOM")}if(c!=null){let l=d[s];if(l==null)d[s]=c;else{let f=l[m]!=null?l[O]:l,w=c[m]!=null?c[O]:c;if(f!==w)d[s]=w}}}}e=e.parentElement.closest(v)}};if(globalThis.document!=null)Z.body.addEventListener("change",le,!0),Z.body.addEventListener("input",le,!0);function h(n,e,o,t){if(n instanceof DocumentFragment)throw new Error("bind cannot bind to a DocumentFragment");let i;if(typeof e==="object"&&e[m]===void 0&&t===void 0){let{value:c}=e;i=typeof c==="string"?c:c[m],t=e,delete t.value}else i=typeof e==="string"?e:e[m];if(i==null)throw new Error("bind requires a path or object with xin Proxy");let{toDOM:s}=o;n.classList?.add(un);let r=E.get(n);if(r==null)r=[],E.set(n,r);if(r.push({path:i,binding:o,options:t}),s!=null&&!i.startsWith("^"))j(i);if(t?.filter&&t?.needle)h(n,t.needle,{toDOM(c,l){console.log({needle:l}),c[on]?.filter(l)}});return n}var ae=new Set,He=(n)=>{let e=n?.target.closest(yn),o=!1,t=new Proxy(n,{get(s,r){if(r==="stopPropagation")return()=>{n.stopPropagation(),o=!0};else{let c=s[r];return typeof c==="function"?c.bind(s):c}}}),i=new Set;while(!o&&e!=null){let r=L.get(e)[n.type]||i;for(let c of r){if(typeof c==="function")c(t);else{let l=d[c];if(typeof l==="function")l(t);else throw new Error(`no event handler found at path ${c}`)}if(o)continue}e=e.parentElement!=null?e.parentElement.closest(yn):null}};function z(n,e,o){let t=L.get(n);if(n.classList.add(pn),t==null)t={},L.set(n,t);if(!t[e])t[e]=new Set;if(t[e].add(o),!ae.has(e))ae.add(e),Z.body.addEventListener(e,He,!0);return()=>{t[e].delete(o)}}var tn={value:{toDOM:oe,fromDOM(n){return te(n)}},text:{toDOM(n,e){n.textContent=e}},enabled:{toDOM(n,e){n.disabled=!e}},disabled:{toDOM(n,e){n.disabled=Boolean(e)}},list:{toDOM(n,e,o){se(n,e,o).update(e)}}};var ze=180/Math.PI,$e=Math.PI/180;function b(n,e,o){return o<n?NaN:e<n?n:e>o?o:e}function k(n,e,o,t=!0){if(t)o=b(0,o,1);return o*(e-n)+n}var Ae={RADIANS_TO_DEGREES:ze,DEGREES_TO_RADIANS:$e,clamp:b,lerp:k};function Mn(n,e=document.body){let o=getComputedStyle(e);if(n.endsWith(")")&&n.startsWith("var("))n=n.slice(4,-1);return o.getPropertyValue(n).trim()}var Pe=(n,e,o)=>{return(0.299*n+0.587*e+0.114*o)/255},$=(n)=>("00"+Math.round(Number(n)).toString(16)).slice(-2);class de{h;s;l;constructor(n,e,o){n/=255,e/=255,o/=255;let t=Math.max(n,e,o),i=t-Math.min(n,e,o),s=i!==0?t===n?(e-o)/i:t===e?2+(o-n)/i:4+(n-e)/i:0;this.h=60*s<0?60*s+360:60*s,this.s=i!==0?t<=0.5?i/(2*t-i):i/(2-(2*t-i)):0,this.l=(2*t-i)/2}}var _=globalThis.document!==void 0?globalThis.document.createElement("span"):void 0;class a{r;g;b;a;static fromVar(n,e=document.body){return a.fromCss(Mn(n,e))}static fromCss(n){let e=n;if(_ instanceof HTMLSpanElement)_.style.color="black",_.style.color=n,document.body.appendChild(_),e=getComputedStyle(_).color,_.remove();let[o,t,i,s]=e.match(/[\d.]+/g),r=e.startsWith("color(srgb")?255:1;return new a(Number(o)*r,Number(t)*r,Number(i)*r,s==null?1:Number(s))}static fromHsl(n,e,o,t=1){return a.fromCss(`hsl(${n.toFixed(0)}deg ${(e*100).toFixed(0)}% ${(o*100).toFixed(0)}% / ${(t*100).toFixed(0)}%)`)}static black=new a(0,0,0);static white=new a(255,255,255);constructor(n,e,o,t=1){this.r=b(0,n,255),this.g=b(0,e,255),this.b=b(0,o,255),this.a=t!==void 0?b(0,t,1):t=1}get inverse(){return new a(255-this.r,255-this.g,255-this.b,this.a)}get inverseLuminance(){let{h:n,s:e,l:o}=this._hsl;return a.fromHsl(n,e,1-o,this.a)}contrasting(n=1){let{h:e,s:o,l:t}=this._hsl;return this.blend(this.brightness>0.5?a.black:a.white,n)}get rgb(){let{r:n,g:e,b:o}=this;return`rgb(${n.toFixed(0)},${e.toFixed(0)},${o.toFixed(0)})`}get rgba(){let{r:n,g:e,b:o,a:t}=this;return`rgba(${n.toFixed(0)},${e.toFixed(0)},${o.toFixed(0)},${t.toFixed(2)})`}get RGBA(){return[this.r/255,this.g/255,this.b/255,this.a]}get ARGB(){return[this.a,this.r/255,this.g/255,this.b/255]}hslCached;get _hsl(){if(this.hslCached==null)this.hslCached=new de(this.r,this.g,this.b);return this.hslCached}get hsl(){let{h:n,s:e,l:o}=this._hsl;return`hsl(${n.toFixed(0)}deg ${(e*100).toFixed(0)}% ${(o*100).toFixed(0)}%)`}get hsla(){let{h:n,s:e,l:o}=this._hsl;return`hsl(${n.toFixed(0)}deg ${(e*100).toFixed(0)}% ${(o*100).toFixed(0)}% / ${(this.a*100).toFixed(0)}%)`}get mono(){let n=this.brightness*255;return new a(n,n,n)}get brightness(){return Pe(this.r,this.g,this.b)}get html(){return this.toString()}toString(){return this.a===1?"#"+$(this.r)+$(this.g)+$(this.b):"#"+$(this.r)+$(this.g)+$(this.b)+$(Math.floor(255*this.a))}brighten(n){let{h:e,s:o,l:t}=this._hsl,i=b(0,t+n*(1-t),1);return a.fromHsl(e,o,i,this.a)}darken(n){let{h:e,s:o,l:t}=this._hsl,i=b(0,t*(1-n),1);return a.fromHsl(e,o,i,this.a)}saturate(n){let{h:e,s:o,l:t}=this._hsl,i=b(0,o+n*(1-o),1);return a.fromHsl(e,i,t,this.a)}desaturate(n){let{h:e,s:o,l:t}=this._hsl,i=b(0,o*(1-n),1);return a.fromHsl(e,i,t,this.a)}rotate(n){let{h:e,s:o,l:t}=this._hsl,i=(e+360+n)%360;return a.fromHsl(i,o,t,this.a)}opacity(n){let{h:e,s:o,l:t}=this._hsl;return a.fromHsl(e,o,t,n)}swatch(){return console.log(`%c %c ${this.html}, ${this.rgba}`,`background-color: ${this.html}`,"background-color: transparent"),this}blend(n,e){return new a(k(this.r,n.r,e),k(this.g,n.g,e),k(this.b,n.b,e),k(this.a,n.a,e))}static blendHue(n,e,o){let t=(e-n+720)%360;if(t<180)return n+o*t;else return n-(360-t)*o}mix(n,e){let o=this._hsl,t=n._hsl;return a.fromHsl(o.s===0?t.h:t.s===0?o.h:a.blendHue(o.h,t.h,e),k(o.s,t.s,e),k(o.l,t.l,e),k(this.a,n.a,e))}colorMix(n,e){return a.fromCss(`color-mix(in hsl, ${this.html}, ${n.html} ${(e*100).toFixed(0)}%)`)}}function g(n){return n.replace(/[A-Z]/g,(e)=>{return`-${e.toLocaleLowerCase()}`})}function fe(n){return n.replace(/-([a-z])/g,(e,o)=>{return o.toLocaleUpperCase()})}var je="http://www.w3.org/1998/Math/MathML",We="http://www.w3.org/2000/svg",rn={},ue=(n,e,o)=>{let t=Bn(g(e),o);if(t.prop.startsWith("--"))n.style.setProperty(t.prop,t.value);else n.style[e]=t.value},Ie=(n)=>{return{toDOM(e,o){ue(e,n,o)}}},pe=(n,e,o)=>{if(e==="style")if(typeof o==="object")for(let t of Object.keys(o))if(C(o[t]))h(n,o[t],Ie(t));else ue(n,t,o[t]);else n.setAttribute("style",o);else if(n[e]!==void 0){let{MathMLElement:t}=globalThis;if(n instanceof SVGElement||t!==void 0&&n instanceof t)n.setAttribute(e,o);else n[e]=o}else{let t=g(e);if(t==="class")o.split(" ").forEach((i)=>{n.classList.add(i)});else if(n[t]!==void 0)n[t]=o;else if(typeof o==="boolean")o?n.setAttribute(t,""):n.removeAttribute(t);else n.setAttribute(t,o)}},Ye=(n)=>{return{toDOM(e,o){pe(e,n,o)}}},_e=(n,e,o)=>{if(e==="apply")o(n);else if(e.match(/^on[A-Z]/)!=null){let t=e.substring(2).toLowerCase();z(n,t,o)}else if(e==="bind")if((typeof o.binding==="string"?tn[o.binding]:o.binding)!==void 0&&o.value!==void 0)h(n,o.value,o.binding instanceof Function?{toDOM:o.binding}:o.binding);else throw new Error("bad binding");else if(e.match(/^bind[A-Z]/)!=null){let t=e.substring(4,5).toLowerCase()+e.substring(5),i=tn[t];if(i!==void 0)h(n,o,i);else throw new Error(`${e} is not allowed, bindings.${t} is not defined`)}else if(C(o))h(n,o,Ye(e));else pe(n,e,o)},Dn=(n,...e)=>{if(rn[n]===void 0){let[i,s]=n.split("|");if(s===void 0)rn[n]=globalThis.document.createElement(i);else rn[n]=globalThis.document.createElementNS(s,i)}let o=rn[n].cloneNode(),t={};for(let i of e)if(i instanceof Element||i instanceof DocumentFragment||typeof i==="string"||typeof i==="number")if(o instanceof HTMLTemplateElement)o.content.append(i);else o.append(i);else if(i.xinPath)o.append(p.span({bindText:i}));else Object.assign(t,i);for(let i of Object.keys(t)){let s=t[i];_e(o,i,s)}return o},Fn=(...n)=>{let e=globalThis.document.createDocumentFragment();for(let o of n)e.append(o);return e},p=new Proxy({fragment:Fn},{get(n,e){if(e=e.replace(/[A-Z]/g,(o)=>`-${o.toLocaleLowerCase()}`),n[e]===void 0)n[e]=(...o)=>Dn(e,...o);return n[e]},set(){throw new Error("You may not add new properties to elements")}}),Ln=new Proxy({fragment:Fn},{get(n,e){if(n[e]===void 0)n[e]=(...o)=>Dn(`${e}|${We}`,...o);return n[e]},set(){throw new Error("You may not add new properties to elements")}}),On=new Proxy({fragment:Fn},{get(n,e){if(n[e]===void 0)n[e]=(...o)=>Dn(`${e}|${je}`,...o);return n[e]},set(){throw new Error("You may not add new properties to elements")}});function Ve(n,e){let o=p.style(V(e));o.id=n,document.head.append(o)}var qe=["animation-iteration-count","flex","flex-base","flex-grow","flex-shrink","opacity","order","tab-size","widows","z-index","zoom"],Bn=(n,e)=>{if(typeof e==="number"&&!qe.includes(n))e=`${e}px`;if(n.startsWith("_"))if(n.startsWith("__"))n="--"+n.substring(2),e=`var(${n}-default, ${e})`;else n="--"+n.substring(1);return{prop:n,value:String(e)}},Je=(n,e,o)=>{if(o===void 0)return"";if(o instanceof a)o=o.html;let t=Bn(e,o);return`${n} ${t.prop}: ${t.value};`},ye=(n,e,o="")=>{let t=g(n);if(typeof e==="object"&&!(e instanceof a)){let i=Object.keys(e).map((s)=>ye(s,e[s],`${o} `)).join(`
|
|
2
|
+
`);return`${o} ${n} {
|
|
3
|
+
${i}
|
|
4
|
+
${o} }`}else return Je(o,t,e)},V=(n,e="")=>{return Object.keys(n).map((t)=>{let i=n[t];if(typeof i==="string"){if(t==="@import")return`@import url('${i}');`;throw new Error("top-level string value only allowed for `@import`")}let s=Object.keys(i).map((r)=>ye(r,i[r])).join(`
|
|
5
|
+
`);return`${e}${t} {
|
|
6
|
+
${s}
|
|
7
|
+
}`}).join(`
|
|
8
|
+
|
|
9
|
+
`)},Ue=(n)=>{console.warn("initVars is deprecated. Just use _ and __ prefixes instead.");let e={};for(let o of Object.keys(n)){let t=n[o],i=g(o);e[`--${i}`]=typeof t==="number"&&t!==0?String(t)+"px":t}return e},Ge=(n)=>{let e={};for(let o of Object.keys(n)){let t=n[o];if(t instanceof a)e[o]=t.inverseLuminance;else if(typeof t==="string"&&t.match(/^(#[0-9a-fA-F]{3}|rgba?\(|hsla?\()/))e[o]=a.fromCss(t).inverseLuminance}return e},sn=new Proxy({},{get(n,e){if(n[e]===void 0){let o="--"+g(e);n[e]=(t)=>`var(${o}, ${t})`}return n[e]}}),Hn=new Proxy({},{get(n,e){if(e==="default")return sn;if(n[e]==null){e=g(e);let[,o,,t,i,s]=e.match(/^([-\w]*?)((_)?(\d+)(\w?))?$/)||["",e],r=`--${o}`;if(i!=null){let c=t==null?Number(i)/100:-Number(i)/100;switch(s){case"b":{let l=a.fromVar(r);n[e]=c>0?l.brighten(c).rgba:l.darken(-c).rgba}break;case"s":{let l=a.fromVar(r);n[e]=c>0?l.saturate(c).rgba:l.desaturate(-c).rgba}break;case"h":{let l=a.fromVar(r);n[e]=l.rotate(c*100).rgba}break;case"o":{let l=a.fromVar(r);n[e]=l.opacity(c).rgba}break;case"":n[e]=`calc(var(${r}) * ${c})`;break;default:throw console.error(s),new Error(`Unrecognized method ${s} for css variable ${r}`)}}else n[e]=`var(${r})`}return n[e]}});var Ze=0;function zn(){return`custom-elt${(Ze++).toString(36)}`}var me=0,Q={};function Qe(n,e){let o=Q[n],t=V(e).replace(/:host\b/g,n);Q[n]=o?o+`
|
|
10
|
+
`+t:t}function Ke(n){if(Q[n])document.head.append(p.style({id:n+"-component"},Q[n]));delete Q[n]}class M extends HTMLElement{static elements=p;static _elementCreator;instanceId;styleNode;static styleSpec;static styleNode;content=p.slot();isSlotted;static _tagName=null;static get tagName(){return this._tagName}static StyleNode(n){return console.warn("StyleNode is deprecated, just assign static styleSpec: XinStyleSheet to the class directly"),p.style(V(n))}static elementCreator(n={}){if(this._elementCreator==null){let{tag:e,styleSpec:o}=n,t=n!=null?e:null;if(t==null)if(typeof this.name==="string"&&this.name!==""){if(t=g(this.name),t.startsWith("-"))t=t.slice(1)}else t=zn();if(customElements.get(t)!=null)console.warn(`${t} is already defined`);if(t.match(/\w+(-\w+)+/)==null)console.warn(`${t} is not a legal tag for a custom-element`),t=zn();while(customElements.get(t)!==void 0)t=zn();if(this._tagName=t,o!==void 0)Qe(t,o);window.customElements.define(t,this,n),this._elementCreator=p[t]}return this._elementCreator}initAttributes(...n){let e={},o={};new MutationObserver((i)=>{let s=!1;if(i.forEach((r)=>{s=!!(r.attributeName&&n.includes(fe(r.attributeName)))}),s&&this.queueRender!==void 0)this.queueRender(!1)}).observe(this,{attributes:!0}),n.forEach((i)=>{e[i]=T(this[i]);let s=g(i);Object.defineProperty(this,i,{enumerable:!1,get(){if(typeof e[i]==="boolean")return this.hasAttribute(s);else if(this.hasAttribute(s))return typeof e[i]==="number"?parseFloat(this.getAttribute(s)):this.getAttribute(s);else if(o[i]!==void 0)return o[i];else return e[i]},set(r){if(typeof e[i]==="boolean"){if(r!==this[i]){if(r)this.setAttribute(s,"");else this.removeAttribute(s);this.queueRender()}}else if(typeof e[i]==="number"){if(r!==parseFloat(this[i]))this.setAttribute(s,r),this.queueRender()}else if(typeof r==="object"||`${r}`!==`${this[i]}`){if(r===null||r===void 0||typeof r==="object")this.removeAttribute(s);else this.setAttribute(s,r);this.queueRender(),o[i]=r}}})})}initValue(){let n=Object.getOwnPropertyDescriptor(this,"value");if(n===void 0||n.get!==void 0||n.set!==void 0)return;let e=this.hasAttribute("value")?this.getAttribute("value"):T(this.value);delete this.value,Object.defineProperty(this,"value",{enumerable:!1,get(){return e},set(o){if(e!==o)e=o,this.queueRender(!0)}})}_parts;get parts(){let n=this.shadowRoot!=null?this.shadowRoot:this;if(this._parts==null)this._parts=new Proxy({},{get(e,o){if(e[o]===void 0){let t=n.querySelector(`[part="${o}"]`);if(t==null)t=n.querySelector(o);if(t==null)throw new Error(`elementRef "${o}" does not exist!`);t.removeAttribute("data-ref"),e[o]=t}return e[o]}});return this._parts}constructor(){super();me+=1,this.initAttributes("hidden"),this.instanceId=`${this.tagName.toLocaleLowerCase()}-${me}`,this._value=T(this.defaultValue)}connectedCallback(){if(Ke(this.constructor.tagName),this.hydrate(),this.role!=null)this.setAttribute("role",this.role);if(this.onResize!==void 0){if(G.observe(this),this._onResize==null)this._onResize=this.onResize.bind(this);this.addEventListener("resize",this._onResize)}if(this.value!=null&&this.getAttribute("value")!=null)this._value=this.getAttribute("value");this.queueRender()}disconnectedCallback(){G.unobserve(this)}_changeQueued=!1;_renderQueued=!1;queueRender(n=!1){if(!this._hydrated)return;if(!this._changeQueued)this._changeQueued=n;if(!this._renderQueued)this._renderQueued=!0,requestAnimationFrame(()=>{if(this._changeQueued)Sn(this,"change");this._changeQueued=!1,this._renderQueued=!1,this.render()})}_hydrated=!1;hydrate(){if(!this._hydrated){this.initValue();let n=typeof this.content!=="function",e=typeof this.content==="function"?this.content():this.content,{styleSpec:o}=this.constructor,{styleNode:t}=this.constructor;if(o)t=this.constructor.styleNode=p.style(V(o)),delete this.constructor.styleNode;if(this.styleNode)console.warn(this,"styleNode is deprecrated, use static styleNode or statc styleSpec instead"),t=this.styleNode;if(t){let i=this.attachShadow({mode:"open"});i.appendChild(t.cloneNode(!0)),kn(i,e,n)}else if(e!==null){let i=Array.from(this.childNodes);kn(this,e,n),this.isSlotted=this.querySelector("slot,xin-slot")!==void 0;let s=Array.from(this.querySelectorAll("slot"));if(s.length>0)s.forEach($n.replaceSlot);if(i.length>0){let r={"":this};Array.from(this.querySelectorAll("xin-slot")).forEach((c)=>{r[c.name]=c}),i.forEach((c)=>{let l=r[""],f=c instanceof Element?r[c.slot]:l;(f!==void 0?f:l).append(c)})}}this._hydrated=!0}}render(){}}class $n extends M{name="";content=null;static replaceSlot(n){let e=document.createElement("xin-slot");if(n.name!=="")e.setAttribute("name",n.name);n.replaceWith(e)}constructor(){super();this.initAttributes("name")}}var at=$n.elementCreator({tag:"xin-slot"});var Re=(n=()=>!0)=>{let e=localStorage.getItem("xin-state");if(e!=null){let t=JSON.parse(e);for(let i of Object.keys(t).filter(n))if(d[i]!==void 0)Object.assign(d[i],t[i]);else d[i]=t[i]}let o=vn(()=>{let t={},i=x(d);for(let s of Object.keys(i).filter(n))t[s]=i[s];localStorage.setItem("xin-state",JSON.stringify(t)),console.log("xin state saved to localStorage")},500);U(n,o)};var An="1.0.3";function xe(n){return Object.assign(Y,n),Y}function cn(n){return console.warn("boxedProxy is deprecated, please use tosi() instead"),xe(n)}function Pn(n,e=!1){if(e)return console.warn("xinProxy(..., true) is deprecated; use tosi(...) instead"),cn(n);return Object.keys(n).forEach((o)=>{d[o]=n[o]}),d}var Ne={};async function ln(n,e){let{type:o,styleSpec:t}=await e(n,{Color:a,Component:M,elements:p,svgElements:Ln,mathML:On,varDefault:sn,vars:Hn,xin:d,boxed:Y,xinProxy:Pn,boxedProxy:cn,makeComponent:ln,bind:h,on:z,version:An}),i={type:o,creator:o.elementCreator({tag:n,styleSpec:t})};return Ne[n]=i,i}var jn={},no=(n)=>import(n);class an extends M{tag="anon-elt";src="";property="default";loaded;blueprintLoaded=(n)=>{};async packaged(){let{tag:n,src:e,property:o}=this,t=`${n}.${o}:${e}`;if(!this.loaded){if(jn[t]===void 0)jn[t]=no(e).then((i)=>{let s=i[o];return ln(n,s)});else console.log(`using cached ${n}`);this.loaded=await jn[t],this.blueprintLoaded(this.loaded)}return this.loaded}constructor(){super();this.initAttributes("tag","src","property")}}var eo=an.elementCreator({tag:"xin-blueprint",styleSpec:{":host":{display:"none"}}});class Wn extends M{allLoaded=()=>{};constructor(){super()}async load(){let e=Array.from(this.querySelectorAll(an.tagName)).filter((o)=>o.src).map((o)=>o.packaged());await Promise.all(e),this.allLoaded()}connectedCallback(){super.connectedCallback(),this.load()}}var oo=Wn.elementCreator({tag:"xin-loader",styleSpec:{":host":{display:"none"}}});export{x as xinValue,Pn as xinProxy,C as xinPath,d as xin,An as version,Hn as vars,sn as varDefault,Jn as updates,J as unobserve,Cn as touchElement,j as touch,xe as tosi,en as throttle,Ln as svgElements,F as settings,z as on,U as observe,On as mathML,ln as makeComponent,Ge as invertLuminance,Ue as initVars,Re as hotReload,mn as getListItem,Mn as getCssVar,p as elements,vn as debounce,V as css,cn as boxedProxy,Y as boxed,oo as blueprintLoader,eo as blueprint,tn as bindings,h as bind,Ve as StyleSheet,Ae as MoreMath,M as Component,a as Color,Wn as BlueprintLoader,an as Blueprint};
|
|
11
|
+
|
|
12
|
+
//# debugId=2B8E07DD3725993064756E2164756E21
|
|
13
|
+
//# sourceMappingURL=module.js.map
|