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