boltdocs 2.7.5 → 2.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ const e=require(`./icons-dev-BlV3wWFT.cjs`);let t=require(`react-router-dom`),n=require(`react`);n=e.rt(n);let r=require(`react/jsx-runtime`),i=require(`react-aria-components`);i=e.rt(i);let a=require(`virtual:boltdocs-icons`);a=e.rt(a);let o=require(`scroll-into-view-if-needed`);o=e.rt(o);const s=({children:t,className:n,...a})=>(0,r.jsx)(i.Breadcrumbs,{className:e.y(`flex flex-wrap items-center`,n),...a,children:t});s.Root=s,s.Item=({children:t,className:n,...a})=>(0,r.jsx)(i.Breadcrumb,{className:e.y(`flex items-center`,n),...a,children:t}),s.Link=({children:t,href:n,className:i,...a})=>(0,r.jsx)(e._,{href:n,className:e.y(`cursor-pointer`,i),...a,children:t}),s.Separator=({className:t})=>(0,r.jsx)(e.D,{size:14,className:e.y(`shrink-0`,t)});const c=({...e})=>(0,r.jsx)(i.Button,{...e}),l=({children:t,className:n,vertical:i=!1})=>(0,r.jsx)(`div`,{className:e.y(`inline-flex`,i?`flex-col`:`flex-row`,!i&&[`[&>*:not(:first-child)]:-ml-px`,`[&>*:first-child]:rounded-r-none`,`[&>*:last-child]:rounded-l-none`,`[&>*:not(:first-child):not(:last-child)]:rounded-none`,n?.includes(`rounded-full`)&&[`[&>*:first-child]:rounded-l-full`,`[&>*:last-child]:rounded-r-full`],n?.includes(`rounded-xl`)&&[`[&>*:first-child]:rounded-l-xl`,`[&>*:last-child]:rounded-r-xl`],n?.includes(`rounded-lg`)&&[`[&>*:first-child]:rounded-l-lg`,`[&>*:last-child]:rounded-r-lg`]],i&&[`[&>*:not(:first-child)]:-mt-px`,`[&>*:first-child]:rounded-b-none`,`[&>*:last-child]:rounded-t-none`,`[&>*:not(:first-child):not(:last-child)]:rounded-none`,n?.includes(`rounded-full`)&&[`[&>*:first-child]:rounded-t-full`,`[&>*:last-child]:rounded-b-full`]],n),children:t}),u=({children:t,className:n,...a})=>(0,r.jsx)(i.Popover,{offset:8,className:e.y(`z-50 overflow-auto outline-none transition-none`,n),...a,children:t});function d({placement:e,className:t,...a}){let[o,s]=n.Children.toArray(a.children).slice(0,2);return(0,r.jsxs)(i.MenuTrigger,{...a,children:[o,(0,r.jsx)(u,{placement:e,className:t,children:s})]})}function f({className:e,...t}){let[a,o]=n.Children.toArray(t.children).slice(0,2);return(0,r.jsxs)(i.SubmenuTrigger,{...t,children:[a,(0,r.jsx)(u,{offset:-4,crossOffset:-4,className:e,children:o})]})}function p(t){return(0,r.jsx)(i.Menu,{...t,className:i.composeRenderProps(t.className,t=>e.y(`outline-none overflow-auto`,t))})}function m(t){let n=t.textValue||(typeof t.children==`string`?t.children:void 0);return(0,r.jsx)(i.MenuItem,{...t,textValue:n,className:i.composeRenderProps(t.className,t=>e.y(`group relative flex flex-row items-center cursor-default outline-none`,t)),children:i.composeRenderProps(t.children,(t,{selectionMode:n,isSelected:i,hasSubmenu:a})=>(0,r.jsxs)(r.Fragment,{children:[n===`multiple`&&(0,r.jsx)(`span`,{className:`flex items-center shrink-0 justify-center`,children:i&&(0,r.jsx)(e.w,{className:`size-3.5`})}),(0,r.jsx)(`div`,{className:`flex flex-row w-full items-center`,children:t}),a&&(0,r.jsx)(e.D,{className:`size-4 ml-auto`})]}))})}function ee({title:t,...n}){return(0,r.jsxs)(i.MenuSection,{...n,className:e.y(`flex flex-col`,n.className),children:[t&&(0,r.jsx)(i.Header,{className:`select-none`,children:t}),(0,r.jsx)(i.Collection,{items:n.items,children:n.children})]})}function te(t){return(0,r.jsx)(i.Separator,{...t,className:e.y(`border-t`,t.className)})}p.Root=p,p.Item=m,p.Trigger=d,p.SubTrigger=f,p.Section=ee,p.Separator=te;var ne=class extends n.Component{state={hasError:!1,error:null};static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error(`ErrorBoundary caught an unhandled error:`,e,t)}resetErrorBoundary=()=>{this.props.onReset&&this.props.onReset(),this.setState({hasError:!1,error:null})};render(){let{hasError:e,error:t}=this.state,{children:n,fallback:i,FallbackComponent:a}=this.props;return e&&t?a?(0,r.jsx)(a,{error:t,resetErrorBoundary:this.resetErrorBoundary}):i||(0,r.jsx)(h,{error:t,resetErrorBoundary:this.resetErrorBoundary}):n}};function h({error:e,resetErrorBoundary:t}){return(0,r.jsxs)(`div`,{className:`flex flex-col items-center justify-center min-h-[40vh] text-center gap-4 px-6 py-8 border border-subtle bg-surface rounded-2xl max-w-lg mx-auto shadow-xs`,children:[(0,r.jsx)(`div`,{className:`text-lg font-bold text-rose-600 dark:text-rose-400`,children:`Something went wrong`}),(0,r.jsx)(`p`,{className:`text-sm text-muted max-w-sm leading-relaxed`,children:e?.message||`An unexpected error occurred while rendering this page.`}),(0,r.jsx)(c,{className:`rounded-xl border border-subtle bg-main px-6 py-2.5 text-xs font-semibold text-body hover:bg-primary-50/50 hover:border-primary-500/50 transition-all duration-300 cursor-pointer outline-none select-none`,onPress:t,children:`Try again`})]})}const g=({children:t,className:n=``,...i})=>(0,r.jsx)(`div`,{className:e.y(`w-full`,n),...i,children:t});g.Root=g,g.List=({children:t,className:n=``})=>(0,r.jsx)(`div`,{role:`tablist`,className:e.y(`relative flex flex-row items-center`,n),children:t}),g.Item=({children:t,id:n,selected:i,className:a=``,...o})=>(0,r.jsx)(`button`,{role:`tab`,"aria-selected":i,"data-selected":i,className:e.y(`outline-none cursor-pointer bg-transparent border-none`,a),...o,children:t}),g.Content=({children:t,className:n=``})=>(0,r.jsx)(`div`,{className:e.y(`outline-none`,n),children:t}),g.Indicator=({className:t=``,style:n})=>(0,r.jsx)(`div`,{className:e.y(`absolute bottom-0`,t),style:n});const _=(0,n.createContext)(void 0);function v({children:e}){let[i,a]=(0,n.useState)(!1),o=(0,t.useLocation)();return(0,n.useEffect)(()=>{a(!1)},[o.pathname]),(0,r.jsx)(_.Provider,{value:{isSidebarOpen:i,toggleSidebar:()=>a(e=>!e),closeSidebar:()=>a(!1)},children:e})}function y(){let e=(0,n.useContext)(_);return e===void 0?{isSidebarOpen:!1,toggleSidebar:()=>{},closeSidebar:()=>{}}:e}function b(e){return e.startsWith(`#`)?e.slice(1):null}var x=class{items=[];single=!1;observer=null;onChange;callback(e){for(let e of this.items){let t=document.getElementById(e.id);if(!t){e.active=!1,e.fallback=!1;continue}let n=t.getBoundingClientRect(),r=typeof window<`u`?window.innerHeight:1e3,i=n.bottom>0&&n.top<r;e.active=i,e.fallback=!i&&n.top>0&&n.top<r*2}if(this.single){let e=-1,t=this.items.map((e,t)=>({item:e,idx:t})).filter(({item:e})=>e.active);if(t.length>0)e=t[0].idx;else{let t=this.items.map((e,t)=>({item:e,idx:t})).filter(({item:e})=>e.fallback);t.length>0?e=t[0].idx:this.items.length>0&&(e=0)}this.items=this.items.map((t,n)=>({...t,active:n===e,t:n===e?Date.now():t.t}))}else this.items=this.items.map((e,t)=>({...e,active:e.active,t:e.active?Date.now():e.t}));this.onChange?.()}setItems(e){let t=this.observer;if(t)for(let e of this.items){let n=document.getElementById(e.id);n&&t.unobserve(n)}this.items=[];for(let t of e){let e=b(t.url);e&&this.items.push({id:e,active:!1,fallback:!1,t:0,original:t})}this.watchItems(),typeof window<`u`&&(setTimeout(()=>this.watchItems(),100),setTimeout(()=>this.watchItems(),500),setTimeout(()=>this.watchItems(),1e3)),this.onChange?.()}watch(e){this.observer||(this.observer=new IntersectionObserver(this.callback.bind(this),e),this.watchItems())}watchItems(){if(this.observer)for(let e of this.items){let t=document.getElementById(e.id);t&&this.observer.observe(t)}}unwatch(){this.observer?.disconnect(),this.observer=null}};const S=(0,n.createContext)(null),C=(0,n.createContext)(null);function w(){let e=(0,n.use)(S);if(!e)throw Error(`Component must be used under the <AnchorProvider /> component.`);return e}function T(){let e=w();return(0,n.useMemo)(()=>{let t;for(let n of e)n.active&&(!t||n.t>t.t)&&(t=n);return t?.id},[e])}function E(){let e=w();return(0,n.useMemo)(()=>{let t=[];for(let n of e)n.active&&t.push(n.id);return t},[e])}function D({containerRef:e,children:t}){return(0,r.jsx)(C.Provider,{value:e,children:t})}function O({toc:e,single:t=!1,observerOptions:i,children:a}){let o=(0,n.useMemo)(()=>new x,[]),[s,c]=(0,n.useState)(o.items);return o.single=t,(0,n.useEffect)(()=>{o.setItems(e)},[o,e]),(0,n.useEffect)(()=>{let e={rootMargin:`-80px 0% -60% 0%`,threshold:0},t=i?{...e,...i}:e;return o.watch(t),o.onChange=()=>c([...o.items]),()=>{o.unwatch()}},[o]),(0,r.jsx)(S.Provider,{value:s,children:a})}const k=({children:t,className:n})=>(0,r.jsx)(`nav`,{className:e.y(`sticky top-navbar hidden xl:flex flex-col shrink-0`,`w-toc`,`py-4 pl-6 pr-4`,n),children:t}),re=({children:t,className:n,...i})=>(0,r.jsx)(`div`,{className:e.y(`mb-4 text-xs font-bold text-body`,n),...i,children:t}),A=({children:t,className:i,ref:a,...o})=>{let s=(0,n.useRef)(null);return(0,n.useImperativeHandle)(a,()=>s.current),(0,r.jsx)(`div`,{ref:s,className:e.y(`relative overflow-y-auto boltdocs-otp-content pb-12`,`max-h-[70%]`,i),style:{maskImage:`linear-gradient(to bottom, black 90%, transparent 100%)`,WebkitMaskImage:`linear-gradient(to bottom, black 90%, transparent 100%)`},...o,children:t})};A.displayName=`OnThisPageContent`;const j=({children:t,className:n})=>(0,r.jsx)(`ul`,{className:e.y(`relative space-y-0.5 text-sm border-l border-subtle`,n),children:t}),M=({level:t,children:n,className:i})=>(0,r.jsx)(`li`,{className:e.y(t===3&&`pl-3`,i),children:n}),N=({children:t,href:i,active:a,onClick:s,className:c})=>{let l=(0,n.use)(S),u=(0,n.use)(C),d=i?b(i):null,f=(0,n.useRef)(null),p=a===void 0?d&&l?!!l.find(e=>e.id===d)?.active:!1:a;return(0,n.useEffect)(()=>{p&&f.current&&u?.current&&(0,o.default)(f.current,{behavior:`smooth`,block:`center`,inline:`center`,scrollMode:`if-needed`,boundary:u.current})},[p,u]),(0,r.jsx)(`a`,{ref:f,href:i,onClick:e=>{if(s)s(e);else if(i&&i.startsWith(`#`)){e.preventDefault();let t=i.slice(1),n=document.getElementById(t);n&&(n.scrollIntoView({behavior:`smooth`}),window.history.pushState(null,``,i))}},"data-active":p,className:e.y(`block py-0.5 pl-4 text-[13px] outline-none transition-colors`,p?`text-primary-500`:`text-muted hover:text-body`,c),children:t})},P=({style:t,className:i})=>{let a=(0,n.useRef)(null),[o,s]=(0,n.useState)({opacity:0,...t});return(0,n.useEffect)(()=>{let e=a.current?.parentElement;if(!e)return;let n=e.querySelectorAll(`a[data-active="true"]`);if(n.length>0){let r=n[0],i=n[n.length-1],a=r.getBoundingClientRect(),o=i.getBoundingClientRect(),c=e.getBoundingClientRect(),l=a.top-c.top,u=o.bottom-a.top;s({transform:`translateY(${l}px)`,height:`${u}px`,opacity:1,...t})}else s({opacity:0,...t})},[w(),t]),(0,r.jsx)(`div`,{ref:a,className:e.y(`absolute -left-px w-0.5 rounded-full bg-primary-500`,i),style:{transition:`transform 180ms cubic-bezier(0.2, 0.8, 0.2, 1), height 180ms cubic-bezier(0.2, 0.8, 0.2, 1), opacity 150ms`,...o}})};function F({headings:e=[],className:t}){let n=E();return e.length===0?null:(0,r.jsxs)(j,{className:t,children:[(0,r.jsx)(P,{}),e.map(e=>(0,r.jsx)(M,{level:e.level,children:(0,r.jsx)(N,{href:`#${e.id}`,active:n.includes(e.id),children:e.text})},e.id))]})}function I({headings:e=[],className:t}){let i=(0,n.useMemo)(()=>e.map(e=>({title:e.text,url:`#${e.id}`,depth:e.level})),[e]),a=(0,n.useRef)(null);return e.length===0?null:(0,r.jsx)(O,{toc:i,single:!1,children:(0,r.jsx)(D,{containerRef:a,children:(0,r.jsx)(A,{ref:a,children:(0,r.jsx)(F,{headings:e,className:t})})})})}k.Root=k,k.Header=re,k.Content=A,k.List=j,k.Item=M,k.Link=N,k.Indicator=P,k.Items=F,k.Tree=I;const L=({children:t,className:n})=>(0,r.jsx)(`nav`,{className:e.y(`grid sm:grid-cols-2 gap-4`,n),children:t});L.Root=L,L.Link=({children:t,to:n,direction:i,className:a})=>{let o=i===`next`;return(0,r.jsxs)(e._,{href:n,className:e.y(`flex items-center outline-none no-underline`,o?`justify-end`:`justify-start`,a),children:[!o&&(0,r.jsx)(e.E,{className:`shrink-0`}),(0,r.jsx)(`div`,{className:`flex flex-col flex-1`,children:t}),o&&(0,r.jsx)(e.D,{className:`shrink-0`})]})},L.Title=({children:t,className:n})=>(0,r.jsx)(`span`,{className:e.y(n),children:t}),L.Description=({children:t,className:n})=>(0,r.jsx)(`span`,{className:e.y(`truncate`,n),children:t}),L.Icon=({children:e})=>(0,r.jsx)(r.Fragment,{children:e});function R(r){let i=e.nt(),a=e.Z((0,t.useLocation)().pathname);return(0,n.useMemo)(()=>{let t=r.find(t=>e.Z(t.path)===a),n=t?.tab?.toLowerCase(),o=n?r.filter(e=>!e.tab||e.tab.toLowerCase()===n):r,s={};if(i.directoryMeta)for(let[e,t]of Object.entries(i.directoryMeta)){let n=e.split(`/`).filter(e=>!e.startsWith(`(`)||!e.endsWith(`)`)).map(e=>e.replace(/^\d+-/,``)).join(`/`);s[n===``?`.`:n]=t}let c=e=>e.charAt(0).toUpperCase()+e.slice(1).replace(/-/g,` `),l=new Map,u=[],d=(e,t)=>{let n=t,r=``,i=null;for(let t=0;t<e.length;t++){let a=e[t],o=r?`${r}/${a}`:a;if(!n.has(a)){let e=s[o]||{},t={path:`#`,title:e.title||c(a),componentPath:``,filePath:``,icon:e.icon,groupPosition:typeof e.order==`number`?e.order:999,subRoutes:[]};n.set(a,t)}i=n.get(a),i._subMap||=new Map,n=i._subMap,r=o}return i},f=[...o].sort((e,t)=>(e.sidebarPosition??e.order??999)-(t.sidebarPosition??t.order??999));for(let e of f){if(e.sidebarHidden)continue;let t=e.slugParts||[],n=e.filePath.split(`/`).pop()||``,r=/^index\.mdx?$/.test(n);if(t.length===0){e.filePath&&u.push(e);continue}if(r){let n=d(t,l);n&&(n.path=e.path,n.title=e.title||n.title,n.icon=e.icon||n.icon,n.badge=e.badge,n.sidebarPosition=e.sidebarPosition,n.frontmatter=e.frontmatter)}else{let n=d(t,l);n&&n.subRoutes.push(e)}}let p=(e,t=``)=>(e.forEach(e=>{if(e._subMap){let t=Array.from(e._subMap.values());e.subRoutes=[...e.subRoutes||[],...t],delete e._subMap}e.subRoutes&&e.subRoutes.length>0&&(e.subRoutes=p(e.subRoutes))}),e.sort((e,t)=>{let n=e.sidebarPosition??e.groupPosition??999,r=t.sidebarPosition??t.groupPosition??999;return n===r?e.title.localeCompare(t.title):n-r})),m=p(Array.from(l.values()));return m.map(e=>({slug:e.title.toLowerCase().replace(/\s+/g,`-`),title:e.title,icon:e.icon,routes:[e]})),{groups:m.map(e=>e.subRoutes&&e.subRoutes.length>0?{slug:e.title.toLowerCase().replace(/\s+/g,`-`),title:e.title,icon:e.icon,routes:e.subRoutes}:(u.push(e),null)).filter(Boolean),ungrouped:p(u),activeRoute:t,activePath:a,config:i}},[r,i,a])}let z=0;function B(t){if(!t)return;let n={...e.Y,...a.default};return n[t]||n[t+`Icon`]||void 0}const V=({badge:t})=>{let n={new:`bg-primary-500/10 text-primary-500 border border-primary-500/20`,updated:`bg-emerald-500/10 text-emerald-500 border border-emerald-500/20`,deprecated:`bg-danger-500/10 text-danger-500 border border-danger-500/20`},i=typeof t==`string`?t:t?.text;return i?(0,r.jsx)(`span`,{className:e.y(`ml-auto flex h-5 items-center rounded-md text-[10px] font-bold px-1.5 py-0.5 uppercase tracking-wider`,n[i]||n.new),children:i}):null};function H({children:t,className:n}){return(0,r.jsx)(`aside`,{className:e.y(`hidden lg:flex flex-col w-sidebar sticky top-navbar h-[calc(100vh-var(--spacing-navbar))] border-r border-subtle bg-main`,n),children:t})}function U({children:t,className:n}){let{isSidebarOpen:a,closeSidebar:o}=y();return(0,r.jsx)(i.ModalOverlay,{isOpen:a,onOpenChange:e=>!e&&o(),isDismissable:!0,className:e.y(`fixed inset-0 z-50 bg-black/20 backdrop-blur-sm lg:hidden`,`entering:animate-in entering:fade-in exiting:animate-out exiting:fade-out duration-300`),children:(0,r.jsx)(i.Modal,{className:e.y(`fixed top-0 left-0 bottom-0 w-80 bg-main border-r border-subtle shadow-2xl outline-none`,`entering:animate-in entering:slide-in-from-left exiting:animate-out exiting:slide-out-to-left duration-300`,n),children:(0,r.jsx)(i.Dialog,{className:`h-full focus:outline-none outline-none flex flex-col`,children:t})})})}function W({children:t,className:n}){return(0,r.jsx)(`div`,{className:e.y(`flex items-center justify-between p-4 border-b border-subtle`,n),children:t})}function G({children:t,className:i}){let a=(0,n.useRef)(null);return(0,n.useLayoutEffect)(()=>{a.current&&(a.current.scrollTop=z)},[]),(0,n.useEffect)(()=>{let e=a.current;if(!e)return;let t=()=>{z=e.scrollTop};return e.addEventListener(`scroll`,t,{passive:!0}),()=>e.removeEventListener(`scroll`,t)},[]),(0,r.jsx)(`div`,{ref:a,className:e.y(`flex-1 overflow-y-auto p-4 pb-16 custom-scrollbar`,i),children:(0,r.jsx)(`nav`,{className:`flex flex-col gap-6`,children:t})})}const K=({title:e,icon:t,children:n,className:i})=>(0,r.jsxs)(`div`,{className:i,children:[e&&(0,r.jsxs)(`h4`,{className:`px-2 mb-2 flex items-center gap-2 text-[11px] font-bold uppercase tracking-widest text-muted/50`,children:[t&&(0,r.jsx)(t,{size:12}),e]}),(0,r.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:n})]}),q=({label:t,href:n,active:i,icon:a,badge:o,className:s})=>(0,r.jsxs)(e._,{href:n,className:e.y(`group flex items-center gap-2.5 rounded-lg px-2.5 py-1.5 text-sm transition-all outline-none`,i?`bg-primary-500/10 text-primary-500 font-medium shadow-sm`:`text-muted hover:bg-surface hover:text-body`,s),children:[a&&(0,r.jsx)(a,{size:16,className:e.y(i?`text-primary-500`:`text-muted group-hover:text-body`)}),(0,r.jsx)(`span`,{className:`truncate`,children:t}),o&&(0,r.jsx)(V,{badge:o})]}),J=({label:t,href:n,active:i,icon:a,badge:o,isOpen:s,onToggle:c,children:l,className:u})=>(0,r.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,r.jsxs)(`div`,{className:`group relative flex items-center`,children:[(0,r.jsx)(q,{label:t,href:n,active:i,icon:a,badge:o,className:e.y(`flex-1 pr-8`,u)}),(0,r.jsx)(`button`,{onClick:e=>{e.preventDefault(),e.stopPropagation(),c()},className:`absolute right-1 p-1.5 text-muted hover:text-body transition-colors outline-none cursor-pointer`,children:(0,r.jsx)(e.D,{size:14,className:e.y(`transition-transform duration-200`,s&&`rotate-90`)})})]}),s&&(0,r.jsx)(`div`,{className:`ml-4 pl-3 border-l border-subtle/50 mt-0.5 flex flex-col gap-0.5`,children:l})]});function Y({route:t,activePath:i,activeRoute:a,className:o}){let s=e.b(t.path),c=i===(s.endsWith(`/`)?s.slice(0,-1):s)||!!a?.filePath&&!!t.filePath&&a.filePath===t.filePath,l=!!t.routes?.length||!!t.subRoutes?.length,u=t.routes||t.subRoutes,[d,f]=(0,n.useState)(()=>i.startsWith(s)||!!a?.filePath&&!!t.filePath&&a.filePath===t.filePath),[p,m]=(0,n.useState)(i);return i!==p&&(m(i),(i.startsWith(s)||a?.filePath&&t.filePath&&a.filePath===t.filePath)&&f(!0)),l?(0,r.jsx)(J,{label:t.title,href:t.path,active:c,icon:B(t.icon),badge:t.badge,isOpen:d,onToggle:()=>f(!d),className:o,children:u?.map(e=>(0,r.jsx)(Y,{route:e,activePath:i,activeRoute:a},e.path))}):(0,r.jsx)(q,{label:t.title,href:t.path,active:c,icon:B(t.icon),badge:t.badge,className:o})}function X({routes:t,className:n}){let{groups:i,ungrouped:a,activePath:o,activeRoute:s}=R(t);return(0,r.jsxs)(`div`,{className:e.y(`flex flex-col gap-6`,n),children:[a.length>0&&(0,r.jsx)(K,{children:a.map(e=>(0,r.jsx)(Y,{route:e,activePath:o,activeRoute:s},e.path))}),i.map(e=>(0,r.jsx)(K,{title:e.title,icon:B(e.icon),children:e.routes.map(e=>(0,r.jsx)(Y,{route:e,activePath:o,activeRoute:s},e.path))},e.title))]})}const ie=Object.assign(H,{Root:H,Mobile:U,Header:W,Content:G,Group:K,Link:q,SubGroup:J,Item:Y,Items:X}),Z=()=>(0,t.useLocation)();function Q(e=`.boltdocs-page`){let{search:t}=Z(),r=new URLSearchParams(t).get(`hl`);(0,n.useEffect)(()=>{if(!r){$(e);return}let t=document.querySelector(e);if(!t)return;let n,i=new MutationObserver(e=>{e.some(e=>{let t=Array.from(e.addedNodes),n=Array.from(e.removedNodes);return t.some(e=>!(e instanceof HTMLElement&&e.hasAttribute(`data-search-highlight`)))||n.some(e=>!(e instanceof HTMLElement&&e.hasAttribute(`data-search-highlight`)))})&&a()});function a(){cancelAnimationFrame(n),n=requestAnimationFrame(()=>{i.disconnect(),$(e);let n=r.split(/\s+/).map(e=>e.trim()).filter(e=>e.length>=2);n.length>0&&ae(t,n),i.observe(t,{childList:!0,subtree:!0})})}return a(),()=>{cancelAnimationFrame(n),i.disconnect(),$(e)}},[r,t,e])}function $(e){document.querySelectorAll(`${e} mark[data-search-highlight]`).forEach(e=>{try{let t=e.parentNode;if(t&&t.contains(e)){let n=e.textContent||``;t.replaceChild(document.createTextNode(n),e)}}catch{}})}function ae(e,t){let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode:e=>{let t=e.parentElement;return t&&(t.tagName===`SCRIPT`||t.tagName===`STYLE`||t.tagName===`MARK`||t.closest(`pre`)||t.closest(`code`))?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),r=[],i;for(;i=n.nextNode();)r.push(i);let a={a:`[aáàäâã]`,e:`[eéèëê]`,i:`[iíìïî]`,o:`[oóòöôõ]`,u:`[uúùüû]`,n:`[nñ]`,c:`[cç]`},o=e=>{let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return t=t.split(``).map(e=>a[e.toLowerCase()]||e).join(``),t},s=t.map(o).join(`|`),c=RegExp(`(${s})`,`gi`),l=t.map(e=>{let t=o(e);return RegExp(`^${t}$`,`i`)});r.forEach(e=>{let t=e.textContent;if(t&&c.test(t)){let n=document.createDocumentFragment();t.split(c).forEach(e=>{if(l.some(t=>t.test(e))){let t=document.createElement(`mark`);t.textContent=e,t.setAttribute(`data-search-highlight`,`true`),n.appendChild(t)}else e&&n.appendChild(document.createTextNode(e))}),e.parentNode&&e.parentNode.replaceChild(n,e)}})}function oe(){return Q(`.boltdocs-page`),null}function se({children:t,className:n,style:i}){return(0,r.jsx)(`div`,{className:e.y(`h-screen flex flex-col overflow-hidden bg-main text-body`,n),style:i,children:t})}function ce({children:t,className:n,style:i}){return(0,r.jsx)(`div`,{className:e.y(`mx-auto flex flex-1 w-full max-w-(--breakpoint-3xl) bg-main overflow-hidden`,n),style:i,children:t})}function le({children:t,className:n,style:i}){return(0,r.jsx)(`main`,{className:e.y(`boltdocs-content flex-1 min-w-0 overflow-y-auto`,`contain-layout`,n),style:i,children:t})}function ue({children:t,className:n,style:i}){return(0,r.jsxs)(`div`,{className:e.y(`boltdocs-page mx-auto pt-4 pb-20 px-4 sm:px-8`,n),style:i,children:[(0,r.jsx)(oe,{}),t]})}function de({children:t,className:n,style:i}){return(0,r.jsx)(`header`,{className:e.y(`mb-10`,n),style:i,children:t})}function fe({children:t,className:n,style:i}){return(0,r.jsx)(`div`,{className:e.y(`mt-20`,n),style:i,children:t})}const pe=Object.assign(se,{Body:ce,Content:le,ContentMdx:ue,Header:de,Footer:fe});Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return ne}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return ie}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return I}});
@@ -4,4 +4,4 @@
4
4
  * Copyright (c) 2026 Jesus Alcala
5
5
  * Licensed under the MIT License.
6
6
  */
7
- const e=require(`../chunk-Ds5LZdWN.cjs`),t=require(`../routes-Co1mRM58.cjs`),n=require(`../node-Bf90oJQD.cjs`),r=require(`../doctor-COpf35L2.cjs`);let i=require(`vite`),a=require(`node:path`);a=e.n(a);let o=require(`cac`);o=e.n(o);let s=require(`@bdocs/ssg/node`);async function c(e=process.cwd()){try{let t=await(0,s.createServer)(await n.n(e,`development`));await t.listen(),t.printUrls(),t.bindCLIShortcuts({print:!0})}catch(e){r.u(`Failed to start dev server:`,e),process.exit(1)}}async function l(e=process.cwd()){try{let i=await n.n(e,`production`),o=await r.p(`docs`,e),c=await t.t(a.default.resolve(e,`docs`),o,i.base),l={};for(let e of c)if(e.path&&e.componentPath){l[e.path]=e.componentPath;let t=e.path.replace(/\/$/,``);l[t]=e.componentPath}await(0,s.build)({entry:`boltdocs/entry`,routeToSourceFileMap:l,cacheDir:a.default.resolve(e,`.boltdocs`)},i),r.d(`SSG build completed successfully!`),process.exit(0)}catch(e){r.u(`Build failed:`,e),process.exit(1)}}async function u(e=process.cwd()){try{(await(0,i.preview)(await n.n(e,`production`))).printUrls()}catch(e){r.u(`Failed to start preview server:`,e),process.exit(1)}}const d=(0,o.default)(`boltdocs`);d.command(`[root]`,`Start development server`).alias(`dev`).action(c),d.command(`build [root]`,`Build for production`).action(l),d.command(`preview [root]`,`Preview production build`).action(u),d.command(`doctor [root]`,`Check the health of your documentation`).option(`--fix`,`Automatically fix broken internal links and sync translations`).option(`--check-external`,`Verify external links (slower)`).option(`--init`,`Initialize doctor.json with default configuration`).action(async(e,t)=>{let{doctorAction:n}=await Promise.resolve().then(()=>require(`../doctor-BQiQhCTl.cjs`));await n(e,t)}),d.command(`generate-changelog <file>`,`Generate changelog documentation from CHANGELOG.md`).option(`-o, --output <path>`,`Output folder (default: docs/changelog)`,{default:`docs/changelog`}).option(`-t, --title <text>`,`Title for changelog pages`,{default:`Changelog`}).option(`--infer-tab`,`Infer tab from folder name (default: true)`,{default:!0}).option(`-l, --limit <number>`,`Limit number of versions to generate`).action(async(e,t)=>{let{generateChangelog:n}=await Promise.resolve().then(()=>require(`../generator-DGW6pkCC.cjs`));await n(e,{output:t.output,title:t.title,inferTab:t.inferTab,limit:t.limit?parseInt(String(t.limit),10):void 0})}),d.help(),d.version(`2.0.0`),d.parse();
7
+ const e=require(`../chunk-Ds5LZdWN.cjs`),t=require(`../routes-Co1mRM58.cjs`),n=require(`../node-PfSXEt5t.cjs`),r=require(`../doctor-COpf35L2.cjs`);let i=require(`vite`),a=require(`node:path`);a=e.n(a);let o=require(`cac`);o=e.n(o);let s=require(`@bdocs/ssg/node`);async function c(e=process.cwd()){try{let t=await(0,s.createServer)(await n.n(e,`development`));await t.listen(),t.printUrls(),t.bindCLIShortcuts({print:!0})}catch(e){r.u(`Failed to start dev server:`,e),process.exit(1)}}async function l(e=process.cwd()){try{let i=await n.n(e,`production`),o=await r.p(`docs`,e),c=await t.t(a.default.resolve(e,`docs`),o,i.base),l={};for(let e of c)if(e.path&&e.componentPath){l[e.path]=e.componentPath;let t=e.path.replace(/\/$/,``);l[t]=e.componentPath}await(0,s.build)({entry:`boltdocs/entry`,routeToSourceFileMap:l,cacheDir:a.default.resolve(e,`.boltdocs`)},i),r.d(`SSG build completed successfully!`),process.exit(0)}catch(e){r.u(`Build failed:`,e),process.exit(1)}}async function u(e=process.cwd()){try{(await(0,i.preview)(await n.n(e,`production`))).printUrls()}catch(e){r.u(`Failed to start preview server:`,e),process.exit(1)}}const d=(0,o.default)(`boltdocs`);d.command(`[root]`,`Start development server`).alias(`dev`).action(c),d.command(`build [root]`,`Build for production`).action(l),d.command(`preview [root]`,`Preview production build`).action(u),d.command(`doctor [root]`,`Check the health of your documentation`).option(`--fix`,`Automatically fix broken internal links and sync translations`).option(`--check-external`,`Verify external links (slower)`).option(`--init`,`Initialize doctor.json with default configuration`).action(async(e,t)=>{let{doctorAction:n}=await Promise.resolve().then(()=>require(`../doctor-BQiQhCTl.cjs`));await n(e,t)}),d.command(`generate-changelog <file>`,`Generate changelog documentation from CHANGELOG.md`).option(`-o, --output <path>`,`Output folder (default: docs/changelog)`,{default:`docs/changelog`}).option(`-t, --title <text>`,`Title for changelog pages`,{default:`Changelog`}).option(`--infer-tab`,`Infer tab from folder name (default: true)`,{default:!0}).option(`-l, --limit <number>`,`Limit number of versions to generate`).action(async(e,t)=>{let{generateChangelog:n}=await Promise.resolve().then(()=>require(`../generator-DGW6pkCC.cjs`));await n(e,{output:t.output,title:t.title,inferTab:t.inferTab,limit:t.limit?parseInt(String(t.limit),10):void 0})}),d.help(),d.version(`2.0.0`),d.parse();
@@ -4,4 +4,4 @@
4
4
  * Copyright (c) 2026 Jesus Alcala
5
5
  * Licensed under the MIT License.
6
6
  */
7
- import{i as e,o as t,r as n}from"../doctor-COxqQQQ8.mjs";import{t as r}from"../routes-D0KpEheM.mjs";import{n as i}from"../node-CVjtduZh.mjs";import{preview as a}from"vite";import o from"node:path";import s from"cac";import{build as c,createServer as l}from"@bdocs/ssg/node";async function u(e=process.cwd()){try{let t=await l(await i(e,`development`));await t.listen(),t.printUrls(),t.bindCLIShortcuts({print:!0})}catch(e){n(`Failed to start dev server:`,e),process.exit(1)}}async function d(a=process.cwd()){try{let n=await i(a,`production`),s=await t(`docs`,a),l=await r(o.resolve(a,`docs`),s,n.base),u={};for(let e of l)if(e.path&&e.componentPath){u[e.path]=e.componentPath;let t=e.path.replace(/\/$/,``);u[t]=e.componentPath}await c({entry:`boltdocs/entry`,routeToSourceFileMap:u,cacheDir:o.resolve(a,`.boltdocs`)},n),e(`SSG build completed successfully!`),process.exit(0)}catch(e){n(`Build failed:`,e),process.exit(1)}}async function f(e=process.cwd()){try{(await a(await i(e,`production`))).printUrls()}catch(e){n(`Failed to start preview server:`,e),process.exit(1)}}const p=s(`boltdocs`);p.command(`[root]`,`Start development server`).alias(`dev`).action(u),p.command(`build [root]`,`Build for production`).action(d),p.command(`preview [root]`,`Preview production build`).action(f),p.command(`doctor [root]`,`Check the health of your documentation`).option(`--fix`,`Automatically fix broken internal links and sync translations`).option(`--check-external`,`Verify external links (slower)`).option(`--init`,`Initialize doctor.json with default configuration`).action(async(e,t)=>{let{doctorAction:n}=await import(`../doctor-COxqQQQ8.mjs`).then(e=>e.t);await n(e,t)}),p.command(`generate-changelog <file>`,`Generate changelog documentation from CHANGELOG.md`).option(`-o, --output <path>`,`Output folder (default: docs/changelog)`,{default:`docs/changelog`}).option(`-t, --title <text>`,`Title for changelog pages`,{default:`Changelog`}).option(`--infer-tab`,`Infer tab from folder name (default: true)`,{default:!0}).option(`-l, --limit <number>`,`Limit number of versions to generate`).action(async(e,t)=>{let{generateChangelog:n}=await import(`../generator-Dv3wEmhZ.mjs`);await n(e,{output:t.output,title:t.title,inferTab:t.inferTab,limit:t.limit?parseInt(String(t.limit),10):void 0})}),p.help(),p.version(`2.0.0`),p.parse();export{};
7
+ import{i as e,o as t,r as n}from"../doctor-COxqQQQ8.mjs";import{t as r}from"../routes-D0KpEheM.mjs";import{n as i}from"../node-CsY-eLEP.mjs";import{preview as a}from"vite";import o from"node:path";import s from"cac";import{build as c,createServer as l}from"@bdocs/ssg/node";async function u(e=process.cwd()){try{let t=await l(await i(e,`development`));await t.listen(),t.printUrls(),t.bindCLIShortcuts({print:!0})}catch(e){n(`Failed to start dev server:`,e),process.exit(1)}}async function d(a=process.cwd()){try{let n=await i(a,`production`),s=await t(`docs`,a),l=await r(o.resolve(a,`docs`),s,n.base),u={};for(let e of l)if(e.path&&e.componentPath){u[e.path]=e.componentPath;let t=e.path.replace(/\/$/,``);u[t]=e.componentPath}await c({entry:`boltdocs/entry`,routeToSourceFileMap:u,cacheDir:o.resolve(a,`.boltdocs`)},n),e(`SSG build completed successfully!`),process.exit(0)}catch(e){n(`Build failed:`,e),process.exit(1)}}async function f(e=process.cwd()){try{(await a(await i(e,`production`))).printUrls()}catch(e){n(`Failed to start preview server:`,e),process.exit(1)}}const p=s(`boltdocs`);p.command(`[root]`,`Start development server`).alias(`dev`).action(u),p.command(`build [root]`,`Build for production`).action(d),p.command(`preview [root]`,`Preview production build`).action(f),p.command(`doctor [root]`,`Check the health of your documentation`).option(`--fix`,`Automatically fix broken internal links and sync translations`).option(`--check-external`,`Verify external links (slower)`).option(`--init`,`Initialize doctor.json with default configuration`).action(async(e,t)=>{let{doctorAction:n}=await import(`../doctor-COxqQQQ8.mjs`).then(e=>e.t);await n(e,t)}),p.command(`generate-changelog <file>`,`Generate changelog documentation from CHANGELOG.md`).option(`-o, --output <path>`,`Output folder (default: docs/changelog)`,{default:`docs/changelog`}).option(`-t, --title <text>`,`Title for changelog pages`,{default:`Changelog`}).option(`--infer-tab`,`Infer tab from folder name (default: true)`,{default:!0}).option(`-l, --limit <number>`,`Limit number of versions to generate`).action(async(e,t)=>{let{generateChangelog:n}=await import(`../generator-Dv3wEmhZ.mjs`);await n(e,{output:t.output,title:t.title,inferTab:t.inferTab,limit:t.limit?parseInt(String(t.limit),10):void 0})}),p.help(),p.version(`2.0.0`),p.parse();export{};
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`../utils-Clzu7jvb.cjs`),t=require(`../node-Bf90oJQD.cjs`),n=require(`../doctor-COpf35L2.cjs`);exports.BoltdocsPluginStore=t.u,exports.PluginCompatibilityError=t.d,exports.PluginError=t.f,exports.PluginHookError=t.p,exports.PluginLifecycleManager=t.a,exports.PluginPermissionError=t.m,exports.PluginSandbox=t.o,exports.PluginValidationError=t.h,exports.SecurePluginSchema=t.s,exports.createPlugin=t.i,exports.createViteConfig=t.n,exports.default=t.t,exports.defineConfig=n.h,exports.generateEntryCode=t.r,exports.hasPermission=t.c,exports.normalizePath=e.l,exports.resolveConfig=n.p,exports.sanitizeFilename=e.d,exports.validatePlugins=t.l;
6
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`../utils-Clzu7jvb.cjs`),t=require(`../node-PfSXEt5t.cjs`),n=require(`../doctor-COpf35L2.cjs`);exports.BoltdocsPluginStore=t.u,exports.PluginCompatibilityError=t.d,exports.PluginError=t.f,exports.PluginHookError=t.p,exports.PluginLifecycleManager=t.a,exports.PluginPermissionError=t.m,exports.PluginSandbox=t.o,exports.PluginValidationError=t.h,exports.SecurePluginSchema=t.s,exports.createPlugin=t.i,exports.createViteConfig=t.n,exports.default=t.t,exports.defineConfig=n.h,exports.generateEntryCode=t.r,exports.hasPermission=t.c,exports.normalizePath=e.l,exports.resolveConfig=n.p,exports.sanitizeFilename=e.d,exports.validatePlugins=t.l;
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- import{c as e,o as t}from"../doctor-COxqQQQ8.mjs";import{d as n,l as r}from"../utils-BxNAXhZZ.mjs";import{a as i,c as a,d as o,f as s,h as c,i as l,l as u,m as d,n as f,o as p,p as m,r as h,s as g,t as _,u as v}from"../node-CVjtduZh.mjs";export{v as BoltdocsPluginStore,o as PluginCompatibilityError,s as PluginError,m as PluginHookError,i as PluginLifecycleManager,d as PluginPermissionError,p as PluginSandbox,c as PluginValidationError,g as SecurePluginSchema,l as createPlugin,f as createViteConfig,_ as default,e as defineConfig,h as generateEntryCode,a as hasPermission,r as normalizePath,t as resolveConfig,n as sanitizeFilename,u as validatePlugins};
6
+ import{c as e,o as t}from"../doctor-COxqQQQ8.mjs";import{d as n,l as r}from"../utils-BxNAXhZZ.mjs";import{a as i,c as a,d as o,f as s,h as c,i as l,l as u,m as d,n as f,o as p,p as m,r as h,s as g,t as _,u as v}from"../node-CsY-eLEP.mjs";export{v as BoltdocsPluginStore,o as PluginCompatibilityError,s as PluginError,m as PluginHookError,i as PluginLifecycleManager,d as PluginPermissionError,p as PluginSandbox,c as PluginValidationError,g as SecurePluginSchema,l as createPlugin,f as createViteConfig,_ as default,e as defineConfig,h as generateEntryCode,a as hasPermission,r as normalizePath,t as resolveConfig,n as sanitizeFilename,u as validatePlugins};
@@ -104,7 +104,7 @@ export const createRoot = ViteReactSSG(
104
104
  const mdxComponents = components.default || components;
105
105
  export default mdxComponents;
106
106
  export * from '${e}';`}return`export default {};`}if(c===`layout`){let e=[`tsx`,`jsx`],t=null;for(let n of e){let e=v.resolve(r,`layout.${n}`);if(x.existsSync(e)){t=e;break}}if(t)return`import UserLayout from '${a(t)}';
107
- export default UserLayout;`;throw Error(`[Boltdocs] Layout file not found. A 'layout.tsx' or 'layout.jsx' file is mandatory in your docs directory. Please create one to define your site structure.`)}if(c===`icons`){let e=[`tsx`,`jsx`,`ts`,`js`],t=null;for(let n of e){let e=v.resolve(r,`icons.${n}`);if(x.existsSync(e)){t=e;break}}return t?`import * as icons from '${a(t)}';\nexport default icons;`:`export default {};`}if(c===`search`){if(!V){let e=Ie(await f(r,s));V=`export default ${JSON.stringify(e,null,2)};`}return V}if(c===`client`){let e=L,t=``;for(;e&&e!==v.parse(e).root;){let n=v.join(e,`src/client/index.ts`),r=v.join(e,`dist/client/index.mjs`),i=v.join(e,`client/index.ts`);if(x.existsSync(n)){t=a(n);break}if(x.existsSync(r)){t=a(r);break}if(x.existsSync(i)){t=a(i);break}e=v.dirname(e)}if(!t)throw Error(`[boltdocs] Could not resolve boltdocs/client entry point starting from ${L}`);return`export * from '${t}';`}}}}const ze={"X-Content-Type-Options":`nosniff`,"X-Frame-Options":`DENY`,"X-XSS-Protection":`1; mode=block`,"Referrer-Policy":`strict-origin-when-cross-origin`,"Permissions-Policy":`camera=(), microphone=(), geolocation=()`,"Strict-Transport-Security":`max-age=31536000; includeSubDomains`};function Be(e){let t=process.env.NODE_ENV===`development`,n={"default-src":[`'self'`],"script-src":[`'self'`,`'unsafe-inline'`],"style-src":[`'self'`,`'unsafe-inline'`],"img-src":[`'self'`,`data:`,`https:`],"font-src":[`'self'`],"connect-src":[`'self'`]};return t&&(n[`script-src`]=[`'self'`,`'unsafe-eval'`,`'unsafe-inline'`],n[`style-src`]=[`'self'`,`'unsafe-inline'`]),Object.entries(n).map(([e,t])=>`${e} ${t.join(` `)}`).join(`; `)}const H=new Map;async function Ve(e){try{let{data:t}=await c(e),n=JSON.stringify(t);return S.createHash(`md5`).update(n).digest(`hex`)}catch{return``}}function He(e){return H.get(e)}function Ue(e,t){H.set(e,t)}function We(e){H.delete(e)}function U(e,t){let n=e.moduleGraph.getModuleById(`\0virtual:boltdocs-${t}.ts`);n&&e.moduleGraph.invalidateModule(n)}function Ge(r,i,o,c,l){let f=new Map;return{name:`vite-plugin-boltdocs-dev-server`,apply:`serve`,async configureServer(c){let p=l();await p?.runHook(`beforeDev`),n(r,process.cwd(),o()).catch(e=>{console.error(`[boltdocs] Failed to generate initial link tree:`,e)}),setTimeout(async()=>{try{let{generateRoutes:e}=await import(`./routes-D0KpEheM.mjs`).then(e=>e.r),t=await e(r,o());for(let e of t)if(e.filePath){let t=v.relative(process.cwd(),e.filePath).replace(/\\/g,`/`),n=t.startsWith(`/`)?t:`/${t}`;await c.transformRequest(n).catch(()=>{}),await new Promise(e=>setTimeout(e,50))}}catch{}},1e3),c.middlewares.use((e,t,n)=>{process.env.NODE_ENV===`production`&&Object.entries(ze).forEach(([e,n])=>{t.setHeader(e,n)});let r=o();r.security?.enableCSP&&t.setHeader(`Content-Security-Policy`,Be(r)),n()}),c.middlewares.use((e,t,n)=>{if(e.url===`/robots.txt`){n();return}n()}),c.middlewares.use(async(e,t,n)=>{let r=e.url?.split(`?`)[0]||`/`,i=e.headers.accept||``,a=o(),s=/\.(js|css|png|jpe?g|gif|svg|ico|webp|woff2?|ttf|otf|mp4|webm|ogg|mp3|wav|flac|aac|pdf|zip|gz|map|json)$/i.test(r);if(i.includes(`text/html`)&&!s){let n=T(a);n=E(n,a),n=await c.transformIndexHtml(e.url||`/`,n),t.statusCode=200,t.setHeader(`Content-Type`,`text/html`),t.end(n);return}n()});let m=e.map(e=>v.resolve(process.cwd(),e)),h=[`tsx`,`jsx`].map(e=>v.resolve(r,`layout.${e}`)),g=[`tsx`,`ts`,`jsx`,`js`],ee=g.map(e=>v.resolve(r,`mdx-components.${e}`)),_=g.map(e=>v.resolve(r,`pages-external/index.${e}`)),y=g.map(e=>v.resolve(r,`icons.${e}`));c.watcher.add([...m,...ee,...h,..._,...y]);let b=async(l,p)=>{try{let m=a(l);if(e.some(e=>m.endsWith(e))){c.restart();return}if(g.some(e=>m.endsWith(`mdx-components.${e}`))){t(o(),r),U(c,`mdx-components.tsx`),c.ws.send({type:`full-reload`});return}if(g.some(e=>m.endsWith(`icons.${e}`))){U(c,`icons.tsx`),c.ws.send({type:`full-reload`});return}if(m.endsWith(`layout.tsx`)||m.endsWith(`layout.jsx`)){U(c,`layout.tsx`),c.ws.send({type:`full-reload`});return}if(m.includes(`/pages-external/`)||m.includes(`\\pages-external\\`)){U(c,`entry`),c.ws.send({type:`full-reload`});return}if(!m.toLowerCase().startsWith(i.toLowerCase())||!s(m))return;if(p===`add`||p===`unlink`){p===`unlink`&&We(l),d(),Le();let e=o();t(e,r),U(c,`config`),U(c,`routes`),U(c,`search`),n(r,process.cwd(),e).catch(e=>{console.error(`[boltdocs] Failed to update link tree:`,e)}),c.ws.send({type:`custom`,event:`boltdocs:config-update`,data:{theme:e?.theme,i18n:e?.i18n,versions:e?.versions,siteUrl:e?.siteUrl}}),c.ws.send({type:`full-reload`});return}f.has(m)&&clearTimeout(f.get(m)),f.set(m,setTimeout(async()=>{f.delete(m);try{let e=He(l),t=await Ve(l);Ue(l,t),u(l),e!==void 0&&e!==t&&(U(c,`routes`),U(c,`search`));let n=a(v.relative(r,l)),i=c.moduleGraph.getModulesByFile(m);if(i)for(let e of i)c.moduleGraph.invalidateModule(e);c.ws.send({type:`custom`,event:`boltdocs:mdx-update`,data:{file:m,relPath:n}})}catch(e){console.error(`[boltdocs] HMR error processing content change:`,e)}},150))}catch(e){console.error(`[boltdocs] HMR error during ${p} event:`,e)}};c.watcher.on(`add`,e=>b(e,`add`)),c.watcher.on(`unlink`,e=>b(e,`unlink`)),c.watcher.on(`change`,e=>b(e,`change`)),await p?.runHook(`afterDev`)},handleHotUpdate({file:e,server:t}){let n=a(e);if(n.toLowerCase().startsWith(i.toLowerCase())&&s(n))return[]}}}const W=p.createRequire(import.meta.url);function Ke(e){let t=v.dirname(e);for(;t&&t!==v.dirname(t);){let e=v.join(t,`package.json`);if(x.existsSync(e))return e;t=v.dirname(t)}return null}function qe(e){let t=e.split(`/`);return e.startsWith(`@`)?{packageName:t.slice(0,2).join(`/`),subpath:t.slice(2).join(`/`)}:{packageName:t[0],subpath:t.slice(1).join(`/`)}}function G(e,t=W){try{let{packageName:n,subpath:r}=qe(e),i;try{i=t.resolve(n+`/package.json`)}catch{i=Ke(t.resolve(n))||``}if(!i)throw Error(`Could not find package.json for ${n}`);let a=v.dirname(i),o=JSON.parse(x.readFileSync(i,`utf-8`)),s=``,c=r?`./`+r:`.`;if(o.exports){let e=o.exports[c]||o.exports[r];e&&(s=typeof e==`string`?e:e.import||e.default||e.require||e)}if(!s&&!r&&(s=o.module||o.main||`index.js`),typeof s==`object`&&(s=s.import||s.default||s.require||``),s){let e=v.resolve(a,s);if(x.existsSync(e))return e}}catch{}return t.resolve(e)}function Je(){let e=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`],t=[],n=W;try{let e=v.join(process.cwd(),`node_modules/boltdocs/package.json`);if(x.existsSync(e)){let t=x.realpathSync(e);n=p.createRequire(t)}else n=p.createRequire(v.join(process.cwd(),`package.json`))}catch{}for(let r of e)try{let e=``;e=r===`@bdocs/ssg`||r===`react-router-dom`||r===`react-helmet-async`?G(r,n):n.resolve(r),e&&t.push(x.realpathSync(e))}catch{}if(n!==W)for(let n of e)try{let e=``;e=n===`@bdocs/ssg`||n===`react-router-dom`||n===`react-helmet-async`?G(n,W):W.resolve(n),e&&t.push(x.realpathSync(e))}catch{}for(let e of[`react/jsx-runtime`,`react/jsx-dev-runtime`,`react-dom/client`]){try{t.push(x.realpathSync(n.resolve(e)))}catch{}if(n!==W)try{t.push(x.realpathSync(W.resolve(e)))}catch{}}return Array.from(new Set(t)).map(e=>a(e))}function Ye(e={},t){let n=v.resolve(process.cwd(),e.docsDir||`docs`),i=a(n),o=t,s,c=!1,l,u=[],d=()=>o;return[{name:`vite-plugin-boltdocs`,enforce:`pre`,async config(e,t){c=t.command===`build`;let i=!!(t.ssrBuild||t.ssr||e.build?.ssr),a=e.envDir||process.cwd(),s=ee(t.mode,a,``);Object.assign(process.env,s),o||=await r(n);let d=(await import(`./package-jddH_QJ9.mjs`)).version,p=P(o.plugins||[],d);return o.plugins=p,l=new Ne(p,o),u=p.flatMap(e=>I.getSanitizedCapabilities(e).vitePlugins||[]),c&&await l.runHook(`beforeBuild`),{ssgOptions:{entry:`boltdocs/entry`,htmlEntry:`index.html`,dirStyle:`nested`,includeAllRoutes:!0,mock:!0,script:`async`,beastiesOptions:{preload:`media`},onFinished:async e=>{let t=je(w(await f(n,o)),o);t&&x.writeFileSync(v.join(e,`sitemap.xml`),t);let r=Me(o);x.writeFileSync(v.join(e,`robots.txt`),r)}},build:{ssrManifest:c},optimizeDeps:{include:[`react`,`react-dom`,`react-dom/client`,`react-router-dom`,`react-helmet-async`,`react-fast-compare`,`invariant`],exclude:[`boltdocs`,`boltdocs/client`]},resolve:{alias:[{find:`react-router-dom`,replacement:G(`react-router-dom`)},{find:`react-helmet-async`,replacement:G(`react-helmet-async`)},{find:`@bdocs/ssg`,replacement:G(`@bdocs/ssg`)}],dedupe:[`react`,`react-dom`,...i?[]:[`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`]]},ssr:{external:[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`,...Je()],optimizeDeps:{include:[`react-fast-compare`,`invariant`]},noExternal:[]}}},configResolved(e){s=e,l?.runHook(`configResolved`,o)},resolveId(e,t,n){let r=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`].find(t=>e===t||e.startsWith(t+`/`)||e.includes(`/node_modules/${t}/`)||t.startsWith(`@`)&&e.includes(`/node_modules/${t.replace(`/`,v.sep)}/`));if(r&&n?.ssr){let t=e;if(!v.isAbsolute(e)){let n=W;try{let e=v.join(process.cwd(),`node_modules/boltdocs/package.json`);if(x.existsSync(e)){let t=x.realpathSync(e);n=p.createRequire(t)}else n=p.createRequire(v.join(process.cwd(),`package.json`))}catch{}try{t=r===`@bdocs/ssg`||r===`react-router-dom`||r===`react-helmet-async`?G(e,n):n.resolve(e)}catch{try{t=r===`@bdocs/ssg`||r===`react-router-dom`||r===`react-helmet-async`?G(e,W):W.resolve(e)}catch{}}}try{t=x.realpathSync(t)}catch{}return{id:t,external:!0}}return null},transformIndexHtml:{order:`pre`,handler(e){return E(e,o)}},async buildEnd(){let{pool:e}=await import(`./worker-pool-Bd8Y9KDv.mjs`);await e.terminate()},async closeBundle(){!c||s?.build?.ssr||(await l?.runHook(`afterBuild`),await l?.runHook(`buildEnd`))}},Re(e,d,()=>s,n),Ge(n,i,d,e=>{o=e},()=>l),{...te({includePublic:!0,png:{quality:80},jpeg:{quality:80},jpg:{quality:80},webp:{quality:80},avif:{quality:80},svg:{multipass:!0,plugins:[{name:`preset-default`}]}}),apply:`build`},...u]}const K=new l(`mdx`),Xe=[de.default||de,fe.default||fe,pe.default||pe,me.default||me,he.default||he,ge.default||ge,_e.default||_e],Ze=[ve,ye,be,xe,Se,Ce,we,Te,Ee,De,Oe,ke,Ae];let Qe=null,q=null;const $e=()=>(Qe??=le(),Qe),et=async e=>q||(q=ue({themes:Xe,langs:Ze,engine:$e()}),q),J={JSX_FLOW_ELEMENT:`mdxJsxFlowElement`,JSX_TEXT_ELEMENT:`mdxJsxTextElement`,JSX_ATTRIBUTE:`mdxJsxAttribute`,ELEMENT:`element`,TEXT:`text`,CODE:`code`},tt={PRE:`pre`,CODE:`code`},Y={TITLE:`data-title`,LANG:`data-lang`,HIGHLIGHTED:`data-highlighted`,HIGHLIGHTED_HTML:`data-highlighted-html`},X={LINE_NUMBERS:`shiki-line-numbers`,WORD_WRAP:`shiki-word-wrap`,FALLBACK:`shiki-fallback`},nt={LIGHT:`github-light`,DARK:`github-dark`},Z={LANG:`plaintext`,MDX_DEFAULT_LANG:`text`},rt=(e={})=>{let{activateByDefault:t=!1}=e;return{name:`boltdocs:line-numbers`,pre(e){let n=this.options.meta?.lineNumbers===!0;(t||n)&&this.addClassToHast(e,X.LINE_NUMBERS)}}},it=(e={})=>{let{activateByDefault:t=!1}=e;return{name:`boltdocs:word-wrap`,pre(e){let n=this.options.meta?.wordWrap===!0;(t||n)&&this.addClassToHast(e,X.WORD_WRAP)}}},at=()=>({name:`AddTitleProperty`,pre(e){let t=this.options.meta?.title;t&&(e.properties[Y.TITLE]=t)}}),ot=()=>({name:`AddLanguageProperty`,pre(e){e.properties[Y.LANG]=this.options.lang||Z.LANG}});function st(e){let t={};if(!e)return t;/lineNumbers|showLineNumbers/.test(e)&&(t.lineNumbers=!0),/wordWrap|word-wrap/.test(e)&&(t.wordWrap=!0);let n=e.match(/title=(["'])(.*?)\1/);return n&&(t.title=n[2]),t}var ct=class{config;constructor(e){this.config=e}getTheme(){return this.config?.theme?.codeTheme||{light:nt.LIGHT,dark:nt.DARK}}async getHighlighter(){return await et(this.getTheme())}getOptions(e,t){let n=this.getTheme(),r={},i=``;typeof t==`string`?(i=t,r=st(t)):t&&(r=t,i=t.__raw||``);let a={lang:e||Z.LANG,meta:{__raw:i,...r},transformers:[rt(),it(),at(),ot()]};return typeof n==`object`?a.themes={light:n.light,dark:n.dark}:a.theme=n,a}async render(e,t,n){try{let r=await this.getHighlighter(),i=this.getOptions(t,n);return r.codeToHtml(e,i)}catch(t){return console.error(`[ShikiAdapter] Failed to render code:`,t),`<pre class="${X.FALLBACK}"><code>${lt(e)}</code></pre>`}}};function lt(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#039;`)}let Q=null,ut;function dt(e){let t=JSON.stringify(e?.theme?.codeTheme||null);return(Q===null||ut!==t)&&(Q=new ct(e),ut=t),Q}function ft(e){let t=dt(e);return async e=>{let n=await t.getHighlighter();ce(e,J.ELEMENT,e=>{if(e.tagName===tt.PRE&&e.children?.[0]?.type===J.ELEMENT&&e.children[0].tagName===tt.CODE){let r=e.children[0],i=(r.properties?.className||[]).find(e=>e.startsWith(`language-`)),a=i?i.slice(9):Z.MDX_DEFAULT_LANG;if(a===`mermaid`)return;let o=r.children?.[0]?.value||``,s=st(r.properties?.metastring||r.data?.meta||``),c=t.getOptions(a,s),l=``;try{l=n.codeToHtml(o,c)}catch(e){console.error(`[rehypeShiki] Failed to highlight code block:`,e),l=`<pre class="${X.FALLBACK}"><code>${lt(o)}</code></pre>`}e.properties=e.properties||{},s.title&&(e.properties[Y.TITLE]=s.title),e.properties[Y.HIGHLIGHTED]=`true`,e.properties[Y.HIGHLIGHTED_HTML]=l,e.properties[Y.LANG]=a,e.children=[]}})}}function pt(){return e=>{ce(e,J.CODE,e=>{e.meta&&(e.data=e.data||{},e.data.hProperties=e.data.hProperties||{},e.data.hProperties.metastring=e.meta)})}}let mt=!1;function $(e,t=ie){let n=e?.plugins?.flatMap(e=>I.getSanitizedCapabilities(e).remarkPlugins||[])||[],r=e?.plugins?.flatMap(e=>I.getSanitizedCapabilities(e).rehypePlugins||[])||[],i=t({remarkPlugins:[ae,oe,pt,...n],rehypePlugins:[se,[ft,e],...r],jsxRuntime:`automatic`});return{...i,name:`vite-plugin-boltdocs-mdx`,async buildStart(){mt||=(await K.load(),!0),i.buildStart&&await i.buildStart.call(this)},async transform(e,t,n){let[r]=t.split(`?`);if(!r.endsWith(`.md`)&&!r.endsWith(`.mdx`))return i.transform?.call(this,e,t,n);let a=`${r}:${S.createHash(`md5`).update(e).digest(`hex`)}:${process.env.NODE_ENV===`production`?`prod`:`dev`}:v3`,o=await K.getAsync(a);if(o)return{code:o,map:null};let s=await i.transform.call(this,e,r,n);return s&&typeof s==`object`&&s.code&&(process.env.NODE_ENV!==`production`&&(s.code+=`
107
+ export default UserLayout;`;throw Error(`[Boltdocs] Layout file not found. A 'layout.tsx' or 'layout.jsx' file is mandatory in your docs directory. Please create one to define your site structure.`)}if(c===`icons`){let e=[`tsx`,`jsx`,`ts`,`js`],t=null;for(let n of e){let e=v.resolve(r,`icons.${n}`);if(x.existsSync(e)){t=e;break}}return t?`import * as icons from '${a(t)}';\nexport default icons;`:`export default {};`}if(c===`search`){if(!V){let e=Ie(await f(r,s));V=`export default ${JSON.stringify(e,null,2)};`}return V}if(c===`client`){let e=L,t=``;for(;e&&e!==v.parse(e).root;){let n=v.join(e,`src/client/index.ts`),r=v.join(e,`dist/client/index.mjs`),i=v.join(e,`client/index.ts`);if(x.existsSync(n)){t=a(n);break}if(x.existsSync(r)){t=a(r);break}if(x.existsSync(i)){t=a(i);break}e=v.dirname(e)}if(!t)throw Error(`[boltdocs] Could not resolve boltdocs/client entry point starting from ${L}`);return`export * from '${t}';`}}}}const ze={"X-Content-Type-Options":`nosniff`,"X-Frame-Options":`DENY`,"X-XSS-Protection":`1; mode=block`,"Referrer-Policy":`strict-origin-when-cross-origin`,"Permissions-Policy":`camera=(), microphone=(), geolocation=()`,"Strict-Transport-Security":`max-age=31536000; includeSubDomains`};function Be(e){let t=process.env.NODE_ENV===`development`,n={"default-src":[`'self'`],"script-src":[`'self'`,`'unsafe-inline'`],"style-src":[`'self'`,`'unsafe-inline'`],"img-src":[`'self'`,`data:`,`https:`],"font-src":[`'self'`],"connect-src":[`'self'`]};return t&&(n[`script-src`]=[`'self'`,`'unsafe-eval'`,`'unsafe-inline'`],n[`style-src`]=[`'self'`,`'unsafe-inline'`]),Object.entries(n).map(([e,t])=>`${e} ${t.join(` `)}`).join(`; `)}const H=new Map;async function Ve(e){try{let{data:t}=await c(e),n=JSON.stringify(t);return S.createHash(`md5`).update(n).digest(`hex`)}catch{return``}}function He(e){return H.get(e)}function Ue(e,t){H.set(e,t)}function We(e){H.delete(e)}function U(e,t){let n=e.moduleGraph.getModuleById(`\0virtual:boltdocs-${t}.ts`);n&&e.moduleGraph.invalidateModule(n)}function Ge(r,i,o,c,l){let f=new Map;return{name:`vite-plugin-boltdocs-dev-server`,apply:`serve`,async configureServer(c){let p=l();await p?.runHook(`beforeDev`),n(r,process.cwd(),o()).catch(e=>{console.error(`[boltdocs] Failed to generate initial link tree:`,e)}),setTimeout(async()=>{try{let{generateRoutes:e}=await import(`./routes-D0KpEheM.mjs`).then(e=>e.r),t=await e(r,o());for(let e of t)if(e.filePath){let t=v.relative(process.cwd(),e.filePath).replace(/\\/g,`/`),n=t.startsWith(`/`)?t:`/${t}`;await c.transformRequest(n).catch(()=>{}),await new Promise(e=>setTimeout(e,50))}}catch{}},1e3),c.middlewares.use((e,t,n)=>{process.env.NODE_ENV===`production`&&Object.entries(ze).forEach(([e,n])=>{t.setHeader(e,n)});let r=o();r.security?.enableCSP&&t.setHeader(`Content-Security-Policy`,Be(r)),n()}),c.middlewares.use((e,t,n)=>{if(e.url===`/robots.txt`){n();return}n()}),c.middlewares.use(async(e,t,n)=>{let r=e.url?.split(`?`)[0]||`/`,i=e.headers.accept||``,a=o(),s=/\.(js|css|png|jpe?g|gif|svg|ico|webp|woff2?|ttf|otf|mp4|webm|ogg|mp3|wav|flac|aac|pdf|zip|gz|map|json)$/i.test(r);if(i.includes(`text/html`)&&!s){let n=T(a);n=E(n,a),n=await c.transformIndexHtml(e.url||`/`,n),t.statusCode=200,t.setHeader(`Content-Type`,`text/html`),t.end(n);return}n()});let m=e.map(e=>v.resolve(process.cwd(),e)),h=[`tsx`,`jsx`].map(e=>v.resolve(r,`layout.${e}`)),g=[`tsx`,`ts`,`jsx`,`js`],ee=g.map(e=>v.resolve(r,`mdx-components.${e}`)),_=g.map(e=>v.resolve(r,`pages-external/index.${e}`)),y=g.map(e=>v.resolve(r,`icons.${e}`));c.watcher.add([...m,...ee,...h,..._,...y]);let b=async(l,p)=>{try{let m=a(l);if(e.some(e=>m.endsWith(e))){c.restart();return}if(g.some(e=>m.endsWith(`mdx-components.${e}`))){t(o(),r),U(c,`mdx-components.tsx`),c.ws.send({type:`full-reload`});return}if(g.some(e=>m.endsWith(`icons.${e}`))){U(c,`icons.tsx`),c.ws.send({type:`full-reload`});return}if(m.endsWith(`layout.tsx`)||m.endsWith(`layout.jsx`)){U(c,`layout.tsx`),c.ws.send({type:`full-reload`});return}if(m.includes(`/pages-external/`)||m.includes(`\\pages-external\\`)){U(c,`entry`),c.ws.send({type:`full-reload`});return}if(!m.toLowerCase().startsWith(i.toLowerCase())||!s(m))return;if(p===`add`||p===`unlink`){p===`unlink`&&We(l),d(),Le();let e=o();t(e,r),U(c,`config`),U(c,`routes`),U(c,`search`),n(r,process.cwd(),e).catch(e=>{console.error(`[boltdocs] Failed to update link tree:`,e)}),c.ws.send({type:`custom`,event:`boltdocs:config-update`,data:{theme:e?.theme,i18n:e?.i18n,versions:e?.versions,siteUrl:e?.siteUrl}}),c.ws.send({type:`full-reload`});return}f.has(m)&&clearTimeout(f.get(m)),f.set(m,setTimeout(async()=>{f.delete(m);try{let e=He(l),t=await Ve(l);Ue(l,t),u(l),e!==void 0&&e!==t&&(U(c,`routes`),U(c,`search`));let n=a(v.relative(r,l)),i=c.moduleGraph.getModulesByFile(m);if(i)for(let e of i)c.moduleGraph.invalidateModule(e);c.ws.send({type:`custom`,event:`boltdocs:mdx-update`,data:{file:m,relPath:n}})}catch(e){console.error(`[boltdocs] HMR error processing content change:`,e)}},150))}catch(e){console.error(`[boltdocs] HMR error during ${p} event:`,e)}};c.watcher.on(`add`,e=>b(e,`add`)),c.watcher.on(`unlink`,e=>b(e,`unlink`)),c.watcher.on(`change`,e=>b(e,`change`)),await p?.runHook(`afterDev`)},handleHotUpdate({file:e,server:t}){let n=a(e);if(n.toLowerCase().startsWith(i.toLowerCase())&&s(n))return[]}}}const W=p.createRequire(import.meta.url);function Ke(e){let t=v.dirname(e);for(;t&&t!==v.dirname(t);){let e=v.join(t,`package.json`);if(x.existsSync(e))return e;t=v.dirname(t)}return null}function qe(e){let t=e.split(`/`);return e.startsWith(`@`)?{packageName:t.slice(0,2).join(`/`),subpath:t.slice(2).join(`/`)}:{packageName:t[0],subpath:t.slice(1).join(`/`)}}function G(e,t=W){try{let{packageName:n,subpath:r}=qe(e),i;try{i=t.resolve(n+`/package.json`)}catch{i=Ke(t.resolve(n))||``}if(!i)throw Error(`Could not find package.json for ${n}`);let a=v.dirname(i),o=JSON.parse(x.readFileSync(i,`utf-8`)),s=``,c=r?`./`+r:`.`;if(o.exports){let e=o.exports[c]||o.exports[r];e&&(s=typeof e==`string`?e:e.import||e.default||e.require||e)}if(!s&&!r&&(s=o.module||o.main||`index.js`),typeof s==`object`&&(s=s.import||s.default||s.require||``),s){let e=v.resolve(a,s);if(x.existsSync(e))return e}}catch{}return t.resolve(e)}function Je(){let e=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`],t=[],n=W;try{let e=v.join(process.cwd(),`node_modules/boltdocs/package.json`);if(x.existsSync(e)){let t=x.realpathSync(e);n=p.createRequire(t)}else n=p.createRequire(v.join(process.cwd(),`package.json`))}catch{}for(let r of e)try{let e=``;e=r===`@bdocs/ssg`||r===`react-router-dom`||r===`react-helmet-async`?G(r,n):n.resolve(r),e&&t.push(x.realpathSync(e))}catch{}if(n!==W)for(let n of e)try{let e=``;e=n===`@bdocs/ssg`||n===`react-router-dom`||n===`react-helmet-async`?G(n,W):W.resolve(n),e&&t.push(x.realpathSync(e))}catch{}for(let e of[`react/jsx-runtime`,`react/jsx-dev-runtime`,`react-dom/client`]){try{t.push(x.realpathSync(n.resolve(e)))}catch{}if(n!==W)try{t.push(x.realpathSync(W.resolve(e)))}catch{}}return Array.from(new Set(t)).map(e=>a(e))}function Ye(e={},t){let n=v.resolve(process.cwd(),e.docsDir||`docs`),i=a(n),o=t,s,c=!1,l,u=[],d=()=>o;return[{name:`vite-plugin-boltdocs`,enforce:`pre`,async config(e,t){c=t.command===`build`;let i=!!(t.ssrBuild||t.ssr||e.build?.ssr),a=e.envDir||process.cwd(),s=ee(t.mode,a,``);Object.assign(process.env,s),o||=await r(n);let d=(await import(`./package-D-7aOtPv.mjs`)).version,p=P(o.plugins||[],d);return o.plugins=p,l=new Ne(p,o),u=p.flatMap(e=>I.getSanitizedCapabilities(e).vitePlugins||[]),c&&await l.runHook(`beforeBuild`),{ssgOptions:{entry:`boltdocs/entry`,htmlEntry:`index.html`,dirStyle:`nested`,includeAllRoutes:!0,mock:!0,script:`async`,beastiesOptions:{preload:`media`},onFinished:async e=>{let t=je(w(await f(n,o)),o);t&&x.writeFileSync(v.join(e,`sitemap.xml`),t);let r=Me(o);x.writeFileSync(v.join(e,`robots.txt`),r)}},build:{ssrManifest:c},optimizeDeps:{include:[`react`,`react-dom`,`react-dom/client`,`react-router-dom`,`react-helmet-async`,`react-fast-compare`,`invariant`],exclude:[`boltdocs`,`boltdocs/client`]},resolve:{alias:[{find:`react-router-dom`,replacement:G(`react-router-dom`)},{find:`react-helmet-async`,replacement:G(`react-helmet-async`)},{find:`@bdocs/ssg`,replacement:G(`@bdocs/ssg`)}],dedupe:[`react`,`react-dom`,...i?[]:[`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`]]},ssr:{external:[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`,...Je()],optimizeDeps:{include:[`react-fast-compare`,`invariant`]},noExternal:[]}}},configResolved(e){s=e,l?.runHook(`configResolved`,o)},resolveId(e,t,n){let r=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`].find(t=>e===t||e.startsWith(t+`/`)||e.includes(`/node_modules/${t}/`)||t.startsWith(`@`)&&e.includes(`/node_modules/${t.replace(`/`,v.sep)}/`));if(r&&n?.ssr){let t=e;if(!v.isAbsolute(e)){let n=W;try{let e=v.join(process.cwd(),`node_modules/boltdocs/package.json`);if(x.existsSync(e)){let t=x.realpathSync(e);n=p.createRequire(t)}else n=p.createRequire(v.join(process.cwd(),`package.json`))}catch{}try{t=r===`@bdocs/ssg`||r===`react-router-dom`||r===`react-helmet-async`?G(e,n):n.resolve(e)}catch{try{t=r===`@bdocs/ssg`||r===`react-router-dom`||r===`react-helmet-async`?G(e,W):W.resolve(e)}catch{}}}try{t=x.realpathSync(t)}catch{}return{id:t,external:!0}}return null},transformIndexHtml:{order:`pre`,handler(e){return E(e,o)}},async buildEnd(){let{pool:e}=await import(`./worker-pool-Bd8Y9KDv.mjs`);await e.terminate()},async closeBundle(){!c||s?.build?.ssr||(await l?.runHook(`afterBuild`),await l?.runHook(`buildEnd`))}},Re(e,d,()=>s,n),Ge(n,i,d,e=>{o=e},()=>l),{...te({includePublic:!0,png:{quality:80},jpeg:{quality:80},jpg:{quality:80},webp:{quality:80},avif:{quality:80},svg:{multipass:!0,plugins:[{name:`preset-default`}]}}),apply:`build`},...u]}const K=new l(`mdx`),Xe=[de.default||de,fe.default||fe,pe.default||pe,me.default||me,he.default||he,ge.default||ge,_e.default||_e],Ze=[ve,ye,be,xe,Se,Ce,we,Te,Ee,De,Oe,ke,Ae];let Qe=null,q=null;const $e=()=>(Qe??=le(),Qe),et=async e=>q||(q=ue({themes:Xe,langs:Ze,engine:$e()}),q),J={JSX_FLOW_ELEMENT:`mdxJsxFlowElement`,JSX_TEXT_ELEMENT:`mdxJsxTextElement`,JSX_ATTRIBUTE:`mdxJsxAttribute`,ELEMENT:`element`,TEXT:`text`,CODE:`code`},tt={PRE:`pre`,CODE:`code`},Y={TITLE:`data-title`,LANG:`data-lang`,HIGHLIGHTED:`data-highlighted`,HIGHLIGHTED_HTML:`data-highlighted-html`},X={LINE_NUMBERS:`shiki-line-numbers`,WORD_WRAP:`shiki-word-wrap`,FALLBACK:`shiki-fallback`},nt={LIGHT:`github-light`,DARK:`github-dark`},Z={LANG:`plaintext`,MDX_DEFAULT_LANG:`text`},rt=(e={})=>{let{activateByDefault:t=!1}=e;return{name:`boltdocs:line-numbers`,pre(e){let n=this.options.meta?.lineNumbers===!0;(t||n)&&this.addClassToHast(e,X.LINE_NUMBERS)}}},it=(e={})=>{let{activateByDefault:t=!1}=e;return{name:`boltdocs:word-wrap`,pre(e){let n=this.options.meta?.wordWrap===!0;(t||n)&&this.addClassToHast(e,X.WORD_WRAP)}}},at=()=>({name:`AddTitleProperty`,pre(e){let t=this.options.meta?.title;t&&(e.properties[Y.TITLE]=t)}}),ot=()=>({name:`AddLanguageProperty`,pre(e){e.properties[Y.LANG]=this.options.lang||Z.LANG}});function st(e){let t={};if(!e)return t;/lineNumbers|showLineNumbers/.test(e)&&(t.lineNumbers=!0),/wordWrap|word-wrap/.test(e)&&(t.wordWrap=!0);let n=e.match(/title=(["'])(.*?)\1/);return n&&(t.title=n[2]),t}var ct=class{config;constructor(e){this.config=e}getTheme(){return this.config?.theme?.codeTheme||{light:nt.LIGHT,dark:nt.DARK}}async getHighlighter(){return await et(this.getTheme())}getOptions(e,t){let n=this.getTheme(),r={},i=``;typeof t==`string`?(i=t,r=st(t)):t&&(r=t,i=t.__raw||``);let a={lang:e||Z.LANG,meta:{__raw:i,...r},transformers:[rt(),it(),at(),ot()]};return typeof n==`object`?a.themes={light:n.light,dark:n.dark}:a.theme=n,a}async render(e,t,n){try{let r=await this.getHighlighter(),i=this.getOptions(t,n);return r.codeToHtml(e,i)}catch(t){return console.error(`[ShikiAdapter] Failed to render code:`,t),`<pre class="${X.FALLBACK}"><code>${lt(e)}</code></pre>`}}};function lt(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#039;`)}let Q=null,ut;function dt(e){let t=JSON.stringify(e?.theme?.codeTheme||null);return(Q===null||ut!==t)&&(Q=new ct(e),ut=t),Q}function ft(e){let t=dt(e);return async e=>{let n=await t.getHighlighter();ce(e,J.ELEMENT,e=>{if(e.tagName===tt.PRE&&e.children?.[0]?.type===J.ELEMENT&&e.children[0].tagName===tt.CODE){let r=e.children[0],i=(r.properties?.className||[]).find(e=>e.startsWith(`language-`)),a=i?i.slice(9):Z.MDX_DEFAULT_LANG;if(a===`mermaid`)return;let o=r.children?.[0]?.value||``,s=st(r.properties?.metastring||r.data?.meta||``),c=t.getOptions(a,s),l=``;try{l=n.codeToHtml(o,c)}catch(e){console.error(`[rehypeShiki] Failed to highlight code block:`,e),l=`<pre class="${X.FALLBACK}"><code>${lt(o)}</code></pre>`}e.properties=e.properties||{},s.title&&(e.properties[Y.TITLE]=s.title),e.properties[Y.HIGHLIGHTED]=`true`,e.properties[Y.HIGHLIGHTED_HTML]=l,e.properties[Y.LANG]=a,e.children=[]}})}}function pt(){return e=>{ce(e,J.CODE,e=>{e.meta&&(e.data=e.data||{},e.data.hProperties=e.data.hProperties||{},e.data.hProperties.metastring=e.meta)})}}let mt=!1;function $(e,t=ie){let n=e?.plugins?.flatMap(e=>I.getSanitizedCapabilities(e).remarkPlugins||[])||[],r=e?.plugins?.flatMap(e=>I.getSanitizedCapabilities(e).rehypePlugins||[])||[],i=t({remarkPlugins:[ae,oe,pt,...n],rehypePlugins:[se,[ft,e],...r],jsxRuntime:`automatic`});return{...i,name:`vite-plugin-boltdocs-mdx`,async buildStart(){mt||=(await K.load(),!0),i.buildStart&&await i.buildStart.call(this)},async transform(e,t,n){let[r]=t.split(`?`);if(!r.endsWith(`.md`)&&!r.endsWith(`.mdx`))return i.transform?.call(this,e,t,n);let a=`${r}:${S.createHash(`md5`).update(e).digest(`hex`)}:${process.env.NODE_ENV===`production`?`prod`:`dev`}:v3`,o=await K.getAsync(a);if(o)return{code:o,map:null};let s=await i.transform.call(this,e,r,n);return s&&typeof s==`object`&&s.code&&(process.env.NODE_ENV!==`production`&&(s.code+=`
108
108
  if (import.meta.hot) {
109
109
  import.meta.hot.accept();
110
110
  }
@@ -104,7 +104,7 @@ export const createRoot = ViteReactSSG(
104
104
  const mdxComponents = components.default || components;
105
105
  export default mdxComponents;
106
106
  export * from '${e}';`}return`export default {};`}if(u===`layout`){let e=[`tsx`,`jsx`],n=null;for(let t of e){let e=c.default.resolve(a,`layout.${t}`);if(d.default.existsSync(e)){n=e;break}}if(n)return`import UserLayout from '${t.l(n)}';
107
- export default UserLayout;`;throw Error(`[Boltdocs] Layout file not found. A 'layout.tsx' or 'layout.jsx' file is mandatory in your docs directory. Please create one to define your site structure.`)}if(u===`icons`){let e=[`tsx`,`jsx`,`ts`,`js`],n=null;for(let t of e){let e=c.default.resolve(a,`icons.${t}`);if(d.default.existsSync(e)){n=e;break}}return n?`import * as icons from '${t.l(n)}';\nexport default icons;`:`export default {};`}if(u===`search`){if(!W){let e=xe(await r.t(a,l));W=`export default ${JSON.stringify(e,null,2)};`}return W}if(u===`client`){let e=__dirname,n=``;for(;e&&e!==c.default.parse(e).root;){let r=c.default.join(e,`src/client/index.ts`),i=c.default.join(e,`dist/client/index.mjs`),a=c.default.join(e,`client/index.ts`);if(d.default.existsSync(r)){n=t.l(r);break}if(d.default.existsSync(i)){n=t.l(i);break}if(d.default.existsSync(a)){n=t.l(a);break}e=c.default.dirname(e)}if(!n)throw Error(`[boltdocs] Could not resolve boltdocs/client entry point starting from ${__dirname}`);return`export * from '${n}';`}}}}const we={"X-Content-Type-Options":`nosniff`,"X-Frame-Options":`DENY`,"X-XSS-Protection":`1; mode=block`,"Referrer-Policy":`strict-origin-when-cross-origin`,"Permissions-Policy":`camera=(), microphone=(), geolocation=()`,"Strict-Transport-Security":`max-age=31536000; includeSubDomains`};function Te(e){let t=process.env.NODE_ENV===`development`,n={"default-src":[`'self'`],"script-src":[`'self'`,`'unsafe-inline'`],"style-src":[`'self'`,`'unsafe-inline'`],"img-src":[`'self'`,`data:`,`https:`],"font-src":[`'self'`],"connect-src":[`'self'`]};return t&&(n[`script-src`]=[`'self'`,`'unsafe-eval'`,`'unsafe-inline'`],n[`style-src`]=[`'self'`,`'unsafe-inline'`]),Object.entries(n).map(([e,t])=>`${e} ${t.join(` `)}`).join(`; `)}const G=new Map;async function Ee(e){try{let{data:n}=await t.u(e),r=JSON.stringify(n);return f.default.createHash(`md5`).update(r).digest(`hex`)}catch{return``}}function De(e){return G.get(e)}function Oe(e,t){G.set(e,t)}function ke(e){G.delete(e)}function K(e,t){let n=e.moduleGraph.getModuleById(`\0virtual:boltdocs-${t}.ts`);n&&e.moduleGraph.invalidateModule(n)}function Ae(e,n,a,o,s){let l=new Map;return{name:`vite-plugin-boltdocs-dev-server`,apply:`serve`,async configureServer(o){let u=s();await u?.runHook(`beforeDev`),i.s(e,process.cwd(),a()).catch(e=>{console.error(`[boltdocs] Failed to generate initial link tree:`,e)}),setTimeout(async()=>{try{let{generateRoutes:t}=await Promise.resolve().then(()=>require(`./routes-CHf76Ye4.cjs`)),n=await t(e,a());for(let e of n)if(e.filePath){let t=c.default.relative(process.cwd(),e.filePath).replace(/\\/g,`/`),n=t.startsWith(`/`)?t:`/${t}`;await o.transformRequest(n).catch(()=>{}),await new Promise(e=>setTimeout(e,50))}}catch{}},1e3),o.middlewares.use((e,t,n)=>{process.env.NODE_ENV===`production`&&Object.entries(we).forEach(([e,n])=>{t.setHeader(e,n)});let r=a();r.security?.enableCSP&&t.setHeader(`Content-Security-Policy`,Te(r)),n()}),o.middlewares.use((e,t,n)=>{if(e.url===`/robots.txt`){n();return}n()}),o.middlewares.use(async(e,t,n)=>{let r=e.url?.split(`?`)[0]||`/`,i=e.headers.accept||``,s=a(),c=/\.(js|css|png|jpe?g|gif|svg|ico|webp|woff2?|ttf|otf|mp4|webm|ogg|mp3|wav|flac|aac|pdf|zip|gz|map|json)$/i.test(r);if(i.includes(`text/html`)&&!c){let n=de(s);n=fe(n,s),n=await o.transformIndexHtml(e.url||`/`,n),t.statusCode=200,t.setHeader(`Content-Type`,`text/html`),t.end(n);return}n()});let d=i.f.map(e=>c.default.resolve(process.cwd(),e)),f=[`tsx`,`jsx`].map(t=>c.default.resolve(e,`layout.${t}`)),p=[`tsx`,`ts`,`jsx`,`js`],m=p.map(t=>c.default.resolve(e,`mdx-components.${t}`)),h=p.map(t=>c.default.resolve(e,`pages-external/index.${t}`)),g=p.map(t=>c.default.resolve(e,`icons.${t}`));o.watcher.add([...d,...m,...f,...h,...g]);let _=async(s,u)=>{try{let d=t.l(s);if(i.f.some(e=>d.endsWith(e))){o.restart();return}if(p.some(e=>d.endsWith(`mdx-components.${e}`))){i.g(a(),e),K(o,`mdx-components.tsx`),o.ws.send({type:`full-reload`});return}if(p.some(e=>d.endsWith(`icons.${e}`))){K(o,`icons.tsx`),o.ws.send({type:`full-reload`});return}if(d.endsWith(`layout.tsx`)||d.endsWith(`layout.jsx`)){K(o,`layout.tsx`),o.ws.send({type:`full-reload`});return}if(d.includes(`/pages-external/`)||d.includes(`\\pages-external\\`)){K(o,`entry`),o.ws.send({type:`full-reload`});return}if(!d.toLowerCase().startsWith(n.toLowerCase())||!t.s(d))return;if(u===`add`||u===`unlink`){u===`unlink`&&ke(s),r.n(),Se();let t=a();i.g(t,e),K(o,`config`),K(o,`routes`),K(o,`search`),i.s(e,process.cwd(),t).catch(e=>{console.error(`[boltdocs] Failed to update link tree:`,e)}),o.ws.send({type:`custom`,event:`boltdocs:config-update`,data:{theme:t?.theme,i18n:t?.i18n,versions:t?.versions,siteUrl:t?.siteUrl}}),o.ws.send({type:`full-reload`});return}l.has(d)&&clearTimeout(l.get(d)),l.set(d,setTimeout(async()=>{l.delete(d);try{let n=De(s),i=await Ee(s);Oe(s,i),r.r(s),n!==void 0&&n!==i&&(K(o,`routes`),K(o,`search`));let a=t.l(c.default.relative(e,s)),l=o.moduleGraph.getModulesByFile(d);if(l)for(let e of l)o.moduleGraph.invalidateModule(e);o.ws.send({type:`custom`,event:`boltdocs:mdx-update`,data:{file:d,relPath:a}})}catch(e){console.error(`[boltdocs] HMR error processing content change:`,e)}},150))}catch(e){console.error(`[boltdocs] HMR error during ${u} event:`,e)}};o.watcher.on(`add`,e=>_(e,`add`)),o.watcher.on(`unlink`,e=>_(e,`unlink`)),o.watcher.on(`change`,e=>_(e,`change`)),await u?.runHook(`afterDev`)},handleHotUpdate({file:e,server:r}){let i=t.l(e);if(i.toLowerCase().startsWith(n.toLowerCase())&&t.s(i))return[]}}}const q=g.createRequire(require(`url`).pathToFileURL(__filename).href);function je(e){let t=c.default.dirname(e);for(;t&&t!==c.default.dirname(t);){let e=c.default.join(t,`package.json`);if(d.default.existsSync(e))return e;t=c.default.dirname(t)}return null}function Me(e){let t=e.split(`/`);return e.startsWith(`@`)?{packageName:t.slice(0,2).join(`/`),subpath:t.slice(2).join(`/`)}:{packageName:t[0],subpath:t.slice(1).join(`/`)}}function J(e,t=q){try{let{packageName:n,subpath:r}=Me(e),i;try{i=t.resolve(n+`/package.json`)}catch{i=je(t.resolve(n))||``}if(!i)throw Error(`Could not find package.json for ${n}`);let a=c.default.dirname(i),o=JSON.parse(d.default.readFileSync(i,`utf-8`)),s=``,l=r?`./`+r:`.`;if(o.exports){let e=o.exports[l]||o.exports[r];e&&(s=typeof e==`string`?e:e.import||e.default||e.require||e)}if(!s&&!r&&(s=o.module||o.main||`index.js`),typeof s==`object`&&(s=s.import||s.default||s.require||``),s){let e=c.default.resolve(a,s);if(d.default.existsSync(e))return e}}catch{}return t.resolve(e)}function Ne(){let e=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`],n=[],r=q;try{let e=c.default.join(process.cwd(),`node_modules/boltdocs/package.json`);if(d.default.existsSync(e)){let t=d.default.realpathSync(e);r=g.createRequire(t)}else r=g.createRequire(c.default.join(process.cwd(),`package.json`))}catch{}for(let t of e)try{let e=``;e=t===`@bdocs/ssg`||t===`react-router-dom`||t===`react-helmet-async`?J(t,r):r.resolve(t),e&&n.push(d.default.realpathSync(e))}catch{}if(r!==q)for(let t of e)try{let e=``;e=t===`@bdocs/ssg`||t===`react-router-dom`||t===`react-helmet-async`?J(t,q):q.resolve(t),e&&n.push(d.default.realpathSync(e))}catch{}for(let e of[`react/jsx-runtime`,`react/jsx-dev-runtime`,`react-dom/client`]){try{n.push(d.default.realpathSync(r.resolve(e)))}catch{}if(r!==q)try{n.push(d.default.realpathSync(q.resolve(e)))}catch{}}return Array.from(new Set(n)).map(e=>t.l(e))}function Pe(e={},n){let a=c.default.resolve(process.cwd(),e.docsDir||`docs`),o=t.l(a),l=n,u,f=!1,m,h=[],_=()=>l;return[{name:`vite-plugin-boltdocs`,enforce:`pre`,async config(e,t){f=t.command===`build`;let n=!!(t.ssrBuild||t.ssr||e.build?.ssr),o=e.envDir||process.cwd(),u=(0,s.loadEnv)(t.mode,o,``);Object.assign(process.env,u),l||=await i.m(a);let p=(await Promise.resolve().then(()=>require(`./package-B9djt7Wj.cjs`))).version,g=_e(l.plugins||[],p);return l.plugins=g,m=new ve(g,l),h=g.flatMap(e=>B.getSanitizedCapabilities(e).vitePlugins||[]),f&&await m.runHook(`beforeBuild`),{ssgOptions:{entry:`boltdocs/entry`,htmlEntry:`index.html`,dirStyle:`nested`,includeAllRoutes:!0,mock:!0,script:`async`,beastiesOptions:{preload:`media`},onFinished:async e=>{let t=le(ce(await r.t(a,l)),l);t&&d.default.writeFileSync(c.default.join(e,`sitemap.xml`),t);let n=ue(l);d.default.writeFileSync(c.default.join(e,`robots.txt`),n)}},build:{ssrManifest:f},optimizeDeps:{include:[`react`,`react-dom`,`react-dom/client`,`react-router-dom`,`react-helmet-async`,`react-fast-compare`,`invariant`],exclude:[`boltdocs`,`boltdocs/client`]},resolve:{alias:[{find:`react-router-dom`,replacement:J(`react-router-dom`)},{find:`react-helmet-async`,replacement:J(`react-helmet-async`)},{find:`@bdocs/ssg`,replacement:J(`@bdocs/ssg`)}],dedupe:[`react`,`react-dom`,...n?[]:[`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`]]},ssr:{external:[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`,...Ne()],optimizeDeps:{include:[`react-fast-compare`,`invariant`]},noExternal:[]}}},configResolved(e){u=e,m?.runHook(`configResolved`,l)},resolveId(e,t,n){let r=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`].find(t=>e===t||e.startsWith(t+`/`)||e.includes(`/node_modules/${t}/`)||t.startsWith(`@`)&&e.includes(`/node_modules/${t.replace(`/`,c.default.sep)}/`));if(r&&n?.ssr){let t=e;if(!c.default.isAbsolute(e)){let n=q;try{let e=c.default.join(process.cwd(),`node_modules/boltdocs/package.json`);if(d.default.existsSync(e)){let t=d.default.realpathSync(e);n=g.createRequire(t)}else n=g.createRequire(c.default.join(process.cwd(),`package.json`))}catch{}try{t=r===`@bdocs/ssg`||r===`react-router-dom`||r===`react-helmet-async`?J(e,n):n.resolve(e)}catch{try{t=r===`@bdocs/ssg`||r===`react-router-dom`||r===`react-helmet-async`?J(e,q):q.resolve(e)}catch{}}}try{t=d.default.realpathSync(t)}catch{}return{id:t,external:!0}}return null},transformIndexHtml:{order:`pre`,handler(e){return fe(e,l)}},async buildEnd(){let{pool:e}=await Promise.resolve().then(()=>require(`./worker-pool-BwU8ckrg.cjs`));await e.terminate()},async closeBundle(){!f||u?.build?.ssr||(await m?.runHook(`afterBuild`),await m?.runHook(`buildEnd`))}},Ce(e,_,()=>u,a),Ae(a,o,_,e=>{l=e},()=>m),{...(0,p.ViteImageOptimizer)({includePublic:!0,png:{quality:80},jpeg:{quality:80},jpg:{quality:80},webp:{quality:80},avif:{quality:80},svg:{multipass:!0,plugins:[{name:`preset-default`}]}}),apply:`build`},...h]}const Y=new n.r(`mdx`),Fe=[x.default.default||x.default,S.default.default||S.default,C.default.default||C.default,w.default.default||w.default,T.default.default||T.default,E.default.default||E.default,D.default.default||D.default],Ie=[O.default,re.default,k.default,A.default,j.default,M.default,ie.default,ae.default,oe.default,se.default,N.default,P.default,F.default];let Le=null,X=null;const Re=()=>(Le??=(0,te.createJavaScriptRegexEngine)(),Le),ze=async e=>X||(X=(0,ne.createHighlighterCore)({themes:Fe,langs:Ie,engine:Re()}),X),Z={JSX_FLOW_ELEMENT:`mdxJsxFlowElement`,JSX_TEXT_ELEMENT:`mdxJsxTextElement`,JSX_ATTRIBUTE:`mdxJsxAttribute`,ELEMENT:`element`,TEXT:`text`,CODE:`code`},Be={PRE:`pre`,CODE:`code`},Q={TITLE:`data-title`,LANG:`data-lang`,HIGHLIGHTED:`data-highlighted`,HIGHLIGHTED_HTML:`data-highlighted-html`},$={LINE_NUMBERS:`shiki-line-numbers`,WORD_WRAP:`shiki-word-wrap`,FALLBACK:`shiki-fallback`},Ve={LIGHT:`github-light`,DARK:`github-dark`},He={LANG:`plaintext`,MDX_DEFAULT_LANG:`text`},Ue=(e={})=>{let{activateByDefault:t=!1}=e;return{name:`boltdocs:line-numbers`,pre(e){let n=this.options.meta?.lineNumbers===!0;(t||n)&&this.addClassToHast(e,$.LINE_NUMBERS)}}},We=(e={})=>{let{activateByDefault:t=!1}=e;return{name:`boltdocs:word-wrap`,pre(e){let n=this.options.meta?.wordWrap===!0;(t||n)&&this.addClassToHast(e,$.WORD_WRAP)}}},Ge=()=>({name:`AddTitleProperty`,pre(e){let t=this.options.meta?.title;t&&(e.properties[Q.TITLE]=t)}}),Ke=()=>({name:`AddLanguageProperty`,pre(e){e.properties[Q.LANG]=this.options.lang||He.LANG}});function qe(e){let t={};if(!e)return t;/lineNumbers|showLineNumbers/.test(e)&&(t.lineNumbers=!0),/wordWrap|word-wrap/.test(e)&&(t.wordWrap=!0);let n=e.match(/title=(["'])(.*?)\1/);return n&&(t.title=n[2]),t}var Je=class{config;constructor(e){this.config=e}getTheme(){return this.config?.theme?.codeTheme||{light:Ve.LIGHT,dark:Ve.DARK}}async getHighlighter(){return await ze(this.getTheme())}getOptions(e,t){let n=this.getTheme(),r={},i=``;typeof t==`string`?(i=t,r=qe(t)):t&&(r=t,i=t.__raw||``);let a={lang:e||He.LANG,meta:{__raw:i,...r},transformers:[Ue(),We(),Ge(),Ke()]};return typeof n==`object`?a.themes={light:n.light,dark:n.dark}:a.theme=n,a}async render(e,t,n){try{let r=await this.getHighlighter(),i=this.getOptions(t,n);return r.codeToHtml(e,i)}catch(t){return console.error(`[ShikiAdapter] Failed to render code:`,t),`<pre class="${$.FALLBACK}"><code>${Ye(e)}</code></pre>`}}};function Ye(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#039;`)}let Xe=null,Ze;function Qe(e){let t=JSON.stringify(e?.theme?.codeTheme||null);return(Xe===null||Ze!==t)&&(Xe=new Je(e),Ze=t),Xe}function $e(e){let t=Qe(e);return async e=>{let n=await t.getHighlighter();(0,ee.visit)(e,Z.ELEMENT,e=>{if(e.tagName===Be.PRE&&e.children?.[0]?.type===Z.ELEMENT&&e.children[0].tagName===Be.CODE){let r=e.children[0],i=(r.properties?.className||[]).find(e=>e.startsWith(`language-`)),a=i?i.slice(9):He.MDX_DEFAULT_LANG;if(a===`mermaid`)return;let o=r.children?.[0]?.value||``,s=qe(r.properties?.metastring||r.data?.meta||``),c=t.getOptions(a,s),l=``;try{l=n.codeToHtml(o,c)}catch(e){console.error(`[rehypeShiki] Failed to highlight code block:`,e),l=`<pre class="${$.FALLBACK}"><code>${Ye(o)}</code></pre>`}e.properties=e.properties||{},s.title&&(e.properties[Q.TITLE]=s.title),e.properties[Q.HIGHLIGHTED]=`true`,e.properties[Q.HIGHLIGHTED_HTML]=l,e.properties[Q.LANG]=a,e.children=[]}})}}function et(){return e=>{(0,ee.visit)(e,Z.CODE,e=>{e.meta&&(e.data=e.data||{},e.data.hProperties=e.data.hProperties||{},e.data.hProperties.metastring=e.meta)})}}let tt=!1;function nt(e,t=_.default){let n=e?.plugins?.flatMap(e=>B.getSanitizedCapabilities(e).remarkPlugins||[])||[],r=e?.plugins?.flatMap(e=>B.getSanitizedCapabilities(e).rehypePlugins||[])||[],i=t({remarkPlugins:[v.default,y.default,et,...n],rehypePlugins:[b.default,[$e,e],...r],jsxRuntime:`automatic`});return{...i,name:`vite-plugin-boltdocs-mdx`,async buildStart(){tt||=(await Y.load(),!0),i.buildStart&&await i.buildStart.call(this)},async transform(e,t,n){let[r]=t.split(`?`);if(!r.endsWith(`.md`)&&!r.endsWith(`.mdx`))return i.transform?.call(this,e,t,n);let a=`${r}:${f.default.createHash(`md5`).update(e).digest(`hex`)}:${process.env.NODE_ENV===`production`?`prod`:`dev`}:v3`,o=await Y.getAsync(a);if(o)return{code:o,map:null};let s=await i.transform.call(this,e,r,n);return s&&typeof s==`object`&&s.code&&(process.env.NODE_ENV!==`production`&&(s.code+=`
107
+ export default UserLayout;`;throw Error(`[Boltdocs] Layout file not found. A 'layout.tsx' or 'layout.jsx' file is mandatory in your docs directory. Please create one to define your site structure.`)}if(u===`icons`){let e=[`tsx`,`jsx`,`ts`,`js`],n=null;for(let t of e){let e=c.default.resolve(a,`icons.${t}`);if(d.default.existsSync(e)){n=e;break}}return n?`import * as icons from '${t.l(n)}';\nexport default icons;`:`export default {};`}if(u===`search`){if(!W){let e=xe(await r.t(a,l));W=`export default ${JSON.stringify(e,null,2)};`}return W}if(u===`client`){let e=__dirname,n=``;for(;e&&e!==c.default.parse(e).root;){let r=c.default.join(e,`src/client/index.ts`),i=c.default.join(e,`dist/client/index.mjs`),a=c.default.join(e,`client/index.ts`);if(d.default.existsSync(r)){n=t.l(r);break}if(d.default.existsSync(i)){n=t.l(i);break}if(d.default.existsSync(a)){n=t.l(a);break}e=c.default.dirname(e)}if(!n)throw Error(`[boltdocs] Could not resolve boltdocs/client entry point starting from ${__dirname}`);return`export * from '${n}';`}}}}const we={"X-Content-Type-Options":`nosniff`,"X-Frame-Options":`DENY`,"X-XSS-Protection":`1; mode=block`,"Referrer-Policy":`strict-origin-when-cross-origin`,"Permissions-Policy":`camera=(), microphone=(), geolocation=()`,"Strict-Transport-Security":`max-age=31536000; includeSubDomains`};function Te(e){let t=process.env.NODE_ENV===`development`,n={"default-src":[`'self'`],"script-src":[`'self'`,`'unsafe-inline'`],"style-src":[`'self'`,`'unsafe-inline'`],"img-src":[`'self'`,`data:`,`https:`],"font-src":[`'self'`],"connect-src":[`'self'`]};return t&&(n[`script-src`]=[`'self'`,`'unsafe-eval'`,`'unsafe-inline'`],n[`style-src`]=[`'self'`,`'unsafe-inline'`]),Object.entries(n).map(([e,t])=>`${e} ${t.join(` `)}`).join(`; `)}const G=new Map;async function Ee(e){try{let{data:n}=await t.u(e),r=JSON.stringify(n);return f.default.createHash(`md5`).update(r).digest(`hex`)}catch{return``}}function De(e){return G.get(e)}function Oe(e,t){G.set(e,t)}function ke(e){G.delete(e)}function K(e,t){let n=e.moduleGraph.getModuleById(`\0virtual:boltdocs-${t}.ts`);n&&e.moduleGraph.invalidateModule(n)}function Ae(e,n,a,o,s){let l=new Map;return{name:`vite-plugin-boltdocs-dev-server`,apply:`serve`,async configureServer(o){let u=s();await u?.runHook(`beforeDev`),i.s(e,process.cwd(),a()).catch(e=>{console.error(`[boltdocs] Failed to generate initial link tree:`,e)}),setTimeout(async()=>{try{let{generateRoutes:t}=await Promise.resolve().then(()=>require(`./routes-CHf76Ye4.cjs`)),n=await t(e,a());for(let e of n)if(e.filePath){let t=c.default.relative(process.cwd(),e.filePath).replace(/\\/g,`/`),n=t.startsWith(`/`)?t:`/${t}`;await o.transformRequest(n).catch(()=>{}),await new Promise(e=>setTimeout(e,50))}}catch{}},1e3),o.middlewares.use((e,t,n)=>{process.env.NODE_ENV===`production`&&Object.entries(we).forEach(([e,n])=>{t.setHeader(e,n)});let r=a();r.security?.enableCSP&&t.setHeader(`Content-Security-Policy`,Te(r)),n()}),o.middlewares.use((e,t,n)=>{if(e.url===`/robots.txt`){n();return}n()}),o.middlewares.use(async(e,t,n)=>{let r=e.url?.split(`?`)[0]||`/`,i=e.headers.accept||``,s=a(),c=/\.(js|css|png|jpe?g|gif|svg|ico|webp|woff2?|ttf|otf|mp4|webm|ogg|mp3|wav|flac|aac|pdf|zip|gz|map|json)$/i.test(r);if(i.includes(`text/html`)&&!c){let n=de(s);n=fe(n,s),n=await o.transformIndexHtml(e.url||`/`,n),t.statusCode=200,t.setHeader(`Content-Type`,`text/html`),t.end(n);return}n()});let d=i.f.map(e=>c.default.resolve(process.cwd(),e)),f=[`tsx`,`jsx`].map(t=>c.default.resolve(e,`layout.${t}`)),p=[`tsx`,`ts`,`jsx`,`js`],m=p.map(t=>c.default.resolve(e,`mdx-components.${t}`)),h=p.map(t=>c.default.resolve(e,`pages-external/index.${t}`)),g=p.map(t=>c.default.resolve(e,`icons.${t}`));o.watcher.add([...d,...m,...f,...h,...g]);let _=async(s,u)=>{try{let d=t.l(s);if(i.f.some(e=>d.endsWith(e))){o.restart();return}if(p.some(e=>d.endsWith(`mdx-components.${e}`))){i.g(a(),e),K(o,`mdx-components.tsx`),o.ws.send({type:`full-reload`});return}if(p.some(e=>d.endsWith(`icons.${e}`))){K(o,`icons.tsx`),o.ws.send({type:`full-reload`});return}if(d.endsWith(`layout.tsx`)||d.endsWith(`layout.jsx`)){K(o,`layout.tsx`),o.ws.send({type:`full-reload`});return}if(d.includes(`/pages-external/`)||d.includes(`\\pages-external\\`)){K(o,`entry`),o.ws.send({type:`full-reload`});return}if(!d.toLowerCase().startsWith(n.toLowerCase())||!t.s(d))return;if(u===`add`||u===`unlink`){u===`unlink`&&ke(s),r.n(),Se();let t=a();i.g(t,e),K(o,`config`),K(o,`routes`),K(o,`search`),i.s(e,process.cwd(),t).catch(e=>{console.error(`[boltdocs] Failed to update link tree:`,e)}),o.ws.send({type:`custom`,event:`boltdocs:config-update`,data:{theme:t?.theme,i18n:t?.i18n,versions:t?.versions,siteUrl:t?.siteUrl}}),o.ws.send({type:`full-reload`});return}l.has(d)&&clearTimeout(l.get(d)),l.set(d,setTimeout(async()=>{l.delete(d);try{let n=De(s),i=await Ee(s);Oe(s,i),r.r(s),n!==void 0&&n!==i&&(K(o,`routes`),K(o,`search`));let a=t.l(c.default.relative(e,s)),l=o.moduleGraph.getModulesByFile(d);if(l)for(let e of l)o.moduleGraph.invalidateModule(e);o.ws.send({type:`custom`,event:`boltdocs:mdx-update`,data:{file:d,relPath:a}})}catch(e){console.error(`[boltdocs] HMR error processing content change:`,e)}},150))}catch(e){console.error(`[boltdocs] HMR error during ${u} event:`,e)}};o.watcher.on(`add`,e=>_(e,`add`)),o.watcher.on(`unlink`,e=>_(e,`unlink`)),o.watcher.on(`change`,e=>_(e,`change`)),await u?.runHook(`afterDev`)},handleHotUpdate({file:e,server:r}){let i=t.l(e);if(i.toLowerCase().startsWith(n.toLowerCase())&&t.s(i))return[]}}}const q=g.createRequire(require(`url`).pathToFileURL(__filename).href);function je(e){let t=c.default.dirname(e);for(;t&&t!==c.default.dirname(t);){let e=c.default.join(t,`package.json`);if(d.default.existsSync(e))return e;t=c.default.dirname(t)}return null}function Me(e){let t=e.split(`/`);return e.startsWith(`@`)?{packageName:t.slice(0,2).join(`/`),subpath:t.slice(2).join(`/`)}:{packageName:t[0],subpath:t.slice(1).join(`/`)}}function J(e,t=q){try{let{packageName:n,subpath:r}=Me(e),i;try{i=t.resolve(n+`/package.json`)}catch{i=je(t.resolve(n))||``}if(!i)throw Error(`Could not find package.json for ${n}`);let a=c.default.dirname(i),o=JSON.parse(d.default.readFileSync(i,`utf-8`)),s=``,l=r?`./`+r:`.`;if(o.exports){let e=o.exports[l]||o.exports[r];e&&(s=typeof e==`string`?e:e.import||e.default||e.require||e)}if(!s&&!r&&(s=o.module||o.main||`index.js`),typeof s==`object`&&(s=s.import||s.default||s.require||``),s){let e=c.default.resolve(a,s);if(d.default.existsSync(e))return e}}catch{}return t.resolve(e)}function Ne(){let e=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`],n=[],r=q;try{let e=c.default.join(process.cwd(),`node_modules/boltdocs/package.json`);if(d.default.existsSync(e)){let t=d.default.realpathSync(e);r=g.createRequire(t)}else r=g.createRequire(c.default.join(process.cwd(),`package.json`))}catch{}for(let t of e)try{let e=``;e=t===`@bdocs/ssg`||t===`react-router-dom`||t===`react-helmet-async`?J(t,r):r.resolve(t),e&&n.push(d.default.realpathSync(e))}catch{}if(r!==q)for(let t of e)try{let e=``;e=t===`@bdocs/ssg`||t===`react-router-dom`||t===`react-helmet-async`?J(t,q):q.resolve(t),e&&n.push(d.default.realpathSync(e))}catch{}for(let e of[`react/jsx-runtime`,`react/jsx-dev-runtime`,`react-dom/client`]){try{n.push(d.default.realpathSync(r.resolve(e)))}catch{}if(r!==q)try{n.push(d.default.realpathSync(q.resolve(e)))}catch{}}return Array.from(new Set(n)).map(e=>t.l(e))}function Pe(e={},n){let a=c.default.resolve(process.cwd(),e.docsDir||`docs`),o=t.l(a),l=n,u,f=!1,m,h=[],_=()=>l;return[{name:`vite-plugin-boltdocs`,enforce:`pre`,async config(e,t){f=t.command===`build`;let n=!!(t.ssrBuild||t.ssr||e.build?.ssr),o=e.envDir||process.cwd(),u=(0,s.loadEnv)(t.mode,o,``);Object.assign(process.env,u),l||=await i.m(a);let p=(await Promise.resolve().then(()=>require(`./package-BBsNSOR-.cjs`))).version,g=_e(l.plugins||[],p);return l.plugins=g,m=new ve(g,l),h=g.flatMap(e=>B.getSanitizedCapabilities(e).vitePlugins||[]),f&&await m.runHook(`beforeBuild`),{ssgOptions:{entry:`boltdocs/entry`,htmlEntry:`index.html`,dirStyle:`nested`,includeAllRoutes:!0,mock:!0,script:`async`,beastiesOptions:{preload:`media`},onFinished:async e=>{let t=le(ce(await r.t(a,l)),l);t&&d.default.writeFileSync(c.default.join(e,`sitemap.xml`),t);let n=ue(l);d.default.writeFileSync(c.default.join(e,`robots.txt`),n)}},build:{ssrManifest:f},optimizeDeps:{include:[`react`,`react-dom`,`react-dom/client`,`react-router-dom`,`react-helmet-async`,`react-fast-compare`,`invariant`],exclude:[`boltdocs`,`boltdocs/client`]},resolve:{alias:[{find:`react-router-dom`,replacement:J(`react-router-dom`)},{find:`react-helmet-async`,replacement:J(`react-helmet-async`)},{find:`@bdocs/ssg`,replacement:J(`@bdocs/ssg`)}],dedupe:[`react`,`react-dom`,...n?[]:[`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`]]},ssr:{external:[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`,`react-fast-compare`,`invariant`,...Ne()],optimizeDeps:{include:[`react-fast-compare`,`invariant`]},noExternal:[]}}},configResolved(e){u=e,m?.runHook(`configResolved`,l)},resolveId(e,t,n){let r=[`react`,`react-dom`,`react-router-dom`,`react-helmet-async`,`@bdocs/ssg`].find(t=>e===t||e.startsWith(t+`/`)||e.includes(`/node_modules/${t}/`)||t.startsWith(`@`)&&e.includes(`/node_modules/${t.replace(`/`,c.default.sep)}/`));if(r&&n?.ssr){let t=e;if(!c.default.isAbsolute(e)){let n=q;try{let e=c.default.join(process.cwd(),`node_modules/boltdocs/package.json`);if(d.default.existsSync(e)){let t=d.default.realpathSync(e);n=g.createRequire(t)}else n=g.createRequire(c.default.join(process.cwd(),`package.json`))}catch{}try{t=r===`@bdocs/ssg`||r===`react-router-dom`||r===`react-helmet-async`?J(e,n):n.resolve(e)}catch{try{t=r===`@bdocs/ssg`||r===`react-router-dom`||r===`react-helmet-async`?J(e,q):q.resolve(e)}catch{}}}try{t=d.default.realpathSync(t)}catch{}return{id:t,external:!0}}return null},transformIndexHtml:{order:`pre`,handler(e){return fe(e,l)}},async buildEnd(){let{pool:e}=await Promise.resolve().then(()=>require(`./worker-pool-BwU8ckrg.cjs`));await e.terminate()},async closeBundle(){!f||u?.build?.ssr||(await m?.runHook(`afterBuild`),await m?.runHook(`buildEnd`))}},Ce(e,_,()=>u,a),Ae(a,o,_,e=>{l=e},()=>m),{...(0,p.ViteImageOptimizer)({includePublic:!0,png:{quality:80},jpeg:{quality:80},jpg:{quality:80},webp:{quality:80},avif:{quality:80},svg:{multipass:!0,plugins:[{name:`preset-default`}]}}),apply:`build`},...h]}const Y=new n.r(`mdx`),Fe=[x.default.default||x.default,S.default.default||S.default,C.default.default||C.default,w.default.default||w.default,T.default.default||T.default,E.default.default||E.default,D.default.default||D.default],Ie=[O.default,re.default,k.default,A.default,j.default,M.default,ie.default,ae.default,oe.default,se.default,N.default,P.default,F.default];let Le=null,X=null;const Re=()=>(Le??=(0,te.createJavaScriptRegexEngine)(),Le),ze=async e=>X||(X=(0,ne.createHighlighterCore)({themes:Fe,langs:Ie,engine:Re()}),X),Z={JSX_FLOW_ELEMENT:`mdxJsxFlowElement`,JSX_TEXT_ELEMENT:`mdxJsxTextElement`,JSX_ATTRIBUTE:`mdxJsxAttribute`,ELEMENT:`element`,TEXT:`text`,CODE:`code`},Be={PRE:`pre`,CODE:`code`},Q={TITLE:`data-title`,LANG:`data-lang`,HIGHLIGHTED:`data-highlighted`,HIGHLIGHTED_HTML:`data-highlighted-html`},$={LINE_NUMBERS:`shiki-line-numbers`,WORD_WRAP:`shiki-word-wrap`,FALLBACK:`shiki-fallback`},Ve={LIGHT:`github-light`,DARK:`github-dark`},He={LANG:`plaintext`,MDX_DEFAULT_LANG:`text`},Ue=(e={})=>{let{activateByDefault:t=!1}=e;return{name:`boltdocs:line-numbers`,pre(e){let n=this.options.meta?.lineNumbers===!0;(t||n)&&this.addClassToHast(e,$.LINE_NUMBERS)}}},We=(e={})=>{let{activateByDefault:t=!1}=e;return{name:`boltdocs:word-wrap`,pre(e){let n=this.options.meta?.wordWrap===!0;(t||n)&&this.addClassToHast(e,$.WORD_WRAP)}}},Ge=()=>({name:`AddTitleProperty`,pre(e){let t=this.options.meta?.title;t&&(e.properties[Q.TITLE]=t)}}),Ke=()=>({name:`AddLanguageProperty`,pre(e){e.properties[Q.LANG]=this.options.lang||He.LANG}});function qe(e){let t={};if(!e)return t;/lineNumbers|showLineNumbers/.test(e)&&(t.lineNumbers=!0),/wordWrap|word-wrap/.test(e)&&(t.wordWrap=!0);let n=e.match(/title=(["'])(.*?)\1/);return n&&(t.title=n[2]),t}var Je=class{config;constructor(e){this.config=e}getTheme(){return this.config?.theme?.codeTheme||{light:Ve.LIGHT,dark:Ve.DARK}}async getHighlighter(){return await ze(this.getTheme())}getOptions(e,t){let n=this.getTheme(),r={},i=``;typeof t==`string`?(i=t,r=qe(t)):t&&(r=t,i=t.__raw||``);let a={lang:e||He.LANG,meta:{__raw:i,...r},transformers:[Ue(),We(),Ge(),Ke()]};return typeof n==`object`?a.themes={light:n.light,dark:n.dark}:a.theme=n,a}async render(e,t,n){try{let r=await this.getHighlighter(),i=this.getOptions(t,n);return r.codeToHtml(e,i)}catch(t){return console.error(`[ShikiAdapter] Failed to render code:`,t),`<pre class="${$.FALLBACK}"><code>${Ye(e)}</code></pre>`}}};function Ye(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#039;`)}let Xe=null,Ze;function Qe(e){let t=JSON.stringify(e?.theme?.codeTheme||null);return(Xe===null||Ze!==t)&&(Xe=new Je(e),Ze=t),Xe}function $e(e){let t=Qe(e);return async e=>{let n=await t.getHighlighter();(0,ee.visit)(e,Z.ELEMENT,e=>{if(e.tagName===Be.PRE&&e.children?.[0]?.type===Z.ELEMENT&&e.children[0].tagName===Be.CODE){let r=e.children[0],i=(r.properties?.className||[]).find(e=>e.startsWith(`language-`)),a=i?i.slice(9):He.MDX_DEFAULT_LANG;if(a===`mermaid`)return;let o=r.children?.[0]?.value||``,s=qe(r.properties?.metastring||r.data?.meta||``),c=t.getOptions(a,s),l=``;try{l=n.codeToHtml(o,c)}catch(e){console.error(`[rehypeShiki] Failed to highlight code block:`,e),l=`<pre class="${$.FALLBACK}"><code>${Ye(o)}</code></pre>`}e.properties=e.properties||{},s.title&&(e.properties[Q.TITLE]=s.title),e.properties[Q.HIGHLIGHTED]=`true`,e.properties[Q.HIGHLIGHTED_HTML]=l,e.properties[Q.LANG]=a,e.children=[]}})}}function et(){return e=>{(0,ee.visit)(e,Z.CODE,e=>{e.meta&&(e.data=e.data||{},e.data.hProperties=e.data.hProperties||{},e.data.hProperties.metastring=e.meta)})}}let tt=!1;function nt(e,t=_.default){let n=e?.plugins?.flatMap(e=>B.getSanitizedCapabilities(e).remarkPlugins||[])||[],r=e?.plugins?.flatMap(e=>B.getSanitizedCapabilities(e).rehypePlugins||[])||[],i=t({remarkPlugins:[v.default,y.default,et,...n],rehypePlugins:[b.default,[$e,e],...r],jsxRuntime:`automatic`});return{...i,name:`vite-plugin-boltdocs-mdx`,async buildStart(){tt||=(await Y.load(),!0),i.buildStart&&await i.buildStart.call(this)},async transform(e,t,n){let[r]=t.split(`?`);if(!r.endsWith(`.md`)&&!r.endsWith(`.mdx`))return i.transform?.call(this,e,t,n);let a=`${r}:${f.default.createHash(`md5`).update(e).digest(`hex`)}:${process.env.NODE_ENV===`production`?`prod`:`dev`}:v3`,o=await Y.getAsync(a);if(o)return{code:o,map:null};let s=await i.transform.call(this,e,r,n);return s&&typeof s==`object`&&s.code&&(process.env.NODE_ENV!==`production`&&(s.code+=`
108
108
  if (import.meta.hot) {
109
109
  import.meta.hot.accept();
110
110
  }
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- var e=`2.7.5`;Object.defineProperty(exports,`version`,{enumerable:!0,get:function(){return e}});
6
+ var e=`2.7.7`;Object.defineProperty(exports,`version`,{enumerable:!0,get:function(){return e}});
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- var e=`2.7.5`;export{e as version};
6
+ var e=`2.7.7`;export{e as version};
@@ -1,8 +1,8 @@
1
1
 
2
2
  import * as React$2 from "react";
3
3
  import { ComponentType, ReactNode } from "react";
4
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
5
4
  import { Plugin } from "vite";
5
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
6
6
 
7
7
  //#region src/shared/types.d.ts
8
8
  /**
@@ -428,10 +428,12 @@ declare const SidebarSubGroup: ({
428
428
  interface SidebarItemProps extends ComponentBase {
429
429
  route: ComponentRoute;
430
430
  activePath: string;
431
+ activeRoute?: ComponentRoute;
431
432
  }
432
433
  declare function SidebarItem({
433
434
  route,
434
435
  activePath,
436
+ activeRoute,
435
437
  className
436
438
  }: SidebarItemProps): _$react_jsx_runtime0.JSX.Element;
437
439
  /**
@@ -1,8 +1,8 @@
1
1
 
2
2
  import * as React$2 from "react";
3
3
  import { ComponentType, ReactNode } from "react";
4
- import { Plugin } from "vite";
5
4
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
5
+ import { Plugin } from "vite";
6
6
 
7
7
  //#region src/shared/types.d.ts
8
8
  /**
@@ -428,10 +428,12 @@ declare const SidebarSubGroup: ({
428
428
  interface SidebarItemProps extends ComponentBase {
429
429
  route: ComponentRoute;
430
430
  activePath: string;
431
+ activeRoute?: ComponentRoute;
431
432
  }
432
433
  declare function SidebarItem({
433
434
  route,
434
435
  activePath,
436
+ activeRoute,
435
437
  className
436
438
  }: SidebarItemProps): _$react_jsx_runtime0.JSX.Element;
437
439
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "boltdocs",
3
- "version": "2.7.5",
3
+ "version": "2.7.7",
4
4
  "description": "A lightweight documentation generator for React projects.",
5
5
  "main": "dist/node/index.mjs",
6
6
  "module": "dist/node/index.mjs",
@@ -87,7 +87,7 @@
87
87
  "vite": "7.0.0 || 8.0.0",
88
88
  "vite-plugin-image-optimizer": "2.0.3",
89
89
  "zod": "4.3.6",
90
- "@bdocs/ssg": "0.0.2"
90
+ "@bdocs/ssg": "0.0.4"
91
91
  },
92
92
  "peerDependencies": {
93
93
  "react": "19.0.0",
@@ -27,7 +27,7 @@ function DocsLayoutComponent({ children }: DocsLayoutThemeProps) {
27
27
  <DocsLayoutPrimitive.Body className="bg-main">
28
28
  <Sidebar routes={filteredRoutes || []} config={config} />
29
29
  <DocsLayoutPrimitive.Content className="animate-in fade-in duration-500 scroll-smooth">
30
- <DocsLayoutPrimitive.ContentMdx className="max-w-5xl px-2 pt-8 pb-24">
30
+ <DocsLayoutPrimitive.ContentMdx className="max-w-3xl sm:max-w-4xl lg:max-w-4xl px-2 pt-8 pb-24">
31
31
  <DocsLayoutPrimitive.Header>
32
32
  <div className="mb-4 border-b border-subtle pb-4 flex flex-wrap items-center justify-between gap-3">
33
33
  <Breadcrumbs />
@@ -282,28 +282,44 @@ export const SidebarSubGroup = ({
282
282
  export interface SidebarItemProps extends ComponentBase {
283
283
  route: ComponentRoute
284
284
  activePath: string
285
+ activeRoute?: ComponentRoute
285
286
  }
286
287
 
287
288
  export function SidebarItem({
288
289
  route,
289
290
  activePath,
291
+ activeRoute,
290
292
  className,
291
293
  }: SidebarItemProps) {
292
294
  const localizedHref = useLocalizedTo(route.path)
293
295
  const isCurrent =
294
296
  activePath ===
295
- (localizedHref.endsWith('/') ? localizedHref.slice(0, -1) : localizedHref)
297
+ (localizedHref.endsWith('/')
298
+ ? localizedHref.slice(0, -1)
299
+ : localizedHref) ||
300
+ (!!activeRoute?.filePath &&
301
+ !!route.filePath &&
302
+ activeRoute.filePath === route.filePath)
296
303
  const hasChildren = !!route.routes?.length || !!route.subRoutes?.length
297
304
  const children = route.routes || route.subRoutes
298
305
 
299
- const [isOpen, setIsOpen] = useState(() =>
300
- activePath.startsWith(localizedHref),
306
+ const [isOpen, setIsOpen] = useState(
307
+ () =>
308
+ activePath.startsWith(localizedHref) ||
309
+ (!!activeRoute?.filePath &&
310
+ !!route.filePath &&
311
+ activeRoute.filePath === route.filePath),
301
312
  )
302
313
  const [prevActivePath, setPrevActivePath] = useState(activePath)
303
314
 
304
315
  if (activePath !== prevActivePath) {
305
316
  setPrevActivePath(activePath)
306
- if (activePath.startsWith(localizedHref)) {
317
+ if (
318
+ activePath.startsWith(localizedHref) ||
319
+ (!!activeRoute?.filePath &&
320
+ !!route.filePath &&
321
+ activeRoute.filePath === route.filePath)
322
+ ) {
307
323
  setIsOpen(true)
308
324
  }
309
325
  }
@@ -325,6 +341,7 @@ export function SidebarItem({
325
341
  key={subRoute.path}
326
342
  route={subRoute}
327
343
  activePath={activePath}
344
+ activeRoute={activeRoute}
328
345
  />
329
346
  ))}
330
347
  </SidebarSubGroup>
@@ -351,7 +368,7 @@ export interface SidebarItemsProps extends ComponentBase {
351
368
  }
352
369
 
353
370
  export function SidebarItems({ routes, className }: SidebarItemsProps) {
354
- const { groups, ungrouped, activePath } = useSidebar(routes)
371
+ const { groups, ungrouped, activePath, activeRoute } = useSidebar(routes)
355
372
 
356
373
  return (
357
374
  <div className={cn('flex flex-col gap-6', className)}>
@@ -362,6 +379,7 @@ export function SidebarItems({ routes, className }: SidebarItemsProps) {
362
379
  key={route.path}
363
380
  route={route}
364
381
  activePath={activePath}
382
+ activeRoute={activeRoute}
365
383
  />
366
384
  ))}
367
385
  </SidebarGroup>
@@ -378,6 +396,7 @@ export function SidebarItems({ routes, className }: SidebarItemsProps) {
378
396
  key={route.path}
379
397
  route={route}
380
398
  activePath={activePath}
399
+ activeRoute={activeRoute}
381
400
  />
382
401
  ))}
383
402
  </SidebarGroup>
@@ -6,7 +6,6 @@ import { NotFound } from '../components/ui-base'
6
6
  const Loading = () => <div className="text-muted text-sm py-4">Loading...</div>
7
7
  import type React from 'react'
8
8
  import { useEffect } from 'react'
9
- import { Navigate } from 'react-router-dom'
10
9
 
11
10
  interface CreateRoutesOptions {
12
11
  routesData: ComponentRoute[]
@@ -98,6 +97,11 @@ export function createRoutes(options: CreateRoutesOptions): RouteRecord[] {
98
97
  const defaultVersion = config.versions?.defaultVersion
99
98
  const docsBase = (config.base || '/docs').replace(/\/$/, '')
100
99
 
100
+ // Base path under which all doc routes are nested (e.g., "/docs")
101
+ // Used to compute relative child paths for correct React Router nesting
102
+ let baseDocsPath = (config.base || '/docs').replace(/\/$/, '')
103
+ if (!baseDocsPath) baseDocsPath = '/'
104
+
101
105
  if (defaultVersion) {
102
106
  routesData.forEach((route) => {
103
107
  // If this route explicitly already belongs to a version, do not clone.
@@ -170,7 +174,13 @@ export function createRoutes(options: CreateRoutesOptions): RouteRecord[] {
170
174
  const normalizedFilePath = route.filePath.replace(/\\/g, '/')
171
175
  const moduleKey = moduleMap.get(normalizedFilePath)
172
176
  const moduleLoader = moduleKey ? mdxModules[moduleKey] : null
173
- const path = withBase(route.path === '' ? '/' : route.path)
177
+ const fullPath = withBase(route.path === '' ? '/' : route.path)
178
+ const path =
179
+ fullPath === baseDocsPath
180
+ ? '.'
181
+ : fullPath.startsWith(baseDocsPath + '/')
182
+ ? fullPath.slice(baseDocsPath.length + 1)
183
+ : fullPath
174
184
 
175
185
  return {
176
186
  path,
@@ -204,8 +214,6 @@ export function createRoutes(options: CreateRoutesOptions): RouteRecord[] {
204
214
  })
205
215
 
206
216
  // 2. Auto-fallback for the base paths (e.g. /docs, /docs/es) to the first documentation page
207
- let baseDocsPath = (config.base || '/docs').replace(/\/$/, '')
208
- if (!baseDocsPath) baseDocsPath = '/'
209
217
 
210
218
  const locales = config.i18n?.locales
211
219
  ? Array.isArray(config.i18n.locales)
@@ -290,7 +298,7 @@ export function createRoutes(options: CreateRoutesOptions): RouteRecord[] {
290
298
  : null
291
299
 
292
300
  // Prioritize: Find a real route that matches the default tab first, then fall back to the first route beginning with this pattern.
293
- const matchedRoute =
301
+ let matchedRouteObj: RouteRecord | undefined =
294
302
  defaultTabPath && docPathRegistry.has(defaultTabPath.replace(/\/$/, ''))
295
303
  ? docRoutes.find(
296
304
  (r) =>
@@ -299,19 +307,50 @@ export function createRoutes(options: CreateRoutesOptions): RouteRecord[] {
299
307
  : docRoutes.find((r) => filter(r.path) && r.path !== normalizedPath)
300
308
 
301
309
  // Ultimate fallback: the absolute first document
302
- const finalTarget = matchedRoute
303
- ? matchedRoute.path
304
- : docRoutes.length > 0
305
- ? docRoutes[0].path
306
- : null
310
+ if (!matchedRouteObj && docRoutes.length > 0) {
311
+ matchedRouteObj = docRoutes[0]
312
+ }
307
313
 
308
- if (finalTarget) {
314
+ if (matchedRouteObj) {
315
+ const redirectPath =
316
+ bPath === baseDocsPath
317
+ ? '.'
318
+ : bPath.startsWith(baseDocsPath + '/')
319
+ ? bPath.slice(baseDocsPath.length + 1)
320
+ : bPath
309
321
  docRoutes.push({
310
- path: bPath,
311
- element: <Navigate to={finalTarget} replace />,
312
- loader: async () => ({ path: bPath }),
313
- getStaticPaths: () => [bPath],
322
+ path: redirectPath,
323
+ element: matchedRouteObj.element,
324
+ loader: matchedRouteObj.loader,
325
+ getStaticPaths: () => [],
314
326
  })
327
+
328
+ const matchedMetaObj = docMetadata.find((m) => {
329
+ const fullPath = withBase(m.path === '' ? '/' : m.path)
330
+ const p =
331
+ fullPath === baseDocsPath
332
+ ? '.'
333
+ : fullPath.startsWith(baseDocsPath + '/')
334
+ ? fullPath.slice(baseDocsPath.length + 1)
335
+ : fullPath
336
+ return p === matchedRouteObj.path
337
+ })
338
+
339
+ if (matchedMetaObj) {
340
+ const canonicalPath = withBase(matchedMetaObj.path)
341
+ const canonicalUrl = config.siteUrl
342
+ ? `${config.siteUrl.replace(/\/$/, '')}${canonicalPath}`
343
+ : canonicalPath
344
+
345
+ docMetadata.push({
346
+ ...matchedMetaObj,
347
+ path: bPath,
348
+ seo: {
349
+ ...matchedMetaObj.seo,
350
+ canonical: canonicalUrl,
351
+ },
352
+ })
353
+ }
315
354
  }
316
355
  }
317
356
  })