react-mdxutils
Version:
Utilities for MDX content, including anchor extraction.
2 lines (1 loc) • 2.34 kB
JavaScript
var M=Object.create;var h=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var w=(e,t)=>{for(var n in t)h(e,n,{get:t[n],enumerable:!0})},x=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of A(t))!k.call(e,r)&&r!==n&&h(e,r,{get:()=>t[r],enumerable:!(i=R(t,r))||i.enumerable});return e};var v=(e,t,n)=>(n=e!=null?M($(e)):{},x(t||!e||!e.__esModule?h(n,"default",{value:e,enumerable:!0}):n,e)),C=e=>x(h({},"__esModule",{value:!0}),e);var B={};w(B,{generateTocFromMdx:()=>S,useActiveHeading:()=>q});module.exports=C(B);var H=require("unified"),y=v(require("remark-parse")),E=v(require("github-slugger")),L=require("mdast-util-toc");function F(e){let t=new E.default,n=(0,L.toc)(e),i=[];function r(l,u){l.type==="list"&&l.children.forEach(o=>{let f=o.children?.[0]?.children?.[0]?.children?.[0]?.value||"";if(f&&u>1){let a=t.slug(f);i.push({content:f,slug:a,level:u})}let c=o.children?.find(a=>a.type==="list");c&&r(c,u+1)})}return n.map&&r(n.map,1),i}var S=e=>{let t=(0,H.unified)().use(y.default).parse(e);return F(t)};var s=require("react"),q=e=>{let[t,n]=(0,s.useState)(""),i=(0,s.useRef)({}),r=(0,s.useRef)(null),l=(0,s.useRef)(null),u=(0,s.useCallback)((o,m)=>{n(m||""),!(!r.current||!o)&&requestAnimationFrame(()=>{r.current.style.height=`${o.offsetHeight}px`,r.current.style.top=`${o.offsetTop}px`,r.current.style.width=`${o.offsetWidth}px`,r.current.style.left=`${o.offsetLeft}px`})},[]);return(0,s.useEffect)(()=>{if(!e)return;let o=setTimeout(()=>{let m=document.querySelectorAll("h2[id], h3[id], h4[id], h5[id], h6[id]"),f=new IntersectionObserver(c=>{let a=c.filter(T=>T.isIntersecting);if(a.length>0){let p=a.sort((g,d)=>g.target.getBoundingClientRect().top-d.target.getBoundingClientRect().top)?.[0]?.target.id;if(p&&i.current){let g=i.current[p];if(l.current&&g){let d=l.current,I=g.offsetTop,b=g.offsetHeight;d.scrollTo({top:I-d.clientHeight/2+b/2,behavior:"smooth"})}u(g,`#${p}`)}}},{rootMargin:"0px 0px -90% 0px",threshold:.2});return m.forEach(c=>f.observe(c)),()=>{m.forEach(c=>f.unobserve(c))}},100);return()=>clearTimeout(o)},[e]),{activeHeading:t,handleActiveHeading:u,headingListRefs:i,activeIndicatorRef:r,asideRef:l}};0&&(module.exports={generateTocFromMdx,useActiveHeading});
;