@next-library/theme 1.0.7 → 1.0.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"mobile-menu.d.ts","sourceRoot":"","sources":["../../../../src/components/navigation/navbar/mobile-menu.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,UAAU,eAAe;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,CAAC,EAAE;QACb,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAED,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,YAAiB,EAAE,EAAE,eAAe,kDAmD1E"}
1
+ {"version":3,"file":"mobile-menu.d.ts","sourceRoot":"","sources":["../../../../src/components/navigation/navbar/mobile-menu.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,UAAU,eAAe;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,CAAC,EAAE;QACb,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAED,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,YAAiB,EAAE,EAAE,eAAe,kDAuD1E"}
@@ -4,10 +4,16 @@ interface SidebarNavigationProps {
4
4
  nodes: SidebarNode[];
5
5
  currentPath?: string;
6
6
  language?: Locale;
7
+ /**
8
+ * Called when a leaf page (a node with no children) is clicked. The mobile
9
+ * menu uses this to close the drawer once the user reaches an actual page,
10
+ * while folder navigations that only drill down leave the menu open.
11
+ */
12
+ onNavigateLeaf?: () => void;
7
13
  translations?: {
8
14
  toggleFolder?: string;
9
15
  };
10
16
  }
11
- export declare function SidebarNavigation({ nodes, currentPath, language: _language, translations, }: SidebarNavigationProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function SidebarNavigation({ nodes, currentPath, language: _language, onNavigateLeaf, translations, }: SidebarNavigationProps): import("react/jsx-runtime").JSX.Element;
12
18
  export {};
13
19
  //# sourceMappingURL=sidebar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../../src/components/navigation/sidebar-left/sidebar.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAUtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,UAAU,sBAAsB;IAC9B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE;QACb,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAsBD,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,WAAW,EACX,QAAQ,EAAE,SAAgB,EAC1B,YAAiB,GAClB,EAAE,sBAAsB,2CAkGxB"}
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../../src/components/navigation/sidebar-left/sidebar.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAUtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,UAAU,sBAAsB;IAC9B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE;QACb,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAsBD,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,WAAW,EACX,QAAQ,EAAE,SAAgB,EAC1B,cAAc,EACd,YAAiB,GAClB,EAAE,sBAAsB,2CAyGxB"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as React8 from 'react';
2
- import React8__default, { Suspense, useState, useRef, useEffect, useCallback, useMemo } from 'react';
2
+ import React8__default, { Suspense, useState, useRef, useEffect, useCallback, useMemo, useSyncExternalStore } from 'react';
3
3
  import { Logo, TopCategories, SearchBar, GithubLink, ThemeSwitcher, LanguageSwitcher, MobileMenu, GithubStar, ReadingProgress, Banner, CookieBanner, SidebarNavigation, GithubContributors, TableOfContents, CopyPageButton } from '@next-library/theme/client';
4
4
  import { FALLBACK_LOCALES, getDirection, getTopCategories, getSupportedLocales, getLocaleConfig, LOCALES_CONFIG } from '@next-library/core';
5
5
  export { extractLocaleFromPathname, extractPageData, getLocaleFromParams } from '@next-library/core';
@@ -3351,7 +3351,7 @@ function StickyBanner({
3351
3351
  locale = "en",
3352
3352
  closeLabel
3353
3353
  }) {
3354
- const [open, setOpen] = useState(true);
3354
+ const [open2, setOpen] = useState(true);
3355
3355
  const { scrollY } = useScroll();
3356
3356
  const translations2 = getTranslations(locale);
3357
3357
  const ariaLabel = closeLabel || translations2.closeBanner;
@@ -3374,8 +3374,8 @@ function StickyBanner({
3374
3374
  opacity: 0
3375
3375
  },
3376
3376
  animate: {
3377
- y: open ? 0 : -100,
3378
- opacity: open ? 1 : 0
3377
+ y: open2 ? 0 : -100,
3378
+ opacity: open2 ? 1 : 0
3379
3379
  },
3380
3380
  transition: {
3381
3381
  duration: 0.3,
@@ -3393,7 +3393,7 @@ function StickyBanner({
3393
3393
  scale: 1
3394
3394
  },
3395
3395
  className: "absolute top-1/2 right-2 -translate-y-1/2 cursor-pointer",
3396
- onClick: () => setOpen(!open),
3396
+ onClick: () => setOpen(!open2),
3397
3397
  "aria-label": ariaLabel,
3398
3398
  children: /* @__PURE__ */ jsx(CloseIcon, { className: "h-5 w-5 text-white", "aria-hidden": "true" })
3399
3399
  }
@@ -3545,7 +3545,7 @@ function SearchBar2({ language = "en", className }) {
3545
3545
  const router = useRouter();
3546
3546
  const translations2 = getTranslations(language);
3547
3547
  const [mounted, setMounted] = useState(false);
3548
- const [open, setOpen] = useState(false);
3548
+ const [open2, setOpen] = useState(false);
3549
3549
  const [query, setQuery] = useState("");
3550
3550
  const [results, setResults] = useState([]);
3551
3551
  const [recent, setRecent] = useState([]);
@@ -3592,7 +3592,7 @@ function SearchBar2({ language = "en", className }) {
3592
3592
  return () => window.removeEventListener("keydown", onKey);
3593
3593
  }, [isMac]);
3594
3594
  useEffect(() => {
3595
- if (!open) return;
3595
+ if (!open2) return;
3596
3596
  setRecent(readRecent());
3597
3597
  const t = setTimeout(() => inputRef.current?.focus(), 20);
3598
3598
  const prev = document.body.style.overflow;
@@ -3601,9 +3601,9 @@ function SearchBar2({ language = "en", className }) {
3601
3601
  clearTimeout(t);
3602
3602
  document.body.style.overflow = prev;
3603
3603
  };
3604
- }, [open]);
3604
+ }, [open2]);
3605
3605
  useEffect(() => {
3606
- if (!open) return;
3606
+ if (!open2) return;
3607
3607
  if (!query.trim()) {
3608
3608
  setResults([]);
3609
3609
  setIsLoading(false);
@@ -3624,10 +3624,10 @@ function SearchBar2({ language = "en", className }) {
3624
3624
  }
3625
3625
  }, 180);
3626
3626
  return () => clearTimeout(id2);
3627
- }, [query, language, open]);
3627
+ }, [query, language, open2]);
3628
3628
  const flat = useMemo(() => query.trim() ? results : [], [query, results]);
3629
3629
  useEffect(() => {
3630
- if (!open) return;
3630
+ if (!open2) return;
3631
3631
  const onKey = (e) => {
3632
3632
  if (e.key === "Escape") {
3633
3633
  e.preventDefault();
@@ -3646,7 +3646,7 @@ function SearchBar2({ language = "en", className }) {
3646
3646
  };
3647
3647
  window.addEventListener("keydown", onKey);
3648
3648
  return () => window.removeEventListener("keydown", onKey);
3649
- }, [open, flat, selected, close, go]);
3649
+ }, [open2, flat, selected, close, go]);
3650
3650
  useEffect(() => {
3651
3651
  const node = listRef.current?.querySelector('[data-selected="true"]');
3652
3652
  node?.scrollIntoView({ block: "nearest" });
@@ -3673,7 +3673,7 @@ function SearchBar2({ language = "en", className }) {
3673
3673
  ]
3674
3674
  }
3675
3675
  );
3676
- const modal = open && mounted ? createPortal(
3676
+ const modal = open2 && mounted ? createPortal(
3677
3677
  /* @__PURE__ */ jsxs("div", { className: "fixed inset-0 z-[100] flex items-start justify-center p-4 pt-[12vh]", role: "dialog", "aria-modal": "true", children: [
3678
3678
  /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-background/70 backdrop-blur-sm", onClick: close, "aria-hidden": "true" }),
3679
3679
  /* @__PURE__ */ jsx("div", { className: "cl-beam relative w-full max-w-xl shadow-[0_30px_90px_-24px_rgb(0_0_0/0.55)]", children: /* @__PURE__ */ jsxs("div", { className: "overflow-hidden rounded-[calc(var(--radius)+2px)] bg-popover", children: [
@@ -4383,10 +4383,10 @@ function SidebarProvider({
4383
4383
  const isMobile = useIsMobile();
4384
4384
  const [openMobile, setOpenMobile] = React8.useState(false);
4385
4385
  const [_open, _setOpen] = React8.useState(defaultOpen);
4386
- const open = openProp ?? _open;
4386
+ const open2 = openProp ?? _open;
4387
4387
  const setOpen = React8.useCallback(
4388
4388
  (value) => {
4389
- const openState = typeof value === "function" ? value(open) : value;
4389
+ const openState = typeof value === "function" ? value(open2) : value;
4390
4390
  if (setOpenProp) {
4391
4391
  setOpenProp(openState);
4392
4392
  } else {
@@ -4394,10 +4394,10 @@ function SidebarProvider({
4394
4394
  }
4395
4395
  document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
4396
4396
  },
4397
- [setOpenProp, open]
4397
+ [setOpenProp, open2]
4398
4398
  );
4399
4399
  const toggleSidebar = React8.useCallback(() => {
4400
- return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
4400
+ return isMobile ? setOpenMobile((open3) => !open3) : setOpen((open3) => !open3);
4401
4401
  }, [isMobile, setOpen, setOpenMobile]);
4402
4402
  React8.useEffect(() => {
4403
4403
  const handleKeyDown = (event) => {
@@ -4409,18 +4409,18 @@ function SidebarProvider({
4409
4409
  window.addEventListener("keydown", handleKeyDown);
4410
4410
  return () => window.removeEventListener("keydown", handleKeyDown);
4411
4411
  }, [toggleSidebar]);
4412
- const state = open ? "expanded" : "collapsed";
4412
+ const state = open2 ? "expanded" : "collapsed";
4413
4413
  const contextValue = React8.useMemo(
4414
4414
  () => ({
4415
4415
  state,
4416
- open,
4416
+ open: open2,
4417
4417
  setOpen,
4418
4418
  isMobile,
4419
4419
  openMobile,
4420
4420
  setOpenMobile,
4421
4421
  toggleSidebar
4422
4422
  }),
4423
- [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
4423
+ [state, open2, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
4424
4424
  );
4425
4425
  return /* @__PURE__ */ jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsx(
4426
4426
  "div",
@@ -4960,6 +4960,7 @@ function SidebarNavigation2({
4960
4960
  nodes,
4961
4961
  currentPath,
4962
4962
  language: _language = "en",
4963
+ onNavigateLeaf,
4963
4964
  translations: translations2 = {}
4964
4965
  }) {
4965
4966
  const { toggleFolder = "Toggle folder" } = translations2;
@@ -4967,65 +4968,76 @@ function SidebarNavigation2({
4967
4968
  if (!node.websitePath) return null;
4968
4969
  const isActive = isActiveNode(node, currentPath);
4969
4970
  const hasActiveChildNode = hasActiveChild(node, currentPath);
4970
- return node.children && Object.keys(node.children).length > 0 ? /* @__PURE__ */ jsx(Collapsible, { className: "group/collapsible", children: /* @__PURE__ */ jsx(SidebarMenu, { children: /* @__PURE__ */ jsxs(SidebarMenuItem, { children: [
4971
- /* @__PURE__ */ jsxs("div", { className: "flex flex-nowrap items-center gap-2", children: [
4972
- /* @__PURE__ */ jsxs(
4973
- Link2,
4974
- {
4975
- href: node.websitePath,
4976
- className: `group/row relative flex flex-nowrap items-center gap-2 flex-auto py-1.5 pl-3 pr-2 rounded-md text-sm transition-colors hover:bg-accent ${isActive ? "bg-accent font-medium text-foreground before:absolute before:inset-y-1 before:left-0 before:w-0.5 before:rounded-full before:bg-foreground" : hasActiveChildNode ? "text-foreground" : "text-muted-foreground hover:text-foreground"}`,
4977
- children: [
4978
- /* @__PURE__ */ jsxs("div", { className: "flex-none", children: [
4979
- /* @__PURE__ */ jsx(FolderOpenIcon, { className: "h-4 w-4 group-data-[state=closed]/collapsible:hidden" }),
4980
- /* @__PURE__ */ jsx(FolderClosedIcon, { className: "h-4 w-4 group-data-[state=open]/collapsible:hidden" })
4981
- ] }),
4982
- /* @__PURE__ */ jsx("span", { className: `flex-auto ${isActive ? "font-medium" : ""}`, children: node.title })
4983
- ]
4984
- }
4985
- ),
4986
- /* @__PURE__ */ jsxs(
4987
- CollapsibleTrigger2,
4988
- {
4989
- className: "p-1.5 rounded-md text-muted-foreground/70 transition-colors hover:bg-accent hover:text-foreground self-center",
4990
- "aria-label": `${toggleFolder}: ${node.title}`,
4991
- children: [
4992
- /* @__PURE__ */ jsx(
4993
- ChevronRight,
4994
- {
4995
- className: "h-4 w-4 group-data-[state=open]/collapsible:hidden",
4996
- "aria-hidden": "true"
4997
- }
4998
- ),
4999
- /* @__PURE__ */ jsx(
5000
- ChevronDown,
5001
- {
5002
- className: "h-4 w-4 group-data-[state=closed]/collapsible:hidden",
5003
- "aria-hidden": "true"
5004
- }
5005
- )
5006
- ]
5007
- }
5008
- )
5009
- ] }),
5010
- /* @__PURE__ */ jsx(CollapsibleContent2, { children: /* @__PURE__ */ jsx(SidebarMenuSub, { children: Object.entries(node.children || {}).map(([, child]) => {
5011
- if (!child.websitePath) return null;
5012
- const isChildActive = isActiveNode(child, currentPath);
5013
- return /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsxs(
5014
- Link2,
5015
- {
5016
- href: child.websitePath,
5017
- className: `group/row relative flex items-center gap-2 py-1.5 pl-3 pr-2 rounded-md text-sm transition-colors hover:bg-accent ${isChildActive ? "bg-accent font-medium text-foreground before:absolute before:inset-y-1 before:left-0 before:w-0.5 before:rounded-full before:bg-foreground" : "text-muted-foreground hover:text-foreground"}`,
5018
- children: [
5019
- child.children && Object.keys(child.children).length > 0 ? /* @__PURE__ */ jsx(FolderClosedIcon, { className: "h-4 w-4 flex-none" }) : /* @__PURE__ */ jsx(FileTextIcon, { className: "h-4 w-4 flex-none" }),
5020
- /* @__PURE__ */ jsx("span", { className: "", children: child.title })
5021
- ]
5022
- }
5023
- ) }, child.websitePath);
5024
- }) }) })
5025
- ] }, node.websitePath) }, `menu-${node.websitePath}`) }, node.websitePath) : /* @__PURE__ */ jsx(SidebarMenu, { children: /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsxs(
4971
+ return node.children && Object.keys(node.children).length > 0 ? /* @__PURE__ */ jsx(
4972
+ Collapsible,
4973
+ {
4974
+ defaultOpen: isActive || hasActiveChildNode,
4975
+ className: "group/collapsible",
4976
+ children: /* @__PURE__ */ jsx(SidebarMenu, { children: /* @__PURE__ */ jsxs(SidebarMenuItem, { children: [
4977
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-nowrap items-center gap-2", children: [
4978
+ /* @__PURE__ */ jsxs(
4979
+ Link2,
4980
+ {
4981
+ href: node.websitePath,
4982
+ className: `group/row relative flex flex-nowrap items-center gap-2 flex-auto py-1.5 pl-3 pr-2 rounded-md text-sm transition-colors hover:bg-accent ${isActive ? "bg-accent font-medium text-foreground before:absolute before:inset-y-1 before:left-0 before:w-0.5 before:rounded-full before:bg-foreground" : hasActiveChildNode ? "text-foreground" : "text-muted-foreground hover:text-foreground"}`,
4983
+ children: [
4984
+ /* @__PURE__ */ jsxs("div", { className: "flex-none", children: [
4985
+ /* @__PURE__ */ jsx(FolderOpenIcon, { className: "h-4 w-4 group-data-[state=closed]/collapsible:hidden" }),
4986
+ /* @__PURE__ */ jsx(FolderClosedIcon, { className: "h-4 w-4 group-data-[state=open]/collapsible:hidden" })
4987
+ ] }),
4988
+ /* @__PURE__ */ jsx("span", { className: `flex-auto ${isActive ? "font-medium" : ""}`, children: node.title })
4989
+ ]
4990
+ }
4991
+ ),
4992
+ /* @__PURE__ */ jsxs(
4993
+ CollapsibleTrigger2,
4994
+ {
4995
+ className: "p-1.5 rounded-md text-muted-foreground/70 transition-colors hover:bg-accent hover:text-foreground self-center",
4996
+ "aria-label": `${toggleFolder}: ${node.title}`,
4997
+ children: [
4998
+ /* @__PURE__ */ jsx(
4999
+ ChevronRight,
5000
+ {
5001
+ className: "h-4 w-4 group-data-[state=open]/collapsible:hidden",
5002
+ "aria-hidden": "true"
5003
+ }
5004
+ ),
5005
+ /* @__PURE__ */ jsx(
5006
+ ChevronDown,
5007
+ {
5008
+ className: "h-4 w-4 group-data-[state=closed]/collapsible:hidden",
5009
+ "aria-hidden": "true"
5010
+ }
5011
+ )
5012
+ ]
5013
+ }
5014
+ )
5015
+ ] }),
5016
+ /* @__PURE__ */ jsx(CollapsibleContent2, { children: /* @__PURE__ */ jsx(SidebarMenuSub, { children: Object.entries(node.children || {}).map(([, child]) => {
5017
+ if (!child.websitePath) return null;
5018
+ const isChildActive = isActiveNode(child, currentPath);
5019
+ const childIsLeaf = !child.children || Object.keys(child.children).length === 0;
5020
+ return /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsxs(
5021
+ Link2,
5022
+ {
5023
+ href: child.websitePath,
5024
+ onClick: childIsLeaf ? onNavigateLeaf : void 0,
5025
+ className: `group/row relative flex items-center gap-2 py-1.5 pl-3 pr-2 rounded-md text-sm transition-colors hover:bg-accent ${isChildActive ? "bg-accent font-medium text-foreground before:absolute before:inset-y-1 before:left-0 before:w-0.5 before:rounded-full before:bg-foreground" : "text-muted-foreground hover:text-foreground"}`,
5026
+ children: [
5027
+ child.children && Object.keys(child.children).length > 0 ? /* @__PURE__ */ jsx(FolderClosedIcon, { className: "h-4 w-4 flex-none" }) : /* @__PURE__ */ jsx(FileTextIcon, { className: "h-4 w-4 flex-none" }),
5028
+ /* @__PURE__ */ jsx("span", { className: "", children: child.title })
5029
+ ]
5030
+ }
5031
+ ) }, child.websitePath);
5032
+ }) }) })
5033
+ ] }, node.websitePath) }, `menu-${node.websitePath}`)
5034
+ },
5035
+ node.websitePath
5036
+ ) : /* @__PURE__ */ jsx(SidebarMenu, { children: /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsxs(
5026
5037
  Link2,
5027
5038
  {
5028
5039
  href: node.websitePath,
5040
+ onClick: onNavigateLeaf,
5029
5041
  className: `group/row relative flex items-center gap-2 py-1.5 pl-3 pr-2 rounded-md text-sm transition-colors hover:bg-accent ${isActive ? "bg-accent font-medium text-foreground before:absolute before:inset-y-1 before:left-0 before:w-0.5 before:rounded-full before:bg-foreground" : "text-muted-foreground hover:text-foreground"}`,
5030
5042
  children: [
5031
5043
  /* @__PURE__ */ jsx(FileTextIcon, { className: "h-4 w-4 flex-none" }),
@@ -5035,7 +5047,34 @@ function SidebarNavigation2({
5035
5047
  ) }, node.websitePath) }, `menu-${node.websitePath}`);
5036
5048
  }) }) });
5037
5049
  }
5050
+ var open = false;
5051
+ var listeners = /* @__PURE__ */ new Set();
5052
+ function emit() {
5053
+ for (const listener of listeners) listener();
5054
+ }
5055
+ function setMobileMenuOpen(value) {
5056
+ if (open === value) return;
5057
+ open = value;
5058
+ emit();
5059
+ }
5060
+ function subscribe(listener) {
5061
+ listeners.add(listener);
5062
+ return () => {
5063
+ listeners.delete(listener);
5064
+ };
5065
+ }
5066
+ function getSnapshot() {
5067
+ return open;
5068
+ }
5069
+ function getServerSnapshot() {
5070
+ return false;
5071
+ }
5072
+ function useMobileMenuOpen() {
5073
+ const value = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
5074
+ return [value, setMobileMenuOpen];
5075
+ }
5038
5076
  function MobileMenu2({ pageData, translations: translations2 = {} }) {
5077
+ const [open2, setOpen] = useMobileMenuOpen();
5039
5078
  if (!pageData) {
5040
5079
  return null;
5041
5080
  }
@@ -5045,7 +5084,7 @@ function MobileMenu2({ pageData, translations: translations2 = {} }) {
5045
5084
  mobileMenuDescription = "Mobile navigation menu"
5046
5085
  } = translations2;
5047
5086
  const { sidebar, navigation: nav, computed } = pageData;
5048
- return /* @__PURE__ */ jsx("div", { className: "lg:hidden", children: /* @__PURE__ */ jsxs(Drawer, { direction: "right", children: [
5087
+ return /* @__PURE__ */ jsx("div", { className: "lg:hidden", children: /* @__PURE__ */ jsxs(Drawer, { direction: "right", open: open2, onOpenChange: setOpen, children: [
5049
5088
  /* @__PURE__ */ jsx(DrawerTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "icon", className: "h-9 w-9", children: [
5050
5089
  /* @__PURE__ */ jsx(Menu, { className: "h-4 w-4" }),
5051
5090
  /* @__PURE__ */ jsx("span", { className: "sr-only", children: openMobileMenu })
@@ -5080,7 +5119,8 @@ function MobileMenu2({ pageData, translations: translations2 = {} }) {
5080
5119
  {
5081
5120
  nodes: sidebar.items,
5082
5121
  currentPath: `/${computed.lang}/docs/${computed.path}`,
5083
- language: computed.lang
5122
+ language: computed.lang,
5123
+ onNavigateLeaf: () => setOpen(false)
5084
5124
  }
5085
5125
  )
5086
5126
  ] })
@@ -5455,7 +5495,7 @@ function useMediaQuery(query) {
5455
5495
  return value;
5456
5496
  }
5457
5497
  function BreadcrumbToggle({ overflowItems, className }) {
5458
- const [open, setOpen] = React8.useState(false);
5498
+ const [open2, setOpen] = React8.useState(false);
5459
5499
  const isDesktop = useMediaQuery("(min-width: 768px)");
5460
5500
  const handleOverflowItemClick = useCallback(() => {
5461
5501
  setOpen(false);
@@ -5463,7 +5503,7 @@ function BreadcrumbToggle({ overflowItems, className }) {
5463
5503
  if (overflowItems.length === 0) {
5464
5504
  return null;
5465
5505
  }
5466
- return /* @__PURE__ */ jsx(BreadcrumbItem, { className, children: isDesktop ? /* @__PURE__ */ jsxs(DropdownMenu, { open, onOpenChange: setOpen, children: [
5506
+ return /* @__PURE__ */ jsx(BreadcrumbItem, { className, children: isDesktop ? /* @__PURE__ */ jsxs(DropdownMenu, { open: open2, onOpenChange: setOpen, children: [
5467
5507
  /* @__PURE__ */ jsxs(
5468
5508
  DropdownMenuTrigger,
5469
5509
  {
@@ -5484,7 +5524,7 @@ function BreadcrumbToggle({ overflowItems, className }) {
5484
5524
  children: item.label
5485
5525
  }
5486
5526
  ) }) }, index)) })
5487
- ] }) : /* @__PURE__ */ jsxs(Drawer, { open, onOpenChange: setOpen, children: [
5527
+ ] }) : /* @__PURE__ */ jsxs(Drawer, { open: open2, onOpenChange: setOpen, children: [
5488
5528
  /* @__PURE__ */ jsx(DrawerTrigger, { "aria-label": "Show more breadcrumb items", children: /* @__PURE__ */ jsx(BreadcrumbEllipsis, { className: "h-4 w-4" }) }),
5489
5529
  /* @__PURE__ */ jsxs(DrawerContent, { children: [
5490
5530
  /* @__PURE__ */ jsx("div", { className: "grid gap-1 p-4 overflow-y-auto", children: overflowItems.map((item, index) => /* @__PURE__ */ jsx(