UNPKG

@vavt/util

Version:
2 lines (1 loc) 4.75 kB
(function(i,u){typeof exports=="object"&&typeof module<"u"?u(exports):typeof define=="function"&&define.amd?define(["exports"],u):(i=typeof globalThis<"u"?globalThis:i||self,u(i.VavtUtil={}))})(this,function(i){"use strict";const u=e=>{const n=typeof e;return n!=="function"&&n!=="object"||e===null},M=e=>{const n=e.flags===""?void 0:e.flags;return new RegExp(e.source,n)},f=(e,n=new WeakMap)=>{if(e===null||u(e))return e;if(n.has(e))return n.get(e);if(e instanceof RegExp)return M(e);if(e instanceof Date)return new Date(e.getTime());if(e instanceof Function)return e;if(e instanceof Map){const o=new Map;return n.set(e,o),e.forEach((r,c)=>{o.set(c,f(r,n))}),o}if(e instanceof Set){const o=new Set;n.set(e,o);for(const r of e)o.add(f(r,n));return o}if(Array.isArray(e)){const o=[];return n.set(e,o),e.forEach(r=>{o.push(f(r,n))}),o}const t={};n.set(e,t);for(const o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=f(e[o],n));return t},k=(e,n=200)=>{let t=0;return(...o)=>new Promise(r=>{t&&(clearTimeout(t),r("cancel")),t=window.setTimeout(()=>{e.apply(void 0,o),t=0,r("done")},n)})},R=(e,n={_blank:!0,nofollow:!0})=>{const t=document.createElement("a");t.href=e,n._blank&&(t.target="_blank"),n.nofollow&&(t.rel="noopener noreferrer"),t.click()},C=(e,n="")=>{const t=document.createElement("a");t.setAttribute("href",e),t.setAttribute("download",n),t.click()},w=()=>{let e=-1;return(t,o,r,c=100)=>{const s=()=>{r&&(typeof c=="number"?setTimeout(r,c):r())};e!==-1&&(cancelAnimationFrame(e),s());let l=t.scrollTop;const a=()=>{e=-1;const m=o-l;l=l+m/5,Math.abs(m)<1?(t.scrollTo(0,o),s()):(t.scrollTo(0,l),e=requestAnimationFrame(a))};e=requestAnimationFrame(a)}},_=w(),O=(e,n=200)=>{let t=0,o=null;const r=c=>{t===0&&(t=c),c-t>=n?(e.apply(void 0,o),o=null,t=0):window.requestAnimationFrame(r)};return(...c)=>{o===null&&window.requestAnimationFrame(r),o=c}},L=(e,n=!0)=>{if(!e)return{};const t={};return e.replace(/^\?/,"").split("&").forEach(o=>{const[r,c]=o.split("=");if(r){const s=n?decodeURIComponent(r):r,l=n?decodeURIComponent(c):c;t[s]!==void 0?(Array.isArray(t[s])||(t[s]=[t[s]]),t[s].push(l)):t[s]=l}}),t},b=(e,n=!0)=>e?Object.keys(e).map(t=>{const o=n?encodeURIComponent(t):t;if(Array.isArray(e[t]))return e[t].map(r=>{const c=n?encodeURIComponent(r):r;return`${o}=${c}`}).join("&");{const r=n?encodeURIComponent(e[t]):e[t];return`${o}=${r}`}}).join("&"):"",F=(e,n,t="asc")=>e.sort((o,r)=>{const c=n(o),s=n(r);return c===void 0&&s!==void 0||c===null&&s!==void 0?t==="asc"?-1:1:c==null&&s===void 0||s==null?t==="asc"?1:-1:p(c)&&p(s)?t=="asc"?c-s:s-c:t=="asc"?String(c).localeCompare(String(s),void 0,{numeric:!0}):String(s).localeCompare(String(c),void 0,{numeric:!0})}),P=e=>{const n=t=>{const{scrollHeight:o,scrollWidth:r,offsetHeight:c,offsetWidth:s,scrollLeft:l,scrollTop:a}=e,m=t.x,W=t.y,v=E=>{const A=a+W-E.y,S=l+m-E.x,K=o-c,q=r-s,h={};S>=0&&S<=q&&(h.left=S),A>=0&&A<=K&&(h.top=A),e.scroll(h)};document.addEventListener("mousemove",v);const T=()=>{document.removeEventListener("mousemove",v),document.removeEventListener("mouseup",T)};document.addEventListener("mouseup",T)};return e.addEventListener("mousedown",n),()=>{e.removeEventListener("mousedown",n)}},U=()=>`${Date.now().toString(36)}${Math.random().toString(36).substring(2)}`,p=e=>{if(e==null||["boolean","symbol"].includes(typeof e)||/^\s*$/.test(e.toString()))return!1;const n=Number(e);return!isNaN(n)&&isFinite(n)},d=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),$=new Set(["__proto__","constructor","prototype"]),N=e=>!$.has(e),y=(e,n,t={})=>{if(Array.isArray(e)&&Array.isArray(n))return g(e,n,t);const{excludeKeys:o}=t,r=e,c=n;for(const s of Object.keys(c)){if(!N(s))continue;const l=c[s],a=r[s];o&&o(s)?r[s]=l:Array.isArray(l)&&Array.isArray(a)?r[s]=g(a,l,t):d(l)&&d(a)?r[s]=y(a,l,t):r[s]=l}return e},g=(e,n,t)=>{const o=e.slice();return n.forEach((r,c)=>{const s=o[c];Array.isArray(r)&&Array.isArray(s)?o[c]=g(s,r,t):d(r)&&d(s)?o[c]=y(s,r,t):o[c]=r}),o},H=(e,n=document.body)=>{let t=e.offsetParent,o=e.offsetTop,r=e.offsetLeft;for(;t!==null&&t!==n;)o+=t.offsetTop,r+=t.offsetLeft,t=t.offsetParent;return{offsetTop:o,offsetLeft:r}},V=(e={})=>{const{forceScreenWidth:n=!1,threshold:t=768,fallbackToScreenWidth:o=!0}=e,r=navigator.userAgent,c=/android|ipad|iphone|ipod|windows phone|blackberry/i.test(r),s="ontouchstart"in window||navigator.maxTouchPoints>0,l=window.matchMedia(`(max-width: ${t}px)`).matches;return n?l:c&&s?!0:o?l:!1};i.createSmoothScroll=w,i.debounce=k,i.deepClone=f,i.deepMerge=y,i.download=C,i.draggingScroll=P,i.getRootOffset=H,i.isMobile=V,i.isNumber=p,i.isPrimitive=u,i.linkTo=R,i.objToSearch=b,i.objectSort=F,i.randomId=U,i.searchToObj=L,i.smoothScroll=_,i.throttle=O,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})});