@webview-native-ui/engine 1.0.1 → 1.0.2-0
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/README.md +14 -0
- package/WebViewNativeUIControls.podspec +17 -0
- package/dist/controls/activation.d.ts +15 -0
- package/dist/controls/activation.js +370 -0
- package/dist/controls/components/index.d.ts +16 -0
- package/dist/controls/components/index.js +38 -0
- package/dist/controls/components/ion-back-button.d.ts +4 -0
- package/dist/controls/components/ion-back-button.js +16 -0
- package/dist/controls/components/ion-button.d.ts +4 -0
- package/dist/controls/components/ion-button.js +26 -0
- package/dist/controls/components/ion-buttons.d.ts +5 -0
- package/dist/controls/components/ion-buttons.js +34 -0
- package/dist/controls/components/ion-fab.d.ts +4 -0
- package/dist/controls/components/ion-fab.js +164 -0
- package/dist/controls/components/ion-menu-button.d.ts +7 -0
- package/dist/controls/components/ion-menu-button.js +41 -0
- package/dist/controls/components/ion-segment.d.ts +5 -0
- package/dist/controls/components/ion-segment.js +24 -0
- package/dist/controls/components/ion-tab-bar.d.ts +5 -0
- package/dist/controls/components/ion-tab-bar.js +49 -0
- package/dist/controls/components/searchable-tabs.d.ts +20 -0
- package/dist/controls/components/searchable-tabs.js +525 -0
- package/dist/controls/definitions.d.ts +360 -0
- package/dist/controls/definitions.js +1 -0
- package/dist/controls/extensions.d.ts +44 -0
- package/dist/controls/extensions.js +164 -0
- package/dist/controls/foldable/fold-state.d.ts +4 -0
- package/dist/controls/foldable/fold-state.js +8 -0
- package/dist/controls/foldable/types.d.ts +9 -0
- package/dist/controls/foldable/types.js +1 -0
- package/dist/controls/html.d.ts +8 -0
- package/dist/controls/html.js +260 -0
- package/dist/controls/index.d.ts +7 -0
- package/dist/controls/index.js +4 -0
- package/dist/controls/ionic.d.ts +1 -0
- package/dist/controls/ionic.js +1 -0
- package/dist/controls/legacy-layout.d.ts +7 -0
- package/dist/controls/legacy-layout.js +23 -0
- package/dist/controls/overlays/content.d.ts +2 -0
- package/dist/controls/overlays/content.js +55 -0
- package/dist/controls/overlays/controller.d.ts +7 -0
- package/dist/controls/overlays/controller.js +369 -0
- package/dist/controls/overlays/covered-overlay.d.ts +4 -0
- package/dist/controls/overlays/covered-overlay.js +9 -0
- package/dist/controls/overlays/dialog-animation.d.ts +7 -0
- package/dist/controls/overlays/dialog-animation.js +49 -0
- package/dist/controls/overlays/dismiss-animation.d.ts +2 -0
- package/dist/controls/overlays/dismiss-animation.js +14 -0
- package/dist/controls/overlays/focus.d.ts +2 -0
- package/dist/controls/overlays/focus.js +67 -0
- package/dist/controls/overlays/popover.d.ts +10 -0
- package/dist/controls/overlays/popover.js +117 -0
- package/dist/controls/overlays/styles.d.ts +9 -0
- package/dist/controls/overlays/styles.js +194 -0
- package/dist/controls/prehide.d.ts +6 -0
- package/dist/controls/prehide.js +280 -0
- package/dist/controls/runtime.d.ts +5 -0
- package/dist/controls/runtime.js +1685 -0
- package/dist/controls/shared/bridge.d.ts +4 -0
- package/dist/controls/shared/bridge.js +15 -0
- package/dist/controls/shared/candidate.d.ts +23 -0
- package/dist/controls/shared/candidate.js +128 -0
- package/dist/controls/shared/clipping.d.ts +1 -0
- package/dist/controls/shared/clipping.js +1 -0
- package/dist/controls/shared/connection.d.ts +21 -0
- package/dist/controls/shared/connection.js +112 -0
- package/dist/controls/shared/control-options.d.ts +4 -0
- package/dist/controls/shared/control-options.js +14 -0
- package/dist/controls/shared/covered-snapshot.d.ts +35 -0
- package/dist/controls/shared/covered-snapshot.js +41 -0
- package/dist/controls/shared/covered-source.d.ts +22 -0
- package/dist/controls/shared/covered-source.js +72 -0
- package/dist/controls/shared/crossfade.d.ts +11 -0
- package/dist/controls/shared/crossfade.js +71 -0
- package/dist/controls/shared/diagnostics.d.ts +2 -0
- package/dist/controls/shared/diagnostics.js +16 -0
- package/dist/controls/shared/dom.d.ts +45 -0
- package/dist/controls/shared/dom.js +258 -0
- package/dist/controls/shared/events.d.ts +12 -0
- package/dist/controls/shared/events.js +13 -0
- package/dist/controls/shared/horizontal-navigation.d.ts +36 -0
- package/dist/controls/shared/horizontal-navigation.js +90 -0
- package/dist/controls/shared/icons.d.ts +5 -0
- package/dist/controls/shared/icons.js +66 -0
- package/dist/controls/shared/modal-animation.d.ts +21 -0
- package/dist/controls/shared/modal-animation.js +97 -0
- package/dist/controls/shared/modal.d.ts +26 -0
- package/dist/controls/shared/modal.js +261 -0
- package/dist/controls/shared/projection-id.d.ts +2 -0
- package/dist/controls/shared/projection-id.js +2 -0
- package/dist/controls/shared/scroll-placement.d.ts +1 -0
- package/dist/controls/shared/scroll-placement.js +1 -0
- package/dist/controls/shared/tab-bar-width.d.ts +7 -0
- package/dist/controls/shared/tab-bar-width.js +72 -0
- package/dist/controls/shared/toolbar-options.d.ts +10 -0
- package/dist/controls/shared/toolbar-options.js +38 -0
- package/dist/controls/shared/transition-identity.d.ts +3 -0
- package/dist/controls/shared/transition-identity.js +64 -0
- package/dist/controls/shared/vertical-bars-geometry.d.ts +8 -0
- package/dist/controls/shared/vertical-bars-geometry.js +82 -0
- package/dist/controls/shared/vertical-navigation.d.ts +5 -0
- package/dist/controls/shared/vertical-navigation.js +39 -0
- package/dist/controls/startup.d.ts +7 -0
- package/dist/controls/startup.js +72 -0
- package/dist/controls/transport.d.ts +10 -0
- package/dist/controls/transport.js +1 -0
- package/dist/controls/vertical-bars-web-search.d.ts +8 -0
- package/dist/controls/vertical-bars-web-search.js +83 -0
- package/dist/controls/vertical-bars-web.d.ts +2 -0
- package/dist/controls/vertical-bars-web.js +609 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/integration/index.d.ts +36 -0
- package/dist/integration/index.js +25 -0
- package/dist/native/session.js +14 -8
- package/dist/projection/pause.d.ts +10 -0
- package/dist/projection/pause.js +58 -0
- package/dist/projection/styles.d.ts +1 -1
- package/dist/projection/styles.js +0 -1
- package/dist/projection/surfaces.js +2 -1
- package/dist/projection/web.js +39 -5
- package/dist/types.d.ts +5 -1
- package/docs/README.md +1 -0
- package/docs/configuration/README.md +3 -1
- package/docs/configuration/ionic-overlays.md +36 -2
- package/docs/configuration/pause-resume.md +51 -0
- package/docs/controls.md +39 -0
- package/ios/Sources/WebViewNativeUIControls/Components/NativeUIButton.swift +98 -0
- package/ios/Sources/WebViewNativeUIControls/Components/NativeUIButtons.swift +24 -0
- package/ios/Sources/WebViewNativeUIControls/Components/NativeUIComponents.swift +19 -0
- package/ios/Sources/WebViewNativeUIControls/Components/NativeUIFab.swift +80 -0
- package/ios/Sources/WebViewNativeUIControls/Components/NativeUISearchController.swift +449 -0
- package/ios/Sources/WebViewNativeUIControls/Components/NativeUISegment.swift +91 -0
- package/ios/Sources/WebViewNativeUIControls/Components/NativeUITabBar.swift +213 -0
- package/ios/Sources/WebViewNativeUIControls/Components/NativeUIToolbarTransition.swift +186 -0
- package/ios/Sources/WebViewNativeUIControls/Components/NativeUIVerticalBars.swift +696 -0
- package/ios/Sources/WebViewNativeUIControls/Components/NativeUIVerticalSearch.swift +117 -0
- package/ios/Sources/WebViewNativeUIControls/Extensions/NativeUI.swift +180 -0
- package/ios/Sources/WebViewNativeUIControls/Extensions/NativeUIRendering.swift +38 -0
- package/ios/Sources/WebViewNativeUIControls/NativeUIController.swift +801 -0
- package/ios/Sources/WebViewNativeUIControls/Overlays/NativeUIOverlayController.swift +131 -0
- package/ios/Sources/WebViewNativeUIControls/Overlays/NativeUIOverlayHost.swift +85 -0
- package/ios/Sources/WebViewNativeUIControls/Shared/NativeUIControlRendering.swift +21 -0
- package/ios/Sources/WebViewNativeUIControls/Shared/NativeUICoveredSnapshots.swift +14 -0
- package/ios/Sources/WebViewNativeUIControls/Shared/NativeUICrossfade.swift +35 -0
- package/ios/Sources/WebViewNativeUIControls/Shared/NativeUIHost.swift +8 -0
- package/ios/Sources/WebViewNativeUIControls/Shared/NativeUIScrollTracker.swift +2 -0
- package/ios/Sources/WebViewNativeUIControls/Shared/NativeUISnapshot.swift +206 -0
- package/ios/Sources/WebViewNativeUIControls/Shared/NativeUIVerticalBarsGeometry.swift +93 -0
- package/ios/Sources/WebViewNativeUIEngine/CoveredSnapshots.swift +2 -2
- package/ios/Sources/WebViewNativeUIEngine/NativeUIProjection.swift +1 -1
- package/ios/Sources/WebViewNativeUIEngine/Resources/native-ui-engine.js +3 -4
- package/package.json +30 -5
- package/src/controls/activation.ts +427 -0
- package/src/controls/components/index.ts +45 -0
- package/src/controls/components/ion-back-button.ts +22 -0
- package/src/controls/components/ion-button.ts +28 -0
- package/src/controls/components/ion-buttons.ts +37 -0
- package/src/controls/components/ion-fab.ts +151 -0
- package/src/controls/components/ion-menu-button.ts +37 -0
- package/src/controls/components/ion-segment.ts +27 -0
- package/src/controls/components/ion-tab-bar.ts +55 -0
- package/src/controls/components/searchable-tabs.ts +534 -0
- package/src/controls/definitions.ts +338 -0
- package/src/controls/extensions.ts +198 -0
- package/src/controls/foldable/fold-state.ts +10 -0
- package/src/controls/foldable/types.ts +4 -0
- package/src/controls/html.ts +239 -0
- package/src/controls/index.ts +7 -0
- package/src/controls/ionic.ts +1 -0
- package/src/controls/legacy-layout.ts +21 -0
- package/src/controls/overlays/content.ts +51 -0
- package/src/controls/overlays/controller.ts +394 -0
- package/src/controls/overlays/covered-overlay.ts +11 -0
- package/src/controls/overlays/dialog-animation.ts +53 -0
- package/src/controls/overlays/dismiss-animation.ts +15 -0
- package/src/controls/overlays/focus.ts +64 -0
- package/src/controls/overlays/popover.ts +116 -0
- package/src/controls/overlays/styles.ts +195 -0
- package/src/controls/prehide.ts +285 -0
- package/src/controls/runtime.ts +1731 -0
- package/src/controls/shared/bridge.ts +18 -0
- package/src/controls/shared/candidate.ts +163 -0
- package/src/controls/shared/clipping.ts +1 -0
- package/src/controls/shared/connection.ts +105 -0
- package/src/controls/shared/control-options.ts +20 -0
- package/src/controls/shared/covered-snapshot.ts +52 -0
- package/src/controls/shared/covered-source.ts +78 -0
- package/src/controls/shared/crossfade.ts +70 -0
- package/src/controls/shared/diagnostics.ts +13 -0
- package/src/controls/shared/dom.ts +310 -0
- package/src/controls/shared/events.ts +14 -0
- package/src/controls/shared/horizontal-navigation.ts +106 -0
- package/src/controls/shared/icons.ts +64 -0
- package/src/controls/shared/modal-animation.ts +109 -0
- package/src/controls/shared/modal.ts +286 -0
- package/src/controls/shared/projection-id.ts +2 -0
- package/src/controls/shared/scroll-placement.ts +1 -0
- package/src/controls/shared/tab-bar-width.ts +66 -0
- package/src/controls/shared/toolbar-options.ts +51 -0
- package/src/controls/shared/transition-identity.ts +67 -0
- package/src/controls/shared/vertical-bars-geometry.ts +92 -0
- package/src/controls/shared/vertical-navigation.ts +34 -0
- package/src/controls/startup.ts +74 -0
- package/src/controls/transport.ts +11 -0
- package/src/controls/vertical-bars-web-search.ts +86 -0
- package/src/controls/vertical-bars-web.ts +674 -0
- package/src/dom/geometry.ts +24 -0
- package/src/dom/overlays.ts +196 -0
- package/src/dom/scroll-bindings.ts +66 -0
- package/src/dom/scroll-placement.ts +92 -0
- package/src/dom/visibility.ts +29 -0
- package/src/index.ts +19 -0
- package/src/integration/index.ts +64 -0
- package/src/ionic.ts +34 -0
- package/src/native/bootstrap.ts +132 -0
- package/src/native/bridge.ts +18 -0
- package/src/native/resource-url.ts +11 -0
- package/src/native/session.ts +708 -0
- package/src/native/updates.ts +103 -0
- package/src/native/values.ts +29 -0
- package/src/projection/events.ts +58 -0
- package/src/projection/pause.ts +58 -0
- package/src/projection/placement.ts +34 -0
- package/src/projection/scope.ts +13 -0
- package/src/projection/styles.ts +26 -0
- package/src/projection/surface.ts +88 -0
- package/src/projection/surfaces.ts +119 -0
- package/src/projection/web.ts +1013 -0
- package/src/types.ts +58 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var WebViewNativeUIEngineRuntime=(()=>{var
|
|
1
|
+
"use strict";var WebViewNativeUIEngineRuntime=(()=>{var Ze=Object.defineProperty;var bt=Object.getOwnPropertyDescriptor;var Pt=Object.getOwnPropertyNames;var Et=Object.prototype.hasOwnProperty;var Tt=(e,o)=>{for(var s in o)Ze(e,s,{get:o[s],enumerable:!0})},Lt=(e,o,s,v)=>{if(o&&typeof o=="object"||typeof o=="function")for(let p of Pt(o))!Et.call(e,p)&&p!==s&&Ze(e,p,{get:()=>o[p],enumerable:!(v=bt(o,p))||v.enumerable});return e};var Mt=e=>Lt(Ze({},"__esModule",{value:!0}),e);var zt={};Tt(zt,{hide:()=>Ut,notify:()=>Dt,receive:()=>$t,show:()=>It,start:()=>Vt,stop:()=>Bt});var st=(e,o,s)=>{for(let[v,p]of Object.entries(o)){if(!/^[a-z][a-z0-9-]*$/.test(v))throw new TypeError("Native value keys must be lowercase attribute names");let w=(Object.hasOwn(s,v)?s[v]:void 0)?.property;if(w&&(!/^[a-zA-Z][\w]*$/.test(w)||/^on/i.test(w)||["innerHTML","outerHTML","textContent","innerText","style","constructor","prototype"].includes(w)))throw new TypeError("Native value binding requires a data property");let b=JSON.stringify(p);if(b===void 0)throw new TypeError("Native values must be JSON values");if(w){let a=e;JSON.stringify(a[w])!==b&&(a[w]=p)}else{let a=`data-native-ui-value-${v}`,L=typeof p=="string"?p:b;e.getAttribute(a)!==L&&e.setAttribute(a,L)}}};var jt=Symbol.for("webview-native-ui-engine.projection-placement");var ze=e=>e?.[jt];var St=(e,o)=>{if(e.matches("ion-toast, ion-menu"))return!1;let s=e;if(s.showBackdrop===!1)return!1;if(!e.matches("ion-modal"))return!0;let v=o??s.initialBreakpoint;return v===void 0||v>(s.backdropBreakpoint??0)},xt=Symbol.for("@webview-native-ui/engine/overlays/v1"),Ht=e=>{let o=new Set,s=new Set,v=new Set,p=new WeakMap,f=new WeakSet,w=new Map,b=[],a={},L=new Map,j,H=y=>{for(let d of[...v])try{d(y)}catch(g){console.error("Native UI overlay listener failed",g)}},D=(y,d,g)=>{d==="willPresent"||d==="didPresent"?(f.delete(y),o.add(y)):d==="didDismiss"&&(f.add(y),o.delete(y),s.delete(y),p.delete(y));let l=g?.detail?.breakpoint;typeof l=="number"&&l>0&&p.set(y,l),H({element:y,phase:d,event:g})},W=(y=!1)=>{let d=!1;for(let g of o)(!g.isConnected||g.ownerDocument!==e||!b.some(({selector:l})=>g.matches(l)))&&(o.delete(g),s.delete(g),d=!0);for(let g of e.querySelectorAll(b.map(({selector:l})=>l).join(",")))!o.has(g)&&!f.has(g)&&(y||!g.matches("ion-popover"))&&(g.presented||g.classList.contains("show-menu"))&&(o.add(g),d=!0);d&&H({phase:"change"})};return{get active(){return o},subscribe(y){return v.add(y),()=>{v.delete(y)}},setNative(y,d){s.has(y)!==d&&(d?s.add(y):s.delete(y),H({element:y,phase:"change"}))},isExcluded(y){return!!a.exclude&&y.matches(a.exclude)},isNative(y){return s.has(y)},get stack(){let y=[...o].filter(g=>g.isConnected&&g.ownerDocument===e),d=g=>{let l=Number.parseFloat(e.defaultView.getComputedStyle(g).zIndex);return Number.isFinite(l)?l:g.overlayIndex??0};return y.sort((g,l)=>d(g)-d(l)),y},isCovered(y){let d=this.stack,g=d.reduce((l,F,x)=>F.contains(y)?x:l,-1);return d.some((l,F)=>{if(s.has(l)||a.exclude&&l.matches(a.exclude))return!1;let x=a.covers?.(l,y);return x!==void 0?x:F>g&&!l.contains(y)&&(l.matches("ion-menu")||St(l,p.get(l)))})},enable(y,d){let g={...a,...d},l=[...y,...g.additional??[]];g.exclude&&e.querySelector(g.exclude);let F=new Map;for(let u of l){e.querySelector(u.selector);for(let[B,Z]of Object.entries(u.events)){let _=F.get(Z);if(_&&_.phase!==B)throw new TypeError(`Overlay event "${Z}" has conflicting phases`);F.set(Z,{phase:B,selector:_?`${_.selector}, ${u.selector}`:u.selector})}}a=g,b=l,L=F;for(let u of L.keys()){if(w.has(u))continue;let B=Z=>{let _=L.get(u),Q=Z.composedPath().find(J=>J instanceof e.defaultView.HTMLElement&&J.matches(_.selector));Q&&D(Q,_.phase,Z)};e.addEventListener(u,B,!0),w.set(u,()=>e.removeEventListener(u,B,!0))}for(let[u,B]of w)L.has(u)||(B(),w.delete(u));let x=!j;j||(j=new MutationObserver(()=>W()),j.observe(e.documentElement,{childList:!0,subtree:!0}),e.addEventListener("nativeUIOverlayAdopted",u=>{let B=u.detail;B?.ownerDocument===e&&D(B,"willPresent",u)})),W(x),(x||d)&&H({phase:"change"})}}},at=e=>{let o=e;return o[xt]??=Ht(e)};var kt=Symbol.for("@webview-native-ui/engine/projection-pause/v1"),Rt=e=>{let o=at(e),s=new Set,v=0,p=0,f=()=>v>0||p!==0,w=()=>{for(let a of s)a()},b=a=>{if(a<0&&v===0)return;let L=f();v+=a;let j=e.defaultView;p&&j&&(j.cancelAnimationFrame(p),p=0),v===0&&j?p=j.requestAnimationFrame(()=>{p=j.requestAnimationFrame(()=>{p=0,w()})}):L!==f()&&w()};return{isPaused:a=>f()||!!a&&o.isCovered(a),subscribe(a){s.add(a);let L=o.subscribe(a);return()=>{s.delete(a),L()}},pause:()=>b(1),resume:()=>b(-1)}},_e=e=>{let o=e;return o[kt]??=Rt(e)};function*De(e){let o=e;for(;o;){let s=o.getRootNode();o=o.assignedSlot??o.parentElement??(s instanceof ShadowRoot?s.host:null),o&&(yield o)}}var Ct=({x:e,y:o,width:s,height:v})=>({x:e,y:o,width:s,height:v}),ct=e=>{let o=e.getBoundingClientRect(),s=getComputedStyle(e),v=parseFloat(s.borderLeftWidth)||0,p=parseFloat(s.borderTopWidth)||0;return{x:o.left+v,y:o.top+p,width:o.width-v-(parseFloat(s.borderRightWidth)||0),height:o.height-p-(parseFloat(s.borderBottomWidth)||0)}},Qe=(e,o,s)=>{let v=[e,...De(e)],p=v.indexOf(o);if(p<=0||o===e.ownerDocument.scrollingElement)return;let f=e.ownerDocument.defaultView;if(f.visualViewport&&(f.visualViewport.scale!==1||f.visualViewport.offsetLeft||f.visualViewport.offsetTop))return;let w=0,b=0,a=f.innerWidth,L=f.innerHeight;for(let[W,y]of v.entries()){let d=getComputedStyle(y);if(d.transform!=="none"&&!new DOMMatrixReadOnly(d.transform).isIdentity||d.zoom&&d.zoom!=="normal"&&Number(d.zoom)!==1||[d.translate,d.rotate,d.scale,d.perspective].some(x=>x&&x!=="none")||d.writingMode&&d.writingMode!=="horizontal-tb"||W<p&&/^(fixed|sticky)$/.test(d.position))return;if(W===0)continue;if(d.scrollbarGutter&&d.scrollbarGutter!=="auto")return;let g=/^(auto|scroll|hidden|clip)$/.test(d.overflowX),l=/^(auto|scroll|hidden|clip)$/.test(d.overflowY);if(W<p&&(g||l))return;let F=y===e.ownerDocument.scrollingElement;if(W>p&&((g||F)&&y.scrollWidth>y.clientWidth||(l||F)&&y.scrollHeight>y.clientHeight)||(g||l)&&[d.borderTopLeftRadius,d.borderTopRightRadius,d.borderBottomLeftRadius,d.borderBottomRightRadius].some(x=>parseFloat(x)>0)||d.clipPath&&d.clipPath!=="none"||d.maskImage&&d.maskImage!=="none")return;if(W>=p){let x=ct(y);g&&(w=Math.max(w,x.x),a=Math.min(a,x.x+x.width)),l&&(b=Math.max(b,x.y),L=Math.min(L,x.y+x.height))}}let j=getComputedStyle(o);if(!/^(auto|scroll)$/.test(j.overflowX)&&!/^(auto|scroll)$/.test(j.overflowY))return;let H=ct(o);if(a<=w||L<=b||!H.width||!H.height)return;let D=Ct(e.getBoundingClientRect());return{id:s(o),offsetX:o.scrollLeft,offsetY:o.scrollTop,viewport:H,clip:{x:w,y:b,width:a-w,height:L-b},contentWidth:o.scrollWidth,contentHeight:o.scrollHeight,frame:{...D,x:D.x-H.x+o.scrollLeft,y:D.y-H.y+o.scrollTop}}};var lt=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 me=e=>new Promise((o,s)=>{let v=setTimeout(()=>s(new Error("Native UI bridge timed out")),5e3);e.then(o,s).finally(()=>clearTimeout(v))}),Je=async e=>{try{return await me(e)}catch(o){throw e.then(s=>s.remove()).catch(()=>{}),o}};var Ge=async(e,o)=>{let s=new Map;for(let b of e.update??[])s.set(b,{updated:!0});for(let b of["native","web","none"])for(let a of e.projection?.[b]??[]){let L=s.get(a)??{updated:!1};if(L.destination&&L.destination!==b)throw new TypeError(`Projection event "${a}" has conflicting destinations`);s.set(a,{...L,destination:b})}let v=!1,p=[],f=async()=>{v=!0;let a=(await Promise.allSettled(p.splice(0).map(L=>Promise.resolve().then(()=>L.remove())))).find(L=>L.status==="rejected");if(a?.status==="rejected")throw a.reason},w=[...s].map(async([b,a])=>{let L=await Je(Promise.resolve().then(()=>e.addListener(b,j=>{!v&&(!e.accepts||e.accepts(j))&&o(a.destination,a.updated)})));v?await L.remove():p.push(L)});try{return await Promise.all(w),{remove:f}}catch(b){throw await f().catch(()=>{}),b}};var xe=":is([data-native-ui-snapshot-source], [data-native-ui-snapshot-prepared], [data-native-ui-snapshot-content])",dt=`
|
|
2
2
|
@layer native-ui-projection {
|
|
3
3
|
${xe}, ${xe} *, ${xe}::part(native) { visibility: hidden !important; }
|
|
4
4
|
${xe}::before, ${xe}::after,
|
|
@@ -6,9 +6,8 @@ ${xe} *::before, ${xe} *::after {
|
|
|
6
6
|
visibility: hidden !important;
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
|
-
[data-native-ui-snapshot-visible] { opacity:1!important;overflow:visible!important; }
|
|
10
9
|
[data-native-ui-snapshot-visible][data-native-ui-snapshot-positioned] { position:relative!important; }
|
|
11
|
-
`,
|
|
10
|
+
`,ut=`
|
|
12
11
|
@layer native-ui-projection {
|
|
13
12
|
:host([data-native-ui-snapshot-content]),
|
|
14
13
|
:host([data-native-ui-snapshot-content])::before,
|
|
@@ -19,4 +18,4 @@ ${xe} *::before, ${xe} *::after {
|
|
|
19
18
|
visibility: hidden !important;
|
|
20
19
|
}
|
|
21
20
|
}
|
|
22
|
-
`;var Lt=({control:t},i=!1)=>[t.id,t.kind,t.placement,i?0:t.x,i?0:t.y,t.width,t.height,t.dark,t.rtl],Mt=async(t,i,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 y="native",m=t.element.ownerDocument,f=m.defaultView,P=Array.from(f.crypto.getRandomValues(new Uint32Array(4)),e=>e.toString(16)).join("-"),p=e=>e.isConnected&&e.ownerDocument===m,M=e=>!!e?.isConnected&&e.ownerDocument===m,S=new Map,j=new Set,B=e=>{j.delete(e),e.style.setProperty("display","none","important"),e.removeAttribute("data-native-ui-projection-image"),e.removeAttribute("src"),He()},H=i.send.bind(i),g="data-native-ui-snapshot",d=`${t.namespace}:sources-change`,w=new Set,c=new Set,W=new Set,k=new WeakMap,l=0,V=e=>JSON.stringify(e.map(o=>{k.has(o.scope)||k.set(o.scope,++l);let n=s.transient&&!s.opaqueUnderlay?o.scope.element.getBoundingClientRect():void 0,a=n?{...o,control:{...o.control,x:o.control.x-n.x,y:o.control.y-n.y}}:o;return[k.get(o.scope),Lt(a,!!s.opaqueUnderlay)]})),$=new Map,J=e=>{let o=e.getRootNode();return o.nodeType===11&&"host"in o?o:m},ge=e=>{if($.has(e))return;let o=m.createElement("style");o.setAttribute("data-native-ui-snapshot-base",""),o.textContent=rt+(e.nodeType===11?st:""),(e.nodeType===11?e:e.head).append(o),$.set(e,o)},_=e=>{let o=[...e.getAnimations({subtree:!0}),...[...G.get(e)??[]].flatMap(n=>n.shadowRoot?.getAnimations()??[])];for(let n of o)"transitionProperty"in n&&n.transitionProperty==="visibility"&&n.cancel()},G=new Map,Q=e=>{let o=G.get(e)??new Set;G.set(e,o);let n=e.hasAttribute("data-native-ui-snapshot-source")||e.hasAttribute("data-native-ui-snapshot-prepared"),a=T=>{if(!T.hasAttribute("data-native-ui-projection-node")){if(T.shadowRoot){o.add(T),ge(T.shadowRoot);for(let C of T.shadowRoot.children)a(C)}for(let C of T.children)a(C)}};a(e);for(let T of o)T.toggleAttribute("data-native-ui-snapshot-content",n);_(e)},pe=()=>`${f.innerWidth}:${f.innerHeight}:${f.devicePixelRatio}`,ie=!1,ce=!1,ee=0,le=0,L,me,E,x=!1,D=!1,Te=0,Le=0,ne=0,de=0,I=0,ue=-1,A=!1,Ne=!1,Y,He=()=>{let e=new Set(Y?.candidates.map(n=>n.scope.element));for(let[n,a]of S){let T=!A&&n.isConnected&&e.has(n);if(T&&(E||D||ie))continue;let C=T?2*Math.max(1,L?.scopes.filter(R=>R.element===n).length??0):0,O=Math.max(0,C-a.filter(R=>j.has(R)).length),U=a.filter(R=>j.has(R)||O-- >0?!0:(R.remove(),!1));U.length?S.set(n,U):S.delete(n)}let o=new Set([...Y?.candidates.map(n=>n.scope.element.getRootNode())??[],...E?.scopes.map(n=>n.element.getRootNode())??[],...L?.scopes.map(n=>n.element.getRootNode())??[],...[...j].map(n=>n.getRootNode()),...[...G.values()].flatMap(n=>[...n].map(a=>a.shadowRoot))]);for(let[n,a]of $)n.nodeType===11&&!o.has(n)&&(a.remove(),$.delete(n))},we=new Set,Ve=(e,o,n)=>{let a=()=>{we.delete(a)&&(H({action:e,token:o}).catch(()=>{}),e==="restored"&&He())};we.add(a),n&&!A?f.requestAnimationFrame(()=>f.requestAnimationFrame(a)):a()},q=new Set,ke=()=>{q.forEach(e=>W.delete(e)),q.clear()},Me=(e,o=!1)=>{!e||e===L||e===E||(e.images.forEach(n=>{B(n)}),Ve("release",e.data.token,o))},re=e=>e.filter(o=>{if(!M(o.scope.element)||![o.element,...o.sources??[]].every(p))return!1;if(o.control.scroll){let n=o.element.getBoundingClientRect(),a=o.control.scroll.clip;if(n.right<=a.x||n.bottom<=a.y||n.left>=a.x+a.width||n.top>=a.y+a.height)return!1}return s.eligible?.(o)??!0}),ze=async()=>{if(de=0,A||y!=="native"||Ne||x||E||s.blocked()||!Y||L?.revision===Y.revision&&ue===I)return;let{revision:e,candidates:o}=Y,n=ne,a=I,T=pe(),C=re(o);if(!C.length)return;Ne=!0;let O,U=!1,R=[];try{let se=!1,ae=H({action:"prepare",revision:s.captureRevision?.()??e,viewportWidth:f.innerWidth,ids:C.map(b=>b.control.id)});ae.then(b=>{se&&b.token&&H({action:"release",token:b.token}).catch(()=>{})}).catch(()=>{});try{O=await ye(ae)}finally{se=!0}if(!O.token||!O.parts?.length)return;let We=new Set(C.map(b=>b.control.id));if(O.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(fe=>!We.has(fe))||![b.x,b.y,b.width,b.height].every(Number.isFinite)||b.width<=0||b.height<=0)||new Set(O.parts.flatMap(b=>b.ids)).size!==We.size||O.parts.some(b=>new Set(b.ids.map(fe=>C.find(Xe=>Xe.control.id===fe).scope)).size!==1))return;let ve=O.parts.map(b=>C.find(fe=>b.ids.includes(fe.control.id)));if(await ye(Promise.all(O.parts.map(async(b,fe)=>{let Xe=ve[fe].scope.element,Ie=S.get(Xe);Ie||(Ie=[],S.set(Xe,Ie));let he=Ie.find(ft=>!j.has(ft));return he||(he=m.createElement("img"),he.setAttribute("data-native-ui-projection-node",""),Ie.push(he)),j.add(he),R.push(he),he.src=it(b.url),await he.decode(),he}))),A||y!=="native"||x||E||s.blocked()||ne!==n||pe()!==T||Y?.revision!==e||C.some(b=>!M(b.scope.element)||![b.element,...b.sources??[]].every(p)))return;let ut=L,et={data:O,images:R,sources:Array.from(new Set(C.flatMap(b=>[b.element,...b.sources??[]]))),targets:ve.map(b=>b.element),scopes:ve.map(b=>b.scope),parents:ve.map(b=>b.scope.element.parentNode),frames:[],viewport:T,revision:e,layout:V(C)};try{if(!Z(et))throw new Error("Projection destination is unavailable")}catch(b){Ae();try{Z(),L?.sources.forEach(fe=>{W.add(fe),q.add(fe)})}catch{te()}throw b}L=et,ke(),L.sources.forEach(b=>{W.add(b),q.add(b)}),s.opaqueUnderlay&&H({action:"prepared",token:O.token}).catch(()=>{}),f.dispatchEvent(new Event(d)),ue=a,U=!0,Me(ut)}catch{}finally{U||R.forEach(se=>{B(se)}),O?.token&&!U&&H({action:"release",token:O.token}).catch(()=>{}),Ne=!1,Y&&(Y.revision!==e||I!==a)&&oe()}},oe=()=>{f.clearTimeout(de),!A&&y==="native"&&!E&&!x&&!s.blocked()&&(de=f.setTimeout(()=>{ze()},v))},Re,Je=(e,o)=>{if(o.some(a=>a.scope.element.ownerDocument!==m||[a.element,...a.sources??[]].some(T=>T.ownerDocument!==m)))throw new TypeError("All projection sources and fallback scopes must share one Document");if(s.blocked())return;!E&&L&&L.layout!==V(re(o))&&Se();let n=V(o);Re!==n&&(Re=n,I++,ne++),Y?.revision!==e&&ne++,Y={revision:e,candidates:o},He(),(L?.revision!==e||ue!==I)&&oe()},je=e=>{!E&&L&&e&&Y?.candidates.some(o=>o.scrollElement===e&&L.sources.includes(o.element))&&Se(),E&&z(),I++,ne++,oe()},Ce=await Ye(i.listen(({active:e})=>{x=e,ne++,f.clearTimeout(de),e||oe()})),Oe=new Set,be=e=>{G.get(e)?.forEach(o=>o.removeAttribute("data-native-ui-snapshot-content")),Oe.delete(e)&&e.removeAttribute("data-native-ui-snapshot-prepared"),e.removeAttribute("data-native-ui-snapshot-visible"),e.removeAttribute(g),e.removeAttribute("data-native-ui-snapshot-positioned"),e.removeAttribute("data-native-ui-snapshot-source"),_(e),G.delete(e)},Ae=()=>{le++,f.cancelAnimationFrame(ee);for(let e of K.keys())e.style.setProperty("opacity","0","important");K.clear(),ee=0,ie=!1,ce=!1,ke(),E?.sources.forEach(e=>{w.delete(e),c.delete(e)}),h.forEach(be),h.clear(),$.forEach((e,o)=>{(A||o.nodeType===11&&!o.host.isConnected)&&(e.remove(),$.delete(o))})},te=(e=E,o=D)=>{if(E!==e)return;let n=new Set([E,L]);Ae(),E=void 0,L=void 0,D=!1,f.clearTimeout(Te),n.forEach(a=>Me(a,o)),s.wake()},Fe=()=>{if(!E)return;if(L!==E){te();return}let e=E;le++,f.cancelAnimationFrame(ee),ee=0,ie=ce=!1,e.sources.forEach(o=>{w.delete(o),c.delete(o)}),h.forEach(o=>o.removeAttribute("data-native-ui-snapshot-source")),N(e,!!s.opaqueUnderlay),E=void 0,D=!1,f.clearTimeout(Te),Ve("restored",e.data.token,!0),e.sources.forEach(o=>{W.add(o),q.add(o)}),s.wake()},r=()=>{D&&Fe(),we.forEach(e=>e())},u=e=>e.scopes.map(o=>M(o.element)?o.element:void 0),h=new Set,N=(e,o)=>{for(let n of h)n.toggleAttribute("data-native-ui-snapshot-visible",o),Q(n);e.images.forEach(n=>n.style.setProperty("opacity",o?"1":"0","important"))},F=new Map,K=new Map,z=()=>{let e=[];for(let[o,n]of K){let{target:a,frame:T}=n;if(!a.isConnected){o.remove();continue}let C=a.shadowRoot??a;o.parentNode!==C&&C.insertBefore(o,null);let O=a.getBoundingClientRect(),U=o.getBoundingClientRect(),R=parseFloat(o.style.width)||T.width,se=parseFloat(o.style.height)||T.height,ae=U.width/R||1,We=U.height/se||1,ve=n.scale??(n.scale={x:ae,y:We});e.push({element:o,left:(parseFloat(o.style.left)||0)+(O.x+T.x*ae/ve.x-U.x)/ae,top:(parseFloat(o.style.top)||0)+(O.y+T.y*We/ve.y-U.y)/We,width:T.width/ve.x,height:T.height/ve.y})}for(let{element:o,...n}of e)for(let[a,T]of Object.entries(n)){let C=`${T}px`;o.style.getPropertyValue(a)!==C&&o.style.setProperty(a,C,"important")}},Z=(e=E??L)=>{if(!e||D)return!1;if(!e.sources.every(p)||u(e).some(n=>!n))return Se(),!1;let o=u(e);if(E){if(o.some(a=>!a?.isConnected||!$.has(J(a))))return te(E,!1),!1;let n=new Set;for(let[a,T]of e.targets.entries()){let C=F.get(T),O=o[a];!C||!O?.isConnected||(O.setAttribute(g,C),O.setAttribute("data-native-ui-snapshot-source",""),n.add(O))}for(let a of h)n.has(a)||be(a);return h.clear(),n.forEach(a=>h.add(a)),N(e,ce),!0}S.forEach(n=>n.forEach(a=>{e.images.includes(a)||(a.style.setProperty("display","none","important"),a.removeAttribute("data-native-ui-projection-image"))})),F.clear(),K.clear(),h.forEach(be),h.clear();for(let n of new Set(o)){if(!n)continue;h.add(n),ge(J(n));let a=o.flatMap((U,R)=>U===n?[R]:[]),T=`${P}-${a[0]}`;n.setAttribute(g,T),n!==e.targets[a[0]]&&(n.setAttribute("data-native-ui-snapshot-prepared",""),Oe.add(n)),n.toggleAttribute("data-native-ui-snapshot-visible",!!s.opaqueUnderlay),Q(n);let C=n.getBoundingClientRect();n.toggleAttribute("data-native-ui-snapshot-positioned",f.getComputedStyle(n).position==="static");let O=n.shadowRoot??n;for(let U of[...a].reverse()){let R=e.images[U],se=e.data.parts[U],ae=e.frames[U]??{x:s.opaqueUnderlay?0:se.x-C.x,y:s.opaqueUnderlay?0:se.y-C.y,width:se.width,height:se.height};e.frames[U]=ae,F.set(e.targets[U],T),R.inert=!0,R.setAttribute("aria-hidden","true"),R.setAttribute("data-native-ui-projection-image",T),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",`${ae.width}px`,"important"),R.style.setProperty("height",`${ae.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:n,frame:ae})}}return e.parents=e.scopes.map(n=>n.element.parentNode),z(),!0},X=e=>e.images.map((o,n)=>{let a=o.getBoundingClientRect();return{...e.data.parts[n],x:a.x,y:a.y,width:a.width,height:a.height}}),$e=()=>{if(r(),A||y==="none"||E)return;let e=L;if(!e||e.viewport!==pe()||!e.sources.every(p)||s.current&&!s.current(e.targets)||e.targets.some(a=>!F.has(a))||u(e).some(a=>!a?.isConnected)||[...h].some(a=>!a.isConnected))return;e.scopes.some((a,T)=>a.element.parentNode!==e.parents[T])&&Z(),z();let o=++le,n=()=>le===o;ie=!0,ce=!!s.opaqueUnderlay,E=e,ne++,f.clearTimeout(de),e.sources.forEach(a=>{w.add(a)}),h.forEach(a=>a.setAttribute("data-native-ui-snapshot-source","")),N(e,ce),ee=f.requestAnimationFrame(()=>{ee=0,n()&&(ie=!1,s.wake())}),ye(H({action:"cover",token:e.data.token,...s.transient?{transient:!0,viewportWidth:f.innerWidth,parts:X(e)}:{}})).then(a=>{if(n()){if(ie=!1,a?.shown!==!0){te(e,!1);return}D||(ce=!0,e.sources.forEach(T=>c.add(T)),Z(),z()),f.cancelAnimationFrame(ee),ee=f.requestAnimationFrame(()=>{ee=0,n()&&H({action:"painted",token:e.data.token}).catch(()=>{n()&&te(e,!1)})}),s.wake()}}).catch(()=>{n()&&te(e,!1)})},Ze=()=>{if(!(!E||A||D)){if(!E.sources.every(p)||u(E).some(e=>!e)||s.current&&!s.current(E.targets)){te(E,!1);return}if(!s.blocked()){if(z(),s.transient){let e=E;if(u(e).some(a=>!a?.isConnected)){te(e,!1);return}let n=X(e);s.opaqueUnderlay||n.every((a,T)=>a.width===e.data.parts[T].width&&a.height===e.data.parts[T].height)?e.data={...e.data,parts:n}:L=void 0,H({action:"restore",token:e.data.token,viewportWidth:f.innerWidth,parts:n}).catch(()=>{})}Le=s.revision?.()??Y?.revision??0,D=!0,E.sources.forEach(e=>w.delete(e)),Te=f.setTimeout(()=>{D&&te(E,!1)},250),s.wake()}}},dt=(e,o,n)=>{!D||!E||n===void 0||n<=Le||!s.transient&&e||E.data.parts.every(a=>a.ids.every(T=>o?.includes(T)))&&(Fe(),oe())},Se=(e=!1)=>{we.forEach(n=>n()),ne++,f.clearTimeout(de);let o=L;if(L=void 0,(e||A)&&(me=void 0),s.retainPreparedUntilRelease&&!E&&!e&&!A){if(o){let n={};me=n,ye(H({action:"release",token:o.data.token})).catch(()=>{}).finally(()=>{if(o.images.forEach(a=>{B(a)}),me===n&&(me=void 0,!(L||E))){for(let a of h)a.getAttribute(g)!==F.get(a)&&(h.delete(a),Oe.delete(a));Ae(),F.clear(),f.dispatchEvent(new Event(d))}})}if(me)return}Me(o),E?te(E,!1):(Ae(),F.clear(),f.dispatchEvent(new Event(d)))},Qe;try{s.events&&(Qe=await qe(s.events,(e,o)=>{if(!A){if(e&&(y=e),y==="none"){Se();return}e==="web"&&$e(),e==="native"&&(Ze(),oe()),o&&je()}}))}catch(e){throw A=!0,Se(),await ye(Promise.resolve(Ce.remove())).catch(()=>{}),e}return{get owners(){return[...w]},get visibleOwners(){return[...c]},get preparedOwners(){return[...W]},consider:Je,changed:je,moved:z,get token(){return D?void 0:E?.data.token},begin:$e,get restoring(){return D},get handoffPending(){return ie},retireRestoration:r,end:Ze,updated:dt,invalidate:Se,async destroy(){A=!0,Se(),S.forEach(e=>e.forEach(o=>o.remove())),S.clear(),await Promise.allSettled([ye(Promise.resolve().then(()=>Ce?.remove())),ye(Promise.resolve().then(()=>Qe?.remove()))])}}},at=async(t,i,s)=>{let v=await Mt(t,i,s),y=v.consider;return Object.assign(v,{consider:(m,f)=>y(m,f.map(P=>({...P,scope:t})))})};var ct=(t,i)=>{if(t.nodeType!==1||t.namespaceURI!=="http://www.w3.org/1999/xhtml"||!t.ownerDocument||!("style"in t))throw new TypeError("A Web projection scope requires an HTMLElement fallback");if(t.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:t,namespace:i})};var lt=async(t,i,s={addListener:async(v,y)=>globalThis.Capacitor.addListener(t.plugin,v,y)})=>{let v="view",y=t.receiveListeners,m=!1,f=!1,P="native",p="native",M=nt(document),S=()=>P==="native"&&l&&M.isCovered(l)?"web":P,j=!1,B=!1,H=!1,g=!1,d,w,c,W=!1,k=()=>{let r=W;W=!0;try{c?.begin()}finally{W=r}},l,V=0,$,J=()=>{V++,$?.(),$=void 0},ge=async()=>{if(!t.values||!l||m)return;let r=l;J();let u=V,h=()=>!m&&u===V&&l===r&&ue()===r&&r.isConnected;if(r.localName.includes("-")&&!r.matches(":defined")&&Object.values(t.values).some(F=>F.property)){if(await Promise.race([r.ownerDocument.defaultView.customElements.whenDefined(r.localName),new Promise(F=>{$=F})]),!h())return;$=void 0}let N=await i.send({action:"values"}).catch(()=>{});if(h()&&N?.values&&typeof N.values=="object"&&!Array.isArray(N.values))try{tt(r,N.values,t.values)}catch(F){console.warn("[Native UI Engine] Cannot reflect values",F)}},_={},G,Q=0,pe=new Set,ie=()=>{},ce=new Promise(r=>{ie=r}),ee=()=>{pe.clear(),ie(),ce=new Promise(r=>{ie=r})},le=()=>{Q++,G=void 0;let r=Ue(l);r?.owner===_&&(r.projected=!1,r.owner=void 0)},L={listen:r=>i.listen(u=>{r(u),!u.active&&B&&(B=!1,Re()),u.precovered&&Je(u.precovered)}),send:r=>{if(!t.placementHandoff)return i.send(r);if(r.action==="visibility"&&!r.visible&&ee(),r.action==="visibility"&&r.visible&&pe.size){let z=x,Z=Q,X=l,$e=ce;return Promise.race([Promise.allSettled([...pe]),$e]).then(()=>m||$e!==ce||z!==x||Z!==Q||X!==l||!X?.isConnected||ue()!==l||S()!=="native"?{}:L.send(r))}let u=Ue(l);if(r.action==="cover"){let z=G===r.token&&u?.owner===_&&u.projected,Z=++Q;return G=r.token,u&&(u.owner=_,u.projected=!!z),i.send(r).then(X=>(Z===Q&&u===Ue(l)&&u?.owner===_&&(u.projected=X?.shown===!0),X)).catch(X=>{throw Z===Q&&u?.owner===_&&(le(),u.invalidate()),X})}let h=r.action==="release"&&r.token===G,N=G&&(r.action==="restore"||h||r.action==="reset"||r.action==="visibility"&&r.visible);N&&Q++;let F=Q,K=()=>{F!==Q||u?.owner!==_||(le(),u.invalidate())};try{let z=N&&u?.owner===_?{...r,token:"token"in r?r.token:G,placement:u.measure()}:r,Z=i.send(z).then(async X=>(r.action==="release"&&X?.requiresPlacement&&(u&&(!u.owner||u.owner===_)?X=await i.send({...r,placement:u.measure()}):(await i.send({action:"visibility",visible:!1}),X=await i.send(r))),F===Q&&(r.action==="resume"||h||r.action==="reset"||r.action==="visibility")&&le(),X)).catch(X=>{throw K(),X});return r.action!=="release"||!t.nativeDragHandoff?Z:(pe.add(Z),Z.finally(()=>pe.delete(Z)))}catch(z){return K(),Promise.reject(z)}}},me=0,E=0,x=0,D,Te=!1,Le=!1,ne=!1,de=document.createElement("style"),I=`data-native-ui-session-${t.id.replace(/[^a-zA-Z0-9-]/g,"")}`;de.textContent=`[${I}="native"], [${I}="native"] *, [${I}="none"], [${I}="none"] * {visibility:hidden!important}`,document.documentElement.append(de);let ue=()=>{let r=document.querySelectorAll(t.projectionSelector);return r.length===1&&r[0]instanceof HTMLElement?r[0]:void 0},A=()=>{let r=S();l&&l.getAttribute("data-native-ui-destination")!==r&&l.setAttribute("data-native-ui-destination",r),l&&(p==="web"||p==="native"&&H?l.removeAttribute(I):l.setAttribute(I,p))},Ne=()=>{if(!l?.isConnected)return[];let r=l.getBoundingClientRect(),u={x:r.x,y:r.y,width:r.width,height:r.height},h=d&&Ke(l,d,()=>t.id);return[{element:l,scrollElement:d,control:{id:v,...u,...h?{scroll:h}:{}}}]},Y=async()=>{if(m)return;let r=x,u=t.failedFallback==="native"&&S()==="native"&&!!l?.isConnected;await L.send({action:"visibility",visible:u}).catch(()=>{}),!(m||r!==x)&&(u||p==="none"?A():l?.removeAttribute(I))},He=()=>{if(!j||p!=="native"||!l?.isConnected||c?.token||c?.restoring)return;let r=t.failedFallback==="native";L.send({action:"visibility",visible:r}).catch(()=>{}),r?A():l.removeAttribute(I)},we=()=>{if(m||W)return;if(He(),p==="web"&&c&&!c.token&&!c.restoring){L.send({action:"visibility",visible:!1}).catch(()=>{}),l?.removeAttribute(I);return}if(!c?.restoring||D===c||p!=="native")return;D=c;let r=x,u=c;L.send({action:"resume"}).then(()=>{m||r!==x||u!==c||ue()!==l||(H=!1,u.updated(void 0,[v],++me),A(),q())}).catch(()=>{r!==x||m||(u.invalidate(),Y())}).finally(()=>{D===u&&(D=void 0),we()})},Ve=async()=>{if(m||Te)return;if(ue()!==l){x++,j=!1,B=!1,clearTimeout(w),le(),l?.removeAttribute(I),l?.removeAttribute("data-native-ui-destination"),J();let u=c,h=l;c=void 0,l=void 0,Me.disconnect(),je();try{h&&await L.send({action:"visibility",visible:!1})}finally{await u?.destroy()}if(m)return;l=ue(),H=!1,l&&(Me.observe(l),ge())}if(je(),!j){if(c?.restoring){we();return}if(p=S(),!l){await L.send({action:"visibility",visible:!1});return}if(!c){Te=!0;let u=x;try{let h=await at(ct(l,t.id),L,{wake:we,captureDelayMs:t.captureDelayMs,retainPreparedUntilRelease:t.nativeDragHandoff,blocked:()=>p!=="native"||j||H&&!c?.token,revision:()=>me,captureRevision:t.captureMode==="view"?()=>E:void 0,transient:!0,opaqueUnderlay:t.captureMode==="view"});if(m||u!==x){await h.destroy();return}c=h}finally{Te=!1}}if(!m){if(p==="native"&&H){await L.send({action:"visibility",visible:!1}),A();return}if(p==="native"){let u=x;if(await L.send({action:"visibility",visible:!0}),m||u!==x||p!=="native"||j)return;A(),d=[...De(l)].find(K=>{let z=getComputedStyle(K);return/auto|scroll/.test(z.overflowX+z.overflowY)&&(K.scrollHeight>K.clientHeight||K.scrollWidth>K.clientWidth)});let h=d&&Ke(l,d,()=>t.id),N=t.nativeDragHandoff&&t.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,F=await L.send({action:"track",viewportWidth:innerWidth,...h?{scroll:h}:{},...N?{gesture:N}:{}});if(m||u!==x)return;g=F?.tracked===!0,c.consider(t.captureMode==="view"?E:++me,Ne())}else await L.send({action:"visibility",visible:!1}),A()}}},q=()=>{m||(Le=!0,!(!f||ne)&&(ne=!0,Promise.resolve().then(async()=>{try{for(;Le&&!m;)Le=!1,await Ve()}catch{await Y()}finally{ne=!1,Le&&q()}})))},ke=()=>{c?.invalidate(),q()},Me=new ResizeObserver(ke);window.addEventListener("resize",ke);let re=new Set,ze=new WeakSet,oe=r=>{let u=r.composedPath()[0]??r.target;if(!(m||p!=="native"||!l||ze.has(r)||u!==document&&![...De(l)].includes(u))){if(ze.add(r),g&&u===d){c?.changed(u);return}j?t.captureMode==="view"?c?.moved():c?.changed():((D||c?.restoring)&&x++,j=!0,k(),H=t.failedFallback!=="native",c?.token?l.removeAttribute(I):He()),Re()}};function Re(){clearTimeout(w),w=setTimeout(()=>{B||(j=!1,!(m||p!=="native")&&(c?.end(),c?.restoring||q()))},100)}function Je(r){if(m||p!=="native"||!l?.isConnected||!c||(B=!0,c.token))return;(D||c.restoring)&&x++,G=r;let u=Ue(l);if(u&&(u.owner=_,u.projected=!0),j=!0,k(),!c.token){j=!1,Y();return}Re()}let je=()=>{let r=new Set(l?De(l):[]),u=r.size!==re.size||[...r].some(h=>!re.has(h));for(let h of re)r.has(h)||(h.removeEventListener("scroll",oe),h.removeEventListener("slotchange",Ce),re.delete(h));for(let h of r)re.has(h)||(h.addEventListener("scroll",oe,{passive:!0}),h.addEventListener("slotchange",Ce),re.add(h));u&&(g=!1,d=void 0,c?.invalidate(),q())},Ce=()=>{je(),q()};document.addEventListener("scroll",oe,!0);let Oe=new MutationObserver(r=>{je(),ue()!==l?q():l&&r.some(u=>u.type==="childList")&&be(S())});Oe.observe(document.documentElement,{childList:!0,attributes:!0,subtree:!0});let be=(r,u=!1)=>{if(m||!u&&r===p)return;j=!1,B=!1,clearTimeout(w),p=r,x++;let h=x;p==="none"?L.send({action:"visibility",visible:!1}).then(()=>{p!=="none"||h!==x||m||(c?.invalidate(!0),A())}).catch(()=>{p!=="none"||h!==x||m||(c?.invalidate(!0),A())}):p==="web"?(k(),c?.token||L.send({action:"visibility",visible:!1}).catch(()=>{}),A()):p==="native"&&(c?.end(),c?.restoring||q())},Ae=M.subscribe(()=>queueMicrotask(()=>be(S()))),te,Fe=async()=>{if(!m){m=!0,ee(),J(),le(),x++,Ae(),Oe.disconnect(),Me.disconnect(),window.removeEventListener("resize",ke),document.removeEventListener("scroll",oe,!0);for(let r of re)r.removeEventListener("scroll",oe),r.removeEventListener("slotchange",Ce);re.clear(),clearTimeout(w),l?.removeAttribute(I),l?.removeAttribute("data-native-ui-destination"),de.remove(),await Promise.allSettled([Promise.resolve(te?.remove()),c?.destroy()])}};try{let r=x;te=await qe({addListener:(h,N)=>s.addListener(h,N),update:y?.update,projection:y?.projection,accepts:h=>!y?.match||Object.entries(y?.match).every(([N,F])=>typeof h=="object"&&h!==null&&h[N]===F)},(h,N)=>{m||(h&&(h==="native"&&(H=!1),P=h,L.send({action:"destination",destination:h}).catch(()=>{}),be(S(),!0)),N&&(ge(),E++,c?.changed(),p==="native"&&q()))});let u=await L.send({action:"connect"});return x===r&&["native","web","none"].includes(u?.destination)&&(P=u.destination),p=S(),f=!0,q(),{destroy:Fe,show:()=>{H=!1,P="native",be(S(),!0)},hide:()=>{P=p="none",x++,ee(),j=!1,B=!1,clearTimeout(w),c?.invalidate(!0),A()}}}catch(r){throw await Fe(),r}};var Ee=new Map,Pe=new Map,Be=new Map,jt=Array.from(crypto.getRandomValues(new Uint32Array(4)),t=>t.toString(16)).join("-"),_e=new Map,St=(t,i,s)=>_e.get(t)?.get(i)?.(s),xt=0,Ht=(t,i)=>new Promise((s,v)=>{let y=`${t}:${jt}:${++xt}`,m=setTimeout(()=>{Pe.delete(y),v(new Error("Native UI session timed out"))},5e3);Pe.set(y,{resolve:s,reject:v,timer:m});let f=JSON.stringify({key:y,request:i}),P=globalThis,p=P.webkit?.messageHandlers?.[t]??P.nativeUIEngine;if(!p){clearTimeout(m),Pe.delete(y),v(new Error("Native UI session unavailable"));return}try{p.postMessage(f)}catch(M){clearTimeout(m),Pe.delete(y),v(M)}}),kt=(t,i,s,v)=>{if(i===null){Be.get(t)?.(s);return}let y=Pe.get(i);!y||!i.startsWith(`${t}:`)||(Pe.delete(i),clearTimeout(y.timer),v?y.reject(new Error(v)):y.resolve(s))},Rt=t=>{Ee.get(t)?.show()},Ct=t=>(Ee.get(t)?.hide(),!0),Ot=async t=>{let i=Ee.get(t);Ee.delete(t),_e.delete(t),Be.delete(t);for(let[s,v]of Pe)s.startsWith(`${t}:`)&&(Pe.delete(s),clearTimeout(v.timer),v.reject(new Error("Native UI session closed")));await i?.destroy()},At=async t=>{if(Ee.has(t.id))return;let i,s=!1,v,y={show:()=>{v="native",i?.show()},hide:()=>{v="none",i?.hide()},destroy:async()=>{s=!0,await i?.destroy()}};Ee.set(t.id,y);try{if(document.readyState==="loading"&&await new Promise(f=>document.addEventListener("DOMContentLoaded",()=>f(),{once:!0})),s)return;let m=new Map;t.runtime==="cordova"&&_e.set(t.id,m),i=await lt(t,{send:f=>Ht(t.id,f),listen:async f=>(Be.set(t.id,f),{remove:()=>{Be.get(t.id)===f&&Be.delete(t.id)}})},t.runtime==="cordova"?{addListener:async(f,P)=>(m.set(f,P),{remove:()=>{m.delete(f)}})}:void 0),v==="none"?i.hide():v==="native"&&i.show(),s&&await i.destroy()}catch(m){throw Ee.get(t.id)===y&&(Ee.delete(t.id),_e.delete(t.id)),m}};return gt(Wt);})();
|
|
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);})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webview-native-ui/engine",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2-0",
|
|
4
4
|
"description": "Native UI placement, scroll tracking, and Web projection for Capacitor and Cordova plugin maintainers.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -16,6 +16,18 @@
|
|
|
16
16
|
"./ionic": {
|
|
17
17
|
"types": "./dist/ionic.d.ts",
|
|
18
18
|
"import": "./dist/ionic.js"
|
|
19
|
+
},
|
|
20
|
+
"./controls": {
|
|
21
|
+
"types": "./dist/controls/index.d.ts",
|
|
22
|
+
"import": "./dist/controls/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./controls/ionic": {
|
|
25
|
+
"types": "./dist/controls/ionic.d.ts",
|
|
26
|
+
"import": "./dist/controls/ionic.js"
|
|
27
|
+
},
|
|
28
|
+
"./integration": {
|
|
29
|
+
"types": "./dist/integration/index.d.ts",
|
|
30
|
+
"import": "./dist/integration/index.js"
|
|
19
31
|
}
|
|
20
32
|
},
|
|
21
33
|
"files": [
|
|
@@ -24,7 +36,9 @@
|
|
|
24
36
|
"WebViewNativeUIEngine.podspec",
|
|
25
37
|
"README.md",
|
|
26
38
|
"LICENSE",
|
|
27
|
-
"docs"
|
|
39
|
+
"docs",
|
|
40
|
+
"src",
|
|
41
|
+
"WebViewNativeUIControls.podspec"
|
|
28
42
|
],
|
|
29
43
|
"scripts": {
|
|
30
44
|
"build": "rm -rf dist && tsc -p tsconfig.json && node scripts/build-runtime.mjs",
|
|
@@ -41,7 +55,8 @@
|
|
|
41
55
|
"lint:swift": "swiftlint version && node-swiftlint lint --strict --no-cache",
|
|
42
56
|
"format:swift": "swiftlint version && node-swiftlint --fix --format --no-cache",
|
|
43
57
|
"lint:android": "android/gradlew -p android ktfmtCheck lintRelease",
|
|
44
|
-
"format:kotlin": "android/gradlew -p android ktfmtFormat"
|
|
58
|
+
"format:kotlin": "android/gradlew -p android ktfmtFormat",
|
|
59
|
+
"test:controls": "vitest run"
|
|
45
60
|
},
|
|
46
61
|
"devDependencies": {
|
|
47
62
|
"@eslint/js": "^10.0.1",
|
|
@@ -53,18 +68,28 @@
|
|
|
53
68
|
"prettier": "^3.6.2",
|
|
54
69
|
"swiftlint": "^2.0.0",
|
|
55
70
|
"typescript": "^5.9.3",
|
|
56
|
-
"typescript-eslint": "^8.72.1"
|
|
71
|
+
"typescript-eslint": "^8.72.1",
|
|
72
|
+
"@ionic/core": "^8.8.1",
|
|
73
|
+
"vitest": "^4.0.0",
|
|
74
|
+
"jsdom": "^26.0.0"
|
|
57
75
|
},
|
|
58
76
|
"publishConfig": {
|
|
59
77
|
"access": "public"
|
|
60
78
|
},
|
|
61
79
|
"peerDependencies": {
|
|
62
|
-
"@capacitor/core": ">=8.0.0 <9"
|
|
80
|
+
"@capacitor/core": ">=8.0.0 <9",
|
|
81
|
+
"@ionic/core": ">=8.8.1 <10"
|
|
63
82
|
},
|
|
64
83
|
"types": "./dist/index.d.ts",
|
|
65
84
|
"peerDependenciesMeta": {
|
|
66
85
|
"@capacitor/core": {
|
|
67
86
|
"optional": true
|
|
87
|
+
},
|
|
88
|
+
"@ionic/core": {
|
|
89
|
+
"optional": true
|
|
68
90
|
}
|
|
91
|
+
},
|
|
92
|
+
"dependencies": {
|
|
93
|
+
"@rdlabo/ionic-theme-utils": "0.1.5"
|
|
69
94
|
}
|
|
70
95
|
}
|