next-active-link
Version:
✅ Active link component for Next.JS, wrapping next/link component
2 lines • 1.96 kB
JavaScript
var y=Object.defineProperty;var h=Object.getOwnPropertySymbols;var P=Object.prototype.hasOwnProperty,d=Object.prototype.propertyIsEnumerable;var A=(t,n,e)=>n in t?y(t,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[n]=e,f=(t,n)=>{for(var e in n||(n={}))P.call(n,e)&&A(t,e,n[e]);if(h)for(var e of h(n))d.call(n,e)&&A(t,e,n[e]);return t};var x=(t,n)=>{var e={};for(var s in t)P.call(t,s)&&n.indexOf(s)<0&&(e[s]=t[s]);if(t!=null&&h)for(var s of h(t))n.indexOf(s)<0&&d.call(t,s)&&(e[s]=t[s]);return e};import R from"next/link";import{Children as j,cloneElement as M}from"react";import{useRouter as O}from"next/router";import{useEffect as U,useState as b}from"react";import{cn as E}from"tiny-cn";var N={fragment:void 0,paths:void 0,queryParams:void 0},g=(t,n,e={exact:!0})=>{let s=new URL(n,location.href),i=new URL(t,location.href);if("exact"in e)return e.exact?s.href===i.href:s.href.includes(i.pathname);{let r=!1,{fragment:p,paths:c,queryParams:m}=f(f({},N),e);if(p&&(r=s.hash===i.hash),c){let a=s.pathname.split("/"),o=i.pathname.split("/");r=c==="exact"?s.pathname===i.pathname:a.some(l=>o.includes(l))}if(m){let a=Object.fromEntries(s.searchParams.entries()),o=Object.fromEntries(i.searchParams.entries());r=m==="exact"?s.search===i.search:Object.entries(a).some(([l,u])=>o[l]===u)}return r}};var C=({activeClassName:t,childClassName:n,linkUrl:e,activeMatchOptions:s,onActiveChange:i})=>{let[r,p]=b(n),{asPath:c,isReady:m}=O();return U(()=>{if(m){let a=g(e,c,s);i&&i(a);let o=E({[n]:!0,[t]:a});o!==r&&p(o)}},[c,m,e,n,t,p,r]),r};var w=s=>{var i=s,{children:t,activeClassName:n}=i,e=x(i,["children","activeClassName"]);var v;let r=j.only(t),p=(v=r.props.className)!=null?v:"",{as:c,href:m,activeMatchOptions:a,onActiveChange:o}=e,u=C({activeClassName:n,childClassName:p,linkUrl:c||m,activeMatchOptions:a,onActiveChange:o});return React.createElement(R,f({},e),M(r,{className:u||null}))};export{w as ActiveLink};
//# sourceMappingURL=index.mjs.map