@webview-native-ui/engine 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/LICENSE +17 -14
  2. package/README.md +27 -599
  3. package/WebViewNativeUIEngine.podspec +2 -2
  4. package/dist/{scroll-bindings.d.ts → dom/scroll-bindings.d.ts} +1 -1
  5. package/dist/{scroll-placement.d.ts → dom/scroll-placement.d.ts} +1 -1
  6. package/dist/index.d.ts +9 -9
  7. package/dist/index.js +8 -8
  8. package/dist/ionic.d.ts +3 -3
  9. package/dist/ionic.js +1 -1
  10. package/dist/{native-bootstrap.d.ts → native/bootstrap.d.ts} +1 -1
  11. package/dist/{native-bootstrap.js → native/bootstrap.js} +1 -1
  12. package/dist/{bridge.d.ts → native/bridge.d.ts} +1 -1
  13. package/dist/{native-session.d.ts → native/session.d.ts} +3 -2
  14. package/dist/{native-session.js → native/session.js} +8 -7
  15. package/dist/{projection-events.d.ts → projection/events.d.ts} +1 -1
  16. package/dist/{projection-events.js → projection/events.js} +1 -1
  17. package/dist/{web-projection.d.ts → projection/web.d.ts} +5 -3
  18. package/dist/{web-projection.js → projection/web.js} +9 -6
  19. package/dist/types.d.ts +1 -1
  20. package/docs/assets/hero.png +0 -0
  21. package/docs/capacitor-plugin.md +279 -0
  22. package/docs/cordova-plugin.md +198 -0
  23. package/docs/cordova.md +1 -123
  24. package/docs/maintenance.md +52 -0
  25. package/docs/projection.md +340 -0
  26. package/ios/Sources/WebViewNativeUIEngine/CoveredSnapshots.swift +6 -14
  27. package/ios/Sources/WebViewNativeUIEngine/NativeUIProjection.swift +6 -3
  28. package/ios/Sources/WebViewNativeUIEngine/Resources/native-ui-engine.js +3 -3
  29. package/package.json +2 -3
  30. package/NOTICE +0 -39
  31. /package/dist/{geometry.d.ts → dom/geometry.d.ts} +0 -0
  32. /package/dist/{geometry.js → dom/geometry.js} +0 -0
  33. /package/dist/{overlays.d.ts → dom/overlays.d.ts} +0 -0
  34. /package/dist/{overlays.js → dom/overlays.js} +0 -0
  35. /package/dist/{scroll-bindings.js → dom/scroll-bindings.js} +0 -0
  36. /package/dist/{scroll-placement.js → dom/scroll-placement.js} +0 -0
  37. /package/dist/{visibility.d.ts → dom/visibility.d.ts} +0 -0
  38. /package/dist/{visibility.js → dom/visibility.js} +0 -0
  39. /package/dist/{bridge.js → native/bridge.js} +0 -0
  40. /package/dist/{runtime.d.ts → native/resource-url.d.ts} +0 -0
  41. /package/dist/{runtime.js → native/resource-url.js} +0 -0
  42. /package/dist/{projection-placement.d.ts → projection/placement.d.ts} +0 -0
  43. /package/dist/{projection-placement.js → projection/placement.js} +0 -0
  44. /package/dist/{web-projection-scope.d.ts → projection/scope.d.ts} +0 -0
  45. /package/dist/{web-projection-scope.js → projection/scope.js} +0 -0
  46. /package/dist/{snapshot-styles.d.ts → projection/styles.d.ts} +0 -0
  47. /package/dist/{snapshot-styles.js → projection/styles.js} +0 -0
@@ -1,4 +1,4 @@
1
- "use strict";var WebViewNativeUIEngineRuntime=(()=>{var Ie=Object.defineProperty;var rt=Object.getOwnPropertyDescriptor;var it=Object.getOwnPropertyNames;var st=Object.prototype.hasOwnProperty;var at=(e,o)=>{for(var n in o)Ie(e,n,{get:o[n],enumerable:!0})},ct=(e,o,n,l)=>{if(o&&typeof o=="object"||typeof o=="function")for(let d of it(o))!st.call(e,d)&&d!==n&&Ie(e,d,{get:()=>o[d],enumerable:!(l=rt(o,d))||l.enumerable});return e};var lt=e=>ct(Ie({},"__esModule",{value:!0}),e);var jt={};at(jt,{hide:()=>Tt,notify:()=>gt,receive:()=>Et,show:()=>Pt,start:()=>St,stop:()=>Lt});var dt=Symbol.for("webview-native-ui-engine.projection-placement");var Fe=e=>e?.[dt];var ut=(e,o)=>{if(e.matches("ion-toast, ion-menu"))return!1;let n=e;if(n.showBackdrop===!1)return!1;if(!e.matches("ion-modal"))return!0;let l=o??n.initialBreakpoint;return l===void 0||l>(n.backdropBreakpoint??0)},pt=Symbol.for("@webview-native-ui/engine/overlays/v1"),ft=e=>{let o=new Set,n=new Set,l=new Set,d=new WeakMap,r=new WeakSet,T=new Map,h=[],v={},P=new Map,S,x=p=>{for(let f of[...l])try{f(p)}catch(a){console.error("Native UI overlay listener failed",a)}},C=(p,f,a)=>{f==="willPresent"||f==="didPresent"?(r.delete(p),o.add(p)):f==="didDismiss"&&(r.add(p),o.delete(p),n.delete(p),d.delete(p));let E=a?.detail?.breakpoint;typeof E=="number"&&E>0&&d.set(p,E),x({element:p,phase:f,event:a})},U=(p=!1)=>{let f=!1;for(let a of o)(!a.isConnected||a.ownerDocument!==e||!h.some(({selector:E})=>a.matches(E)))&&(o.delete(a),n.delete(a),f=!0);for(let a of e.querySelectorAll(h.map(({selector:E})=>E).join(",")))!o.has(a)&&!r.has(a)&&(p||!a.matches("ion-popover"))&&(a.presented||a.classList.contains("show-menu"))&&(o.add(a),f=!0);f&&x({phase:"change"})};return{get active(){return o},subscribe(p){return l.add(p),()=>{l.delete(p)}},setNative(p,f){n.has(p)!==f&&(f?n.add(p):n.delete(p),x({element:p,phase:"change"}))},isExcluded(p){return!!v.exclude&&p.matches(v.exclude)},isNative(p){return n.has(p)},get stack(){let p=[...o].filter(a=>a.isConnected&&a.ownerDocument===e),f=a=>{let E=Number.parseFloat(e.defaultView.getComputedStyle(a).zIndex);return Number.isFinite(E)?E:a.overlayIndex??0};return p.sort((a,E)=>f(a)-f(E)),p},isCovered(p){let f=this.stack,a=f.reduce((E,F,m)=>F.contains(p)?m:E,-1);return f.some((E,F)=>{if(n.has(E)||v.exclude&&E.matches(v.exclude))return!1;let m=v.covers?.(E,p);return m!==void 0?m:F>a&&!E.contains(p)&&(E.matches("ion-menu")||ut(E,d.get(E)))})},enable(p,f){let a={...v,...f},E=[...p,...a.additional??[]];a.exclude&&e.querySelector(a.exclude);let F=new Map;for(let k of E){e.querySelector(k.selector);for(let[D,R]of Object.entries(k.events)){let $=F.get(R);if($&&$.phase!==D)throw new TypeError(`Overlay event "${R}" has conflicting phases`);F.set(R,{phase:D,selector:$?`${$.selector}, ${k.selector}`:k.selector})}}v=a,h=E,P=F;for(let k of P.keys()){if(T.has(k))continue;let D=R=>{let $=P.get(k),W=R.composedPath().find(oe=>oe instanceof e.defaultView.HTMLElement&&oe.matches($.selector));W&&C(W,$.phase,R)};e.addEventListener(k,D,!0),T.set(k,()=>e.removeEventListener(k,D,!0))}for(let[k,D]of T)P.has(k)||(D(),T.delete(k));let m=!S;S||(S=new MutationObserver(()=>U()),S.observe(e.documentElement,{childList:!0,subtree:!0}),e.addEventListener("nativeUIOverlayAdopted",k=>{let D=k.detail;D?.ownerDocument===e&&C(D,"willPresent",k)})),U(m),(m||f)&&x({phase:"change"})}}},qe=e=>{let o=e;return o[pt]??=ft(e)};function*le(e){let o=e;for(;o;){let n=o.getRootNode();o=o.assignedSlot??o.parentElement??(n instanceof ShadowRoot?n.host:null),o&&(yield o)}}var mt=({x:e,y:o,width:n,height:l})=>({x:e,y:o,width:n,height:l}),_e=e=>{let o=e.getBoundingClientRect(),n=getComputedStyle(e),l=parseFloat(n.borderLeftWidth)||0,d=parseFloat(n.borderTopWidth)||0;return{x:o.left+l,y:o.top+d,width:o.width-l-(parseFloat(n.borderRightWidth)||0),height:o.height-d-(parseFloat(n.borderBottomWidth)||0)}},ze=(e,o,n)=>{let l=[e,...le(e)],d=l.indexOf(o);if(d<=0||o===e.ownerDocument.scrollingElement)return;let r=e.ownerDocument.defaultView;if(r.visualViewport&&(r.visualViewport.scale!==1||r.visualViewport.offsetLeft||r.visualViewport.offsetTop))return;let T=0,h=0,v=r.innerWidth,P=r.innerHeight;for(let[U,p]of l.entries()){let f=getComputedStyle(p);if(f.transform!=="none"&&!new DOMMatrixReadOnly(f.transform).isIdentity||f.zoom&&f.zoom!=="normal"&&Number(f.zoom)!==1||[f.translate,f.rotate,f.scale,f.perspective].some(m=>m&&m!=="none")||f.writingMode&&f.writingMode!=="horizontal-tb"||U<d&&/^(fixed|sticky)$/.test(f.position))return;if(U===0)continue;if(f.scrollbarGutter&&f.scrollbarGutter!=="auto")return;let a=/^(auto|scroll|hidden|clip)$/.test(f.overflowX),E=/^(auto|scroll|hidden|clip)$/.test(f.overflowY);if(U<d&&(a||E))return;let F=p===e.ownerDocument.scrollingElement;if(U>d&&((a||F)&&p.scrollWidth>p.clientWidth||(E||F)&&p.scrollHeight>p.clientHeight)||(a||E)&&[f.borderTopLeftRadius,f.borderTopRightRadius,f.borderBottomLeftRadius,f.borderBottomRightRadius].some(m=>parseFloat(m)>0)||f.clipPath&&f.clipPath!=="none"||f.maskImage&&f.maskImage!=="none")return;if(U>=d){let m=_e(p);a&&(T=Math.max(T,m.x),v=Math.min(v,m.x+m.width)),E&&(h=Math.max(h,m.y),P=Math.min(P,m.y+m.height))}}let S=getComputedStyle(o);if(!/^(auto|scroll)$/.test(S.overflowX)&&!/^(auto|scroll)$/.test(S.overflowY))return;let x=_e(o);if(v<=T||P<=h||!x.width||!x.height)return;let C=mt(e.getBoundingClientRect());return{id:n(o),offsetX:o.scrollLeft,offsetY:o.scrollTop,viewport:x,clip:{x:T,y:h,width:v-T,height:P-h},contentWidth:o.scrollWidth,contentHeight:o.scrollHeight,frame:{...C,x:C.x-x.x+o.scrollLeft,y:C.y-x.y+o.scrollTop}}};var Ke=e=>{let o=globalThis;if(o.Capacitor?.convertFileSrc)return o.Capacitor.convertFileSrc(e);if(!e.startsWith("file:"))return e;if(o.WkWebView?.convertFilePath)return o.WkWebView.convertFilePath(e);throw new Error("Native UI file URL requires a host resource handler")};var de=e=>new Promise((o,n)=>{let l=setTimeout(()=>n(new Error("Native UI bridge timed out")),5e3);e.then(o,n).finally(()=>clearTimeout(l))}),$e=async e=>{try{return await de(e)}catch(o){throw e.then(n=>n.remove()).catch(()=>{}),o}};var Ne=async(e,o)=>{let n=new Map;for(let h of e.update??[])n.set(h,{updated:!0});for(let h of["native","web","none"])for(let v of e.projection?.[h]??[]){let P=n.get(v)??{updated:!1};if(P.destination&&P.destination!==h)throw new TypeError(`Projection event "${v}" has conflicting destinations`);n.set(v,{...P,destination:h})}let l=!1,d=[],r=async()=>{l=!0;let v=(await Promise.allSettled(d.splice(0).map(P=>Promise.resolve().then(()=>P.remove())))).find(P=>P.status==="rejected");if(v?.status==="rejected")throw v.reason},T=[...n].map(async([h,v])=>{let P=await $e(Promise.resolve().then(()=>e.addListener(h,S=>{!l&&(!e.accepts||e.accepts(S))&&o(v.destination,v.updated)})));l?await P.remove():d.push(P)});try{return await Promise.all(T),{remove:r}}catch(h){throw await r().catch(()=>{}),h}};var Ge=`
1
+ "use strict";var WebViewNativeUIEngineRuntime=(()=>{var ze=Object.defineProperty;var it=Object.getOwnPropertyDescriptor;var st=Object.getOwnPropertyNames;var at=Object.prototype.hasOwnProperty;var ct=(e,o)=>{for(var n in o)ze(e,n,{get:o[n],enumerable:!0})},lt=(e,o,n,f)=>{if(o&&typeof o=="object"||typeof o=="function")for(let v of st(o))!at.call(e,v)&&v!==n&&ze(e,v,{get:()=>o[v],enumerable:!(f=it(o,v))||f.enumerable});return e};var dt=e=>lt(ze({},"__esModule",{value:!0}),e);var jt={};ct(jt,{hide:()=>Lt,notify:()=>wt,receive:()=>Pt,show:()=>Tt,start:()=>St,stop:()=>Mt});var ut=Symbol.for("webview-native-ui-engine.projection-placement");var $e=e=>e?.[ut];var pt=(e,o)=>{if(e.matches("ion-toast, ion-menu"))return!1;let n=e;if(n.showBackdrop===!1)return!1;if(!e.matches("ion-modal"))return!0;let f=o??n.initialBreakpoint;return f===void 0||f>(n.backdropBreakpoint??0)},ft=Symbol.for("@webview-native-ui/engine/overlays/v1"),mt=e=>{let o=new Set,n=new Set,f=new Set,v=new WeakMap,c=new WeakSet,l=new Map,w=[],u={},S=new Map,j,M=m=>{for(let p of[...f])try{p(m)}catch(i){console.error("Native UI overlay listener failed",i)}},O=(m,p,i)=>{p==="willPresent"||p==="didPresent"?(c.delete(m),o.add(m)):p==="didDismiss"&&(c.add(m),o.delete(m),n.delete(m),v.delete(m));let T=i?.detail?.breakpoint;typeof T=="number"&&T>0&&v.set(m,T),M({element:m,phase:p,event:i})},R=(m=!1)=>{let p=!1;for(let i of o)(!i.isConnected||i.ownerDocument!==e||!w.some(({selector:T})=>i.matches(T)))&&(o.delete(i),n.delete(i),p=!0);for(let i of e.querySelectorAll(w.map(({selector:T})=>T).join(",")))!o.has(i)&&!c.has(i)&&(m||!i.matches("ion-popover"))&&(i.presented||i.classList.contains("show-menu"))&&(o.add(i),p=!0);p&&M({phase:"change"})};return{get active(){return o},subscribe(m){return f.add(m),()=>{f.delete(m)}},setNative(m,p){n.has(m)!==p&&(p?n.add(m):n.delete(m),M({element:m,phase:"change"}))},isExcluded(m){return!!u.exclude&&m.matches(u.exclude)},isNative(m){return n.has(m)},get stack(){let m=[...o].filter(i=>i.isConnected&&i.ownerDocument===e),p=i=>{let T=Number.parseFloat(e.defaultView.getComputedStyle(i).zIndex);return Number.isFinite(T)?T:i.overlayIndex??0};return m.sort((i,T)=>p(i)-p(T)),m},isCovered(m){let p=this.stack,i=p.reduce((T,N,d)=>N.contains(m)?d:T,-1);return p.some((T,N)=>{if(n.has(T)||u.exclude&&T.matches(u.exclude))return!1;let d=u.covers?.(T,m);return d!==void 0?d:N>i&&!T.contains(m)&&(T.matches("ion-menu")||pt(T,v.get(T)))})},enable(m,p){let i={...u,...p},T=[...m,...i.additional??[]];i.exclude&&e.querySelector(i.exclude);let N=new Map;for(let W of T){e.querySelector(W.selector);for(let[$,A]of Object.entries(W.events)){let F=N.get(A);if(F&&F.phase!==$)throw new TypeError(`Overlay event "${A}" has conflicting phases`);N.set(A,{phase:$,selector:F?`${F.selector}, ${W.selector}`:W.selector})}}u=i,w=T,S=N;for(let W of S.keys()){if(l.has(W))continue;let $=A=>{let F=S.get(W),C=A.composedPath().find(X=>X instanceof e.defaultView.HTMLElement&&X.matches(F.selector));C&&O(C,F.phase,A)};e.addEventListener(W,$,!0),l.set(W,()=>e.removeEventListener(W,$,!0))}for(let[W,$]of l)S.has(W)||($(),l.delete(W));let d=!j;j||(j=new MutationObserver(()=>R()),j.observe(e.documentElement,{childList:!0,subtree:!0}),e.addEventListener("nativeUIOverlayAdopted",W=>{let $=W.detail;$?.ownerDocument===e&&O($,"willPresent",W)})),R(d),(d||p)&&M({phase:"change"})}}},_e=e=>{let o=e;return o[ft]??=mt(e)};function*ae(e){let o=e;for(;o;){let n=o.getRootNode();o=o.assignedSlot??o.parentElement??(n instanceof ShadowRoot?n.host:null),o&&(yield o)}}var vt=({x:e,y:o,width:n,height:f})=>({x:e,y:o,width:n,height:f}),Ke=e=>{let o=e.getBoundingClientRect(),n=getComputedStyle(e),f=parseFloat(n.borderLeftWidth)||0,v=parseFloat(n.borderTopWidth)||0;return{x:o.left+f,y:o.top+v,width:o.width-f-(parseFloat(n.borderRightWidth)||0),height:o.height-v-(parseFloat(n.borderBottomWidth)||0)}},Ve=(e,o,n)=>{let f=[e,...ae(e)],v=f.indexOf(o);if(v<=0||o===e.ownerDocument.scrollingElement)return;let c=e.ownerDocument.defaultView;if(c.visualViewport&&(c.visualViewport.scale!==1||c.visualViewport.offsetLeft||c.visualViewport.offsetTop))return;let l=0,w=0,u=c.innerWidth,S=c.innerHeight;for(let[R,m]of f.entries()){let p=getComputedStyle(m);if(p.transform!=="none"&&!new DOMMatrixReadOnly(p.transform).isIdentity||p.zoom&&p.zoom!=="normal"&&Number(p.zoom)!==1||[p.translate,p.rotate,p.scale,p.perspective].some(d=>d&&d!=="none")||p.writingMode&&p.writingMode!=="horizontal-tb"||R<v&&/^(fixed|sticky)$/.test(p.position))return;if(R===0)continue;if(p.scrollbarGutter&&p.scrollbarGutter!=="auto")return;let i=/^(auto|scroll|hidden|clip)$/.test(p.overflowX),T=/^(auto|scroll|hidden|clip)$/.test(p.overflowY);if(R<v&&(i||T))return;let N=m===e.ownerDocument.scrollingElement;if(R>v&&((i||N)&&m.scrollWidth>m.clientWidth||(T||N)&&m.scrollHeight>m.clientHeight)||(i||T)&&[p.borderTopLeftRadius,p.borderTopRightRadius,p.borderBottomLeftRadius,p.borderBottomRightRadius].some(d=>parseFloat(d)>0)||p.clipPath&&p.clipPath!=="none"||p.maskImage&&p.maskImage!=="none")return;if(R>=v){let d=Ke(m);i&&(l=Math.max(l,d.x),u=Math.min(u,d.x+d.width)),T&&(w=Math.max(w,d.y),S=Math.min(S,d.y+d.height))}}let j=getComputedStyle(o);if(!/^(auto|scroll)$/.test(j.overflowX)&&!/^(auto|scroll)$/.test(j.overflowY))return;let M=Ke(o);if(u<=l||S<=w||!M.width||!M.height)return;let O=vt(e.getBoundingClientRect());return{id:n(o),offsetX:o.scrollLeft,offsetY:o.scrollTop,viewport:M,clip:{x:l,y:w,width:u-l,height:S-w},contentWidth:o.scrollWidth,contentHeight:o.scrollHeight,frame:{...O,x:O.x-M.x+o.scrollLeft,y:O.y-M.y+o.scrollTop}}};var Ge=e=>{let o=globalThis;if(o.Capacitor?.convertFileSrc)return o.Capacitor.convertFileSrc(e);if(!e.startsWith("file:"))return e;if(o.WkWebView?.convertFilePath)return o.WkWebView.convertFilePath(e);throw new Error("Native UI file URL requires a host resource handler")};var ce=e=>new Promise((o,n)=>{let f=setTimeout(()=>n(new Error("Native UI bridge timed out")),5e3);e.then(o,n).finally(()=>clearTimeout(f))}),Ne=async e=>{try{return await ce(e)}catch(o){throw e.then(n=>n.remove()).catch(()=>{}),o}};var Ue=async(e,o)=>{let n=new Map;for(let w of e.update??[])n.set(w,{updated:!0});for(let w of["native","web","none"])for(let u of e.projection?.[w]??[]){let S=n.get(u)??{updated:!1};if(S.destination&&S.destination!==w)throw new TypeError(`Projection event "${u}" has conflicting destinations`);n.set(u,{...S,destination:w})}let f=!1,v=[],c=async()=>{f=!0;let u=(await Promise.allSettled(v.splice(0).map(S=>Promise.resolve().then(()=>S.remove())))).find(S=>S.status==="rejected");if(u?.status==="rejected")throw u.reason},l=[...n].map(async([w,u])=>{let S=await Ne(Promise.resolve().then(()=>e.addListener(w,j=>{!f&&(!e.accepts||e.accepts(j))&&o(u.destination,u.updated)})));f?await S.remove():v.push(S)});try{return await Promise.all(l),{remove:c}}catch(w){throw await c().catch(()=>{}),w}};var Je=`
2
2
  :is([data-native-ui-snapshot-source], [data-native-ui-snapshot-prepared]),
3
3
  :is([data-native-ui-snapshot-source], [data-native-ui-snapshot-prepared]) *,
4
4
  :is([data-native-ui-snapshot-source], [data-native-ui-snapshot-prepared])::after,
@@ -10,5 +10,5 @@
10
10
  }
11
11
  [data-native-ui-snapshot-visible] { opacity:1!important;overflow:visible!important; }
12
12
  [data-native-ui-snapshot-visible][data-native-ui-snapshot][data-native-ui-snapshot]::before { opacity:1!important; }
13
- `;var vt=(e,o=!1)=>JSON.stringify(e.map(({control:n})=>[n.id,n.kind,n.placement,o?0:n.x,o?0:n.y,n.width,n.height,n.dark,n.rtl])),Je=(e,o,n=o.getComputedStyle(e))=>{let l=e.getBoundingClientRect(),d=(S,x)=>{let C=parseFloat(S);return n.display!=="inline"&&Number.isFinite(C)?C+(n.boxSizing==="border-box"?0:x.reduce((U,p)=>U+(parseFloat(n.getPropertyValue(p))||0),0)):NaN},r=d(n.width,["padding-left","padding-right","border-left-width","border-right-width"]),T=d(n.height,["padding-top","padding-bottom","border-top-width","border-bottom-width"]),h=1;if(!(r>0&&T>0))for(let S of[e,...le(e)]){let x=(S===e?n:o.getComputedStyle(S)).getPropertyValue("zoom");h*=(parseFloat(x)||1)/(x.endsWith("%")?100:1)}let v=r>0?l.width/r:h,P=T>0?l.height/T:h;return{x:l.x,y:l.y,scaleX:v||1,scaleY:P||1,left:(parseFloat(n.borderLeftWidth)||0)-e.scrollLeft,top:(parseFloat(n.borderTopWidth)||0)-e.scrollTop,position:n.position}},ht=async(e,o,n)=>{let l="native",d=e.element.ownerDocument,r=d.defaultView,T=Array.from(r.crypto.getRandomValues(new Uint32Array(4)),t=>t.toString(16)).join("-"),h=t=>t.isConnected&&t.ownerDocument===d,v=t=>!!t?.isConnected&&t.ownerDocument===d,P=o.send.bind(o),S="data-native-ui-snapshot",x=`${e.namespace}:sources-change`,C=new Set,U=new Set,p=new Set,f=new WeakMap,a=0,E=t=>JSON.stringify(t.map(c=>(f.has(c.scope)||f.set(c.scope,++a),[f.get(c.scope),vt([c],!!n.opaqueUnderlay)]))),F=new Map,m=t=>{let c=t.getRootNode();return c.nodeType===11&&"host"in c?c:d},k=t=>{let c=F.get(t);if(!c){let g=d.createElement("style"),i=d.createElement("style");g.setAttribute("data-native-ui-snapshot-base",""),i.setAttribute(S,""),g.textContent=Ge,(t.nodeType===11?t:t.head).append(g,i),c={base:g,image:i},F.set(t,c)}return c.image},D=()=>`${r.innerWidth}:${r.innerHeight}:${r.devicePixelRatio}`,R=!1,$=!1,W=0,oe=0,O,u,ie=!1,B=!1,ae=0,ge=0,K=0,N=0,se=0,X=-1,Z=!1,we=!1,q,ce=new Set,ke=(t,c,g)=>{let i=()=>{ce.delete(i)&&P({action:t,token:c}).catch(()=>{})};ce.add(i),g&&!Z?r.requestAnimationFrame(()=>r.requestAnimationFrame(i)):i()},V=new Set,be=()=>{V.forEach(t=>p.delete(t)),V.clear()},fe=(t,c=!1)=>{!t||t===O||t===u||(t.images.forEach(g=>{g.src=""}),ke("release",t.data.token,c))},Q=t=>t.filter(c=>{if(!v(c.scope.element)||![c.element,...c.sources??[]].every(h))return!1;if(c.control.scroll){let g=c.element.getBoundingClientRect(),i=c.control.scroll.clip;if(g.right<=i.x||g.bottom<=i.y||g.left>=i.x+i.width||g.top>=i.y+i.height)return!1}return n.eligible?.(c)??!0}),We=async()=>{if(N=0,Z||l!=="native"||we||ie||u||n.blocked()||!q||O?.revision===q.revision&&X===se)return;let{revision:t,candidates:c}=q,g=K,i=se,L=D(),j=Q(c);if(!j.length)return;we=!0;let H,_=!1,te=[];try{let ne=!1,he=P({action:"prepare",revision:n.captureRevision?.()??t,viewportWidth:r.innerWidth,ids:j.map(w=>w.control.id)});he.then(w=>{ne&&w.token&&P({action:"release",token:w.token}).catch(()=>{})}).catch(()=>{});try{H=await de(he)}finally{ne=!0}if(!H.token||!H.parts?.length)return;let ye=new Set(j.map(w=>w.control.id));if(H.parts.some(w=>!w.url.startsWith("file:")&&!/^\/__native_ui_engine__\/nativeUI[a-fA-F0-9]+\/[a-fA-F0-9-]+-[0-9]+\.png$/.test(w.url)||!w.ids.length||w.ids.some(z=>!ye.has(z))||![w.x,w.y,w.width,w.height].every(Number.isFinite)||w.width<=0||w.height<=0)||new Set(H.parts.flatMap(w=>w.ids)).size!==ye.size||H.parts.some(w=>new Set(w.ids.map(z=>j.find(Be=>Be.control.id===z).scope)).size!==1)||(await de(Promise.all(H.parts.map(async w=>{let z=d.createElement("img");return te.push(z),z.src=Ke(w.url),await z.decode(),z}))),Z||l!=="native"||ie||u||n.blocked()||K!==g||D()!==L||q?.revision!==t||j.some(w=>!v(w.scope.element)||![w.element,...w.sources??[]].every(h))))return;let Le=O;O={data:H,images:te,sources:Array.from(new Set(j.flatMap(w=>[w.element,...w.sources??[]]))),targets:H.parts.map(w=>j.find(z=>w.ids.includes(z.control.id)).element),scopes:H.parts.map(w=>j.find(z=>w.ids.includes(z.control.id)).scope),parents:H.parts.map(w=>j.find(z=>w.ids.includes(z.control.id)).scope.element.parentNode),frames:[],viewport:L,revision:t,layout:E(j)},be(),O.sources.forEach(w=>{p.add(w),V.add(w)}),Re(),n.opaqueUnderlay&&P({action:"prepared",token:H.token}).catch(()=>{}),r.dispatchEvent(new Event(x)),X=i,_=!0,fe(Le)}catch{}finally{_||te.forEach(ne=>{ne.src=""}),H?.token&&!_&&P({action:"release",token:H.token}).catch(()=>{}),we=!1,q&&(q.revision!==t||se!==i)&&G()}},G=()=>{r.clearTimeout(N),!Z&&l==="native"&&!u&&!ie&&!n.blocked()&&(N=r.setTimeout(()=>{We()},50))},Ee,Se=(t,c)=>{if(c.some(i=>i.scope.element.ownerDocument!==d||[i.element,...i.sources??[]].some(L=>L.ownerDocument!==d)))throw new TypeError("All projection sources and fallback scopes must share one Document");if(n.blocked())return;!u&&O&&O.layout!==E(Q(c))&&ve();let g=E(c);Ee!==g&&(Ee=g,se++,K++),q?.revision!==t&&K++,q={revision:t,candidates:c},(O?.revision!==t||X!==se)&&G()},je=t=>{!u&&O&&t&&q?.candidates.some(c=>c.scrollElement===t&&O.sources.includes(c.element))&&ve(),u&&(Me(),Oe()),se++,K++,G()},me=await $e(o.listen(({active:t})=>{ie=t,K++,r.clearTimeout(N),t||G()})),Ce=new Set,Pe=t=>{Ce.delete(t)&&t.removeAttribute("data-native-ui-snapshot-prepared"),t.removeAttribute("data-native-ui-snapshot-visible"),t.removeAttribute(S),t.removeAttribute("data-native-ui-snapshot-source")},Te=()=>{oe++,r.cancelAnimationFrame(W),r.cancelAnimationFrame(Y),Y=0,J.clear(),W=0,R=!1,$=!1,be(),u?.sources.forEach(t=>{C.delete(t),U.delete(t)}),A.forEach(Pe),A.clear(),F.forEach(({base:t,image:c})=>{t.remove(),c.remove()}),F.clear()},s=(t=u,c=B)=>{if(u!==t)return;let g=new Set([u,O]);Te(),u=void 0,O=void 0,B=!1,r.clearTimeout(ae),g.forEach(i=>fe(i,c)),n.wake()},y=()=>{if(!u)return;if(O!==u){s();return}let t=u;Te(),u=void 0,B=!1,r.clearTimeout(ae),ke("restored",t.data.token,!0),t.sources.forEach(c=>{p.add(c),V.add(c)}),Re(),n.wake()},b=()=>{B&&y(),ce.forEach(t=>t())},I=t=>t.scopes.map(c=>v(c.element)?c.element:void 0),A=new Set,ee=new Map,J=new Map,Y=0,Me=()=>{for(let[t,c]of J){if(!t.isConnected)continue;let g=r.getComputedStyle(t),i=`${c.x-(parseFloat(g.borderLeftWidth)||0)+t.scrollLeft}px`,L=`${c.y-(parseFloat(g.borderTopWidth)||0)+t.scrollTop}px`;c.style.left!==i&&c.style.setProperty("left",i,"important"),c.style.top!==L&&c.style.setProperty("top",L,"important")}},Oe=()=>{if(Y||!u)return;[...J.keys()].some(c=>c.getAnimations?.().some(g=>g.playState==="running"&&g.effect?.getKeyframes().some(i=>["borderLeftWidth","borderTopWidth","borderWidth"].some(L=>L in i))))&&(Y=r.requestAnimationFrame(()=>{Y=0,Me(),Oe()}))},Re=()=>{let t=u??O;if(!t||B)return;if(!t.sources.every(h)||I(t).some(i=>!i)){ve();return}let c=I(t);if(u){if(c.some(L=>!L?.isConnected||!F.has(m(L)))){s(u,!1);return}let i=new Set;for(let[L,j]of t.targets.entries()){let H=ee.get(j),_=c[L];!H||!_?.isConnected||(_.setAttribute(S,H),_.setAttribute("data-native-ui-snapshot-source",""),_.toggleAttribute("data-native-ui-snapshot-visible",$),i.add(_))}for(let L of A)i.has(L)||Pe(L);A.clear(),i.forEach(L=>A.add(L));return}ee.clear(),J.clear(),A.forEach(Pe),A.clear();let g=new Map;for(let i of new Set(c)){if(!i)continue;A.add(i);let L=k(m(i)),j=g.get(L);j||(j={rules:[],positions:[]},g.set(L,j));let{rules:H,positions:_}=j;i!==t.targets[c.indexOf(i)]&&!i.hasAttribute("data-native-ui-snapshot-prepared")&&(i.setAttribute("data-native-ui-snapshot-prepared",""),Ce.add(i)),i.toggleAttribute("data-native-ui-snapshot-visible",!!u||!!n.opaqueUnderlay),u&&i.setAttribute("data-native-ui-snapshot-source","");let te=c.flatMap((M,re)=>M===i?[re]:[]),ne=r.getComputedStyle(i);{let M=Je(i,r,ne);te.forEach(re=>{let De=t.data.parts[re];n.opaqueUnderlay&&t.frames[re]||(t.frames[re]={x:n.opaqueUnderlay?0:(De.x-M.x)/M.scaleX,y:n.opaqueUnderlay?0:(De.y-M.y)/M.scaleY,width:De.width/M.scaleX,height:De.height/M.scaleY})})}let he=te.map(M=>t.frames[M]),ye=Math.min(...he.map(M=>M.x)),Le=Math.min(...he.map(M=>M.y)),w=Math.max(...he.map(M=>M.x+M.width)),z=Math.max(...he.map(M=>M.y+M.height)),Be=(parseFloat(ne.borderLeftWidth)||0)-i.scrollLeft,nt=(parseFloat(ne.borderTopWidth)||0)-i.scrollTop,Ae=`${T}-${te[0]}`;te.forEach(M=>ee.set(t.targets[M],Ae)),i.setAttribute(S,Ae),H.push(`[${S}="${Ae}"][data-native-ui-snapshot-visible] { ${ne.position==="static"?"position:relative!important;":""} }`);let ot=te.map(M=>{let re=t.frames[M];return`url(${JSON.stringify(t.images[M].src)}) ${re.x-ye}px ${re.y-Le}px / ${re.width}px ${re.height}px no-repeat`}),xe=d.createElement("span").style;xe.cssText=`left:${ye-Be}px;top:${Le-nt}px;width:${w-ye}px;height:${z-Le}px;background:${ot.join(",")};`;for(let M of Array.from(xe))xe.setProperty(M,xe.getPropertyValue(M),"important");H.push(`[${S}="${Ae}"][${S}][${S}]::before { ${xe.cssText} }`),_.push({target:i,x:ye,y:Le})}t.parents=t.scopes.map(i=>i.element.parentNode);for(let[i,{rules:L,positions:j}]of g)i.textContent=L.join(`
14
- `),j.forEach(({target:H,x:_,y:te},ne)=>J.set(H,{x:_,y:te,style:i.sheet.cssRules[ne*2+1].style}))},Ve=()=>{if(b(),Z||l==="none"||u)return;let t=O;if(!t||t.viewport!==D()||!t.sources.every(h)||n.current&&!n.current(t.targets)||t.targets.some(i=>!ee.has(i))||I(t).some(i=>!i?.isConnected)||[...A].some(i=>!i.isConnected))return;t.scopes.some((i,L)=>i.element.parentNode!==t.parents[L])&&Re(),Me();let c=++oe,g=()=>oe===c;R=!0,$=!!n.opaqueUnderlay,u=t,K++,r.clearTimeout(N),t.sources.forEach(i=>{C.add(i)}),A.forEach(i=>{i.setAttribute("data-native-ui-snapshot-source",""),i.toggleAttribute("data-native-ui-snapshot-visible",$)}),W=r.requestAnimationFrame(()=>{W=0,g()&&(R=!1,n.wake())}),de(P({action:"cover",token:t.data.token,...n.transient?{transient:!0}:{}})).then(i=>{if(g()){if(R=!1,i?.shown!==!0){s(t,!1);return}B||($=!0,t.sources.forEach(L=>U.add(L)),Re(),Me(),Oe()),r.cancelAnimationFrame(W),W=r.requestAnimationFrame(()=>{W=0,g()&&P({action:"painted",token:t.data.token}).catch(()=>{g()&&s(t,!1)})}),n.wake()}}).catch(()=>{g()&&s(t,!1)})},Xe=()=>{if(!(!u||Z||B)){if(!u.sources.every(h)||I(u).some(t=>!t)||n.current&&!n.current(u.targets)){s(u,!1);return}if(!n.blocked()){if(n.transient){let t=u,c=I(t);if(c.some(i=>!i?.isConnected)){s(t,!1);return}let g=c.map((i,L)=>{let j=Je(i,r),H=t.frames[L];return{...t.data.parts[L],x:j.x+H.x*j.scaleX,y:j.y+H.y*j.scaleY,width:H.width*j.scaleX,height:H.height*j.scaleY}});g.some((i,L)=>["x","y","width","height"].some(j=>i[j]!==t.data.parts[L][j]))&&(n.opaqueUnderlay?t.data={...t.data,parts:g}:O=void 0),P({action:"restore",token:t.data.token,viewportWidth:r.innerWidth,parts:g}).catch(()=>{})}ge=n.revision?.()??q?.revision??0,B=!0,u.sources.forEach(t=>C.delete(t)),ae=r.setTimeout(()=>{B&&s(u,!1)},250),n.wake()}}},tt=(t,c,g)=>{!B||!u||g===void 0||g<=ge||!n.transient&&t||u.data.parts.every(i=>i.ids.every(L=>c?.includes(L)))&&(y(),G())},ve=()=>{ce.forEach(c=>c()),K++,r.clearTimeout(N);let t=O;O=void 0,fe(t),u?s(u,!1):(Te(),ee.clear(),r.dispatchEvent(new Event(x)))},Ye;try{n.events&&(Ye=await Ne(n.events,(t,c)=>{if(!Z){if(t&&(l=t),l==="none"){ve();return}t==="web"&&Ve(),t==="native"&&(Xe(),G()),c&&je()}}))}catch(t){throw Z=!0,ve(),await de(Promise.resolve(me.remove())).catch(()=>{}),t}return{get owners(){return[...C]},get visibleOwners(){return[...U]},get preparedOwners(){return[...p]},consider:Se,changed:je,moved:()=>{Me(),Oe()},get token(){return B?void 0:u?.data.token},begin:Ve,get restoring(){return B},get handoffPending(){return R},retireRestoration:b,end:Xe,updated:tt,invalidate:ve,async destroy(){Z=!0,ve(),await Promise.allSettled([de(Promise.resolve().then(()=>me?.remove())),de(Promise.resolve().then(()=>Ye?.remove()))])}}},Ze=async(e,o,n)=>{let l=await ht(e,o,n),d=l.consider;return Object.assign(l,{consider:(r,T)=>d(r,T.map(h=>({...h,scope:e})))})};var Qe=(e,o)=>{if(e.nodeType!==1||e.namespaceURI!=="http://www.w3.org/1999/xhtml"||!e.ownerDocument||!("style"in e))throw new TypeError("A Web projection scope requires an HTMLElement fallback");if(e.matches("img, input, textarea, select, video, audio, canvas, iframe, embed, object, br, hr, area, base, link, meta, source, track, wbr"))throw new TypeError("A Web projection fallback must support ::before; use its existing container element");return Object.freeze({element:e,namespace:o})};var et=async(e,o,n={addListener:async(l,d)=>globalThis.Capacitor.addListener(e.plugin,l,d)})=>{let l="view",d=e.receiveListeners,r=!1,T=!1,h="native",v="native",P=qe(document),S=()=>h==="native"&&m&&P.isCovered(m)?"web":h,x=!1,C=!1,U=!1,p,f,a,E=!1,F=()=>{let s=E;E=!0;try{a?.begin()}finally{E=s}},m,k={},D,R=0,$=()=>{R++,D=void 0;let s=Fe(m);s?.owner===k&&(s.projected=!1,s.owner=void 0)},W={listen:s=>o.listen(s),send:s=>{if(!e.placementHandoff)return o.send(s);let y=Fe(m);if(s.action==="cover"){let J=++R;return D=s.token,y&&(y.owner=k,y.projected=!1),o.send(s).then(Y=>(J===R&&y===Fe(m)&&y?.owner===k&&(y.projected=Y?.shown===!0),Y)).catch(Y=>{throw J===R&&y?.owner===k&&($(),y.invalidate()),Y})}let b=s.action==="release"&&s.token===D,I=D&&(s.action==="restore"||b||s.action==="reset"||s.action==="visibility"&&s.visible);I&&R++;let A=R,ee=()=>{A!==R||y?.owner!==k||($(),y.invalidate())};try{let J=I&&y?.owner===k?{...s,token:"token"in s?s.token:D,placement:y.measure()}:s;return o.send(J).then(Y=>(A===R&&(s.action==="resume"||b||s.action==="reset"||s.action==="visibility")&&$(),Y)).catch(Y=>{throw ee(),Y})}catch(J){return ee(),Promise.reject(J)}}},oe=0,O=0,u=0,ie=!1,B=!1,ae=!1,ge=!1,K=document.createElement("style"),N=`data-native-ui-session-${e.id.replace(/[^a-zA-Z0-9-]/g,"")}`;K.textContent=`[${N}="native"], [${N}="native"] *, [${N}="none"], [${N}="none"] * {visibility:hidden!important}`,document.documentElement.append(K);let se=()=>{let s=document.querySelectorAll(e.projectionSelector);return s.length===1&&s[0]instanceof HTMLElement?s[0]:void 0},X=()=>{m&&(v==="web"||v==="native"&&C?m.removeAttribute(N):m.setAttribute(N,v))},Z=()=>{if(!m?.isConnected)return[];let s=m.getBoundingClientRect(),y={x:s.x,y:s.y,width:s.width,height:s.height},b=p&&ze(m,p,()=>e.id);return[{element:m,scrollElement:p,control:{id:l,...y,...b?{scroll:b}:{}}}]},we=async()=>{if(r)return;let s=u,y=e.failedFallback==="native"&&S()==="native"&&!!m?.isConnected;await W.send({action:"visibility",visible:y}).catch(()=>{}),!(r||s!==u)&&(y||v==="none"?X():m?.removeAttribute(N))},q=()=>{if(!x||v!=="native"||!m?.isConnected||a?.token||a?.restoring)return;let s=e.failedFallback==="native";W.send({action:"visibility",visible:s}).catch(()=>{}),s?X():m.removeAttribute(N)},ce=()=>{if(r||E)return;if(q(),v==="web"&&a&&!a.token&&!a.restoring){W.send({action:"visibility",visible:!1}).catch(()=>{}),m?.removeAttribute(N);return}if(ie||!a?.restoring||v!=="native")return;ie=!0;let s=u,y=a;W.send({action:"resume"}).then(()=>{r||s!==u||y!==a||(C=!1,y.updated(void 0,[l],++oe),X(),V())}).catch(()=>{s!==u||r||(y.invalidate(),we())}).finally(()=>{ie=!1,ce()})},ke=async()=>{if(r||B||x)return;if(a?.restoring){ce();return}let s=se();if(s!==m){if(u++,$(),m?.removeAttribute(N),await a?.destroy(),a=void 0,r)return;m=s,C=!1,fe.disconnect(),m&&fe.observe(m)}if(Ee(),v=S(),!m){await W.send({action:"visibility",visible:!1});return}if(!a){B=!0;let y=u;try{let b=await Ze(Qe(m,e.id),W,{wake:ce,blocked:()=>v!=="native"||x||C&&!a?.token,revision:()=>oe,captureRevision:e.captureMode==="view"?()=>O:void 0,transient:!0,opaqueUnderlay:e.captureMode==="view"});if(r||y!==u){await b.destroy();return}a=b}finally{B=!1}}if(!r){if(v==="native"&&C){await W.send({action:"visibility",visible:!1}),X();return}if(v==="native"){let y=u;if(await W.send({action:"visibility",visible:!0}),r||y!==u||v!=="native")return;X(),p=[...le(m)].find(A=>{let ee=getComputedStyle(A);return/auto|scroll/.test(ee.overflowX+ee.overflowY)&&(A.scrollHeight>A.clientHeight||A.scrollWidth>A.clientWidth)});let b=p&&ze(m,p,()=>e.id),I=await W.send({action:"track",viewportWidth:innerWidth,...b?{scroll:b}:{}});if(r||y!==u)return;U=I?.tracked===!0,a.consider(e.captureMode==="view"?O:++oe,Z())}else await W.send({action:"visibility",visible:!1}),X()}},V=()=>{r||(ae=!0,!(!T||ge)&&(ge=!0,Promise.resolve().then(async()=>{try{for(;ae&&!r;)ae=!1,await ke()}catch{await we()}finally{ge=!1,ae&&V()}})))},be=()=>{a?.invalidate(),V()},fe=new ResizeObserver(be);window.addEventListener("resize",be);let Q=new Set,We=new WeakSet,G=s=>{let y=s.composedPath()[0]??s.target;if(!(r||v!=="native"||!m||We.has(s)||y!==document&&![...le(m)].includes(y))){if(We.add(s),U&&y===p){a?.changed(y);return}x?e.captureMode==="view"?a?.moved():a?.changed():((ie||a?.restoring)&&u++,x=!0,F(),C=e.failedFallback!=="native",a?.token?m.removeAttribute(N):q()),clearTimeout(f),f=setTimeout(()=>{x=!1,!(r||v!=="native")&&(a?.end(),a?.restoring||V())},100)}},Ee=()=>{let s=new Set(m?le(m):[]),y=s.size!==Q.size||[...s].some(b=>!Q.has(b));for(let b of Q)s.has(b)||(b.removeEventListener("scroll",G),b.removeEventListener("slotchange",Se),Q.delete(b));for(let b of s)Q.has(b)||(b.addEventListener("scroll",G,{passive:!0}),b.addEventListener("slotchange",Se),Q.add(b));y&&(U=!1,p=void 0,a?.invalidate(),V())},Se=()=>{Ee(),V()};document.addEventListener("scroll",G,!0);let je=new MutationObserver(s=>{Ee(),se()!==m?V():m&&s.some(y=>y.type==="childList")&&me(S())});je.observe(document.documentElement,{childList:!0,attributes:!0,subtree:!0});let me=(s,y=!1)=>{if(r||!y&&s===v)return;x=!1,clearTimeout(f),v=s,u++;let b=u;v==="none"?W.send({action:"visibility",visible:!1}).then(()=>{v!=="none"||b!==u||r||(a?.invalidate(),X())}).catch(()=>{v!=="none"||b!==u||r||(a?.invalidate(),X())}):v==="web"?(F(),a?.token||W.send({action:"visibility",visible:!1}).catch(()=>{}),X()):v==="native"&&(a?.end(),a?.restoring||V())},Ce=P.subscribe(()=>queueMicrotask(()=>me(S()))),Pe,Te=async()=>{if(!r){r=!0,$(),u++,Ce(),je.disconnect(),fe.disconnect(),window.removeEventListener("resize",be),document.removeEventListener("scroll",G,!0);for(let s of Q)s.removeEventListener("scroll",G),s.removeEventListener("slotchange",Se);Q.clear(),clearTimeout(f),m?.removeAttribute(N),K.remove(),await Promise.allSettled([Promise.resolve(Pe?.remove()),a?.destroy()])}};try{let s=u;Pe=await Ne({addListener:(b,I)=>n.addListener(b,I),update:d?.update,projection:d?.projection,accepts:b=>!d?.match||Object.entries(d?.match).every(([I,A])=>typeof b=="object"&&b!==null&&b[I]===A)},(b,I)=>{r||(b&&(b==="native"&&(C=!1),h=b,W.send({action:"destination",destination:b}).catch(()=>{}),me(S(),!0)),I&&(O++,a?.changed(),v==="native"&&V()))});let y=await W.send({action:"connect"});return u===s&&["native","web","none"].includes(y?.destination)&&(h=y.destination),v=S(),T=!0,V(),{destroy:Te,show:()=>{C=!1,h="native",me(S(),!0)},hide:()=>{h=v="none",u++,x=!1,clearTimeout(f),a?.invalidate(),X()}}}catch(s){throw await Te(),s}};var ue=new Map,pe=new Map,He=new Map,yt=Array.from(crypto.getRandomValues(new Uint32Array(4)),e=>e.toString(16)).join("-"),Ue=new Map,gt=(e,o,n)=>Ue.get(e)?.get(o)?.(n),wt=0,bt=(e,o)=>new Promise((n,l)=>{let d=`${e}:${yt}:${++wt}`,r=setTimeout(()=>{pe.delete(d),l(new Error("Native UI session timed out"))},5e3);pe.set(d,{resolve:n,reject:l,timer:r});let T=JSON.stringify({key:d,request:o}),h=globalThis,v=h.webkit?.messageHandlers?.[e]??h[e]??h.nativeUIEngine;if(!v){clearTimeout(r),pe.delete(d),l(new Error("Native UI session unavailable"));return}try{v.postMessage(T)}catch(P){clearTimeout(r),pe.delete(d),l(P)}}),Et=(e,o,n,l)=>{if(o===null){He.get(e)?.(n);return}let d=pe.get(o);!d||!o.startsWith(`${e}:`)||(pe.delete(o),clearTimeout(d.timer),l?d.reject(new Error(l)):d.resolve(n))},Pt=e=>{ue.get(e)?.show()},Tt=e=>(ue.get(e)?.hide(),!0),Lt=async e=>{let o=ue.get(e);ue.delete(e),Ue.delete(e),He.delete(e);for(let[n,l]of pe)n.startsWith(`${e}:`)&&(pe.delete(n),clearTimeout(l.timer),l.reject(new Error("Native UI session closed")));await o?.destroy()},St=async e=>{if(ue.has(e.id))return;let o,n=!1,l,d={show:()=>{l="native",o?.show()},hide:()=>{l="none",o?.hide()},destroy:async()=>{n=!0,await o?.destroy()}};ue.set(e.id,d);try{if(document.readyState==="loading"&&await new Promise(T=>document.addEventListener("DOMContentLoaded",()=>T(),{once:!0})),n)return;let r=new Map;e.runtime==="cordova"&&Ue.set(e.id,r),o=await et(e,{send:T=>bt(e.id,T),listen:async T=>(He.set(e.id,T),{remove:()=>{He.get(e.id)===T&&He.delete(e.id)}})},e.runtime==="cordova"?{addListener:async(T,h)=>(r.set(T,h),{remove:()=>{r.delete(T)}})}:void 0),l==="none"?o.hide():l==="native"&&o.show(),n&&await o.destroy()}catch(r){throw ue.get(e.id)===d&&(ue.delete(e.id),Ue.delete(e.id)),r}};return lt(jt);})();
13
+ `;var ht=(e,o=!1)=>JSON.stringify(e.map(({control:n})=>[n.id,n.kind,n.placement,o?0:n.x,o?0:n.y,n.width,n.height,n.dark,n.rtl])),Ze=(e,o,n=o.getComputedStyle(e))=>{let f=e.getBoundingClientRect(),v=(j,M)=>{let O=parseFloat(j);return n.display!=="inline"&&Number.isFinite(O)?O+(n.boxSizing==="border-box"?0:M.reduce((R,m)=>R+(parseFloat(n.getPropertyValue(m))||0),0)):NaN},c=v(n.width,["padding-left","padding-right","border-left-width","border-right-width"]),l=v(n.height,["padding-top","padding-bottom","border-top-width","border-bottom-width"]),w=1;if(!(c>0&&l>0))for(let j of[e,...ae(e)]){let M=(j===e?n:o.getComputedStyle(j)).getPropertyValue("zoom");w*=(parseFloat(M)||1)/(M.endsWith("%")?100:1)}let u=c>0?f.width/c:w,S=l>0?f.height/l:w;return{x:f.x,y:f.y,scaleX:u||1,scaleY:S||1,left:(parseFloat(n.borderLeftWidth)||0)-e.scrollLeft,top:(parseFloat(n.borderTopWidth)||0)-e.scrollTop,position:n.position}},yt=async(e,o,n)=>{let f=n.captureDelayMs??50;if(!Number.isFinite(f)||f<0||f>2147483647)throw new RangeError("captureDelayMs must be a finite, nonnegative timer interval");let v="native",c=e.element.ownerDocument,l=c.defaultView,w=Array.from(l.crypto.getRandomValues(new Uint32Array(4)),t=>t.toString(16)).join("-"),u=t=>t.isConnected&&t.ownerDocument===c,S=t=>!!t?.isConnected&&t.ownerDocument===c,j=o.send.bind(o),M="data-native-ui-snapshot",O=`${e.namespace}:sources-change`,R=new Set,m=new Set,p=new Set,i=new WeakMap,T=0,N=t=>JSON.stringify(t.map(a=>(i.has(a.scope)||i.set(a.scope,++T),[i.get(a.scope),ht([a],!!n.opaqueUnderlay)]))),d=new Map,W=t=>{let a=t.getRootNode();return a.nodeType===11&&"host"in a?a:c},$=t=>{let a=d.get(t);if(!a){let y=c.createElement("style"),r=c.createElement("style");y.setAttribute("data-native-ui-snapshot-base",""),r.setAttribute(M,""),y.textContent=Je,(t.nodeType===11?t:t.head).append(y,r),a={base:y,image:r},d.set(t,a)}return a.image},A=()=>`${l.innerWidth}:${l.innerHeight}:${l.devicePixelRatio}`,F=!1,C=!1,X=0,ue=0,P,g,ie=!1,U=!1,pe=0,ge=0,D=0,re=0,B=0,Me=-1,J=!1,we=!1,Y,be=new Set,_=(t,a,y)=>{let r=()=>{be.delete(r)&&j({action:t,token:a}).catch(()=>{})};be.add(r),y&&!J?l.requestAnimationFrame(()=>l.requestAnimationFrame(r)):r()},se=new Set,Ee=()=>{se.forEach(t=>p.delete(t)),se.clear()},Z=(t,a=!1)=>{!t||t===P||t===g||(t.images.forEach(y=>{y.src=""}),_("release",t.data.token,a))},Se=t=>t.filter(a=>{if(!S(a.scope.element)||![a.element,...a.sources??[]].every(u))return!1;if(a.control.scroll){let y=a.element.getBoundingClientRect(),r=a.control.scroll.clip;if(y.right<=r.x||y.bottom<=r.y||y.left>=r.x+r.width||y.top>=r.y+r.height)return!1}return n.eligible?.(a)??!0}),fe=async()=>{if(re=0,J||v!=="native"||we||ie||g||n.blocked()||!Y||P?.revision===Y.revision&&Me===B)return;let{revision:t,candidates:a}=Y,y=D,r=B,L=A(),x=Se(a);if(!x.length)return;we=!0;let k,G=!1,ee=[];try{let te=!1,he=j({action:"prepare",revision:n.captureRevision?.()??t,viewportWidth:l.innerWidth,ids:x.map(b=>b.control.id)});he.then(b=>{te&&b.token&&j({action:"release",token:b.token}).catch(()=>{})}).catch(()=>{});try{k=await ce(he)}finally{te=!0}if(!k.token||!k.parts?.length)return;let ye=new Set(x.map(b=>b.control.id));if(k.parts.some(b=>!b.url.startsWith("file:")&&!/^\/__native_ui_engine__\/nativeUI[a-fA-F0-9]+\/[a-fA-F0-9-]+-[0-9]+\.png$/.test(b.url)||!b.ids.length||b.ids.some(V=>!ye.has(V))||![b.x,b.y,b.width,b.height].every(Number.isFinite)||b.width<=0||b.height<=0)||new Set(k.parts.flatMap(b=>b.ids)).size!==ye.size||k.parts.some(b=>new Set(b.ids.map(V=>x.find(Ie=>Ie.control.id===V).scope)).size!==1)||(await ce(Promise.all(k.parts.map(async b=>{let V=c.createElement("img");return ee.push(V),V.src=Ge(b.url),await V.decode(),V}))),J||v!=="native"||ie||g||n.blocked()||D!==y||A()!==L||Y?.revision!==t||x.some(b=>!S(b.scope.element)||![b.element,...b.sources??[]].every(u))))return;let Le=P;P={data:k,images:ee,sources:Array.from(new Set(x.flatMap(b=>[b.element,...b.sources??[]]))),targets:k.parts.map(b=>x.find(V=>b.ids.includes(V.control.id)).element),scopes:k.parts.map(b=>x.find(V=>b.ids.includes(V.control.id)).scope),parents:k.parts.map(b=>x.find(V=>b.ids.includes(V.control.id)).scope.element.parentNode),frames:[],viewport:L,revision:t,layout:N(x)},Ee(),P.sources.forEach(b=>{p.add(b),se.add(b)}),Re(),n.opaqueUnderlay&&j({action:"prepared",token:k.token}).catch(()=>{}),l.dispatchEvent(new Event(O)),Me=r,G=!0,Z(Le)}catch{}finally{G||ee.forEach(te=>{te.src=""}),k?.token&&!G&&j({action:"release",token:k.token}).catch(()=>{}),we=!1,Y&&(Y.revision!==t||B!==r)&&ne()}},ne=()=>{l.clearTimeout(re),!J&&v==="native"&&!g&&!ie&&!n.blocked()&&(re=l.setTimeout(()=>{fe()},f))},Pe,Ce=(t,a)=>{if(a.some(r=>r.scope.element.ownerDocument!==c||[r.element,...r.sources??[]].some(L=>L.ownerDocument!==c)))throw new TypeError("All projection sources and fallback scopes must share one Document");if(n.blocked())return;!g&&P&&P.layout!==N(Se(a))&&ve();let y=N(a);Pe!==y&&(Pe=y,B++,D++),Y?.revision!==t&&D++,Y={revision:t,candidates:a},(P?.revision!==t||Me!==B)&&ne()},me=t=>{!g&&P&&t&&Y?.candidates.some(a=>a.scrollElement===t&&P.sources.includes(a.element))&&ve(),g&&(He(),De()),B++,D++,ne()},Oe=await Ne(o.listen(({active:t})=>{ie=t,D++,l.clearTimeout(re),t||ne()})),je=new Set,Te=t=>{je.delete(t)&&t.removeAttribute("data-native-ui-snapshot-prepared"),t.removeAttribute("data-native-ui-snapshot-visible"),t.removeAttribute(M),t.removeAttribute("data-native-ui-snapshot-source")},s=()=>{ue++,l.cancelAnimationFrame(X),l.cancelAnimationFrame(xe),xe=0,q.clear(),X=0,F=!1,C=!1,Ee(),g?.sources.forEach(t=>{R.delete(t),m.delete(t)}),z.forEach(Te),z.clear(),d.forEach(({base:t,image:a})=>{t.remove(),a.remove()}),d.clear()},h=(t=g,a=U)=>{if(g!==t)return;let y=new Set([g,P]);s(),g=void 0,P=void 0,U=!1,l.clearTimeout(pe),y.forEach(r=>Z(r,a)),n.wake()},E=()=>{if(!g)return;if(P!==g){h();return}let t=g;s(),g=void 0,U=!1,l.clearTimeout(pe),_("restored",t.data.token,!0),t.sources.forEach(a=>{p.add(a),se.add(a)}),Re(),n.wake()},K=()=>{U&&E(),be.forEach(t=>t())},I=t=>t.scopes.map(a=>S(a.element)?a.element:void 0),z=new Set,Q=new Map,q=new Map,xe=0,He=()=>{for(let[t,a]of q){if(!t.isConnected)continue;let y=l.getComputedStyle(t),r=`${a.x-(parseFloat(y.borderLeftWidth)||0)+t.scrollLeft}px`,L=`${a.y-(parseFloat(y.borderTopWidth)||0)+t.scrollTop}px`;a.style.left!==r&&a.style.setProperty("left",r,"important"),a.style.top!==L&&a.style.setProperty("top",L,"important")}},De=()=>{if(xe||!g)return;[...q.keys()].some(a=>a.getAnimations?.().some(y=>y.playState==="running"&&y.effect?.getKeyframes().some(r=>["borderLeftWidth","borderTopWidth","borderWidth"].some(L=>L in r))))&&(xe=l.requestAnimationFrame(()=>{xe=0,He(),De()}))},Re=()=>{let t=g??P;if(!t||U)return;if(!t.sources.every(u)||I(t).some(r=>!r)){ve();return}let a=I(t);if(g){if(a.some(L=>!L?.isConnected||!d.has(W(L)))){h(g,!1);return}let r=new Set;for(let[L,x]of t.targets.entries()){let k=Q.get(x),G=a[L];!k||!G?.isConnected||(G.setAttribute(M,k),G.setAttribute("data-native-ui-snapshot-source",""),G.toggleAttribute("data-native-ui-snapshot-visible",C),r.add(G))}for(let L of z)r.has(L)||Te(L);z.clear(),r.forEach(L=>z.add(L));return}Q.clear(),q.clear(),z.forEach(Te),z.clear();let y=new Map;for(let r of new Set(a)){if(!r)continue;z.add(r);let L=$(W(r)),x=y.get(L);x||(x={rules:[],positions:[]},y.set(L,x));let{rules:k,positions:G}=x;r!==t.targets[a.indexOf(r)]&&!r.hasAttribute("data-native-ui-snapshot-prepared")&&(r.setAttribute("data-native-ui-snapshot-prepared",""),je.add(r)),r.toggleAttribute("data-native-ui-snapshot-visible",!!g||!!n.opaqueUnderlay),g&&r.setAttribute("data-native-ui-snapshot-source","");let ee=a.flatMap((H,oe)=>H===r?[oe]:[]),te=l.getComputedStyle(r);{let H=Ze(r,l,te);ee.forEach(oe=>{let Fe=t.data.parts[oe];n.opaqueUnderlay&&t.frames[oe]||(t.frames[oe]={x:n.opaqueUnderlay?0:(Fe.x-H.x)/H.scaleX,y:n.opaqueUnderlay?0:(Fe.y-H.y)/H.scaleY,width:Fe.width/H.scaleX,height:Fe.height/H.scaleY})})}let he=ee.map(H=>t.frames[H]),ye=Math.min(...he.map(H=>H.x)),Le=Math.min(...he.map(H=>H.y)),b=Math.max(...he.map(H=>H.x+H.width)),V=Math.max(...he.map(H=>H.y+H.height)),Ie=(parseFloat(te.borderLeftWidth)||0)-r.scrollLeft,ot=(parseFloat(te.borderTopWidth)||0)-r.scrollTop,Ae=`${w}-${ee[0]}`;ee.forEach(H=>Q.set(t.targets[H],Ae)),r.setAttribute(M,Ae),k.push(`[${M}="${Ae}"][data-native-ui-snapshot-visible] { ${te.position==="static"?"position:relative!important;":""} }`);let rt=ee.map(H=>{let oe=t.frames[H];return`url(${JSON.stringify(t.images[H].src)}) ${oe.x-ye}px ${oe.y-Le}px / ${oe.width}px ${oe.height}px no-repeat`}),ke=c.createElement("span").style;ke.cssText=`left:${ye-Ie}px;top:${Le-ot}px;width:${b-ye}px;height:${V-Le}px;background:${rt.join(",")};`;for(let H of Array.from(ke))ke.setProperty(H,ke.getPropertyValue(H),"important");k.push(`[${M}="${Ae}"][${M}][${M}]::before { ${ke.cssText} }`),G.push({target:r,x:ye,y:Le})}t.parents=t.scopes.map(r=>r.element.parentNode);for(let[r,{rules:L,positions:x}]of y)r.textContent=L.join(`
14
+ `),x.forEach(({target:k,x:G,y:ee},te)=>q.set(k,{x:G,y:ee,style:r.sheet.cssRules[te*2+1].style}))},Xe=()=>{if(K(),J||v==="none"||g)return;let t=P;if(!t||t.viewport!==A()||!t.sources.every(u)||n.current&&!n.current(t.targets)||t.targets.some(r=>!Q.has(r))||I(t).some(r=>!r?.isConnected)||[...z].some(r=>!r.isConnected))return;t.scopes.some((r,L)=>r.element.parentNode!==t.parents[L])&&Re(),He();let a=++ue,y=()=>ue===a;F=!0,C=!!n.opaqueUnderlay,g=t,D++,l.clearTimeout(re),t.sources.forEach(r=>{R.add(r)}),z.forEach(r=>{r.setAttribute("data-native-ui-snapshot-source",""),r.toggleAttribute("data-native-ui-snapshot-visible",C)}),X=l.requestAnimationFrame(()=>{X=0,y()&&(F=!1,n.wake())}),ce(j({action:"cover",token:t.data.token,...n.transient?{transient:!0}:{}})).then(r=>{if(y()){if(F=!1,r?.shown!==!0){h(t,!1);return}U||(C=!0,t.sources.forEach(L=>m.add(L)),Re(),He(),De()),l.cancelAnimationFrame(X),X=l.requestAnimationFrame(()=>{X=0,y()&&j({action:"painted",token:t.data.token}).catch(()=>{y()&&h(t,!1)})}),n.wake()}}).catch(()=>{y()&&h(t,!1)})},Ye=()=>{if(!(!g||J||U)){if(!g.sources.every(u)||I(g).some(t=>!t)||n.current&&!n.current(g.targets)){h(g,!1);return}if(!n.blocked()){if(n.transient){let t=g,a=I(t);if(a.some(r=>!r?.isConnected)){h(t,!1);return}let y=a.map((r,L)=>{let x=Ze(r,l),k=t.frames[L];return{...t.data.parts[L],x:x.x+k.x*x.scaleX,y:x.y+k.y*x.scaleY,width:k.width*x.scaleX,height:k.height*x.scaleY}});y.some((r,L)=>["x","y","width","height"].some(x=>r[x]!==t.data.parts[L][x]))&&(n.opaqueUnderlay?t.data={...t.data,parts:y}:P=void 0),j({action:"restore",token:t.data.token,viewportWidth:l.innerWidth,parts:y}).catch(()=>{})}ge=n.revision?.()??Y?.revision??0,U=!0,g.sources.forEach(t=>R.delete(t)),pe=l.setTimeout(()=>{U&&h(g,!1)},250),n.wake()}}},nt=(t,a,y)=>{!U||!g||y===void 0||y<=ge||!n.transient&&t||g.data.parts.every(r=>r.ids.every(L=>a?.includes(L)))&&(E(),ne())},ve=()=>{be.forEach(a=>a()),D++,l.clearTimeout(re);let t=P;P=void 0,Z(t),g?h(g,!1):(s(),Q.clear(),l.dispatchEvent(new Event(O)))},qe;try{n.events&&(qe=await Ue(n.events,(t,a)=>{if(!J){if(t&&(v=t),v==="none"){ve();return}t==="web"&&Xe(),t==="native"&&(Ye(),ne()),a&&me()}}))}catch(t){throw J=!0,ve(),await ce(Promise.resolve(Oe.remove())).catch(()=>{}),t}return{get owners(){return[...R]},get visibleOwners(){return[...m]},get preparedOwners(){return[...p]},consider:Ce,changed:me,moved:()=>{He(),De()},get token(){return U?void 0:g?.data.token},begin:Xe,get restoring(){return U},get handoffPending(){return F},retireRestoration:K,end:Ye,updated:nt,invalidate:ve,async destroy(){J=!0,ve(),await Promise.allSettled([ce(Promise.resolve().then(()=>Oe?.remove())),ce(Promise.resolve().then(()=>qe?.remove()))])}}},Qe=async(e,o,n)=>{let f=await yt(e,o,n),v=f.consider;return Object.assign(f,{consider:(c,l)=>v(c,l.map(w=>({...w,scope:e})))})};var et=(e,o)=>{if(e.nodeType!==1||e.namespaceURI!=="http://www.w3.org/1999/xhtml"||!e.ownerDocument||!("style"in e))throw new TypeError("A Web projection scope requires an HTMLElement fallback");if(e.matches("img, input, textarea, select, video, audio, canvas, iframe, embed, object, br, hr, area, base, link, meta, source, track, wbr"))throw new TypeError("A Web projection fallback must support ::before; use its existing container element");return Object.freeze({element:e,namespace:o})};var tt=async(e,o,n={addListener:async(f,v)=>globalThis.Capacitor.addListener(e.plugin,f,v)})=>{let f="view",v=e.receiveListeners,c=!1,l=!1,w="native",u="native",S=_e(document),j=()=>w==="native"&&d&&S.isCovered(d)?"web":w,M=!1,O=!1,R=!1,m,p,i,T=!1,N=()=>{let s=T;T=!0;try{i?.begin()}finally{T=s}},d,W={},$,A=0,F=()=>{A++,$=void 0;let s=$e(d);s?.owner===W&&(s.projected=!1,s.owner=void 0)},C={listen:s=>o.listen(s),send:s=>{if(!e.placementHandoff)return o.send(s);let h=$e(d);if(s.action==="cover"){let Q=++A;return $=s.token,h&&(h.owner=W,h.projected=!1),o.send(s).then(q=>(Q===A&&h===$e(d)&&h?.owner===W&&(h.projected=q?.shown===!0),q)).catch(q=>{throw Q===A&&h?.owner===W&&(F(),h.invalidate()),q})}let E=s.action==="release"&&s.token===$,K=$&&(s.action==="restore"||E||s.action==="reset"||s.action==="visibility"&&s.visible);K&&A++;let I=A,z=()=>{I!==A||h?.owner!==W||(F(),h.invalidate())};try{let Q=K&&h?.owner===W?{...s,token:"token"in s?s.token:$,placement:h.measure()}:s;return o.send(Q).then(q=>(I===A&&(s.action==="resume"||E||s.action==="reset"||s.action==="visibility")&&F(),q)).catch(q=>{throw z(),q})}catch(Q){return z(),Promise.reject(Q)}}},X=0,ue=0,P=0,g=!1,ie=!1,U=!1,pe=!1,ge=document.createElement("style"),D=`data-native-ui-session-${e.id.replace(/[^a-zA-Z0-9-]/g,"")}`;ge.textContent=`[${D}="native"], [${D}="native"] *, [${D}="none"], [${D}="none"] * {visibility:hidden!important}`,document.documentElement.append(ge);let re=()=>{let s=document.querySelectorAll(e.projectionSelector);return s.length===1&&s[0]instanceof HTMLElement?s[0]:void 0},B=()=>{d&&(u==="web"||u==="native"&&O?d.removeAttribute(D):d.setAttribute(D,u))},Me=()=>{if(!d?.isConnected)return[];let s=d.getBoundingClientRect(),h={x:s.x,y:s.y,width:s.width,height:s.height},E=m&&Ve(d,m,()=>e.id);return[{element:d,scrollElement:m,control:{id:f,...h,...E?{scroll:E}:{}}}]},J=async()=>{if(c)return;let s=P,h=e.failedFallback==="native"&&j()==="native"&&!!d?.isConnected;await C.send({action:"visibility",visible:h}).catch(()=>{}),!(c||s!==P)&&(h||u==="none"?B():d?.removeAttribute(D))},we=()=>{if(!M||u!=="native"||!d?.isConnected||i?.token||i?.restoring)return;let s=e.failedFallback==="native";C.send({action:"visibility",visible:s}).catch(()=>{}),s?B():d.removeAttribute(D)},Y=()=>{if(c||T)return;if(we(),u==="web"&&i&&!i.token&&!i.restoring){C.send({action:"visibility",visible:!1}).catch(()=>{}),d?.removeAttribute(D);return}if(g||!i?.restoring||u!=="native")return;g=!0;let s=P,h=i;C.send({action:"resume"}).then(()=>{c||s!==P||h!==i||(O=!1,h.updated(void 0,[f],++X),B(),_())}).catch(()=>{s!==P||c||(h.invalidate(),J())}).finally(()=>{g=!1,Y()})},be=async()=>{if(c||ie||M)return;if(i?.restoring){Y();return}let s=re();if(s!==d){if(P++,F(),d?.removeAttribute(D),await i?.destroy(),i=void 0,c)return;d=s,O=!1,Ee.disconnect(),d&&Ee.observe(d)}if(ne(),u=j(),!d){await C.send({action:"visibility",visible:!1});return}if(!i){ie=!0;let h=P;try{let E=await Qe(et(d,e.id),C,{wake:Y,captureDelayMs:e.captureDelayMs,blocked:()=>u!=="native"||M||O&&!i?.token,revision:()=>X,captureRevision:e.captureMode==="view"?()=>ue:void 0,transient:!0,opaqueUnderlay:e.captureMode==="view"});if(c||h!==P){await E.destroy();return}i=E}finally{ie=!1}}if(!c){if(u==="native"&&O){await C.send({action:"visibility",visible:!1}),B();return}if(u==="native"){let h=P;if(await C.send({action:"visibility",visible:!0}),c||h!==P||u!=="native")return;B(),m=[...ae(d)].find(I=>{let z=getComputedStyle(I);return/auto|scroll/.test(z.overflowX+z.overflowY)&&(I.scrollHeight>I.clientHeight||I.scrollWidth>I.clientWidth)});let E=m&&Ve(d,m,()=>e.id),K=await C.send({action:"track",viewportWidth:innerWidth,...E?{scroll:E}:{}});if(c||h!==P)return;R=K?.tracked===!0,i.consider(e.captureMode==="view"?ue:++X,Me())}else await C.send({action:"visibility",visible:!1}),B()}},_=()=>{c||(U=!0,!(!l||pe)&&(pe=!0,Promise.resolve().then(async()=>{try{for(;U&&!c;)U=!1,await be()}catch{await J()}finally{pe=!1,U&&_()}})))},se=()=>{i?.invalidate(),_()},Ee=new ResizeObserver(se);window.addEventListener("resize",se);let Z=new Set,Se=new WeakSet,fe=s=>{let h=s.composedPath()[0]??s.target;if(!(c||u!=="native"||!d||Se.has(s)||h!==document&&![...ae(d)].includes(h))){if(Se.add(s),R&&h===m){i?.changed(h);return}M?e.captureMode==="view"?i?.moved():i?.changed():((g||i?.restoring)&&P++,M=!0,N(),O=e.failedFallback!=="native",i?.token?d.removeAttribute(D):we()),clearTimeout(p),p=setTimeout(()=>{M=!1,!(c||u!=="native")&&(i?.end(),i?.restoring||_())},100)}},ne=()=>{let s=new Set(d?ae(d):[]),h=s.size!==Z.size||[...s].some(E=>!Z.has(E));for(let E of Z)s.has(E)||(E.removeEventListener("scroll",fe),E.removeEventListener("slotchange",Pe),Z.delete(E));for(let E of s)Z.has(E)||(E.addEventListener("scroll",fe,{passive:!0}),E.addEventListener("slotchange",Pe),Z.add(E));h&&(R=!1,m=void 0,i?.invalidate(),_())},Pe=()=>{ne(),_()};document.addEventListener("scroll",fe,!0);let Ce=new MutationObserver(s=>{ne(),re()!==d?_():d&&s.some(h=>h.type==="childList")&&me(j())});Ce.observe(document.documentElement,{childList:!0,attributes:!0,subtree:!0});let me=(s,h=!1)=>{if(c||!h&&s===u)return;M=!1,clearTimeout(p),u=s,P++;let E=P;u==="none"?C.send({action:"visibility",visible:!1}).then(()=>{u!=="none"||E!==P||c||(i?.invalidate(),B())}).catch(()=>{u!=="none"||E!==P||c||(i?.invalidate(),B())}):u==="web"?(N(),i?.token||C.send({action:"visibility",visible:!1}).catch(()=>{}),B()):u==="native"&&(i?.end(),i?.restoring||_())},Oe=S.subscribe(()=>queueMicrotask(()=>me(j()))),je,Te=async()=>{if(!c){c=!0,F(),P++,Oe(),Ce.disconnect(),Ee.disconnect(),window.removeEventListener("resize",se),document.removeEventListener("scroll",fe,!0);for(let s of Z)s.removeEventListener("scroll",fe),s.removeEventListener("slotchange",Pe);Z.clear(),clearTimeout(p),d?.removeAttribute(D),ge.remove(),await Promise.allSettled([Promise.resolve(je?.remove()),i?.destroy()])}};try{let s=P;je=await Ue({addListener:(E,K)=>n.addListener(E,K),update:v?.update,projection:v?.projection,accepts:E=>!v?.match||Object.entries(v?.match).every(([K,I])=>typeof E=="object"&&E!==null&&E[K]===I)},(E,K)=>{c||(E&&(E==="native"&&(O=!1),w=E,C.send({action:"destination",destination:E}).catch(()=>{}),me(j(),!0)),K&&(ue++,i?.changed(),u==="native"&&_()))});let h=await C.send({action:"connect"});return P===s&&["native","web","none"].includes(h?.destination)&&(w=h.destination),u=j(),l=!0,_(),{destroy:Te,show:()=>{O=!1,w="native",me(j(),!0)},hide:()=>{w=u="none",P++,M=!1,clearTimeout(p),i?.invalidate(),B()}}}catch(s){throw await Te(),s}};var le=new Map,de=new Map,We=new Map,gt=Array.from(crypto.getRandomValues(new Uint32Array(4)),e=>e.toString(16)).join("-"),Be=new Map,wt=(e,o,n)=>Be.get(e)?.get(o)?.(n),bt=0,Et=(e,o)=>new Promise((n,f)=>{let v=`${e}:${gt}:${++bt}`,c=setTimeout(()=>{de.delete(v),f(new Error("Native UI session timed out"))},5e3);de.set(v,{resolve:n,reject:f,timer:c});let l=JSON.stringify({key:v,request:o}),w=globalThis,u=w.webkit?.messageHandlers?.[e]??w[e]??w.nativeUIEngine;if(!u){clearTimeout(c),de.delete(v),f(new Error("Native UI session unavailable"));return}try{u.postMessage(l)}catch(S){clearTimeout(c),de.delete(v),f(S)}}),Pt=(e,o,n,f)=>{if(o===null){We.get(e)?.(n);return}let v=de.get(o);!v||!o.startsWith(`${e}:`)||(de.delete(o),clearTimeout(v.timer),f?v.reject(new Error(f)):v.resolve(n))},Tt=e=>{le.get(e)?.show()},Lt=e=>(le.get(e)?.hide(),!0),Mt=async e=>{let o=le.get(e);le.delete(e),Be.delete(e),We.delete(e);for(let[n,f]of de)n.startsWith(`${e}:`)&&(de.delete(n),clearTimeout(f.timer),f.reject(new Error("Native UI session closed")));await o?.destroy()},St=async e=>{if(le.has(e.id))return;let o,n=!1,f,v={show:()=>{f="native",o?.show()},hide:()=>{f="none",o?.hide()},destroy:async()=>{n=!0,await o?.destroy()}};le.set(e.id,v);try{if(document.readyState==="loading"&&await new Promise(l=>document.addEventListener("DOMContentLoaded",()=>l(),{once:!0})),n)return;let c=new Map;e.runtime==="cordova"&&Be.set(e.id,c),o=await tt(e,{send:l=>Et(e.id,l),listen:async l=>(We.set(e.id,l),{remove:()=>{We.get(e.id)===l&&We.delete(e.id)}})},e.runtime==="cordova"?{addListener:async(l,w)=>(c.set(l,w),{remove:()=>{c.delete(l)}})}:void 0),f==="none"?o.hide():f==="native"&&o.show(),n&&await o.destroy()}catch(c){throw le.get(e.id)===v&&(le.delete(e.id),Be.delete(e.id)),c}};return dt(jt);})();
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@webview-native-ui/engine",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "Native UI placement, scroll tracking, and Web projection for Capacitor and Cordova plugin maintainers.",
5
5
  "type": "module",
6
- "license": "Zlib",
6
+ "license": "MIT",
7
7
  "repository": {
8
8
  "type": "git",
9
9
  "url": "git+https://github.com/webview-native-ui/engine.git"
@@ -24,7 +24,6 @@
24
24
  "WebViewNativeUIEngine.podspec",
25
25
  "README.md",
26
26
  "LICENSE",
27
- "NOTICE",
28
27
  "docs"
29
28
  ],
30
29
  "scripts": {
package/NOTICE DELETED
@@ -1,39 +0,0 @@
1
- WebView Native UI Engine
2
- https://github.com/webview-native-ui/engine
3
-
4
- Extracted from https://github.com/rdlabo-dev/ionic-theme-ios27 at commit
5
- b218d8bfe0c87c02addc668fee9c7aa333489486 (2026-10-27).
6
- Original history remains available in that repository.
7
-
8
- This package extracts and adapts native UI infrastructure from
9
- ionic-theme-ios27 / @rdlabo/capacitor-native-ui. It is an adapted library,
10
- not an unmodified copy of those projects. New work and modifications in
11
- this engine are licensed under Zlib (see LICENSE).
12
-
13
- The upstream MIT notice is retained below for the portions derived from
14
- those projects. This does not withdraw rights previously granted under MIT.
15
- The Gradle wrapper retains its own Apache-2.0 notices.
16
-
17
- --- Upstream notice ---
18
-
19
- MIT License
20
-
21
- Copyright (c) 2021
22
-
23
- Permission is hereby granted, free of charge, to any person obtaining a copy
24
- of this software and associated documentation files (the "Software"), to deal
25
- in the Software without restriction, including without limitation the rights
26
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
27
- copies of the Software, and to permit persons to whom the Software is
28
- furnished to do so, subject to the following conditions:
29
-
30
- The above copyright notice and this permission notice shall be included in all
31
- copies or substantial portions of the Software.
32
-
33
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
34
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
35
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
36
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
37
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
38
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
39
- SOFTWARE.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes