@domphy/theme 0.1.13 → 0.1.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.
@@ -1,6 +1,6 @@
1
- "use strict";var Domphy=(()=>{var B=Object.defineProperty;var ue=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var me=Object.prototype.hasOwnProperty;var I=(e,t)=>{for(var s in t)B(e,s,{get:t[s],enumerable:!0})},ce=(e,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of de(t))!me.call(e,r)&&r!==s&&B(e,r,{get:()=>t[r],enumerable:!(i=ue(t,r))||i.enumerable});return e};var pe=e=>ce(B({},"__esModule",{value:!0}),e);var Ke={};I(Ke,{core:()=>L,theme:()=>M});var L={};I(L,{AttributeList:()=>ie,BooleanAttributes:()=>P,CamelAttributes:()=>se,ElementList:()=>ne,ElementNode:()=>m,HtmlTags:()=>D,Notifier:()=>R,PrefixCSS:()=>v,RecordState:()=>Me,State:()=>A,SvgTags:()=>te,VoidTags:()=>Ne,hashString:()=>X,merge:()=>S,r:()=>we,toState:()=>ke});var ye=Object.defineProperty,G=Object.getOwnPropertySymbols,be=Object.prototype.hasOwnProperty,ge=Object.prototype.propertyIsEnumerable,q=(e,t,s)=>t in e?ye(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,K=(e,t)=>{for(var s in t||(t={}))be.call(t,s)&&q(e,s,t[s]);if(G)for(var s of G(t))ge.call(t,s)&&q(e,s,t[s]);return e},ve=["onAbort","onAuxClick","onBeforeMatch","onBeforeToggle","onBlur","onCancel","onCanPlay","onCanPlayThrough","onChange","onClick","onClose","onContextLost","onContextMenu","onContextRestored","onCopy","onCueChange","onCut","onDblClick","onDrag","onDragEnd","onDragEnter","onDragLeave","onDragOver","onDragStart","onDrop","onDurationChange","onEmptied","onEnded","onError","onFocus","onFormData","onInput","onInvalid","onKeyDown","onKeyPress","onKeyUp","onLoad","onLoadedData","onLoadedMetadata","onLoadStart","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onMouseUp","onPaste","onPause","onPlay","onPlaying","onProgress","onRateChange","onReset","onResize","onScroll","onScrollEnd","onSecurityPolicyViolation","onSeeked","onSeeking","onSelect","onSlotChange","onStalled","onSubmit","onSuspend","onTimeUpdate","onToggle","onVolumeChange","onWaiting","onWheel","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel","onPointerDown","onPointerMove","onPointerUp","onPointerCancel","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onGotPointerCapture","onLostPointerCapture","onCompositionStart","onCompositionUpdate","onCompositionEnd","onTransitionEnd","onTransitionStart","onAnimationStart","onAnimationEnd","onAnimationIteration","onFullscreenChange","onFullscreenError","onFocusIn","onFocusOut"],_e=ve.reduce((e,t)=>{let s=t.slice(2).toLowerCase();return e[s]=t,e},{}),D=["a","abbr","address","article","aside","audio","b","base","blockquote","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","i","iframe","img","input","ins","kbd","label","legend","li","main","map","mark","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","slot","small","source","span","strong","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","bdi","bdo","math","menu","search","area","embed","hr","animate","animateMotion","animateTransform","circle","clipPath","cursor","defs","desc","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","foreignObject","g","image","line","linearGradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","prefetch","radialGradient","rect","set","solidColor","stop","svg","switch","symbol","tbreak","text","textPath","tspan","use","view"],b=[],R=class{constructor(){this._listeners={},this._pending=new Map,this._scheduled=!1}_dispose(){if(this._listeners)for(let e in this._listeners)this._listeners[e].clear();this._listeners=null}addListener(e,t){if(!this._listeners)return()=>{};if(typeof e!="string"||typeof t!="function")throw new Error("Event name must be a string, listener must be a function");this._listeners[e]||(this._listeners[e]=new Set);let s=()=>this.removeListener(e,t);return this._listeners[e].has(t)||(this._listeners[e].add(t),typeof t.onSubscribe=="function"&&t.onSubscribe(s)),s}removeListener(e,t){if(!this._listeners)return;let s=this._listeners[e];s&&s.has(t)&&(s.delete(t),s.size===0&&delete this._listeners[e])}notify(e,...t){this._listeners&&this._listeners[e]&&(this._isCircular(e)||(this._pending.set(e,{args:t,chain:[...b]}),this._scheduled||(this._scheduled=!0,queueMicrotask(()=>this._flushAll()))))}_isCircular(e){let t=b.findIndex(([i,r])=>i===this&&r===e);if(t===-1)return!1;let s=[...b.slice(t).map(([,i])=>i),e];return console.error(`[Domphy] Circular dependency detected:
2
- ${s.join(" \u2192 ")}`),!0}_flushAll(){this._scheduled=!1;let e=this._pending;this._pending=new Map;for(let[t,{args:s,chain:i}]of e)b=i,this._flush(t,s);b=[]}_flush(e,t){if(!this._listeners)return;let s=this._listeners[e];if(s){b.push([this,e]);for(let i of[...s])if(s.has(i))try{i(...t)}catch(r){console.error(r)}b.pop()}}},A=class{constructor(e,t=typeof e){this.name=t,this._notifier=new R,this.initialValue=e,this._value=e}get(e){return e&&this.addListener(e),this._value}set(e){this._notifier&&(this._value=e,this._notifier.notify(this.name,e))}reset(){this.set(this.initialValue)}addListener(e){return this._notifier?this._notifier.addListener(this.name,e):()=>{}}removeListener(e){this._notifier&&this._notifier.removeListener(this.name,e)}_dispose(){this._notifier&&(this._notifier._dispose(),this._notifier=null)}};function S(e={},t={}){let s=["animation","transition","boxShadow","textShadow","background","fontFamily"],i=["class","rel","transform","acceptCharset","sandbox"],r=["content"];Object.prototype.toString.call(t)==="[object Object]"&&Object.getPrototypeOf(t)===Object.prototype&&(t=_(t));for(let n in t){let o=t[n];if(!(o==null||o===""))if(typeof o=="object"&&!Array.isArray(o))typeof e[n]=="object"?e[n]=S(e[n],o):e[n]=o;else if(s.includes(n))if(typeof e[n]=="function"||typeof o=="function"){let a=e[n];e[n]=l=>{let h=typeof a=="function"?a(l):a,f=typeof o=="function"?o(l):o;return[h,f].filter(u=>u).join(", ")}}else e[n]=[e[n],o].filter(a=>a).join(", ");else if(r.includes(n))if(typeof e[n]=="function"||typeof o=="function"){let a=e[n];e[n]=l=>{let h=typeof a=="function"?a(l):a,f=typeof o=="function"?o(l):o;return[h,f].filter(u=>u).join("")}}else e[n]=[e[n],o].filter(a=>a).join("");else if(i.includes(n))if(typeof e[n]=="function"||typeof o=="function"){let a=e[n];e[n]=l=>{let h=typeof a=="function"?a(l):a,f=typeof o=="function"?o(l):o;return[h,f].filter(u=>u).join(" ")}}else e[n]=[e[n],o].filter(a=>a).join(" ");else if(n.startsWith("on")){let a=n.replace("on","").toLowerCase();Ee(e,a,o)}else if(n.startsWith("_on")){let a=n.replace("_on","");Se(e,a,o)}else e[n]=o}return e}function X(e=""){let t=2166136261;for(let s=0;s<e.length;s++)t^=e.charCodeAt(s),t=t*16777619>>>0;return String.fromCharCode(97+t%26)+t.toString(16)}function ke(e,t){return e instanceof A?e:new A(e,t)}function we(e){return e}function Se(e,t,s){let i=`_on${t}`,r=e[i];typeof r=="function"?e[i]=(...n)=>{r(...n),s(...n)}:e[i]=s}function Ee(e,t,s){let i=_e[t];if(!i)throw Error(`invalid event name "${t}"`);let r=e[i];typeof r=="function"?e[i]=(n,o)=>{r(n,o),s(n,o)}:e[i]=s}function _(e,t=new WeakMap){if(e===null||typeof e!="object"||typeof e=="function")return e;if(t.has(e))return t.get(e);let s=Object.getPrototypeOf(e);if(s!==Object.prototype&&!Array.isArray(e))return e;let i;if(Array.isArray(e)){i=[],t.set(e,i);for(let r of e)i.push(_(r,t));return i}if(e instanceof Date)return new Date(e);if(e instanceof RegExp)return new RegExp(e);if(e instanceof Map){i=new Map,t.set(e,i);for(let[r,n]of e)i.set(_(r,t),_(n,t));return i}if(e instanceof Set){i=new Set,t.set(e,i);for(let r of e)i.add(_(r,t));return i}if(ArrayBuffer.isView(e))return new e.constructor(e);if(e instanceof ArrayBuffer)return e.slice(0);i=Object.create(s),t.set(e,i);for(let r of Reflect.ownKeys(e))i[r]=_(e[r],t);return i}function Y(e,t=!1){if(Object.prototype.toString.call(e)!=="[object Object]")throw Error(`typeof ${e} is invalid DomphyElement`);let s=Object.keys(e);for(let i=0;i<s.length;i++){let r=s[i],n=e[r];if(i==0&&!D.includes(r)&&!r.includes("-")&&!t)throw Error(`key ${r} is not valid HTML tag name`);if(r=="style"&&n&&Object.prototype.toString.call(n)!=="[object Object]")throw Error('"style" must be a object');if(r=="$")e.$.forEach(o=>Y(o,!0));else{if(r.startsWith("_on")&&typeof n!="function")throw Error(`hook ${r} value "${n}" must be a function `);if(r.startsWith("on")&&typeof n!="function")throw Error(`event ${r} value "${n}" must be a function `);if(r=="_portal"&&typeof n!="function")throw Error('"_portal" must be a function return HTMLElement');if(r=="_context"&&Object.prototype.toString.call(n)!=="[object Object]")throw Error('"_context" must be a object');if(r=="_metadata"&&Object.prototype.toString.call(n)!=="[object Object]")throw Error('"_metadata" must be a object');if(r=="_key"&&typeof n!="string"&&typeof n!="number")throw Error('"_key" must be a string or number')}}return!0}function xe(e){return/<([a-z][\w-]*)(\s[^>]*)?>.*<\/\1>|<([a-z][\w-]*)(\s[^>]*)?\/>/i.test(e.trim())}function J(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Te(e){return Object.keys(e).find(t=>D.includes(t))}function Z(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}function Ce(e){if(e.indexOf("@")===0)return[e];for(var t=[],s=0,i=0,r="",n=0,o=e.length;n<o;n++){var a=e[n];if(a==="(")s+=1;else if(a===")")s-=1;else if(a==="[")i+=1;else if(a==="]")i-=1;else if(a===","&&!s&&!i){t.push(r.trim()),r="";continue}r+=a}return t.push(r.trim()),t}function Q(e){var t;let s=e.querySelector("#domphy-style");return s||(s=document.createElement("style"),s.id="domphy-style",e.appendChild(s)),s.dataset.domphyBase!=="true"&&((t=s.sheet)==null||t.insertRule("[hidden] { display: none !important; }",0),s.dataset.domphyBase="true"),s}var ee=e=>{if(Array.isArray(e.$)){let t={};return e.$.forEach(s=>S(t,ee(s))),delete e.$,S(t,e),t}else return e},Ne=["area","base","br","col","embed","hr","img","input","link","meta","source","track","wbr"],te=["svg","circle","path","rect","ellipse","line","polyline","polygon","g","defs","use","symbol","linearGradient","radialGradient","stop","clipPath","mask","filter","text","tspan","textPath","image","pattern","marker","animate","animateTransform","animateMotion","feGaussianBlur","feComposite","feColorMatrix","feMerge","feMergeNode","feOffset","feFlood","feBlend","foreignObject"],P=["allowFullScreen","async","autoFocus","autoPlay","checked","compact","contentEditable","controls","declare","default","defer","disabled","formNoValidate","hidden","isMap","itemScope","loop","multiple","muted","noHref","noShade","noValidate","open","playsInline","readonly","required","reversed","scoped","selected","sortable","trueSpeed","typeMustMatch","wmode","autoCapitalize","translate","spellCheck","inert","download","noModule","paused","autoPictureInPicture"],v={transform:["webkit","ms"],transition:["webkit","ms"],animation:["webkit"],userSelect:["webkit","ms"],flexDirection:["webkit","ms"],flexWrap:["webkit","ms"],justifyContent:["webkit","ms"],alignItems:["webkit","ms"],alignSelf:["webkit","ms"],order:["webkit","ms"],flexGrow:["webkit","ms"],flexShrink:["webkit","ms"],flexBasis:["webkit","ms"],columns:["webkit"],columnCount:["webkit"],columnGap:["webkit"],columnRule:["webkit"],columnWidth:["webkit"],boxSizing:["webkit"],appearance:["webkit","moz"],filter:["webkit"],backdropFilter:["webkit"],clipPath:["webkit"],mask:["webkit"],maskImage:["webkit"],textSizeAdjust:["webkit","ms"],hyphens:["webkit","ms"],writingMode:["webkit","ms"],gridTemplateColumns:["ms"],gridTemplateRows:["ms"],gridAutoColumns:["ms"],gridAutoRows:["ms"],gridColumn:["ms"],gridRow:["ms"],marginInlineStart:["webkit"],marginInlineEnd:["webkit"],paddingInlineStart:["webkit"],paddingInlineEnd:["webkit"],minInlineSize:["webkit"],maxInlineSize:["webkit"],minBlockSize:["webkit"],maxBlockSize:["webkit"],inlineSize:["webkit"],blockSize:["webkit"],tabSize:["moz"],overscrollBehavior:["webkit","ms"],touchAction:["ms"],resize:["webkit"],printColorAdjust:["webkit"],backgroundClip:["webkit"],boxDecorationBreak:["webkit"],overflowScrolling:["webkit"]},se=["viewBox","preserveAspectRatio","gradientTransform","gradientUnits","spreadMethod","markerStart","markerMid","markerEnd","markerHeight","markerWidth","markerUnits","refX","refY","patternContentUnits","patternTransform","patternUnits","filterUnits","primitiveUnits","kernelUnitLength","clipPathUnits","maskContentUnits","maskUnits"],Re=class{constructor(e,t,s){this._notifier=new R,this.parent=s,this.isBoolean=P.includes(e),se.includes(e)?this.name=e:this.name=Z(e),this.value=void 0,this.set(t)}render(){if(!this.parent||!this.parent.domElement)return;let e=this.parent.domElement,t=["value"];this.isBoolean?this.value===!1||this.value==null?e.removeAttribute(this.name):e.setAttribute(this.name,this.value===!0?"":this.value):this.value==null?e.removeAttribute(this.name):t.includes(this.name)?e[this.name]=this.value:e.setAttribute(this.name,this.value)}set(e){var t,s;let i=this.value;if(e==null)this.value=null;else if(typeof e=="string"&&/<\/?[a-z][\s\S]*>/i.test(e))this.value=J(e);else if(typeof e=="function"){let r=()=>{if(!this.parent||this.parent._disposed)return;let n=this.value;this.value=this.isBoolean?!!e():e(),this.render(),n!==this.value&&this._notifier.notify(this.name,this.value)};r.elementNode=this.parent,r.debug=`class:${(t=this.parent)==null?void 0:t.tagName}_${(s=this.parent)==null?void 0:s.nodeId} attribute:${this.name}`,r.onSubscribe=n=>{this.parent&&this.parent.addHook("BeforeRemove",()=>{n(),r=null})},this.value=this.isBoolean?!!e(r):e(r)}else this.value=this.isBoolean?!!e:e;this.render(),i!==this.value&&this._notifier.notify(this.name,this.value)}addListener(e){let t=e;t.onSubscribe=s=>{var i;return(i=this.parent)==null?void 0:i.addHook("BeforeRemove",s)},this._notifier.addListener(this.name,t)}remove(){this.parent&&this.parent.attributes&&this.parent.attributes.remove(this.name),this._dispose()}_dispose(){this._notifier._dispose(),this.value=null,this.parent=null}generateHTML(){let{name:e,value:t}=this;if(this.isBoolean)return t?`${e}`:"";{let s=Array.isArray(t)?JSON.stringify(t):t;return`${e}="${J(String(s))}"`}}},ie=class{constructor(e){this.items={},this.parent=e}generateHTML(){if(!this.items)return"";let e=Object.values(this.items).map(t=>t.generateHTML()).join(" ");return e?` ${e}`:""}get(e){var t;if(this.items)return(t=this.items[e])==null?void 0:t.value}set(e,t){!this.items||!this.parent||(this.items[e]?this.items[e].set(t):this.items[e]=new Re(e,t,this.parent))}addListener(e,t){this.has(e)&&this.items[e].addListener(t)}has(e){return this.items?Object.prototype.hasOwnProperty.call(this.items,e):!1}remove(e){this.items&&(this.items[e]&&(this.items[e]._dispose(),delete this.items[e]),this.parent&&this.parent.domElement&&this.parent.domElement instanceof Element&&this.parent.domElement.removeAttribute(e))}_dispose(){if(this.items)for(let e in this.items)this.items[e]._dispose();this.items=null,this.parent=null}toggle(e,t){if(!P.includes(e))throw Error(`${e} is not a boolean attribute`);t===!0?this.set(e,!0):t===!1?this.remove(e):this.has(e)?this.remove(e):this.set(e,!0)}addClass(e){if(!e||typeof e!="string")return;let t=(i,r)=>{let n=(i||"").split(" ").filter(o=>o);return!n.includes(r)&&n.push(e),n.join(" ")},s=this.get("class");typeof s=="function"?this.set("class",()=>t(s(),e)):this.set("class",t(s,e))}hasClass(e){return!e||typeof e!="string"?!1:(this.get("class")||"").split(" ").filter(t=>t).includes(e)}toggleClass(e){!e||typeof e!="string"||(this.hasClass(e)?this.removeClass(e):this.addClass(e))}removeClass(e){if(!e||typeof e!="string")return;let t=(this.get("class")||"").split(" ").filter(s=>s).filter(s=>s!==e);t.length>0?this.set("class",t.join(" ")):this.remove("class")}replaceClass(e,t){!e||!t||typeof e!="string"||typeof t!="string"||this.hasClass(e)&&(this.removeClass(e),this.addClass(t))}},Le=class{constructor(e,t){this.type="TextNode",this.parent=t,this.text=e===""?"\u200B":String(e)}_createDOMNode(){let e;if(xe(this.text)){let t=document.createElement("template");t.innerHTML=this.text.trim(),e=t.content.firstChild||document.createTextNode("")}else e=document.createTextNode(this.text);return this.domText=e,e}_dispose(){this.domText=void 0,this.text=""}generateHTML(){return this.text==="\u200B"?"&#8203;":this.text}render(e){let t=this._createDOMNode();e.appendChild(t)}},ne=class{constructor(e){this.items=[],this._nextKey=0,this.owner=e}_createNode(e){return typeof e=="object"&&e!==null?new m(e,this.owner,this._nextKey++):new Le(e==null?"":String(e),this.owner)}_moveDomElement(e,t){if(!this.owner||!this.owner.domElement)return;let s=this.owner.domElement,i=e instanceof m?e.domElement:e.domText;if(i){let r=s.childNodes[t]||null;i!==r&&s.insertBefore(i,r)}}_swapDomElement(e,t){if(!this.owner||!this.owner.domElement)return;let s=this.owner.domElement,i=e instanceof m?e.domElement:e.domText,r=t instanceof m?t.domElement:t.domText;if(!i||!r)return;let n=i.nextSibling,o=r.nextSibling;s.insertBefore(i,o),s.insertBefore(r,n)}update(e,t=!0,s=!1){var i,r,n,o;let a=this.items.slice(),l=new Map;for(let h of a)h instanceof m&&h.key!==null&&h.key!==void 0&&l.set(h.key,h);!s&&this.owner.domElement&&((r=(i=this.owner._hooks)==null?void 0:i.BeforeUpdate)==null||r.call(i,this.owner,e));for(let h=0;h<e.length;h++){let f=e[h],u=typeof f=="object"&&f!==null?f._key:void 0;if(u!==void 0){let d=l.get(u);if(d){l.delete(u);let T=this.items.indexOf(d);if(T!==h&&T>=0){let O=d instanceof m&&!!d._portal;this.move(T,h,O?!1:t,!0)}d.parent=this.owner;continue}}this.insert(f,h,t,!0)}for(;this.items.length>e.length;)this.remove(this.items[this.items.length-1],t,!0);l.forEach(h=>this.remove(h,t,!0)),s||(o=(n=this.owner._hooks)==null?void 0:n.Update)==null||o.call(n,this.owner)}insert(e,t,s=!0,i=!1){var r,n;let o=this.items.length,a=typeof t!="number"||isNaN(t)||t<0||t>o?o:t,l=this._createNode(e);if(this.items.splice(a,0,l),l instanceof m){l._hooks.Insert&&l._hooks.Insert(l);let h=this.owner.domElement;if(s&&h)if(l._portal){let f=l._portal(this.owner.getRoot());f&&l.render(f)}else{let f=l._createDOMNode(),u=(r=h.childNodes[a])!=null?r:null;h.insertBefore(f,u);let d=h.getRootNode(),T=d instanceof ShadowRoot?d:document.head,O=Q(T);l.styles.render(O),l._hooks.Mount&&l._hooks.Mount(l),l.children.items.forEach(w=>{if(w instanceof m&&w._portal){let V=w._portal(w.getRoot());V&&w.render(V)}else w.render(f)})}}else{let h=this.owner.domElement;if(s&&h){let f=l._createDOMNode(),u=(n=h.childNodes[a])!=null?n:null;h.insertBefore(f,u)}}return!i&&this.owner.domElement&&this.owner._hooks.Update&&this.owner._hooks.Update(this.owner),l}remove(e,t=!0,s=!1){let i=this.items.indexOf(e);if(!(i<0)){if(e instanceof m){let r=()=>{var n,o;let a=e.domElement;this.items.splice(i,1),t&&a&&a.remove(),(o=(n=e._hooks)==null?void 0:n.Remove)==null||o.call(n,e),e._dispose()};if(e._hooks.BeforeRemove&&e.domElement){let n=!1,o=()=>{n||(n=!0,r())};e._hooks.BeforeRemove(e,o),n||o()}else r()}else{let r=e.domText;this.items.splice(i,1),t&&r&&r.remove(),e._dispose()}!s&&this.owner.domElement&&this.owner._hooks.Update&&this.owner._hooks.Update(this.owner)}}clear(e=!0,t=!1){if(this.items.length===0)return;let s=this.items.slice();for(let i of s)this.remove(i,e,!0);!t&&this.owner.domElement&&this.owner._hooks.Update&&this.owner._hooks.Update(this.owner)}_dispose(){this.items.forEach(e=>e._dispose()),this.items=[]}swap(e,t,s=!0,i=!1){if(e<0||t<0||e>=this.items.length||t>=this.items.length||e===t)return;let r=this.items[e],n=this.items[t];this.items[e]=n,this.items[t]=r,s&&this._swapDomElement(r,n),!i&&this.owner.domElement&&this.owner._hooks.Update&&this.owner._hooks.Update(this.owner)}move(e,t,s=!0,i=!1){if(e<0||e>=this.items.length||t<0||t>=this.items.length||e===t)return;let r=this.items[e];this.items.splice(e,1),this.items.splice(t,0,r),s&&this._moveDomElement(r,t),!i&&this.owner.domElement&&this.owner._hooks.Update&&this.owner._hooks.Update(this.owner)}generateHTML(){let e="";for(let t of this.items)e+=t.generateHTML();return e}},$e=class{constructor(e,t,s){this.value="",this.name=e,this.cssName=Z(e),this.parentRule=s,this.set(t)}_domUpdate(){if(!this.parentRule)return;let e=this.parentRule.domRule;if(e&&e.style){let t=e.style;t.setProperty(this.cssName,String(this.value)),v[this.name]&&v[this.name].forEach(s=>{t.setProperty(`-${s}-${this.cssName}`,String(this.value))})}}_dispose(){this.value="",this.parentRule=null}set(e){var t,s,i,r;if(typeof e=="function"){let n=(()=>{var o;!this.parentRule||(o=this.parentRule.parentNode)!=null&&o._disposed||(this.value=e(n),this._domUpdate())});n.onSubscribe=o=>{var a;(a=this.parentRule.parentNode)==null||a.addHook("BeforeRemove",()=>{o(),n=null})},n.elementNode=this.parentRule.root,n.debug=`class:${(s=(t=this.parentRule)==null?void 0:t.root)==null?void 0:s.tagName}_${(r=(i=this.parentRule)==null?void 0:i.root)==null?void 0:r.nodeId} style:${this.name}`,this.value=e(n)}else this.value=e;this._domUpdate()}remove(){if(this.parentRule){if(this.parentRule.domRule instanceof CSSStyleRule){let e=this.parentRule.domRule.style;e.removeProperty(this.cssName),v[this.name]&&v[this.name].forEach(t=>{e.removeProperty(`-${t}-${this.cssName}`)})}delete this.parentRule.styleBlock[this.name],this._dispose()}}cssText(){let e=`${this.cssName}: ${this.value}`;return v[this.name]&&v[this.name].forEach(t=>{e+=`; -${t}-${this.cssName}: ${this.value}`}),e}},g=class j{constructor(t,s){this.domRule=null,this.styleBlock={},this.selectorText=t,this.styleList=new re(this),this.parent=s}_dispose(){if(this.styleBlock)for(let t of Object.values(this.styleBlock))t._dispose();this.styleList&&this.styleList._dispose(),this.styleBlock=null,this.styleList=null,this.domRule=null,this.parent=null}get root(){let t=this.parent;for(;t instanceof j;)t=t.parent;return t}get parentNode(){let t=this.parent;for(;t&&t instanceof j;)t=t.parent;return t}insertStyle(t,s){this.styleBlock&&(this.styleBlock[t]?this.styleBlock[t].set(s):this.styleBlock[t]=new $e(t,s,this))}removeStyle(t){this.styleBlock&&this.styleBlock[t]&&this.styleBlock[t].remove()}cssText(){if(!this.styleBlock||!this.styleList)return"";let t=Object.values(this.styleBlock).map(i=>i.cssText()).join(";"),s=this.styleList.cssText();return`${this.selectorText} { ${t} ${s} } `}mount(t){!t||!this.styleList||(this.domRule=t,"cssRules"in t&&this.styleList.mount(t.cssRules))}remove(){if(this.domRule&&this.domRule.parentStyleSheet){let t=this.domRule.parentStyleSheet,s=t.cssRules;for(let i=0;i<s.length;i++)if(s[i]===this.domRule){t.deleteRule(i);break}}this._dispose()}render(t){if(!this.styleBlock||!this.styleList)return;let s=Object.values(this.styleBlock).map(i=>i.cssText()).join(";");try{if(this.selectorText.startsWith("@")){if(/^@(media|supports|container|layer)\b/.test(this.selectorText)){let i=t.insertRule(`${this.selectorText} {}`,t.cssRules.length),r=t.cssRules[i];"cssRules"in r&&(this.mount(r),this.styleList.render(r))}else if(this.selectorText.startsWith("@keyframes")||this.selectorText.startsWith("@font-face")){let i=this.cssText(),r=t.insertRule(i,t.cssRules.length),n=t.cssRules[r];this.mount(n)}}else{let i=`${this.selectorText} { ${s} }`,r=t.insertRule(i,t.cssRules.length),n=t.cssRules[r];n&&"selectorText"in n&&this.mount(n)}}catch(i){console.warn("Failed to insert rule:",this.selectorText,i)}}},re=class{constructor(e){this.items=[],this.domStyle=null,this.parent=e}get parentNode(){let e=this.parent;for(;e&&e instanceof g;)e=e.parent;return e}addCSS(e,t=""){if(!this.items||!this.parent)return;let s={};function i(r,n){return r.startsWith("&")?`${n}${r.slice(1)}`:`${n} ${r}`}for(let r in e){let n=e[r],o=Ce(r);for(let a of o){let l=i(a,t);if(/^@(container|layer|supports|media)\b/.test(a)){if(typeof n=="object"&&n!=null){let h=new g(a,this.parent);h.styleList.addCSS(n,t),this.items.push(h)}}else if(a.startsWith("@keyframes")){let h=new g(a,this.parent);h.styleList.addCSS(n,""),this.items.push(h)}else if(a.startsWith("@font-face")){let h=new g(a,this.parent);for(let f in n)h.insertStyle(f,n[f]);this.items.push(h)}else if(typeof n=="object"&&n!=null){let h=new g(l,this.parent);this.items.push(h);for(let[f,u]of Object.entries(n))if(typeof u=="object"&&u!=null){let d=i(f,l);f.startsWith("&")?this.addCSS(u,d):h.styleList.insertRule(d).styleList.addCSS(u,d)}else h.insertStyle(f,u)}else s[a]=n}}if(Object.keys(s).length){let r=new g(t,this.parent);for(let n in s)r.insertStyle(n,s[n]);this.items.push(r)}}cssText(){return this.items?this.items.map(e=>e.cssText()).join(""):""}insertRule(e){if(!this.items||!this.parent)return null;let t=this.items.find(s=>s.selectorText===e);return t||(t=new g(e,this.parent),this.items.push(t)),t}mount(e){if(!this.items)return;if(!e)throw Error("Require domRuleList argument");let t=0,s=i=>i.replace("(odd)","(2n+1)").replace("(even)","(2n)");this.items.forEach((i,r)=>{let n=r-t,o=e[n];o&&(i.selectorText.startsWith("@")&&o instanceof CSSKeyframesRule||"keyText"in o?i.mount(o):"selectorText"in o?o.selectorText!==s(i.selectorText)?t+=1:i.mount(o):"cssRules"in o&&i.mount(o))})}render(e){e instanceof HTMLStyleElement?(this.domStyle=e,this.items.forEach(t=>t.render(e.sheet))):e instanceof CSSGroupingRule&&this.items.forEach(t=>t.render(e))}_dispose(){if(this.items)for(let e=0;e<this.items.length;e++)this.items[e]._dispose();this.items=[],this.parent=null,this.domStyle=null}},m=class C{constructor(t,s=null,i=0){this._disposed=!1,this.type="ElementNode",this.parent=null,this.children=new ne(this),this.styles=new re(this),this.attributes=new ie(this),this.domElement=null,this._hooks={},this._events=null,this._context={},this._metadata={},this.key=null;var r,n;t=_(t),Y(t),t.style=t.style||{},this.parent=s,this.tagName=Te(t),t=ee(t),this.key=(r=t._key)!=null?r:null,this._context=t._context||{},this._metadata=t._metadata||{};let o=`${(n=this.parent)==null?void 0:n.nodeId}.${i}`,a=JSON.stringify(t.style||{},(h,f)=>typeof f=="function"?o:f);this.nodeId=X(o+a),this.attributes.addClass(`${this.tagName}_${this.nodeId}`),t._onSchedule&&t._onSchedule(this,t),this.merge(t);let l=t[this.tagName];if(l!=null&&l!=null)if(typeof l=="function"){let h=()=>{if(this._disposed)return;let f=l(h);this.children.update(Array.isArray(f)?f:[f])};h.elementNode=this,h.debug=`class:${this.tagName}_${this.nodeId} children`,h.onSubscribe=f=>this.addHook("BeforeRemove",()=>{f(),h=null}),h&&h()}else this.children.update(Array.isArray(l)?l:[l]);this._hooks.Init&&this._hooks.Init(this)}_createDOMNode(){let t=te.includes(this.tagName)?document.createElementNS("http://www.w3.org/2000/svg",this.tagName):document.createElement(this.tagName);if(this.domElement=t,this._events)for(let s in this._events){let i=s,r=this._events[i],n=o=>r(o,this);t.addEventListener(i,n),this.addHook("BeforeRemove",o=>{o.domElement.removeEventListener(i,n),n=null})}return this.attributes&&Object.values(this.attributes.items).forEach(s=>s.render()),t}_dispose(){this._disposed=!0,this.children&&this.children._dispose(),this.styles&&(this.styles.items.forEach(t=>t.remove()),this.styles._dispose()),this.attributes&&this.attributes._dispose(),this.domElement=null,this._hooks={},this._events=null,this._context={},this._metadata={},this.parent=null}merge(t){S(this._context,t._context),S(this._metadata,t._metadata);let s=Object.keys(t);for(let i=0;i<s.length;i++){let r=s[i],n=t[r];["$","_onSchedule","_key","_context","_metadata","style",this.tagName].includes(r)||(["_onInit","_onInsert","_onMount","_onBeforeUpdate","_onUpdate","_onBeforeRemove","_onRemove"].includes(r)?this.addHook(r.substring(3),n):r.startsWith("on")?this.addEvent(r.substring(2).toLowerCase(),n):r=="_portal"?this._portal=n:r=="class"&&typeof n=="string"?this.attributes.addClass(n):this.attributes.set(r,n))}t.style&&this.styles.addCSS(t.style||{},`.${`${this.tagName}_${this.nodeId}`}`)}addEvent(t,s){this._events=this._events||{};let i=this._events[t];typeof i=="function"?this._events[t]=(r,n)=>{i(r,n),s(r,n)}:this._events[t]=s}addHook(t,s){let i=this._hooks[t];typeof i=="function"?this._hooks[t]=((...r)=>{i(...r),s(...r)}):this._hooks[t]=s}getRoot(){let t=this;for(;t&&t instanceof C&&t.parent;)t=t.parent;return t}getContext(t){let s=this;for(;s&&(!s._context||!Object.prototype.hasOwnProperty.call(s._context,t));)s=s.parent;return s&&s._context?s._context[t]:void 0}setContext(t,s){this._context=this._context||{},this._context[t]=s}getMetadata(t){return this._metadata?this._metadata[t]:void 0}setMetadata(t,s){this._metadata=this._metadata||{},this._metadata[t]=s}generateCSS(){if(!this.styles||!this.children)return"";let t=this.styles.cssText();return t+=this.children.items.map(s=>s instanceof C?s.generateCSS():"").join(""),t}generateHTML(){if(!this.children||!this.attributes)return"";let t=this.children.generateHTML(),s=this.attributes.generateHTML();return`<${this.tagName}${s}>${t}</${this.tagName}>`}mount(t,s){if(!t)throw new Error("Missing dom node on bind");if(this.domElement=t,this._events)for(let i in this._events){let r=i,n=this._events[r],o=a=>n(a,this);t.addEventListener(r,o),this.addHook("BeforeRemove",a=>{a.domElement.removeEventListener(r,o),o=null})}this.children&&this.children.items.forEach((i,r)=>{let n=t.childNodes[r];n instanceof Node&&i instanceof C&&i.mount(n,s)}),this._hooks.Mount&&this._hooks.Mount(this)}render(t){let s=this._createDOMNode();t.appendChild(s),this._hooks.Mount&&this._hooks.Mount(this);let i=this.getRoot().styles.domStyle,r=t.getRootNode(),n=r instanceof ShadowRoot?r:document.head;return i||(i=Q(n)),this.styles.render(i),this.children.items.forEach(o=>{if(o instanceof C&&o._portal){let a=o._portal(this.getRoot());a&&o.render(a)}else o.render(s)}),s}remove(){var t;this.parent?this.parent.children.remove(this):((t=this.domElement)==null||t.remove(),this._dispose())}},Me=class{constructor(e){this._notifier=new R,this.initialRecord=K({},e),this._record=K({},e)}get(e,t){return t&&this._notifier.addListener(e,t),this._record[e]}set(e,t){this._record[e]=t,this._notifier.notify(e)}addListener(e,t){return this._notifier.addListener(e,t)}removeListener(e,t){this._notifier.removeListener(e,t)}reset(e){this.set(e,this.initialRecord[e])}_dispose(){this._notifier._dispose()}};var M={};I(M,{getTheme:()=>c,setTheme:()=>Ae,themeApply:()=>De,themeCSS:()=>z,themeColor:()=>Ge,themeColorToken:()=>qe,themeDensity:()=>Fe,themeName:()=>y,themeSize:()=>Ue,themeSpacing:()=>Pe,themeTokens:()=>H,themeVars:()=>x});var Oe={direction:"darken",colors:{primary:["#ffffff","#e3ecff","#c6daff","#aac8ff","#8fb6ff","#76a3ff","#5f91fc","#4a7ff4","#386ee7","#2a5ed7","#1e4ec2","#1440aa","#0c3290","#072674","#041a57","#020f38","#010419","#000000"],secondary:["#ffffff","#fce6ea","#faced6","#f7b5c2","#f29db0","#ec859e","#e36e8d","#d8597d","#ca456e","#b93460","#a42351","#8e1643","#770b36","#5f0529","#46031d","#2d0210","#130104","#000000"],info:["#ffffff","#dcf0f9","#b7e1f6","#90d2f1","#6ac3eb","#42b4e2","#16a4d5","#0094c4","#0084b2","#00739e","#00638a","#005476","#004461","#00354d","#002638","#001623","#00070d","#000000"],success:["#ffffff","#e3f3dc","#c6e8b8","#a9dd94","#8ed171","#75c450","#61b635","#51a51f","#429304","#358100","#2a7000","#215f00","#194d00","#123c00","#0b2b00","#051a00","#010900","#000000"],warning:["#ffffff","#ffeada","#ffd3b3","#ffbd8d","#ffa96b","#ff9853","#ec8640","#d77531","#c16523","#aa5718","#944a0f","#7e3d09","#673106","#512504","#3b1a03","#250e02","#0e0401","#000000"],attention:["#ffffff","#ffeada","#ffd3b3","#ffbd8d","#ffa96b","#ff9853","#ec8640","#d77531","#c16523","#aa5718","#944a0f","#7e3d09","#673106","#512504","#3b1a03","#250e02","#0e0401","#000000"],error:["#ffffff","#fce7e4","#fbcfca","#f8b7b0","#f59f96","#ef877e","#e86f67","#de5852","#d3403e","#c5282c","#b30a1b","#9e000b","#860001","#6c0000","#510000","#340000","#170000","#000000"],danger:["#ffffff","#fce7e4","#fbcfca","#f8b7b0","#f59f96","#ef877e","#e86f67","#de5852","#d3403e","#c5282c","#b30a1b","#9e000b","#860001","#6c0000","#510000","#340000","#170000","#000000"],highlight:["#ffffff","#f9f5cd","#f4eb95","#efe05a","#e6d427","#d3c100","#bfad00","#ab9b00","#988900","#857700","#736600","#615600","#4f4600","#3e3600","#2c2700","#1b1700","#090700","#000000"],neutral:["#ffffff","#ededed","#dbdbdb","#cacaca","#bababa","#ababab","#9b9b9b","#8d8d8d","#7e7e7e","#707070","#636363","#565656","#484848","#383838","#282828","#181818","#080808","#000000"]},baseTones:{highlight:5,warning:6,error:8,danger:8,secondary:8,primary:9,info:8,success:8,neutral:8},fontSizes:["0.75rem","0.875rem","1rem","1.25rem","1.5625rem","1.9375rem","2.4375rem","3.0625rem"],densities:[.75,1,1.5,2,2.5],darkBias:1,custom:{}},k=Oe;var E={light:JSON.parse(JSON.stringify(k)),dark:je(k)};function U(e){let t=Object.keys(e.colors)[0];return t?e.colors[t].length:0}function Be(e){for(let t in e)if(!Object.keys(k).includes(t))throw new Error(`Invalid key: ${t}`);if(e.fontSizes&&!Array.isArray(e.fontSizes))throw new Error("fontSize must be array of string");if(e.densities&&(!Array.isArray(e.densities)||e.densities.some(t=>typeof t!="number")))throw new Error("densities must be array of number");if("custom"in e){let t=e.custom;if(typeof t!="object"||t===null)throw new Error("Invalid custom property: must be an object")}}function oe(e,t){var s;for(let i in t)t[i]&&typeof t[i]=="object"&&!Array.isArray(t[i])?((s=e[i])!=null||(e[i]={}),oe(e[i],t[i])):e[i]=t[i]}function Ie(e,t){let s={},i=U(t);for(let n in t){let o=t[n];if(n==="colors")for(let a in t.colors)[...Array(i).keys()].forEach(l=>s[`--${a}-${l}`]=t.colors[a][l]);else if(n==="fontSizes")[...Array(8).keys()].forEach(a=>s[`--fontSize-${a}`]=t.fontSizes[a]);else{if(n==="densities")continue;if(typeof o=="object"&&o!==null)for(let a in o)s[`--${n}-${a.replace("/","_")}`]=o[a]}}let r="";for(let n in s)r+=` ${n}: ${s[n]};
1
+ "use strict";var Domphy=(()=>{var B=Object.defineProperty;var ue=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var me=Object.prototype.hasOwnProperty;var I=(e,t)=>{for(var s in t)B(e,s,{get:t[s],enumerable:!0})},ce=(e,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of de(t))!me.call(e,r)&&r!==s&&B(e,r,{get:()=>t[r],enumerable:!(i=ue(t,r))||i.enumerable});return e};var pe=e=>ce(B({},"__esModule",{value:!0}),e);var Ke={};I(Ke,{core:()=>L,theme:()=>M});var L={};I(L,{AttributeList:()=>ie,BooleanAttributes:()=>P,CamelAttributes:()=>se,ElementList:()=>ne,ElementNode:()=>m,HtmlTags:()=>D,Notifier:()=>R,PrefixCSS:()=>v,RecordState:()=>Me,State:()=>A,SvgTags:()=>te,VoidTags:()=>Ce,hashString:()=>X,merge:()=>S,r:()=>we,toState:()=>ke});var ye=Object.defineProperty,G=Object.getOwnPropertySymbols,be=Object.prototype.hasOwnProperty,ge=Object.prototype.propertyIsEnumerable,q=(e,t,s)=>t in e?ye(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,K=(e,t)=>{for(var s in t||(t={}))be.call(t,s)&&q(e,s,t[s]);if(G)for(var s of G(t))ge.call(t,s)&&q(e,s,t[s]);return e},ve=["onAbort","onAuxClick","onBeforeMatch","onBeforeToggle","onBlur","onCancel","onCanPlay","onCanPlayThrough","onChange","onClick","onClose","onContextLost","onContextMenu","onContextRestored","onCopy","onCueChange","onCut","onDblClick","onDrag","onDragEnd","onDragEnter","onDragLeave","onDragOver","onDragStart","onDrop","onDurationChange","onEmptied","onEnded","onError","onFocus","onFormData","onInput","onInvalid","onKeyDown","onKeyPress","onKeyUp","onLoad","onLoadedData","onLoadedMetadata","onLoadStart","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onMouseUp","onPaste","onPause","onPlay","onPlaying","onProgress","onRateChange","onReset","onResize","onScroll","onScrollEnd","onSecurityPolicyViolation","onSeeked","onSeeking","onSelect","onSlotChange","onStalled","onSubmit","onSuspend","onTimeUpdate","onToggle","onVolumeChange","onWaiting","onWheel","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel","onPointerDown","onPointerMove","onPointerUp","onPointerCancel","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onGotPointerCapture","onLostPointerCapture","onCompositionStart","onCompositionUpdate","onCompositionEnd","onTransitionEnd","onTransitionStart","onAnimationStart","onAnimationEnd","onAnimationIteration","onFullscreenChange","onFullscreenError","onFocusIn","onFocusOut"],_e=ve.reduce((e,t)=>{let s=t.slice(2).toLowerCase();return e[s]=t,e},{}),D=["a","abbr","address","article","aside","audio","b","base","blockquote","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","i","iframe","img","input","ins","kbd","label","legend","li","main","map","mark","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","slot","small","source","span","strong","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","bdi","bdo","math","menu","search","area","embed","hr","animate","animateMotion","animateTransform","circle","clipPath","cursor","defs","desc","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","foreignObject","g","image","line","linearGradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","prefetch","radialGradient","rect","set","solidColor","stop","svg","switch","symbol","tbreak","text","textPath","tspan","use","view"],b=[],R=class{constructor(){this._listeners={},this._pending=new Map,this._scheduled=!1}_dispose(){if(this._listeners)for(let e in this._listeners)this._listeners[e].clear();this._listeners=null}addListener(e,t){if(!this._listeners)return()=>{};if(typeof e!="string"||typeof t!="function")throw new Error("Event name must be a string, listener must be a function");this._listeners[e]||(this._listeners[e]=new Set);let s=()=>this.removeListener(e,t);return this._listeners[e].has(t)||(this._listeners[e].add(t),typeof t.onSubscribe=="function"&&t.onSubscribe(s)),s}removeListener(e,t){if(!this._listeners)return;let s=this._listeners[e];s&&s.has(t)&&(s.delete(t),s.size===0&&delete this._listeners[e])}notify(e,...t){this._listeners&&this._listeners[e]&&(this._isCircular(e)||(this._pending.set(e,{args:t,chain:[...b]}),this._scheduled||(this._scheduled=!0,queueMicrotask(()=>this._flushAll()))))}_isCircular(e){let t=b.findIndex(([i,r])=>i===this&&r===e);if(t===-1)return!1;let s=[...b.slice(t).map(([,i])=>i),e];return console.error(`[Domphy] Circular dependency detected:
2
+ ${s.join(" \u2192 ")}`),!0}_flushAll(){this._scheduled=!1;let e=this._pending;this._pending=new Map;for(let[t,{args:s,chain:i}]of e)b=i,this._flush(t,s);b=[]}_flush(e,t){if(!this._listeners)return;let s=this._listeners[e];if(s){b.push([this,e]);for(let i of[...s])if(s.has(i))try{i(...t)}catch(r){console.error(r)}b.pop()}}},A=class{constructor(e,t=typeof e){this.name=t,this._notifier=new R,this.initialValue=e,this._value=e}get(e){return e&&this.addListener(e),this._value}set(e){this._notifier&&(this._value=e,this._notifier.notify(this.name,e))}reset(){this.set(this.initialValue)}addListener(e){return this._notifier?this._notifier.addListener(this.name,e):()=>{}}removeListener(e){this._notifier&&this._notifier.removeListener(this.name,e)}_dispose(){this._notifier&&(this._notifier._dispose(),this._notifier=null)}};function S(e={},t={}){let s=["animation","transition","boxShadow","textShadow","background","fontFamily"],i=["class","rel","transform","acceptCharset","sandbox"],r=["content"];Object.prototype.toString.call(t)==="[object Object]"&&Object.getPrototypeOf(t)===Object.prototype&&(t=_(t));for(let n in t){let o=t[n];if(!(o==null||o===""))if(typeof o=="object"&&!Array.isArray(o))typeof e[n]=="object"?e[n]=S(e[n],o):e[n]=o;else if(s.includes(n))if(typeof e[n]=="function"||typeof o=="function"){let a=e[n];e[n]=l=>{let h=typeof a=="function"?a(l):a,f=typeof o=="function"?o(l):o;return[h,f].filter(u=>u).join(", ")}}else e[n]=[e[n],o].filter(a=>a).join(", ");else if(r.includes(n))if(typeof e[n]=="function"||typeof o=="function"){let a=e[n];e[n]=l=>{let h=typeof a=="function"?a(l):a,f=typeof o=="function"?o(l):o;return[h,f].filter(u=>u).join("")}}else e[n]=[e[n],o].filter(a=>a).join("");else if(i.includes(n))if(typeof e[n]=="function"||typeof o=="function"){let a=e[n];e[n]=l=>{let h=typeof a=="function"?a(l):a,f=typeof o=="function"?o(l):o;return[h,f].filter(u=>u).join(" ")}}else e[n]=[e[n],o].filter(a=>a).join(" ");else if(n.startsWith("on")){let a=n.replace("on","").toLowerCase();Ee(e,a,o)}else if(n.startsWith("_on")){let a=n.replace("_on","");Se(e,a,o)}else e[n]=o}return e}function X(e=""){let t=2166136261;for(let s=0;s<e.length;s++)t^=e.charCodeAt(s),t=t*16777619>>>0;return String.fromCharCode(97+t%26)+t.toString(16)}function ke(e,t){return e instanceof A?e:new A(e,t)}function we(e){return e}function Se(e,t,s){let i=`_on${t}`,r=e[i];typeof r=="function"?e[i]=(...n)=>{r(...n),s(...n)}:e[i]=s}function Ee(e,t,s){let i=_e[t];if(!i)throw Error(`invalid event name "${t}"`);let r=e[i];typeof r=="function"?e[i]=(n,o)=>{r(n,o),s(n,o)}:e[i]=s}function _(e,t=new WeakMap){if(e===null||typeof e!="object"||typeof e=="function")return e;if(t.has(e))return t.get(e);let s=Object.getPrototypeOf(e);if(s!==Object.prototype&&!Array.isArray(e))return e;let i;if(Array.isArray(e)){i=[],t.set(e,i);for(let r of e)i.push(_(r,t));return i}if(e instanceof Date)return new Date(e);if(e instanceof RegExp)return new RegExp(e);if(e instanceof Map){i=new Map,t.set(e,i);for(let[r,n]of e)i.set(_(r,t),_(n,t));return i}if(e instanceof Set){i=new Set,t.set(e,i);for(let r of e)i.add(_(r,t));return i}if(ArrayBuffer.isView(e))return new e.constructor(e);if(e instanceof ArrayBuffer)return e.slice(0);i=Object.create(s),t.set(e,i);for(let r of Reflect.ownKeys(e))i[r]=_(e[r],t);return i}function Y(e,t=!1){if(Object.prototype.toString.call(e)!=="[object Object]")throw Error(`typeof ${e} is invalid DomphyElement`);let s=Object.keys(e);for(let i=0;i<s.length;i++){let r=s[i],n=e[r];if(i==0&&!D.includes(r)&&!r.includes("-")&&!t)throw Error(`key ${r} is not valid HTML tag name`);if(r=="style"&&n&&Object.prototype.toString.call(n)!=="[object Object]")throw Error('"style" must be a object');if(r=="$")e.$.forEach(o=>Y(o,!0));else{if(r.startsWith("_on")&&typeof n!="function")throw Error(`hook ${r} value "${n}" must be a function `);if(r.startsWith("on")&&typeof n!="function")throw Error(`event ${r} value "${n}" must be a function `);if(r=="_portal"&&typeof n!="function")throw Error('"_portal" must be a function return HTMLElement');if(r=="_context"&&Object.prototype.toString.call(n)!=="[object Object]")throw Error('"_context" must be a object');if(r=="_metadata"&&Object.prototype.toString.call(n)!=="[object Object]")throw Error('"_metadata" must be a object');if(r=="_key"&&typeof n!="string"&&typeof n!="number")throw Error('"_key" must be a string or number')}}return!0}function xe(e){return/<([a-z][\w-]*)(\s[^>]*)?>.*<\/\1>|<([a-z][\w-]*)(\s[^>]*)?\/>/i.test(e.trim())}function J(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Te(e){return Object.keys(e).find(t=>D.includes(t))}function Z(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}function Ne(e){if(e.indexOf("@")===0)return[e];for(var t=[],s=0,i=0,r="",n=0,o=e.length;n<o;n++){var a=e[n];if(a==="(")s+=1;else if(a===")")s-=1;else if(a==="[")i+=1;else if(a==="]")i-=1;else if(a===","&&!s&&!i){t.push(r.trim()),r="";continue}r+=a}return t.push(r.trim()),t}function Q(e){var t;let s=e.querySelector("#domphy-style");return s||(s=document.createElement("style"),s.id="domphy-style",e.appendChild(s)),s.dataset.domphyBase!=="true"&&((t=s.sheet)==null||t.insertRule("[hidden] { display: none !important; }",0),s.dataset.domphyBase="true"),s}var ee=e=>{if(Array.isArray(e.$)){let t={};return e.$.forEach(s=>S(t,ee(s))),delete e.$,S(t,e),t}else return e},Ce=["area","base","br","col","embed","hr","img","input","link","meta","source","track","wbr"],te=["svg","circle","path","rect","ellipse","line","polyline","polygon","g","defs","use","symbol","linearGradient","radialGradient","stop","clipPath","mask","filter","text","tspan","textPath","image","pattern","marker","animate","animateTransform","animateMotion","feGaussianBlur","feComposite","feColorMatrix","feMerge","feMergeNode","feOffset","feFlood","feBlend","foreignObject"],P=["allowFullScreen","async","autoFocus","autoPlay","checked","compact","contentEditable","controls","declare","default","defer","disabled","formNoValidate","hidden","isMap","itemScope","loop","multiple","muted","noHref","noShade","noValidate","open","playsInline","readonly","required","reversed","scoped","selected","sortable","trueSpeed","typeMustMatch","wmode","autoCapitalize","translate","spellCheck","inert","download","noModule","paused","autoPictureInPicture"],v={transform:["webkit","ms"],transition:["webkit","ms"],animation:["webkit"],userSelect:["webkit","ms"],flexDirection:["webkit","ms"],flexWrap:["webkit","ms"],justifyContent:["webkit","ms"],alignItems:["webkit","ms"],alignSelf:["webkit","ms"],order:["webkit","ms"],flexGrow:["webkit","ms"],flexShrink:["webkit","ms"],flexBasis:["webkit","ms"],columns:["webkit"],columnCount:["webkit"],columnGap:["webkit"],columnRule:["webkit"],columnWidth:["webkit"],boxSizing:["webkit"],appearance:["webkit","moz"],filter:["webkit"],backdropFilter:["webkit"],clipPath:["webkit"],mask:["webkit"],maskImage:["webkit"],textSizeAdjust:["webkit","ms"],hyphens:["webkit","ms"],writingMode:["webkit","ms"],gridTemplateColumns:["ms"],gridTemplateRows:["ms"],gridAutoColumns:["ms"],gridAutoRows:["ms"],gridColumn:["ms"],gridRow:["ms"],marginInlineStart:["webkit"],marginInlineEnd:["webkit"],paddingInlineStart:["webkit"],paddingInlineEnd:["webkit"],minInlineSize:["webkit"],maxInlineSize:["webkit"],minBlockSize:["webkit"],maxBlockSize:["webkit"],inlineSize:["webkit"],blockSize:["webkit"],tabSize:["moz"],overscrollBehavior:["webkit","ms"],touchAction:["ms"],resize:["webkit"],printColorAdjust:["webkit"],backgroundClip:["webkit"],boxDecorationBreak:["webkit"],overflowScrolling:["webkit"]},se=["viewBox","preserveAspectRatio","gradientTransform","gradientUnits","spreadMethod","markerStart","markerMid","markerEnd","markerHeight","markerWidth","markerUnits","refX","refY","patternContentUnits","patternTransform","patternUnits","filterUnits","primitiveUnits","kernelUnitLength","clipPathUnits","maskContentUnits","maskUnits"],Re=class{constructor(e,t,s){this._notifier=new R,this.parent=s,this.isBoolean=P.includes(e),se.includes(e)?this.name=e:this.name=Z(e),this.value=void 0,this.set(t)}render(){if(!this.parent||!this.parent.domElement)return;let e=this.parent.domElement,t=["value"];this.isBoolean?this.value===!1||this.value==null?e.removeAttribute(this.name):e.setAttribute(this.name,this.value===!0?"":this.value):this.value==null?e.removeAttribute(this.name):t.includes(this.name)?e[this.name]=this.value:e.setAttribute(this.name,this.value)}set(e){var t,s;let i=this.value;if(e==null)this.value=null;else if(typeof e=="string"&&/<\/?[a-z][\s\S]*>/i.test(e))this.value=J(e);else if(typeof e=="function"){let r=()=>{if(!this.parent||this.parent._disposed)return;let n=this.value;this.value=this.isBoolean?!!e():e(),this.render(),n!==this.value&&this._notifier.notify(this.name,this.value)};r.elementNode=this.parent,r.debug=`class:${(t=this.parent)==null?void 0:t.tagName}_${(s=this.parent)==null?void 0:s.nodeId} attribute:${this.name}`,r.onSubscribe=n=>{this.parent&&this.parent.addHook("BeforeRemove",()=>{n(),r=null})},this.value=this.isBoolean?!!e(r):e(r)}else this.value=this.isBoolean?!!e:e;this.render(),i!==this.value&&this._notifier.notify(this.name,this.value)}addListener(e){let t=e;t.onSubscribe=s=>{var i;return(i=this.parent)==null?void 0:i.addHook("BeforeRemove",s)},this._notifier.addListener(this.name,t)}remove(){this.parent&&this.parent.attributes&&this.parent.attributes.remove(this.name),this._dispose()}_dispose(){this._notifier._dispose(),this.value=null,this.parent=null}generateHTML(){let{name:e,value:t}=this;if(this.isBoolean)return t?`${e}`:"";{let s=Array.isArray(t)?JSON.stringify(t):t;return`${e}="${J(String(s))}"`}}},ie=class{constructor(e){this.items={},this.parent=e}generateHTML(){if(!this.items)return"";let e=Object.values(this.items).map(t=>t.generateHTML()).join(" ");return e?` ${e}`:""}get(e){var t;if(this.items)return(t=this.items[e])==null?void 0:t.value}set(e,t){!this.items||!this.parent||(this.items[e]?this.items[e].set(t):this.items[e]=new Re(e,t,this.parent))}addListener(e,t){this.has(e)&&this.items[e].addListener(t)}has(e){return this.items?Object.prototype.hasOwnProperty.call(this.items,e):!1}remove(e){this.items&&(this.items[e]&&(this.items[e]._dispose(),delete this.items[e]),this.parent&&this.parent.domElement&&this.parent.domElement instanceof Element&&this.parent.domElement.removeAttribute(e))}_dispose(){if(this.items)for(let e in this.items)this.items[e]._dispose();this.items=null,this.parent=null}toggle(e,t){if(!P.includes(e))throw Error(`${e} is not a boolean attribute`);t===!0?this.set(e,!0):t===!1?this.remove(e):this.has(e)?this.remove(e):this.set(e,!0)}addClass(e){if(!e||typeof e!="string")return;let t=(i,r)=>{let n=(i||"").split(" ").filter(o=>o);return!n.includes(r)&&n.push(e),n.join(" ")},s=this.get("class");typeof s=="function"?this.set("class",()=>t(s(),e)):this.set("class",t(s,e))}hasClass(e){return!e||typeof e!="string"?!1:(this.get("class")||"").split(" ").filter(t=>t).includes(e)}toggleClass(e){!e||typeof e!="string"||(this.hasClass(e)?this.removeClass(e):this.addClass(e))}removeClass(e){if(!e||typeof e!="string")return;let t=(this.get("class")||"").split(" ").filter(s=>s).filter(s=>s!==e);t.length>0?this.set("class",t.join(" ")):this.remove("class")}replaceClass(e,t){!e||!t||typeof e!="string"||typeof t!="string"||this.hasClass(e)&&(this.removeClass(e),this.addClass(t))}},Le=class{constructor(e,t){this.type="TextNode",this.parent=t;let s=t.tagName;this.text=e===""&&s!=="textarea"?"\u200B":String(e)}_createDOMNode(){let e;if(xe(this.text)){let t=document.createElement("template");t.innerHTML=this.text.trim(),e=t.content.firstChild||document.createTextNode("")}else e=document.createTextNode(this.text);return this.domText=e,e}_dispose(){this.domText=void 0,this.text=""}generateHTML(){return this.text==="\u200B"?"&#8203;":this.text}render(e){let t=this._createDOMNode();e.appendChild(t)}},ne=class{constructor(e){this.items=[],this._nextKey=0,this.owner=e}_createNode(e){return typeof e=="object"&&e!==null?new m(e,this.owner,this._nextKey++):new Le(e==null?"":String(e),this.owner)}_moveDomElement(e,t){if(!this.owner||!this.owner.domElement)return;let s=this.owner.domElement,i=e instanceof m?e.domElement:e.domText;if(i){let r=s.childNodes[t]||null;i!==r&&s.insertBefore(i,r)}}_swapDomElement(e,t){if(!this.owner||!this.owner.domElement)return;let s=this.owner.domElement,i=e instanceof m?e.domElement:e.domText,r=t instanceof m?t.domElement:t.domText;if(!i||!r)return;let n=i.nextSibling,o=r.nextSibling;s.insertBefore(i,o),s.insertBefore(r,n)}update(e,t=!0,s=!1){var i,r,n,o;let a=this.items.slice(),l=new Map;for(let h of a)h instanceof m&&h.key!==null&&h.key!==void 0&&l.set(h.key,h);!s&&this.owner.domElement&&((r=(i=this.owner._hooks)==null?void 0:i.BeforeUpdate)==null||r.call(i,this.owner,e));for(let h=0;h<e.length;h++){let f=e[h],u=typeof f=="object"&&f!==null?f._key:void 0;if(u!==void 0){let d=l.get(u);if(d){l.delete(u);let T=this.items.indexOf(d);if(T!==h&&T>=0){let O=d instanceof m&&!!d._portal;this.move(T,h,O?!1:t,!0)}d.parent=this.owner;continue}}this.insert(f,h,t,!0)}for(;this.items.length>e.length;)this.remove(this.items[this.items.length-1],t,!0);l.forEach(h=>this.remove(h,t,!0)),s||(o=(n=this.owner._hooks)==null?void 0:n.Update)==null||o.call(n,this.owner)}insert(e,t,s=!0,i=!1){var r,n;let o=this.items.length,a=typeof t!="number"||isNaN(t)||t<0||t>o?o:t,l=this._createNode(e);if(this.items.splice(a,0,l),l instanceof m){l._hooks.Insert&&l._hooks.Insert(l);let h=this.owner.domElement;if(s&&h)if(l._portal){let f=l._portal(this.owner.getRoot());f&&l.render(f)}else{let f=l._createDOMNode(),u=(r=h.childNodes[a])!=null?r:null;h.insertBefore(f,u);let d=h.getRootNode(),T=d instanceof ShadowRoot?d:document.head,O=Q(T);l.styles.render(O),l._hooks.Mount&&l._hooks.Mount(l),l.children.items.forEach(w=>{if(w instanceof m&&w._portal){let V=w._portal(w.getRoot());V&&w.render(V)}else w.render(f)})}}else{let h=this.owner.domElement;if(s&&h){let f=l._createDOMNode(),u=(n=h.childNodes[a])!=null?n:null;h.insertBefore(f,u)}}return!i&&this.owner.domElement&&this.owner._hooks.Update&&this.owner._hooks.Update(this.owner),l}remove(e,t=!0,s=!1){let i=this.items.indexOf(e);if(!(i<0)){if(e instanceof m){let r=()=>{var n,o;let a=e.domElement;this.items.splice(i,1),t&&a&&a.remove(),(o=(n=e._hooks)==null?void 0:n.Remove)==null||o.call(n,e),e._dispose()};if(e._hooks.BeforeRemove&&e.domElement){let n=!1,o=()=>{n||(n=!0,r())};e._hooks.BeforeRemove(e,o),n||o()}else r()}else{let r=e.domText;this.items.splice(i,1),t&&r&&r.remove(),e._dispose()}!s&&this.owner.domElement&&this.owner._hooks.Update&&this.owner._hooks.Update(this.owner)}}clear(e=!0,t=!1){if(this.items.length===0)return;let s=this.items.slice();for(let i of s)this.remove(i,e,!0);!t&&this.owner.domElement&&this.owner._hooks.Update&&this.owner._hooks.Update(this.owner)}_dispose(){this.items.forEach(e=>e._dispose()),this.items=[]}swap(e,t,s=!0,i=!1){if(e<0||t<0||e>=this.items.length||t>=this.items.length||e===t)return;let r=this.items[e],n=this.items[t];this.items[e]=n,this.items[t]=r,s&&this._swapDomElement(r,n),!i&&this.owner.domElement&&this.owner._hooks.Update&&this.owner._hooks.Update(this.owner)}move(e,t,s=!0,i=!1){if(e<0||e>=this.items.length||t<0||t>=this.items.length||e===t)return;let r=this.items[e];this.items.splice(e,1),this.items.splice(t,0,r),s&&this._moveDomElement(r,t),!i&&this.owner.domElement&&this.owner._hooks.Update&&this.owner._hooks.Update(this.owner)}generateHTML(){let e="";for(let t of this.items)e+=t.generateHTML();return e}},$e=class{constructor(e,t,s){this.value="",this.name=e,this.cssName=Z(e),this.parentRule=s,this.set(t)}_domUpdate(){if(!this.parentRule)return;let e=this.parentRule.domRule;if(e&&e.style){let t=e.style;t.setProperty(this.cssName,String(this.value)),v[this.name]&&v[this.name].forEach(s=>{t.setProperty(`-${s}-${this.cssName}`,String(this.value))})}}_dispose(){this.value="",this.parentRule=null}set(e){var t,s,i,r;if(typeof e=="function"){let n=(()=>{var o;!this.parentRule||(o=this.parentRule.parentNode)!=null&&o._disposed||(this.value=e(n),this._domUpdate())});n.onSubscribe=o=>{var a;(a=this.parentRule.parentNode)==null||a.addHook("BeforeRemove",()=>{o(),n=null})},n.elementNode=this.parentRule.root,n.debug=`class:${(s=(t=this.parentRule)==null?void 0:t.root)==null?void 0:s.tagName}_${(r=(i=this.parentRule)==null?void 0:i.root)==null?void 0:r.nodeId} style:${this.name}`,this.value=e(n)}else this.value=e;this._domUpdate()}remove(){if(this.parentRule){if(this.parentRule.domRule instanceof CSSStyleRule){let e=this.parentRule.domRule.style;e.removeProperty(this.cssName),v[this.name]&&v[this.name].forEach(t=>{e.removeProperty(`-${t}-${this.cssName}`)})}delete this.parentRule.styleBlock[this.name],this._dispose()}}cssText(){let e=`${this.cssName}: ${this.value}`;return v[this.name]&&v[this.name].forEach(t=>{e+=`; -${t}-${this.cssName}: ${this.value}`}),e}},g=class j{constructor(t,s){this.domRule=null,this.styleBlock={},this.selectorText=t,this.styleList=new re(this),this.parent=s}_dispose(){if(this.styleBlock)for(let t of Object.values(this.styleBlock))t._dispose();this.styleList&&this.styleList._dispose(),this.styleBlock=null,this.styleList=null,this.domRule=null,this.parent=null}get root(){let t=this.parent;for(;t instanceof j;)t=t.parent;return t}get parentNode(){let t=this.parent;for(;t&&t instanceof j;)t=t.parent;return t}insertStyle(t,s){this.styleBlock&&(this.styleBlock[t]?this.styleBlock[t].set(s):this.styleBlock[t]=new $e(t,s,this))}removeStyle(t){this.styleBlock&&this.styleBlock[t]&&this.styleBlock[t].remove()}cssText(){if(!this.styleBlock||!this.styleList)return"";let t=Object.values(this.styleBlock).map(i=>i.cssText()).join(";"),s=this.styleList.cssText();return`${this.selectorText} { ${t} ${s} } `}mount(t){!t||!this.styleList||(this.domRule=t,"cssRules"in t&&this.styleList.mount(t.cssRules))}remove(){if(this.domRule&&this.domRule.parentStyleSheet){let t=this.domRule.parentStyleSheet,s=t.cssRules;for(let i=0;i<s.length;i++)if(s[i]===this.domRule){t.deleteRule(i);break}}this._dispose()}render(t){if(!this.styleBlock||!this.styleList)return;let s=Object.values(this.styleBlock).map(i=>i.cssText()).join(";");try{if(this.selectorText.startsWith("@")){if(/^@(media|supports|container|layer)\b/.test(this.selectorText)){let i=t.insertRule(`${this.selectorText} {}`,t.cssRules.length),r=t.cssRules[i];"cssRules"in r&&(this.mount(r),this.styleList.render(r))}else if(this.selectorText.startsWith("@keyframes")||this.selectorText.startsWith("@font-face")){let i=this.cssText(),r=t.insertRule(i,t.cssRules.length),n=t.cssRules[r];this.mount(n)}}else{let i=`${this.selectorText} { ${s} }`,r=t.insertRule(i,t.cssRules.length),n=t.cssRules[r];n&&"selectorText"in n&&this.mount(n)}}catch(i){console.warn("Failed to insert rule:",this.selectorText,i)}}},re=class{constructor(e){this.items=[],this.domStyle=null,this.parent=e}get parentNode(){let e=this.parent;for(;e&&e instanceof g;)e=e.parent;return e}addCSS(e,t=""){if(!this.items||!this.parent)return;let s={};function i(r,n){return r.startsWith("&")?`${n}${r.slice(1)}`:`${n} ${r}`}for(let r in e){let n=e[r],o=Ne(r);for(let a of o){let l=i(a,t);if(/^@(container|layer|supports|media)\b/.test(a)){if(typeof n=="object"&&n!=null){let h=new g(a,this.parent);h.styleList.addCSS(n,t),this.items.push(h)}}else if(a.startsWith("@keyframes")){let h=new g(a,this.parent);h.styleList.addCSS(n,""),this.items.push(h)}else if(a.startsWith("@font-face")){let h=new g(a,this.parent);for(let f in n)h.insertStyle(f,n[f]);this.items.push(h)}else if(typeof n=="object"&&n!=null){let h=new g(l,this.parent);this.items.push(h);for(let[f,u]of Object.entries(n))if(typeof u=="object"&&u!=null){let d=i(f,l);f.startsWith("&")?this.addCSS(u,d):h.styleList.insertRule(d).styleList.addCSS(u,d)}else h.insertStyle(f,u)}else s[a]=n}}if(Object.keys(s).length){let r=new g(t,this.parent);for(let n in s)r.insertStyle(n,s[n]);this.items.push(r)}}cssText(){return this.items?this.items.map(e=>e.cssText()).join(""):""}insertRule(e){if(!this.items||!this.parent)return null;let t=this.items.find(s=>s.selectorText===e);return t||(t=new g(e,this.parent),this.items.push(t)),t}mount(e){if(!this.items)return;if(!e)throw Error("Require domRuleList argument");let t=0,s=i=>i.replace("(odd)","(2n+1)").replace("(even)","(2n)");this.items.forEach((i,r)=>{let n=r-t,o=e[n];o&&(i.selectorText.startsWith("@")&&o instanceof CSSKeyframesRule||"keyText"in o?i.mount(o):"selectorText"in o?o.selectorText!==s(i.selectorText)?t+=1:i.mount(o):"cssRules"in o&&i.mount(o))})}render(e){e instanceof HTMLStyleElement?(this.domStyle=e,this.items.forEach(t=>t.render(e.sheet))):e instanceof CSSGroupingRule&&this.items.forEach(t=>t.render(e))}_dispose(){if(this.items)for(let e=0;e<this.items.length;e++)this.items[e]._dispose();this.items=[],this.parent=null,this.domStyle=null}},m=class N{constructor(t,s=null,i=0){this._disposed=!1,this.type="ElementNode",this.parent=null,this.children=new ne(this),this.styles=new re(this),this.attributes=new ie(this),this.domElement=null,this._hooks={},this._events=null,this._context={},this._metadata={},this.key=null;var r,n;t=_(t),Y(t),t.style=t.style||{},this.parent=s,this.tagName=Te(t),t=ee(t),this.key=(r=t._key)!=null?r:null,this._context=t._context||{},this._metadata=t._metadata||{};let o=`${(n=this.parent)==null?void 0:n.nodeId}.${i}`,a=JSON.stringify(t.style||{},(h,f)=>typeof f=="function"?o:f);this.nodeId=X(o+a),this.attributes.addClass(`${this.tagName}_${this.nodeId}`),t._onSchedule&&t._onSchedule(this,t),this.merge(t);let l=t[this.tagName];if(l!=null&&l!=null)if(typeof l=="function"){let h=()=>{if(this._disposed)return;let f=l(h);this.children.update(Array.isArray(f)?f:[f])};h.elementNode=this,h.debug=`class:${this.tagName}_${this.nodeId} children`,h.onSubscribe=f=>this.addHook("BeforeRemove",()=>{f(),h=null}),h&&h()}else this.children.update(Array.isArray(l)?l:[l]);this._hooks.Init&&this._hooks.Init(this)}_createDOMNode(){let t=te.includes(this.tagName)?document.createElementNS("http://www.w3.org/2000/svg",this.tagName):document.createElement(this.tagName);if(this.domElement=t,this._events)for(let s in this._events){let i=s,r=this._events[i],n=o=>r(o,this);t.addEventListener(i,n),this.addHook("BeforeRemove",o=>{o.domElement.removeEventListener(i,n),n=null})}return this.attributes&&Object.values(this.attributes.items).forEach(s=>s.render()),t}_dispose(){this._disposed=!0,this.children&&this.children._dispose(),this.styles&&(this.styles.items.forEach(t=>t.remove()),this.styles._dispose()),this.attributes&&this.attributes._dispose(),this.domElement=null,this._hooks={},this._events=null,this._context={},this._metadata={},this.parent=null}merge(t){S(this._context,t._context),S(this._metadata,t._metadata);let s=Object.keys(t);for(let i=0;i<s.length;i++){let r=s[i],n=t[r];["$","_onSchedule","_key","_context","_metadata","style",this.tagName].includes(r)||(["_onInit","_onInsert","_onMount","_onBeforeUpdate","_onUpdate","_onBeforeRemove","_onRemove"].includes(r)?this.addHook(r.substring(3),n):r.startsWith("on")?this.addEvent(r.substring(2).toLowerCase(),n):r=="_portal"?this._portal=n:r=="class"&&typeof n=="string"?this.attributes.addClass(n):this.attributes.set(r,n))}t.style&&this.styles.addCSS(t.style||{},`.${`${this.tagName}_${this.nodeId}`}`)}addEvent(t,s){this._events=this._events||{};let i=this._events[t];typeof i=="function"?this._events[t]=(r,n)=>{i(r,n),s(r,n)}:this._events[t]=s}addHook(t,s){let i=this._hooks[t];typeof i=="function"?this._hooks[t]=((...r)=>{i(...r),s(...r)}):this._hooks[t]=s}getRoot(){let t=this;for(;t&&t instanceof N&&t.parent;)t=t.parent;return t}getContext(t){let s=this;for(;s&&(!s._context||!Object.prototype.hasOwnProperty.call(s._context,t));)s=s.parent;return s&&s._context?s._context[t]:void 0}setContext(t,s){this._context=this._context||{},this._context[t]=s}getMetadata(t){return this._metadata?this._metadata[t]:void 0}setMetadata(t,s){this._metadata=this._metadata||{},this._metadata[t]=s}generateCSS(){if(!this.styles||!this.children)return"";let t=this.styles.cssText();return t+=this.children.items.map(s=>s instanceof N?s.generateCSS():"").join(""),t}generateHTML(){if(!this.children||!this.attributes)return"";let t=this.children.generateHTML(),s=this.attributes.generateHTML();return`<${this.tagName}${s}>${t}</${this.tagName}>`}mount(t,s){if(!t)throw new Error("Missing dom node on bind");if(this.domElement=t,this._events)for(let i in this._events){let r=i,n=this._events[r],o=a=>n(a,this);t.addEventListener(r,o),this.addHook("BeforeRemove",a=>{a.domElement.removeEventListener(r,o),o=null})}this.children&&this.children.items.forEach((i,r)=>{let n=t.childNodes[r];n instanceof Node&&i instanceof N&&i.mount(n,s)}),this._hooks.Mount&&this._hooks.Mount(this)}render(t){let s=this._createDOMNode();t.appendChild(s),this._hooks.Mount&&this._hooks.Mount(this);let i=this.getRoot().styles.domStyle,r=t.getRootNode(),n=r instanceof ShadowRoot?r:document.head;return i||(i=Q(n)),this.styles.render(i),this.children.items.forEach(o=>{if(o instanceof N&&o._portal){let a=o._portal(this.getRoot());a&&o.render(a)}else o.render(s)}),s}remove(){var t;this.parent?this.parent.children.remove(this):((t=this.domElement)==null||t.remove(),this._dispose())}},Me=class{constructor(e){this._notifier=new R,this.initialRecord=K({},e),this._record=K({},e)}get(e,t){return t&&this._notifier.addListener(e,t),this._record[e]}set(e,t){this._record[e]=t,this._notifier.notify(e)}addListener(e,t){return this._notifier.addListener(e,t)}removeListener(e,t){this._notifier.removeListener(e,t)}reset(e){this.set(e,this.initialRecord[e])}_dispose(){this._notifier._dispose()}};var M={};I(M,{getTheme:()=>c,setTheme:()=>Ae,themeApply:()=>De,themeCSS:()=>z,themeColor:()=>Ge,themeColorToken:()=>qe,themeDensity:()=>Fe,themeName:()=>y,themeSize:()=>Ue,themeSpacing:()=>Pe,themeTokens:()=>H,themeVars:()=>x});var Oe={direction:"darken",colors:{primary:["#ffffff","#e3ecff","#c6daff","#aac8ff","#8fb6ff","#76a3ff","#5f91fc","#4a7ff4","#386ee7","#2a5ed7","#1e4ec2","#1440aa","#0c3290","#072674","#041a57","#020f38","#010419","#000000"],secondary:["#ffffff","#fce6ea","#faced6","#f7b5c2","#f29db0","#ec859e","#e36e8d","#d8597d","#ca456e","#b93460","#a42351","#8e1643","#770b36","#5f0529","#46031d","#2d0210","#130104","#000000"],info:["#ffffff","#dcf0f9","#b7e1f6","#90d2f1","#6ac3eb","#42b4e2","#16a4d5","#0094c4","#0084b2","#00739e","#00638a","#005476","#004461","#00354d","#002638","#001623","#00070d","#000000"],success:["#ffffff","#e3f3dc","#c6e8b8","#a9dd94","#8ed171","#75c450","#61b635","#51a51f","#429304","#358100","#2a7000","#215f00","#194d00","#123c00","#0b2b00","#051a00","#010900","#000000"],warning:["#ffffff","#ffeada","#ffd3b3","#ffbd8d","#ffa96b","#ff9853","#ec8640","#d77531","#c16523","#aa5718","#944a0f","#7e3d09","#673106","#512504","#3b1a03","#250e02","#0e0401","#000000"],attention:["#ffffff","#ffeada","#ffd3b3","#ffbd8d","#ffa96b","#ff9853","#ec8640","#d77531","#c16523","#aa5718","#944a0f","#7e3d09","#673106","#512504","#3b1a03","#250e02","#0e0401","#000000"],error:["#ffffff","#fce7e4","#fbcfca","#f8b7b0","#f59f96","#ef877e","#e86f67","#de5852","#d3403e","#c5282c","#b30a1b","#9e000b","#860001","#6c0000","#510000","#340000","#170000","#000000"],danger:["#ffffff","#fce7e4","#fbcfca","#f8b7b0","#f59f96","#ef877e","#e86f67","#de5852","#d3403e","#c5282c","#b30a1b","#9e000b","#860001","#6c0000","#510000","#340000","#170000","#000000"],highlight:["#ffffff","#f9f5cd","#f4eb95","#efe05a","#e6d427","#d3c100","#bfad00","#ab9b00","#988900","#857700","#736600","#615600","#4f4600","#3e3600","#2c2700","#1b1700","#090700","#000000"],neutral:["#ffffff","#ededed","#dbdbdb","#cacaca","#bababa","#ababab","#9b9b9b","#8d8d8d","#7e7e7e","#707070","#636363","#565656","#484848","#383838","#282828","#181818","#080808","#000000"]},baseTones:{highlight:5,warning:6,error:8,danger:8,secondary:8,primary:9,info:8,success:8,neutral:8},fontSizes:["0.75rem","0.875rem","1rem","1.25rem","1.5625rem","1.9375rem","2.4375rem","3.0625rem"],densities:[.75,1,1.5,2,2.5],darkBias:1,custom:{}},k=Oe;var E={light:JSON.parse(JSON.stringify(k)),dark:je(k)};function U(e){let t=Object.keys(e.colors)[0];return t?e.colors[t].length:0}function Be(e){for(let t in e)if(!Object.keys(k).includes(t))throw new Error(`Invalid key: ${t}`);if(e.fontSizes&&!Array.isArray(e.fontSizes))throw new Error("fontSize must be array of string");if(e.densities&&(!Array.isArray(e.densities)||e.densities.some(t=>typeof t!="number")))throw new Error("densities must be array of number");if("custom"in e){let t=e.custom;if(typeof t!="object"||t===null)throw new Error("Invalid custom property: must be an object")}}function oe(e,t){var s;for(let i in t)t[i]&&typeof t[i]=="object"&&!Array.isArray(t[i])?((s=e[i])!=null||(e[i]={}),oe(e[i],t[i])):e[i]=t[i]}function Ie(e,t){let s={},i=U(t);for(let n in t){let o=t[n];if(n==="colors")for(let a in t.colors)[...Array(i).keys()].forEach(l=>s[`--${a}-${l}`]=t.colors[a][l]);else if(n==="fontSizes")[...Array(8).keys()].forEach(a=>s[`--fontSize-${a}`]=t.fontSizes[a]);else{if(n==="densities")continue;if(typeof o=="object"&&o!==null)for(let a in o)s[`--${n}-${a.replace("/","_")}`]=o[a]}}let r="";for(let n in s)r+=` ${n}: ${s[n]};
3
3
  `;return`[data-theme="${e}"] {
4
4
  ${r}}`}function c(e){if(!E[e])throw Error(`Theme "${e}" not found`);return E[e]}function Ae(e,t){Be(t),E[e]||(E[e]=structuredClone(k)),oe(E[e],t)}function je(e){let t=structuredClone(e);t.direction="lighten";for(let s in t.colors)t.colors[s].reverse(),t.baseTones[s]=t.colors[s].length-1-t.baseTones[s];return t}function H(e){let t=c(e),s=U(t),i={};for(let r in t){let n=t[r];if(r==="colors")for(let o in t.colors){let a={};[...Array(s).keys()].forEach(l=>a[l]=t.colors[o][l]),i[o]=a}else if(r==="fontSizes")i.fontSizes=t.fontSizes;else if(r==="densities")i.densities=t.densities;else if(i[r]={},typeof n=="object"&&n!==null)for(let o in n)i[r][o]=n[o]}return i}function x(){let e=c("light"),t=U(e),s={};for(let i in e){let r=i,n=e[i];if(i==="colors")for(let o in e.colors){let a={};[...Array(t).keys()].forEach(l=>a[l]=`var(--${o}-${l})`),s[o]=a}else if(i==="fontSizes")s.fontSizes=[...Array(8).keys()].map(o=>`var(--fontSize-${o})`);else{if(i==="densities")continue;if(s[r]={},typeof n=="object"&&n!==null)for(let o in n)s[r][o]=`var(--${r}-${o.replace("/","_")})`}}return s}function z(){return Object.entries(E).map(([e,t])=>Ie(e,t)).join(`
5
- `)}function De(e){var t;if(typeof document!="undefined")if(e){e.textContent=z();return}else e=(t=document.getElementById("domphy-themes"))!=null?t:Object.assign(document.createElement("style"),{id:"domphy-themes"}),e.textContent=z(),document.head.appendChild(e)}function Pe(e){return e/4+"em"}function y(e){let s=typeof e=="function"?e.elementNode:e;for(;s&&(!s.attributes||!s.attributes.get("dataTheme"));)s=s.parent;let i="light";return s&&s.attributes&&s.attributes.has("dataTheme")&&(i=s.attributes.get("dataTheme"),typeof e=="function"&&s.attributes.addListener("dataTheme",e)),i}var W=["inherit"];[...Array(8).keys()].forEach(e=>{W.push(`decrease-${e}`),W.push(`increase-${e}`)});function ae(e,t="inherit"){if(!W.includes(t))throw Error(`size name "${t}" invalid`);let s;if(t=="inherit")s=e;else if(t!=null&&t.startsWith("increase-")){let i=parseInt(t.replace("increase-",""),10);s=e+i}else if(t!=null&&t.startsWith("decrease-")){let i=parseInt(t.replace("decrease-",""),10);s=e-i}else s=e;return Math.max(0,Math.min(8,s))}function ze(e){if(!e)return 2;let s=typeof e=="function"?e.elementNode:e;for(;s&&(!s.attributes||!s.attributes.get("dataSize"));)s=s.parent;let i=2;return s&&s.attributes&&s.attributes.has("dataSize")&&(i=ae(i,s.attributes.get("dataSize")),typeof e=="function"&&s.attributes.addListener("dataSize",e)),i}function Ue(e,t="inherit"){let s=ae(ze(e),t);return x().fontSizes[s]}var F=["inherit"];[...Array(5).keys()].forEach(e=>{F.push(`decrease-${e}`),F.push(`increase-${e}`)});function He(e,t="inherit"){if(!F.includes(t))throw Error(`density name "${t}" invalid`);let s;if(t=="inherit")s=e;else if(t!=null&&t.startsWith("increase-")){let i=parseInt(t.replace("increase-",""),10);s=e+i}else if(t!=null&&t.startsWith("decrease-")){let i=parseInt(t.replace("decrease-",""),10);s=e-i}else s=e;return Math.max(0,Math.min(4,s))}function We(e){if(!e)return 2;let s=typeof e=="function"?e.elementNode:e;for(;s&&(!s.attributes||!s.attributes.get("dataDensity"));)s=s.parent;let i=2;return s&&s.attributes&&s.attributes.has("dataDensity")&&(i=He(i,s.attributes.get("dataDensity")),typeof e=="function"&&s.attributes.addListener("dataDensity",e)),i}function Fe(e){let t=We(e);return c(e?y(e):"light").densities[t]}var p=k.colors.neutral.length,$=["inherit","base"];[...Array(p).keys()].forEach(e=>{$.push(`decrease-${e}`),$.push(`increase-${e}`),$.push(`shift-${e}`)});function le(e,t){if(e<0||e>p-1)return e;let s=e+t;return s=Math.max(0,Math.min(p-1,s)),s}function Ve(e,t){if(e<0||e>p-1)return e;let s=Math.floor((p-1)/2),i=e<=s?e+t:e-t;return i=i<0||i>p-1?-i:i,i=Math.max(0,Math.min(p-1,i)),i}function N(e,t="inherit"){if(typeof t=="number")return t;if(t=="inherit")return e;if(!$.includes(t))throw Error(`tone name "${t}" invalid`);if(t.startsWith("increase-")){let s=parseInt(t.replace("increase-",""),10);return le(e,s)}else if(t.startsWith("decrease-")){let s=parseInt(t.replace("decrease-",""),10);return le(e,-s)}else if(t.startsWith("shift-")){let s=parseInt(t.replace("shift-",""),10);return Ve(e,s)}else return e}function he(e){if(!e)return 0;let s=typeof e=="function"?e.elementNode:e;for(;s&&(!s.attributes||!s.attributes.get("dataTone"));)s=s.parent;let i=0;return s&&s.attributes&&s.attributes.has("dataTone")&&(i=N(i,s.attributes.get("dataTone")),typeof e=="function"&&s.attributes.addListener("dataTone",e)),i}function fe(e,t,s){return s<=0?e:t==="lighten"&&e===0?s:t==="darken"&&e===p-1?p-1-s:e}function Ge(e,t="inherit",s="inherit"){let i=s=="inherit"?"neutral":s;if(!e)return x()[i][N(0,t)];let r;if(t=="base")r=c(y(e)).baseTones[i];else{let a=c(y(e)),l=fe(he(e),a.direction,a.darkBias);r=N(l,t)}let n=x()[i];if(!n)throw Error(`color "${i}" not found on theme "${y(e)}`);return n[r]}function qe(e,t="inherit",s="inherit"){let i=s=="inherit"?"neutral":s,r=e?y(e):"light",n=H(r);if(!e)return n[i][N(0,t)];let o;if(t=="base")o=c(r).baseTones[i];else{let a=c(r),l=fe(he(e),a.direction,a.darkBias);o=N(l,t)}return n[i][o]}return pe(Ke);})();
5
+ `)}function De(e){var t;if(typeof document!="undefined")if(e){e.textContent=z();return}else e=(t=document.getElementById("domphy-themes"))!=null?t:Object.assign(document.createElement("style"),{id:"domphy-themes"}),e.textContent=z(),document.head.appendChild(e)}function Pe(e){return e/4+"em"}function y(e){let s=typeof e=="function"?e.elementNode:e;for(;s&&(!s.attributes||!s.attributes.get("dataTheme"));)s=s.parent;let i="light";return s&&s.attributes&&s.attributes.has("dataTheme")&&(i=s.attributes.get("dataTheme"),typeof e=="function"&&s.attributes.addListener("dataTheme",e)),i}var W=["inherit"];[...Array(8).keys()].forEach(e=>{W.push(`decrease-${e}`),W.push(`increase-${e}`)});function ae(e,t="inherit"){if(!W.includes(t))throw Error(`size name "${t}" invalid`);let s;if(t=="inherit")s=e;else if(t!=null&&t.startsWith("increase-")){let i=parseInt(t.replace("increase-",""),10);s=e+i}else if(t!=null&&t.startsWith("decrease-")){let i=parseInt(t.replace("decrease-",""),10);s=e-i}else s=e;return Math.max(0,Math.min(8,s))}function ze(e){if(!e)return 2;let s=typeof e=="function"?e.elementNode:e;for(;s&&(!s.attributes||!s.attributes.get("dataSize"));)s=s.parent;let i=2;return s&&s.attributes&&s.attributes.has("dataSize")&&(i=ae(i,s.attributes.get("dataSize")),typeof e=="function"&&s.attributes.addListener("dataSize",e)),i}function Ue(e,t="inherit"){let s=ae(ze(e),t);return x().fontSizes[s]}var F=["inherit"];[...Array(5).keys()].forEach(e=>{F.push(`decrease-${e}`),F.push(`increase-${e}`)});function He(e,t="inherit"){if(!F.includes(t))throw Error(`density name "${t}" invalid`);let s;if(t=="inherit")s=e;else if(t!=null&&t.startsWith("increase-")){let i=parseInt(t.replace("increase-",""),10);s=e+i}else if(t!=null&&t.startsWith("decrease-")){let i=parseInt(t.replace("decrease-",""),10);s=e-i}else s=e;return Math.max(0,Math.min(4,s))}function We(e){if(!e)return 2;let s=typeof e=="function"?e.elementNode:e;for(;s&&(!s.attributes||!s.attributes.get("dataDensity"));)s=s.parent;let i=2;return s&&s.attributes&&s.attributes.has("dataDensity")&&(i=He(i,s.attributes.get("dataDensity")),typeof e=="function"&&s.attributes.addListener("dataDensity",e)),i}function Fe(e){let t=We(e);return c(e?y(e):"light").densities[t]}var p=k.colors.neutral.length,$=["inherit","base"];[...Array(p).keys()].forEach(e=>{$.push(`decrease-${e}`),$.push(`increase-${e}`),$.push(`shift-${e}`)});function le(e,t){if(e<0||e>p-1)return e;let s=e+t;return s=Math.max(0,Math.min(p-1,s)),s}function Ve(e,t){if(e<0||e>p-1)return e;let s=Math.floor((p-1)/2),i=e<=s?e+t:e-t;return i=i<0||i>p-1?-i:i,i=Math.max(0,Math.min(p-1,i)),i}function C(e,t="inherit"){if(typeof t=="number")return t;if(t=="inherit")return e;if(!$.includes(t))throw Error(`tone name "${t}" invalid`);if(t.startsWith("increase-")){let s=parseInt(t.replace("increase-",""),10);return le(e,s)}else if(t.startsWith("decrease-")){let s=parseInt(t.replace("decrease-",""),10);return le(e,-s)}else if(t.startsWith("shift-")){let s=parseInt(t.replace("shift-",""),10);return Ve(e,s)}else return e}function he(e){if(!e)return 0;let s=typeof e=="function"?e.elementNode:e;for(;s&&(!s.attributes||!s.attributes.get("dataTone"));)s=s.parent;let i=0;return s&&s.attributes&&s.attributes.has("dataTone")&&(i=C(i,s.attributes.get("dataTone")),typeof e=="function"&&s.attributes.addListener("dataTone",e)),i}function fe(e,t,s){return s<=0?e:t==="lighten"&&e===0?s:t==="darken"&&e===p-1?p-1-s:e}function Ge(e,t="inherit",s="inherit"){let i=s=="inherit"?"neutral":s;if(!e)return x()[i][C(0,t)];let r;if(t=="base")r=c(y(e)).baseTones[i];else{let a=c(y(e)),l=fe(he(e),a.direction,a.darkBias);r=C(l,t)}let n=x()[i];if(!n)throw Error(`color "${i}" not found on theme "${y(e)}`);return n[r]}function qe(e,t="inherit",s="inherit"){let i=s=="inherit"?"neutral":s,r=e?y(e):"light",n=H(r);if(!e)return n[i][C(0,t)];let o;if(t=="base")o=c(r).baseTones[i];else{let a=c(r),l=fe(he(e),a.direction,a.darkBias);o=C(l,t)}return n[i][o]}return pe(Ke);})();
6
6
  //# sourceMappingURL=core-theme.global.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/global.ts","../../core/src/types/EventProperties.ts","../../core/src/constants/HtmlTags.ts","../../core/src/classes/Notifier.ts","../../core/src/classes/State.ts","../../core/src/utils.ts","../../core/src/helpers.ts","../../core/src/constants/VoidTags.ts","../../core/src/constants/SvgTags.ts","../../core/src/constants/BooleanAttributes.ts","../../core/src/constants/PrefixCSS.ts","../../core/src/constants/CamelAttributes.ts","../../core/src/classes/ElementAttribute.ts","../../core/src/classes/AttributeList.ts","../../core/src/classes/TextNode.ts","../../core/src/classes/ElementList.ts","../../core/src/classes/StyleProperty.ts","../../core/src/classes/StyleRule.ts","../../core/src/classes/StyleList.ts","../../core/src/classes/ElementNode.ts","../../core/src/classes/RecordState.ts","../src/index.ts","../src/light.ts","../src/theme.ts","../src/size.ts","../src/density.ts","../src/tone.ts"],"sourcesContent":["export * as core from \"@domphy/core\"\r\nexport * as theme from \"./index.js\"\r\n","export const EventProperties = [\r\n \"onAbort\",\r\n \"onAuxClick\",\r\n \"onBeforeMatch\",\r\n \"onBeforeToggle\",\r\n \"onBlur\",\r\n \"onCancel\",\r\n \"onCanPlay\",\r\n \"onCanPlayThrough\",\r\n \"onChange\",\r\n \"onClick\",\r\n \"onClose\",\r\n \"onContextLost\",\r\n \"onContextMenu\",\r\n \"onContextRestored\",\r\n \"onCopy\",\r\n \"onCueChange\",\r\n \"onCut\",\r\n \"onDblClick\",\r\n \"onDrag\",\r\n \"onDragEnd\",\r\n \"onDragEnter\",\r\n \"onDragLeave\",\r\n \"onDragOver\",\r\n \"onDragStart\",\r\n \"onDrop\",\r\n \"onDurationChange\",\r\n \"onEmptied\",\r\n \"onEnded\",\r\n \"onError\",\r\n \"onFocus\",\r\n \"onFormData\",\r\n \"onInput\",\r\n \"onInvalid\",\r\n \"onKeyDown\",\r\n \"onKeyPress\",\r\n \"onKeyUp\",\r\n \"onLoad\",\r\n \"onLoadedData\",\r\n \"onLoadedMetadata\",\r\n \"onLoadStart\",\r\n \"onMouseDown\",\r\n \"onMouseEnter\",\r\n \"onMouseLeave\",\r\n \"onMouseMove\",\r\n \"onMouseOut\",\r\n \"onMouseOver\",\r\n \"onMouseUp\",\r\n \"onPaste\",\r\n \"onPause\",\r\n \"onPlay\",\r\n \"onPlaying\",\r\n \"onProgress\",\r\n \"onRateChange\",\r\n \"onReset\",\r\n \"onResize\",\r\n \"onScroll\",\r\n \"onScrollEnd\",\r\n \"onSecurityPolicyViolation\",\r\n \"onSeeked\",\r\n \"onSeeking\",\r\n \"onSelect\",\r\n \"onSlotChange\",\r\n \"onStalled\",\r\n \"onSubmit\",\r\n \"onSuspend\",\r\n \"onTimeUpdate\",\r\n \"onToggle\",\r\n \"onVolumeChange\",\r\n \"onWaiting\",\r\n \"onWheel\",\r\n \"onTouchStart\",\r\n \"onTouchMove\",\r\n \"onTouchEnd\",\r\n \"onTouchCancel\",\r\n \"onPointerDown\",\r\n \"onPointerMove\",\r\n \"onPointerUp\",\r\n \"onPointerCancel\",\r\n \"onPointerEnter\",\r\n \"onPointerLeave\",\r\n \"onPointerOver\",\r\n \"onPointerOut\",\r\n \"onGotPointerCapture\",\r\n \"onLostPointerCapture\",\r\n \"onCompositionStart\",\r\n \"onCompositionUpdate\",\r\n \"onCompositionEnd\",\r\n \"onTransitionEnd\",\r\n \"onTransitionStart\",\r\n \"onAnimationStart\",\r\n \"onAnimationEnd\",\r\n \"onAnimationIteration\",\r\n \"onFullscreenChange\",\r\n \"onFullscreenError\",\r\n \"onFocusIn\",\r\n \"onFocusOut\",\r\n] as const\r\n\r\nexport const eventNameMap = EventProperties.reduce((acc, ev) => {\r\n const key = ev.slice(2).toLowerCase() as keyof HTMLElementEventMap\r\n acc[key] = ev;\r\n return acc;\r\n}, {} as Partial<Record<keyof HTMLElementEventMap, (typeof EventProperties)[number]>>);\r\n","export const HtmlTags = [\r\n \"a\",\r\n \"abbr\",\r\n \"address\",\r\n \"article\",\r\n \"aside\",\r\n \"audio\",\r\n \"b\",\r\n \"base\",\r\n \"blockquote\",\r\n \"br\",\r\n \"button\",\r\n \"canvas\",\r\n \"caption\",\r\n \"cite\",\r\n \"code\",\r\n \"col\",\r\n \"colgroup\",\r\n \"data\",\r\n \"datalist\",\r\n \"dd\",\r\n \"del\",\r\n \"details\",\r\n \"dfn\",\r\n \"dialog\",\r\n \"div\",\r\n \"dl\",\r\n \"dt\",\r\n \"em\",\r\n \"fieldset\",\r\n \"figcaption\",\r\n \"figure\",\r\n \"footer\",\r\n \"form\",\r\n \"h1\",\r\n \"h2\",\r\n \"h3\",\r\n \"h4\",\r\n \"h5\",\r\n \"h6\",\r\n \"header\",\r\n \"hgroup\",\r\n \"i\",\r\n \"iframe\",\r\n \"img\",\r\n \"input\",\r\n \"ins\",\r\n \"kbd\",\r\n \"label\",\r\n \"legend\",\r\n \"li\",\r\n \"main\",\r\n \"map\",\r\n \"mark\",\r\n \"meta\",\r\n \"meter\",\r\n \"nav\",\r\n \"noscript\",\r\n \"object\",\r\n \"ol\",\r\n \"optgroup\",\r\n \"option\",\r\n \"output\",\r\n \"p\",\r\n \"param\",\r\n \"picture\",\r\n \"pre\",\r\n \"progress\",\r\n \"q\",\r\n \"rp\",\r\n \"rt\",\r\n \"ruby\",\r\n \"s\",\r\n \"samp\",\r\n \"section\",\r\n \"select\",\r\n \"slot\",\r\n \"small\",\r\n \"source\",\r\n \"span\",\r\n \"strong\",\r\n \"sub\",\r\n \"summary\",\r\n \"sup\",\r\n \"table\",\r\n \"tbody\",\r\n \"td\",\r\n \"template\",\r\n \"textarea\",\r\n \"tfoot\",\r\n \"th\",\r\n \"thead\",\r\n \"time\",\r\n \"title\",\r\n \"tr\",\r\n \"track\",\r\n \"u\",\r\n \"ul\",\r\n \"var\",\r\n \"video\",\r\n \"wbr\",\r\n \"bdi\",\r\n \"bdo\",\r\n \"math\",\r\n \"menu\",\r\n \"search\",\r\n \"area\",\r\n \"embed\",\r\n \"hr\",\r\n \"animate\",\r\n \"animateMotion\",\r\n \"animateTransform\",\r\n \"circle\",\r\n \"clipPath\",\r\n \"cursor\",\r\n \"defs\",\r\n \"desc\",\r\n \"ellipse\",\r\n \"feBlend\",\r\n \"feColorMatrix\",\r\n \"feComponentTransfer\",\r\n \"feComposite\",\r\n \"feConvolveMatrix\",\r\n \"feDiffuseLighting\",\r\n \"feDisplacementMap\",\r\n \"feDistantLight\",\r\n \"feDropShadow\",\r\n \"feFlood\",\r\n \"feFuncA\",\r\n \"feFuncB\",\r\n \"feFuncG\",\r\n \"feFuncR\",\r\n \"feGaussianBlur\",\r\n \"feImage\",\r\n \"feMerge\",\r\n \"feMergeNode\",\r\n \"feMorphology\",\r\n \"feOffset\",\r\n \"fePointLight\",\r\n \"feSpecularLighting\",\r\n \"feSpotLight\",\r\n \"feTile\",\r\n \"feTurbulence\",\r\n \"filter\",\r\n \"foreignObject\",\r\n \"g\",\r\n \"image\",\r\n \"line\",\r\n \"linearGradient\",\r\n \"marker\",\r\n \"mask\",\r\n \"metadata\",\r\n \"mpath\",\r\n \"path\",\r\n \"pattern\",\r\n \"polygon\",\r\n \"polyline\",\r\n \"prefetch\",\r\n \"radialGradient\",\r\n \"rect\",\r\n \"set\",\r\n \"solidColor\",\r\n \"stop\",\r\n \"svg\",\r\n \"switch\",\r\n \"symbol\",\r\n \"tbreak\",\r\n \"text\",\r\n \"textPath\",\r\n \"tspan\",\r\n \"use\",\r\n \"view\",\r\n];","import { Handler } from \"../types.js\"\n\ntype ChainEntry = [notifier: Notifier, event: string]\n\n// Shared across all instances to track the flush chain for circular detection.\nlet _chain: ChainEntry[] = []\n\nexport class Notifier {\n private _listeners: Record<string, Set<Handler>> | null = {}\n private _pending: Map<string, { args: unknown[], chain: ChainEntry[] }> = new Map()\n private _scheduled = false\n\n _dispose(): void {\n if (this._listeners) {\n for (const event in this._listeners) {\n this._listeners[event].clear()\n }\n }\n this._listeners = null\n }\n\n addListener(event: string, listener: Handler): () => void {\n if (!this._listeners) return () => {}\n\n if (typeof event !== \"string\" || typeof listener !== \"function\") {\n throw new Error(\"Event name must be a string, listener must be a function\")\n }\n\n if (!this._listeners[event]) {\n this._listeners[event] = new Set()\n }\n\n const release = () => this.removeListener(event, listener)\n\n if (this._listeners[event].has(listener)) return release\n\n this._listeners[event].add(listener)\n if (typeof listener.onSubscribe === \"function\") {\n listener.onSubscribe(release)\n }\n\n return release\n }\n\n removeListener(event: string, listener: Handler): void {\n if (!this._listeners) return\n\n const listeners = this._listeners[event]\n if (listeners && listeners.has(listener)) {\n listeners.delete(listener)\n if (listeners.size === 0) {\n delete this._listeners[event]\n }\n }\n }\n\n notify(event: string, ...args: unknown[]): void {\n if (!this._listeners) return\n if (!this._listeners[event]) return\n\n if (this._isCircular(event)) return\n\n this._pending.set(event, { args, chain: [..._chain] })\n\n if (!this._scheduled) {\n this._scheduled = true\n queueMicrotask(() => this._flushAll())\n }\n }\n\n private _isCircular(event: string): boolean {\n const idx = _chain.findIndex(([n, e]) => n === this && e === event)\n if (idx === -1) return false\n\n const names = [..._chain.slice(idx).map(([, e]) => e), event]\n console.error(`[Domphy] Circular dependency detected:\\n ${names.join(\" → \")}`)\n return true\n }\n\n private _flushAll(): void {\n this._scheduled = false\n const pending = this._pending\n this._pending = new Map()\n\n for (const [event, { args, chain }] of pending) {\n _chain = chain\n this._flush(event, args)\n }\n _chain = []\n }\n\n private _flush(event: string, args: unknown[]): void {\n if (!this._listeners) return\n const listeners = this._listeners[event]\n if (!listeners) return\n\n _chain.push([this, event])\n\n for (const listener of [...listeners]) {\n if (!listeners.has(listener)) continue\n try {\n listener(...args)\n } catch (e) {\n console.error(e)\n }\n }\n\n _chain.pop()\n }\n}\n","import { Notifier } from \"./Notifier.js\";\r\nimport { Handler } from \"../types.js\"\r\n\r\nexport type ValueListener<T> = ((_value: T) => void) & Handler\r\nexport type ValueOrState<T> = T | State<T>\r\n\r\nexport class State<T> {\r\n private _value: T;\r\n readonly initialValue: T;\r\n private _notifier: Notifier | null = new Notifier();\r\n\r\n constructor(initialValue: T, readonly name: string = typeof initialValue) {\r\n this.initialValue = initialValue;\r\n this._value = initialValue;\r\n }\r\n\r\n get(listener?: ValueListener<T>): T {\r\n if (listener) this.addListener(listener);\r\n return this._value;\r\n }\r\n\r\n set(newValue: T): void {\r\n if (!this._notifier) return;\r\n this._value = newValue;\r\n this._notifier.notify(this.name, newValue);\r\n }\r\n\r\n reset(): void {\r\n this.set(this.initialValue);\r\n }\r\n\r\n addListener(listener: ValueListener<T>): () => void {\r\n if (!this._notifier) return () => { };\r\n return this._notifier.addListener(this.name, listener);\r\n }\r\n\r\n removeListener(listener: ValueListener<T>): void {\r\n if (!this._notifier) return;\r\n this._notifier.removeListener(this.name, listener);\r\n }\r\n\r\n _dispose(): void {\r\n if (this._notifier) {\r\n this._notifier._dispose();\r\n this._notifier = null;\r\n }\r\n }\r\n}\r\n","import { DomphyElement, HookMap, EventName, Handler, Listener } from \"./types.js\";\r\nimport { State } from \"./classes/State.js\"\r\n\r\nimport { deepClone, addEvent, addHook } from \"./helpers.js\"\r\n\r\nexport function merge(source: Record<string, any> = {}, target: Record<string, any> = {}): Record<string, any> {\r\n const comma = [\"animation\", \"transition\", \"boxShadow\", \"textShadow\", \"background\", \"fontFamily\"]\r\n const space = [\"class\", \"rel\", \"transform\", \"acceptCharset\", \"sandbox\"]\r\n const adjacent = [\"content\"]\r\n if (Object.prototype.toString.call(target) === \"[object Object]\" && Object.getPrototypeOf(target) === Object.prototype) { // plainjs not class instance\r\n target = deepClone(target)\r\n }\r\n\r\n for (const key in target) {\r\n\r\n const value = target[key];\r\n if (value === undefined || value === null || value === \"\") continue;\r\n\r\n if (typeof value === \"object\" && !Array.isArray(value)) {\r\n if (typeof source[key] === \"object\") {\r\n source[key] = merge(source[key], value);\r\n } else {\r\n source[key] = value;\r\n }\r\n\r\n } else {\r\n if (comma.includes(key)) {\r\n if (typeof source[key] === \"function\" || typeof value === \"function\") {\r\n let old = source[key]\r\n source[key] = (listener: Handler) => {\r\n let val1 = typeof old === \"function\" ? old(listener) : old\r\n let val2 = typeof value === \"function\" ? value(listener) : value\r\n return [val1, val2].filter(e => e).join(\", \")\r\n }\r\n } else {\r\n source[key] = [source[key], value].filter(e => e).join(\", \")\r\n }\r\n\r\n } else if (adjacent.includes(key)) {\r\n if (typeof source[key] === \"function\" || typeof value === \"function\") {\r\n let old = source[key]\r\n source[key] = (listener: Handler) => {\r\n let val1 = typeof old === \"function\" ? old(listener) : old\r\n let val2 = typeof value === \"function\" ? value(listener) : value\r\n return [val1, val2].filter(e => e).join(\"\")\r\n }\r\n } else {\r\n source[key] = [source[key], value].filter(e => e).join(\"\")\r\n }\r\n } else if (space.includes(key)) {\r\n if (typeof source[key] === \"function\" || typeof value === \"function\") {\r\n let old = source[key]\r\n source[key] = (listener: Handler) => {\r\n let val1 = typeof old === \"function\" ? old(listener) : old\r\n let val2 = typeof value === \"function\" ? value(listener) : value\r\n return [val1, val2].filter(e => e).join(\" \")\r\n }\r\n } else {\r\n source[key] = [source[key], value].filter(e => e).join(\" \")\r\n }\r\n } else if (key.startsWith(\"on\")) {\r\n let name = key.replace(\"on\", \"\").toLowerCase() as EventName\r\n addEvent(source as DomphyElement, name, value)\r\n } else if (key.startsWith(\"_on\")) {\r\n let name = key.replace(\"_on\", \"\") as keyof HookMap\r\n addHook(source as DomphyElement, name, value)\r\n } else {\r\n source[key] = value;\r\n }\r\n }\r\n }\r\n return source;\r\n}\r\n\r\nexport function hashString(str: string = \"\"): string {\r\n let hash = 0x811c9dc5; // FNV-1a 32-bit offset basis\r\n for (let i = 0; i < str.length; i++) {\r\n hash ^= str.charCodeAt(i);\r\n hash = (hash * 0x01000193) >>> 0; // FNV prime, keep 32-bit unsigned\r\n }\r\n return String.fromCharCode(97 + (hash % 26)) + hash.toString(16);\r\n}\r\n\r\nexport function toState<T>(val: T | State<T>, name?: string): State<T> {\r\n return val instanceof State ? val : new State<T>(val, name);\r\n}\r\n\r\nexport function r<T>(fn: (listener: Listener) => T): (listener: Listener) => T {\r\n return fn;\r\n}\r\n\r\n","import { DomphyElement, PartialElement, HookMap, EventName, Handler, TagName } from \"./types.js\";\r\nimport { ElementNode } from \"./classes/ElementNode.js\"\r\nimport { State } from \"./classes/State.js\"\r\nimport { eventNameMap } from \"./types/EventProperties.js\"\r\nimport { HtmlTags } from \"./constants/HtmlTags.js\"\r\nimport {merge} from \"./utils.js\"\r\n\r\nexport function addHook<K extends keyof HookMap>(partial: PartialElement, hookName: K, handler: HookMap[K]): void {\r\n const hookProperty = `_on${hookName}` as keyof PartialElement;\r\n let current = partial[hookProperty];\r\n\r\n if (typeof current === \"function\") {\r\n (partial as any)[hookProperty] = (...args: any[]) => {\r\n (current as Function)(...args);\r\n (handler as Function)(...args);\r\n };\r\n } else {\r\n (partial as any)[hookProperty] = handler;\r\n }\r\n}\r\n\r\nexport function addEvent<K extends keyof HTMLElementEventMap>(\r\n attributes: PartialElement,\r\n eventName: K,\r\n handler: (event: HTMLElementEventMap[K], node: ElementNode) => void\r\n): void {\r\n const eventProperty = eventNameMap[eventName];\r\n if (!eventProperty) {\r\n throw Error(`invalid event name \"${eventName}\"`);\r\n }\r\n const current = (attributes as any)[eventProperty]\r\n\r\n if (typeof current == \"function\") {\r\n (attributes as any)[eventProperty] = (event: HTMLElementEventMap[K], node: ElementNode) => {\r\n current(event, node)\r\n handler(event, node);\r\n };\r\n } else {\r\n (attributes as any)[eventProperty] = handler\r\n }\r\n}\r\n\r\nexport function deepClone(value: any, seen = new WeakMap()): any {\r\n if (value === null || typeof value !== \"object\") return value;\r\n if (typeof value === \"function\") return value;\r\n if (seen.has(value)) return seen.get(value);\r\n\r\n const proto = Object.getPrototypeOf(value);\r\n if (proto !== Object.prototype && !Array.isArray(value)) return value; // ignore class instance\r\n\r\n let clone: any;\r\n\r\n if (Array.isArray(value)) {\r\n clone = [];\r\n seen.set(value, clone);\r\n for (const v of value) clone.push(deepClone(v, seen));\r\n return clone;\r\n }\r\n\r\n if (value instanceof Date) return new Date(value);\r\n if (value instanceof RegExp) return new RegExp(value);\r\n if (value instanceof Map) {\r\n clone = new Map();\r\n seen.set(value, clone);\r\n for (const [k, v] of value) clone.set(deepClone(k, seen), deepClone(v, seen));\r\n return clone;\r\n }\r\n if (value instanceof Set) {\r\n clone = new Set();\r\n seen.set(value, clone);\r\n for (const v of value) clone.add(deepClone(v, seen));\r\n return clone;\r\n }\r\n if (ArrayBuffer.isView(value)) {\r\n return new (value as any).constructor(value);\r\n }\r\n if (value instanceof ArrayBuffer) {\r\n return value.slice(0);\r\n }\r\n\r\n clone = Object.create(proto);\r\n seen.set(value, clone);\r\n\r\n for (const key of Reflect.ownKeys(value)) {\r\n clone[key] = deepClone(value[key], seen);\r\n }\r\n\r\n return clone;\r\n}\r\n\r\nexport function validate(element: DomphyElement | PartialElement, asPartial = false): boolean {\r\n if (Object.prototype.toString.call(element) !== \"[object Object]\") {\r\n throw Error(`typeof ${element} is invalid DomphyElement`);\r\n }\r\n let keys = Object.keys(element);\r\n for (let i = 0; i < keys.length; i++) {\r\n let key = keys[i];\r\n let val = element[key as keyof typeof element]\r\n if (i == 0 && !HtmlTags.includes(key) && !key.includes(\"-\") && !asPartial) { // web-component\r\n throw Error(`key ${key} is not valid HTML tag name`);\r\n } else if (key == \"style\" && val && Object.prototype.toString.call(val) !== \"[object Object]\") {\r\n throw Error(`\"style\" must be a object`);\r\n } else if (key == \"$\") {\r\n element.$!.forEach(v => validate(v as PartialElement, true))\r\n } else if (key.startsWith(\"_on\") && typeof val != \"function\") {\r\n throw Error(`hook ${key} value \"${val}\" must be a function `)\r\n } else if (key.startsWith(\"on\") && typeof val != \"function\") {\r\n throw Error(`event ${key} value \"${val}\" must be a function `);\r\n } else if (key == \"_portal\" && typeof val !== \"function\") {\r\n throw Error(`\"_portal\" must be a function return HTMLElement`);\r\n } else if (key == \"_context\" && Object.prototype.toString.call(val) !== \"[object Object]\") {\r\n throw Error(`\"_context\" must be a object`);\r\n } else if (key == \"_metadata\" && Object.prototype.toString.call(val) !== \"[object Object]\") {\r\n throw Error(`\"_metadata\" must be a object`);\r\n } else if (key == \"_key\" && (typeof val !== \"string\" && typeof val !== \"number\")) {\r\n throw Error(`\"_key\" must be a string or number`);\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nexport function isValid(element: DomphyElement): boolean {\r\n\r\n if (Array.isArray(element)) return false;\r\n if (!element || typeof element !== \"object\") return false;\r\n\r\n let keys = Object.keys(element);\r\n for (let i = 0; i < keys.length; i++) {\r\n let key = keys[i];\r\n let val = element[key as keyof typeof element];\r\n if (i == 0 && !HtmlTags.includes(key)) return false\r\n if (key === \"style\" && (val == null || typeof val !== \"object\" || Array.isArray(val))) return false;\r\n if (key.startsWith(\"_on\") && typeof val !== \"function\") return false;\r\n if (key.startsWith(\"on\") && typeof val !== \"function\") return false;\r\n if (key === \"_portalChildren\" && !Array.isArray(val)) return false;\r\n if ((key === \"_context\" || key === \"_metadata\") && (val == null || typeof val !== \"object\" || Array.isArray(val))) return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport function isHTML(str: string): boolean {\r\n return /<([a-z][\\w-]*)(\\s[^>]*)?>.*<\\/\\1>|<([a-z][\\w-]*)(\\s[^>]*)?\\/>/i.test(str.trim());\r\n}\r\n\r\nexport function escapeHTML(str: string): string {\r\n return str\r\n .replace(/&/g, \"&amp;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/\"/g, \"&quot;\")\r\n .replace(/'/g, \"&#39;\");\r\n}\r\n\r\nexport function addClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => String(reactive(listener)) + \" \" + className\r\n } else {\r\n let current = element.class || \"\"\r\n let split = String(current).split(\" \")\r\n split.push(className)\r\n element.class = split.filter(e => e).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function removeClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => {\r\n let split = String(reactive(listener)).split(\" \")\r\n return split.filter(e => e != className).join(\" \")\r\n }\r\n } else {\r\n let split = String(element.class).split(\" \")\r\n element.class ||= \"\"\r\n element.class = split.filter(e => e != className).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function toggleClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => {\r\n let split = String(reactive(listener)).split(\" \")\r\n return split.includes(className) ? split.filter(e => e != className).join(\" \") : split.concat([className]).join(\" \")\r\n }\r\n } else {\r\n let split = String(element.class).split(\" \")\r\n element.class ||= \"\"\r\n element.class = split.includes(className) ? split.filter(e => e != className).join(\" \") : split.concat([className]).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function getTagName(element: DomphyElement): TagName | undefined {\r\n return Object.keys(element).find(e => HtmlTags.includes(e)) as TagName | undefined\r\n}\r\n\r\n\r\nexport function camelToKebab(str: string): string {\r\n return str.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\r\n}\r\n\r\nexport function selectorSplitter(selectors: string) {\n if (selectors.indexOf('@') === 0) {\r\n return [selectors];\r\n }\r\n var splitted = [];\r\n var parens = 0;\r\n var angulars = 0;\r\n var soFar = '';\r\n for (var i = 0, len = selectors.length; i < len; i++) {\r\n var char = selectors[i];\r\n if (char === '(') {\r\n parens += 1;\r\n } else if (char === ')') {\r\n parens -= 1;\r\n } else if (char === '[') {\r\n angulars += 1;\r\n } else if (char === ']') {\r\n angulars -= 1;\r\n } else if (char === ',') {\r\n if (!parens && !angulars) {\r\n splitted.push(soFar.trim());\r\n soFar = '';\r\n continue;\r\n }\r\n }\r\n soFar += char;\r\n }\r\n splitted.push(soFar.trim());\n return splitted;\n};\n\nexport function ensureDomStyle(styleParent: HTMLHeadElement | ShadowRoot): HTMLStyleElement {\n let domStyle = styleParent.querySelector(\"#domphy-style\") as HTMLStyleElement | null;\n\n if (!domStyle) {\n domStyle = document.createElement(\"style\");\n domStyle.id = \"domphy-style\";\n styleParent.appendChild(domStyle);\n }\n\n if (domStyle.dataset.domphyBase !== \"true\") {\n domStyle.sheet?.insertRule(\"[hidden] { display: none !important; }\", 0);\n domStyle.dataset.domphyBase = \"true\";\n }\n\n return domStyle;\n}\n\nexport const mergePartial = (partial: PartialElement | DomphyElement): typeof partial => {\n\r\n if (Array.isArray(partial.$)) {\r\n let part: typeof partial = {}\r\n partial.$.forEach(p => merge(part, mergePartial(p)))\r\n delete partial.$\r\n merge(part, partial) // native win\r\n\r\n return part\r\n } else {\r\n return partial\r\n }\r\n}\n","export const VoidTags = [\r\n \"area\",\r\n \"base\",\r\n \"br\",\r\n \"col\",\r\n \"embed\",\r\n \"hr\",\r\n \"img\",\r\n \"input\",\r\n \"link\",\r\n \"meta\",\r\n \"source\",\r\n \"track\",\r\n \"wbr\",\r\n] as const;\r\n\r\nexport type VoidTagName = (typeof VoidTags)[number];\r\n\r\n","export const SvgTags = [\"svg\", \"circle\", \"path\", \"rect\", \"ellipse\",\r\n \"line\", \"polyline\", \"polygon\", \"g\", \"defs\",\r\n \"use\", \"symbol\", \"linearGradient\", \"radialGradient\",\r\n \"stop\", \"clipPath\", \"mask\", \"filter\", \"text\",\r\n \"tspan\", \"textPath\", \"image\", \"pattern\", \"marker\",\r\n \"animate\", \"animateTransform\", \"animateMotion\",\r\n \"feGaussianBlur\", \"feComposite\", \"feColorMatrix\",\r\n \"feMerge\", \"feMergeNode\", \"feOffset\", \"feFlood\",\r\n \"feBlend\", \"foreignObject\"]","export const BooleanAttributes = [\r\n \"allowFullScreen\",\r\n \"async\",\r\n \"autoFocus\",\r\n \"autoPlay\",\r\n \"checked\",\r\n \"compact\",\r\n \"contentEditable\",\r\n \"controls\",\r\n \"declare\",\r\n \"default\",\r\n \"defer\",\r\n \"disabled\",\r\n \"formNoValidate\",\r\n \"hidden\",\r\n \"isMap\",\r\n \"itemScope\",\r\n \"loop\",\r\n \"multiple\",\r\n \"muted\",\r\n \"noHref\",\r\n \"noShade\",\r\n \"noValidate\",\r\n \"open\",\r\n \"playsInline\",\r\n \"readonly\",\r\n \"required\",\r\n \"reversed\",\r\n \"scoped\",\r\n \"selected\",\r\n \"sortable\",\r\n \"trueSpeed\",\r\n \"typeMustMatch\",\r\n \"wmode\",\r\n \"autoCapitalize\",\r\n \"translate\",\r\n \"spellCheck\",\r\n \"inert\",\r\n \"download\",\r\n \"noModule\",\r\n \"paused\",\r\n \"autoPictureInPicture\",\r\n] as const;","//browserslist query \"> 0.1%, not dead\"\r\nexport const PrefixCSS: Record<string, string[]> = {\r\n transform: [\"webkit\", \"ms\"],\r\n transition: [\"webkit\", \"ms\"],\r\n animation: [\"webkit\"],\r\n userSelect: [\"webkit\", \"ms\"],\r\n flexDirection: [\"webkit\", \"ms\"],\r\n flexWrap: [\"webkit\", \"ms\"],\r\n justifyContent: [\"webkit\", \"ms\"],\r\n alignItems: [\"webkit\", \"ms\"],\r\n alignSelf: [\"webkit\", \"ms\"],\r\n order: [\"webkit\", \"ms\"],\r\n flexGrow: [\"webkit\", \"ms\"],\r\n flexShrink: [\"webkit\", \"ms\"],\r\n flexBasis: [\"webkit\", \"ms\"],\r\n columns: [\"webkit\"],\r\n columnCount: [\"webkit\"],\r\n columnGap: [\"webkit\"],\r\n columnRule: [\"webkit\"],\r\n columnWidth: [\"webkit\"],\r\n boxSizing: [\"webkit\"],\r\n appearance: [\"webkit\", \"moz\"],\r\n filter: [\"webkit\"],\r\n backdropFilter: [\"webkit\"],\r\n clipPath: [\"webkit\"],\r\n mask: [\"webkit\"],\r\n maskImage: [\"webkit\"],\r\n textSizeAdjust: [\"webkit\", \"ms\"],\r\n hyphens: [\"webkit\", \"ms\"],\r\n writingMode: [\"webkit\", \"ms\"],\r\n gridTemplateColumns: [\"ms\"],\r\n gridTemplateRows: [\"ms\"],\r\n gridAutoColumns: [\"ms\"],\r\n gridAutoRows: [\"ms\"],\r\n gridColumn: [\"ms\"],\r\n gridRow: [\"ms\"],\r\n marginInlineStart: [\"webkit\"],\r\n marginInlineEnd: [\"webkit\"],\r\n paddingInlineStart: [\"webkit\"],\r\n paddingInlineEnd: [\"webkit\"],\r\n minInlineSize: [\"webkit\"],\r\n maxInlineSize: [\"webkit\"],\r\n minBlockSize: [\"webkit\"],\r\n maxBlockSize: [\"webkit\"],\r\n inlineSize: [\"webkit\"],\r\n blockSize: [\"webkit\"],\r\n tabSize: [\"moz\"],\r\n overscrollBehavior: [\"webkit\", \"ms\"],\r\n touchAction: [\"ms\"],\r\n resize: [\"webkit\"],\r\n printColorAdjust: [\"webkit\"],\r\n backgroundClip: [\"webkit\"],\r\n boxDecorationBreak: [\"webkit\"],\r\n overflowScrolling: [\"webkit\"],\r\n};\r\n","export const CamelAttributes: string[] = [\r\n \"viewBox\",\r\n \"preserveAspectRatio\",\r\n \"gradientTransform\",\r\n \"gradientUnits\",\r\n \"spreadMethod\",\r\n \"markerStart\",\r\n \"markerMid\",\r\n \"markerEnd\",\r\n \"markerHeight\",\r\n \"markerWidth\",\r\n \"markerUnits\",\r\n \"refX\",\r\n \"refY\",\r\n \"patternContentUnits\",\r\n \"patternTransform\",\r\n \"patternUnits\",\r\n \"filterUnits\",\r\n \"primitiveUnits\",\r\n \"kernelUnitLength\",\r\n \"clipPathUnits\",\r\n \"maskContentUnits\",\r\n \"maskUnits\"\r\n] as const\r\n","import { escapeHTML, camelToKebab } from \"../helpers.js\";\nimport { BooleanAttributes, CamelAttributes } from \"../constants.js\";\nimport type { ElementNode } from \"./ElementNode.js\"\nimport { type AttributeValue } from \"../types.js\"\nimport { Notifier } from \"./Notifier.js\"\n\nexport class ElementAttribute {\n readonly name: string;\n readonly isBoolean: boolean;\n value: any;\n parent: ElementNode;\n _notifier = new Notifier();\n\n constructor(name: string, value: any, parent: any) {\n this.parent = parent;\n this.isBoolean = (BooleanAttributes as readonly string[]).includes(name);\n if (CamelAttributes.includes(name)) {\n this.name = name\n } else {\n this.name = camelToKebab(name)\n }\n this.value = undefined;\n this.set(value);\n }\n\n render(): void {\n if (!this.parent || !this.parent.domElement) return;\n const domElement = this.parent.domElement;\n\n const mutateAttrs = [\"value\"];\n if (this.isBoolean) {\n if (this.value === false || this.value == null) {\n domElement.removeAttribute(this.name)\n } else {\n domElement.setAttribute(this.name, this.value === true ? \"\" : this.value)\n }\n } else if (this.value == null) {\n domElement.removeAttribute(this.name);\n } else if (mutateAttrs.includes(this.name)) {\n (domElement as any)[this.name] = this.value;\n } else {\n domElement.setAttribute(this.name, this.value);\n }\n }\n\n set(value: AttributeValue): void {\n let prev = this.value;\n\n if (value == null) {\n this.value = null;\n } else if (typeof value === \"string\" && /<\\/?[a-z][\\s\\S]*>/i.test(value)) {\n this.value = escapeHTML(value);\n } else if (typeof value == \"function\") {\n let listener: any = () => {\n if (!this.parent || this.parent._disposed) return;\n let p = this.value;\n this.value = this.isBoolean ? Boolean((value as Function)()) : (value as Function)();\n this.render();\n if (p !== this.value) this._notifier.notify(this.name, this.value);\n };\n\n listener.elementNode = this.parent!;\n listener.debug = `class:${this.parent?.tagName}_${this.parent?.nodeId} attribute:${this.name}`;\n\n listener.onSubscribe = (release: () => void) => {\n if (this.parent) {\n this.parent.addHook(\"BeforeRemove\", () => {\n release();\n listener = null;\n });\n }\n };\n\n this.value = this.isBoolean ? Boolean(value(listener)) : value(listener);\n } else {\n this.value = this.isBoolean ? Boolean(value) : value;\n }\n\n this.render();\n if (prev !== this.value) this._notifier.notify(this.name, this.value);\n }\n\n addListener(callback: (value: any) => void): void {\n const handler = callback as any\n handler.onSubscribe = (release: () => void) => this.parent?.addHook(\"BeforeRemove\", release);\n this._notifier.addListener(this.name, handler)\n }\n\n remove(): void {\n if (this.parent && this.parent.attributes) {\n this.parent.attributes.remove(this.name);\n }\n this._dispose();\n }\n\n _dispose(): void {\n this._notifier._dispose();\n this.value = null;\n this.parent = null as any\n }\n\n generateHTML(): string {\n const { name, value } = this;\n if (this.isBoolean) {\n return value ? `${name}` : \"\";\n } else {\n const val = Array.isArray(value) ? JSON.stringify(value) : value;\n return `${name}=\"${escapeHTML(String(val))}\"`;\n }\n }\n}\n","import type { ElementNode } from \"./ElementNode.js\";\nimport { ElementAttribute } from \"./ElementAttribute.js\";\nimport { BooleanAttributes } from \"../constants.js\";\nimport { AttributeValue } from \"../types.js\"\n\nexport class AttributeList {\n items: Record<string, ElementAttribute> | null = {};\n parent: ElementNode | null;\n\n constructor(parent: ElementNode) {\n this.parent = parent;\n }\n\n generateHTML(): string {\n if (!this.items) return \"\";\n const str = Object.values(this.items)\n .map((attr) => attr.generateHTML())\n .join(\" \");\n return str ? ` ${str}` : \"\";\n }\n\n get(name: string): any {\n if (!this.items) return undefined;\n return this.items[name]?.value;\n }\n\n set(name: string, value: AttributeValue): void {\n if (!this.items || !this.parent) return;\n if (this.items[name]) {\n this.items[name].set(value);\n } else {\n this.items[name] = new ElementAttribute(name, value, this.parent);\n }\n }\n\n addListener(name: string, callback: (value: string | number) => void): void {\n if (this.has(name)) {\n this.items![name].addListener(callback);\n }\n }\n\n has(name: string): boolean {\n if (!this.items) return false;\n return Object.prototype.hasOwnProperty.call(this.items, name);\n }\n\n remove(name: string): void {\n if (!this.items) return;\n\n if (this.items[name]) {\n this.items[name]._dispose();\n delete this.items[name];\n }\n\n if (this.parent && this.parent.domElement && this.parent.domElement instanceof Element) {\n this.parent.domElement.removeAttribute(name);\n }\n }\n\n _dispose(): void {\n if (this.items) {\n for (const key in this.items) {\n this.items[key]._dispose();\n }\n }\n this.items = null;\n this.parent = null;\n }\n\n toggle(name: string, force?: boolean): void {\n if (\n !BooleanAttributes.includes(name as (typeof BooleanAttributes)[number])\n ) {\n throw Error(`${name} is not a boolean attribute`);\n }\n if (force === true) {\n this.set(name, true);\n } else if (force === false) {\n this.remove(name);\n } else {\n this.has(name) ? this.remove(name) : this.set(name, true);\n }\n }\n\n addClass(className: string): void {\n if (!className || typeof className !== \"string\") return;\n\n const add = (classes: string, newClass: string) => {\n const list = (classes || \"\").split(\" \").filter((e: string) => e);\n !list.includes(newClass) && list.push(className)\n return list.join(\" \")\n }\n\n let current = this.get(\"class\");\n\n if (typeof current === \"function\") {\n this.set(\"class\", () => add(current(), className));\n } else {\n this.set(\"class\", add(current, className))\n }\n }\n\n hasClass(className: string): boolean {\n if (!className || typeof className !== \"string\") return false;\n const current = this.get(\"class\") || \"\";\n const list = current.split(\" \").filter((e: string) => e);\n return list.includes(className);\n }\n\n toggleClass(className: string): void {\n if (!className || typeof className !== \"string\") return;\n this.hasClass(className)\n ? this.removeClass(className)\n : this.addClass(className);\n }\n\n removeClass(className: string): void {\n if (!className || typeof className !== \"string\") return;\n const current = this.get(\"class\") || \"\";\n const list: string[] = current.split(\" \").filter((e: string) => e);\n const updated = list.filter((cls) => cls !== className);\n updated.length > 0\n ? this.set(\"class\", updated.join(\" \"))\n : this.remove(\"class\");\n }\n\n replaceClass(oldClass: string, newClass: string): void {\n if (\n !oldClass ||\n !newClass ||\n typeof oldClass !== \"string\" ||\n typeof newClass !== \"string\"\n )\n return;\n if (this.hasClass(oldClass)) {\n this.removeClass(oldClass);\n this.addClass(newClass);\n }\n }\n}\n","import { ElementNode } from \"./ElementNode.js\";\r\nimport { isHTML } from \"../helpers.js\";\r\n\r\nexport class TextNode {\r\n type = \"TextNode\"\r\n parent: ElementNode;\r\n text: string;\r\n domText?: ChildNode;\r\n\r\n constructor(textContent: string | number, parent: ElementNode) {\r\n this.parent = parent;\r\n this.text = textContent === \"\" ? \"\\u200B\" : String(textContent);\r\n }\r\n _createDOMNode() {\r\n let newNode: ChildNode;\r\n if (isHTML(this.text)) {\r\n const tpl = document.createElement(\"template\");\r\n tpl.innerHTML = this.text.trim();\r\n newNode = tpl.content.firstChild || document.createTextNode(\"\");\r\n } else {\r\n newNode = document.createTextNode(this.text);\r\n }\r\n this.domText = newNode;\r\n return newNode;\r\n }\r\n\r\n _dispose(): void {\r\n this.domText = undefined;\r\n this.text = \"\";\r\n }\r\n\r\n generateHTML(): string {\r\n return this.text === \"\\u200B\" ? \"&#8203;\" : this.text;\r\n }\r\n\r\n render(domText: ChildNode | DocumentFragment | HTMLElement): void {\r\n const newNode = this._createDOMNode();\r\n domText.appendChild(newNode);\r\n }\r\n}","import { TextNode } from \"./TextNode.js\";\r\nimport { ElementNode } from \"./ElementNode.js\";\r\nimport type { DomphyElement } from \"../types.js\";\r\nimport { ensureDomStyle } from \"../helpers.js\";\r\n\r\ntype ElementInput = DomphyElement | null | undefined | number | string\r\ntype NodeItem = ElementNode | TextNode;\r\n\r\nexport class ElementList {\r\n items: NodeItem[] = [];\r\n owner: ElementNode;\r\n _nextKey: number = 0;\r\n\r\n constructor(parent: ElementNode) {\r\n this.owner = parent;\r\n }\r\n\r\n _createNode(element: ElementInput | DomphyElement): NodeItem {\r\n return (typeof element === \"object\" && element !== null)\r\n ? new ElementNode(element, this.owner, this._nextKey++)\r\n : new TextNode(element == null ? \"\" : String(element), this.owner);\r\n }\r\n\r\n _moveDomElement(node: NodeItem, index: number) {\r\n if (!this.owner || !this.owner.domElement) return;\r\n const dom = this.owner.domElement;\r\n\r\n const el = node instanceof ElementNode ? node.domElement : node.domText;\r\n if (el) {\r\n const currentRef = dom.childNodes[index] || null;\r\n if (el !== currentRef) {\r\n dom.insertBefore(el, currentRef);\r\n }\r\n }\r\n }\r\n\r\n _swapDomElement(aNode: NodeItem, bNode: NodeItem) {\r\n if (!this.owner || !this.owner.domElement) return;\r\n const parent = this.owner.domElement;\r\n\r\n const a = aNode instanceof ElementNode ? aNode.domElement : aNode.domText;\r\n const b = bNode instanceof ElementNode ? bNode.domElement : bNode.domText;\r\n if (!a || !b) return;\r\n\r\n const aNext = a.nextSibling;\r\n const bNext = b.nextSibling;\r\n\r\n parent.insertBefore(a, bNext);\r\n parent.insertBefore(b, aNext);\r\n }\r\n\r\n update(inputs: ElementInput[], updateDom = true, silent = false): void {\r\n\r\n const oldItems = this.items.slice(); // snapshot for cleanup\r\n\r\n // keyed lookup from old list\r\n const keyed = new Map<string | number, NodeItem>();\r\n for (const item of oldItems) {\r\n if (item instanceof ElementNode && item.key !== null && item.key !== undefined) {\r\n keyed.set(item.key, item);\r\n }\r\n }\r\n\r\n if (!silent && this.owner.domElement) this.owner._hooks?.BeforeUpdate?.(this.owner, inputs);\r\n // build target order using existing ops (mutating this.items)\r\n for (let i = 0; i < inputs.length; i++) {\r\n const input = inputs[i];\r\n const key =\r\n (typeof input === \"object\" && input !== null) ? (input as any)._key : undefined;\r\n\r\n if (key !== undefined) {\r\n const reused = keyed.get(key);\r\n if (reused) {\r\n keyed.delete(key);\r\n\r\n const cur = this.items.indexOf(reused);\r\n if (cur !== i && cur >= 0) {\r\n const isPortal = reused instanceof ElementNode && !!reused._portal;\r\n this.move(cur, i, isPortal ? false : updateDom, true);\r\n }\r\n reused.parent = this.owner as any;\r\n continue;\r\n }\r\n }\r\n\r\n this.insert(input, i, updateDom, true);\r\n }\r\n\r\n while (this.items.length > inputs.length) {\r\n this.remove(this.items[this.items.length - 1], updateDom, true);\r\n }\r\n keyed.forEach((node) => this.remove(node, updateDom, true));\r\n if (!silent) this.owner._hooks?.Update?.(this.owner);\r\n }\r\n\r\n insert(input: ElementInput, index?: number, updateDom = true, silent = false): NodeItem {\r\n\r\n let length = this.items.length;\r\n const finalIndex = (typeof index !== \"number\" || isNaN(index) || index < 0 || index > length)\r\n ? length\r\n : index;\r\n const item = this._createNode(input);\r\n this.items.splice(finalIndex, 0, item);\r\n\r\n if (item instanceof ElementNode) {\r\n //Parent always insert/mount before children\r\n item._hooks.Insert && item._hooks.Insert(item)\r\n\r\n let domElement = this.owner.domElement;\r\n if (updateDom && domElement) {\r\n\r\n\r\n if (item._portal) {\r\n let domElement = item._portal!(this.owner.getRoot())\r\n domElement && item.render(domElement)\r\n } else {\r\n let domNode = item._createDOMNode();\r\n const ref = domElement.childNodes[finalIndex] ?? null;\r\n domElement.insertBefore(domNode, ref);\r\n let root = domElement.getRootNode()\r\n const styleParent = root instanceof ShadowRoot ? root : document.head\r\n let domStyle = ensureDomStyle(styleParent)\r\n item.styles.render(domStyle as HTMLStyleElement)\r\n item._hooks.Mount && item._hooks.Mount(item)\r\n item.children.items.forEach(child => {\r\n if (child instanceof ElementNode && child._portal) {\r\n let dom = child._portal!(child.getRoot())\r\n dom && child.render(dom)\r\n } else {\r\n child.render(domNode)\r\n }\r\n })\r\n }\r\n }\r\n\r\n\r\n\r\n } else {\r\n let domElement = this.owner.domElement;\r\n if (updateDom && domElement) {\r\n let domNode = item._createDOMNode();\r\n const ref = domElement.childNodes[finalIndex] ?? null;\r\n domElement.insertBefore(domNode, ref);\r\n }\r\n }\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n return item;\r\n }\r\n\r\n remove(item: NodeItem, updateDom = true, silent = false): void {\r\n\r\n const index = this.items.indexOf(item);\r\n if (index < 0) return;\r\n\r\n if (item instanceof ElementNode) {\r\n const done = () => {\r\n const el = item.domElement\r\n this.items.splice(index, 1);\r\n updateDom && el && el.remove()\r\n item._hooks?.Remove?.(item)\r\n item._dispose();\r\n }\r\n if (item._hooks.BeforeRemove && item.domElement) {\r\n let doneCalled = false;\r\n const onceDone = () => { if (!doneCalled) { doneCalled = true; done(); } };\r\n item._hooks.BeforeRemove(item, onceDone);\r\n if (!doneCalled) onceDone();\r\n } else {\r\n done()\r\n }\r\n\r\n } else {\r\n const el = item.domText\r\n this.items.splice(index, 1);\r\n updateDom && el && el.remove()\r\n item._dispose();\r\n }\r\n\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n }\r\n\r\n clear(updateDom = true, silent = false): void {\r\n if (this.items.length === 0) return;\r\n const snapshot = this.items.slice();\r\n\r\n for (const item of snapshot) {\r\n this.remove(item, updateDom, true);\r\n }\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n }\r\n\r\n _dispose(): void {\r\n this.items.forEach(child => child._dispose())\r\n this.items = [];\r\n }\r\n\r\n swap(aIndex: number, bIndex: number, updateDom = true, silent = false) {\r\n if (aIndex < 0 || bIndex < 0 ||\r\n aIndex >= this.items.length || bIndex >= this.items.length ||\r\n aIndex === bIndex) return;\r\n\r\n const itemA = this.items[aIndex];\r\n const itemB = this.items[bIndex];\r\n\r\n this.items[aIndex] = itemB;\r\n this.items[bIndex] = itemA;\r\n\r\n if (updateDom) this._swapDomElement(itemA, itemB);\r\n\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n }\r\n\r\n move(fromIndex: number, toIndex: number, updateDom = true, silent = false): void {\r\n if (fromIndex < 0 || fromIndex >= this.items.length ||\r\n toIndex < 0 || toIndex >= this.items.length || fromIndex === toIndex) return;\r\n\r\n const item = this.items[fromIndex];\r\n\r\n this.items.splice(fromIndex, 1);\r\n this.items.splice(toIndex, 0, item);\r\n\r\n if (updateDom) this._moveDomElement(item, toIndex);\r\n\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n }\r\n\r\n generateHTML(): string {\r\n let html = \"\";\r\n for (const item of this.items) html += item.generateHTML();\r\n return html;\r\n }\r\n}\r\n","import type { StyleRule } from \"./StyleRule.js\";\r\nimport type { StyleValue } from \"../types.js\";\r\nimport { camelToKebab } from \"../helpers.js\";\r\nimport { PrefixCSS } from \"../constants.js\";\r\nimport { Listener } from \"../types.js\"\r\n\r\nexport class StyleProperty {\r\n name: string;\r\n cssName: string;\r\n value: StyleValue = \"\";\r\n parentRule: StyleRule;\r\n\r\n constructor(name: string, value: StyleValue, parentRule: StyleRule) {\r\n this.name = name;\r\n this.cssName = camelToKebab(name);\r\n this.parentRule = parentRule;\r\n this.set(value);\r\n }\r\n\r\n _domUpdate(): void {\r\n if (!this.parentRule) return;\r\n const domRule = this.parentRule.domRule;\r\n\r\n if (domRule && (domRule as CSSStyleRule).style) {\r\n let style: CSSStyleDeclaration = (domRule as CSSStyleRule).style;\r\n style.setProperty(this.cssName, String(this.value));\r\n\r\n if (PrefixCSS[this.name]) {\r\n PrefixCSS[this.name].forEach((prefix) => {\r\n style.setProperty(`-${prefix}-${this.cssName}`, String(this.value));\r\n });\r\n }\r\n }\r\n }\r\n _dispose(): void {\r\n this.value = \"\";\r\n this.parentRule = null as any;\r\n }\r\n\r\n set(value: StyleValue): void {\r\n\r\n if (typeof value === \"function\") {\r\n let listener = (() => {\r\n if (!this.parentRule || this.parentRule.parentNode?._disposed) return;\r\n this.value = value(listener);\r\n this._domUpdate();\r\n }) as unknown as Listener;\r\n\r\n listener.onSubscribe = (release: () => void) => {\r\n this.parentRule.parentNode?.addHook(\"BeforeRemove\", () => {\r\n release();\r\n listener = null!;\r\n });\r\n };\r\n\r\n listener.elementNode = this.parentRule!.root!;\r\n listener.debug = `class:${this.parentRule?.root?.tagName}_${this.parentRule?.root?.nodeId} style:${this.name}`;\r\n this.value = value(listener);\r\n } else {\r\n this.value = value;\r\n }\r\n\r\n this._domUpdate();\r\n }\r\n\r\n remove(): void {\r\n if (!this.parentRule) return;\r\n\r\n if (this.parentRule.domRule instanceof CSSStyleRule) {\r\n const domStyle = this.parentRule.domRule.style;\r\n domStyle.removeProperty(this.cssName);\r\n\r\n if (PrefixCSS[this.name]) {\r\n PrefixCSS[this.name].forEach((prefix) => {\r\n domStyle.removeProperty(`-${prefix}-${this.cssName}`);\r\n });\r\n }\r\n }\r\n delete this.parentRule.styleBlock![this.name];\r\n this._dispose();\r\n }\r\n\r\n cssText(): string {\r\n let str = `${this.cssName}: ${this.value}`;\r\n if (PrefixCSS[this.name]) {\r\n PrefixCSS[this.name].forEach((prefix) => {\r\n str += `; -${prefix}-${this.cssName}: ${this.value}`;\r\n });\r\n }\r\n return str;\r\n }\r\n}","import { ElementNode } from \"./ElementNode.js\";\r\nimport { StyleProperty } from \"./StyleProperty.js\";\r\nimport { StyleList } from \"./StyleList.js\";\r\n\r\nexport class StyleRule {\r\n selectorText: string;\r\n domRule: CSSRule | CSSMediaRule | CSSKeyframesRule | null = null;\r\n styleList: StyleList | null;\r\n styleBlock: Record<string, StyleProperty> | null = {};\r\n parent: StyleRule | ElementNode | null;\r\n\r\n constructor(selectorText: string, parent: StyleRule | ElementNode) {\r\n this.selectorText = selectorText;\r\n this.styleList = new StyleList(this);\r\n this.parent = parent;\r\n }\r\n\r\n _dispose(): void {\r\n\r\n if (this.styleBlock) {\r\n for (const prop of Object.values(this.styleBlock)) {\r\n prop._dispose();\r\n }\r\n }\r\n\r\n if (this.styleList) {\r\n this.styleList._dispose();\r\n }\r\n\r\n this.styleBlock = null;\r\n this.styleList = null;\r\n this.domRule = null;\r\n this.parent = null;\r\n }\r\n\r\n get root() {\r\n let node = this.parent;\r\n while (node instanceof StyleRule) {\r\n node = node.parent;\r\n }\r\n return node;\r\n }\r\n\r\n get parentNode(): ElementNode | null {\r\n let root: any = this.parent;\r\n while (root && root instanceof StyleRule) {\r\n root = root.parent;\r\n }\r\n return root as ElementNode;\r\n }\r\n \r\n insertStyle(name: string, val: any): void {\r\n if (!this.styleBlock) return;\r\n if (this.styleBlock[name]) {\r\n this.styleBlock[name].set(val);\r\n } else {\r\n this.styleBlock[name] = new StyleProperty(name, val, this);\r\n }\r\n }\r\n\r\n removeStyle(name: string): void {\r\n if (!this.styleBlock) return;\r\n if (this.styleBlock[name]) {\r\n this.styleBlock[name].remove();\r\n }\r\n }\r\n\r\n cssText(): string {\r\n if (!this.styleBlock || !this.styleList) return \"\";\r\n const styleStr = Object.values(this.styleBlock).map(decl => decl.cssText()).join(\";\");\r\n const nested = this.styleList.cssText();\r\n return `${this.selectorText} { ${styleStr} ${nested} } `;\r\n }\r\n\r\n mount(domRule: CSSRule | CSSKeyframesRule): void {\r\n if (!domRule || !this.styleList) return;\r\n this.domRule = domRule;\r\n if (\"cssRules\" in domRule) {\r\n this.styleList.mount(domRule.cssRules as CSSRuleList);\r\n }\r\n }\r\n\r\n remove(): void {\r\n\r\n if (this.domRule && this.domRule.parentStyleSheet) {\r\n const sheet = this.domRule.parentStyleSheet;\r\n const rules = sheet.cssRules;\r\n for (let i = 0; i < rules.length; i++) {\r\n if (rules[i] === this.domRule) {\r\n sheet.deleteRule(i);\r\n break;\r\n }\r\n }\r\n }\r\n this._dispose();\r\n }\r\n\r\n render(domSheet: CSSStyleSheet | CSSGroupingRule) {\r\n if (!this.styleBlock || !this.styleList) return;\r\n const styleStr = Object.values(this.styleBlock).map(decl => decl.cssText()).join(\";\");\r\n try {\r\n if (!this.selectorText.startsWith(\"@\")) {\r\n const css = `${this.selectorText} { ${styleStr} }`;\r\n const index = domSheet.insertRule(css, domSheet.cssRules.length);\r\n const domRule = domSheet.cssRules[index];\r\n if (domRule && \"selectorText\" in domRule) {\r\n this.mount(domRule);\r\n }\r\n } else if (/^@(media|supports|container|layer)\\b/.test(this.selectorText)) {\r\n const index = domSheet.insertRule(`${this.selectorText} {}`, domSheet.cssRules.length);\r\n const domRule = domSheet.cssRules[index];\r\n if (\"cssRules\" in domRule) {\r\n this.mount(domRule as CSSGroupingRule);\r\n this.styleList.render(domRule as CSSGroupingRule);\r\n }\r\n } else if (this.selectorText.startsWith(\"@keyframes\") || this.selectorText.startsWith(\"@font-face\")) {\r\n const css = this.cssText();\r\n const index = domSheet.insertRule(css, domSheet.cssRules.length);\r\n const domRule = domSheet.cssRules[index];\r\n this.mount(domRule);\r\n }\r\n } catch (err) {\r\n console.warn(\"Failed to insert rule:\", this.selectorText, err);\r\n }\r\n }\r\n}","import { ElementNode } from \"./ElementNode.js\";\r\nimport { selectorSplitter } from \"../helpers.js\";\r\nimport { StyleRule } from \"./StyleRule.js\";\r\n\r\nexport class StyleList {\n parent: StyleRule | ElementNode | null;\n items: StyleRule[] = [];\n domStyle: HTMLStyleElement | null = null;\n\r\n constructor(parent: StyleRule | ElementNode) {\r\n this.parent = parent;\r\n }\r\n\r\n get parentNode(): ElementNode | null {\r\n let root: any = this.parent;\r\n while (root && root instanceof StyleRule) {\r\n root = root.parent;\r\n }\r\n return root as ElementNode;\r\n }\r\n\r\n addCSS(obj: Record<string, any>, parentSelector: string = \"\"): void {\n if (!this.items || !this.parent) return;\n const basic: Record<string, any> = {};\r\n\r\n function getSelector(selector: string, prev: string): string {\r\n return selector.startsWith(\"&\")\r\n ? `${prev}${selector.slice(1)}`\r\n : `${prev} ${selector}`;\r\n }\r\n\r\n for (const selector in obj) {\r\n const value = obj[selector];\r\n let splitKeys = selectorSplitter(selector);\r\n for (let key of splitKeys) {\r\n const currentSelector = getSelector(key, parentSelector);\r\n if (/^@(container|layer|supports|media)\\b/.test(key)) {\r\n if (typeof value === \"object\" && value != null) {\r\n const rule = new StyleRule(key, this.parent);\r\n rule.styleList!.addCSS(value, parentSelector);\r\n this.items.push(rule);\n }\r\n } else if (key.startsWith(\"@keyframes\")) {\r\n const rule = new StyleRule(key, this.parent);\r\n rule.styleList!.addCSS(value, \"\");\r\n this.items.push(rule);\n } else if (key.startsWith(\"@font-face\")) {\r\n const rule = new StyleRule(key, this.parent);\r\n for (const k in value) rule.insertStyle(k, value[k]);\r\n this.items.push(rule);\n } else if (typeof value === \"object\" && value != null) {\r\n const rule = new StyleRule(currentSelector, this.parent);\r\n this.items.push(rule);\n for (const [k, v] of Object.entries(value)) {\r\n if (typeof v === \"object\" && v != null) {\r\n let newSelector = getSelector(k, currentSelector);\r\n if (k.startsWith(\"&\")) {\r\n this.addCSS(v, newSelector);\r\n } else {\r\n const r = rule.styleList!.insertRule(newSelector);\r\n r.styleList!.addCSS(v, newSelector);\r\n }\r\n } else {\r\n rule.insertStyle(k, v);\r\n }\r\n }\r\n } else {\r\n basic[key] = value;\r\n }\r\n }\r\n }\r\n\r\n if (Object.keys(basic).length) {\r\n const rule = new StyleRule(parentSelector, this.parent);\r\n for (const key in basic) rule.insertStyle(key, basic[key]);\r\n this.items.push(rule);\n }\n }\n\n cssText(): string {\n if (!this.items) return \"\";\n return this.items.map((rule) => rule.cssText()).join(\"\");\n }\n\n insertRule(selector: string): StyleRule {\n if (!this.items || !this.parent) return null as any;\n let rule = this.items.find((rule) => rule.selectorText === selector);\n if (!rule) {\n rule = new StyleRule(selector, this.parent);\n this.items.push(rule);\n }\n return rule;\n }\n\n mount(domRuleList: CSSRuleList): void {\n if (!this.items) return;\n if (!domRuleList) throw Error(\"Require domRuleList argument\");\n let wrongCount = 0;\n const fixOddEven = (css: string) => css.replace(\"(odd)\", \"(2n+1)\").replace(\"(even)\", \"(2n)\");\n\n this.items.forEach((rule, i) => {\n const index = i - wrongCount;\r\n const domRule = domRuleList[index];\r\n if (!domRule) return;\r\n if (rule.selectorText.startsWith(\"@\") && domRule instanceof CSSKeyframesRule) {\r\n rule.mount(domRule);\r\n } else if (\"keyText\" in domRule) {\r\n rule.mount(domRule);\r\n } else if (\"selectorText\" in domRule) {\r\n if (domRule.selectorText !== fixOddEven(rule.selectorText)) {\r\n wrongCount += 1;\r\n } else {\r\n rule.mount(domRule);\r\n }\r\n } else if (\"cssRules\" in domRule) {\r\n rule.mount(domRule as CSSMediaRule);\r\n }\r\n });\r\n }\r\n\r\n render(dom: HTMLStyleElement | CSSGroupingRule) {\n if (dom instanceof HTMLStyleElement) {\n this.domStyle = dom\n this.items.forEach((rule) => rule.render(dom.sheet!));\n } else if (dom instanceof CSSGroupingRule) {\n this.items.forEach((rule) => rule.render(dom));\n }\n }\n\n _dispose(): void {\n\n if (this.items) {\n for (let i = 0; i < this.items.length; i++) {\n this.items[i]._dispose();\n }\n }\n\n this.items = [];\n this.parent = null;\n this.domStyle = null;\n }\n}\n","import type { DomphyElement, EventName, HookMap, TagName, PartialElement } from \"../types.js\";\r\nimport { AttributeList } from \"./AttributeList.js\";\r\nimport { ElementList } from \"./ElementList.js\";\r\nimport { StyleList } from \"./StyleList.js\";\r\nimport { validate, mergePartial, getTagName, deepClone, ensureDomStyle } from \"../helpers.js\";\r\nimport { merge, hashString } from \"../utils.js\";\r\nimport { SvgTags } from \"../constants.js\"\r\n\r\nexport class ElementNode {\r\n _disposed = false\r\n type = \"ElementNode\"\r\n parent: ElementNode | null = null;\r\n _portal?: (root: ElementNode) => HTMLElement;\r\n tagName: TagName;\r\n children = new ElementList(this);\r\n styles = new StyleList(this);\r\n attributes = new AttributeList(this);\r\n domElement?: HTMLElement | null = null;\r\n _hooks: HookMap = {};\r\n _events?: { [K in EventName]?: (event: Event, node: ElementNode) => void } | null = null;\r\n _context?: Record<string, any> = {};\r\n _metadata?: Record<string, any> = {};\r\n key?: string | number | null = null;\r\n nodeId: string\r\n\r\n constructor(domphyElement: DomphyElement, _parent: ElementNode | null = null, index = 0) {\r\n domphyElement = deepClone(domphyElement)\r\n validate(domphyElement)\r\n domphyElement.style = domphyElement.style || {}\r\n this.parent = _parent;\r\n this.tagName = getTagName(domphyElement) as TagName;\r\n domphyElement = mergePartial(domphyElement) as DomphyElement\r\n\r\n this.key = (domphyElement as any)._key ?? null;\r\n this._context = domphyElement._context || {}\r\n this._metadata = domphyElement._metadata || {}\r\n\r\n let tempPath = `${this.parent?.nodeId}.${index}`\r\n const str = JSON.stringify(domphyElement.style || {}, (k, v) => typeof v === \"function\" ? tempPath : v,);\r\n this.nodeId = hashString(tempPath + str)\r\n\r\n this.attributes!.addClass(`${this.tagName}_${this.nodeId}`);\r\n if (domphyElement._onSchedule) domphyElement._onSchedule(this, domphyElement)\r\n\r\n this.merge(domphyElement)\r\n\r\n const children = (domphyElement as any)[this.tagName];\r\n\r\n if (children != null && children != undefined) {\r\n if (typeof children === \"function\") {\r\n\r\n let listener: any = () => {\r\n if (this._disposed) return\r\n let input = children(listener)\r\n this.children!.update(Array.isArray(input) ? input : [input])\r\n }\r\n\r\n listener!.elementNode = this;\r\n listener!.debug = `class:${this.tagName}_${this.nodeId} children`;\r\n listener!.onSubscribe = (release: () => void) => this.addHook(\"BeforeRemove\", () => {\r\n release()\r\n listener = null\r\n });\r\n listener && listener();\r\n } else {\r\n this.children!.update(Array.isArray(children) ? children : [children])\r\n }\r\n }\r\n this._hooks.Init && this._hooks.Init(this)\r\n }\r\n\r\n _createDOMNode() {\r\n const svgNamespace = \"http://www.w3.org/2000/svg\"\r\n let node = SvgTags.includes(this.tagName)\r\n ? document.createElementNS(svgNamespace, this.tagName)\r\n : document.createElement(this.tagName)\r\n\r\n this.domElement = node as HTMLElement\r\n\r\n if (this._events) {\r\n for (const key in this._events) {\r\n const eventName = key as EventName;\r\n const handler = this._events[eventName] as (event: Event, node: ElementNode) => void;\r\n let fn: any = (event: Event) => handler(event, this)\r\n node.addEventListener(eventName, fn)\r\n this.addHook(\"BeforeRemove\", (n) => {\r\n n.domElement!.removeEventListener(eventName, fn)\r\n fn = null\r\n })\r\n }\r\n }\r\n\r\n if (this.attributes) {\r\n Object.values(this.attributes.items!).forEach(attr => attr.render())\r\n }\r\n return node\r\n }\r\n\r\n _dispose(): void {\r\n this._disposed = true\r\n if (this.children) {\r\n \r\n this.children._dispose();\r\n }\r\n\r\n if (this.styles) {\r\n this.styles.items!.forEach((rule) => rule.remove());\r\n this.styles._dispose();\r\n }\r\n\r\n if (this.attributes) {\r\n this.attributes._dispose();\r\n }\r\n\r\n this.domElement = null;\r\n this._hooks = {};\r\n this._events = null;\r\n this._context = {};\r\n this._metadata = {};\r\n this.parent = null;\r\n }\r\n merge(part: PartialElement) {\r\n merge(this._context, part._context)\r\n merge(this._metadata, part._metadata)\r\n\r\n const keys = Object.keys(part)\r\n for (let i = 0; i < keys.length; i++) {\r\n const originalKey = keys[i];\r\n const value = (part as any)[originalKey];\r\n if ([\"$\", \"_onSchedule\", \"_key\", \"_context\", \"_metadata\", \"style\", this.tagName].includes(originalKey)) {\r\n continue\r\n } else if ([\"_onInit\", \"_onInsert\", \"_onMount\", \"_onBeforeUpdate\", \"_onUpdate\", \"_onBeforeRemove\", \"_onRemove\"].includes(originalKey)) {\r\n this.addHook(originalKey.substring(3) as keyof HookMap, value);\r\n } else if (originalKey.startsWith(\"on\")) {\r\n this.addEvent(originalKey.substring(2).toLowerCase() as EventName, value);\r\n } else if (originalKey == \"_portal\") {\r\n this._portal = value\r\n } else if (originalKey == \"class\" && typeof value === \"string\") {\r\n this.attributes!.addClass(value);\r\n } else {\r\n this.attributes!.set(originalKey, value);\r\n }\r\n }\r\n if (part.style) {\r\n this.styles.addCSS(part.style || {}, `.${`${this.tagName}_${this.nodeId}`}`);\r\n }\r\n\r\n }\r\n addEvent(name: EventName, callback: (event: Event, node: ElementNode) => void): void {\r\n\r\n this._events = this._events || {}\r\n\r\n let current = this._events[name]\r\n if (typeof current == \"function\") {\r\n this._events[name] = (event: Event, node: ElementNode) => {\r\n current!(event, node)\r\n callback(event, node)\r\n }\r\n } else {\r\n this._events[name] = callback\r\n }\r\n }\r\n\r\n addHook<K extends keyof HookMap>(name: K, callback: HookMap[K]): void {\r\n const current = this._hooks[name];\r\n\r\n if (typeof current === \"function\") {\r\n this._hooks[name] = ((...args: any[]) => {\r\n (current as Function)(...args);\r\n (callback as Function)(...args);\r\n }) as HookMap[K];\r\n } else {\r\n this._hooks[name] = callback;\r\n }\r\n }\r\n getRoot(): ElementNode {\r\n let root: ElementNode = this;\r\n while (root && root instanceof ElementNode && root.parent) {\r\n root = root.parent;\r\n }\r\n return root\r\n }\r\n\r\n getContext(name: string): any {\r\n let node: ElementNode | null = this;\r\n while (node && (!node._context || !Object.prototype.hasOwnProperty.call(node._context, name))) {\r\n node = node.parent;\r\n }\r\n return node && node._context ? node._context[name] : undefined;\r\n }\r\n\r\n setContext(name: string, value: any) {\r\n this._context = this._context || {}\r\n this._context[name] = value;\r\n }\r\n\r\n getMetadata(name: string): any {\r\n return this._metadata ? this._metadata[name] : undefined;\r\n }\r\n\r\n setMetadata(key: string, value: any) {\r\n this._metadata = this._metadata || {}\r\n this._metadata[key] = value;\r\n\r\n }\r\n\r\n generateCSS(): string {\r\n if (!this.styles || !this.children) return \"\";\r\n let css = this.styles.cssText()\r\n css += this.children.items.map(child => child instanceof ElementNode ? child.generateCSS() : \"\").join(\"\")\r\n return css\r\n }\r\n\r\n generateHTML(): string {\r\n if (!this.children || !this.attributes) return \"\";\r\n let content = this.children.generateHTML();\r\n const attributes = this.attributes.generateHTML();\r\n return `<${this.tagName}${attributes}>${content}</${this.tagName}>`;\r\n }\r\n\r\n mount(domElement: HTMLElement, domStyle?: HTMLStyleElement): void {\r\n if (!domElement) throw new Error(\"Missing dom node on bind\");\r\n this.domElement = domElement;\r\n\r\n if (this._events) {\r\n for (const key in this._events) {\r\n const eventName = key as EventName;\r\n const handler = this._events[eventName] as (event: Event, node: ElementNode) => void;\r\n let fn: any = (event: Event) => handler(event, this)\r\n domElement.addEventListener(eventName, fn)\r\n this.addHook(\"BeforeRemove\", (n) => {\r\n n.domElement!.removeEventListener(eventName, fn)\r\n fn = null\r\n })\r\n }\r\n }\r\n\r\n if (this.children) {\r\n this.children.items.forEach((child, i) => {\r\n const childNode = domElement.childNodes[i];\r\n if (childNode instanceof Node && child instanceof ElementNode) {\r\n child.mount(childNode as HTMLElement, domStyle);\r\n }\r\n });\r\n }\r\n\r\n this._hooks.Mount && this._hooks.Mount(this)\r\n }\r\n\r\n render(domElement: HTMLElement | SVGElement | DocumentFragment): HTMLElement | SVGElement {\r\n const newNode = this._createDOMNode();\r\n domElement.appendChild(newNode)\r\n this._hooks.Mount && this._hooks.Mount(this)\r\n let domStyle = this.getRoot().styles.domStyle\r\n let root = domElement.getRootNode()\r\n const styleParent = root instanceof ShadowRoot ? root : document.head\r\n domStyle ||= ensureDomStyle(styleParent)\r\n this.styles.render(domStyle as HTMLStyleElement)\r\n this.children.items.forEach(child => {\r\n if (child instanceof ElementNode && child._portal) {\r\n let dom = child._portal!(this.getRoot())\r\n dom && child.render(dom)\r\n } else {\r\n child.render(newNode)\r\n }\r\n })\r\n return newNode;\r\n }\r\n\r\n remove() {\r\n if (this.parent) {\r\n this.parent.children.remove(this)\r\n\r\n } else {\r\n this.domElement?.remove()\r\n this._dispose();\r\n }\r\n }\r\n}\r\n","import { Notifier } from \"./Notifier.js\"\r\n\r\ntype Listener = (...args: any[]) => void\r\n\r\nexport class RecordState<T extends Record<string, any> = Record<string, any>> {\r\n private _notifier = new Notifier()\r\n private _record: T\r\n readonly initialRecord: T\r\n\r\n constructor(record: T) {\r\n this.initialRecord = { ...record }\r\n this._record = { ...record }\r\n }\r\n\r\n get<K extends keyof T>(key: K, l?: Listener): T[K] {\r\n if (l) this._notifier.addListener(key as string, l)\r\n return this._record[key]\r\n }\r\n\r\n set<K extends keyof T>(key: K, value: T[K]): void {\r\n this._record[key] = value\r\n this._notifier.notify(key as string)\r\n }\r\n\r\n addListener<K extends keyof T>(key: K, fn: Listener): () => void {\r\n return this._notifier.addListener(key as string, fn)\r\n }\r\n\r\n removeListener<K extends keyof T>(key: K, fn: Listener): void {\r\n this._notifier.removeListener(key as string, fn)\r\n }\r\n\r\n reset<K extends keyof T>(key: K): void {\r\n this.set(key, this.initialRecord[key])\r\n }\r\n\r\n _dispose(): void {\r\n this._notifier._dispose()\r\n }\r\n}\r\n","export * from \"./size.js\"\nexport * from \"./density.js\"\nexport * from \"./tone.js\"\nexport * from \"./theme.js\"\n","import { ThemeInput } from \"./types.js\";\r\n\r\nlet light: ThemeInput = {\r\n direction: \"darken\",\r\n colors: {\r\n \"primary\": [\r\n \"#ffffff\",\r\n \"#e3ecff\",\r\n \"#c6daff\",\r\n \"#aac8ff\",\r\n \"#8fb6ff\",\r\n \"#76a3ff\",\r\n \"#5f91fc\",\r\n \"#4a7ff4\",\r\n \"#386ee7\",\r\n \"#2a5ed7\",\r\n \"#1e4ec2\",\r\n \"#1440aa\",\r\n \"#0c3290\",\r\n \"#072674\",\r\n \"#041a57\",\r\n \"#020f38\",\r\n \"#010419\",\r\n \"#000000\"\r\n ],\r\n \"secondary\": [\r\n \"#ffffff\",\r\n \"#fce6ea\",\r\n \"#faced6\",\r\n \"#f7b5c2\",\r\n \"#f29db0\",\r\n \"#ec859e\",\r\n \"#e36e8d\",\r\n \"#d8597d\",\r\n \"#ca456e\",\r\n \"#b93460\",\r\n \"#a42351\",\r\n \"#8e1643\",\r\n \"#770b36\",\r\n \"#5f0529\",\r\n \"#46031d\",\r\n \"#2d0210\",\r\n \"#130104\",\r\n \"#000000\"\r\n ],\r\n \"info\": [\r\n \"#ffffff\",\r\n \"#dcf0f9\",\r\n \"#b7e1f6\",\r\n \"#90d2f1\",\r\n \"#6ac3eb\",\r\n \"#42b4e2\",\r\n \"#16a4d5\",\r\n \"#0094c4\",\r\n \"#0084b2\",\r\n \"#00739e\",\r\n \"#00638a\",\r\n \"#005476\",\r\n \"#004461\",\r\n \"#00354d\",\r\n \"#002638\",\r\n \"#001623\",\r\n \"#00070d\",\r\n \"#000000\"\r\n ],\r\n \"success\": [\r\n \"#ffffff\",\r\n \"#e3f3dc\",\r\n \"#c6e8b8\",\r\n \"#a9dd94\",\r\n \"#8ed171\",\r\n \"#75c450\",\r\n \"#61b635\",\r\n \"#51a51f\",\r\n \"#429304\",\r\n \"#358100\",\r\n \"#2a7000\",\r\n \"#215f00\",\r\n \"#194d00\",\r\n \"#123c00\",\r\n \"#0b2b00\",\r\n \"#051a00\",\r\n \"#010900\",\r\n \"#000000\"\r\n ],\r\n \"warning\": [\r\n \"#ffffff\",\r\n \"#ffeada\",\r\n \"#ffd3b3\",\r\n \"#ffbd8d\",\r\n \"#ffa96b\",\r\n \"#ff9853\",\r\n \"#ec8640\",\r\n \"#d77531\",\r\n \"#c16523\",\r\n \"#aa5718\",\r\n \"#944a0f\",\r\n \"#7e3d09\",\r\n \"#673106\",\r\n \"#512504\",\r\n \"#3b1a03\",\r\n \"#250e02\",\r\n \"#0e0401\",\r\n \"#000000\"\r\n ],\r\n \"attention\": [\r\n \"#ffffff\",\r\n \"#ffeada\",\r\n \"#ffd3b3\",\r\n \"#ffbd8d\",\r\n \"#ffa96b\",\r\n \"#ff9853\",\r\n \"#ec8640\",\r\n \"#d77531\",\r\n \"#c16523\",\r\n \"#aa5718\",\r\n \"#944a0f\",\r\n \"#7e3d09\",\r\n \"#673106\",\r\n \"#512504\",\r\n \"#3b1a03\",\r\n \"#250e02\",\r\n \"#0e0401\",\r\n \"#000000\"\r\n ],\r\n \"error\": [\r\n \"#ffffff\",\r\n \"#fce7e4\",\r\n \"#fbcfca\",\r\n \"#f8b7b0\",\r\n \"#f59f96\",\r\n \"#ef877e\",\r\n \"#e86f67\",\r\n \"#de5852\",\r\n \"#d3403e\",\r\n \"#c5282c\",\r\n \"#b30a1b\",\r\n \"#9e000b\",\r\n \"#860001\",\r\n \"#6c0000\",\r\n \"#510000\",\r\n \"#340000\",\r\n \"#170000\",\r\n \"#000000\"\r\n ],\r\n \"danger\": [\r\n \"#ffffff\",\r\n \"#fce7e4\",\r\n \"#fbcfca\",\r\n \"#f8b7b0\",\r\n \"#f59f96\",\r\n \"#ef877e\",\r\n \"#e86f67\",\r\n \"#de5852\",\r\n \"#d3403e\",\r\n \"#c5282c\",\r\n \"#b30a1b\",\r\n \"#9e000b\",\r\n \"#860001\",\r\n \"#6c0000\",\r\n \"#510000\",\r\n \"#340000\",\r\n \"#170000\",\r\n \"#000000\"\r\n ],\r\n \"highlight\": [\r\n \"#ffffff\",\r\n \"#f9f5cd\",\r\n \"#f4eb95\",\r\n \"#efe05a\",\r\n \"#e6d427\",\r\n \"#d3c100\",\r\n \"#bfad00\",\r\n \"#ab9b00\",\r\n \"#988900\",\r\n \"#857700\",\r\n \"#736600\",\r\n \"#615600\",\r\n \"#4f4600\",\r\n \"#3e3600\",\r\n \"#2c2700\",\r\n \"#1b1700\",\r\n \"#090700\",\r\n \"#000000\"\r\n ],\r\n \"neutral\": [\r\n \"#ffffff\",\r\n \"#ededed\",\r\n \"#dbdbdb\",\r\n \"#cacaca\",\r\n \"#bababa\",\r\n \"#ababab\",\r\n \"#9b9b9b\",\r\n \"#8d8d8d\",\r\n \"#7e7e7e\",\r\n \"#707070\",\r\n \"#636363\",\r\n \"#565656\",\r\n \"#484848\",\r\n \"#383838\",\r\n \"#282828\",\r\n \"#181818\",\r\n \"#080808\",\r\n \"#000000\"\r\n ]\r\n },\r\n baseTones: {\r\n highlight: 5,\r\n warning: 6,\r\n error: 8,\r\n danger: 8,\r\n secondary: 8,\r\n primary: 9,\r\n info: 8,\r\n success: 8,\r\n neutral: 8,\r\n },\r\n fontSizes: [\"0.75rem\", \"0.875rem\", \"1rem\", \"1.25rem\", \"1.5625rem\", \"1.9375rem\", \"2.4375rem\", \"3.0625rem\"],\r\n densities: [0.75, 1, 1.5, 2, 2.5],\r\n darkBias: 1,\r\n custom: {},\r\n}\r\n\r\nexport default light\r\n","import { ElementNode, Listener } from \"@domphy/core\";\r\nimport { ThemeInput, ThemeVars } from \"./types.js\";\r\nimport light from \"./light.js\";\r\n\r\nconst themes: Record<string, ThemeInput> = {\r\n light: JSON.parse(JSON.stringify(light)),\r\n dark: createDark(light),\r\n};\r\n\r\nfunction colorSteps(input: ThemeInput): number {\r\n const firstColor = Object.keys(input.colors)[0];\r\n return firstColor ? input.colors[firstColor].length : 0;\r\n}\r\n\r\n// --- Validation ---\r\n\r\nfunction validateTheme(partial: Partial<ThemeInput>): void {\r\n for (let key in partial) {\r\n if (!Object.keys(light).includes(key as keyof ThemeInput)) {\r\n throw new Error(`Invalid key: ${key}`);\r\n }\r\n }\r\n if (partial.fontSizes && !Array.isArray(partial.fontSizes)) {\r\n throw new Error(`fontSize must be array of string`);\r\n }\r\n if (partial.densities) {\r\n if (!Array.isArray(partial.densities) || partial.densities.some(v => typeof v !== \"number\")) {\r\n throw new Error(`densities must be array of number`);\r\n }\r\n }\r\n if (\"custom\" in partial) {\r\n const custom = partial.custom!;\r\n if (typeof custom !== \"object\" || custom === null) {\r\n throw new Error(`Invalid custom property: must be an object`);\r\n }\r\n }\r\n}\r\n\r\n// --- Deep Merge ---\r\n\r\nfunction deepMerge(target: any, source: any): void {\r\n for (const key in source) {\r\n if (\r\n source[key] &&\r\n typeof source[key] === \"object\" &&\r\n !Array.isArray(source[key])\r\n ) {\r\n target[key] ??= {};\r\n deepMerge(target[key], source[key]);\r\n } else {\r\n target[key] = source[key];\r\n }\r\n }\r\n}\r\n\r\n// --- Builders (pure functions) ---\r\n\r\nfunction buildThemeCSS(name: string, input: ThemeInput): string {\r\n const styles: Record<string, string | number> = {};\r\n const toneSteps = colorSteps(input);\r\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const colorName in input.colors) {\r\n [...Array(toneSteps).keys()].forEach(i =>\r\n styles[`--${colorName}-${i}`] = input.colors[colorName][i]\r\n );\r\n }\r\n } else if (key === \"fontSizes\") {\r\n [...Array(8).keys()].forEach(i =>\r\n styles[`--fontSize-${i}`] = input.fontSizes[i]\r\n );\r\n } else if (key === \"densities\") {\r\n continue;\r\n } else {\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n styles[`--${key}-${k.replace(\"/\", \"_\")}`] = (value as Record<string, string>)[k];\r\n }\r\n }\r\n }\r\n }\r\n\r\n let text = \"\";\r\n for (const prop in styles) {\r\n text += ` ${prop}: ${styles[prop]};\\n`;\r\n }\r\n return `[data-theme=\"${name}\"] {\\n${text}}`;\r\n}\r\n\r\n// --- Public API ---\r\n\r\nexport function getTheme(name: string): ThemeInput {\r\n if (!themes[name]) throw Error(`Theme \"${name}\" not found`);\r\n return themes[name];\r\n}\r\n\r\nexport function setTheme(name: string, input: Partial<ThemeInput>): void {\r\n validateTheme(input);\r\n if (!themes[name]) themes[name] = structuredClone(light);\r\n deepMerge(themes[name], input);\r\n}\r\n\r\nfunction createDark(source: ThemeInput): ThemeInput {\r\n let dark = structuredClone(source)\r\n dark.direction = \"lighten\"\r\n for (let name in dark.colors) {\r\n dark.colors[name].reverse()\r\n dark.baseTones[name] = dark.colors[name].length - 1 - dark.baseTones[name]\r\n }\r\n return dark\r\n}\r\n\r\nexport function themeTokens(name: string): Record<string, any> {\r\n let input = getTheme(name)\r\n const toneSteps = colorSteps(input);\r\n let tokens: Record<string, any> = {};\r\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const name in input.colors) {\r\n let colorTones = {} as Partial<Record<number, string>>;\r\n [...Array(toneSteps).keys()].forEach(i => colorTones[i] = input.colors[name][i]);\r\n tokens[name] = colorTones as Record<number, string>;\r\n }\r\n } else if (key === \"fontSizes\") {\r\n tokens.fontSizes = input.fontSizes;\r\n } else if (key === \"densities\") {\r\n tokens.densities = input.densities;\r\n } else {\r\n tokens[key] = {} as any;\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n tokens[key][k] = (value as Record<string, string>)[k];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return tokens;\r\n}\r\n\r\nexport function themeVars(): ThemeVars {\r\n let input = getTheme(\"light\")\r\n const toneSteps = colorSteps(input);\r\n let theme = {} as ThemeVars;\r\n\r\n for (const key in input) {\r\n const section = key as keyof ThemeVars;\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const name in input.colors) {\r\n let colorTones = {} as Partial<Record<number, string>>;\r\n [...Array(toneSteps).keys()].forEach(i => colorTones[i] = `var(--${name}-${i})`);\r\n theme[name] = colorTones as Record<number, string>;\r\n }\r\n } else if (key === \"fontSizes\") {\r\n theme.fontSizes = [...Array(8).keys()].map(i => `var(--fontSize-${i})`);\r\n } else if (key === \"densities\") {\r\n continue;\r\n } else {\r\n theme[section] = {} as ThemeVars[typeof section];\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n (theme[section] as Record<string, string>)[k] = `var(--${section as string}-${k.replace(\"/\", \"_\")})`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return theme;\r\n}\r\n\r\nexport function themeCSS(): string {\r\n return Object.entries(themes)\r\n .map(([name, input]) => buildThemeCSS(name, input))\r\n .join(\"\\n\")\r\n}\r\n\r\nexport function themeApply(el?: HTMLStyleElement): void {\r\n if (typeof document === \"undefined\") return\r\n if (el) {\r\n el.textContent = themeCSS()\r\n return\r\n } else {\r\n el = document.getElementById(\"domphy-themes\") as HTMLStyleElement\r\n ?? Object.assign(document.createElement(\"style\"), { id: \"domphy-themes\" })\r\n el.textContent = themeCSS()\r\n document.head.appendChild(el)\r\n }\r\n\r\n}\r\n\r\nexport function themeSpacing(n: number) {\r\n return n / 4 + \"em\"\r\n}\r\n\r\nexport function themeName(object: ElementNode | Listener) {\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n let node: ElementNode = elementNode;\r\n while (node && (!node.attributes || !node.attributes.get(\"dataTheme\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let themeName = \"light\"\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataTheme\")) {\r\n themeName = node.attributes.get(\"dataTheme\")\r\n typeof object == \"function\" && node.attributes.addListener(\"dataTheme\", object)\r\n }\r\n return themeName\r\n}\r\n\r\nexport type ThemeColor = keyof ThemeInput[\"colors\"]\r\n","import type { ElementNode, Listener } from \"@domphy/core\";\nimport { themeVars } from \"./theme.js\";\n\nconst ElementSizes = [\"inherit\"];\n\n[...Array(8).keys()].forEach(i =>{\n ElementSizes.push(`decrease-${i}`)\n ElementSizes.push(`increase-${i}`)\n})\n\nexport type ElementSize = typeof ElementSizes[number];\n\nfunction offsetSize(origin: number, size: ElementSize = \"inherit\"): number {\n\n if (!ElementSizes.includes(size!)) {\n throw Error(`size name \"${size}\" invalid`)\n }\n let resultSize: number\n if (size == \"inherit\") {\n resultSize = origin as number\n } else if (size?.startsWith(\"increase-\")) {\n let offset = parseInt(size.replace(\"increase-\", \"\"), 10)\n resultSize = origin + offset;\n } else if (size?.startsWith(\"decrease-\")) {\n let offset = parseInt(size.replace(\"decrease-\", \"\"), 10)\n resultSize = origin - offset;\n } else {\n resultSize = origin\n }\n return Math.max(0, Math.min(8, resultSize))\n}\n\nfunction contextSize(object: ElementNode | Listener | null): number {\n\n if (!object) return 2\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataSize\"))) {\n node = node.parent as ElementNode\n }\n\n let size = 2\n\n if (node && node.attributes && node.attributes.has(\"dataSize\")) {\n size = offsetSize(size, node.attributes.get(\"dataSize\"))\n typeof object == \"function\" && node.attributes.addListener(\"dataSize\", object)\n }\n return size\n}\n\n\nexport function themeSize(object: ElementNode | Listener, size: ElementSize = \"inherit\"): string {\n let index = offsetSize(contextSize(object), size)\n return themeVars().fontSizes[index]\n}","import type { ElementNode, Listener } from \"@domphy/core\";\nimport { getTheme, themeName } from \"./theme.js\";\n\nconst ElementDensities = [\"inherit\"];\n\n[...Array(5).keys()].forEach(i => {\n ElementDensities.push(`decrease-${i}`);\n ElementDensities.push(`increase-${i}`);\n});\n\nexport type ElementDensity = typeof ElementDensities[number];\n\nfunction offsetDensity(origin: number, density: ElementDensity = \"inherit\"): number {\n\n if (!ElementDensities.includes(density!)) {\n throw Error(`density name \"${density}\" invalid`);\n }\n let resultDensity: number;\n if (density == \"inherit\") {\n resultDensity = origin as number;\n } else if (density?.startsWith(\"increase-\")) {\n let offset = parseInt(density.replace(\"increase-\", \"\"), 10);\n resultDensity = origin + offset;\n } else if (density?.startsWith(\"decrease-\")) {\n let offset = parseInt(density.replace(\"decrease-\", \"\"), 10);\n resultDensity = origin - offset;\n } else {\n resultDensity = origin;\n }\n return Math.max(0, Math.min(4, resultDensity));\n}\n\nfunction contextDensity(object: ElementNode | Listener | null): number {\n\n if (!object) return 2;\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode;\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataDensity\"))) {\n node = node.parent as ElementNode;\n }\n\n let density = 2;\n\n if (node && node.attributes && node.attributes.has(\"dataDensity\")) {\n density = offsetDensity(density, node.attributes.get(\"dataDensity\"));\n typeof object == \"function\" && node.attributes.addListener(\"dataDensity\", object);\n }\n return density;\n}\n\nexport function themeDensity(object: ElementNode | Listener | null): number {\n let index = contextDensity(object);\n return getTheme(object ? themeName(object) : \"light\").densities[index];\n}\n","import { themeVars, themeTokens, getTheme, themeName } from \"./theme.js\"\r\nimport light from \"./light.js\";\r\nimport type { Listener, ElementNode } from \"@domphy/core\";\r\n\r\nconst TONE_STEPS = light.colors.neutral.length\r\n\r\nconst ElementTones = [\"inherit\", \"base\"];\r\n\r\n[...Array(TONE_STEPS).keys()].forEach(i => {\r\n ElementTones.push(`decrease-${i}`)\r\n ElementTones.push(`increase-${i}`)\r\n ElementTones.push(`shift-${i}`)\r\n})\r\n\r\nexport type ElementTone = typeof ElementTones[number];\r\n\r\nfunction adjustTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let newIndex = tone + level;\r\n newIndex = Math.max(0, Math.min(TONE_STEPS - 1, newIndex));\r\n return newIndex\r\n}\r\n\r\nfunction shiftTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let midpoint = Math.floor((TONE_STEPS - 1) / 2)\r\n let newIndex = tone <= midpoint ? tone + level : tone - level\r\n newIndex = newIndex < 0 || newIndex > TONE_STEPS - 1 ? - newIndex : newIndex\r\n newIndex = Math.max(0, Math.min(TONE_STEPS - 1, newIndex));\r\n return newIndex\r\n}\r\n\r\nfunction offsetTone(originTone: number, tone: ElementTone = \"inherit\"): number {\r\n\r\n if (typeof tone == \"number\") return tone\r\n\r\n if (tone == \"inherit\") return originTone\r\n\r\n if (!ElementTones.includes(tone!)) {\r\n throw Error(`tone name \"${tone}\" invalid`)\r\n }\r\n\r\n if (tone.startsWith(\"increase-\")) {\r\n let offset = parseInt(tone.replace(\"increase-\", \"\"), 10)\r\n return adjustTone(originTone, offset);\r\n\r\n } else if (tone.startsWith(\"decrease-\")) {\r\n let offset = parseInt(tone.replace(\"decrease-\", \"\"), 10)\r\n return adjustTone(originTone, - offset);\r\n\r\n } else if (tone.startsWith(\"shift-\")) {\r\n let offset = parseInt(tone.replace(\"shift-\", \"\"), 10)\r\n return shiftTone(originTone, offset);\r\n\r\n } else {\r\n return originTone\r\n }\r\n}\r\n\r\nfunction contextTone(object: ElementNode | Listener | null): number {\r\n\r\n if (!object) return 0\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n let node: ElementNode = elementNode;\r\n while (node && (!node.attributes || !node.attributes.get(\"dataTone\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let tone = 0\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataTone\")) {\r\n tone = offsetTone(tone, node.attributes.get(\"dataTone\"))\r\n typeof object == \"function\" && node.attributes.addListener(\"dataTone\", object)\r\n }\r\n return tone\r\n}\r\n\r\nfunction themeTone(object: ElementNode | Listener, tone: ElementTone = \"inherit\"): number {\r\n\r\n return offsetTone(contextTone(object), tone)\r\n}\r\n\r\nfunction biasContext(context: number, direction: string, bias: number): number {\r\n if (bias <= 0) return context\r\n if (direction === \"lighten\" && context === 0) return bias\r\n if (direction === \"darken\" && context === TONE_STEPS - 1) return TONE_STEPS - 1 - bias\r\n return context\r\n}\r\n\r\nexport function themeColor(object: ElementNode | Listener | null, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n\r\n let themeColor = color == \"inherit\" ? \"neutral\" : color;\r\n\r\n if (!object) {\r\n return themeVars()[themeColor][offsetTone(0, tone)]\r\n }\r\n\r\n let resultTone: number\r\n if (tone == \"base\") {\r\n resultTone = getTheme(themeName(object)).baseTones[themeColor]\r\n } else {\r\n let theme = getTheme(themeName(object))\r\n let context = biasContext(contextTone(object), theme.direction, theme.darkBias)\r\n resultTone = offsetTone(context, tone)\r\n }\r\n let colors = themeVars()[themeColor]\r\n if (!colors){\r\n throw Error(`color \"${themeColor}\" not found on theme \"${themeName(object)}`)\r\n }\r\n let resultColor = colors[resultTone]\r\n\r\n return resultColor\r\n}\r\n\r\nexport function themeColorToken(object: ElementNode | Listener | null, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n\r\n let colorName = color == \"inherit\" ? \"neutral\" : color;\r\n let name = object ? themeName(object as ElementNode | Listener) : \"light\";\r\n let tokens = themeTokens(name);\r\n\r\n if (!object) {\r\n return tokens[colorName][offsetTone(0, tone)]\r\n }\r\n\r\n let resultTone: number\r\n if (tone == \"base\") {\r\n resultTone = getTheme(name).baseTones[colorName]\r\n } else {\r\n let theme = getTheme(name)\r\n let context = biasContext(contextTone(object), theme.direction, theme.darkBias)\r\n resultTone = offsetTone(context, tone)\r\n }\r\n\r\n return tokens[colorName][resultTone]\r\n}\r\n"],"mappings":"mcAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,UAAAE,EAAA,UAAAC,inBCAaC,GAAkB,CAC7B,UACA,aACA,gBACA,iBACA,SACA,WACA,YACA,mBACA,WACA,UACA,UACA,gBACA,gBACA,oBACA,SACA,cACA,QACA,aACA,SACA,YACA,cACA,cACA,aACA,cACA,SACA,mBACA,YACA,UACA,UACA,UACA,aACA,UACA,YACA,YACA,aACA,UACA,SACA,eACA,mBACA,cACA,cACA,eACA,eACA,cACA,aACA,cACA,YACA,UACA,UACA,SACA,YACA,aACA,eACA,UACA,WACA,WACA,cACA,4BACA,WACA,YACA,WACA,eACA,YACA,WACA,YACA,eACA,WACA,iBACA,YACA,UACA,eACA,cACA,aACA,gBACA,gBACA,gBACA,cACA,kBACA,iBACA,iBACA,gBACA,eACA,sBACA,uBACA,qBACA,sBACA,mBACA,kBACA,oBACA,mBACA,iBACA,uBACA,qBACA,oBACA,YACA,YACF,EAEaC,GAAeD,GAAgB,OAAO,CAACE,EAAKC,IAAO,CAC9D,IAAMC,EAAMD,EAAG,MAAM,CAAC,EAAE,YAAY,EACpC,OAAAD,EAAIE,CAAG,EAAID,EACJD,CACT,EAAG,CAAC,CAAiF,ECvGxEG,EAAW,CACtB,IACA,OACA,UACA,UACA,QACA,QACA,IACA,OACA,aACA,KACA,SACA,SACA,UACA,OACA,OACA,MACA,WACA,OACA,WACA,KACA,MACA,UACA,MACA,SACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,OACA,QACA,MACA,WACA,SACA,KACA,WACA,SACA,SACA,IACA,QACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,UACA,SACA,OACA,QACA,SACA,OACA,SACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,QACA,OACA,QA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cAAcA,CAAG,CAAC,CACzC,CAEA,UAAiB,CACb,KAAK,UAAU,SAAS,CAC5B,CACJ,ECvCA,IAAA4L,EAAA,GAAAC,EAAAD,EAAA,cAAAE,EAAA,aAAAC,GAAA,eAAAC,GAAA,aAAAC,EAAA,eAAAC,GAAA,oBAAAC,GAAA,iBAAAC,GAAA,cAAAC,EAAA,cAAAC,GAAA,iBAAAC,GAAA,gBAAAC,EAAA,cAAAC,ICEA,IAAIC,GAAoB,CACtB,UAAW,SACX,OAAQ,CACN,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,KAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,MAAS,CACP,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,OAAU,CACR,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UA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","names":["global_exports","__export","dist_exports","src_exports","EventProperties","eventNameMap","acc","ev","key","HtmlTags","_chain","Notifier","event","listener","release","listeners","args","idx","n","e","names","pending","chain","State","initialValue","name","newValue","merge","source","target","comma","space","adjacent","deepClone","value","old","val1","val2","addEvent","addHook","hashString","str","hash","i","toState","val","r","fn","partial","hookName","handler","hookProperty","current","attributes","eventName","eventProperty","node","seen","proto","clone","v","k","validate","element","asPartial","keys","isHTML","escapeHTML","getTagName","camelToKebab","selectorSplitter","selectors","splitted","parens","angulars","soFar","len","char","ensureDomStyle","styleParent","_a","domStyle","mergePartial","part","p","VoidTags","SvgTags","BooleanAttributes","PrefixCSS","CamelAttributes","ElementAttribute","parent","domElement","mutateAttrs","_b","prev","callback","AttributeList","attr","force","className","add","classes","newClass","list","updated","cls","oldClass","TextNode","textContent","newNode","tpl","domText","ElementList","ElementNode","index","dom","el","currentRef","aNode","bNode","a","b","aNext","bNext","inputs","updateDom","silent","_c","_d","oldItems","keyed","item","input","reused","cur","isPortal","length","finalIndex","domNode","ref","root","child","done","doneCalled","onceDone","snapshot","aIndex","bIndex","itemA","itemB","fromIndex","toIndex","html","StyleProperty","parentRule","domRule","style","prefix","StyleRule","_StyleRule","selectorText","StyleList","prop","styleStr","decl","nested","sheet","rules","domSheet","css","err","obj","parentSelector","basic","getSelector","selector","splitKeys","currentSelector","rule","newSelector","domRuleList","wrongCount","fixOddEven","_ElementNode","domphyElement","_parent","tempPath","children","originalKey","content","childNode","RecordState","record","__spreadValues","l","src_exports","__export","getTheme","setTheme","themeApply","themeCSS","themeColor","themeColorToken","themeDensity","themeName","themeSize","themeSpacing","themeTokens","themeVars","light","light_default","themes","light_default","createDark","colorSteps","input","firstColor","validateTheme","partial","key","v","custom","deepMerge","target","source","_a","buildThemeCSS","name","styles","toneSteps","value","colorName","i","k","text","prop","getTheme","setTheme","dark","themeTokens","tokens","colorTones","themeVars","theme","section","themeCSS","themeApply","el","themeSpacing","n","themeName","object","node","ElementSizes","i","offsetSize","origin","size","resultSize","offset","contextSize","object","node","themeSize","index","themeVars","ElementDensities","i","offsetDensity","origin","density","resultDensity","offset","contextDensity","object","node","themeDensity","index","getTheme","themeName","TONE_STEPS","light_default","ElementTones","i","adjustTone","tone","level","newIndex","shiftTone","midpoint","offsetTone","originTone","offset","contextTone","object","node","biasContext","context","direction","bias","TONE_STEPS","themeColor","object","tone","color","themeVars","offsetTone","resultTone","getTheme","themeName","theme","contextTone","colors","themeColorToken","colorName","name","tokens","themeTokens"]}
1
+ {"version":3,"sources":["../src/global.ts","../../core/src/types/EventProperties.ts","../../core/src/constants/HtmlTags.ts","../../core/src/classes/Notifier.ts","../../core/src/classes/State.ts","../../core/src/utils.ts","../../core/src/helpers.ts","../../core/src/constants/VoidTags.ts","../../core/src/constants/SvgTags.ts","../../core/src/constants/BooleanAttributes.ts","../../core/src/constants/PrefixCSS.ts","../../core/src/constants/CamelAttributes.ts","../../core/src/classes/ElementAttribute.ts","../../core/src/classes/AttributeList.ts","../../core/src/classes/TextNode.ts","../../core/src/classes/ElementList.ts","../../core/src/classes/StyleProperty.ts","../../core/src/classes/StyleRule.ts","../../core/src/classes/StyleList.ts","../../core/src/classes/ElementNode.ts","../../core/src/classes/RecordState.ts","../src/index.ts","../src/light.ts","../src/theme.ts","../src/size.ts","../src/density.ts","../src/tone.ts"],"sourcesContent":["export * as core from \"@domphy/core\"\r\nexport * as theme from \"./index.js\"\r\n","export const EventProperties = [\r\n \"onAbort\",\r\n \"onAuxClick\",\r\n \"onBeforeMatch\",\r\n \"onBeforeToggle\",\r\n \"onBlur\",\r\n \"onCancel\",\r\n \"onCanPlay\",\r\n \"onCanPlayThrough\",\r\n \"onChange\",\r\n \"onClick\",\r\n \"onClose\",\r\n \"onContextLost\",\r\n \"onContextMenu\",\r\n \"onContextRestored\",\r\n \"onCopy\",\r\n \"onCueChange\",\r\n \"onCut\",\r\n \"onDblClick\",\r\n \"onDrag\",\r\n \"onDragEnd\",\r\n \"onDragEnter\",\r\n \"onDragLeave\",\r\n \"onDragOver\",\r\n \"onDragStart\",\r\n \"onDrop\",\r\n \"onDurationChange\",\r\n \"onEmptied\",\r\n \"onEnded\",\r\n \"onError\",\r\n \"onFocus\",\r\n \"onFormData\",\r\n \"onInput\",\r\n \"onInvalid\",\r\n \"onKeyDown\",\r\n \"onKeyPress\",\r\n \"onKeyUp\",\r\n \"onLoad\",\r\n \"onLoadedData\",\r\n \"onLoadedMetadata\",\r\n \"onLoadStart\",\r\n \"onMouseDown\",\r\n \"onMouseEnter\",\r\n \"onMouseLeave\",\r\n \"onMouseMove\",\r\n \"onMouseOut\",\r\n \"onMouseOver\",\r\n \"onMouseUp\",\r\n \"onPaste\",\r\n \"onPause\",\r\n \"onPlay\",\r\n \"onPlaying\",\r\n \"onProgress\",\r\n \"onRateChange\",\r\n \"onReset\",\r\n \"onResize\",\r\n \"onScroll\",\r\n \"onScrollEnd\",\r\n \"onSecurityPolicyViolation\",\r\n \"onSeeked\",\r\n \"onSeeking\",\r\n \"onSelect\",\r\n \"onSlotChange\",\r\n \"onStalled\",\r\n \"onSubmit\",\r\n \"onSuspend\",\r\n \"onTimeUpdate\",\r\n \"onToggle\",\r\n \"onVolumeChange\",\r\n \"onWaiting\",\r\n \"onWheel\",\r\n \"onTouchStart\",\r\n \"onTouchMove\",\r\n \"onTouchEnd\",\r\n \"onTouchCancel\",\r\n \"onPointerDown\",\r\n \"onPointerMove\",\r\n \"onPointerUp\",\r\n \"onPointerCancel\",\r\n \"onPointerEnter\",\r\n \"onPointerLeave\",\r\n \"onPointerOver\",\r\n \"onPointerOut\",\r\n \"onGotPointerCapture\",\r\n \"onLostPointerCapture\",\r\n \"onCompositionStart\",\r\n \"onCompositionUpdate\",\r\n \"onCompositionEnd\",\r\n \"onTransitionEnd\",\r\n \"onTransitionStart\",\r\n \"onAnimationStart\",\r\n \"onAnimationEnd\",\r\n \"onAnimationIteration\",\r\n \"onFullscreenChange\",\r\n \"onFullscreenError\",\r\n \"onFocusIn\",\r\n \"onFocusOut\",\r\n] as const\r\n\r\nexport const eventNameMap = EventProperties.reduce((acc, ev) => {\r\n const key = ev.slice(2).toLowerCase() as keyof HTMLElementEventMap\r\n acc[key] = ev;\r\n return acc;\r\n}, {} as Partial<Record<keyof HTMLElementEventMap, (typeof EventProperties)[number]>>);\r\n","export const HtmlTags = [\r\n \"a\",\r\n \"abbr\",\r\n \"address\",\r\n \"article\",\r\n \"aside\",\r\n \"audio\",\r\n \"b\",\r\n \"base\",\r\n \"blockquote\",\r\n \"br\",\r\n \"button\",\r\n \"canvas\",\r\n \"caption\",\r\n \"cite\",\r\n \"code\",\r\n \"col\",\r\n \"colgroup\",\r\n \"data\",\r\n \"datalist\",\r\n \"dd\",\r\n \"del\",\r\n \"details\",\r\n \"dfn\",\r\n \"dialog\",\r\n \"div\",\r\n \"dl\",\r\n \"dt\",\r\n \"em\",\r\n \"fieldset\",\r\n \"figcaption\",\r\n \"figure\",\r\n \"footer\",\r\n \"form\",\r\n \"h1\",\r\n \"h2\",\r\n \"h3\",\r\n \"h4\",\r\n \"h5\",\r\n \"h6\",\r\n \"header\",\r\n \"hgroup\",\r\n \"i\",\r\n \"iframe\",\r\n \"img\",\r\n \"input\",\r\n \"ins\",\r\n \"kbd\",\r\n \"label\",\r\n \"legend\",\r\n \"li\",\r\n \"main\",\r\n \"map\",\r\n \"mark\",\r\n \"meta\",\r\n \"meter\",\r\n \"nav\",\r\n \"noscript\",\r\n \"object\",\r\n \"ol\",\r\n \"optgroup\",\r\n \"option\",\r\n \"output\",\r\n \"p\",\r\n \"param\",\r\n \"picture\",\r\n \"pre\",\r\n \"progress\",\r\n \"q\",\r\n \"rp\",\r\n \"rt\",\r\n \"ruby\",\r\n \"s\",\r\n \"samp\",\r\n \"section\",\r\n \"select\",\r\n \"slot\",\r\n \"small\",\r\n \"source\",\r\n \"span\",\r\n \"strong\",\r\n \"sub\",\r\n \"summary\",\r\n \"sup\",\r\n \"table\",\r\n \"tbody\",\r\n \"td\",\r\n \"template\",\r\n \"textarea\",\r\n \"tfoot\",\r\n \"th\",\r\n \"thead\",\r\n \"time\",\r\n \"title\",\r\n \"tr\",\r\n \"track\",\r\n \"u\",\r\n \"ul\",\r\n \"var\",\r\n \"video\",\r\n \"wbr\",\r\n \"bdi\",\r\n \"bdo\",\r\n \"math\",\r\n \"menu\",\r\n \"search\",\r\n \"area\",\r\n \"embed\",\r\n \"hr\",\r\n \"animate\",\r\n \"animateMotion\",\r\n \"animateTransform\",\r\n \"circle\",\r\n \"clipPath\",\r\n \"cursor\",\r\n \"defs\",\r\n \"desc\",\r\n \"ellipse\",\r\n \"feBlend\",\r\n \"feColorMatrix\",\r\n \"feComponentTransfer\",\r\n \"feComposite\",\r\n \"feConvolveMatrix\",\r\n \"feDiffuseLighting\",\r\n \"feDisplacementMap\",\r\n \"feDistantLight\",\r\n \"feDropShadow\",\r\n \"feFlood\",\r\n \"feFuncA\",\r\n \"feFuncB\",\r\n \"feFuncG\",\r\n \"feFuncR\",\r\n \"feGaussianBlur\",\r\n \"feImage\",\r\n \"feMerge\",\r\n \"feMergeNode\",\r\n \"feMorphology\",\r\n \"feOffset\",\r\n \"fePointLight\",\r\n \"feSpecularLighting\",\r\n \"feSpotLight\",\r\n \"feTile\",\r\n \"feTurbulence\",\r\n \"filter\",\r\n \"foreignObject\",\r\n \"g\",\r\n \"image\",\r\n \"line\",\r\n \"linearGradient\",\r\n \"marker\",\r\n \"mask\",\r\n \"metadata\",\r\n \"mpath\",\r\n \"path\",\r\n \"pattern\",\r\n \"polygon\",\r\n \"polyline\",\r\n \"prefetch\",\r\n \"radialGradient\",\r\n \"rect\",\r\n \"set\",\r\n \"solidColor\",\r\n \"stop\",\r\n \"svg\",\r\n \"switch\",\r\n \"symbol\",\r\n \"tbreak\",\r\n \"text\",\r\n \"textPath\",\r\n \"tspan\",\r\n \"use\",\r\n \"view\",\r\n];","import { Handler } from \"../types.js\"\n\ntype ChainEntry = [notifier: Notifier, event: string]\n\n// Shared across all instances to track the flush chain for circular detection.\nlet _chain: ChainEntry[] = []\n\nexport class Notifier {\n private _listeners: Record<string, Set<Handler>> | null = {}\n private _pending: Map<string, { args: unknown[], chain: ChainEntry[] }> = new Map()\n private _scheduled = false\n\n _dispose(): void {\n if (this._listeners) {\n for (const event in this._listeners) {\n this._listeners[event].clear()\n }\n }\n this._listeners = null\n }\n\n addListener(event: string, listener: Handler): () => void {\n if (!this._listeners) return () => {}\n\n if (typeof event !== \"string\" || typeof listener !== \"function\") {\n throw new Error(\"Event name must be a string, listener must be a function\")\n }\n\n if (!this._listeners[event]) {\n this._listeners[event] = new Set()\n }\n\n const release = () => this.removeListener(event, listener)\n\n if (this._listeners[event].has(listener)) return release\n\n this._listeners[event].add(listener)\n if (typeof listener.onSubscribe === \"function\") {\n listener.onSubscribe(release)\n }\n\n return release\n }\n\n removeListener(event: string, listener: Handler): void {\n if (!this._listeners) return\n\n const listeners = this._listeners[event]\n if (listeners && listeners.has(listener)) {\n listeners.delete(listener)\n if (listeners.size === 0) {\n delete this._listeners[event]\n }\n }\n }\n\n notify(event: string, ...args: unknown[]): void {\n if (!this._listeners) return\n if (!this._listeners[event]) return\n\n if (this._isCircular(event)) return\n\n this._pending.set(event, { args, chain: [..._chain] })\n\n if (!this._scheduled) {\n this._scheduled = true\n queueMicrotask(() => this._flushAll())\n }\n }\n\n private _isCircular(event: string): boolean {\n const idx = _chain.findIndex(([n, e]) => n === this && e === event)\n if (idx === -1) return false\n\n const names = [..._chain.slice(idx).map(([, e]) => e), event]\n console.error(`[Domphy] Circular dependency detected:\\n ${names.join(\" → \")}`)\n return true\n }\n\n private _flushAll(): void {\n this._scheduled = false\n const pending = this._pending\n this._pending = new Map()\n\n for (const [event, { args, chain }] of pending) {\n _chain = chain\n this._flush(event, args)\n }\n _chain = []\n }\n\n private _flush(event: string, args: unknown[]): void {\n if (!this._listeners) return\n const listeners = this._listeners[event]\n if (!listeners) return\n\n _chain.push([this, event])\n\n for (const listener of [...listeners]) {\n if (!listeners.has(listener)) continue\n try {\n listener(...args)\n } catch (e) {\n console.error(e)\n }\n }\n\n _chain.pop()\n }\n}\n","import { Notifier } from \"./Notifier.js\";\r\nimport { Handler } from \"../types.js\"\r\n\r\nexport type ValueListener<T> = ((_value: T) => void) & Handler\r\nexport type ValueOrState<T> = T | State<T>\r\n\r\nexport class State<T> {\r\n private _value: T;\r\n readonly initialValue: T;\r\n private _notifier: Notifier | null = new Notifier();\r\n\r\n constructor(initialValue: T, readonly name: string = typeof initialValue) {\r\n this.initialValue = initialValue;\r\n this._value = initialValue;\r\n }\r\n\r\n get(listener?: ValueListener<T>): T {\r\n if (listener) this.addListener(listener);\r\n return this._value;\r\n }\r\n\r\n set(newValue: T): void {\r\n if (!this._notifier) return;\r\n this._value = newValue;\r\n this._notifier.notify(this.name, newValue);\r\n }\r\n\r\n reset(): void {\r\n this.set(this.initialValue);\r\n }\r\n\r\n addListener(listener: ValueListener<T>): () => void {\r\n if (!this._notifier) return () => { };\r\n return this._notifier.addListener(this.name, listener);\r\n }\r\n\r\n removeListener(listener: ValueListener<T>): void {\r\n if (!this._notifier) return;\r\n this._notifier.removeListener(this.name, listener);\r\n }\r\n\r\n _dispose(): void {\r\n if (this._notifier) {\r\n this._notifier._dispose();\r\n this._notifier = null;\r\n }\r\n }\r\n}\r\n","import { DomphyElement, HookMap, EventName, Handler, Listener } from \"./types.js\";\r\nimport { State } from \"./classes/State.js\"\r\n\r\nimport { deepClone, addEvent, addHook } from \"./helpers.js\"\r\n\r\nexport function merge(source: Record<string, any> = {}, target: Record<string, any> = {}): Record<string, any> {\r\n const comma = [\"animation\", \"transition\", \"boxShadow\", \"textShadow\", \"background\", \"fontFamily\"]\r\n const space = [\"class\", \"rel\", \"transform\", \"acceptCharset\", \"sandbox\"]\r\n const adjacent = [\"content\"]\r\n if (Object.prototype.toString.call(target) === \"[object Object]\" && Object.getPrototypeOf(target) === Object.prototype) { // plainjs not class instance\r\n target = deepClone(target)\r\n }\r\n\r\n for (const key in target) {\r\n\r\n const value = target[key];\r\n if (value === undefined || value === null || value === \"\") continue;\r\n\r\n if (typeof value === \"object\" && !Array.isArray(value)) {\r\n if (typeof source[key] === \"object\") {\r\n source[key] = merge(source[key], value);\r\n } else {\r\n source[key] = value;\r\n }\r\n\r\n } else {\r\n if (comma.includes(key)) {\r\n if (typeof source[key] === \"function\" || typeof value === \"function\") {\r\n let old = source[key]\r\n source[key] = (listener: Handler) => {\r\n let val1 = typeof old === \"function\" ? old(listener) : old\r\n let val2 = typeof value === \"function\" ? value(listener) : value\r\n return [val1, val2].filter(e => e).join(\", \")\r\n }\r\n } else {\r\n source[key] = [source[key], value].filter(e => e).join(\", \")\r\n }\r\n\r\n } else if (adjacent.includes(key)) {\r\n if (typeof source[key] === \"function\" || typeof value === \"function\") {\r\n let old = source[key]\r\n source[key] = (listener: Handler) => {\r\n let val1 = typeof old === \"function\" ? old(listener) : old\r\n let val2 = typeof value === \"function\" ? value(listener) : value\r\n return [val1, val2].filter(e => e).join(\"\")\r\n }\r\n } else {\r\n source[key] = [source[key], value].filter(e => e).join(\"\")\r\n }\r\n } else if (space.includes(key)) {\r\n if (typeof source[key] === \"function\" || typeof value === \"function\") {\r\n let old = source[key]\r\n source[key] = (listener: Handler) => {\r\n let val1 = typeof old === \"function\" ? old(listener) : old\r\n let val2 = typeof value === \"function\" ? value(listener) : value\r\n return [val1, val2].filter(e => e).join(\" \")\r\n }\r\n } else {\r\n source[key] = [source[key], value].filter(e => e).join(\" \")\r\n }\r\n } else if (key.startsWith(\"on\")) {\r\n let name = key.replace(\"on\", \"\").toLowerCase() as EventName\r\n addEvent(source as DomphyElement, name, value)\r\n } else if (key.startsWith(\"_on\")) {\r\n let name = key.replace(\"_on\", \"\") as keyof HookMap\r\n addHook(source as DomphyElement, name, value)\r\n } else {\r\n source[key] = value;\r\n }\r\n }\r\n }\r\n return source;\r\n}\r\n\r\nexport function hashString(str: string = \"\"): string {\r\n let hash = 0x811c9dc5; // FNV-1a 32-bit offset basis\r\n for (let i = 0; i < str.length; i++) {\r\n hash ^= str.charCodeAt(i);\r\n hash = (hash * 0x01000193) >>> 0; // FNV prime, keep 32-bit unsigned\r\n }\r\n return String.fromCharCode(97 + (hash % 26)) + hash.toString(16);\r\n}\r\n\r\nexport function toState<T>(val: T | State<T>, name?: string): State<T> {\r\n return val instanceof State ? val : new State<T>(val, name);\r\n}\r\n\r\nexport function r<T>(fn: (listener: Listener) => T): (listener: Listener) => T {\r\n return fn;\r\n}\r\n\r\n","import { DomphyElement, PartialElement, HookMap, EventName, Handler, TagName } from \"./types.js\";\r\nimport { ElementNode } from \"./classes/ElementNode.js\"\r\nimport { State } from \"./classes/State.js\"\r\nimport { eventNameMap } from \"./types/EventProperties.js\"\r\nimport { HtmlTags } from \"./constants/HtmlTags.js\"\r\nimport {merge} from \"./utils.js\"\r\n\r\nexport function addHook<K extends keyof HookMap>(partial: PartialElement, hookName: K, handler: HookMap[K]): void {\r\n const hookProperty = `_on${hookName}` as keyof PartialElement;\r\n let current = partial[hookProperty];\r\n\r\n if (typeof current === \"function\") {\r\n (partial as any)[hookProperty] = (...args: any[]) => {\r\n (current as Function)(...args);\r\n (handler as Function)(...args);\r\n };\r\n } else {\r\n (partial as any)[hookProperty] = handler;\r\n }\r\n}\r\n\r\nexport function addEvent<K extends keyof HTMLElementEventMap>(\r\n attributes: PartialElement,\r\n eventName: K,\r\n handler: (event: HTMLElementEventMap[K], node: ElementNode) => void\r\n): void {\r\n const eventProperty = eventNameMap[eventName];\r\n if (!eventProperty) {\r\n throw Error(`invalid event name \"${eventName}\"`);\r\n }\r\n const current = (attributes as any)[eventProperty]\r\n\r\n if (typeof current == \"function\") {\r\n (attributes as any)[eventProperty] = (event: HTMLElementEventMap[K], node: ElementNode) => {\r\n current(event, node)\r\n handler(event, node);\r\n };\r\n } else {\r\n (attributes as any)[eventProperty] = handler\r\n }\r\n}\r\n\r\nexport function deepClone(value: any, seen = new WeakMap()): any {\r\n if (value === null || typeof value !== \"object\") return value;\r\n if (typeof value === \"function\") return value;\r\n if (seen.has(value)) return seen.get(value);\r\n\r\n const proto = Object.getPrototypeOf(value);\r\n if (proto !== Object.prototype && !Array.isArray(value)) return value; // ignore class instance\r\n\r\n let clone: any;\r\n\r\n if (Array.isArray(value)) {\r\n clone = [];\r\n seen.set(value, clone);\r\n for (const v of value) clone.push(deepClone(v, seen));\r\n return clone;\r\n }\r\n\r\n if (value instanceof Date) return new Date(value);\r\n if (value instanceof RegExp) return new RegExp(value);\r\n if (value instanceof Map) {\r\n clone = new Map();\r\n seen.set(value, clone);\r\n for (const [k, v] of value) clone.set(deepClone(k, seen), deepClone(v, seen));\r\n return clone;\r\n }\r\n if (value instanceof Set) {\r\n clone = new Set();\r\n seen.set(value, clone);\r\n for (const v of value) clone.add(deepClone(v, seen));\r\n return clone;\r\n }\r\n if (ArrayBuffer.isView(value)) {\r\n return new (value as any).constructor(value);\r\n }\r\n if (value instanceof ArrayBuffer) {\r\n return value.slice(0);\r\n }\r\n\r\n clone = Object.create(proto);\r\n seen.set(value, clone);\r\n\r\n for (const key of Reflect.ownKeys(value)) {\r\n clone[key] = deepClone(value[key], seen);\r\n }\r\n\r\n return clone;\r\n}\r\n\r\nexport function validate(element: DomphyElement | PartialElement, asPartial = false): boolean {\r\n if (Object.prototype.toString.call(element) !== \"[object Object]\") {\r\n throw Error(`typeof ${element} is invalid DomphyElement`);\r\n }\r\n let keys = Object.keys(element);\r\n for (let i = 0; i < keys.length; i++) {\r\n let key = keys[i];\r\n let val = element[key as keyof typeof element]\r\n if (i == 0 && !HtmlTags.includes(key) && !key.includes(\"-\") && !asPartial) { // web-component\r\n throw Error(`key ${key} is not valid HTML tag name`);\r\n } else if (key == \"style\" && val && Object.prototype.toString.call(val) !== \"[object Object]\") {\r\n throw Error(`\"style\" must be a object`);\r\n } else if (key == \"$\") {\r\n element.$!.forEach(v => validate(v as PartialElement, true))\r\n } else if (key.startsWith(\"_on\") && typeof val != \"function\") {\r\n throw Error(`hook ${key} value \"${val}\" must be a function `)\r\n } else if (key.startsWith(\"on\") && typeof val != \"function\") {\r\n throw Error(`event ${key} value \"${val}\" must be a function `);\r\n } else if (key == \"_portal\" && typeof val !== \"function\") {\r\n throw Error(`\"_portal\" must be a function return HTMLElement`);\r\n } else if (key == \"_context\" && Object.prototype.toString.call(val) !== \"[object Object]\") {\r\n throw Error(`\"_context\" must be a object`);\r\n } else if (key == \"_metadata\" && Object.prototype.toString.call(val) !== \"[object Object]\") {\r\n throw Error(`\"_metadata\" must be a object`);\r\n } else if (key == \"_key\" && (typeof val !== \"string\" && typeof val !== \"number\")) {\r\n throw Error(`\"_key\" must be a string or number`);\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nexport function isValid(element: DomphyElement): boolean {\r\n\r\n if (Array.isArray(element)) return false;\r\n if (!element || typeof element !== \"object\") return false;\r\n\r\n let keys = Object.keys(element);\r\n for (let i = 0; i < keys.length; i++) {\r\n let key = keys[i];\r\n let val = element[key as keyof typeof element];\r\n if (i == 0 && !HtmlTags.includes(key)) return false\r\n if (key === \"style\" && (val == null || typeof val !== \"object\" || Array.isArray(val))) return false;\r\n if (key.startsWith(\"_on\") && typeof val !== \"function\") return false;\r\n if (key.startsWith(\"on\") && typeof val !== \"function\") return false;\r\n if (key === \"_portalChildren\" && !Array.isArray(val)) return false;\r\n if ((key === \"_context\" || key === \"_metadata\") && (val == null || typeof val !== \"object\" || Array.isArray(val))) return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport function isHTML(str: string): boolean {\r\n return /<([a-z][\\w-]*)(\\s[^>]*)?>.*<\\/\\1>|<([a-z][\\w-]*)(\\s[^>]*)?\\/>/i.test(str.trim());\r\n}\r\n\r\nexport function escapeHTML(str: string): string {\r\n return str\r\n .replace(/&/g, \"&amp;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/\"/g, \"&quot;\")\r\n .replace(/'/g, \"&#39;\");\r\n}\r\n\r\nexport function addClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => String(reactive(listener)) + \" \" + className\r\n } else {\r\n let current = element.class || \"\"\r\n let split = String(current).split(\" \")\r\n split.push(className)\r\n element.class = split.filter(e => e).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function removeClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => {\r\n let split = String(reactive(listener)).split(\" \")\r\n return split.filter(e => e != className).join(\" \")\r\n }\r\n } else {\r\n let split = String(element.class).split(\" \")\r\n element.class ||= \"\"\r\n element.class = split.filter(e => e != className).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function toggleClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => {\r\n let split = String(reactive(listener)).split(\" \")\r\n return split.includes(className) ? split.filter(e => e != className).join(\" \") : split.concat([className]).join(\" \")\r\n }\r\n } else {\r\n let split = String(element.class).split(\" \")\r\n element.class ||= \"\"\r\n element.class = split.includes(className) ? split.filter(e => e != className).join(\" \") : split.concat([className]).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function getTagName(element: DomphyElement): TagName | undefined {\r\n return Object.keys(element).find(e => HtmlTags.includes(e)) as TagName | undefined\r\n}\r\n\r\n\r\nexport function camelToKebab(str: string): string {\r\n return str.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\r\n}\r\n\r\nexport function selectorSplitter(selectors: string) {\n if (selectors.indexOf('@') === 0) {\r\n return [selectors];\r\n }\r\n var splitted = [];\r\n var parens = 0;\r\n var angulars = 0;\r\n var soFar = '';\r\n for (var i = 0, len = selectors.length; i < len; i++) {\r\n var char = selectors[i];\r\n if (char === '(') {\r\n parens += 1;\r\n } else if (char === ')') {\r\n parens -= 1;\r\n } else if (char === '[') {\r\n angulars += 1;\r\n } else if (char === ']') {\r\n angulars -= 1;\r\n } else if (char === ',') {\r\n if (!parens && !angulars) {\r\n splitted.push(soFar.trim());\r\n soFar = '';\r\n continue;\r\n }\r\n }\r\n soFar += char;\r\n }\r\n splitted.push(soFar.trim());\n return splitted;\n};\n\nexport function ensureDomStyle(styleParent: HTMLHeadElement | ShadowRoot): HTMLStyleElement {\n let domStyle = styleParent.querySelector(\"#domphy-style\") as HTMLStyleElement | null;\n\n if (!domStyle) {\n domStyle = document.createElement(\"style\");\n domStyle.id = \"domphy-style\";\n styleParent.appendChild(domStyle);\n }\n\n if (domStyle.dataset.domphyBase !== \"true\") {\n domStyle.sheet?.insertRule(\"[hidden] { display: none !important; }\", 0);\n domStyle.dataset.domphyBase = \"true\";\n }\n\n return domStyle;\n}\n\nexport const mergePartial = (partial: PartialElement | DomphyElement): typeof partial => {\n\r\n if (Array.isArray(partial.$)) {\r\n let part: typeof partial = {}\r\n partial.$.forEach(p => merge(part, mergePartial(p)))\r\n delete partial.$\r\n merge(part, partial) // native win\r\n\r\n return part\r\n } else {\r\n return partial\r\n }\r\n}\n","export const VoidTags = [\r\n \"area\",\r\n \"base\",\r\n \"br\",\r\n \"col\",\r\n \"embed\",\r\n \"hr\",\r\n \"img\",\r\n \"input\",\r\n \"link\",\r\n \"meta\",\r\n \"source\",\r\n \"track\",\r\n \"wbr\",\r\n] as const;\r\n\r\nexport type VoidTagName = (typeof VoidTags)[number];\r\n\r\n","export const SvgTags = [\"svg\", \"circle\", \"path\", \"rect\", \"ellipse\",\r\n \"line\", \"polyline\", \"polygon\", \"g\", \"defs\",\r\n \"use\", \"symbol\", \"linearGradient\", \"radialGradient\",\r\n \"stop\", \"clipPath\", \"mask\", \"filter\", \"text\",\r\n \"tspan\", \"textPath\", \"image\", \"pattern\", \"marker\",\r\n \"animate\", \"animateTransform\", \"animateMotion\",\r\n \"feGaussianBlur\", \"feComposite\", \"feColorMatrix\",\r\n \"feMerge\", \"feMergeNode\", \"feOffset\", \"feFlood\",\r\n \"feBlend\", \"foreignObject\"]","export const BooleanAttributes = [\r\n \"allowFullScreen\",\r\n \"async\",\r\n \"autoFocus\",\r\n \"autoPlay\",\r\n \"checked\",\r\n \"compact\",\r\n \"contentEditable\",\r\n \"controls\",\r\n \"declare\",\r\n \"default\",\r\n \"defer\",\r\n \"disabled\",\r\n \"formNoValidate\",\r\n \"hidden\",\r\n \"isMap\",\r\n \"itemScope\",\r\n \"loop\",\r\n \"multiple\",\r\n \"muted\",\r\n \"noHref\",\r\n \"noShade\",\r\n \"noValidate\",\r\n \"open\",\r\n \"playsInline\",\r\n \"readonly\",\r\n \"required\",\r\n \"reversed\",\r\n \"scoped\",\r\n \"selected\",\r\n \"sortable\",\r\n \"trueSpeed\",\r\n \"typeMustMatch\",\r\n \"wmode\",\r\n \"autoCapitalize\",\r\n \"translate\",\r\n \"spellCheck\",\r\n \"inert\",\r\n \"download\",\r\n \"noModule\",\r\n \"paused\",\r\n \"autoPictureInPicture\",\r\n] as const;","//browserslist query \"> 0.1%, not dead\"\r\nexport const PrefixCSS: Record<string, string[]> = {\r\n transform: [\"webkit\", \"ms\"],\r\n transition: [\"webkit\", \"ms\"],\r\n animation: [\"webkit\"],\r\n userSelect: [\"webkit\", \"ms\"],\r\n flexDirection: [\"webkit\", \"ms\"],\r\n flexWrap: [\"webkit\", \"ms\"],\r\n justifyContent: [\"webkit\", \"ms\"],\r\n alignItems: [\"webkit\", \"ms\"],\r\n alignSelf: [\"webkit\", \"ms\"],\r\n order: [\"webkit\", \"ms\"],\r\n flexGrow: [\"webkit\", \"ms\"],\r\n flexShrink: [\"webkit\", \"ms\"],\r\n flexBasis: [\"webkit\", \"ms\"],\r\n columns: [\"webkit\"],\r\n columnCount: [\"webkit\"],\r\n columnGap: [\"webkit\"],\r\n columnRule: [\"webkit\"],\r\n columnWidth: [\"webkit\"],\r\n boxSizing: [\"webkit\"],\r\n appearance: [\"webkit\", \"moz\"],\r\n filter: [\"webkit\"],\r\n backdropFilter: [\"webkit\"],\r\n clipPath: [\"webkit\"],\r\n mask: [\"webkit\"],\r\n maskImage: [\"webkit\"],\r\n textSizeAdjust: [\"webkit\", \"ms\"],\r\n hyphens: [\"webkit\", \"ms\"],\r\n writingMode: [\"webkit\", \"ms\"],\r\n gridTemplateColumns: [\"ms\"],\r\n gridTemplateRows: [\"ms\"],\r\n gridAutoColumns: [\"ms\"],\r\n gridAutoRows: [\"ms\"],\r\n gridColumn: [\"ms\"],\r\n gridRow: [\"ms\"],\r\n marginInlineStart: [\"webkit\"],\r\n marginInlineEnd: [\"webkit\"],\r\n paddingInlineStart: [\"webkit\"],\r\n paddingInlineEnd: [\"webkit\"],\r\n minInlineSize: [\"webkit\"],\r\n maxInlineSize: [\"webkit\"],\r\n minBlockSize: [\"webkit\"],\r\n maxBlockSize: [\"webkit\"],\r\n inlineSize: [\"webkit\"],\r\n blockSize: [\"webkit\"],\r\n tabSize: [\"moz\"],\r\n overscrollBehavior: [\"webkit\", \"ms\"],\r\n touchAction: [\"ms\"],\r\n resize: [\"webkit\"],\r\n printColorAdjust: [\"webkit\"],\r\n backgroundClip: [\"webkit\"],\r\n boxDecorationBreak: [\"webkit\"],\r\n overflowScrolling: [\"webkit\"],\r\n};\r\n","export const CamelAttributes: string[] = [\r\n \"viewBox\",\r\n \"preserveAspectRatio\",\r\n \"gradientTransform\",\r\n \"gradientUnits\",\r\n \"spreadMethod\",\r\n \"markerStart\",\r\n \"markerMid\",\r\n \"markerEnd\",\r\n \"markerHeight\",\r\n \"markerWidth\",\r\n \"markerUnits\",\r\n \"refX\",\r\n \"refY\",\r\n \"patternContentUnits\",\r\n \"patternTransform\",\r\n \"patternUnits\",\r\n \"filterUnits\",\r\n \"primitiveUnits\",\r\n \"kernelUnitLength\",\r\n \"clipPathUnits\",\r\n \"maskContentUnits\",\r\n \"maskUnits\"\r\n] as const\r\n","import { escapeHTML, camelToKebab } from \"../helpers.js\";\nimport { BooleanAttributes, CamelAttributes } from \"../constants.js\";\nimport type { ElementNode } from \"./ElementNode.js\"\nimport { type AttributeValue } from \"../types.js\"\nimport { Notifier } from \"./Notifier.js\"\n\nexport class ElementAttribute {\n readonly name: string;\n readonly isBoolean: boolean;\n value: any;\n parent: ElementNode;\n _notifier = new Notifier();\n\n constructor(name: string, value: any, parent: any) {\n this.parent = parent;\n this.isBoolean = (BooleanAttributes as readonly string[]).includes(name);\n if (CamelAttributes.includes(name)) {\n this.name = name\n } else {\n this.name = camelToKebab(name)\n }\n this.value = undefined;\n this.set(value);\n }\n\n render(): void {\n if (!this.parent || !this.parent.domElement) return;\n const domElement = this.parent.domElement;\n\n const mutateAttrs = [\"value\"];\n if (this.isBoolean) {\n if (this.value === false || this.value == null) {\n domElement.removeAttribute(this.name)\n } else {\n domElement.setAttribute(this.name, this.value === true ? \"\" : this.value)\n }\n } else if (this.value == null) {\n domElement.removeAttribute(this.name);\n } else if (mutateAttrs.includes(this.name)) {\n (domElement as any)[this.name] = this.value;\n } else {\n domElement.setAttribute(this.name, this.value);\n }\n }\n\n set(value: AttributeValue): void {\n let prev = this.value;\n\n if (value == null) {\n this.value = null;\n } else if (typeof value === \"string\" && /<\\/?[a-z][\\s\\S]*>/i.test(value)) {\n this.value = escapeHTML(value);\n } else if (typeof value == \"function\") {\n let listener: any = () => {\n if (!this.parent || this.parent._disposed) return;\n let p = this.value;\n this.value = this.isBoolean ? Boolean((value as Function)()) : (value as Function)();\n this.render();\n if (p !== this.value) this._notifier.notify(this.name, this.value);\n };\n\n listener.elementNode = this.parent!;\n listener.debug = `class:${this.parent?.tagName}_${this.parent?.nodeId} attribute:${this.name}`;\n\n listener.onSubscribe = (release: () => void) => {\n if (this.parent) {\n this.parent.addHook(\"BeforeRemove\", () => {\n release();\n listener = null;\n });\n }\n };\n\n this.value = this.isBoolean ? Boolean(value(listener)) : value(listener);\n } else {\n this.value = this.isBoolean ? Boolean(value) : value;\n }\n\n this.render();\n if (prev !== this.value) this._notifier.notify(this.name, this.value);\n }\n\n addListener(callback: (value: any) => void): void {\n const handler = callback as any\n handler.onSubscribe = (release: () => void) => this.parent?.addHook(\"BeforeRemove\", release);\n this._notifier.addListener(this.name, handler)\n }\n\n remove(): void {\n if (this.parent && this.parent.attributes) {\n this.parent.attributes.remove(this.name);\n }\n this._dispose();\n }\n\n _dispose(): void {\n this._notifier._dispose();\n this.value = null;\n this.parent = null as any\n }\n\n generateHTML(): string {\n const { name, value } = this;\n if (this.isBoolean) {\n return value ? `${name}` : \"\";\n } else {\n const val = Array.isArray(value) ? JSON.stringify(value) : value;\n return `${name}=\"${escapeHTML(String(val))}\"`;\n }\n }\n}\n","import type { ElementNode } from \"./ElementNode.js\";\nimport { ElementAttribute } from \"./ElementAttribute.js\";\nimport { BooleanAttributes } from \"../constants.js\";\nimport { AttributeValue } from \"../types.js\"\n\nexport class AttributeList {\n items: Record<string, ElementAttribute> | null = {};\n parent: ElementNode | null;\n\n constructor(parent: ElementNode) {\n this.parent = parent;\n }\n\n generateHTML(): string {\n if (!this.items) return \"\";\n const str = Object.values(this.items)\n .map((attr) => attr.generateHTML())\n .join(\" \");\n return str ? ` ${str}` : \"\";\n }\n\n get(name: string): any {\n if (!this.items) return undefined;\n return this.items[name]?.value;\n }\n\n set(name: string, value: AttributeValue): void {\n if (!this.items || !this.parent) return;\n if (this.items[name]) {\n this.items[name].set(value);\n } else {\n this.items[name] = new ElementAttribute(name, value, this.parent);\n }\n }\n\n addListener(name: string, callback: (value: string | number) => void): void {\n if (this.has(name)) {\n this.items![name].addListener(callback);\n }\n }\n\n has(name: string): boolean {\n if (!this.items) return false;\n return Object.prototype.hasOwnProperty.call(this.items, name);\n }\n\n remove(name: string): void {\n if (!this.items) return;\n\n if (this.items[name]) {\n this.items[name]._dispose();\n delete this.items[name];\n }\n\n if (this.parent && this.parent.domElement && this.parent.domElement instanceof Element) {\n this.parent.domElement.removeAttribute(name);\n }\n }\n\n _dispose(): void {\n if (this.items) {\n for (const key in this.items) {\n this.items[key]._dispose();\n }\n }\n this.items = null;\n this.parent = null;\n }\n\n toggle(name: string, force?: boolean): void {\n if (\n !BooleanAttributes.includes(name as (typeof BooleanAttributes)[number])\n ) {\n throw Error(`${name} is not a boolean attribute`);\n }\n if (force === true) {\n this.set(name, true);\n } else if (force === false) {\n this.remove(name);\n } else {\n this.has(name) ? this.remove(name) : this.set(name, true);\n }\n }\n\n addClass(className: string): void {\n if (!className || typeof className !== \"string\") return;\n\n const add = (classes: string, newClass: string) => {\n const list = (classes || \"\").split(\" \").filter((e: string) => e);\n !list.includes(newClass) && list.push(className)\n return list.join(\" \")\n }\n\n let current = this.get(\"class\");\n\n if (typeof current === \"function\") {\n this.set(\"class\", () => add(current(), className));\n } else {\n this.set(\"class\", add(current, className))\n }\n }\n\n hasClass(className: string): boolean {\n if (!className || typeof className !== \"string\") return false;\n const current = this.get(\"class\") || \"\";\n const list = current.split(\" \").filter((e: string) => e);\n return list.includes(className);\n }\n\n toggleClass(className: string): void {\n if (!className || typeof className !== \"string\") return;\n this.hasClass(className)\n ? this.removeClass(className)\n : this.addClass(className);\n }\n\n removeClass(className: string): void {\n if (!className || typeof className !== \"string\") return;\n const current = this.get(\"class\") || \"\";\n const list: string[] = current.split(\" \").filter((e: string) => e);\n const updated = list.filter((cls) => cls !== className);\n updated.length > 0\n ? this.set(\"class\", updated.join(\" \"))\n : this.remove(\"class\");\n }\n\n replaceClass(oldClass: string, newClass: string): void {\n if (\n !oldClass ||\n !newClass ||\n typeof oldClass !== \"string\" ||\n typeof newClass !== \"string\"\n )\n return;\n if (this.hasClass(oldClass)) {\n this.removeClass(oldClass);\n this.addClass(newClass);\n }\n }\n}\n","import { ElementNode } from \"./ElementNode.js\";\r\nimport { isHTML } from \"../helpers.js\";\r\n\r\nexport class TextNode {\r\n type = \"TextNode\"\r\n parent: ElementNode;\r\n text: string;\r\n domText?: ChildNode;\r\n\r\n constructor(textContent: string | number, parent: ElementNode) {\r\n this.parent = parent;\r\n const tag = parent.tagName;\r\n this.text = textContent === \"\" && tag !== \"textarea\" ? \"\\u200B\" : String(textContent);\r\n }\r\n _createDOMNode() {\r\n let newNode: ChildNode;\r\n if (isHTML(this.text)) {\r\n const tpl = document.createElement(\"template\");\r\n tpl.innerHTML = this.text.trim();\r\n newNode = tpl.content.firstChild || document.createTextNode(\"\");\r\n } else {\r\n newNode = document.createTextNode(this.text);\r\n }\r\n this.domText = newNode;\r\n return newNode;\r\n }\r\n\r\n _dispose(): void {\r\n this.domText = undefined;\r\n this.text = \"\";\r\n }\r\n\r\n generateHTML(): string {\r\n return this.text === \"\\u200B\" ? \"&#8203;\" : this.text;\r\n }\r\n\r\n render(domText: ChildNode | DocumentFragment | HTMLElement): void {\r\n const newNode = this._createDOMNode();\r\n domText.appendChild(newNode);\r\n }\r\n}","import { TextNode } from \"./TextNode.js\";\r\nimport { ElementNode } from \"./ElementNode.js\";\r\nimport type { DomphyElement } from \"../types.js\";\r\nimport { ensureDomStyle } from \"../helpers.js\";\r\n\r\ntype ElementInput = DomphyElement | null | undefined | number | string\r\ntype NodeItem = ElementNode | TextNode;\r\n\r\nexport class ElementList {\r\n items: NodeItem[] = [];\r\n owner: ElementNode;\r\n _nextKey: number = 0;\r\n\r\n constructor(parent: ElementNode) {\r\n this.owner = parent;\r\n }\r\n\r\n _createNode(element: ElementInput | DomphyElement): NodeItem {\r\n return (typeof element === \"object\" && element !== null)\r\n ? new ElementNode(element, this.owner, this._nextKey++)\r\n : new TextNode(element == null ? \"\" : String(element), this.owner);\r\n }\r\n\r\n _moveDomElement(node: NodeItem, index: number) {\r\n if (!this.owner || !this.owner.domElement) return;\r\n const dom = this.owner.domElement;\r\n\r\n const el = node instanceof ElementNode ? node.domElement : node.domText;\r\n if (el) {\r\n const currentRef = dom.childNodes[index] || null;\r\n if (el !== currentRef) {\r\n dom.insertBefore(el, currentRef);\r\n }\r\n }\r\n }\r\n\r\n _swapDomElement(aNode: NodeItem, bNode: NodeItem) {\r\n if (!this.owner || !this.owner.domElement) return;\r\n const parent = this.owner.domElement;\r\n\r\n const a = aNode instanceof ElementNode ? aNode.domElement : aNode.domText;\r\n const b = bNode instanceof ElementNode ? bNode.domElement : bNode.domText;\r\n if (!a || !b) return;\r\n\r\n const aNext = a.nextSibling;\r\n const bNext = b.nextSibling;\r\n\r\n parent.insertBefore(a, bNext);\r\n parent.insertBefore(b, aNext);\r\n }\r\n\r\n update(inputs: ElementInput[], updateDom = true, silent = false): void {\r\n\r\n const oldItems = this.items.slice(); // snapshot for cleanup\r\n\r\n // keyed lookup from old list\r\n const keyed = new Map<string | number, NodeItem>();\r\n for (const item of oldItems) {\r\n if (item instanceof ElementNode && item.key !== null && item.key !== undefined) {\r\n keyed.set(item.key, item);\r\n }\r\n }\r\n\r\n if (!silent && this.owner.domElement) this.owner._hooks?.BeforeUpdate?.(this.owner, inputs);\r\n // build target order using existing ops (mutating this.items)\r\n for (let i = 0; i < inputs.length; i++) {\r\n const input = inputs[i];\r\n const key =\r\n (typeof input === \"object\" && input !== null) ? (input as any)._key : undefined;\r\n\r\n if (key !== undefined) {\r\n const reused = keyed.get(key);\r\n if (reused) {\r\n keyed.delete(key);\r\n\r\n const cur = this.items.indexOf(reused);\r\n if (cur !== i && cur >= 0) {\r\n const isPortal = reused instanceof ElementNode && !!reused._portal;\r\n this.move(cur, i, isPortal ? false : updateDom, true);\r\n }\r\n reused.parent = this.owner as any;\r\n continue;\r\n }\r\n }\r\n\r\n this.insert(input, i, updateDom, true);\r\n }\r\n\r\n while (this.items.length > inputs.length) {\r\n this.remove(this.items[this.items.length - 1], updateDom, true);\r\n }\r\n keyed.forEach((node) => this.remove(node, updateDom, true));\r\n if (!silent) this.owner._hooks?.Update?.(this.owner);\r\n }\r\n\r\n insert(input: ElementInput, index?: number, updateDom = true, silent = false): NodeItem {\r\n\r\n let length = this.items.length;\r\n const finalIndex = (typeof index !== \"number\" || isNaN(index) || index < 0 || index > length)\r\n ? length\r\n : index;\r\n const item = this._createNode(input);\r\n this.items.splice(finalIndex, 0, item);\r\n\r\n if (item instanceof ElementNode) {\r\n //Parent always insert/mount before children\r\n item._hooks.Insert && item._hooks.Insert(item)\r\n\r\n let domElement = this.owner.domElement;\r\n if (updateDom && domElement) {\r\n\r\n\r\n if (item._portal) {\r\n let domElement = item._portal!(this.owner.getRoot())\r\n domElement && item.render(domElement)\r\n } else {\r\n let domNode = item._createDOMNode();\r\n const ref = domElement.childNodes[finalIndex] ?? null;\r\n domElement.insertBefore(domNode, ref);\r\n let root = domElement.getRootNode()\r\n const styleParent = root instanceof ShadowRoot ? root : document.head\r\n let domStyle = ensureDomStyle(styleParent)\r\n item.styles.render(domStyle as HTMLStyleElement)\r\n item._hooks.Mount && item._hooks.Mount(item)\r\n item.children.items.forEach(child => {\r\n if (child instanceof ElementNode && child._portal) {\r\n let dom = child._portal!(child.getRoot())\r\n dom && child.render(dom)\r\n } else {\r\n child.render(domNode)\r\n }\r\n })\r\n }\r\n }\r\n\r\n\r\n\r\n } else {\r\n let domElement = this.owner.domElement;\r\n if (updateDom && domElement) {\r\n let domNode = item._createDOMNode();\r\n const ref = domElement.childNodes[finalIndex] ?? null;\r\n domElement.insertBefore(domNode, ref);\r\n }\r\n }\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n return item;\r\n }\r\n\r\n remove(item: NodeItem, updateDom = true, silent = false): void {\r\n\r\n const index = this.items.indexOf(item);\r\n if (index < 0) return;\r\n\r\n if (item instanceof ElementNode) {\r\n const done = () => {\r\n const el = item.domElement\r\n this.items.splice(index, 1);\r\n updateDom && el && el.remove()\r\n item._hooks?.Remove?.(item)\r\n item._dispose();\r\n }\r\n if (item._hooks.BeforeRemove && item.domElement) {\r\n let doneCalled = false;\r\n const onceDone = () => { if (!doneCalled) { doneCalled = true; done(); } };\r\n item._hooks.BeforeRemove(item, onceDone);\r\n if (!doneCalled) onceDone();\r\n } else {\r\n done()\r\n }\r\n\r\n } else {\r\n const el = item.domText\r\n this.items.splice(index, 1);\r\n updateDom && el && el.remove()\r\n item._dispose();\r\n }\r\n\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n }\r\n\r\n clear(updateDom = true, silent = false): void {\r\n if (this.items.length === 0) return;\r\n const snapshot = this.items.slice();\r\n\r\n for (const item of snapshot) {\r\n this.remove(item, updateDom, true);\r\n }\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n }\r\n\r\n _dispose(): void {\r\n this.items.forEach(child => child._dispose())\r\n this.items = [];\r\n }\r\n\r\n swap(aIndex: number, bIndex: number, updateDom = true, silent = false) {\r\n if (aIndex < 0 || bIndex < 0 ||\r\n aIndex >= this.items.length || bIndex >= this.items.length ||\r\n aIndex === bIndex) return;\r\n\r\n const itemA = this.items[aIndex];\r\n const itemB = this.items[bIndex];\r\n\r\n this.items[aIndex] = itemB;\r\n this.items[bIndex] = itemA;\r\n\r\n if (updateDom) this._swapDomElement(itemA, itemB);\r\n\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n }\r\n\r\n move(fromIndex: number, toIndex: number, updateDom = true, silent = false): void {\r\n if (fromIndex < 0 || fromIndex >= this.items.length ||\r\n toIndex < 0 || toIndex >= this.items.length || fromIndex === toIndex) return;\r\n\r\n const item = this.items[fromIndex];\r\n\r\n this.items.splice(fromIndex, 1);\r\n this.items.splice(toIndex, 0, item);\r\n\r\n if (updateDom) this._moveDomElement(item, toIndex);\r\n\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n }\r\n\r\n generateHTML(): string {\r\n let html = \"\";\r\n for (const item of this.items) html += item.generateHTML();\r\n return html;\r\n }\r\n}\r\n","import type { StyleRule } from \"./StyleRule.js\";\r\nimport type { StyleValue } from \"../types.js\";\r\nimport { camelToKebab } from \"../helpers.js\";\r\nimport { PrefixCSS } from \"../constants.js\";\r\nimport { Listener } from \"../types.js\"\r\n\r\nexport class StyleProperty {\r\n name: string;\r\n cssName: string;\r\n value: StyleValue = \"\";\r\n parentRule: StyleRule;\r\n\r\n constructor(name: string, value: StyleValue, parentRule: StyleRule) {\r\n this.name = name;\r\n this.cssName = camelToKebab(name);\r\n this.parentRule = parentRule;\r\n this.set(value);\r\n }\r\n\r\n _domUpdate(): void {\r\n if (!this.parentRule) return;\r\n const domRule = this.parentRule.domRule;\r\n\r\n if (domRule && (domRule as CSSStyleRule).style) {\r\n let style: CSSStyleDeclaration = (domRule as CSSStyleRule).style;\r\n style.setProperty(this.cssName, String(this.value));\r\n\r\n if (PrefixCSS[this.name]) {\r\n PrefixCSS[this.name].forEach((prefix) => {\r\n style.setProperty(`-${prefix}-${this.cssName}`, String(this.value));\r\n });\r\n }\r\n }\r\n }\r\n _dispose(): void {\r\n this.value = \"\";\r\n this.parentRule = null as any;\r\n }\r\n\r\n set(value: StyleValue): void {\r\n\r\n if (typeof value === \"function\") {\r\n let listener = (() => {\r\n if (!this.parentRule || this.parentRule.parentNode?._disposed) return;\r\n this.value = value(listener);\r\n this._domUpdate();\r\n }) as unknown as Listener;\r\n\r\n listener.onSubscribe = (release: () => void) => {\r\n this.parentRule.parentNode?.addHook(\"BeforeRemove\", () => {\r\n release();\r\n listener = null!;\r\n });\r\n };\r\n\r\n listener.elementNode = this.parentRule!.root!;\r\n listener.debug = `class:${this.parentRule?.root?.tagName}_${this.parentRule?.root?.nodeId} style:${this.name}`;\r\n this.value = value(listener);\r\n } else {\r\n this.value = value;\r\n }\r\n\r\n this._domUpdate();\r\n }\r\n\r\n remove(): void {\r\n if (!this.parentRule) return;\r\n\r\n if (this.parentRule.domRule instanceof CSSStyleRule) {\r\n const domStyle = this.parentRule.domRule.style;\r\n domStyle.removeProperty(this.cssName);\r\n\r\n if (PrefixCSS[this.name]) {\r\n PrefixCSS[this.name].forEach((prefix) => {\r\n domStyle.removeProperty(`-${prefix}-${this.cssName}`);\r\n });\r\n }\r\n }\r\n delete this.parentRule.styleBlock![this.name];\r\n this._dispose();\r\n }\r\n\r\n cssText(): string {\r\n let str = `${this.cssName}: ${this.value}`;\r\n if (PrefixCSS[this.name]) {\r\n PrefixCSS[this.name].forEach((prefix) => {\r\n str += `; -${prefix}-${this.cssName}: ${this.value}`;\r\n });\r\n }\r\n return str;\r\n }\r\n}","import { ElementNode } from \"./ElementNode.js\";\r\nimport { StyleProperty } from \"./StyleProperty.js\";\r\nimport { StyleList } from \"./StyleList.js\";\r\n\r\nexport class StyleRule {\r\n selectorText: string;\r\n domRule: CSSRule | CSSMediaRule | CSSKeyframesRule | null = null;\r\n styleList: StyleList | null;\r\n styleBlock: Record<string, StyleProperty> | null = {};\r\n parent: StyleRule | ElementNode | null;\r\n\r\n constructor(selectorText: string, parent: StyleRule | ElementNode) {\r\n this.selectorText = selectorText;\r\n this.styleList = new StyleList(this);\r\n this.parent = parent;\r\n }\r\n\r\n _dispose(): void {\r\n\r\n if (this.styleBlock) {\r\n for (const prop of Object.values(this.styleBlock)) {\r\n prop._dispose();\r\n }\r\n }\r\n\r\n if (this.styleList) {\r\n this.styleList._dispose();\r\n }\r\n\r\n this.styleBlock = null;\r\n this.styleList = null;\r\n this.domRule = null;\r\n this.parent = null;\r\n }\r\n\r\n get root() {\r\n let node = this.parent;\r\n while (node instanceof StyleRule) {\r\n node = node.parent;\r\n }\r\n return node;\r\n }\r\n\r\n get parentNode(): ElementNode | null {\r\n let root: any = this.parent;\r\n while (root && root instanceof StyleRule) {\r\n root = root.parent;\r\n }\r\n return root as ElementNode;\r\n }\r\n \r\n insertStyle(name: string, val: any): void {\r\n if (!this.styleBlock) return;\r\n if (this.styleBlock[name]) {\r\n this.styleBlock[name].set(val);\r\n } else {\r\n this.styleBlock[name] = new StyleProperty(name, val, this);\r\n }\r\n }\r\n\r\n removeStyle(name: string): void {\r\n if (!this.styleBlock) return;\r\n if (this.styleBlock[name]) {\r\n this.styleBlock[name].remove();\r\n }\r\n }\r\n\r\n cssText(): string {\r\n if (!this.styleBlock || !this.styleList) return \"\";\r\n const styleStr = Object.values(this.styleBlock).map(decl => decl.cssText()).join(\";\");\r\n const nested = this.styleList.cssText();\r\n return `${this.selectorText} { ${styleStr} ${nested} } `;\r\n }\r\n\r\n mount(domRule: CSSRule | CSSKeyframesRule): void {\r\n if (!domRule || !this.styleList) return;\r\n this.domRule = domRule;\r\n if (\"cssRules\" in domRule) {\r\n this.styleList.mount(domRule.cssRules as CSSRuleList);\r\n }\r\n }\r\n\r\n remove(): void {\r\n\r\n if (this.domRule && this.domRule.parentStyleSheet) {\r\n const sheet = this.domRule.parentStyleSheet;\r\n const rules = sheet.cssRules;\r\n for (let i = 0; i < rules.length; i++) {\r\n if (rules[i] === this.domRule) {\r\n sheet.deleteRule(i);\r\n break;\r\n }\r\n }\r\n }\r\n this._dispose();\r\n }\r\n\r\n render(domSheet: CSSStyleSheet | CSSGroupingRule) {\r\n if (!this.styleBlock || !this.styleList) return;\r\n const styleStr = Object.values(this.styleBlock).map(decl => decl.cssText()).join(\";\");\r\n try {\r\n if (!this.selectorText.startsWith(\"@\")) {\r\n const css = `${this.selectorText} { ${styleStr} }`;\r\n const index = domSheet.insertRule(css, domSheet.cssRules.length);\r\n const domRule = domSheet.cssRules[index];\r\n if (domRule && \"selectorText\" in domRule) {\r\n this.mount(domRule);\r\n }\r\n } else if (/^@(media|supports|container|layer)\\b/.test(this.selectorText)) {\r\n const index = domSheet.insertRule(`${this.selectorText} {}`, domSheet.cssRules.length);\r\n const domRule = domSheet.cssRules[index];\r\n if (\"cssRules\" in domRule) {\r\n this.mount(domRule as CSSGroupingRule);\r\n this.styleList.render(domRule as CSSGroupingRule);\r\n }\r\n } else if (this.selectorText.startsWith(\"@keyframes\") || this.selectorText.startsWith(\"@font-face\")) {\r\n const css = this.cssText();\r\n const index = domSheet.insertRule(css, domSheet.cssRules.length);\r\n const domRule = domSheet.cssRules[index];\r\n this.mount(domRule);\r\n }\r\n } catch (err) {\r\n console.warn(\"Failed to insert rule:\", this.selectorText, err);\r\n }\r\n }\r\n}","import { ElementNode } from \"./ElementNode.js\";\r\nimport { selectorSplitter } from \"../helpers.js\";\r\nimport { StyleRule } from \"./StyleRule.js\";\r\n\r\nexport class StyleList {\n parent: StyleRule | ElementNode | null;\n items: StyleRule[] = [];\n domStyle: HTMLStyleElement | null = null;\n\r\n constructor(parent: StyleRule | ElementNode) {\r\n this.parent = parent;\r\n }\r\n\r\n get parentNode(): ElementNode | null {\r\n let root: any = this.parent;\r\n while (root && root instanceof StyleRule) {\r\n root = root.parent;\r\n }\r\n return root as ElementNode;\r\n }\r\n\r\n addCSS(obj: Record<string, any>, parentSelector: string = \"\"): void {\n if (!this.items || !this.parent) return;\n const basic: Record<string, any> = {};\r\n\r\n function getSelector(selector: string, prev: string): string {\r\n return selector.startsWith(\"&\")\r\n ? `${prev}${selector.slice(1)}`\r\n : `${prev} ${selector}`;\r\n }\r\n\r\n for (const selector in obj) {\r\n const value = obj[selector];\r\n let splitKeys = selectorSplitter(selector);\r\n for (let key of splitKeys) {\r\n const currentSelector = getSelector(key, parentSelector);\r\n if (/^@(container|layer|supports|media)\\b/.test(key)) {\r\n if (typeof value === \"object\" && value != null) {\r\n const rule = new StyleRule(key, this.parent);\r\n rule.styleList!.addCSS(value, parentSelector);\r\n this.items.push(rule);\n }\r\n } else if (key.startsWith(\"@keyframes\")) {\r\n const rule = new StyleRule(key, this.parent);\r\n rule.styleList!.addCSS(value, \"\");\r\n this.items.push(rule);\n } else if (key.startsWith(\"@font-face\")) {\r\n const rule = new StyleRule(key, this.parent);\r\n for (const k in value) rule.insertStyle(k, value[k]);\r\n this.items.push(rule);\n } else if (typeof value === \"object\" && value != null) {\r\n const rule = new StyleRule(currentSelector, this.parent);\r\n this.items.push(rule);\n for (const [k, v] of Object.entries(value)) {\r\n if (typeof v === \"object\" && v != null) {\r\n let newSelector = getSelector(k, currentSelector);\r\n if (k.startsWith(\"&\")) {\r\n this.addCSS(v, newSelector);\r\n } else {\r\n const r = rule.styleList!.insertRule(newSelector);\r\n r.styleList!.addCSS(v, newSelector);\r\n }\r\n } else {\r\n rule.insertStyle(k, v);\r\n }\r\n }\r\n } else {\r\n basic[key] = value;\r\n }\r\n }\r\n }\r\n\r\n if (Object.keys(basic).length) {\r\n const rule = new StyleRule(parentSelector, this.parent);\r\n for (const key in basic) rule.insertStyle(key, basic[key]);\r\n this.items.push(rule);\n }\n }\n\n cssText(): string {\n if (!this.items) return \"\";\n return this.items.map((rule) => rule.cssText()).join(\"\");\n }\n\n insertRule(selector: string): StyleRule {\n if (!this.items || !this.parent) return null as any;\n let rule = this.items.find((rule) => rule.selectorText === selector);\n if (!rule) {\n rule = new StyleRule(selector, this.parent);\n this.items.push(rule);\n }\n return rule;\n }\n\n mount(domRuleList: CSSRuleList): void {\n if (!this.items) return;\n if (!domRuleList) throw Error(\"Require domRuleList argument\");\n let wrongCount = 0;\n const fixOddEven = (css: string) => css.replace(\"(odd)\", \"(2n+1)\").replace(\"(even)\", \"(2n)\");\n\n this.items.forEach((rule, i) => {\n const index = i - wrongCount;\r\n const domRule = domRuleList[index];\r\n if (!domRule) return;\r\n if (rule.selectorText.startsWith(\"@\") && domRule instanceof CSSKeyframesRule) {\r\n rule.mount(domRule);\r\n } else if (\"keyText\" in domRule) {\r\n rule.mount(domRule);\r\n } else if (\"selectorText\" in domRule) {\r\n if (domRule.selectorText !== fixOddEven(rule.selectorText)) {\r\n wrongCount += 1;\r\n } else {\r\n rule.mount(domRule);\r\n }\r\n } else if (\"cssRules\" in domRule) {\r\n rule.mount(domRule as CSSMediaRule);\r\n }\r\n });\r\n }\r\n\r\n render(dom: HTMLStyleElement | CSSGroupingRule) {\n if (dom instanceof HTMLStyleElement) {\n this.domStyle = dom\n this.items.forEach((rule) => rule.render(dom.sheet!));\n } else if (dom instanceof CSSGroupingRule) {\n this.items.forEach((rule) => rule.render(dom));\n }\n }\n\n _dispose(): void {\n\n if (this.items) {\n for (let i = 0; i < this.items.length; i++) {\n this.items[i]._dispose();\n }\n }\n\n this.items = [];\n this.parent = null;\n this.domStyle = null;\n }\n}\n","import type { DomphyElement, EventName, HookMap, TagName, PartialElement } from \"../types.js\";\r\nimport { AttributeList } from \"./AttributeList.js\";\r\nimport { ElementList } from \"./ElementList.js\";\r\nimport { StyleList } from \"./StyleList.js\";\r\nimport { validate, mergePartial, getTagName, deepClone, ensureDomStyle } from \"../helpers.js\";\r\nimport { merge, hashString } from \"../utils.js\";\r\nimport { SvgTags } from \"../constants.js\"\r\n\r\nexport class ElementNode {\r\n _disposed = false\r\n type = \"ElementNode\"\r\n parent: ElementNode | null = null;\r\n _portal?: (root: ElementNode) => HTMLElement;\r\n tagName: TagName;\r\n children = new ElementList(this);\r\n styles = new StyleList(this);\r\n attributes = new AttributeList(this);\r\n domElement?: HTMLElement | null = null;\r\n _hooks: HookMap = {};\r\n _events?: { [K in EventName]?: (event: Event, node: ElementNode) => void } | null = null;\r\n _context?: Record<string, any> = {};\r\n _metadata?: Record<string, any> = {};\r\n key?: string | number | null = null;\r\n nodeId: string\r\n\r\n constructor(domphyElement: DomphyElement, _parent: ElementNode | null = null, index = 0) {\r\n domphyElement = deepClone(domphyElement)\r\n validate(domphyElement)\r\n domphyElement.style = domphyElement.style || {}\r\n this.parent = _parent;\r\n this.tagName = getTagName(domphyElement) as TagName;\r\n domphyElement = mergePartial(domphyElement) as DomphyElement\r\n\r\n this.key = (domphyElement as any)._key ?? null;\r\n this._context = domphyElement._context || {}\r\n this._metadata = domphyElement._metadata || {}\r\n\r\n let tempPath = `${this.parent?.nodeId}.${index}`\r\n const str = JSON.stringify(domphyElement.style || {}, (k, v) => typeof v === \"function\" ? tempPath : v,);\r\n this.nodeId = hashString(tempPath + str)\r\n\r\n this.attributes!.addClass(`${this.tagName}_${this.nodeId}`);\r\n if (domphyElement._onSchedule) domphyElement._onSchedule(this, domphyElement)\r\n\r\n this.merge(domphyElement)\r\n\r\n const children = (domphyElement as any)[this.tagName];\r\n\r\n if (children != null && children != undefined) {\r\n if (typeof children === \"function\") {\r\n\r\n let listener: any = () => {\r\n if (this._disposed) return\r\n let input = children(listener)\r\n this.children!.update(Array.isArray(input) ? input : [input])\r\n }\r\n\r\n listener!.elementNode = this;\r\n listener!.debug = `class:${this.tagName}_${this.nodeId} children`;\r\n listener!.onSubscribe = (release: () => void) => this.addHook(\"BeforeRemove\", () => {\r\n release()\r\n listener = null\r\n });\r\n listener && listener();\r\n } else {\r\n this.children!.update(Array.isArray(children) ? children : [children])\r\n }\r\n }\r\n this._hooks.Init && this._hooks.Init(this)\r\n }\r\n\r\n _createDOMNode() {\r\n const svgNamespace = \"http://www.w3.org/2000/svg\"\r\n let node = SvgTags.includes(this.tagName)\r\n ? document.createElementNS(svgNamespace, this.tagName)\r\n : document.createElement(this.tagName)\r\n\r\n this.domElement = node as HTMLElement\r\n\r\n if (this._events) {\r\n for (const key in this._events) {\r\n const eventName = key as EventName;\r\n const handler = this._events[eventName] as (event: Event, node: ElementNode) => void;\r\n let fn: any = (event: Event) => handler(event, this)\r\n node.addEventListener(eventName, fn)\r\n this.addHook(\"BeforeRemove\", (n) => {\r\n n.domElement!.removeEventListener(eventName, fn)\r\n fn = null\r\n })\r\n }\r\n }\r\n\r\n if (this.attributes) {\r\n Object.values(this.attributes.items!).forEach(attr => attr.render())\r\n }\r\n return node\r\n }\r\n\r\n _dispose(): void {\r\n this._disposed = true\r\n if (this.children) {\r\n \r\n this.children._dispose();\r\n }\r\n\r\n if (this.styles) {\r\n this.styles.items!.forEach((rule) => rule.remove());\r\n this.styles._dispose();\r\n }\r\n\r\n if (this.attributes) {\r\n this.attributes._dispose();\r\n }\r\n\r\n this.domElement = null;\r\n this._hooks = {};\r\n this._events = null;\r\n this._context = {};\r\n this._metadata = {};\r\n this.parent = null;\r\n }\r\n merge(part: PartialElement) {\r\n merge(this._context, part._context)\r\n merge(this._metadata, part._metadata)\r\n\r\n const keys = Object.keys(part)\r\n for (let i = 0; i < keys.length; i++) {\r\n const originalKey = keys[i];\r\n const value = (part as any)[originalKey];\r\n if ([\"$\", \"_onSchedule\", \"_key\", \"_context\", \"_metadata\", \"style\", this.tagName].includes(originalKey)) {\r\n continue\r\n } else if ([\"_onInit\", \"_onInsert\", \"_onMount\", \"_onBeforeUpdate\", \"_onUpdate\", \"_onBeforeRemove\", \"_onRemove\"].includes(originalKey)) {\r\n this.addHook(originalKey.substring(3) as keyof HookMap, value);\r\n } else if (originalKey.startsWith(\"on\")) {\r\n this.addEvent(originalKey.substring(2).toLowerCase() as EventName, value);\r\n } else if (originalKey == \"_portal\") {\r\n this._portal = value\r\n } else if (originalKey == \"class\" && typeof value === \"string\") {\r\n this.attributes!.addClass(value);\r\n } else {\r\n this.attributes!.set(originalKey, value);\r\n }\r\n }\r\n if (part.style) {\r\n this.styles.addCSS(part.style || {}, `.${`${this.tagName}_${this.nodeId}`}`);\r\n }\r\n\r\n }\r\n addEvent(name: EventName, callback: (event: Event, node: ElementNode) => void): void {\r\n\r\n this._events = this._events || {}\r\n\r\n let current = this._events[name]\r\n if (typeof current == \"function\") {\r\n this._events[name] = (event: Event, node: ElementNode) => {\r\n current!(event, node)\r\n callback(event, node)\r\n }\r\n } else {\r\n this._events[name] = callback\r\n }\r\n }\r\n\r\n addHook<K extends keyof HookMap>(name: K, callback: HookMap[K]): void {\r\n const current = this._hooks[name];\r\n\r\n if (typeof current === \"function\") {\r\n this._hooks[name] = ((...args: any[]) => {\r\n (current as Function)(...args);\r\n (callback as Function)(...args);\r\n }) as HookMap[K];\r\n } else {\r\n this._hooks[name] = callback;\r\n }\r\n }\r\n getRoot(): ElementNode {\r\n let root: ElementNode = this;\r\n while (root && root instanceof ElementNode && root.parent) {\r\n root = root.parent;\r\n }\r\n return root\r\n }\r\n\r\n getContext(name: string): any {\r\n let node: ElementNode | null = this;\r\n while (node && (!node._context || !Object.prototype.hasOwnProperty.call(node._context, name))) {\r\n node = node.parent;\r\n }\r\n return node && node._context ? node._context[name] : undefined;\r\n }\r\n\r\n setContext(name: string, value: any) {\r\n this._context = this._context || {}\r\n this._context[name] = value;\r\n }\r\n\r\n getMetadata(name: string): any {\r\n return this._metadata ? this._metadata[name] : undefined;\r\n }\r\n\r\n setMetadata(key: string, value: any) {\r\n this._metadata = this._metadata || {}\r\n this._metadata[key] = value;\r\n\r\n }\r\n\r\n generateCSS(): string {\r\n if (!this.styles || !this.children) return \"\";\r\n let css = this.styles.cssText()\r\n css += this.children.items.map(child => child instanceof ElementNode ? child.generateCSS() : \"\").join(\"\")\r\n return css\r\n }\r\n\r\n generateHTML(): string {\r\n if (!this.children || !this.attributes) return \"\";\r\n let content = this.children.generateHTML();\r\n const attributes = this.attributes.generateHTML();\r\n return `<${this.tagName}${attributes}>${content}</${this.tagName}>`;\r\n }\r\n\r\n mount(domElement: HTMLElement, domStyle?: HTMLStyleElement): void {\r\n if (!domElement) throw new Error(\"Missing dom node on bind\");\r\n this.domElement = domElement;\r\n\r\n if (this._events) {\r\n for (const key in this._events) {\r\n const eventName = key as EventName;\r\n const handler = this._events[eventName] as (event: Event, node: ElementNode) => void;\r\n let fn: any = (event: Event) => handler(event, this)\r\n domElement.addEventListener(eventName, fn)\r\n this.addHook(\"BeforeRemove\", (n) => {\r\n n.domElement!.removeEventListener(eventName, fn)\r\n fn = null\r\n })\r\n }\r\n }\r\n\r\n if (this.children) {\r\n this.children.items.forEach((child, i) => {\r\n const childNode = domElement.childNodes[i];\r\n if (childNode instanceof Node && child instanceof ElementNode) {\r\n child.mount(childNode as HTMLElement, domStyle);\r\n }\r\n });\r\n }\r\n\r\n this._hooks.Mount && this._hooks.Mount(this)\r\n }\r\n\r\n render(domElement: HTMLElement | SVGElement | DocumentFragment): HTMLElement | SVGElement {\r\n const newNode = this._createDOMNode();\r\n domElement.appendChild(newNode)\r\n this._hooks.Mount && this._hooks.Mount(this)\r\n let domStyle = this.getRoot().styles.domStyle\r\n let root = domElement.getRootNode()\r\n const styleParent = root instanceof ShadowRoot ? root : document.head\r\n domStyle ||= ensureDomStyle(styleParent)\r\n this.styles.render(domStyle as HTMLStyleElement)\r\n this.children.items.forEach(child => {\r\n if (child instanceof ElementNode && child._portal) {\r\n let dom = child._portal!(this.getRoot())\r\n dom && child.render(dom)\r\n } else {\r\n child.render(newNode)\r\n }\r\n })\r\n return newNode;\r\n }\r\n\r\n remove() {\r\n if (this.parent) {\r\n this.parent.children.remove(this)\r\n\r\n } else {\r\n this.domElement?.remove()\r\n this._dispose();\r\n }\r\n }\r\n}\r\n","import { Notifier } from \"./Notifier.js\"\r\n\r\ntype Listener = (...args: any[]) => void\r\n\r\nexport class RecordState<T extends Record<string, any> = Record<string, any>> {\r\n private _notifier = new Notifier()\r\n private _record: T\r\n readonly initialRecord: T\r\n\r\n constructor(record: T) {\r\n this.initialRecord = { ...record }\r\n this._record = { ...record }\r\n }\r\n\r\n get<K extends keyof T>(key: K, l?: Listener): T[K] {\r\n if (l) this._notifier.addListener(key as string, l)\r\n return this._record[key]\r\n }\r\n\r\n set<K extends keyof T>(key: K, value: T[K]): void {\r\n this._record[key] = value\r\n this._notifier.notify(key as string)\r\n }\r\n\r\n addListener<K extends keyof T>(key: K, fn: Listener): () => void {\r\n return this._notifier.addListener(key as string, fn)\r\n }\r\n\r\n removeListener<K extends keyof T>(key: K, fn: Listener): void {\r\n this._notifier.removeListener(key as string, fn)\r\n }\r\n\r\n reset<K extends keyof T>(key: K): void {\r\n this.set(key, this.initialRecord[key])\r\n }\r\n\r\n _dispose(): void {\r\n this._notifier._dispose()\r\n }\r\n}\r\n","export * from \"./size.js\"\nexport * from \"./density.js\"\nexport * from \"./tone.js\"\nexport * from \"./theme.js\"\n","import { ThemeInput } from \"./types.js\";\r\n\r\nlet light: ThemeInput = {\r\n direction: \"darken\",\r\n colors: {\r\n \"primary\": [\r\n \"#ffffff\",\r\n \"#e3ecff\",\r\n \"#c6daff\",\r\n \"#aac8ff\",\r\n \"#8fb6ff\",\r\n \"#76a3ff\",\r\n \"#5f91fc\",\r\n \"#4a7ff4\",\r\n \"#386ee7\",\r\n \"#2a5ed7\",\r\n \"#1e4ec2\",\r\n \"#1440aa\",\r\n \"#0c3290\",\r\n \"#072674\",\r\n \"#041a57\",\r\n \"#020f38\",\r\n \"#010419\",\r\n \"#000000\"\r\n ],\r\n \"secondary\": [\r\n \"#ffffff\",\r\n \"#fce6ea\",\r\n \"#faced6\",\r\n \"#f7b5c2\",\r\n \"#f29db0\",\r\n \"#ec859e\",\r\n \"#e36e8d\",\r\n \"#d8597d\",\r\n \"#ca456e\",\r\n \"#b93460\",\r\n \"#a42351\",\r\n \"#8e1643\",\r\n \"#770b36\",\r\n \"#5f0529\",\r\n \"#46031d\",\r\n \"#2d0210\",\r\n \"#130104\",\r\n \"#000000\"\r\n ],\r\n \"info\": [\r\n \"#ffffff\",\r\n \"#dcf0f9\",\r\n \"#b7e1f6\",\r\n \"#90d2f1\",\r\n \"#6ac3eb\",\r\n \"#42b4e2\",\r\n \"#16a4d5\",\r\n \"#0094c4\",\r\n \"#0084b2\",\r\n \"#00739e\",\r\n \"#00638a\",\r\n \"#005476\",\r\n \"#004461\",\r\n \"#00354d\",\r\n \"#002638\",\r\n \"#001623\",\r\n \"#00070d\",\r\n \"#000000\"\r\n ],\r\n \"success\": [\r\n \"#ffffff\",\r\n \"#e3f3dc\",\r\n \"#c6e8b8\",\r\n \"#a9dd94\",\r\n \"#8ed171\",\r\n \"#75c450\",\r\n \"#61b635\",\r\n \"#51a51f\",\r\n \"#429304\",\r\n \"#358100\",\r\n \"#2a7000\",\r\n \"#215f00\",\r\n \"#194d00\",\r\n \"#123c00\",\r\n \"#0b2b00\",\r\n \"#051a00\",\r\n \"#010900\",\r\n \"#000000\"\r\n ],\r\n \"warning\": [\r\n \"#ffffff\",\r\n \"#ffeada\",\r\n \"#ffd3b3\",\r\n \"#ffbd8d\",\r\n \"#ffa96b\",\r\n \"#ff9853\",\r\n \"#ec8640\",\r\n \"#d77531\",\r\n \"#c16523\",\r\n \"#aa5718\",\r\n \"#944a0f\",\r\n \"#7e3d09\",\r\n \"#673106\",\r\n \"#512504\",\r\n \"#3b1a03\",\r\n \"#250e02\",\r\n \"#0e0401\",\r\n \"#000000\"\r\n ],\r\n \"attention\": [\r\n \"#ffffff\",\r\n \"#ffeada\",\r\n \"#ffd3b3\",\r\n \"#ffbd8d\",\r\n \"#ffa96b\",\r\n \"#ff9853\",\r\n \"#ec8640\",\r\n \"#d77531\",\r\n \"#c16523\",\r\n \"#aa5718\",\r\n \"#944a0f\",\r\n \"#7e3d09\",\r\n \"#673106\",\r\n \"#512504\",\r\n \"#3b1a03\",\r\n \"#250e02\",\r\n \"#0e0401\",\r\n \"#000000\"\r\n ],\r\n \"error\": [\r\n \"#ffffff\",\r\n \"#fce7e4\",\r\n \"#fbcfca\",\r\n \"#f8b7b0\",\r\n \"#f59f96\",\r\n \"#ef877e\",\r\n \"#e86f67\",\r\n \"#de5852\",\r\n \"#d3403e\",\r\n \"#c5282c\",\r\n \"#b30a1b\",\r\n \"#9e000b\",\r\n \"#860001\",\r\n \"#6c0000\",\r\n \"#510000\",\r\n \"#340000\",\r\n \"#170000\",\r\n \"#000000\"\r\n ],\r\n \"danger\": [\r\n \"#ffffff\",\r\n \"#fce7e4\",\r\n \"#fbcfca\",\r\n \"#f8b7b0\",\r\n \"#f59f96\",\r\n \"#ef877e\",\r\n \"#e86f67\",\r\n \"#de5852\",\r\n \"#d3403e\",\r\n \"#c5282c\",\r\n \"#b30a1b\",\r\n \"#9e000b\",\r\n \"#860001\",\r\n \"#6c0000\",\r\n \"#510000\",\r\n \"#340000\",\r\n \"#170000\",\r\n \"#000000\"\r\n ],\r\n \"highlight\": [\r\n \"#ffffff\",\r\n \"#f9f5cd\",\r\n \"#f4eb95\",\r\n \"#efe05a\",\r\n \"#e6d427\",\r\n \"#d3c100\",\r\n \"#bfad00\",\r\n \"#ab9b00\",\r\n \"#988900\",\r\n \"#857700\",\r\n \"#736600\",\r\n \"#615600\",\r\n \"#4f4600\",\r\n \"#3e3600\",\r\n \"#2c2700\",\r\n \"#1b1700\",\r\n \"#090700\",\r\n \"#000000\"\r\n ],\r\n \"neutral\": [\r\n \"#ffffff\",\r\n \"#ededed\",\r\n \"#dbdbdb\",\r\n \"#cacaca\",\r\n \"#bababa\",\r\n \"#ababab\",\r\n \"#9b9b9b\",\r\n \"#8d8d8d\",\r\n \"#7e7e7e\",\r\n \"#707070\",\r\n \"#636363\",\r\n \"#565656\",\r\n \"#484848\",\r\n \"#383838\",\r\n \"#282828\",\r\n \"#181818\",\r\n \"#080808\",\r\n \"#000000\"\r\n ]\r\n },\r\n baseTones: {\r\n highlight: 5,\r\n warning: 6,\r\n error: 8,\r\n danger: 8,\r\n secondary: 8,\r\n primary: 9,\r\n info: 8,\r\n success: 8,\r\n neutral: 8,\r\n },\r\n fontSizes: [\"0.75rem\", \"0.875rem\", \"1rem\", \"1.25rem\", \"1.5625rem\", \"1.9375rem\", \"2.4375rem\", \"3.0625rem\"],\r\n densities: [0.75, 1, 1.5, 2, 2.5],\r\n darkBias: 1,\r\n custom: {},\r\n}\r\n\r\nexport default light\r\n","import { ElementNode, Listener } from \"@domphy/core\";\r\nimport { ThemeInput, ThemeVars } from \"./types.js\";\r\nimport light from \"./light.js\";\r\n\r\nconst themes: Record<string, ThemeInput> = {\r\n light: JSON.parse(JSON.stringify(light)),\r\n dark: createDark(light),\r\n};\r\n\r\nfunction colorSteps(input: ThemeInput): number {\r\n const firstColor = Object.keys(input.colors)[0];\r\n return firstColor ? input.colors[firstColor].length : 0;\r\n}\r\n\r\n// --- Validation ---\r\n\r\nfunction validateTheme(partial: Partial<ThemeInput>): void {\r\n for (let key in partial) {\r\n if (!Object.keys(light).includes(key as keyof ThemeInput)) {\r\n throw new Error(`Invalid key: ${key}`);\r\n }\r\n }\r\n if (partial.fontSizes && !Array.isArray(partial.fontSizes)) {\r\n throw new Error(`fontSize must be array of string`);\r\n }\r\n if (partial.densities) {\r\n if (!Array.isArray(partial.densities) || partial.densities.some(v => typeof v !== \"number\")) {\r\n throw new Error(`densities must be array of number`);\r\n }\r\n }\r\n if (\"custom\" in partial) {\r\n const custom = partial.custom!;\r\n if (typeof custom !== \"object\" || custom === null) {\r\n throw new Error(`Invalid custom property: must be an object`);\r\n }\r\n }\r\n}\r\n\r\n// --- Deep Merge ---\r\n\r\nfunction deepMerge(target: any, source: any): void {\r\n for (const key in source) {\r\n if (\r\n source[key] &&\r\n typeof source[key] === \"object\" &&\r\n !Array.isArray(source[key])\r\n ) {\r\n target[key] ??= {};\r\n deepMerge(target[key], source[key]);\r\n } else {\r\n target[key] = source[key];\r\n }\r\n }\r\n}\r\n\r\n// --- Builders (pure functions) ---\r\n\r\nfunction buildThemeCSS(name: string, input: ThemeInput): string {\r\n const styles: Record<string, string | number> = {};\r\n const toneSteps = colorSteps(input);\r\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const colorName in input.colors) {\r\n [...Array(toneSteps).keys()].forEach(i =>\r\n styles[`--${colorName}-${i}`] = input.colors[colorName][i]\r\n );\r\n }\r\n } else if (key === \"fontSizes\") {\r\n [...Array(8).keys()].forEach(i =>\r\n styles[`--fontSize-${i}`] = input.fontSizes[i]\r\n );\r\n } else if (key === \"densities\") {\r\n continue;\r\n } else {\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n styles[`--${key}-${k.replace(\"/\", \"_\")}`] = (value as Record<string, string>)[k];\r\n }\r\n }\r\n }\r\n }\r\n\r\n let text = \"\";\r\n for (const prop in styles) {\r\n text += ` ${prop}: ${styles[prop]};\\n`;\r\n }\r\n return `[data-theme=\"${name}\"] {\\n${text}}`;\r\n}\r\n\r\n// --- Public API ---\r\n\r\nexport function getTheme(name: string): ThemeInput {\r\n if (!themes[name]) throw Error(`Theme \"${name}\" not found`);\r\n return themes[name];\r\n}\r\n\r\nexport function setTheme(name: string, input: Partial<ThemeInput>): void {\r\n validateTheme(input);\r\n if (!themes[name]) themes[name] = structuredClone(light);\r\n deepMerge(themes[name], input);\r\n}\r\n\r\nfunction createDark(source: ThemeInput): ThemeInput {\r\n let dark = structuredClone(source)\r\n dark.direction = \"lighten\"\r\n for (let name in dark.colors) {\r\n dark.colors[name].reverse()\r\n dark.baseTones[name] = dark.colors[name].length - 1 - dark.baseTones[name]\r\n }\r\n return dark\r\n}\r\n\r\nexport function themeTokens(name: string): Record<string, any> {\r\n let input = getTheme(name)\r\n const toneSteps = colorSteps(input);\r\n let tokens: Record<string, any> = {};\r\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const name in input.colors) {\r\n let colorTones = {} as Partial<Record<number, string>>;\r\n [...Array(toneSteps).keys()].forEach(i => colorTones[i] = input.colors[name][i]);\r\n tokens[name] = colorTones as Record<number, string>;\r\n }\r\n } else if (key === \"fontSizes\") {\r\n tokens.fontSizes = input.fontSizes;\r\n } else if (key === \"densities\") {\r\n tokens.densities = input.densities;\r\n } else {\r\n tokens[key] = {} as any;\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n tokens[key][k] = (value as Record<string, string>)[k];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return tokens;\r\n}\r\n\r\nexport function themeVars(): ThemeVars {\r\n let input = getTheme(\"light\")\r\n const toneSteps = colorSteps(input);\r\n let theme = {} as ThemeVars;\r\n\r\n for (const key in input) {\r\n const section = key as keyof ThemeVars;\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const name in input.colors) {\r\n let colorTones = {} as Partial<Record<number, string>>;\r\n [...Array(toneSteps).keys()].forEach(i => colorTones[i] = `var(--${name}-${i})`);\r\n theme[name] = colorTones as Record<number, string>;\r\n }\r\n } else if (key === \"fontSizes\") {\r\n theme.fontSizes = [...Array(8).keys()].map(i => `var(--fontSize-${i})`);\r\n } else if (key === \"densities\") {\r\n continue;\r\n } else {\r\n theme[section] = {} as ThemeVars[typeof section];\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n (theme[section] as Record<string, string>)[k] = `var(--${section as string}-${k.replace(\"/\", \"_\")})`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return theme;\r\n}\r\n\r\nexport function themeCSS(): string {\r\n return Object.entries(themes)\r\n .map(([name, input]) => buildThemeCSS(name, input))\r\n .join(\"\\n\")\r\n}\r\n\r\nexport function themeApply(el?: HTMLStyleElement): void {\r\n if (typeof document === \"undefined\") return\r\n if (el) {\r\n el.textContent = themeCSS()\r\n return\r\n } else {\r\n el = document.getElementById(\"domphy-themes\") as HTMLStyleElement\r\n ?? Object.assign(document.createElement(\"style\"), { id: \"domphy-themes\" })\r\n el.textContent = themeCSS()\r\n document.head.appendChild(el)\r\n }\r\n\r\n}\r\n\r\nexport function themeSpacing(n: number) {\r\n return n / 4 + \"em\"\r\n}\r\n\r\nexport function themeName(object: ElementNode | Listener) {\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n let node: ElementNode = elementNode;\r\n while (node && (!node.attributes || !node.attributes.get(\"dataTheme\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let themeName = \"light\"\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataTheme\")) {\r\n themeName = node.attributes.get(\"dataTheme\")\r\n typeof object == \"function\" && node.attributes.addListener(\"dataTheme\", object)\r\n }\r\n return themeName\r\n}\r\n\r\nexport type ThemeColor = keyof ThemeInput[\"colors\"]\r\n","import type { ElementNode, Listener } from \"@domphy/core\";\nimport { themeVars } from \"./theme.js\";\n\nconst ElementSizes = [\"inherit\"];\n\n[...Array(8).keys()].forEach(i =>{\n ElementSizes.push(`decrease-${i}`)\n ElementSizes.push(`increase-${i}`)\n})\n\nexport type ElementSize = typeof ElementSizes[number];\n\nfunction offsetSize(origin: number, size: ElementSize = \"inherit\"): number {\n\n if (!ElementSizes.includes(size!)) {\n throw Error(`size name \"${size}\" invalid`)\n }\n let resultSize: number\n if (size == \"inherit\") {\n resultSize = origin as number\n } else if (size?.startsWith(\"increase-\")) {\n let offset = parseInt(size.replace(\"increase-\", \"\"), 10)\n resultSize = origin + offset;\n } else if (size?.startsWith(\"decrease-\")) {\n let offset = parseInt(size.replace(\"decrease-\", \"\"), 10)\n resultSize = origin - offset;\n } else {\n resultSize = origin\n }\n return Math.max(0, Math.min(8, resultSize))\n}\n\nfunction contextSize(object: ElementNode | Listener | null): number {\n\n if (!object) return 2\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataSize\"))) {\n node = node.parent as ElementNode\n }\n\n let size = 2\n\n if (node && node.attributes && node.attributes.has(\"dataSize\")) {\n size = offsetSize(size, node.attributes.get(\"dataSize\"))\n typeof object == \"function\" && node.attributes.addListener(\"dataSize\", object)\n }\n return size\n}\n\n\nexport function themeSize(object: ElementNode | Listener, size: ElementSize = \"inherit\"): string {\n let index = offsetSize(contextSize(object), size)\n return themeVars().fontSizes[index]\n}","import type { ElementNode, Listener } from \"@domphy/core\";\nimport { getTheme, themeName } from \"./theme.js\";\n\nconst ElementDensities = [\"inherit\"];\n\n[...Array(5).keys()].forEach(i => {\n ElementDensities.push(`decrease-${i}`);\n ElementDensities.push(`increase-${i}`);\n});\n\nexport type ElementDensity = typeof ElementDensities[number];\n\nfunction offsetDensity(origin: number, density: ElementDensity = \"inherit\"): number {\n\n if (!ElementDensities.includes(density!)) {\n throw Error(`density name \"${density}\" invalid`);\n }\n let resultDensity: number;\n if (density == \"inherit\") {\n resultDensity = origin as number;\n } else if (density?.startsWith(\"increase-\")) {\n let offset = parseInt(density.replace(\"increase-\", \"\"), 10);\n resultDensity = origin + offset;\n } else if (density?.startsWith(\"decrease-\")) {\n let offset = parseInt(density.replace(\"decrease-\", \"\"), 10);\n resultDensity = origin - offset;\n } else {\n resultDensity = origin;\n }\n return Math.max(0, Math.min(4, resultDensity));\n}\n\nfunction contextDensity(object: ElementNode | Listener | null): number {\n\n if (!object) return 2;\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode;\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataDensity\"))) {\n node = node.parent as ElementNode;\n }\n\n let density = 2;\n\n if (node && node.attributes && node.attributes.has(\"dataDensity\")) {\n density = offsetDensity(density, node.attributes.get(\"dataDensity\"));\n typeof object == \"function\" && node.attributes.addListener(\"dataDensity\", object);\n }\n return density;\n}\n\nexport function themeDensity(object: ElementNode | Listener | null): number {\n let index = contextDensity(object);\n return getTheme(object ? themeName(object) : \"light\").densities[index];\n}\n","import { themeVars, themeTokens, getTheme, themeName } from \"./theme.js\"\r\nimport light from \"./light.js\";\r\nimport type { Listener, ElementNode } from \"@domphy/core\";\r\n\r\nconst TONE_STEPS = light.colors.neutral.length\r\n\r\nconst ElementTones = [\"inherit\", \"base\"];\r\n\r\n[...Array(TONE_STEPS).keys()].forEach(i => {\r\n ElementTones.push(`decrease-${i}`)\r\n ElementTones.push(`increase-${i}`)\r\n ElementTones.push(`shift-${i}`)\r\n})\r\n\r\nexport type ElementTone = typeof ElementTones[number];\r\n\r\nfunction adjustTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let newIndex = tone + level;\r\n newIndex = Math.max(0, Math.min(TONE_STEPS - 1, newIndex));\r\n return newIndex\r\n}\r\n\r\nfunction shiftTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let midpoint = Math.floor((TONE_STEPS - 1) / 2)\r\n let newIndex = tone <= midpoint ? tone + level : tone - level\r\n newIndex = newIndex < 0 || newIndex > TONE_STEPS - 1 ? - newIndex : newIndex\r\n newIndex = Math.max(0, Math.min(TONE_STEPS - 1, newIndex));\r\n return newIndex\r\n}\r\n\r\nfunction offsetTone(originTone: number, tone: ElementTone = \"inherit\"): number {\r\n\r\n if (typeof tone == \"number\") return tone\r\n\r\n if (tone == \"inherit\") return originTone\r\n\r\n if (!ElementTones.includes(tone!)) {\r\n throw Error(`tone name \"${tone}\" invalid`)\r\n }\r\n\r\n if (tone.startsWith(\"increase-\")) {\r\n let offset = parseInt(tone.replace(\"increase-\", \"\"), 10)\r\n return adjustTone(originTone, offset);\r\n\r\n } else if (tone.startsWith(\"decrease-\")) {\r\n let offset = parseInt(tone.replace(\"decrease-\", \"\"), 10)\r\n return adjustTone(originTone, - offset);\r\n\r\n } else if (tone.startsWith(\"shift-\")) {\r\n let offset = parseInt(tone.replace(\"shift-\", \"\"), 10)\r\n return shiftTone(originTone, offset);\r\n\r\n } else {\r\n return originTone\r\n }\r\n}\r\n\r\nfunction contextTone(object: ElementNode | Listener | null): number {\r\n\r\n if (!object) return 0\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n let node: ElementNode = elementNode;\r\n while (node && (!node.attributes || !node.attributes.get(\"dataTone\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let tone = 0\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataTone\")) {\r\n tone = offsetTone(tone, node.attributes.get(\"dataTone\"))\r\n typeof object == \"function\" && node.attributes.addListener(\"dataTone\", object)\r\n }\r\n return tone\r\n}\r\n\r\nfunction themeTone(object: ElementNode | Listener, tone: ElementTone = \"inherit\"): number {\r\n\r\n return offsetTone(contextTone(object), tone)\r\n}\r\n\r\nfunction biasContext(context: number, direction: string, bias: number): number {\r\n if (bias <= 0) return context\r\n if (direction === \"lighten\" && context === 0) return bias\r\n if (direction === \"darken\" && context === TONE_STEPS - 1) return TONE_STEPS - 1 - bias\r\n return context\r\n}\r\n\r\nexport function themeColor(object: ElementNode | Listener | null, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n\r\n let themeColor = color == \"inherit\" ? \"neutral\" : color;\r\n\r\n if (!object) {\r\n return themeVars()[themeColor][offsetTone(0, tone)]\r\n }\r\n\r\n let resultTone: number\r\n if (tone == \"base\") {\r\n resultTone = getTheme(themeName(object)).baseTones[themeColor]\r\n } else {\r\n let theme = getTheme(themeName(object))\r\n let context = biasContext(contextTone(object), theme.direction, theme.darkBias)\r\n resultTone = offsetTone(context, tone)\r\n }\r\n let colors = themeVars()[themeColor]\r\n if (!colors){\r\n throw Error(`color \"${themeColor}\" not found on theme \"${themeName(object)}`)\r\n }\r\n let resultColor = colors[resultTone]\r\n\r\n return resultColor\r\n}\r\n\r\nexport function themeColorToken(object: ElementNode | Listener | null, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n\r\n let colorName = color == \"inherit\" ? \"neutral\" : color;\r\n let name = object ? themeName(object as ElementNode | Listener) : \"light\";\r\n let tokens = themeTokens(name);\r\n\r\n if (!object) {\r\n return tokens[colorName][offsetTone(0, tone)]\r\n }\r\n\r\n let resultTone: number\r\n if (tone == \"base\") {\r\n resultTone = getTheme(name).baseTones[colorName]\r\n } else {\r\n let theme = getTheme(name)\r\n let context = biasContext(contextTone(object), theme.direction, theme.darkBias)\r\n resultTone = offsetTone(context, tone)\r\n }\r\n\r\n return tokens[colorName][resultTone]\r\n}\r\n"],"mappings":"mcAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,UAAAE,EAAA,UAAAC,inBCAaC,GAAkB,CAC7B,UACA,aACA,gBACA,iBACA,SACA,WACA,YACA,mBACA,WACA,UACA,UACA,gBACA,gBACA,oBACA,SACA,cACA,QACA,aACA,SACA,YACA,cACA,cACA,aACA,cACA,SACA,mBACA,YACA,UACA,UACA,UACA,aACA,UACA,YACA,YACA,aACA,UACA,SACA,eACA,mBACA,cACA,cACA,eACA,eACA,cACA,aACA,cACA,YACA,UACA,UACA,SACA,YACA,aACA,eACA,UACA,WACA,WACA,cACA,4BACA,WACA,YACA,WACA,eACA,YACA,WACA,YACA,eACA,WACA,iBACA,YACA,UACA,eACA,cACA,aACA,gBACA,gBACA,gBACA,cACA,kBACA,iBACA,iBACA,gBACA,eACA,sBACA,uBACA,qBACA,sBACA,mBACA,kBACA,oBACA,mBACA,iBACA,uBACA,qBACA,oBACA,YACA,YACF,EAEaC,GAAeD,GAAgB,OAAO,CAACE,EAAKC,IAAO,CAC9D,IAAMC,EAAMD,EAAG,MAAM,CAAC,EAAE,YAAY,EACpC,OAAAD,EAAIE,CAAG,EAAID,EACJD,CACT,EAAG,CAAC,CAAiF,ECvGxEG,EAAW,CACtB,IACA,OACA,UACA,UACA,QACA,QACA,IACA,OACA,aACA,KACA,SACA,SACA,UACA,OACA,OACA,MACA,WACA,OACA,WACA,KACA,MACA,UACA,MACA,SACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,OACA,QACA,MACA,WACA,SACA,KACA,WACA,SACA,SACA,IACA,QACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,UACA,SACA,OACA,QACA,SACA,OACA,SACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,QACA,OACA,QA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BvC,EAAc,CACnC,KAAK,IAAIA,EAAK,KAAK,cAAcA,CAAG,CAAC,CACzC,CAEA,UAAiB,CACb,KAAK,UAAU,SAAS,CAC5B,CACJ,ECvCA,IAAA6L,EAAA,GAAAC,EAAAD,EAAA,cAAAE,EAAA,aAAAC,GAAA,eAAAC,GAAA,aAAAC,EAAA,eAAAC,GAAA,oBAAAC,GAAA,iBAAAC,GAAA,cAAAC,EAAA,cAAAC,GAAA,iBAAAC,GAAA,gBAAAC,EAAA,cAAAC,ICEA,IAAIC,GAAoB,CACtB,UAAW,SACX,OAAQ,CACN,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,KAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,MAAS,CACP,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,OAAU,CACR,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,U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","names":["global_exports","__export","dist_exports","src_exports","EventProperties","eventNameMap","acc","ev","key","HtmlTags","_chain","Notifier","event","listener","release","listeners","args","idx","n","e","names","pending","chain","State","initialValue","name","newValue","merge","source","target","comma","space","adjacent","deepClone","value","old","val1","val2","addEvent","addHook","hashString","str","hash","i","toState","val","r","fn","partial","hookName","handler","hookProperty","current","attributes","eventName","eventProperty","node","seen","proto","clone","v","k","validate","element","asPartial","keys","isHTML","escapeHTML","getTagName","camelToKebab","selectorSplitter","selectors","splitted","parens","angulars","soFar","len","char","ensureDomStyle","styleParent","_a","domStyle","mergePartial","part","p","VoidTags","SvgTags","BooleanAttributes","PrefixCSS","CamelAttributes","ElementAttribute","parent","domElement","mutateAttrs","_b","prev","callback","AttributeList","attr","force","className","add","classes","newClass","list","updated","cls","oldClass","TextNode","textContent","tag","newNode","tpl","domText","ElementList","ElementNode","index","dom","el","currentRef","aNode","bNode","a","b","aNext","bNext","inputs","updateDom","silent","_c","_d","oldItems","keyed","item","input","reused","cur","isPortal","length","finalIndex","domNode","ref","root","child","done","doneCalled","onceDone","snapshot","aIndex","bIndex","itemA","itemB","fromIndex","toIndex","html","StyleProperty","parentRule","domRule","style","prefix","StyleRule","_StyleRule","selectorText","StyleList","prop","styleStr","decl","nested","sheet","rules","domSheet","css","err","obj","parentSelector","basic","getSelector","selector","splitKeys","currentSelector","rule","newSelector","domRuleList","wrongCount","fixOddEven","_ElementNode","domphyElement","_parent","tempPath","children","originalKey","content","childNode","RecordState","record","__spreadValues","l","src_exports","__export","getTheme","setTheme","themeApply","themeCSS","themeColor","themeColorToken","themeDensity","themeName","themeSize","themeSpacing","themeTokens","themeVars","light","light_default","themes","light_default","createDark","colorSteps","input","firstColor","validateTheme","partial","key","v","custom","deepMerge","target","source","_a","buildThemeCSS","name","styles","toneSteps","value","colorName","i","k","text","prop","getTheme","setTheme","dark","themeTokens","tokens","colorTones","themeVars","theme","section","themeCSS","themeApply","el","themeSpacing","n","themeName","object","node","ElementSizes","i","offsetSize","origin","size","resultSize","offset","contextSize","object","node","themeSize","index","themeVars","ElementDensities","i","offsetDensity","origin","density","resultDensity","offset","contextDensity","object","node","themeDensity","index","getTheme","themeName","TONE_STEPS","light_default","ElementTones","i","adjustTone","tone","level","newIndex","shiftTone","midpoint","offsetTone","originTone","offset","contextTone","object","node","biasContext","context","direction","bias","TONE_STEPS","themeColor","object","tone","color","themeVars","offsetTone","resultTone","getTheme","themeName","theme","contextTone","colors","themeColorToken","colorName","name","tokens","themeTokens"]}
package/package.json CHANGED
@@ -1,44 +1,45 @@
1
- {
2
- "name": "@domphy/theme",
3
- "version": "0.1.13",
4
- "description": "Domphy Design System",
5
- "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./dist/index.d.ts",
11
- "import": "./dist/index.js",
12
- "require": "./dist/index.cjs"
13
- }
14
- },
15
- "keywords": [
16
- "domphy"
17
- ],
18
- "author": "Huu Khanh Nguyen",
19
- "license": "MIT",
20
- "repository": {
21
- "type": "git",
22
- "url": "https://github.com/domphy/domphy.git",
23
- "directory": "packages/theme"
24
- },
25
- "devDependencies": {
26
- "tsup": "^8.5.0",
27
- "typescript": "^5.8.3"
28
- },
29
- "dependencies": {
30
- "@domphy/core": "0.1.8"
31
- },
32
- "files": [
33
- "dist",
34
- "README.md"
35
- ],
36
- "unpkg": "dist/core-theme.global.js",
37
- "jsdelivr": "dist/core-theme.global.js",
38
- "scripts": {
39
- "build": "tsup",
40
- "pack": "tsup && npm pack",
41
- "test": "vitest run",
42
- "test:watch": "vitest"
43
- }
1
+ {
2
+ "name": "@domphy/theme",
3
+ "version": "0.1.15",
4
+ "description": "Domphy Design System",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.cjs"
13
+ }
14
+ },
15
+ "scripts": {
16
+ "build": "tsup",
17
+ "pack": "tsup && npm pack",
18
+ "prepublishOnly": "npm run build",
19
+ "test": "vitest run",
20
+ "test:watch": "vitest"
21
+ },
22
+ "keywords": [
23
+ "domphy"
24
+ ],
25
+ "author": "Huu Khanh Nguyen",
26
+ "license": "MIT",
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "https://github.com/domphy/domphy.git",
30
+ "directory": "packages/theme"
31
+ },
32
+ "devDependencies": {
33
+ "tsup": "^8.5.0",
34
+ "typescript": "^5.8.3"
35
+ },
36
+ "dependencies": {
37
+ "@domphy/core": "workspace:*"
38
+ },
39
+ "files": [
40
+ "dist",
41
+ "README.md"
42
+ ],
43
+ "unpkg": "dist/core-theme.global.js",
44
+ "jsdelivr": "dist/core-theme.global.js"
44
45
  }