UNPKG

@ionic/core

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