UNPKG

@ionic/core

Version:
4 lines • 7.61 kB
/*! * (C) Ionic http://ionicframework.com - MIT License */ import{d as n}from"./p-ZjP4CjeZ.js";import{n as o,c as e,f as t,m as i,g as a}from"./p-CTfR9YZG.js";import{OVERLAY_BACK_BUTTON_PRIORITY as r,shouldUseCloseWatcher as s}from"./p-B0q1YL7N.js";import{e as d,j as l,f as c}from"./p-C8IsBmNU.js";import{b as u}from"./p-BFvmZNyx.js";import{C as m}from"./p-D-eFFUkA.js";import{B as p}from"./p-BTEOs1at.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])',f=(n,o)=>{const e=n.querySelector(v);b(e,null!=o?o:n)},h=(n,o)=>{const e=Array.from(n.querySelectorAll(v));b(e.length>0?e[e.length-1]:null,null!=o?o:n)},b=(n,e)=>{let t=n;const i=null==n?void 0:n.shadowRoot;if(i&&(t=i.querySelector(v)||n),t){const n=t.closest("ion-radio-group");n?n.setFocus():o(t)}else e.focus()};let y=0,w=0;const g=new WeakMap,O=n=>{var o;return!1!==n.showBackdrop&&!((null!==(o=n.backdropBreakpoint)&&void 0!==o?o:0)>0)},T=n=>({create:o=>S(n,o),dismiss:(o,e,t)=>Z(document,o,e,n,t),getTop:async()=>G(document,n)}),k=T("ion-alert"),x=T("ion-action-sheet"),j=T("ion-loading"),A=T("ion-modal"),C=T("ion-picker-legacy"),N=T("ion-popover"),B=T("ion-toast"),I=n=>{"undefined"!=typeof document&&P(document);const o=y++;n.overlayIndex=o},D=n=>(n.hasAttribute("id")||(n.id="ion-overlay-"+ ++w),n.id),S=(n,o)=>"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,Object.assign(Object.assign({},o),{hasController:!0})),U(document).appendChild(t),new Promise((n=>e(t,n)))})):Promise.resolve(),F=(n,e)=>{let t=n;const i=null==n?void 0:n.shadowRoot;i&&(t=i.querySelector(v)||n),t?o(t):e.focus()},P=n=>{0===y&&(y=1,n.addEventListener("focus",(o=>{((n,o)=>{const e=G(o,"ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker-legacy,ion-popover"),t=n.target;e&&t&&(e.classList.contains(nn)||(e.shadowRoot?(()=>{if(e.contains(t))e.lastFocus=t;else if("ION-TOAST"===t.tagName)F(e.lastFocus,e);else{const n=e.lastFocus;f(e),n===o.activeElement&&h(e),e.lastFocus=o.activeElement}})():(()=>{if(e===t)e.lastFocus=void 0;else if("ION-TOAST"===t.tagName)F(e.lastFocus,e);else{const n=a(e);if(!n.contains(t))return;const i=n.querySelector(".ion-overlay-wrapper");if(!i)return;if(i.contains(t)||t===n.querySelector("ion-backdrop"))e.lastFocus=t;else{const n=e.lastFocus;f(i,e),n===o.activeElement&&h(i,e),e.lastFocus=o.activeElement}}})()))})(o,n)}),!0),n.addEventListener("ionBackButton",(o=>{const e=G(n);(null==e?void 0:e.backdropDismiss)&&o.detail.register(r,(()=>{e.dismiss(void 0,H)}))})),s()||n.addEventListener("keydown",(o=>{if("Escape"===o.key){const o=G(n);(null==o?void 0:o.backdropDismiss)&&o.dismiss(void 0,H)}})))},Z=(n,o,e,t,i)=>{const a=G(n,t,i);return a?a.dismiss(o,e):Promise.reject("overlay does not exist")},E=(n,o)=>((n,o)=>(void 0===o&&(o="ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker-legacy,ion-popover,ion-toast"),Array.from(n.querySelectorAll(o)).filter((n=>n.overlayIndex>0))))(n,o).filter((n=>!n.classList.contains("overlay-hidden"))),G=(n,o,e)=>{const t=E(n,o);return(void 0===e?t:t.filter((n=>n.id===e))).slice(-1)[0]},L=(n=!1)=>{const o=U(document).querySelector("ion-router-outlet, #ion-view-container-root");o&&(n?o.setAttribute("aria-hidden","true"):o.removeAttribute("aria-hidden"))},M=async(n,o,e,t,i)=>{var a,r;if(n.presented)return;"ION-TOAST"!==n.el.tagName&&$(n.el);const s=n.el,l="ION-TOAST"!==s.tagName&&!1!==s.focusTrap&&O(s);if(n.presented=!0,n.willPresent.emit(),l){const n=U(document).querySelector("ion-router-outlet, #ion-view-container-root");!!n&&n.contains(s)||L(!0),document.body.classList.add(p)}null===(a=n.willPresentShorthand)||void 0===a||a.emit();const c=u(n),m=n.enterAnimation?n.enterAnimation:d.get(o,"ios"===c?e:t);await V(n,m,n.el,i)&&(n.didPresent.emit(),null===(r=n.didPresentShorthand)||void 0===r||r.emit()),!n.keyboardClose||null!==document.activeElement&&n.el.contains(document.activeElement)||n.el.focus(),n.el.removeAttribute("aria-hidden"),n.el.removeAttribute("inert")},$=async n=>{let o=document.activeElement;if(!o)return;o.blur();const e=null==o?void 0:o.shadowRoot;e&&(o=e.querySelector(v)||o),await n.onDidDismiss(),null!==document.activeElement&&document.activeElement!==document.body||o.focus()},q=async(o,e,t,i,a,r,s)=>{var c,m;if(!o.presented)return!1;const v=(void 0!==n?E(n):[]).filter((n=>"ION-TOAST"!==n.tagName&&!1!==n.focusTrap&&O(n))),f=o.el;"ION-TOAST"!==f.tagName&&!1!==f.focusTrap&&O(f)&&1===v.length&&v[0].id===f.id&&(L(!1),document.body.classList.remove(p)),o.presented=!1;try{o.el.style.setProperty("pointer-events","none"),o.willDismiss.emit({data:e,role:t}),null===(c=o.willDismissShorthand)||void 0===c||c.emit({data:e,role:t});const n=u(o),l=o.leaveAnimation?o.leaveAnimation:d.get(i,"ios"===n?a:r);t!==J&&await V(o,l,o.el,s),o.didDismiss.emit({data:e,role:t}),null===(m=o.didDismissShorthand)||void 0===m||m.emit({data:e,role:t}),(g.get(o)||[]).forEach((n=>n.destroy())),g.delete(o),o.el.classList.add("overlay-hidden"),o.el.style.removeProperty("pointer-events"),void 0!==o.el.lastFocus&&(o.el.lastFocus=void 0)}catch(n){l(`[${o.el.tagName.toLowerCase()}] - `,n)}return o.el.remove(),!0},U=n=>n.querySelector("ion-app")||n.body,V=async(n,o,e,t)=>{e.classList.remove("overlay-hidden");const i=o(n.el,t);n.animated&&d.getBoolean("animated",!0)||i.duration(0),n.keyboardClose&&i.beforeAddWrite((()=>{const n=e.ownerDocument.activeElement;(null==n?void 0:n.matches("input,ion-input, ion-textarea"))&&n.blur()}));const a=g.get(n)||[];return g.set(n,[...a,i]),await i.play(),!0},Y=(n,o)=>{let e;const t=new Promise((n=>e=n));return z(n,o,(n=>{e(n.detail)})),t},z=(n,o,e)=>{const a=t=>{i(n,o,a),e(t)};t(n,o,a)},R=n=>"cancel"===n||n===H,W=n=>n(),_=(n,o)=>{if("function"==typeof n)return d.get("_zoneGate",W)((()=>{try{return n(o)}catch(n){throw n}}))},H="backdrop",J="gesture",K=39,Q=n=>{let o,e=!1;const t=m(),i=(i=!1)=>{if(o&&!i)return{delegate:o,inline:e};const{el:a,hasController:r,delegate:s}=n;return e=null!==a.parentNode&&!r,o=e?s||t:s,{inline:e,delegate:o}};return{attachViewToDom:async o=>{const{delegate:e}=i(!0);if(e)return await e.attachViewToDom(n.el,o);const{hasController:t}=n;if(t&&void 0!==o)throw new Error("framework delegate is missing");return null},removeViewFromDom:()=>{const{delegate:o}=i();o&&void 0!==n.el&&o.removeViewFromDom(n.el.parentElement,n.el)}}},X=()=>{let n;const o=()=>{n&&(n(),n=void 0)};return{addClickListener:(e,t)=>{o();const i=void 0!==t?document.getElementById(t):null;i?n=((n,o)=>{const e=()=>{o.present()};return n.addEventListener("click",e),()=>{n.removeEventListener("click",e)}})(i,e):c(`[${e.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.`,e)},removeClickListener:o}},nn="ion-disable-focus-trap";export{H as B,nn as F,J as G,K as O,k as a,x as b,N as c,Q as d,X as e,M as f,q as g,Y as h,R as i,I as j,D as k,j as l,A as m,f as n,G as o,C as p,h as q,_ as s,B as t}