@webview-native-ui/engine 1.0.2-0 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/projection/web.d.ts +1 -1
- package/dist/projection/web.js +116 -94
- package/dist/types.d.ts +1 -0
- package/docs/advanced/web-projection.md +15 -2
- package/ios/Sources/WebViewNativeUIEngine/CoveredSnapshots.swift +2 -1
- package/ios/Sources/WebViewNativeUIEngine/Resources/native-ui-engine.js +3 -3
- package/package.json +1 -1
- package/src/projection/web.ts +119 -93
- package/src/types.ts +1 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var WebViewNativeUIEngineRuntime=(()=>{var
|
|
1
|
+
"use strict";var WebViewNativeUIEngineRuntime=(()=>{var Qe=Object.defineProperty;var Pt=Object.getOwnPropertyDescriptor;var Et=Object.getOwnPropertyNames;var Tt=Object.prototype.hasOwnProperty;var Mt=(e,o)=>{for(var r in o)Qe(e,r,{get:o[r],enumerable:!0})},Lt=(e,o,r,v)=>{if(o&&typeof o=="object"||typeof o=="function")for(let m of Et(o))!Tt.call(e,m)&&m!==r&&Qe(e,m,{get:()=>o[m],enumerable:!(v=Pt(o,m))||v.enumerable});return e};var jt=e=>Lt(Qe({},"__esModule",{value:!0}),e);var qt={};Mt(qt,{hide:()=>Bt,notify:()=>Nt,receive:()=>$t,show:()=>Ut,start:()=>zt,stop:()=>Vt});var at=(e,o,r)=>{for(let[v,m]of Object.entries(o)){if(!/^[a-z][a-z0-9-]*$/.test(v))throw new TypeError("Native value keys must be lowercase attribute names");let E=(Object.hasOwn(r,v)?r[v]:void 0)?.property;if(E&&(!/^[a-zA-Z][\w]*$/.test(E)||/^on/i.test(E)||["innerHTML","outerHTML","textContent","innerText","style","constructor","prototype"].includes(E)))throw new TypeError("Native value binding requires a data property");let b=JSON.stringify(m);if(b===void 0)throw new TypeError("Native values must be JSON values");if(E){let l=e;JSON.stringify(l[E])!==b&&(l[E]=m)}else{let l=`data-native-ui-value-${v}`,h=typeof m=="string"?m:b;e.getAttribute(l)!==h&&e.setAttribute(l,h)}}};var St=Symbol.for("webview-native-ui-engine.projection-placement");var Ue=e=>e?.[St];var xt=(e,o)=>{if(e.matches("ion-toast, ion-menu"))return!1;let r=e;if(r.showBackdrop===!1)return!1;if(!e.matches("ion-modal"))return!0;let v=o??r.initialBreakpoint;return v===void 0||v>(r.backdropBreakpoint??0)},Ht=Symbol.for("@webview-native-ui/engine/overlays/v1"),Rt=e=>{let o=new Set,r=new Set,v=new Set,m=new WeakMap,p=new WeakSet,E=new Map,b=[],l={},h=new Map,R,x=w=>{for(let f of[...v])try{f(w)}catch(y){console.error("Native UI overlay listener failed",y)}},I=(w,f,y)=>{f==="willPresent"||f==="didPresent"?(p.delete(w),o.add(w)):f==="didDismiss"&&(p.add(w),o.delete(w),r.delete(w),m.delete(w));let c=y?.detail?.breakpoint;typeof c=="number"&&c>0&&m.set(w,c),x({element:w,phase:f,event:y})},C=(w=!1)=>{let f=!1;for(let y of o)(!y.isConnected||y.ownerDocument!==e||!b.some(({selector:c})=>y.matches(c)))&&(o.delete(y),r.delete(y),f=!0);for(let y of e.querySelectorAll(b.map(({selector:c})=>c).join(",")))!o.has(y)&&!p.has(y)&&(w||!y.matches("ion-popover"))&&(y.presented||y.classList.contains("show-menu"))&&(o.add(y),f=!0);f&&x({phase:"change"})};return{get active(){return o},subscribe(w){return v.add(w),()=>{v.delete(w)}},setNative(w,f){r.has(w)!==f&&(f?r.add(w):r.delete(w),x({element:w,phase:"change"}))},isExcluded(w){return!!l.exclude&&w.matches(l.exclude)},isNative(w){return r.has(w)},get stack(){let w=[...o].filter(y=>y.isConnected&&y.ownerDocument===e),f=y=>{let c=Number.parseFloat(e.defaultView.getComputedStyle(y).zIndex);return Number.isFinite(c)?c:y.overlayIndex??0};return w.sort((y,c)=>f(y)-f(c)),w},isCovered(w){let f=this.stack,y=f.reduce((c,D,H)=>D.contains(w)?H:c,-1);return f.some((c,D)=>{if(r.has(c)||l.exclude&&c.matches(l.exclude))return!1;let H=l.covers?.(c,w);return H!==void 0?H:D>y&&!c.contains(w)&&(c.matches("ion-menu")||xt(c,m.get(c)))})},enable(w,f){let y={...l,...f},c=[...w,...y.additional??[]];y.exclude&&e.querySelector(y.exclude);let D=new Map;for(let u of c){e.querySelector(u.selector);for(let[z,Y]of Object.entries(u.events)){let te=D.get(Y);if(te&&te.phase!==z)throw new TypeError(`Overlay event "${Y}" has conflicting phases`);D.set(Y,{phase:z,selector:te?`${te.selector}, ${u.selector}`:u.selector})}}l=y,b=c,h=D;for(let u of h.keys()){if(E.has(u))continue;let z=Y=>{let te=h.get(u),Te=Y.composedPath().find(q=>q instanceof e.defaultView.HTMLElement&&q.matches(te.selector));Te&&I(Te,te.phase,Y)};e.addEventListener(u,z,!0),E.set(u,()=>e.removeEventListener(u,z,!0))}for(let[u,z]of E)h.has(u)||(z(),E.delete(u));let H=!R;R||(R=new MutationObserver(()=>C()),R.observe(e.documentElement,{childList:!0,subtree:!0}),e.addEventListener("nativeUIOverlayAdopted",u=>{let z=u.detail;z?.ownerDocument===e&&I(z,"willPresent",u)})),C(H),(H||f)&&x({phase:"change"})}}},ct=e=>{let o=e;return o[Ht]??=Rt(e)};var kt=Symbol.for("@webview-native-ui/engine/projection-pause/v1"),Ct=e=>{let o=ct(e),r=new Set,v=0,m=0,p=()=>v>0||m!==0,E=()=>{for(let l of r)l()},b=l=>{if(l<0&&v===0)return;let h=p();v+=l;let R=e.defaultView;m&&R&&(R.cancelAnimationFrame(m),m=0),v===0&&R?m=R.requestAnimationFrame(()=>{m=R.requestAnimationFrame(()=>{m=0,E()})}):h!==p()&&E()};return{isPaused:l=>p()||!!l&&o.isCovered(l),subscribe(l){r.add(l);let h=o.subscribe(l);return()=>{r.delete(l),h()}},pause:()=>b(1),resume:()=>b(-1)}},_e=e=>{let o=e;return o[kt]??=Ct(e)};function*Fe(e){let o=e;for(;o;){let r=o.getRootNode();o=o.assignedSlot??o.parentElement??(r instanceof ShadowRoot?r.host:null),o&&(yield o)}}var At=({x:e,y:o,width:r,height:v})=>({x:e,y:o,width:r,height:v}),lt=e=>{let o=e.getBoundingClientRect(),r=getComputedStyle(e),v=parseFloat(r.borderLeftWidth)||0,m=parseFloat(r.borderTopWidth)||0;return{x:o.left+v,y:o.top+m,width:o.width-v-(parseFloat(r.borderRightWidth)||0),height:o.height-m-(parseFloat(r.borderBottomWidth)||0)}},et=(e,o,r)=>{let v=[e,...Fe(e)],m=v.indexOf(o);if(m<=0||o===e.ownerDocument.scrollingElement)return;let p=e.ownerDocument.defaultView;if(p.visualViewport&&(p.visualViewport.scale!==1||p.visualViewport.offsetLeft||p.visualViewport.offsetTop))return;let E=0,b=0,l=p.innerWidth,h=p.innerHeight;for(let[C,w]of v.entries()){let f=getComputedStyle(w);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(H=>H&&H!=="none")||f.writingMode&&f.writingMode!=="horizontal-tb"||C<m&&/^(fixed|sticky)$/.test(f.position))return;if(C===0)continue;if(f.scrollbarGutter&&f.scrollbarGutter!=="auto")return;let y=/^(auto|scroll|hidden|clip)$/.test(f.overflowX),c=/^(auto|scroll|hidden|clip)$/.test(f.overflowY);if(C<m&&(y||c))return;let D=w===e.ownerDocument.scrollingElement;if(C>m&&((y||D)&&w.scrollWidth>w.clientWidth||(c||D)&&w.scrollHeight>w.clientHeight)||(y||c)&&[f.borderTopLeftRadius,f.borderTopRightRadius,f.borderBottomLeftRadius,f.borderBottomRightRadius].some(H=>parseFloat(H)>0)||f.clipPath&&f.clipPath!=="none"||f.maskImage&&f.maskImage!=="none")return;if(C>=m){let H=lt(w);y&&(E=Math.max(E,H.x),l=Math.min(l,H.x+H.width)),c&&(b=Math.max(b,H.y),h=Math.min(h,H.y+H.height))}}let R=getComputedStyle(o);if(!/^(auto|scroll)$/.test(R.overflowX)&&!/^(auto|scroll)$/.test(R.overflowY))return;let x=lt(o);if(l<=E||h<=b||!x.width||!x.height)return;let I=At(e.getBoundingClientRect());return{id:r(o),offsetX:o.scrollLeft,offsetY:o.scrollTop,viewport:x,clip:{x:E,y:b,width:l-E,height:h-b},contentWidth:o.scrollWidth,contentHeight:o.scrollHeight,frame:{...I,x:I.x-x.x+o.scrollLeft,y:I.y-x.y+o.scrollTop}}};var dt=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 ve=e=>new Promise((o,r)=>{let v=setTimeout(()=>r(new Error("Native UI bridge timed out")),5e3);e.then(o,r).finally(()=>clearTimeout(v))}),Je=async e=>{try{return await ve(e)}catch(o){throw e.then(r=>r.remove()).catch(()=>{}),o}};var Ge=async(e,o)=>{let r=new Map;for(let b of e.update??[])r.set(b,{updated:!0});for(let b of["native","web","none"])for(let l of e.projection?.[b]??[]){let h=r.get(l)??{updated:!1};if(h.destination&&h.destination!==b)throw new TypeError(`Projection event "${l}" has conflicting destinations`);r.set(l,{...h,destination:b})}let v=!1,m=[],p=async()=>{v=!0;let l=(await Promise.allSettled(m.splice(0).map(h=>Promise.resolve().then(()=>h.remove())))).find(h=>h.status==="rejected");if(l?.status==="rejected")throw l.reason},E=[...r].map(async([b,l])=>{let h=await Je(Promise.resolve().then(()=>e.addListener(b,R=>{!v&&(!e.accepts||e.accepts(R))&&o(l.destination,l.updated)})));v?await h.remove():m.push(h)});try{return await Promise.all(E),{remove:p}}catch(b){throw await p().catch(()=>{}),b}};var xe=":is([data-native-ui-snapshot-source], [data-native-ui-snapshot-prepared], [data-native-ui-snapshot-content])",ut=`
|
|
2
2
|
@layer native-ui-projection {
|
|
3
3
|
${xe}, ${xe} *, ${xe}::part(native) { visibility: hidden !important; }
|
|
4
4
|
${xe}::before, ${xe}::after,
|
|
@@ -7,7 +7,7 @@ ${xe} *::before, ${xe} *::after {
|
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
9
|
[data-native-ui-snapshot-visible][data-native-ui-snapshot-positioned] { position:relative!important; }
|
|
10
|
-
`,
|
|
10
|
+
`,ft=`
|
|
11
11
|
@layer native-ui-projection {
|
|
12
12
|
:host([data-native-ui-snapshot-content]),
|
|
13
13
|
:host([data-native-ui-snapshot-content])::before,
|
|
@@ -18,4 +18,4 @@ ${xe} *::before, ${xe} *::after {
|
|
|
18
18
|
visibility: hidden !important;
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
`;var At=({control:e},o=!1)=>[e.id,e.kind,e.placement,o?0:e.x,o?0:e.y,e.width,e.height,e.dark,e.rtl],Ot=async(e,o,s)=>{let v=s.captureDelayMs??50;if(!Number.isFinite(v)||v<0||v>2147483647)throw new RangeError("captureDelayMs must be a finite, nonnegative timer interval");let p="native",f=e.element.ownerDocument,w=_e(f),b=!1,a=f.defaultView,L=Array.from(a.crypto.getRandomValues(new Uint32Array(4)),t=>t.toString(16)).join("-"),j=t=>t.isConnected&&t.ownerDocument===f,H=t=>!!t?.isConnected&&t.ownerDocument===f,D=new Map,W=new Set,y=t=>{W.delete(t),t.style.setProperty("display","none","important"),t.removeAttribute("data-native-ui-projection-image"),t.removeAttribute("src"),Fe()},d=o.send.bind(o),g="data-native-ui-snapshot",l=`${e.namespace}:sources-change`,F=new Set,x=new Set,u=new Set,B=new WeakMap,Z=0,_=t=>JSON.stringify(t.map(n=>{B.has(n.scope)||B.set(n.scope,++Z);let r=s.transient&&!s.opaqueUnderlay?n.scope.element.getBoundingClientRect():void 0,c=r?{...n,control:{...n.control,x:n.control.x-r.x,y:n.control.y-r.y}}:n;return[B.get(n.scope),At(c,!!s.opaqueUnderlay)]})),Q=new Map,J=t=>{let n=t.getRootNode();return n.nodeType===11&&"host"in n?n:f},le=t=>{if(Q.has(t))return;let n=f.createElement("style");n.setAttribute("data-native-ui-snapshot-base",""),n.textContent=dt+(t.nodeType===11?ut:""),(t.nodeType===11?t:t.head).append(n),Q.set(t,n)},ee=t=>{let n=[...t.getAnimations({subtree:!0}),...[...ne.get(t)??[]].flatMap(r=>r.shadowRoot?.getAnimations()??[])];for(let r of n)"transitionProperty"in r&&r.transitionProperty==="visibility"&&r.cancel()},ne=new Map,He=t=>{let n=ne.get(t)??new Set;ne.set(t,n);let r=t.hasAttribute("data-native-ui-snapshot-source")||t.hasAttribute("data-native-ui-snapshot-prepared"),c=h=>{if(!h.hasAttribute("data-native-ui-projection-node")){if(h.shadowRoot){n.add(h),le(h.shadowRoot);for(let M of h.shadowRoot.children)c(M)}for(let M of h.children)c(M)}};c(t);for(let h of n)h.toggleAttribute("data-native-ui-snapshot-content",r);ee(t)},Pe=()=>`${a.innerWidth}:${a.innerHeight}:${a.devicePixelRatio}`,re=!1,oe=!1,C=0,ve=0,A,S,P,he=!1,V=!1,Ee=0,ke=0,$=0,te=0,X=0,Ne=-1,z=!1,Re=!1,Y,Fe=()=>{let t=new Set(Y?.candidates.map(r=>r.scope.element));for(let[r,c]of D){let h=!z&&r.isConnected&&t.has(r);if(h&&(P||V||re))continue;let M=h?2*Math.max(1,A?.scopes.filter(R=>R.element===r).length??0):0,O=Math.max(0,M-c.filter(R=>W.has(R)).length),U=c.filter(R=>W.has(R)||O-- >0?!0:(R.remove(),!1));U.length?D.set(r,U):D.delete(r)}let n=new Set([...Y?.candidates.map(r=>r.scope.element.getRootNode())??[],...P?.scopes.map(r=>r.element.getRootNode())??[],...A?.scopes.map(r=>r.element.getRootNode())??[],...[...W].map(r=>r.getRootNode()),...[...ne.values()].flatMap(r=>[...r].map(c=>c.shadowRoot))]);for(let[r,c]of Q)r.nodeType===11&&!n.has(r)&&(c.remove(),Q.delete(r))},G=new Set,Ce=(t,n,r)=>{let c=()=>{G.delete(c)&&(d({action:t,token:n}).catch(()=>{}),t==="restored"&&Fe())};G.add(c),r&&!z?a.requestAnimationFrame(()=>a.requestAnimationFrame(c)):c()},ue=new Set,se=()=>{ue.forEach(t=>u.delete(t)),ue.clear()},Ae=(t,n=!1)=>{!t||t===A||t===P||(t.images.forEach(r=>{y(r)}),Ce("release",t.data.token,n))},ye=t=>t.filter(n=>{if(!H(n.scope.element)||![n.element,...n.sources??[]].every(j))return!1;if(n.control.scroll){let r=n.element.getBoundingClientRect(),c=n.control.scroll.clip;if(r.right<=c.x||r.bottom<=c.y||r.left>=c.x+c.width||r.top>=c.y+c.height)return!1}return s.eligible?.(n)??!0}),$e=async()=>{if(te=0,z||p!=="native"||Re||he||P||s.blocked()||!Y||A?.revision===Y.revision&&Ne===X)return;let{revision:t,candidates:n}=Y,r=$,c=X,h=Pe(),M=ye(n);if(!M.length)return;Re=!0;let O,U=!1,R=[];try{let ae=!1,ce=d({action:"prepare",revision:s.captureRevision?.()??t,viewportWidth:a.innerWidth,ids:M.map(T=>T.control.id)});ce.then(T=>{ae&&T.token&&d({action:"release",token:T.token}).catch(()=>{})}).catch(()=>{});try{O=await me(ce)}finally{ae=!0}if(!O.token||!O.parts?.length)return;let We=new Set(M.map(T=>T.control.id));if(O.parts.some(T=>!T.url.startsWith("file:")&&!/^\/__native_ui_engine__\/nativeUI[a-fA-F0-9]+\/[a-fA-F0-9-]+-[0-9]+\.png$/.test(T.url)||!T.ids.length||T.ids.some(de=>!We.has(de))||![T.x,T.y,T.width,T.height].every(Number.isFinite)||T.width<=0||T.height<=0)||new Set(O.parts.flatMap(T=>T.ids)).size!==We.size||O.parts.some(T=>new Set(T.ids.map(de=>M.find(Ye=>Ye.control.id===de).scope)).size!==1))return;let fe=O.parts.map(T=>M.find(de=>T.ids.includes(de.control.id)));if(await me(Promise.all(O.parts.map(async(T,de)=>{let Ye=fe[de].scope.element,Ve=D.get(Ye);Ve||(Ve=[],D.set(Ye,Ve));let pe=Ve.find(wt=>!W.has(wt));return pe||(pe=f.createElement("img"),pe.setAttribute("data-native-ui-projection-node",""),Ve.push(pe)),W.add(pe),R.push(pe),pe.src=lt(T.url),await pe.decode(),pe}))),z||p!=="native"||he||P||s.blocked()||$!==r||Pe()!==h||Y?.revision!==t||M.some(T=>!H(T.scope.element)||![T.element,...T.sources??[]].every(j)))return;let gt=A,rt={data:O,images:R,sources:Array.from(new Set(M.flatMap(T=>[T.element,...T.sources??[]]))),targets:fe.map(T=>T.element),scopes:fe.map(T=>T.scope),parents:fe.map(T=>T.scope.element.parentNode),frames:[],viewport:h,revision:t,layout:_(M)};try{if(!je(rt))throw new Error("Projection destination is unavailable")}catch(T){Me();try{je(),A?.sources.forEach(de=>{u.add(de),ue.add(de)})}catch{i()}throw T}A=rt,se(),A.sources.forEach(T=>{u.add(T),ue.add(T)}),s.opaqueUnderlay&&d({action:"prepared",token:O.token}).catch(()=>{}),a.dispatchEvent(new Event(l)),Ne=c,U=!0,Ae(gt),w.isPaused()&&Xe()}catch{}finally{U||R.forEach(ae=>{y(ae)}),O?.token&&!U&&d({action:"release",token:O.token}).catch(()=>{}),Re=!1,Y&&(Y.revision!==t||X!==c)&&ge()}},ge=()=>{a.clearTimeout(te),!z&&p==="native"&&!P&&!he&&!s.blocked()&&(te=a.setTimeout(()=>{$e()},v))},Te,Ie=(t,n)=>{if(n.some(c=>c.scope.element.ownerDocument!==f||[c.element,...c.sources??[]].some(h=>h.ownerDocument!==f)))throw new TypeError("All projection sources and fallback scopes must share one Document");if(s.blocked())return;!P&&A&&A.layout!==_(ye(n))&&Se();let r=_(n);Te!==r&&(Te=r,X++,$++),Y?.revision!==t&&$++,Y={revision:t,candidates:n},Fe(),(A?.revision!==t||Ne!==X)&&ge()},Ue=t=>{!P&&A&&t&&Y?.candidates.some(n=>n.scrollElement===t&&A.sources.includes(n.element))&&Se(),P&&I(),X++,$++,ge()},Le=await Je(o.listen(({active:t})=>{he=t,$++,a.clearTimeout(te),t||ge()})),Be=new Set,Oe=t=>{ne.get(t)?.forEach(n=>n.removeAttribute("data-native-ui-snapshot-content")),Be.delete(t)&&t.removeAttribute("data-native-ui-snapshot-prepared"),t.removeAttribute("data-native-ui-snapshot-visible"),t.removeAttribute(g),t.removeAttribute("data-native-ui-snapshot-positioned"),t.removeAttribute("data-native-ui-snapshot-source"),ee(t),ne.delete(t)},Me=()=>{ve++,a.cancelAnimationFrame(C);for(let t of K.keys())t.style.setProperty("opacity","0","important");K.clear(),C=0,re=!1,oe=!1,se(),P?.sources.forEach(t=>{F.delete(t),x.delete(t)}),k.forEach(Oe),k.clear(),Q.forEach((t,n)=>{(z||n.nodeType===11&&!n.host.isConnected)&&(t.remove(),Q.delete(n))})},i=(t=P,n=V)=>{if(P!==t)return;let r=new Set([P,A]);Me(),P=void 0,A=void 0,V=!1,a.clearTimeout(Ee),r.forEach(c=>Ae(c,n)),s.wake()},m=()=>{if(!P)return;if(A!==P){i();return}let t=P;ve++,a.cancelAnimationFrame(C),C=0,re=oe=!1,t.sources.forEach(n=>{F.delete(n),x.delete(n)}),k.forEach(n=>n.removeAttribute("data-native-ui-snapshot-source")),ie(t,!!s.opaqueUnderlay),P=void 0,V=!1,a.clearTimeout(Ee),Ce("restored",t.data.token,!0),t.sources.forEach(n=>{u.add(n),ue.add(n)}),s.wake()},E=()=>{V&&m(),G.forEach(t=>t())},N=t=>t.scopes.map(n=>H(n.element)?n.element:void 0),k=new Set,ie=(t,n)=>{for(let r of k)r.toggleAttribute("data-native-ui-snapshot-visible",n),He(r);t.images.forEach(r=>r.style.setProperty("opacity",n?"1":"0","important"))},q=new Map,K=new Map,I=()=>{let t=[];for(let[n,r]of K){let{target:c,frame:h}=r;if(!c.isConnected){n.remove();continue}let M=c.shadowRoot??c;n.parentNode!==M&&M.insertBefore(n,null);let O=c.getBoundingClientRect(),U=n.getBoundingClientRect(),R=parseFloat(n.style.width)||h.width,ae=parseFloat(n.style.height)||h.height,ce=U.width/R||1,We=U.height/ae||1,fe=r.scale??(r.scale={x:ce,y:We});t.push({element:n,left:(parseFloat(n.style.left)||0)+(O.x+h.x*ce/fe.x-U.x)/ce,top:(parseFloat(n.style.top)||0)+(O.y+h.y*We/fe.y-U.y)/We,width:h.width/fe.x,height:h.height/fe.y})}for(let{element:n,...r}of t)for(let[c,h]of Object.entries(r)){let M=`${h}px`;n.style.getPropertyValue(c)!==M&&n.style.setProperty(c,M,"important")}},je=(t=P??A)=>{if(!t||V)return!1;if(!t.sources.every(j)||N(t).some(r=>!r))return Se(),!1;let n=N(t);if(P){if(n.some(c=>!c?.isConnected||!Q.has(J(c))))return i(P,!1),!1;let r=new Set;for(let[c,h]of t.targets.entries()){let M=q.get(h),O=n[c];!M||!O?.isConnected||(O.setAttribute(g,M),O.setAttribute("data-native-ui-snapshot-source",""),r.add(O))}for(let c of k)r.has(c)||Oe(c);return k.clear(),r.forEach(c=>k.add(c)),ie(t,oe),!0}D.forEach(r=>r.forEach(c=>{t.images.includes(c)||(c.style.setProperty("display","none","important"),c.removeAttribute("data-native-ui-projection-image"))})),q.clear(),K.clear(),k.forEach(Oe),k.clear();for(let r of new Set(n)){if(!r)continue;k.add(r),le(J(r));let c=n.flatMap((U,R)=>U===r?[R]:[]),h=`${L}-${c[0]}`;r.setAttribute(g,h),r!==t.targets[c[0]]&&(r.setAttribute("data-native-ui-snapshot-prepared",""),Be.add(r)),r.toggleAttribute("data-native-ui-snapshot-visible",!!s.opaqueUnderlay),He(r);let M=r.getBoundingClientRect();r.toggleAttribute("data-native-ui-snapshot-positioned",a.getComputedStyle(r).position==="static");let O=r.shadowRoot??r;for(let U of[...c].reverse()){let R=t.images[U],ae=t.data.parts[U],ce=t.frames[U]??{x:s.opaqueUnderlay?0:ae.x-M.x,y:s.opaqueUnderlay?0:ae.y-M.y,width:ae.width,height:ae.height};t.frames[U]=ce,q.set(t.targets[U],h),R.inert=!0,R.setAttribute("aria-hidden","true"),R.setAttribute("data-native-ui-projection-image",h),R.style.cssText="all:initial!important;position:absolute!important;display:block!important;visibility:visible!important;pointer-events:none!important;image-rendering:pixelated!important;will-change:opacity!important;opacity:0!important;",R.style.setProperty("width",`${ce.width}px`,"important"),R.style.setProperty("height",`${ce.height}px`,"important"),R.style.setProperty("left","0px","important"),R.style.setProperty("top","0px","important"),R.style.setProperty("opacity",s.opaqueUnderlay?"1":"0","important"),R.parentNode!==O&&O.insertBefore(R,null),K.set(R,{target:r,frame:ce})}}return t.parents=t.scopes.map(r=>r.element.parentNode),I(),!0},et=t=>t.images.map((n,r)=>{let c=n.getBoundingClientRect();return{...t.data.parts[r],x:c.x,y:c.y,width:c.width,height:c.height}}),Xe=(t=!1)=>{if(E(),z||p==="none"||P&&!t)return;let n=P??A;if(!n||n.viewport!==Pe()||!n.sources.every(j)||s.current&&!s.current(n.targets)||n.targets.some(h=>!q.has(h))||N(n).some(h=>!h?.isConnected)||[...k].some(h=>!h.isConnected))return;n.scopes.some((h,M)=>h.element.parentNode!==n.parents[M])&&je(),I();let r=++ve,c=()=>ve===r;re=!0,oe=!!s.opaqueUnderlay,P=n,$++,a.clearTimeout(te),n.sources.forEach(h=>{F.add(h)}),k.forEach(h=>h.setAttribute("data-native-ui-snapshot-source","")),ie(n,oe),C=a.requestAnimationFrame(()=>{C=0,c()&&(re=!1,s.wake())}),me(d({action:"cover",token:n.data.token,...s.transient?{transient:!0,viewportWidth:a.innerWidth,parts:et(n)}:{}})).then(h=>{if(c()){if(re=!1,h?.shown!==!0){i(n,!1);return}V||(oe=!0,n.sources.forEach(M=>x.add(M)),je(),I()),a.cancelAnimationFrame(C),C=a.requestAnimationFrame(()=>{C=0,c()&&d({action:"painted",token:n.data.token}).then(M=>{c()&&M?.shown===!1&&i(n,!1)}).catch(()=>{c()&&i(n,!1)})}),s.wake()}}).catch(()=>{c()&&i(n,!1)})},tt=()=>{if(!(!P||z||V)){if(!P.sources.every(j)||N(P).some(t=>!t)||s.current&&!s.current(P.targets)){i(P,!1);return}if(!s.blocked()){if(I(),s.transient){let t=P;if(N(t).some(c=>!c?.isConnected)){i(t,!1);return}let r=et(t);s.opaqueUnderlay||r.every((c,h)=>c.width===t.data.parts[h].width&&c.height===t.data.parts[h].height)?t.data={...t.data,parts:r}:A=void 0,d({action:"restore",token:t.data.token,viewportWidth:a.innerWidth,parts:r}).catch(()=>{})}ke=s.revision?.()??Y?.revision??0,V=!0,P.sources.forEach(t=>F.delete(t)),Ee=a.setTimeout(()=>{V&&i(P,!1)},250),s.wake()}}},vt=(t,n,r)=>{!V||!P||r===void 0||r<=ke||!s.transient&&t||P.data.parts.every(c=>c.ids.every(h=>n?.includes(h)))&&(m(),ge())},Se=(t=!1)=>{G.forEach(r=>r()),$++,a.clearTimeout(te);let n=A;if(A=void 0,(t||z)&&(S=void 0),s.retainPreparedUntilRelease&&!P&&!t&&!z){if(n){let r={};S=r,me(d({action:"release",token:n.data.token})).catch(()=>{}).finally(()=>{if(n.images.forEach(c=>{y(c)}),S===r&&(S=void 0,!(A||P))){for(let c of k)c.getAttribute(g)!==q.get(c)&&(k.delete(c),Be.delete(c));Me(),q.clear(),a.dispatchEvent(new Event(l))}})}if(S)return}Ae(n),P?i(P,!1):(Me(),q.clear(),a.dispatchEvent(new Event(l)))},nt=()=>{let t=!b;b=!0,Xe(t&&w.isPaused())},ot=()=>{b=!1,w.isPaused()||tt()},ht=()=>queueMicrotask(()=>{z||(w.isPaused()?Xe():b||tt(),s.wake())}),it;try{s.events&&(it=await Ge(s.events,(t,n)=>{if(!z){if(t&&(p=t),p==="none"){b=!1,Se();return}t==="web"&&nt(),t==="native"&&(ot(),w.isPaused()&&Xe(!0),ge()),n&&Ue()}}))}catch(t){throw z=!0,Se(),await me(Promise.resolve(Le.remove())).catch(()=>{}),t}let yt=w.subscribe(ht);return{get owners(){return[...F]},get visibleOwners(){return[...x]},get preparedOwners(){return[...u]},consider:Ie,changed:Ue,moved:I,get token(){return V?void 0:P?.data.token},begin:nt,get restoring(){return V},get handoffPending(){return re},retireRestoration:E,end:ot,updated:vt,invalidate:Se,async destroy(){z=!0,yt(),Se(),D.forEach(t=>t.forEach(n=>n.remove())),D.clear(),await Promise.allSettled([me(Promise.resolve().then(()=>Le?.remove())),me(Promise.resolve().then(()=>it?.remove()))])}}},ft=async(e,o,s)=>{let v=await Ot(e,o,s),p=v.consider;return Object.assign(v,{consider:(f,w)=>p(f,w.map(b=>({...b,scope:e})))})};var pt=(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 be a container element; use the existing fallback container");return Object.freeze({element:e,namespace:o})};var mt=async(e,o,s={addListener:async(v,p)=>globalThis.Capacitor.addListener(e.plugin,v,p)})=>{let v="view",p=e.receiveListeners,f=!1,w=!1,b="native",a="native",L=_e(document),j=()=>b==="native"&&L.isPaused(u)?"web":b,H=!1,D=!1,W=!1,y=!1,d,g,l,F=!1,x=()=>{let i=F;F=!0;try{l?.begin()}finally{F=i}},u,B=0,Z,_=()=>{B++,Z?.(),Z=void 0},Q=async()=>{if(!e.values||!u||f)return;let i=u;_();let m=B,E=()=>!f&&m===B&&u===i&&te()===i&&i.isConnected;if(i.localName.includes("-")&&!i.matches(":defined")&&Object.values(e.values).some(k=>k.property)){if(await Promise.race([i.ownerDocument.defaultView.customElements.whenDefined(i.localName),new Promise(k=>{Z=k})]),!E())return;Z=void 0}let N=await o.send({action:"values"}).catch(()=>{});if(E()&&N?.values&&typeof N.values=="object"&&!Array.isArray(N.values))try{st(i,N.values,e.values)}catch(k){console.warn("[Native UI Engine] Cannot reflect values",k)}},J={},le,ee=0,ne=new Set,He=()=>{},Pe=new Promise(i=>{He=i}),re=()=>{ne.clear(),He(),Pe=new Promise(i=>{He=i})},oe=()=>{ee++,le=void 0;let i=ze(u);i?.owner===J&&(i.projected=!1,i.owner=void 0)},C={listen:i=>o.listen(m=>{i(m),!m.active&&D&&(D=!1,$e()),m.precovered&&ge(m.precovered)}),send:i=>{if(!e.placementHandoff)return o.send(i);if(i.action==="visibility"&&!i.visible&&re(),i.action==="visibility"&&i.visible&&ne.size){let q=S,K=ee,I=u,je=Pe;return Promise.race([Promise.allSettled([...ne]),je]).then(()=>f||je!==Pe||q!==S||K!==ee||I!==u||!I?.isConnected||te()!==u||j()!=="native"?{}:C.send(i))}let m=ze(u);if(i.action==="cover"){let q=le===i.token&&m?.owner===J&&m.projected,K=++ee;return le=i.token,m&&(m.owner=J,m.projected=!!q),o.send(i).then(I=>(K===ee&&m===ze(u)&&m?.owner===J&&(m.projected=I?.shown===!0),I)).catch(I=>{throw K===ee&&m?.owner===J&&(oe(),m.invalidate()),I})}let E=i.action==="release"&&i.token===le,N=le&&(i.action==="restore"||E||i.action==="reset"||i.action==="visibility"&&i.visible);N&&ee++;let k=ee,ie=()=>{k!==ee||m?.owner!==J||(oe(),m.invalidate())};try{let q=N&&m?.owner===J?{...i,token:"token"in i?i.token:le,placement:m.measure()}:i,K=o.send(q).then(async I=>(i.action==="release"&&I?.requiresPlacement&&(m&&(!m.owner||m.owner===J)?I=await o.send({...i,placement:m.measure()}):(await o.send({action:"visibility",visible:!1}),I=await o.send(i))),k===ee&&(i.action==="resume"||E||i.action==="reset"||i.action==="visibility")&&oe(),I)).catch(I=>{throw ie(),I});return i.action!=="release"||!e.nativeDragHandoff?K:(ne.add(K),K.finally(()=>ne.delete(K)))}catch(q){return ie(),Promise.reject(q)}}},ve=0,A=0,S=0,P,he=!1,V=!1,Ee=!1,ke=document.createElement("style"),$=`data-native-ui-session-${e.id.replace(/[^a-zA-Z0-9-]/g,"")}`;ke.textContent=`[${$}="native"], [${$}="native"] *, [${$}="none"], [${$}="none"] * {visibility:hidden!important}`,document.documentElement.append(ke);let te=()=>{let i=document.querySelectorAll(e.projectionSelector);return i.length===1&&i[0]instanceof HTMLElement?i[0]:void 0},X=()=>{let i=j();u&&u.getAttribute("data-native-ui-destination")!==i&&u.setAttribute("data-native-ui-destination",i),u&&(a==="web"||a==="native"&&W?u.removeAttribute($):u.setAttribute($,a))},Ne=()=>{if(!u?.isConnected)return[];let i=u.getBoundingClientRect(),m={x:i.x,y:i.y,width:i.width,height:i.height},E=d&&Qe(u,d,()=>e.id);return[{element:u,scrollElement:d,control:{id:v,...m,...E?{scroll:E}:{}}}]},z=async()=>{if(f)return;let i=S,m=e.failedFallback==="native"&&j()==="native"&&!!u?.isConnected;await C.send({action:"visibility",visible:m}).catch(()=>{}),!(f||i!==S)&&(m||a==="none"?X():u?.removeAttribute($))},Re=()=>{if(!H||a!=="native"||!u?.isConnected||l?.token||l?.restoring)return;let i=e.failedFallback==="native";C.send({action:"visibility",visible:i}).catch(()=>{}),i?X():u.removeAttribute($)},Y=()=>{if(f||F)return;if(Re(),a==="web"&&l&&!l.token&&!l.restoring){C.send({action:"visibility",visible:!1}).catch(()=>{}),u?.removeAttribute($);return}if(!l?.restoring||P===l||a!=="native")return;P=l;let i=S,m=l;C.send({action:"resume"}).then(()=>{f||i!==S||m!==l||te()!==u||(W=!1,m.updated(void 0,[v],++ve),X(),G())}).catch(()=>{i!==S||f||(m.invalidate(),z())}).finally(()=>{P===m&&(P=void 0),Y()})},Fe=async()=>{if(f||he)return;if(te()!==u){S++,H=!1,D=!1,clearTimeout(g),oe(),u?.removeAttribute($),u?.removeAttribute("data-native-ui-destination"),_();let m=l,E=u;l=void 0,u=void 0,ue.disconnect(),Te();try{E&&await C.send({action:"visibility",visible:!1})}finally{await m?.destroy()}if(f)return;u=te(),W=!1,u&&(ue.observe(u),Q())}if(Te(),!H){if(l?.restoring){Y();return}if(a=j(),!u){await C.send({action:"visibility",visible:!1});return}if(!l){he=!0;let m=S;try{let E=await ft(pt(u,e.id),C,{wake:Y,captureDelayMs:e.captureDelayMs,retainPreparedUntilRelease:e.nativeDragHandoff,blocked:()=>a!=="native"||H||W&&!l?.token,revision:()=>ve,captureRevision:e.captureMode==="view"?()=>A:void 0,transient:!0,opaqueUnderlay:e.captureMode==="view"});if(f||m!==S){await E.destroy();return}l=E}finally{he=!1}}if(!f){if(a==="native"&&W){await C.send({action:"visibility",visible:!1}),X();return}if(a==="native"){let m=S;if(await C.send({action:"visibility",visible:!0}),f||m!==S||a!=="native"||H)return;X(),d=[...De(u)].find(ie=>{let q=getComputedStyle(ie);return/auto|scroll/.test(q.overflowX+q.overflowY)&&(ie.scrollHeight>ie.clientHeight||ie.scrollWidth>ie.clientWidth)});let E=d&&Qe(u,d,()=>e.id),N=e.nativeDragHandoff&&e.captureMode==="view"&&d?{viewport:d.getBoundingClientRect(),offsetX:d.scrollLeft,offsetY:d.scrollTop,rangeX:Math.max(0,d.scrollWidth-d.clientWidth),rangeY:Math.max(0,d.scrollHeight-d.clientHeight)}:void 0,k=await C.send({action:"track",viewportWidth:innerWidth,...E?{scroll:E}:{},...N?{gesture:N}:{}});if(f||m!==S)return;y=k?.tracked===!0,l.consider(e.captureMode==="view"?A:++ve,Ne())}else await C.send({action:"visibility",visible:!1}),X()}}},G=()=>{f||(V=!0,!(!w||Ee)&&(Ee=!0,Promise.resolve().then(async()=>{try{for(;V&&!f;)V=!1,await Fe()}catch{await z()}finally{Ee=!1,V&&G()}})))},Ce=()=>{l?.invalidate(),G()},ue=new ResizeObserver(Ce);window.addEventListener("resize",Ce);let se=new Set,Ae=new WeakSet,ye=i=>{let m=i.composedPath()[0]??i.target;if(!(f||a!=="native"||!u||Ae.has(i)||m!==document&&![...De(u)].includes(m))){if(Ae.add(i),y&&m===d){l?.changed(m);return}H?e.captureMode==="view"?l?.moved():l?.changed():((P||l?.restoring)&&S++,H=!0,x(),W=e.failedFallback!=="native",l?.token?u.removeAttribute($):Re()),$e()}};function $e(){clearTimeout(g),g=setTimeout(()=>{D||(H=!1,!(f||a!=="native")&&(l?.end(),l?.restoring||G()))},100)}function ge(i){if(f||a!=="native"||!u?.isConnected||!l||(D=!0,l.token))return;(P||l.restoring)&&S++,le=i;let m=ze(u);if(m&&(m.owner=J,m.projected=!0),H=!0,x(),!l.token){H=!1,z();return}$e()}let Te=()=>{let i=new Set(u?De(u):[]),m=i.size!==se.size||[...i].some(E=>!se.has(E));for(let E of se)i.has(E)||(E.removeEventListener("scroll",ye),E.removeEventListener("slotchange",Ie),se.delete(E));for(let E of i)se.has(E)||(E.addEventListener("scroll",ye,{passive:!0}),E.addEventListener("slotchange",Ie),se.add(E));m&&(y=!1,d=void 0,l?.invalidate(),G())},Ie=()=>{Te(),G()};document.addEventListener("scroll",ye,!0);let Ue=new MutationObserver(i=>{Te(),te()!==u?G():u&&i.some(m=>m.type==="childList")&&Le(j())});Ue.observe(document.documentElement,{childList:!0,attributes:!0,subtree:!0});let Le=(i,m)=>{if(f||!m&&i===a)return;H=!1,D=!1,clearTimeout(g),a=i,S++;let E=S;a==="none"?C.send({action:"visibility",visible:!1}).then(()=>{a!=="none"||E!==S||f||(l?.invalidate(!0),X())}).catch(()=>{a!=="none"||E!==S||f||(l?.invalidate(!0),X())}):a==="web"?(m==="native"&&L.isPaused()&&l?.end(),x(),l?.token||C.send({action:"visibility",visible:!1}).catch(()=>{}),X()):a==="native"&&(l?.end(),l?.restoring||G())},Be=L.subscribe(()=>queueMicrotask(()=>{w&&Le(j())})),Oe,Me=async()=>{if(!f){f=!0,re(),_(),oe(),S++,Be(),Ue.disconnect(),ue.disconnect(),window.removeEventListener("resize",Ce),document.removeEventListener("scroll",ye,!0);for(let i of se)i.removeEventListener("scroll",ye),i.removeEventListener("slotchange",Ie);se.clear(),clearTimeout(g),u?.removeAttribute($),u?.removeAttribute("data-native-ui-destination"),ke.remove(),await Promise.allSettled([Promise.resolve(Oe?.remove()),l?.destroy()])}};try{let i=S;Oe=await Ge({addListener:(E,N)=>s.addListener(E,N),update:p?.update,projection:p?.projection,accepts:E=>!p?.match||Object.entries(p?.match).every(([N,k])=>typeof E=="object"&&E!==null&&E[N]===k)},(E,N)=>{f||(E&&(E==="native"&&(W=!1),b=E,C.send({action:"destination",destination:E}).catch(()=>{}),Le(j(),E)),N&&(Q(),A++,l?.changed(),a==="native"&&G()))});let m=await C.send({action:"connect"});return S===i&&["native","web","none"].includes(m?.destination)&&(b=m.destination),a=j(),w=!0,G(),{destroy:Me,show:()=>{W=!1,b="native",Le(j(),"native")},hide:()=>{b=a="none",S++,re(),H=!1,D=!1,clearTimeout(g),l?.invalidate(!0),X()}}}catch(i){throw await Me(),i}};var we=new Map,be=new Map,qe=new Map,Wt=Array.from(crypto.getRandomValues(new Uint32Array(4)),e=>e.toString(16)).join("-"),Ke=new Map,Dt=(e,o,s)=>Ke.get(e)?.get(o)?.(s),Nt=0,Ft=(e,o)=>new Promise((s,v)=>{let p=`${e}:${Wt}:${++Nt}`,f=setTimeout(()=>{be.delete(p),v(new Error("Native UI session timed out"))},5e3);be.set(p,{resolve:s,reject:v,timer:f});let w=JSON.stringify({key:p,request:o}),b=globalThis,a=b.webkit?.messageHandlers?.[e]??b.nativeUIEngine;if(!a){clearTimeout(f),be.delete(p),v(new Error("Native UI session unavailable"));return}try{a.postMessage(w)}catch(L){clearTimeout(f),be.delete(p),v(L)}}),$t=(e,o,s,v)=>{if(o===null){qe.get(e)?.(s);return}let p=be.get(o);!p||!o.startsWith(`${e}:`)||(be.delete(o),clearTimeout(p.timer),v?p.reject(new Error(v)):p.resolve(s))},It=e=>{we.get(e)?.show()},Ut=e=>(we.get(e)?.hide(),!0),Bt=async e=>{let o=we.get(e);we.delete(e),Ke.delete(e),qe.delete(e);for(let[s,v]of be)s.startsWith(`${e}:`)&&(be.delete(s),clearTimeout(v.timer),v.reject(new Error("Native UI session closed")));await o?.destroy()},Vt=async e=>{if(we.has(e.id))return;let o,s=!1,v,p={show:()=>{v="native",o?.show()},hide:()=>{v="none",o?.hide()},destroy:async()=>{s=!0,await o?.destroy()}};we.set(e.id,p);try{if(document.readyState==="loading"&&await new Promise(w=>document.addEventListener("DOMContentLoaded",()=>w(),{once:!0})),s)return;let f=new Map;e.runtime==="cordova"&&Ke.set(e.id,f),o=await mt(e,{send:w=>Ft(e.id,w),listen:async w=>(qe.set(e.id,w),{remove:()=>{qe.get(e.id)===w&&qe.delete(e.id)}})},e.runtime==="cordova"?{addListener:async(w,b)=>(f.set(w,b),{remove:()=>{f.delete(w)}})}:void 0),v==="none"?o.hide():v==="native"&&o.show(),s&&await o.destroy()}catch(f){throw we.get(e.id)===p&&(we.delete(e.id),Ke.delete(e.id)),f}};return Mt(zt);})();
|
|
21
|
+
`;var Wt=({control:e},o=!1)=>[e.id,e.kind,e.placement,o?0:e.x,o?0:e.y,e.width,e.height,e.dark,e.rtl],Ot=async(e,o,r)=>{let v=r.captureDelayMs??50;if(!Number.isFinite(v)||v<0||v>2147483647)throw new RangeError("captureDelayMs must be a finite, nonnegative timer interval");let m="native",p=e.element.ownerDocument,E=_e(p),b=!1,l=()=>b||E.isPaused(),h=p.defaultView,R=Array.from(h.crypto.getRandomValues(new Uint32Array(4)),t=>t.toString(16)).join("-"),x=t=>t.isConnected&&t.ownerDocument===p,I=t=>!!t?.isConnected&&t.ownerDocument===p,C=new Map,w=new Set,f=t=>{w.delete(t),t.style.setProperty("display","none","important"),t.removeAttribute("data-native-ui-projection-image"),t.removeAttribute("src"),Z()},y=o.send.bind(o),c="data-native-ui-snapshot",D=`${e.namespace}:sources-change`,H=new Set,u=new WeakMap,z=0,Y=new WeakMap,te=0,Te=t=>(Y.has(t)||Y.set(t,++te),Y.get(t)),q=t=>JSON.stringify(t.map(n=>{u.has(n.scope)||u.set(n.scope,++z);let i=r.transient&&!r.opaqueUnderlay?n.scope.element.getBoundingClientRect():void 0,a=i?{...n,control:{...n.control,x:n.control.x-i.x,y:n.control.y-i.y}}:n;return[u.get(n.scope),Wt(a,!!r.opaqueUnderlay),(n.sources??[n.element]).map(Te)]})),_=new Map,ne=t=>{let n=t.getRootNode();return n.nodeType===11&&"host"in n?n:p},he=t=>{if(_.has(t))return;let n=p.createElement("style");n.setAttribute("data-native-ui-snapshot-base",""),n.textContent=ut+(t.nodeType===11?ft:""),(t.nodeType===11?t:t.head).append(n),_.set(t,n)},He=t=>{let n=[...t.getAnimations({subtree:!0}),...[...ce.get(t)??[]].flatMap(i=>i.shadowRoot?.getAnimations()??[])];for(let i of n)"transitionProperty"in i&&i.transitionProperty==="visibility"&&i.cancel()},ce=new Map,Re=t=>{let n=ce.get(t)??new Set;ce.set(t,n);let i=t.hasAttribute("data-native-ui-snapshot-source")||t.hasAttribute("data-native-ui-snapshot-prepared"),a=P=>{if(!P.hasAttribute("data-native-ui-projection-node")){if(P.shadowRoot){n.add(P),he(P.shadowRoot);for(let j of P.shadowRoot.children)a(j)}for(let j of P.children)a(j)}};a(t);for(let P of n)P.toggleAttribute("data-native-ui-snapshot-content",i);He(t)},de=()=>`${h.innerWidth}:${h.innerHeight}:${h.devicePixelRatio}`,A=!1,G=0,ge=0,T,oe,g,ie=()=>g?.phase==="restoring",ke=()=>!!g&&(!!r.opaqueUnderlay||g.phase==="image"||g.phase==="restoring"&&g.visible),ye=!1,X=0,J=0,U=0,we=0,Me=-1,B=!1,Le=!1,K,Z=()=>{let t=new Set(K?.candidates.map(i=>i.scope.element));for(let[i,a]of C){let P=!B&&i.isConnected&&t.has(i);if(P&&(g||A))continue;let j=P?2*Math.max(1,T?.scopes.filter(k=>k.element===i).length??0):0,S=Math.max(0,j-a.filter(k=>w.has(k)).length),F=a.filter(k=>w.has(k)||S-- >0?!0:(k.remove(),!1));F.length?C.set(i,F):C.delete(i)}let n=new Set([...K?.candidates.map(i=>i.scope.element.getRootNode())??[],...g?.image.scopes.map(i=>i.element.getRootNode())??[],...T?.scopes.map(i=>i.element.getRootNode())??[],...[...w].map(i=>i.getRootNode()),...[...ce.values()].flatMap(i=>[...i].map(a=>a.shadowRoot))]);for(let[i,a]of _)i.nodeType===11&&!n.has(i)&&(a.remove(),_.delete(i))},be=new Set,Ce=(t,n,i)=>{let a=()=>{be.delete(a)&&(y({action:t,token:n}).catch(()=>{}),t==="restored"&&Z())};be.add(a),i&&!B?h.requestAnimationFrame(()=>h.requestAnimationFrame(a)):a()},Q=new Set,Ie=()=>{Q.forEach(t=>H.delete(t)),Q.clear()},ue=(t,n=!1)=>{!t||t===T||t===g?.image||(t.images.forEach(i=>{f(i)}),Ce("release",t.data.token,n))},Ae=t=>t.filter(n=>{if(!I(n.scope.element)||![n.element,...n.sources??[]].every(x))return!1;if(n.control.scroll){let i=n.element.getBoundingClientRect(),a=n.control.scroll.clip;if(i.right<=a.x||i.bottom<=a.y||i.left>=a.x+a.width||i.top>=a.y+a.height)return!1}return r.eligible?.(n)??!0}),Ze=async()=>{if(U=0,B||m!=="native"||Le||ye||g||r.blocked()||!K||T?.revision===K.revision&&Me===we)return;let{revision:t,candidates:n}=K,i=J,a=we,P=de(),j=Ae(n);if(!j.length)return;Le=!0;let S,F=!1,k=[];try{let se=!1,ae=y({action:"prepare",revision:r.captureRevision?.()??t,viewportWidth:h.innerWidth,ids:j.map(L=>L.control.id)});ae.then(L=>{se&&L.token&&y({action:"release",token:L.token}).catch(()=>{})}).catch(()=>{});try{S=await ve(ae)}finally{se=!0}if(!S.token||!S.parts?.length)return;let Ne=new Set(j.map(L=>L.control.id));if(S.parts.some(L=>!L.url.startsWith("file:")&&!/^\/__native_ui_engine__\/nativeUI[a-fA-F0-9]+\/[a-fA-F0-9-]+-[0-9]+\.png$/.test(L.url)||!L.ids.length||L.ids.some(le=>!Ne.has(le))||![L.x,L.y,L.width,L.height].every(Number.isFinite)||L.width<=0||L.height<=0)||new Set(S.parts.flatMap(L=>L.ids)).size!==Ne.size||S.parts.some(L=>new Set(L.ids.map(le=>j.find(Ye=>Ye.control.id===le).scope)).size!==1))return;let pe=S.parts.map(L=>j.find(le=>L.ids.includes(le.control.id)));if(await ve(Promise.all(S.parts.map(async(L,le)=>{let Ye=pe[le].scope.element,$e=C.get(Ye);$e||($e=[],C.set(Ye,$e));let me=$e.find(bt=>!w.has(bt));return me||(me=p.createElement("img"),me.setAttribute("data-native-ui-projection-node",""),$e.push(me)),w.add(me),k.push(me),me.src=dt(L.url),await me.decode(),me}))),B||m!=="native"||ye||g||r.blocked()||J!==i||de()!==P||K?.revision!==t||j.some(L=>!I(L.scope.element)||![L.element,...L.sources??[]].every(x)))return;let wt=T,st={data:S,images:k,sources:Array.from(new Set(j.flatMap(L=>L.sources??[L.element]))),targets:pe.map(L=>L.element),scopes:pe.map(L=>L.scope),parents:pe.map(L=>L.scope.element.parentNode),frames:[],viewport:P,revision:t,layout:q(j)};try{if(!qe(st))throw new Error("Projection destination is unavailable")}catch(L){s();try{qe(),T?.sources.forEach(le=>{H.add(le),Q.add(le)})}catch{d()}throw L}T=st,Ie(),T.sources.forEach(L=>{H.add(L),Q.add(L)}),r.opaqueUnderlay&&y({action:"prepared",token:S.token}).catch(()=>{}),h.dispatchEvent(new Event(D)),Me=a,F=!0,ue(wt),l()&&Xe()}catch{}finally{F||k.forEach(se=>{f(se)}),S?.token&&!F&&y({action:"release",token:S.token}).catch(()=>{}),Le=!1,K&&(K.revision!==t||we!==a)&&re()}},re=()=>{h.clearTimeout(U),!B&&m==="native"&&!g&&!ye&&!r.blocked()&&(U=h.setTimeout(()=>{Ze()},v))},We,Ve=(t,n)=>{if(n.some(a=>a.scope.element.ownerDocument!==p||[a.element,...a.sources??[]].some(P=>P.ownerDocument!==p)))throw new TypeError("All projection sources and fallback scopes must share one Document");if(r.blocked())return;!g&&T&&T.layout!==q(Ae(n))&&Se();let i=q(n);We!==i&&(We=i,we++,J++),K?.revision!==t&&J++,K={revision:t,candidates:n},Z(),(T?.revision!==t||Me!==we)&&re()},je=t=>{!g&&T&&t&&K?.candidates.some(n=>n.scrollElement===t&&(n.sources??[n.element]).some(i=>T.sources.includes(i)))&&Se(),g&&fe(),we++,J++,re()},ze=await Je(o.listen(({active:t})=>{ye=t,J++,h.clearTimeout(U),t||re()})),Oe=new Set,De=t=>{ce.get(t)?.forEach(n=>n.removeAttribute("data-native-ui-snapshot-content")),Oe.delete(t)&&t.removeAttribute("data-native-ui-snapshot-prepared"),t.removeAttribute("data-native-ui-snapshot-visible"),t.removeAttribute(c),t.removeAttribute("data-native-ui-snapshot-positioned"),t.removeAttribute("data-native-ui-snapshot-source"),He(t),ce.delete(t)},s=()=>{ge++,h.cancelAnimationFrame(G);for(let t of O.keys())t.style.setProperty("opacity","0","important");O.clear(),G=0,A=!1,Ie(),g=void 0,W.forEach(De),W.clear(),_.forEach((t,n)=>{(B||n.nodeType===11&&!n.host.isConnected)&&(t.remove(),_.delete(n))})},d=(t=g?.image,n=ie())=>{if(g?.image!==t)return;let i=new Set([g?.image,T]);s(),T=void 0,h.clearTimeout(X),i.forEach(a=>ue(a,n)),r.wake()},M=()=>{if(!g)return;if(T!==g?.image){d();return}let t=g.image;ge++,h.cancelAnimationFrame(G),G=0,A=!1,W.forEach(n=>n.removeAttribute("data-native-ui-snapshot-source")),ee(t,!!r.opaqueUnderlay),g=void 0,h.clearTimeout(X),Ce("restored",t.data.token,!0),t.sources.forEach(n=>{H.add(n),Q.add(n)}),r.wake()},N=()=>{ie()&&M(),be.forEach(t=>t())},$=t=>t.scopes.map(n=>I(n.element)?n.element:void 0),W=new Set,ee=(t,n)=>{for(let i of W)i.toggleAttribute("data-native-ui-snapshot-visible",n),Re(i);t.images.forEach(i=>i.style.setProperty("opacity",n?"1":"0","important"))},V=new Map,O=new Map,fe=()=>{let t=[];for(let[n,i]of O){let{target:a,frame:P}=i;if(!a.isConnected){n.remove();continue}let j=a.shadowRoot??a;n.parentNode!==j&&j.insertBefore(n,null);let S=a.getBoundingClientRect(),F=n.getBoundingClientRect(),k=parseFloat(n.style.width)||P.width,se=parseFloat(n.style.height)||P.height,ae=F.width/k||1,Ne=F.height/se||1,pe=i.scale??(i.scale={x:ae,y:Ne});t.push({element:n,left:(parseFloat(n.style.left)||0)+(S.x+P.x*ae/pe.x-F.x)/ae,top:(parseFloat(n.style.top)||0)+(S.y+P.y*Ne/pe.y-F.y)/Ne,width:P.width/pe.x,height:P.height/pe.y})}for(let{element:n,...i}of t)for(let[a,P]of Object.entries(i)){let j=`${P}px`;n.style.getPropertyValue(a)!==j&&n.style.setProperty(a,j,"important")}},qe=(t=g?.image??T)=>{if(!t||ie())return!1;if(!t.sources.every(x)||$(t).some(i=>!i))return Se(),!1;let n=$(t);if(g){if(n.some(a=>!a?.isConnected||!_.has(ne(a))))return d(g.image,!1),!1;let i=new Set;for(let[a,P]of t.targets.entries()){let j=V.get(P),S=n[a];!j||!S?.isConnected||(S.setAttribute(c,j),S.setAttribute("data-native-ui-snapshot-source",""),i.add(S))}for(let a of W)i.has(a)||De(a);return W.clear(),i.forEach(a=>W.add(a)),ee(t,ke()),!0}C.forEach(i=>i.forEach(a=>{t.images.includes(a)||(a.style.setProperty("display","none","important"),a.removeAttribute("data-native-ui-projection-image"))})),V.clear(),O.clear(),W.forEach(De),W.clear();for(let i of new Set(n)){if(!i)continue;W.add(i),he(ne(i));let a=n.flatMap((F,k)=>F===i?[k]:[]),P=`${R}-${a[0]}`;i.setAttribute(c,P),i!==t.targets[a[0]]&&(i.setAttribute("data-native-ui-snapshot-prepared",""),Oe.add(i)),i.toggleAttribute("data-native-ui-snapshot-visible",!!r.opaqueUnderlay),Re(i);let j=i.getBoundingClientRect();i.toggleAttribute("data-native-ui-snapshot-positioned",h.getComputedStyle(i).position==="static");let S=i.shadowRoot??i;for(let F of[...a].reverse()){let k=t.images[F],se=t.data.parts[F],ae=t.frames[F]??{x:r.opaqueUnderlay?0:se.x-j.x,y:r.opaqueUnderlay?0:se.y-j.y,width:se.width,height:se.height};t.frames[F]=ae,V.set(t.targets[F],P),k.inert=!0,k.setAttribute("aria-hidden","true"),k.setAttribute("data-native-ui-projection-image",P),k.style.cssText="all:initial!important;position:absolute!important;display:block!important;visibility:visible!important;pointer-events:none!important;image-rendering:pixelated!important;will-change:opacity!important;opacity:0!important;",k.style.setProperty("width",`${ae.width}px`,"important"),k.style.setProperty("height",`${ae.height}px`,"important"),k.style.setProperty("left","0px","important"),k.style.setProperty("top","0px","important"),k.style.setProperty("opacity",r.opaqueUnderlay?"1":"0","important"),k.parentNode!==S&&S.insertBefore(k,null),O.set(k,{target:i,frame:ae})}}return t.parents=t.scopes.map(i=>i.element.parentNode),fe(),!0},tt=t=>t.images.map((n,i)=>{let a=n.getBoundingClientRect();return{...t.data.parts[i],x:a.x,y:a.y,width:a.width,height:a.height}}),Xe=(t=!1)=>{if(N(),B||m==="none"||g&&!t)return;let n=g?.image??T;if(!n||n.viewport!==de()||!n.sources.every(x)||r.current&&!r.current(n.sources)||n.targets.some(P=>!V.has(P))||$(n).some(P=>!P?.isConnected)||[...W].some(P=>!P.isConnected))return;n.scopes.some((P,j)=>P.element.parentNode!==n.parents[j])&&qe(),fe();let i=++ge,a=()=>ge===i;A=!0,g={phase:"covering",image:n},J++,h.clearTimeout(U),W.forEach(P=>P.setAttribute("data-native-ui-snapshot-source","")),ee(n,ke()),G=h.requestAnimationFrame(()=>{G=0,a()&&(A=!1,r.wake())}),ve(y({action:"cover",token:n.data.token,...r.transient?{transient:!0,viewportWidth:h.innerWidth,parts:tt(n)}:{}})).then(P=>{if(a()){if(A=!1,P?.shown!==!0){d(n,!1);return}ie()||(g={phase:"image",image:n},qe(),fe()),h.cancelAnimationFrame(G),G=h.requestAnimationFrame(()=>{G=h.requestAnimationFrame(()=>{G=0,a()&&y({action:"painted",token:n.data.token}).then(j=>{a()&&j?.shown===!1&&d(n,!1)}).catch(()=>{a()&&d(n,!1)})})}),r.wake()}}).catch(()=>{a()&&d(n,!1)})},nt=()=>{if(!(!g||B||ie())){if(!g.image.sources.every(x)||$(g.image).some(t=>!t)||r.current&&!r.current(g.image.sources)){d(g.image,!1);return}if(!r.blocked()){if(fe(),r.transient){let t=g.image;if($(t).some(a=>!a?.isConnected)){d(t,!1);return}let i=tt(t);r.opaqueUnderlay||i.every((a,P)=>{let j=t.data.parts[P],S=h.devicePixelRatio||1;return Math.round(a.width*S)===Math.round(j.width*S)&&Math.round(a.height*S)===Math.round(j.height*S)})?t.data={...t.data,parts:i}:T=void 0,y({action:"restore",token:t.data.token,viewportWidth:h.innerWidth,parts:i}).catch(()=>{})}g={phase:"restoring",image:g.image,visible:g.phase==="image",revision:r.revision?.()??K?.revision??0},X=h.setTimeout(()=>{g?.phase==="restoring"&&d(g.image,!1)},250),r.wake()}}},ht=(t,n,i)=>{g?.phase!=="restoring"||i===void 0||i<=g.revision||!r.transient&&t||g.image.data.parts.every(a=>a.ids.every(P=>n?.includes(P)))&&(M(),re())},Se=(t=!1)=>{be.forEach(i=>i()),J++,h.clearTimeout(U);let n=T;if(T=void 0,(t||B)&&(oe=void 0),r.retainPreparedUntilRelease&&!g&&!t&&!B){if(n){let i={};oe=i,ve(y({action:"release",token:n.data.token})).catch(()=>{}).finally(()=>{if(n.images.forEach(a=>{f(a)}),oe===i&&(oe=void 0,!(T||g))){for(let a of W)a.getAttribute(c)!==V.get(a)&&(W.delete(a),Oe.delete(a));s(),V.clear(),h.dispatchEvent(new Event(D))}})}if(oe)return}ue(n),g?d(g.image,!1):(s(),V.clear(),h.dispatchEvent(new Event(D)))},ot=()=>{let t=!b;b=!0,Xe(t&&E.isPaused())},it=()=>{b=!1,l()||nt()},gt=()=>queueMicrotask(()=>{B||(l()?Xe():nt(),r.wake())}),rt;try{r.events&&(rt=await Ge(r.events,(t,n)=>{if(!B){if(t&&(m=t),m==="none"){b=!1,Se();return}t==="web"&&ot(),t==="native"&&(it(),E.isPaused()&&Xe(!0),re()),n&&je()}}))}catch(t){throw B=!0,Se(),await ve(Promise.resolve(ze.remove())).catch(()=>{}),t}let yt=E.subscribe(gt);return{get owners(){return g&&g.phase!=="restoring"?[...g.image.sources]:[]},get visibleOwners(){return g&&(g.phase==="image"||g.phase==="restoring"&&g.visible)?[...g.image.sources]:[]},get preparedOwners(){return[...H]},consider:Ve,changed:je,moved:fe,get token(){return ie()?void 0:g?.image.data.token},begin:ot,get restoring(){return ie()},get handoffPending(){return A},retireRestoration:N,end:it,updated:ht,invalidate:Se,async destroy(){B=!0,yt(),Se(),C.forEach(t=>t.forEach(n=>n.remove())),C.clear(),await Promise.allSettled([ve(Promise.resolve().then(()=>ze?.remove())),ve(Promise.resolve().then(()=>rt?.remove()))])}}},pt=async(e,o,r)=>{let v=await Ot(e,o,r),m=v.consider;return Object.assign(v,{consider:(p,E)=>m(p,E.map(b=>({...b,scope:e})))})};var mt=(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 be a container element; use the existing fallback container");return Object.freeze({element:e,namespace:o})};var vt=async(e,o,r={addListener:async(v,m)=>globalThis.Capacitor.addListener(e.plugin,v,m)})=>{let v="view",m=e.receiveListeners,p=!1,E=!1,b="native",l="native",h=_e(document),R=()=>b==="native"&&h.isPaused(u)?"web":b,x=!1,I=!1,C=!1,w=!1,f,y,c,D=!1,H=()=>{let s=D;D=!0;try{c?.begin()}finally{D=s}},u,z=0,Y,te=()=>{z++,Y?.(),Y=void 0},Te=async()=>{if(!e.values||!u||p)return;let s=u;te();let d=z,M=()=>!p&&d===z&&u===s&&J()===s&&s.isConnected;if(s.localName.includes("-")&&!s.matches(":defined")&&Object.values(e.values).some($=>$.property)){if(await Promise.race([s.ownerDocument.defaultView.customElements.whenDefined(s.localName),new Promise($=>{Y=$})]),!M())return;Y=void 0}let N=await o.send({action:"values"}).catch(()=>{});if(M()&&N?.values&&typeof N.values=="object"&&!Array.isArray(N.values))try{at(s,N.values,e.values)}catch($){console.warn("[Native UI Engine] Cannot reflect values",$)}},q={},_,ne=0,he=new Set,He=()=>{},ce=new Promise(s=>{He=s}),Re=()=>{he.clear(),He(),ce=new Promise(s=>{He=s})},de=()=>{ne++,_=void 0;let s=Ue(u);s?.owner===q&&(s.projected=!1,s.owner=void 0)},A={listen:s=>o.listen(d=>{s(d),!d.active&&I&&(I=!1,Ae()),d.precovered&&Ze(d.precovered)}),send:s=>{if(!e.placementHandoff)return o.send(s);if(s.action==="visibility"&&!s.visible&&Re(),s.action==="visibility"&&s.visible&&he.size){let ee=T,V=ne,O=u,fe=ce;return Promise.race([Promise.allSettled([...he]),fe]).then(()=>p||fe!==ce||ee!==T||V!==ne||O!==u||!O?.isConnected||J()!==u||R()!=="native"?{}:A.send(s))}let d=Ue(u);if(s.action==="cover"){let ee=_===s.token&&d?.owner===q&&d.projected,V=++ne;return _=s.token,d&&(d.owner=q,d.projected=!!ee),o.send(s).then(O=>(V===ne&&d===Ue(u)&&d?.owner===q&&(d.projected=O?.shown===!0),O)).catch(O=>{throw V===ne&&d?.owner===q&&(de(),d.invalidate()),O})}let M=s.action==="release"&&s.token===_,N=_&&(s.action==="restore"||M||s.action==="reset"||s.action==="visibility"&&s.visible);N&&ne++;let $=ne,W=()=>{$!==ne||d?.owner!==q||(de(),d.invalidate())};try{let ee=N&&d?.owner===q?{...s,token:"token"in s?s.token:_,placement:d.measure()}:s,V=o.send(ee).then(async O=>(s.action==="release"&&O?.requiresPlacement&&(d&&(!d.owner||d.owner===q)?O=await o.send({...s,placement:d.measure()}):(await o.send({action:"visibility",visible:!1}),O=await o.send(s))),$===ne&&(s.action==="resume"||M||s.action==="reset"||s.action==="visibility")&&de(),O)).catch(O=>{throw W(),O});return s.action!=="release"||!e.nativeDragHandoff?V:(he.add(V),V.finally(()=>he.delete(V)))}catch(ee){return W(),Promise.reject(ee)}}},G=0,ge=0,T=0,oe,g=!1,ie=!1,ke=!1,ye=document.createElement("style"),X=`data-native-ui-session-${e.id.replace(/[^a-zA-Z0-9-]/g,"")}`;ye.textContent=`[${X}="native"], [${X}="native"] *, [${X}="none"], [${X}="none"] * {visibility:hidden!important}`,document.documentElement.append(ye);let J=()=>{let s=document.querySelectorAll(e.projectionSelector);return s.length===1&&s[0]instanceof HTMLElement?s[0]:void 0},U=()=>{let s=R();u&&u.getAttribute("data-native-ui-destination")!==s&&u.setAttribute("data-native-ui-destination",s),u&&(l==="web"||l==="native"&&C?u.removeAttribute(X):u.setAttribute(X,l))},we=()=>{if(!u?.isConnected)return[];let s=u.getBoundingClientRect(),d={x:s.x,y:s.y,width:s.width,height:s.height},M=f&&et(u,f,()=>e.id);return[{element:u,scrollElement:f,control:{id:v,...d,...M?{scroll:M}:{}}}]},Me=async()=>{if(p)return;let s=T,d=e.failedFallback==="native"&&R()==="native"&&!!u?.isConnected;await A.send({action:"visibility",visible:d}).catch(()=>{}),!(p||s!==T)&&(d||l==="none"?U():u?.removeAttribute(X))},B=()=>{if(!x||l!=="native"||!u?.isConnected||c?.token||c?.restoring)return;let s=e.failedFallback==="native";A.send({action:"visibility",visible:s}).catch(()=>{}),s?U():u.removeAttribute(X)},Le=()=>{if(p||D)return;if(B(),l==="web"&&c&&!c.token&&!c.restoring){A.send({action:"visibility",visible:!1}).catch(()=>{}),u?.removeAttribute(X);return}if(!c?.restoring||oe===c||l!=="native")return;oe=c;let s=T,d=c;A.send({action:"resume"}).then(()=>{p||s!==T||d!==c||J()!==u||(C=!1,d.updated(void 0,[v],++G),U(),Z())}).catch(()=>{s!==T||p||(d.invalidate(),Me())}).finally(()=>{oe===d&&(oe=void 0),Le()})},K=async()=>{if(p||g)return;if(J()!==u){T++,x=!1,I=!1,clearTimeout(y),de(),u?.removeAttribute(X),u?.removeAttribute("data-native-ui-destination"),te();let d=c,M=u;c=void 0,u=void 0,Ce.disconnect(),re();try{M&&await A.send({action:"visibility",visible:!1})}finally{await d?.destroy()}if(p)return;u=J(),C=!1,u&&(Ce.observe(u),Te())}if(re(),!x){if(c?.restoring){Le();return}if(l=R(),!u){await A.send({action:"visibility",visible:!1});return}if(!c){g=!0;let d=T;try{let M=await pt(mt(u,e.id),A,{wake:Le,captureDelayMs:e.captureDelayMs,retainPreparedUntilRelease:e.nativeDragHandoff,blocked:()=>l!=="native"||x||C&&!c?.token,revision:()=>G,captureRevision:e.captureMode==="view"?()=>ge:void 0,transient:!0,opaqueUnderlay:e.captureMode==="view"});if(p||d!==T){await M.destroy();return}c=M}finally{g=!1}}if(!p){if(l==="native"&&C){await A.send({action:"visibility",visible:!1}),U();return}if(l==="native"){let d=T;if(await A.send({action:"visibility",visible:!0}),p||d!==T||l!=="native"||x)return;U(),f=[...Fe(u)].find(W=>{let ee=getComputedStyle(W);return/auto|scroll/.test(ee.overflowX+ee.overflowY)&&(W.scrollHeight>W.clientHeight||W.scrollWidth>W.clientWidth)});let M=f&&et(u,f,()=>e.id),N=e.nativeDragHandoff&&e.captureMode==="view"&&f?{viewport:f.getBoundingClientRect(),offsetX:f.scrollLeft,offsetY:f.scrollTop,rangeX:Math.max(0,f.scrollWidth-f.clientWidth),rangeY:Math.max(0,f.scrollHeight-f.clientHeight)}:void 0,$=await A.send({action:"track",viewportWidth:innerWidth,...M?{scroll:M}:{},...N?{gesture:N}:{}});if(p||d!==T)return;w=$?.tracked===!0,c.consider(e.captureMode==="view"?ge:++G,we())}else await A.send({action:"visibility",visible:!1}),U()}}},Z=()=>{p||(ie=!0,!(!E||ke)&&(ke=!0,Promise.resolve().then(async()=>{try{for(;ie&&!p;)ie=!1,await K()}catch{await Me()}finally{ke=!1,ie&&Z()}})))},be=()=>{c?.invalidate(),Z()},Ce=new ResizeObserver(be);window.addEventListener("resize",be);let Q=new Set,Ie=new WeakSet,ue=s=>{let d=s.composedPath()[0]??s.target;if(!(p||l!=="native"||!u||Ie.has(s)||d!==document&&![...Fe(u)].includes(d))){if(Ie.add(s),w&&d===f){c?.changed(d);return}x?e.captureMode==="view"?c?.moved():c?.changed():((oe||c?.restoring)&&T++,x=!0,H(),C=e.failedFallback!=="native",c?.token?u.removeAttribute(X):B()),Ae()}};function Ae(){clearTimeout(y),y=setTimeout(()=>{I||(x=!1,!(p||l!=="native")&&(c?.end(),c?.restoring||Z()))},100)}function Ze(s){if(p||l!=="native"||!u?.isConnected||!c||(I=!0,c.token))return;(oe||c.restoring)&&T++,_=s;let d=Ue(u);if(d&&(d.owner=q,d.projected=!0),x=!0,H(),!c.token){x=!1,Me();return}Ae()}let re=()=>{let s=new Set(u?Fe(u):[]),d=s.size!==Q.size||[...s].some(M=>!Q.has(M));for(let M of Q)s.has(M)||(M.removeEventListener("scroll",ue),M.removeEventListener("slotchange",We),Q.delete(M));for(let M of s)Q.has(M)||(M.addEventListener("scroll",ue,{passive:!0}),M.addEventListener("slotchange",We),Q.add(M));d&&(w=!1,f=void 0,c?.invalidate(),Z())},We=()=>{re(),Z()};document.addEventListener("scroll",ue,!0);let Ve=new MutationObserver(s=>{re(),J()!==u?Z():u&&s.some(d=>d.type==="childList")&&je(R())});Ve.observe(document.documentElement,{childList:!0,attributes:!0,subtree:!0});let je=(s,d)=>{if(p||!d&&s===l)return;x=!1,I=!1,clearTimeout(y),l=s,T++;let M=T;l==="none"?A.send({action:"visibility",visible:!1}).then(()=>{l!=="none"||M!==T||p||(c?.invalidate(!0),U())}).catch(()=>{l!=="none"||M!==T||p||(c?.invalidate(!0),U())}):l==="web"?(d==="native"&&h.isPaused()&&c?.end(),H(),c?.token||A.send({action:"visibility",visible:!1}).catch(()=>{}),U()):l==="native"&&(c?.end(),c?.restoring||Z())},ze=h.subscribe(()=>queueMicrotask(()=>{E&&je(R())})),Oe,De=async()=>{if(!p){p=!0,Re(),te(),de(),T++,ze(),Ve.disconnect(),Ce.disconnect(),window.removeEventListener("resize",be),document.removeEventListener("scroll",ue,!0);for(let s of Q)s.removeEventListener("scroll",ue),s.removeEventListener("slotchange",We);Q.clear(),clearTimeout(y),u?.removeAttribute(X),u?.removeAttribute("data-native-ui-destination"),ye.remove(),await Promise.allSettled([Promise.resolve(Oe?.remove()),c?.destroy()])}};try{let s=T;Oe=await Ge({addListener:(M,N)=>r.addListener(M,N),update:m?.update,projection:m?.projection,accepts:M=>!m?.match||Object.entries(m?.match).every(([N,$])=>typeof M=="object"&&M!==null&&M[N]===$)},(M,N)=>{p||(M&&(M==="native"&&(C=!1),b=M,A.send({action:"destination",destination:M}).catch(()=>{}),je(R(),M)),N&&(Te(),ge++,c?.changed(),l==="native"&&Z()))});let d=await A.send({action:"connect"});return T===s&&["native","web","none"].includes(d?.destination)&&(b=d.destination),l=R(),E=!0,Z(),{destroy:De,show:()=>{C=!1,b="native",je(R(),"native")},hide:()=>{b=l="none",T++,Re(),x=!1,I=!1,clearTimeout(y),c?.invalidate(!0),U()}}}catch(s){throw await De(),s}};var Pe=new Map,Ee=new Map,Be=new Map,Dt=Array.from(crypto.getRandomValues(new Uint32Array(4)),e=>e.toString(16)).join("-"),Ke=new Map,Nt=(e,o,r)=>Ke.get(e)?.get(o)?.(r),Ft=0,It=(e,o)=>new Promise((r,v)=>{let m=`${e}:${Dt}:${++Ft}`,p=setTimeout(()=>{Ee.delete(m),v(new Error("Native UI session timed out"))},5e3);Ee.set(m,{resolve:r,reject:v,timer:p});let E=JSON.stringify({key:m,request:o}),b=globalThis,l=b.webkit?.messageHandlers?.[e]??b.nativeUIEngine;if(!l){clearTimeout(p),Ee.delete(m),v(new Error("Native UI session unavailable"));return}try{l.postMessage(E)}catch(h){clearTimeout(p),Ee.delete(m),v(h)}}),$t=(e,o,r,v)=>{if(o===null){Be.get(e)?.(r);return}let m=Ee.get(o);!m||!o.startsWith(`${e}:`)||(Ee.delete(o),clearTimeout(m.timer),v?m.reject(new Error(v)):m.resolve(r))},Ut=e=>{Pe.get(e)?.show()},Bt=e=>(Pe.get(e)?.hide(),!0),Vt=async e=>{let o=Pe.get(e);Pe.delete(e),Ke.delete(e),Be.delete(e);for(let[r,v]of Ee)r.startsWith(`${e}:`)&&(Ee.delete(r),clearTimeout(v.timer),v.reject(new Error("Native UI session closed")));await o?.destroy()},zt=async e=>{if(Pe.has(e.id))return;let o,r=!1,v,m={show:()=>{v="native",o?.show()},hide:()=>{v="none",o?.hide()},destroy:async()=>{r=!0,await o?.destroy()}};Pe.set(e.id,m);try{if(document.readyState==="loading"&&await new Promise(E=>document.addEventListener("DOMContentLoaded",()=>E(),{once:!0})),r)return;let p=new Map;e.runtime==="cordova"&&Ke.set(e.id,p),o=await vt(e,{send:E=>It(e.id,E),listen:async E=>(Be.set(e.id,E),{remove:()=>{Be.get(e.id)===E&&Be.delete(e.id)}})},e.runtime==="cordova"?{addListener:async(E,b)=>(p.set(E,b),{remove:()=>{p.delete(E)}})}:void 0),v==="none"?o.hide():v==="native"&&o.show(),r&&await o.destroy()}catch(p){throw Pe.get(e.id)===m&&(Pe.delete(e.id),Ke.delete(e.id)),p}};return jt(qt);})();
|
package/package.json
CHANGED