UNPKG

@ionic/core

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