@ionic/core
Version:
Base components for Ionic
4 lines • 8.79 kB
JavaScript
/*!
* (C) Ionic http://ionicframework.com - MIT License
*/
import{w as t,p as e,c as n,g as o,n as i,f as a,m as s}from"./p-Co7eql8D.js";import{i as r,c as d,a as c}from"./p-BpRUsN_W.js";import{b as l}from"./p-SEecsUh7.js";import{C as u}from"./p-nCAPr1Ah.js";import{B as m}from"./p-B_gJaBk0.js";const p=()=>r.get("experimentalCloseWatcher",!1)&&void 0!==t&&"CloseWatcher"in t,h=[];let f;const v=t=>{h.push(t)},b=()=>{f?.()},w=99;var y=Object.freeze({__proto__:null,MENU_BACK_BUTTON_PRIORITY:99,OVERLAY_BACK_BUTTON_PRIORITY:100,addCloseWatcherCondition:v,blockHardwareBackButton:()=>{document.addEventListener("backbutton",(()=>{}))},shouldUseCloseWatcher:p,startHardwareBackButton:()=>{const e=document;let n=!1;const o=()=>{if(n)return;let t=0,o=[];const i=new CustomEvent("ionBackButton",{bubbles:!1,detail:{register(e,n){o.push({priority:e,handler:n,id:t++})}}});e.dispatchEvent(i);const a=()=>{if(o.length>0){let t={priority:Number.MIN_SAFE_INTEGER,handler:()=>{},id:-1};o.forEach((e=>{e.priority>=t.priority&&(t=e)})),n=!0,o=o.filter((e=>e.id!==t.id)),(async t=>{try{if(t?.handler){const e=t.handler(a);null!=e&&await e}}catch(t){d("[ion-app] - Exception in startHardwareBackButton:",t)}})(t).then((()=>n=!1))}};a()};if(e.addEventListener("backbutton",o),p()){let e;f=()=>{if(!h.some((t=>t())))return e?.destroy(),void(e=void 0);void 0===e&&(e=new t.CloseWatcher,e.onclose=()=>{e=void 0,o(),f?.()})},f()}},updateCloseWatcher:b});const g='[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), ion-checkbox:not([tabindex^="-"]):not([hidden]):not([disabled]), ion-radio:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])',k=(t,e)=>{const n=t.querySelector(g);B(n,e??t)},x=(t,e)=>{const n=Array.from(t.querySelectorAll(g));B(n.length>0?n[n.length-1]:null,e??t)},B=(t,n)=>{let o=t;const i=t?.shadowRoot;if(i&&(o=i.querySelector(g)||t),o){const t=o.closest("ion-radio-group");t?t.setFocus():e(o)}else n.focus()};let O=0,C=0;const T="ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-popover",_=new WeakMap,A=t=>"ION-TOAST"!==t.tagName&&!1!==t.focusTrap&&(t=>!1!==t.showBackdrop&&!((t.backdropBreakpoint??0)>0))(t),I=t=>({create:e=>U(t,e),dismiss:(e,n,o)=>L(document,e,n,t,o),getTop:async()=>Y(document,t)}),N=I("ion-alert"),j=I("ion-action-sheet"),E=I("ion-loading"),P=I("ion-modal"),W=I("ion-popover"),D=I("ion-toast"),R=t=>{"undefined"!=typeof document&&H(document);const e=O++;t.overlayIndex=e},S=t=>(t.hasAttribute("id")||(t.id="ion-overlay-"+ ++C),t.id),U=(t,e)=>"undefined"!=typeof window&&void 0!==window.customElements?window.customElements.whenDefined(t).then((()=>{const o=document.createElement(t);return o.classList.add("overlay-hidden"),Object.assign(o,{...e,hasController:!0}),X(document).appendChild(o),new Promise((t=>n(o,t)))})):Promise.resolve(),M=(t,n)=>{let o=t;const i=t?.shadowRoot;i&&(o=i.querySelector(g)||t),o?e(o):n.focus()},H=t=>{0===O&&(O=1,t.addEventListener("focus",(e=>{((t,e)=>{const n=Y(e,T),i=t.target;n&&i&&(n.classList.contains(pt)||(n.shadowRoot?(()=>{if(n.contains(i))n.lastFocus=i;else if("ION-TOAST"===i.tagName)M(n.lastFocus,n);else{const t=n.lastFocus;k(n),t===e.activeElement&&x(n),n.lastFocus=e.activeElement}})():(()=>{if(n===i)n.lastFocus=void 0;else if("ION-TOAST"===i.tagName)M(n.lastFocus,n);else{const t=o(n);if(!t.contains(i))return;const a=t.querySelector(".ion-overlay-wrapper");if(!a)return;if(a.contains(i)||i===t.querySelector("ion-backdrop"))n.lastFocus=i;else{const t=n.lastFocus;k(a,n),t===e.activeElement&&x(a,n),n.lastFocus=e.activeElement}}})()))})(e,t)}),!0),v((()=>void 0!==Y(t,T))),t.addEventListener("ionBackButton",(e=>{const n=Y(t);n?.backdropDismiss&&e.detail.register(100,(()=>{n.dismiss(void 0,dt)}))})),p()||t.addEventListener("keydown",(e=>{if("Escape"===e.key){const e=Y(t);e?.backdropDismiss&&e.dismiss(void 0,dt)}})))},L=(t,e,n,o,i)=>{const a=Y(t,o,i);return a?a.dismiss(e,n):Promise.reject("overlay does not exist")},V=(t,e)=>((t,e)=>(void 0===e&&(e="ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-popover,ion-toast"),Array.from(t.querySelectorAll(e)).filter((t=>t.overlayIndex>0))))(t,e).filter((t=>!t.classList.contains("overlay-hidden"))),Y=(t,e,n)=>{const o=V(t,e);return(void 0===n?o:o.filter((t=>t.id===n))).slice(-1)[0]},$=()=>X(document).querySelector("ion-router-outlet, #ion-view-container-root"),q=(t=!1)=>{const e=$();e&&(t?e.setAttribute("aria-hidden","true"):e.removeAttribute("aria-hidden"))},F=()=>{"undefined"!=typeof document&&(b(),V(document).some((t=>A(t)))||(q(!1),document.body.classList.remove(m)))},G=t=>{$()?.contains(t)||q(!0),document.body.classList.add(m)},K=t=>{if("undefined"==typeof document)return;b();const e=t;A(e)&&G(e)},z=async(t,e,n,i,a)=>{if(t.presented)return;"ION-TOAST"!==t.el.tagName&&J(t.el);const s=t.el,d=A(s);t.presented=!0,t.willPresent.emit(),d&&G(s),t.willPresentShorthand?.emit();const c=l(t),u=t.enterAnimation?t.enterAnimation:r.get(e,"ios"===c?n:i);if(await Z(t,u,t.el,a)&&(t.didPresent.emit(),t.didPresentShorthand?.emit()),t.keyboardClose&&(null===document.activeElement||!t.el.contains(document.activeElement))){const e=o(t.el).querySelector('[role="dialog"][tabindex]')??t.el;try{e.focus({preventScroll:!0})}catch{e.focus()}}t.el.removeAttribute("aria-hidden"),t.el.removeAttribute("inert")},J=async t=>{let e=document.activeElement;if(!e)return;e.blur();const n=e?.shadowRoot;n&&(e=n.querySelector(g)||e),await t.onDidDismiss(),null!==document.activeElement&&document.activeElement!==document.body||e.focus()},Q=async(t,e,n,o,a,s,c)=>{if(!t.presented)return!1;const u=(void 0!==i?V(i):[]).filter((t=>A(t))),p=t.el;A(p)&&1===u.length&&u[0].id===p.id&&(q(!1),document.body.classList.remove(m)),t.presented=!1;try{t.el.style.setProperty("pointer-events","none"),t.willDismiss.emit({data:e,role:n}),t.willDismissShorthand?.emit({data:e,role:n});const i=l(t),d=t.leaveAnimation?t.leaveAnimation:r.get(o,"ios"===i?a:s);n!==ct&&await Z(t,d,t.el,c),t.didDismiss.emit({data:e,role:n}),t.didDismissShorthand?.emit({data:e,role:n}),(_.get(t)||[]).forEach((t=>t.destroy())),_.delete(t),t.el.classList.add("overlay-hidden"),t.el.style.removeProperty("pointer-events"),void 0!==t.el.lastFocus&&(t.el.lastFocus=void 0)}catch(e){d(`[${t.el.tagName.toLowerCase()}] - `,e)}return t.el.remove(),b(),!0},X=t=>t.querySelector("ion-app")||t.body,Z=async(t,e,n,o)=>{n.classList.remove("overlay-hidden"),b();const i=e(t.el,o);t.animated&&r.getBoolean("animated",!0)||i.duration(0),t.keyboardClose&&i.beforeAddWrite((()=>{const t=n.ownerDocument.activeElement;t?.matches("input,ion-input, ion-textarea")&&t.blur()}));const a=_.get(t)||[];return _.set(t,[...a,i]),await i.play(),!0},tt=(t,e)=>{let n;const o=new Promise((t=>n=t));return et(t,e,(t=>{n(t.detail)})),o},et=(t,e,n)=>{const o=i=>{s(t,e,o),n(i)};a(t,e,o)},nt=t=>"cancel"===t||t===dt,ot=t=>t(),it=(t,e)=>{if("function"==typeof t)return r.get("_zoneGate",ot)((()=>{try{return t(e)}catch(t){throw t}}))},at=["","100%","100vw","100vh","100dvw","100dvh","100svw","100svh"],st=["auto","fit-content","min-content","max-content"],rt=t=>{const e=t.trim().toLowerCase();return at.includes(e)?"fullscreen":st.some((t=>e.endsWith(t)))?"content":"definite"},dt="backdrop",ct="gesture",lt=39,ut=t=>{let e,n=!1;const o=u(),i=(i=!1)=>{if(e&&!i)return{delegate:e,inline:n};const{el:a,hasController:s,delegate:r}=t;return n=null!==a.parentNode&&!s,e=n?r||o:r,{inline:n,delegate:e}};return{attachViewToDom:async e=>{const{delegate:n}=i(!0);if(n)return await n.attachViewToDom(t.el,e);const{hasController:o}=t;if(o&&void 0!==e)throw new Error("framework delegate is missing");return null},removeViewFromDom:()=>{const{delegate:e}=i();e&&void 0!==t.el&&e.removeViewFromDom(t.el.parentElement,t.el)}}},mt=()=>{let t;const e=()=>{t&&(t(),t=void 0)};return{addClickListener:(n,o)=>{e();const i=void 0!==o?document.getElementById(o):null;i?t=((t,e)=>{const n=()=>{e.present()};return t.addEventListener("click",n),()=>{t.removeEventListener("click",n)}})(i,n):c(`[${n.tagName.toLowerCase()}] - A trigger element with the ID "${o}" was not found in the DOM. The trigger element must be in the DOM when the "trigger" property is set on an overlay component.`,n)},removeClickListener:e}},pt="ion-disable-focus-trap";export{dt as B,pt as F,ct as G,w as M,lt as O,N as a,j as b,ut as c,mt as d,z as e,Q as f,tt as g,R as h,nt as i,F as j,S as k,E as l,P as m,rt as n,k as o,W as p,v as q,K as r,it as s,D as t,Y as u,x as v,p as w,b as x,y}