UNPKG

@ionic/core

Version:
4 lines • 4.9 kB
/*! * (C) Ionic http://ionicframework.com - MIT License */ import{f as o,m as t,w as n,n as i,c as e}from"./p-Co7eql8D.js";import{g as r,h as a,a as s}from"./p-CXs4J83x.js";import{a as d,K as c}from"./p-BY4FwwBp.js";import"./p-BpRUsN_W.js";import"./p-Dojwmvde.js";import"./p-C2LaBx3E.js";const l=new WeakMap,u=(o,t,n,i=0,e=!1)=>{l.has(o)!==n&&(n?f(o,t,i,e):w(o,t))},f=(o,t,n,i=!1)=>{const e=t.parentNode,r=t.cloneNode(!1);r.classList.add("cloned-input"),r.tabIndex=-1,i&&(r.disabled=!0);const a="rtl"===o.ownerDocument.dir;r.style.insetInlineStart=a?e.offsetWidth-t.offsetLeft-t.offsetWidth+"px":`${t.offsetLeft}px`,e.appendChild(r),l.set(o,r);const s=a?9999:-9999;o.style.pointerEvents="none",t.style.transform=`translate3d(${s}px,${n}px,0) scale(0)`},w=(o,t)=>{const n=l.get(o);n&&(l.delete(o),n.remove()),o.style.pointerEvents="",t.style.transform=""},p="input, textarea, [no-blur], [contenteditable]",m="$ionPaddingTimer",h=(o,t,n)=>{const i=o[m];i&&clearTimeout(i),t>0?o.style.setProperty("--keyboard-offset",`${t}px`):o[m]=setTimeout((()=>{o.style.setProperty("--keyboard-offset","0px"),n&&n()}),120)},y=(o,t,n)=>{o.addEventListener("focusout",(()=>{t&&h(t,0,n)}),{once:!0})};let S=0;const b="data-ionic-skip-scroll-assist",D=o=>{if(document.activeElement===o)return;const t=o.getAttribute("id"),n=o.closest(`label[for="${t}"]`),i=document.activeElement?.closest(`label[for="${t}"]`);null!==n&&n===i||(o.setAttribute(b,"true"),o.focus())},x=async(o,t,n,i,e,s,d=!1,c=0,l=!0)=>{if(!n&&!i)return;const f=((o,t,n,i)=>((o,t,n,i)=>{const e=o.top,r=o.bottom,a=t.top,s=a+15,d=Math.min(t.bottom,i-n)-50-r,c=s-e,l=Math.round(d<0?-d:c>0?-c:0),u=Math.min(l,e-a),f=Math.abs(u);return{scrollAmount:u,scrollDuration:Math.min(400,Math.max(150,f/.3)),scrollPadding:n,inputSafeY:4-(e-s)}})((o.closest("ion-item,[ion-item]")??o).getBoundingClientRect(),t.getBoundingClientRect(),n,i))(o,n||i,e,c);if(n&&Math.abs(f.scrollAmount)<4)return D(t),void(s&&null!==n&&(h(n,S),y(t,n,(()=>S=0))));if(u(o,t,!0,f.inputSafeY,d),D(t),s&&n&&(S=f.scrollPadding,h(n,S)),"undefined"!=typeof window){let i;const e=async()=>{void 0!==i&&clearTimeout(i),window.removeEventListener("ionKeyboardDidShow",d),window.removeEventListener("ionKeyboardDidShow",e),n&&await a(n,0,f.scrollAmount,f.scrollDuration),u(o,t,!1,f.inputSafeY),document.activeElement===t&&D(t),s&&y(t,n,(()=>S=0))},d=()=>{window.removeEventListener("ionKeyboardDidShow",d),window.addEventListener("ionKeyboardDidShow",e)};if(n){const o=await r(n);if(l&&f.scrollAmount>o.scrollHeight-o.clientHeight-o.scrollTop)return"password"===t.type?(f.scrollAmount+=50,window.addEventListener("ionKeyboardDidShow",d)):window.addEventListener("ionKeyboardDidShow",e),void(i=setTimeout(e,1e3))}e()}},K=async(r,a)=>{if(void 0===i)return;const l="ios"===a,f="android"===a,w=r.getNumber("keyboardHeight",290),m=r.getBoolean("scrollAssist",!0),h=r.getBoolean("hideCaretOnScroll",l),y=r.getBoolean("inputBlurring",!1),S=r.getBoolean("scrollPadding",!0),D=Array.from(i.querySelectorAll("ion-input, ion-textarea")),K=new WeakMap,M=new WeakMap,v=await c.getResizeMode(),j=async i=>{await new Promise((o=>e(i,o)));const r=i.shadowRoot||i,a=r.querySelector("input")||r.querySelector("textarea"),c=s(i),l=c?null:i.closest("ion-footer");if(a){if(c&&h&&!K.has(i)){const n=((n,i,e)=>{if(!e||!i)return()=>{};const r=o=>{var t;(t=i)===t.getRootNode().activeElement&&u(n,i,o)},a=()=>u(n,i,!1),s=()=>r(!0),d=()=>r(!1);return o(e,"ionScrollStart",s),o(e,"ionScrollEnd",d),i.addEventListener("blur",a),()=>{t(e,"ionScrollStart",s),t(e,"ionScrollEnd",d),i.removeEventListener("blur",a)}})(i,a,c);K.set(i,n)}if("date"!==a.type&&"datetime-local"!==a.type&&(c||l)&&m&&!M.has(i)){const o=((o,t,i,e,r,a,s,c=!1)=>{const l=a&&(void 0===s||s.mode===d.None);let u=!1;const f=void 0!==n?n.innerHeight:0,w=n=>{!1!==u?x(o,t,i,e,n.detail.keyboardHeight,l,c,f,!1):u=!0},p=()=>{u=!1,n?.removeEventListener("ionKeyboardDidShow",w),o.removeEventListener("focusout",p)},m=async()=>{t.hasAttribute(b)?t.removeAttribute(b):(x(o,t,i,e,r,l,c,f),n?.addEventListener("ionKeyboardDidShow",w),o.addEventListener("focusout",p))};return o.addEventListener("focusin",m),()=>{o.removeEventListener("focusin",m),n?.removeEventListener("ionKeyboardDidShow",w),o.removeEventListener("focusout",p)}})(i,a,c,l,w,S,v,f);M.set(i,o)}}};y&&(()=>{let t=!0,n=!1;const i=document;o(i,"ionScrollStart",(()=>{n=!0})),i.addEventListener("focusin",(()=>{t=!0}),!0),i.addEventListener("touchend",(o=>{if(n)return void(n=!1);const e=i.activeElement;if(!e)return;if(e.matches(p))return;const r=o.target;r!==e&&(r.matches(p)||r.closest(p)||(t=!1,setTimeout((()=>{t||e.blur()}),50)))}),!1)})();for(const o of D)j(o);i.addEventListener("ionInputDidLoad",(o=>{j(o.detail)})),i.addEventListener("ionInputDidUnload",(o=>{(o=>{if(h){const t=K.get(o);t&&t(),K.delete(o)}if(m){const t=M.get(o);t&&t(),M.delete(o)}})(o.detail)}))};export{K as startInputShims}