zudoku 0.23.0 → 0.23.1

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.
@@ -29,7 +29,7 @@ export const Header = memo(function HeaderInner() {
29
29
  .filter((p) => isProfileMenuPlugin(p))
30
30
  .flatMap((p) => p.getProfileMenuItems(context))
31
31
  .sort((i) => i.weight ?? 0);
32
- return (_jsxs("header", { className: "sticky lg:top-0 z-10 bg-background/80 backdrop-blur w-full", children: [_jsx(Banner, {}), _jsxs("div", { className: "max-w-screen-2xl mx-auto", children: [_jsxs("div", { className: "grid grid-cols-2 lg:grid-cols-[calc(var(--side-nav-width))_1fr] lg:gap-12 items-center border-b px-10 lg:px-12 h-[--top-header-height]", children: [_jsx("div", { className: "flex", children: _jsx(Link, { to: "/", children: _jsxs("div", { className: "flex items-center gap-3.5", children: [page?.logo && (_jsxs(_Fragment, { children: [_jsx("img", { src: /https?:\/\//.test(page.logo.src.light)
32
+ return (_jsxs("header", { className: "sticky lg:top-0 z-10 bg-background/80 backdrop-blur w-full", children: [_jsx(Banner, {}), _jsxs("div", { className: "max-w-screen-2xl mx-auto", children: [_jsxs("div", { className: "grid grid-cols-[1fr_auto] lg:grid-cols-[calc(var(--side-nav-width))_1fr] lg:gap-12 items-center border-b px-4 lg:px-12 h-[--top-header-height]", children: [_jsx("div", { className: "flex", children: _jsx(Link, { to: "/", children: _jsxs("div", { className: "flex items-center gap-3.5", children: [page?.logo && (_jsxs(_Fragment, { children: [_jsx("img", { src: /https?:\/\//.test(page.logo.src.light)
33
33
  ? page.logo.src.light
34
34
  : joinPath(import.meta.env.BASE_URL, page.logo.src.light), alt: page.logo.alt ?? page.pageTitle, style: { width: page.logo.width }, className: "h-10 dark:hidden", loading: "lazy" }), _jsx("img", { src: /https?:\/\//.test(page.logo.src.dark)
35
35
  ? page.logo.src.dark
@@ -1 +1 @@
1
- {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/lib/components/Header.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAyB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,aAAa,GAAG,CAAC,EAAE,IAAI,EAAmC,EAAE,EAAE;IAClE,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CACrB,MAAC,eAAe,eACd,KAAC,sBAAsB,cAAE,IAAI,CAAC,KAAK,GAA0B,EAC7D,KAAC,kBAAkB,cACjB,KAAC,sBAAsB,cACpB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9B,oDAAoD;oBACpD,KAAC,aAAa,IAAS,IAAI,EAAE,IAAI,IAAb,CAAC,CAAgB,CACtC,CAAC,GACqB,GACN,KATD,IAAI,CAAC,KAAK,CAUd,CACnB,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,YACvB,MAAC,gBAAgB,IAAkB,SAAS,EAAC,YAAY,aACtD,IAAI,CAAC,IAAI,IAAI,CACZ,KAAC,IAAI,CAAC,IAAI,IAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,mBAAmB,SAAG,CAC5D,EACA,IAAI,CAAC,KAAK,KAJU,IAAI,CAAC,KAAK,CAKd,GACd,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,WAAW;IAC7C,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAC9D,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAC5B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAElC,MAAM,YAAY,GAAG,OAAO;SACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;SACrC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;SAC9C,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAE9B,OAAO,CACL,kBAAQ,SAAS,EAAC,4DAA4D,aAC5E,KAAC,MAAM,KAAG,EACV,eAAK,SAAS,EAAC,0BAA0B,aACvC,eAAK,SAAS,EAAC,wIAAwI,aACrJ,cAAK,SAAS,EAAC,MAAM,YACnB,KAAC,IAAI,IAAC,EAAE,EAAC,GAAG,YACV,eAAK,SAAS,EAAC,2BAA2B,aACvC,IAAI,EAAE,IAAI,IAAI,CACb,8BACE,cACE,GAAG,EACD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;4DACrC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK;4DACrB,CAAC,CAAC,QAAQ,CACN,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CACpB,EAEP,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,EACpC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EACjC,SAAS,EAAC,kBAAkB,EAC5B,OAAO,EAAC,MAAM,GACd,EACF,cACE,GAAG,EACD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;4DACpC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;4DACpB,CAAC,CAAC,QAAQ,CACN,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CACnB,EAEP,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,EACpC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EACjC,SAAS,EAAC,wBAAwB,EAClC,OAAO,EAAC,MAAM,GACd,IACD,CACJ,EACD,eAAM,SAAS,EAAC,qDAAqD,YAClE,IAAI,EAAE,SAAS,GACX,IACH,GACD,GACH,EACN,eAAK,SAAS,EAAC,wEAAwE,aACrF,cAAK,SAAS,EAAC,sCAAsC,YACnD,KAAC,MAAM,KAAG,GACN,EAEN,KAAC,mBAAmB,KAAG,EACvB,eAAK,SAAS,EAAC,4DAA4D,aACzE,KAAC,OAAO,IAAC,IAAI,EAAC,uBAAuB,GAAG,EACvC,aAAa,IAAI,CAChB,KAAC,UAAU,IACT,QAAQ,EAAE,KAAC,QAAQ,IAAC,SAAS,EAAC,uBAAuB,GAAG,YAEvD,CAAC,eAAe,CAAC,CAAC,CAAC,CAClB,KAAC,MAAM,IAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,sBAE1C,CACV,CAAC,CAAC,CAAC,CACF,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CACxC,MAAC,YAAY,IAAC,KAAK,EAAE,KAAK,aACxB,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,KAAC,MAAM,IAAC,OAAO,EAAC,OAAO,YACpB,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,GAC1C,GACW,EACtB,MAAC,mBAAmB,IAAC,SAAS,EAAC,MAAM,aACnC,MAAC,iBAAiB,eACf,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,EAChD,OAAO,EAAE,KAAK,IAAI,CACjB,cAAK,SAAS,EAAC,mCAAmC,YAC/C,OAAO,CAAC,KAAK,GACV,CACP,IACiB,EACnB,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC;qEAC9C,MAAM,GAAG,CAAC,IAAI,KAAC,qBAAqB,KAAG,EACzC,YAAY;qEACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC;qEACnC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACV,KAAC,aAAa,IAAe,IAAI,EAAE,CAAC,IAAhB,CAAC,CAAC,KAAK,CAAa,CACzC,CAAC,EACH,YAAY,CAAC,MAAM,CAClB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAC9C,CAAC,MAAM,GAAG,CAAC,IAAI,KAAC,qBAAqB,KAAG,EACxC,YAAY;qEACV,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAC9C;qEACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACV,KAAC,aAAa,IAAe,IAAI,EAAE,CAAC,IAAhB,CAAC,CAAC,KAAK,CAAa,CACzC,CAAC,EACH,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;qEACjD,MAAM,GAAG,CAAC,IAAI,KAAC,qBAAqB,KAAG,EACzC,YAAY;qEACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;qEACtC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACV,KAAC,aAAa,IAAe,IAAI,EAAE,CAAC,IAAhB,CAAC,CAAC,KAAK,CAAa,CACzC,CAAC,IACgB,IACT,CAChB,CACF,GACU,CACd,EACD,KAAC,WAAW,KAAG,EACf,KAAC,OAAO,IAAC,IAAI,EAAC,qBAAqB,GAAG,IAClC,IACF,IACF,EACN,KAAC,OAAO,IAAC,IAAI,EAAC,uBAAuB,GAAG,EACxC,KAAC,aAAa,KAAG,EACjB,KAAC,OAAO,IAAC,IAAI,EAAC,sBAAsB,GAAG,IACnC,IACC,CACV,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/lib/components/Header.tsx"],"names":[],"mappings":"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"}
@@ -40,7 +40,7 @@ export const Layout = ({ children }) => {
40
40
  minDuration: 500,
41
41
  });
42
42
  const [isDrawerOpen, setDrawerOpen] = useState(false);
43
- return (_jsxs(_Fragment, { children: [import.meta.env.MODE === "standalone" && (_jsx("style", { children: `:root { --top-nav-height: 0px; }` })), _jsxs(Helmet, { titleTemplate: meta?.title, children: [meta?.description && (_jsx("meta", { name: "description", content: meta.description })), meta?.favicon && _jsx("link", { rel: "icon", href: meta.favicon })] }), _jsx(Slotlet, { name: "layout-before-head" }), _jsx(Header, {}), _jsx(Slotlet, { name: "layout-after-head" }), _jsx("div", { className: "w-full max-w-screen-2xl mx-auto px-10 lg:px-12", children: showSpinner ? (_jsx(LoadingFallback, {})) : (_jsx(Suspense, { fallback: _jsx(LoadingFallback, {}), children: _jsxs(Drawer, { direction: "left", open: isDrawerOpen, onOpenChange: (open) => setDrawerOpen(open), children: [_jsx(Sidebar, { onRequestClose: () => setDrawerOpen(false) }), _jsx("div", { className: cn("lg:hidden -mx-10 px-10 py-2 sticky bg-background/80 backdrop-blur z-10 top-0 left-0 right-0 border-b", "peer-data-[navigation=false]:hidden"), children: _jsxs(DrawerTrigger, { className: "flex items-center gap-2", children: [_jsx(PanelLeftIcon, { size: 16, strokeWidth: 1.5 }), _jsx("span", { className: "text-sm", children: "Menu" })] }) }), _jsxs("main", { className: cn("h-full dark:border-white/10 translate-x-0", "lg:overflow-visible",
43
+ return (_jsxs(_Fragment, { children: [import.meta.env.MODE === "standalone" && (_jsx("style", { children: `:root { --top-nav-height: 0px; }` })), _jsxs(Helmet, { titleTemplate: meta?.title, children: [meta?.description && (_jsx("meta", { name: "description", content: meta.description })), meta?.favicon && _jsx("link", { rel: "icon", href: meta.favicon })] }), _jsx(Slotlet, { name: "layout-before-head" }), _jsx(Header, {}), _jsx(Slotlet, { name: "layout-after-head" }), _jsx("div", { className: "w-full max-w-screen-2xl mx-auto px-4 lg:px-12", children: showSpinner ? (_jsx(LoadingFallback, {})) : (_jsx(Suspense, { fallback: _jsx(LoadingFallback, {}), children: _jsxs(Drawer, { direction: "left", open: isDrawerOpen, onOpenChange: (open) => setDrawerOpen(open), children: [_jsx(Sidebar, { onRequestClose: () => setDrawerOpen(false) }), _jsx("div", { className: cn("lg:hidden -mx-10 px-10 py-2 sticky bg-background/80 backdrop-blur z-10 top-0 left-0 right-0 border-b", "peer-data-[navigation=false]:hidden"), children: _jsxs(DrawerTrigger, { className: "flex items-center gap-2", children: [_jsx(PanelLeftIcon, { size: 16, strokeWidth: 1.5 }), _jsx("span", { className: "text-sm", children: "Menu" })] }) }), _jsxs("main", { className: cn("h-full dark:border-white/10 translate-x-0", "lg:overflow-visible",
44
44
  // This works in tandem with the `SidebarWrapper` component
45
45
  "lg:peer-data-[navigation=true]:w-[calc(100%-var(--side-nav-width))]", "lg:peer-data-[navigation=true]:translate-x-[--side-nav-width] lg:peer-data-[navigation=true]:pl-12"), children: [_jsx(Slotlet, { name: "zudoku-before-content" }), children ?? _jsx(Outlet, {}), _jsx(Slotlet, { name: "zudoku-after-content" })] })] }) })) })] }));
46
46
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../../src/lib/components/Layout.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../../src/lib/components/Layout.tsx"],"names":[],"mappings":"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"}
@@ -12,6 +12,6 @@ export const MobileTopNavigation = () => {
12
12
  const { topNavigation } = useZudoku();
13
13
  const { isAuthenticated } = useAuth();
14
14
  const [drawerOpen, setDrawerOpen] = useState(false);
15
- return (_jsxs(Drawer, { direction: "right", open: drawerOpen, onOpenChange: (open) => setDrawerOpen(open), children: [_jsx("div", { className: "flex lg:hidden justify-self-end", children: _jsx(DrawerTrigger, { className: "lg:hidden", children: _jsx(MenuIcon, { size: 22 }) }) }), _jsx(DrawerContent, { className: "lg:hidden h-[100dvh] right-0 left-auto w-[320px] rounded-none", "aria-describedby": undefined, children: _jsxs("div", { className: "p-6 overflow-y-auto overscroll-none", children: [_jsx(VisuallyHidden, { children: _jsx(DrawerTitle, { children: "Navigation" }) }), _jsx(Search, { className: "flex p-4" }), _jsxs("ul", { className: "flex flex-col items-center gap-4 p-4", children: [_jsx("li", { children: _jsx(ThemeSwitch, {}) }), topNavigation.filter(isHiddenItem(isAuthenticated)).map((item) => (_jsx("li", { children: _jsx("button", { onClick: () => setDrawerOpen(false), children: _jsx(TopNavItem, { ...item }) }) }, item.label)))] })] }) })] }));
15
+ return (_jsxs(Drawer, { direction: "right", open: drawerOpen, onOpenChange: (open) => setDrawerOpen(open), children: [_jsx("div", { className: "flex lg:hidden justify-self-end", children: _jsx(DrawerTrigger, { className: "lg:hidden", children: _jsx(MenuIcon, { size: 22 }) }) }), _jsx(DrawerContent, { className: "lg:hidden h-[100dvh] right-0 left-auto w-[320px] rounded-none", "aria-describedby": undefined, children: _jsxs("div", { className: "p-4 overflow-y-auto overscroll-none", children: [_jsx(VisuallyHidden, { children: _jsx(DrawerTitle, { children: "Navigation" }) }), _jsx(Search, { className: "flex p-4" }), _jsxs("ul", { className: "flex flex-col items-center gap-4 p-4", children: [_jsx("li", { children: _jsx(ThemeSwitch, {}) }), topNavigation.filter(isHiddenItem(isAuthenticated)).map((item) => (_jsx("li", { children: _jsx("button", { onClick: () => setDrawerOpen(false), children: _jsx(TopNavItem, { ...item }) }) }, item.label)))] })] }) })] }));
16
16
  };
17
17
  //# sourceMappingURL=MobileTopNavigation.js.map
@@ -9,6 +9,6 @@ import { SidebarWrapper } from "./SidebarWrapper.js";
9
9
  export const Sidebar = ({ onRequestClose, }) => {
10
10
  const navRef = useRef(null);
11
11
  const navigation = useCurrentNavigation();
12
- return (_jsxs(_Fragment, { children: [_jsxs(SidebarWrapper, { ref: navRef, pushMainContent: navigation.sidebar.length > 0, children: [_jsx(Slotlet, { name: "zudoku-before-navigation" }), navigation.sidebar.map((item) => (_jsx(SidebarItem, { item: item }, item.label))), _jsx(Slotlet, { name: "zudoku-after-navigation" })] }), _jsx(DrawerContent, { className: "lg:hidden h-[100dvh] left-0 w-[320px] rounded-none", "aria-describedby": undefined, children: _jsxs("div", { className: "p-6 overflow-y-auto overscroll-none", children: [_jsx(VisuallyHidden, { children: _jsx(DrawerTitle, { children: "Sidebar" }) }), navigation.sidebar.map((item) => (_jsx(SidebarItem, { item: item, onRequestClose: onRequestClose }, item.label)))] }) })] }));
12
+ return (_jsxs(_Fragment, { children: [_jsxs(SidebarWrapper, { ref: navRef, pushMainContent: navigation.sidebar.length > 0, children: [_jsx(Slotlet, { name: "zudoku-before-navigation" }), navigation.sidebar.map((item) => (_jsx(SidebarItem, { item: item }, item.label))), _jsx(Slotlet, { name: "zudoku-after-navigation" })] }), _jsx(DrawerContent, { className: "lg:hidden h-[100dvh] left-0 w-[320px] rounded-none", "aria-describedby": undefined, children: _jsxs("div", { className: "p-4 overflow-y-auto overscroll-none", children: [_jsx(VisuallyHidden, { children: _jsx(DrawerTitle, { children: "Sidebar" }) }), navigation.sidebar.map((item) => (_jsx(SidebarItem, { item: item, onRequestClose: onRequestClose }, item.label)))] }) })] }));
13
13
  };
14
14
  //# sourceMappingURL=Sidebar.js.map
@@ -5,7 +5,7 @@ var be = (e) => {
5
5
  var dt = (e, t, s) => t in e ? ut(e, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : e[t] = s;
6
6
  var k = (e, t, s) => dt(e, typeof t != "symbol" ? t + "" : t, s), je = (e, t, s) => t.has(e) || be("Cannot " + s);
7
7
  var c = (e, t, s) => (je(e, t, "read from private field"), s ? s.call(e) : t.get(e)), C = (e, t, s) => t.has(e) ? be("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(e) : t.set(e, s), v = (e, t, s, r) => (je(e, t, "write to private field"), r ? r.call(e, s) : t.set(e, s), s);
8
- var _ = (e, t, s, r) => ({
8
+ var X = (e, t, s, r) => ({
9
9
  set _(a) {
10
10
  v(e, t, a, s);
11
11
  },
@@ -28,9 +28,9 @@ import * as zt from "react-dom";
28
28
  import { S as oe, a as ne } from "./SidebarBadge-Bm793GDY.js";
29
29
  import { C as pe } from "./ClientOnly-E7hGysn1.js";
30
30
  import { ChevronRightIcon as Ht, ExternalLinkIcon as Lt, CircleXIcon as Kt, SearchIcon as $t, MoonStarIcon as Zt, SunIcon as Vt, MenuIcon as Ut, PanelLeftIcon as Wt } from "lucide-react";
31
- import { Drawer as We, DrawerTrigger as Xe, DrawerContent as _e, DrawerTitle as Ye } from "./ui/Drawer.js";
31
+ import { Drawer as We, DrawerTrigger as _e, DrawerContent as Xe, DrawerTitle as Ye } from "./ui/Drawer.js";
32
32
  import { c as M } from "./cn-qaFjX9_3.js";
33
- import { u as xe, a as Xt, V as _t } from "./Markdown-CZDLNOFc.js";
33
+ import { u as xe, a as _t, V as Xt } from "./Markdown-CZDLNOFc.js";
34
34
  import { c as Yt, a as Jt } from "./index-CPNSgwSb.js";
35
35
  import { A as Gt, M as es, u as ts } from "./AnchorLink-DFZZbmvr.js";
36
36
  import * as re from "@radix-ui/react-collapsible";
@@ -125,7 +125,7 @@ var S, Te, ps = (Te = class extends He {
125
125
  build(t, s, r) {
126
126
  const a = new It({
127
127
  mutationCache: this,
128
- mutationId: ++_(this, U)._,
128
+ mutationId: ++X(this, U)._,
129
129
  options: t.defaultMutationOptions(s),
130
130
  state: r
131
131
  });
@@ -213,15 +213,15 @@ function Oe(e) {
213
213
  return Promise.reject();
214
214
  if (P == null && b.pages.length)
215
215
  return Promise.resolve(b);
216
- const X = {
216
+ const _ = {
217
217
  queryKey: t.queryKey,
218
218
  pageParam: P,
219
219
  direction: K ? "backward" : "forward",
220
220
  meta: t.options.meta
221
221
  };
222
- N(X);
222
+ N(_);
223
223
  const ct = await W(
224
- X
224
+ _
225
225
  ), { maxPages: ye } = t.options, ve = K ? kt : Ct;
226
226
  return {
227
227
  pages: ve(b.pages, ct, ye),
@@ -232,8 +232,8 @@ function Oe(e) {
232
232
  const b = a === "backward", P = b ? ys : Me, K = {
233
233
  pages: i,
234
234
  pageParams: o
235
- }, X = P(r, K);
236
- u = await L(K, X, b);
235
+ }, _ = P(r, K);
236
+ u = await L(K, _, b);
237
237
  } else {
238
238
  const b = e ?? i.length;
239
239
  do {
@@ -287,7 +287,7 @@ var y, A, E, F, B, I, z, H, Re, vs = (Re = class {
287
287
  v(this, y, e.queryCache || new ps()), v(this, A, e.mutationCache || new xs()), v(this, E, e.defaultOptions || {}), v(this, F, /* @__PURE__ */ new Map()), v(this, B, /* @__PURE__ */ new Map()), v(this, I, 0);
288
288
  }
289
289
  mount() {
290
- _(this, I)._++, c(this, I) === 1 && (v(this, z, Nt.subscribe(async (e) => {
290
+ X(this, I)._++, c(this, I) === 1 && (v(this, z, Nt.subscribe(async (e) => {
291
291
  e && (await this.resumePausedMutations(), c(this, y).onFocus());
292
292
  })), v(this, H, Ce.subscribe(async (e) => {
293
293
  e && (await this.resumePausedMutations(), c(this, y).onOnline());
@@ -295,7 +295,7 @@ var y, A, E, F, B, I, z, H, Re, vs = (Re = class {
295
295
  }
296
296
  unmount() {
297
297
  var e, t;
298
- _(this, I)._--, c(this, I) === 0 && ((e = c(this, z)) == null || e.call(this), v(this, z, void 0), (t = c(this, H)) == null || t.call(this), v(this, H, void 0));
298
+ X(this, I)._--, c(this, I) === 0 && ((e = c(this, z)) == null || e.call(this), v(this, z, void 0), (t = c(this, H)) == null || t.call(this), v(this, H, void 0));
299
299
  }
300
300
  isFetching(e) {
301
301
  return c(this, y).findAll({ ...e, fetchStatus: "fetching" }).length;
@@ -985,13 +985,13 @@ const Qs = (e) => "getProfileMenuItems" in e && typeof e.getProfileMenuItems ==
985
985
  open: s,
986
986
  onOpenChange: (a) => r(a),
987
987
  children: [
988
- /* @__PURE__ */ n.jsx("div", { className: "flex lg:hidden justify-self-end", children: /* @__PURE__ */ n.jsx(Xe, { className: "lg:hidden", children: /* @__PURE__ */ n.jsx(Ut, { size: 22 }) }) }),
988
+ /* @__PURE__ */ n.jsx("div", { className: "flex lg:hidden justify-self-end", children: /* @__PURE__ */ n.jsx(_e, { className: "lg:hidden", children: /* @__PURE__ */ n.jsx(Ut, { size: 22 }) }) }),
989
989
  /* @__PURE__ */ n.jsx(
990
- _e,
990
+ Xe,
991
991
  {
992
992
  className: "lg:hidden h-[100dvh] right-0 left-auto w-[320px] rounded-none",
993
993
  "aria-describedby": void 0,
994
- children: /* @__PURE__ */ n.jsxs("div", { className: "p-6 overflow-y-auto overscroll-none", children: [
994
+ children: /* @__PURE__ */ n.jsxs("div", { className: "p-4 overflow-y-auto overscroll-none", children: [
995
995
  /* @__PURE__ */ n.jsx(Je, { children: /* @__PURE__ */ n.jsx(Ye, { children: "Navigation" }) }),
996
996
  /* @__PURE__ */ n.jsx(et, { className: "flex p-4" }),
997
997
  /* @__PURE__ */ n.jsxs("ul", { className: "flex flex-col items-center gap-4 p-4", children: [
@@ -1018,7 +1018,7 @@ const Qs = (e) => "getProfileMenuItems" in e && typeof e.getProfileMenuItems ==
1018
1018
  return /* @__PURE__ */ n.jsxs("header", { className: "sticky lg:top-0 z-10 bg-background/80 backdrop-blur w-full", children: [
1019
1019
  /* @__PURE__ */ n.jsx(Hs, {}),
1020
1020
  /* @__PURE__ */ n.jsxs("div", { className: "max-w-screen-2xl mx-auto", children: [
1021
- /* @__PURE__ */ n.jsxs("div", { className: "grid grid-cols-2 lg:grid-cols-[calc(var(--side-nav-width))_1fr] lg:gap-12 items-center border-b px-10 lg:px-12 h-[--top-header-height]", children: [
1021
+ /* @__PURE__ */ n.jsxs("div", { className: "grid grid-cols-[1fr_auto] lg:grid-cols-[calc(var(--side-nav-width))_1fr] lg:gap-12 items-center border-b px-4 lg:px-12 h-[--top-header-height]", children: [
1022
1022
  /* @__PURE__ */ n.jsx("div", { className: "flex", children: /* @__PURE__ */ n.jsx(fe, { to: "/", children: /* @__PURE__ */ n.jsxs("div", { className: "flex items-center gap-3.5", children: [
1023
1023
  (o == null ? void 0 : o.logo) && /* @__PURE__ */ n.jsxs(n.Fragment, { children: [
1024
1024
  /* @__PURE__ */ n.jsx(
@@ -1123,11 +1123,11 @@ const $s = ({
1123
1123
  }
1124
1124
  ),
1125
1125
  /* @__PURE__ */ n.jsx(
1126
- _e,
1126
+ Xe,
1127
1127
  {
1128
1128
  className: "lg:hidden h-[100dvh] left-0 w-[320px] rounded-none",
1129
1129
  "aria-describedby": void 0,
1130
- children: /* @__PURE__ */ n.jsxs("div", { className: "p-6 overflow-y-auto overscroll-none", children: [
1130
+ children: /* @__PURE__ */ n.jsxs("div", { className: "p-4 overflow-y-auto overscroll-none", children: [
1131
1131
  /* @__PURE__ */ n.jsx(Je, { children: /* @__PURE__ */ n.jsx(Ye, { children: "Sidebar" }) }),
1132
1132
  s.sidebar.map((r) => /* @__PURE__ */ n.jsx(
1133
1133
  ce,
@@ -1164,7 +1164,7 @@ const $s = ({
1164
1164
  /* @__PURE__ */ n.jsx(D, { name: "layout-before-head" }),
1165
1165
  /* @__PURE__ */ n.jsx(rt, {}),
1166
1166
  /* @__PURE__ */ n.jsx(D, { name: "layout-after-head" }),
1167
- /* @__PURE__ */ n.jsx("div", { className: "w-full max-w-screen-2xl mx-auto px-10 lg:px-12", children: u ? /* @__PURE__ */ n.jsx(Qe, {}) : /* @__PURE__ */ n.jsx(ge, { fallback: /* @__PURE__ */ n.jsx(Qe, {}), children: /* @__PURE__ */ n.jsxs(
1167
+ /* @__PURE__ */ n.jsx("div", { className: "w-full max-w-screen-2xl mx-auto px-4 lg:px-12", children: u ? /* @__PURE__ */ n.jsx(Qe, {}) : /* @__PURE__ */ n.jsx(ge, { fallback: /* @__PURE__ */ n.jsx(Qe, {}), children: /* @__PURE__ */ n.jsxs(
1168
1168
  We,
1169
1169
  {
1170
1170
  direction: "left",
@@ -1179,7 +1179,7 @@ const $s = ({
1179
1179
  "lg:hidden -mx-10 px-10 py-2 sticky bg-background/80 backdrop-blur z-10 top-0 left-0 right-0 border-b",
1180
1180
  "peer-data-[navigation=false]:hidden"
1181
1181
  ),
1182
- children: /* @__PURE__ */ n.jsxs(Xe, { className: "flex items-center gap-2", children: [
1182
+ children: /* @__PURE__ */ n.jsxs(_e, { className: "flex items-center gap-2", children: [
1183
1183
  /* @__PURE__ */ n.jsx(Wt, { size: 16, strokeWidth: 1.5 }),
1184
1184
  /* @__PURE__ */ n.jsx("span", { className: "text-sm", children: "Menu" })
1185
1185
  ] })
@@ -1290,7 +1290,7 @@ function Ws() {
1290
1290
  let e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [], t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
1291
1291
  return e.length !== t.length || e.some((s, r) => !Object.is(s, t[r]));
1292
1292
  }
1293
- class Xs {
1293
+ class _s {
1294
1294
  constructor(t) {
1295
1295
  k(this, "plugins");
1296
1296
  k(this, "sidebars");
@@ -1327,7 +1327,7 @@ class Xs {
1327
1327
  this.plugins = t.plugins ?? [], this.topNavigation = t.topNavigation ?? [], this.sidebars = t.sidebars ?? {}, this.navigationPlugins = this.plugins.filter(Ts), this.authentication = t.authentication, this.meta = t.metadata, this.page = t.page;
1328
1328
  }
1329
1329
  }
1330
- function _s({ error: e, resetErrorBoundary: t }) {
1330
+ function Xs({ error: e, resetErrorBoundary: t }) {
1331
1331
  return /* @__PURE__ */ n.jsx(ze, { error: e });
1332
1332
  }
1333
1333
  const J = globalThis;
@@ -1355,7 +1355,7 @@ const it = {
1355
1355
  (g, N) => ({ ...g, ...N }),
1356
1356
  {}
1357
1357
  ),
1358
- ...Xt,
1358
+ ..._t,
1359
1359
  ...(x = t.mdx) == null ? void 0 : x.components
1360
1360
  };
1361
1361
  }, [(m = t.mdx) == null ? void 0 : m.components, t.plugins]), { stagger: a } = Ft(oe), [i, o] = Q(!1), u = se(
@@ -1365,18 +1365,18 @@ const it = {
1365
1365
  R(() => {
1366
1366
  i || o(!0);
1367
1367
  }, [i, d.location]);
1368
- const [l] = Q(() => new Xs(t)), f = (h = t.plugins) == null ? void 0 : h.filter(Fs).map((p, x) => {
1368
+ const [l] = Q(() => new _s(t)), f = (h = t.plugins) == null ? void 0 : h.filter(Fs).map((p, x) => {
1369
1369
  var g;
1370
1370
  return /* @__PURE__ */ n.jsx(Bt, { children: (g = p.getHead) == null ? void 0 : g.call(p) }, x);
1371
1371
  });
1372
1372
  return /* @__PURE__ */ n.jsxs(n.Fragment, { children: [
1373
1373
  /* @__PURE__ */ n.jsx(ue, { children: f }),
1374
- /* @__PURE__ */ n.jsx(oe.Provider, { value: u, children: /* @__PURE__ */ n.jsx(Gs, { context: l, children: /* @__PURE__ */ n.jsx(es, { components: r, children: /* @__PURE__ */ n.jsx(hs, { attribute: "class", disableTransitionOnChange: !0, children: /* @__PURE__ */ n.jsx(Js, { value: s, children: /* @__PURE__ */ n.jsx(xt, { slotlets: t.slotlets, children: /* @__PURE__ */ n.jsx(_t, { children: e ?? /* @__PURE__ */ n.jsx(Be, {}) }) }) }) }) }) }) })
1374
+ /* @__PURE__ */ n.jsx(oe.Provider, { value: u, children: /* @__PURE__ */ n.jsx(Gs, { context: l, children: /* @__PURE__ */ n.jsx(es, { components: r, children: /* @__PURE__ */ n.jsx(hs, { attribute: "class", disableTransitionOnChange: !0, children: /* @__PURE__ */ n.jsx(Js, { value: s, children: /* @__PURE__ */ n.jsx(xt, { slotlets: t.slotlets, children: /* @__PURE__ */ n.jsx(Xt, { children: e ?? /* @__PURE__ */ n.jsx(Be, {}) }) }) }) }) }) }) })
1375
1375
  ] });
1376
1376
  }
1377
1377
  );
1378
1378
  ot.displayName = "ZudokoInner";
1379
- const lt = (e) => /* @__PURE__ */ n.jsx(Us, { FallbackComponent: _s, children: /* @__PURE__ */ n.jsx(ot, { ...e }) });
1379
+ const lt = (e) => /* @__PURE__ */ n.jsx(Us, { FallbackComponent: Xs, children: /* @__PURE__ */ n.jsx(ot, { ...e }) });
1380
1380
  lt.displayName = "Zudoku";
1381
1381
  const Pn = ts, Sn = Zs, Dn = yt, On = gs, Mn = Cs, An = Ns, En = ue, In = T, Qn = pt, Tn = lt, qn = bt, Rn = pe, Fn = vt, Bn = fe;
1382
1382
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"zudoku.components.js","sources":["../src/lib/errors/ServerError.tsx","../../../node_modules/.pnpm/@tanstack+query-core@5.62.3/node_modules/@tanstack/query-core/build/modern/queryCache.js","../../../node_modules/.pnpm/@tanstack+query-core@5.62.3/node_modules/@tanstack/query-core/build/modern/mutationCache.js","../../../node_modules/.pnpm/@tanstack+query-core@5.62.3/node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../../node_modules/.pnpm/@tanstack+query-core@5.62.3/node_modules/@tanstack/query-core/build/modern/queryClient.js","../../../node_modules/.pnpm/@tanstack+query-core@5.62.3/node_modules/@tanstack/query-core/build/modern/hydration.js","../../../node_modules/.pnpm/@tanstack+react-query@5.62.3_react@19.0.0/node_modules/@tanstack/react-query/build/modern/HydrationBoundary.js","../../../node_modules/.pnpm/react-router@7.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/react-router/dist/development/dom-export.mjs","../src/lib/components/Bootstrap.tsx","../../../node_modules/.pnpm/spin-delay@2.0.1_react@19.0.0/node_modules/spin-delay/dist/index.js","../src/lib/components/navigation/SidebarCategory.tsx","../src/lib/components/navigation/SidebarItem.tsx","../src/lib/util/useScrollToAnchor.ts","../src/lib/util/useScrollToTop.ts","../src/lib/ui/Skeleton.tsx","../src/lib/core/plugins.ts","../src/lib/components/Banner.tsx","../src/lib/components/Search.tsx","../src/lib/components/ThemeSwitch.tsx","../src/lib/components/TopNavigation.tsx","../src/lib/components/MobileTopNavigation.tsx","../src/lib/components/Header.tsx","../src/lib/components/navigation/SidebarWrapper.tsx","../src/lib/components/navigation/Sidebar.tsx","../src/lib/components/Layout.tsx","../../../node_modules/.pnpm/react-error-boundary@4.1.2_react@19.0.0/node_modules/react-error-boundary/dist/react-error-boundary.esm.js","../src/lib/core/ZudokuContext.ts","../src/lib/errors/TopLevelError.tsx","../src/lib/util/requestIdleCallbackPolyfill.ts","../src/lib/components/context/ComponentsContext.tsx","../src/lib/components/context/ZudokuProvider.tsx","../src/lib/components/Zudoku.tsx","../src/lib/components/index.ts"],"sourcesContent":["import { ErrorAlert } from \"./ErrorAlert.js\";\n\nexport function ServerError({ error }: { error: unknown }) {\n return <ErrorAlert error={error} />;\n}\n","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#queries = /* @__PURE__ */ new Map();\n }\n #queries;\n build(client, options, state) {\n const queryKey = options.queryKey;\n const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n let query = this.get(queryHash);\n if (!query) {\n query = new Query({\n cache: this,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey)\n });\n this.add(query);\n }\n return query;\n }\n add(query) {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query);\n this.notify({\n type: \"added\",\n query\n });\n }\n }\n remove(query) {\n const queryInMap = this.#queries.get(query.queryHash);\n if (queryInMap) {\n query.destroy();\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash);\n }\n this.notify({ type: \"removed\", query });\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query);\n });\n });\n }\n get(queryHash) {\n return this.#queries.get(queryHash);\n }\n getAll() {\n return [...this.#queries.values()];\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (query) => matchQuery(defaultedFilters, query)\n );\n }\n findAll(filters = {}) {\n const queries = this.getAll();\n return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n onFocus() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus();\n });\n });\n }\n onOnline() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline();\n });\n });\n }\n};\nexport {\n QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#mutations = /* @__PURE__ */ new Map();\n this.#mutationId = Date.now();\n }\n #mutations;\n #mutationId;\n build(client, options, state) {\n const mutation = new Mutation({\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state\n });\n this.add(mutation);\n return mutation;\n }\n add(mutation) {\n const scope = scopeFor(mutation);\n const mutations = this.#mutations.get(scope) ?? [];\n mutations.push(mutation);\n this.#mutations.set(scope, mutations);\n this.notify({ type: \"added\", mutation });\n }\n remove(mutation) {\n const scope = scopeFor(mutation);\n if (this.#mutations.has(scope)) {\n const mutations = this.#mutations.get(scope)?.filter((x) => x !== mutation);\n if (mutations) {\n if (mutations.length === 0) {\n this.#mutations.delete(scope);\n } else {\n this.#mutations.set(scope, mutations);\n }\n }\n }\n this.notify({ type: \"removed\", mutation });\n }\n canRun(mutation) {\n const firstPendingMutation = this.#mutations.get(scopeFor(mutation))?.find((m) => m.state.status === \"pending\");\n return !firstPendingMutation || firstPendingMutation === mutation;\n }\n runNext(mutation) {\n const foundMutation = this.#mutations.get(scopeFor(mutation))?.find((m) => m !== mutation && m.state.isPaused);\n return foundMutation?.continue() ?? Promise.resolve();\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((mutation) => {\n this.remove(mutation);\n });\n });\n }\n getAll() {\n return [...this.#mutations.values()].flat();\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (mutation) => matchMutation(defaultedFilters, mutation)\n );\n }\n findAll(filters = {}) {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n resumePausedMutations() {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n return notifyManager.batch(\n () => Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop))\n )\n );\n }\n};\nfunction scopeFor(mutation) {\n return mutation.options.scope?.id ?? String(mutation.mutationId);\n}\nexport {\n MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/infiniteQueryBehavior.ts\nimport { addToEnd, addToStart, ensureQueryFn } from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n return {\n onFetch: (context, query) => {\n const options = context.options;\n const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n const oldPages = context.state.data?.pages || [];\n const oldPageParams = context.state.data?.pageParams || [];\n let result = { pages: [], pageParams: [] };\n let currentPage = 0;\n const fetchFn = async () => {\n let cancelled = false;\n const addSignalProperty = (object) => {\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n if (context.signal.aborted) {\n cancelled = true;\n } else {\n context.signal.addEventListener(\"abort\", () => {\n cancelled = true;\n });\n }\n return context.signal;\n }\n });\n };\n const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n const fetchPage = async (data, param, previous) => {\n if (cancelled) {\n return Promise.reject();\n }\n if (param == null && data.pages.length) {\n return Promise.resolve(data);\n }\n const queryFnContext = {\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? \"backward\" : \"forward\",\n meta: context.options.meta\n };\n addSignalProperty(queryFnContext);\n const page = await queryFn(\n queryFnContext\n );\n const { maxPages } = context.options;\n const addTo = previous ? addToStart : addToEnd;\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n };\n };\n if (direction && oldPages.length) {\n const previous = direction === \"backward\";\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams\n };\n const param = pageParamFn(options, oldData);\n result = await fetchPage(oldData, param, previous);\n } else {\n const remainingPages = pages ?? oldPages.length;\n do {\n const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n if (currentPage > 0 && param == null) {\n break;\n }\n result = await fetchPage(result, param);\n currentPage++;\n } while (currentPage < remainingPages);\n }\n return result;\n };\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn,\n {\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal\n },\n query\n );\n };\n } else {\n context.fetchFn = fetchFn;\n }\n }\n };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n const lastIndex = pages.length - 1;\n return pages.length > 0 ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams\n ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n if (!data)\n return false;\n return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n if (!data || !options.getPreviousPageParam)\n return false;\n return getPreviousPageParam(options, data) != null;\n}\nexport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/queryClient.ts\nimport {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar QueryClient = class {\n #queryCache;\n #mutationCache;\n #defaultOptions;\n #queryDefaults;\n #mutationDefaults;\n #mountCount;\n #unsubscribeFocus;\n #unsubscribeOnline;\n constructor(config = {}) {\n this.#queryCache = config.queryCache || new QueryCache();\n this.#mutationCache = config.mutationCache || new MutationCache();\n this.#defaultOptions = config.defaultOptions || {};\n this.#queryDefaults = /* @__PURE__ */ new Map();\n this.#mutationDefaults = /* @__PURE__ */ new Map();\n this.#mountCount = 0;\n }\n mount() {\n this.#mountCount++;\n if (this.#mountCount !== 1)\n return;\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations();\n this.#queryCache.onFocus();\n }\n });\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations();\n this.#queryCache.onOnline();\n }\n });\n }\n unmount() {\n this.#mountCount--;\n if (this.#mountCount !== 0)\n return;\n this.#unsubscribeFocus?.();\n this.#unsubscribeFocus = void 0;\n this.#unsubscribeOnline?.();\n this.#unsubscribeOnline = void 0;\n }\n isFetching(filters) {\n return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n }\n isMutating(filters) {\n return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n }\n getQueryData(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(options.queryHash)?.state.data;\n }\n ensureQueryData(options) {\n const cachedData = this.getQueryData(options.queryKey);\n if (cachedData === void 0) {\n return this.fetchQuery(options);\n } else {\n const defaultedOptions = this.defaultQueryOptions(options);\n const query = this.#queryCache.build(this, defaultedOptions);\n if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n void this.prefetchQuery(defaultedOptions);\n }\n return Promise.resolve(cachedData);\n }\n }\n getQueriesData(filters) {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data;\n return [queryKey, data];\n });\n }\n setQueryData(queryKey, updater, options) {\n const defaultedOptions = this.defaultQueryOptions({ queryKey });\n const query = this.#queryCache.get(\n defaultedOptions.queryHash\n );\n const prevData = query?.state.data;\n const data = functionalUpdate(updater, prevData);\n if (data === void 0) {\n return void 0;\n }\n return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n }\n setQueriesData(filters, updater, options) {\n return notifyManager.batch(\n () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n queryKey,\n this.setQueryData(queryKey, updater, options)\n ])\n );\n }\n getQueryState(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(\n options.queryHash\n )?.state;\n }\n removeQueries(filters) {\n const queryCache = this.#queryCache;\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query);\n });\n });\n }\n resetQueries(filters, options) {\n const queryCache = this.#queryCache;\n const refetchFilters = {\n type: \"active\",\n ...filters\n };\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset();\n });\n return this.refetchQueries(refetchFilters, options);\n });\n }\n cancelQueries(filters, cancelOptions = {}) {\n const defaultedCancelOptions = { revert: true, ...cancelOptions };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n );\n return Promise.all(promises).then(noop).catch(noop);\n }\n invalidateQueries(filters, options = {}) {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate();\n });\n if (filters?.refetchType === \"none\") {\n return Promise.resolve();\n }\n const refetchFilters = {\n ...filters,\n type: filters?.refetchType ?? filters?.type ?? \"active\"\n };\n return this.refetchQueries(refetchFilters, options);\n });\n }\n refetchQueries(filters, options = {}) {\n const fetchOptions = {\n ...options,\n cancelRefetch: options.cancelRefetch ?? true\n };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled()).map((query) => {\n let promise = query.fetch(void 0, fetchOptions);\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop);\n }\n return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n })\n );\n return Promise.all(promises).then(noop);\n }\n fetchQuery(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n if (defaultedOptions.retry === void 0) {\n defaultedOptions.retry = false;\n }\n const query = this.#queryCache.build(this, defaultedOptions);\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query)\n ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n }\n prefetchQuery(options) {\n return this.fetchQuery(options).then(noop).catch(noop);\n }\n fetchInfiniteQuery(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.fetchQuery(options);\n }\n prefetchInfiniteQuery(options) {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n }\n ensureInfiniteQueryData(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.ensureQueryData(options);\n }\n resumePausedMutations() {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations();\n }\n return Promise.resolve();\n }\n getQueryCache() {\n return this.#queryCache;\n }\n getMutationCache() {\n return this.#mutationCache;\n }\n getDefaultOptions() {\n return this.#defaultOptions;\n }\n setDefaultOptions(options) {\n this.#defaultOptions = options;\n }\n setQueryDefaults(queryKey, options) {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options\n });\n }\n getQueryDefaults(queryKey) {\n const defaults = [...this.#queryDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n setMutationDefaults(mutationKey, options) {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options\n });\n }\n getMutationDefaults(mutationKey) {\n const defaults = [...this.#mutationDefaults.values()];\n let result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n result = { ...result, ...queryDefault.defaultOptions };\n }\n });\n return result;\n }\n defaultQueryOptions(options) {\n if (options._defaulted) {\n return options;\n }\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true\n };\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions\n );\n }\n if (defaultedOptions.refetchOnReconnect === void 0) {\n defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n }\n if (defaultedOptions.throwOnError === void 0) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n }\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = \"offlineFirst\";\n }\n if (defaultedOptions.queryFn === skipToken) {\n defaultedOptions.enabled = false;\n }\n return defaultedOptions;\n }\n defaultMutationOptions(options) {\n if (options?._defaulted) {\n return options;\n }\n return {\n ...this.#defaultOptions.mutations,\n ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n ...options,\n _defaulted: true\n };\n }\n clear() {\n this.#queryCache.clear();\n this.#mutationCache.clear();\n }\n};\nexport {\n QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","// src/hydration.ts\nfunction defaultTransformerFn(data) {\n return data;\n}\nfunction dehydrateMutation(mutation) {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n ...mutation.options.scope && { scope: mutation.options.scope },\n ...mutation.meta && { meta: mutation.meta }\n };\n}\nfunction dehydrateQuery(query, serializeData) {\n return {\n state: {\n ...query.state,\n ...query.state.data !== void 0 && {\n data: serializeData(query.state.data)\n }\n },\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n ...query.state.status === \"pending\" && {\n promise: query.promise?.then(serializeData).catch((error) => {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\n `A query that was dehydrated as pending ended up rejecting. [${query.queryHash}]: ${error}; The error will be redacted in production builds`\n );\n }\n return Promise.reject(new Error(\"redacted\"));\n })\n },\n ...query.meta && { meta: query.meta }\n };\n}\nfunction defaultShouldDehydrateMutation(mutation) {\n return mutation.state.isPaused;\n}\nfunction defaultShouldDehydrateQuery(query) {\n return query.state.status === \"success\";\n}\nfunction dehydrate(client, options = {}) {\n const filterMutation = options.shouldDehydrateMutation ?? client.getDefaultOptions().dehydrate?.shouldDehydrateMutation ?? defaultShouldDehydrateMutation;\n const mutations = client.getMutationCache().getAll().flatMap(\n (mutation) => filterMutation(mutation) ? [dehydrateMutation(mutation)] : []\n );\n const filterQuery = options.shouldDehydrateQuery ?? client.getDefaultOptions().dehydrate?.shouldDehydrateQuery ?? defaultShouldDehydrateQuery;\n const serializeData = options.serializeData ?? client.getDefaultOptions().dehydrate?.serializeData ?? defaultTransformerFn;\n const queries = client.getQueryCache().getAll().flatMap(\n (query) => filterQuery(query) ? [dehydrateQuery(query, serializeData)] : []\n );\n return { mutations, queries };\n}\nfunction hydrate(client, dehydratedState, options) {\n if (typeof dehydratedState !== \"object\" || dehydratedState === null) {\n return;\n }\n const mutationCache = client.getMutationCache();\n const queryCache = client.getQueryCache();\n const deserializeData = options?.defaultOptions?.deserializeData ?? client.getDefaultOptions().hydrate?.deserializeData ?? defaultTransformerFn;\n const mutations = dehydratedState.mutations || [];\n const queries = dehydratedState.queries || [];\n mutations.forEach(({ state, ...mutationOptions }) => {\n mutationCache.build(\n client,\n {\n ...client.getDefaultOptions().hydrate?.mutations,\n ...options?.defaultOptions?.mutations,\n ...mutationOptions\n },\n state\n );\n });\n queries.forEach(({ queryKey, state, queryHash, meta, promise }) => {\n let query = queryCache.get(queryHash);\n const data = state.data === void 0 ? state.data : deserializeData(state.data);\n if (query) {\n if (query.state.dataUpdatedAt < state.dataUpdatedAt) {\n const { fetchStatus: _ignored, ...serializedState } = state;\n query.setState({\n ...serializedState,\n data\n });\n }\n } else {\n query = queryCache.build(\n client,\n {\n ...client.getDefaultOptions().hydrate?.queries,\n ...options?.defaultOptions?.queries,\n queryKey,\n queryHash,\n meta\n },\n // Reset fetch status to idle to avoid\n // query being stuck in fetching state upon hydration\n {\n ...state,\n data,\n fetchStatus: \"idle\"\n }\n );\n }\n if (promise) {\n const initialPromise = Promise.resolve(promise).then(deserializeData);\n void query.fetch(void 0, { initialPromise });\n }\n });\n}\nexport {\n defaultShouldDehydrateMutation,\n defaultShouldDehydrateQuery,\n dehydrate,\n hydrate\n};\n//# sourceMappingURL=hydration.js.map","\"use client\";\n\n// src/HydrationBoundary.tsx\nimport * as React from \"react\";\nimport { hydrate } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nvar HydrationBoundary = ({\n children,\n options = {},\n state,\n queryClient\n}) => {\n const client = useQueryClient(queryClient);\n const [hydrationQueue, setHydrationQueue] = React.useState();\n const optionsRef = React.useRef(options);\n optionsRef.current = options;\n React.useMemo(() => {\n if (state) {\n if (typeof state !== \"object\") {\n return;\n }\n const queryCache = client.getQueryCache();\n const queries = state.queries || [];\n const newQueries = [];\n const existingQueries = [];\n for (const dehydratedQuery of queries) {\n const existingQuery = queryCache.get(dehydratedQuery.queryHash);\n if (!existingQuery) {\n newQueries.push(dehydratedQuery);\n } else {\n const hydrationIsNewer = dehydratedQuery.state.dataUpdatedAt > existingQuery.state.dataUpdatedAt;\n const queryAlreadyQueued = hydrationQueue?.find(\n (query) => query.queryHash === dehydratedQuery.queryHash\n );\n if (hydrationIsNewer && (!queryAlreadyQueued || dehydratedQuery.state.dataUpdatedAt > queryAlreadyQueued.state.dataUpdatedAt)) {\n existingQueries.push(dehydratedQuery);\n }\n }\n }\n if (newQueries.length > 0) {\n hydrate(client, { queries: newQueries }, optionsRef.current);\n }\n if (existingQueries.length > 0) {\n setHydrationQueue(\n (prev) => prev ? [...prev, ...existingQueries] : existingQueries\n );\n }\n }\n }, [client, hydrationQueue, state]);\n React.useEffect(() => {\n if (hydrationQueue) {\n hydrate(client, { queries: hydrationQueue }, optionsRef.current);\n setHydrationQueue(void 0);\n }\n }, [client, hydrationQueue]);\n return children;\n};\nexport {\n HydrationBoundary\n};\n//# sourceMappingURL=HydrationBoundary.js.map","/**\n * react-router v7.0.2\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport {\n FrameworkContext,\n RemixErrorBoundary,\n RouterProvider,\n createBrowserHistory,\n createClientRoutes,\n createClientRoutesWithHMRRevalidationOptOut,\n createRouter,\n decodeViaTurboStream,\n deserializeErrors,\n getPatchRoutesOnNavigationFunction,\n getSingleFetchDataStrategy,\n invariant,\n mapRouteProperties,\n matchRoutes,\n shouldHydrateRouteLoader,\n useFogOFWarDiscovery\n} from \"./chunk-D52XG6IA.mjs\";\n\n// lib/dom-export/dom-router-provider.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nfunction RouterProvider2(props) {\n return /* @__PURE__ */ React.createElement(RouterProvider, { flushSync: ReactDOM.flushSync, ...props });\n}\n\n// lib/dom-export/hydrated-router.tsx\nimport * as React2 from \"react\";\nvar ssrInfo = null;\nvar router = null;\nfunction initSsrInfo() {\n if (!ssrInfo && window.__reactRouterContext && window.__reactRouterManifest && window.__reactRouterRouteModules) {\n ssrInfo = {\n context: window.__reactRouterContext,\n manifest: window.__reactRouterManifest,\n routeModules: window.__reactRouterRouteModules,\n stateDecodingPromise: void 0,\n router: void 0,\n routerInitialized: false\n };\n }\n}\nfunction createHydratedRouter() {\n initSsrInfo();\n if (!ssrInfo) {\n throw new Error(\n \"You must be using the SSR features of React Router in order to skip passing a `router` prop to `<RouterProvider>`\"\n );\n }\n let localSsrInfo = ssrInfo;\n if (!ssrInfo.stateDecodingPromise) {\n let stream = ssrInfo.context.stream;\n invariant(stream, \"No stream found for single fetch decoding\");\n ssrInfo.context.stream = void 0;\n ssrInfo.stateDecodingPromise = decodeViaTurboStream(stream, window).then((value) => {\n ssrInfo.context.state = value.value;\n localSsrInfo.stateDecodingPromise.value = true;\n }).catch((e) => {\n localSsrInfo.stateDecodingPromise.error = e;\n });\n }\n if (ssrInfo.stateDecodingPromise.error) {\n throw ssrInfo.stateDecodingPromise.error;\n }\n if (!ssrInfo.stateDecodingPromise.value) {\n throw ssrInfo.stateDecodingPromise;\n }\n let routes = createClientRoutes(\n ssrInfo.manifest.routes,\n ssrInfo.routeModules,\n ssrInfo.context.state,\n ssrInfo.context.isSpaMode\n );\n let hydrationData = void 0;\n if (!ssrInfo.context.isSpaMode) {\n hydrationData = {\n ...ssrInfo.context.state,\n loaderData: { ...ssrInfo.context.state.loaderData }\n };\n let initialMatches = matchRoutes(\n routes,\n window.location,\n window.__reactRouterContext?.basename\n );\n if (initialMatches) {\n for (let match of initialMatches) {\n let routeId = match.route.id;\n let route = ssrInfo.routeModules[routeId];\n let manifestRoute = ssrInfo.manifest.routes[routeId];\n if (route && manifestRoute && shouldHydrateRouteLoader(\n manifestRoute,\n route,\n ssrInfo.context.isSpaMode\n ) && (route.HydrateFallback || !manifestRoute.hasLoader)) {\n delete hydrationData.loaderData[routeId];\n } else if (manifestRoute && !manifestRoute.hasLoader) {\n hydrationData.loaderData[routeId] = null;\n }\n }\n }\n if (hydrationData && hydrationData.errors) {\n hydrationData.errors = deserializeErrors(hydrationData.errors);\n }\n }\n let router2 = createRouter({\n routes,\n history: createBrowserHistory(),\n basename: ssrInfo.context.basename,\n hydrationData,\n mapRouteProperties,\n dataStrategy: getSingleFetchDataStrategy(\n ssrInfo.manifest,\n ssrInfo.routeModules,\n () => router2\n ),\n patchRoutesOnNavigation: getPatchRoutesOnNavigationFunction(\n ssrInfo.manifest,\n ssrInfo.routeModules,\n ssrInfo.context.isSpaMode,\n ssrInfo.context.basename\n )\n });\n ssrInfo.router = router2;\n if (router2.state.initialized) {\n ssrInfo.routerInitialized = true;\n router2.initialize();\n }\n router2.createRoutesForHMR = /* spacer so ts-ignore does not affect the right hand of the assignment */\n createClientRoutesWithHMRRevalidationOptOut;\n window.__reactRouterDataRouter = router2;\n return router2;\n}\nfunction HydratedRouter() {\n if (!router) {\n router = createHydratedRouter();\n }\n let [criticalCss, setCriticalCss] = React2.useState(\n process.env.NODE_ENV === \"development\" ? ssrInfo?.context.criticalCss : void 0\n );\n if (process.env.NODE_ENV === \"development\") {\n if (ssrInfo) {\n window.__reactRouterClearCriticalCss = () => setCriticalCss(void 0);\n }\n }\n let [location, setLocation] = React2.useState(router.state.location);\n React2.useLayoutEffect(() => {\n if (ssrInfo && ssrInfo.router && !ssrInfo.routerInitialized) {\n ssrInfo.routerInitialized = true;\n ssrInfo.router.initialize();\n }\n }, []);\n React2.useLayoutEffect(() => {\n if (ssrInfo && ssrInfo.router) {\n return ssrInfo.router.subscribe((newState) => {\n if (newState.location !== location) {\n setLocation(newState.location);\n }\n });\n }\n }, [location]);\n invariant(ssrInfo, \"ssrInfo unavailable for HydratedRouter\");\n useFogOFWarDiscovery(\n router,\n ssrInfo.manifest,\n ssrInfo.routeModules,\n ssrInfo.context.isSpaMode\n );\n return (\n // This fragment is important to ensure we match the <ServerRouter> JSX\n // structure so that useId values hydrate correctly\n /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(\n FrameworkContext.Provider,\n {\n value: {\n manifest: ssrInfo.manifest,\n routeModules: ssrInfo.routeModules,\n future: ssrInfo.context.future,\n criticalCss,\n isSpaMode: ssrInfo.context.isSpaMode\n }\n },\n /* @__PURE__ */ React2.createElement(RemixErrorBoundary, { location }, /* @__PURE__ */ React2.createElement(RouterProvider2, { router }))\n ), /* @__PURE__ */ React2.createElement(React2.Fragment, null))\n );\n}\nexport {\n HydratedRouter,\n RouterProvider2 as RouterProvider\n};\n","import {\n HydrationBoundary,\n QueryClient,\n QueryClientProvider,\n} from \"@tanstack/react-query\";\nimport { type HelmetData, HelmetProvider } from \"@zudoku/react-helmet-async\";\nimport { StrictMode } from \"react\";\nimport {\n type createBrowserRouter,\n type createStaticRouter,\n type StaticHandlerContext,\n StaticRouterProvider,\n} from \"react-router\";\nimport { RouterProvider } from \"react-router/dom\";\nimport { StaggeredRenderContext } from \"../plugins/openapi/StaggeredRender.js\";\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 1000 * 60 * 5,\n },\n },\n});\n\nconst Bootstrap = ({\n router,\n hydrate = false,\n}: {\n hydrate?: boolean;\n router: ReturnType<typeof createBrowserRouter>;\n}) => (\n <StrictMode>\n <QueryClientProvider client={queryClient}>\n <HydrationBoundary state={hydrate ? (window as any).DATA : undefined}>\n <HelmetProvider>\n <StaggeredRenderContext.Provider value={{ stagger: !hydrate }}>\n <RouterProvider router={router} />\n </StaggeredRenderContext.Provider>\n </HelmetProvider>\n </HydrationBoundary>\n </QueryClientProvider>\n </StrictMode>\n);\n\nconst BootstrapStatic = ({\n router,\n context,\n queryClient,\n helmetContext,\n}: {\n helmetContext: HelmetData[\"context\"];\n context: StaticHandlerContext;\n queryClient: QueryClient;\n router: ReturnType<typeof createStaticRouter>;\n}) => (\n <StrictMode>\n <QueryClientProvider client={queryClient}>\n <HelmetProvider context={helmetContext}>\n <StaticRouterProvider router={router} context={context} />\n </HelmetProvider>\n </QueryClientProvider>\n </StrictMode>\n);\n\nexport { Bootstrap, BootstrapStatic };\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :\n typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :\n (global = global || self, factory(global.spinDelay = {}, global.react));\n}(this, (function (exports, react) {\n const defaultOptions = {\n delay: 500,\n minDuration: 200,\n ssr: true\n };\n\n function useIsSSR() {\n const [isSSR, setIsSSR] = react.useState(true);\n react.useEffect(() => {\n setIsSSR(false);\n }, []);\n return isSSR;\n }\n\n function useSpinDelay(loading, options) {\n options = Object.assign({}, defaultOptions, options);\n const isSSR = useIsSSR() && options.ssr;\n const initialState = isSSR && loading ? 'DISPLAY' : 'IDLE';\n const [state, setState] = react.useState(initialState);\n const timeout = react.useRef(null);\n react.useEffect(() => {\n if (loading && (state === 'IDLE' || isSSR)) {\n clearTimeout(timeout.current);\n const delay = isSSR ? 0 : options.delay;\n timeout.current = setTimeout(() => {\n if (!loading) {\n return setState('IDLE');\n }\n\n timeout.current = setTimeout(() => {\n setState('EXPIRE');\n }, options.minDuration);\n setState('DISPLAY');\n }, delay);\n\n if (!isSSR) {\n setState('DELAY');\n }\n }\n\n if (!loading && state !== 'DISPLAY') {\n clearTimeout(timeout.current);\n setState('IDLE');\n }\n }, [loading, state, options.delay, options.minDuration, isSSR]);\n react.useEffect(() => {\n return () => clearTimeout(timeout.current);\n }, []);\n return state === 'DISPLAY' || state === 'EXPIRE';\n }\n\n exports.defaultOptions = defaultOptions;\n exports.useSpinDelay = useSpinDelay;\n\n})));\n//# sourceMappingURL=index.js.map\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { ChevronRightIcon } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { NavLink, useMatch } from \"react-router\";\nimport type { SidebarItemCategory } from \"../../../config/validators/SidebarSchema.js\";\nimport { cn } from \"../../util/cn.js\";\nimport { joinPath } from \"../../util/joinPath.js\";\nimport { navigationListItem, SidebarItem } from \"./SidebarItem.js\";\nimport { useIsCategoryOpen } from \"./utils.js\";\n\nexport const SidebarCategory = ({\n category,\n onRequestClose,\n}: {\n category: SidebarItemCategory;\n onRequestClose?: () => void;\n}) => {\n const isCategoryOpen = useIsCategoryOpen(category);\n const [hasInteracted, setHasInteracted] = useState(false);\n\n const isCollapsible = category.collapsible ?? true;\n const isCollapsed = category.collapsed ?? true;\n const isDefaultOpen = Boolean(\n !isCollapsible || !isCollapsed || isCategoryOpen,\n );\n const [open, setOpen] = useState(isDefaultOpen);\n const isActive = useMatch(category.link?.id ?? \"\");\n\n useEffect(() => {\n // this is triggered when an item from the sidebar is clicked\n // and the sidebar, enclosing this item, is not opened\n if (isCategoryOpen) {\n setOpen(true);\n }\n }, [isCategoryOpen]);\n\n const ToggleButton = isCollapsible && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n setOpen((prev) => !prev);\n setHasInteracted(true);\n }}\n >\n <ChevronRightIcon\n size={16}\n className={cn(\n hasInteracted && \"transition\",\n \"shrink-0 group-data-[state=open]:rotate-90\",\n )}\n />\n </button>\n );\n\n return (\n <Collapsible.Root\n className=\"flex flex-col\"\n defaultOpen={isDefaultOpen}\n open={open}\n onOpenChange={() => setOpen(true)}\n >\n <Collapsible.Trigger className=\"group\" asChild disabled={!isCollapsible}>\n <div\n onClick={() => setHasInteracted(true)}\n className={navigationListItem({\n isActive: false,\n className: [\n \"text-start\",\n isCollapsible\n ? \"cursor-pointer\"\n : \"cursor-default hover:bg-transparent\",\n ],\n })}\n >\n {category.icon && (\n <category.icon\n size={16}\n className={cn(\"align-[-0.125em] \", isActive && \"text-primary\")}\n />\n )}\n {category.link?.type === \"doc\" ? (\n <NavLink\n to={joinPath(category.link.id)}\n className=\"flex-1\"\n onClick={() => {\n // if it is the current path and closed then open it because there's no path change to trigger the open\n if (isActive && !open) {\n setOpen(true);\n }\n }}\n >\n <div\n className={cn(\n \"flex items-center gap-2 justify-between w-full\",\n isActive ? \"text-primary\" : \"text-foreground/80\",\n )}\n >\n <div className=\"truncate\">{category.label}</div>\n {ToggleButton}\n </div>\n </NavLink>\n ) : (\n <div className=\"flex items-center justify-between w-full\">\n <div className=\"flex gap-2 truncate w-full\">{category.label}</div>\n {ToggleButton}\n </div>\n )}\n </div>\n </Collapsible.Trigger>\n <Collapsible.Content\n className={cn(\n // CollapsibleContent class is used to animate and it should only be applied when the user has triggered the toggle\n hasInteracted && \"CollapsibleContent\",\n \"ms-6 my-1\",\n )}\n >\n <ul\n className={\n \"relative after:absolute after:-left-[--padding-nav-item] after:translate-x-[1.5px] after:top-0 after:bottom-0 after:w-px after:bg-border\"\n }\n >\n {category.items.map((item) => (\n <SidebarItem\n key={\n (\"id\" in item ? item.id : \"\") +\n (\"href\" in item ? item.href : \"\") +\n item.label\n }\n onRequestClose={onRequestClose}\n item={item}\n />\n ))}\n </ul>\n </Collapsible.Content>\n </Collapsible.Root>\n );\n};\n","import { cva } from \"class-variance-authority\";\nimport { ExternalLinkIcon } from \"lucide-react\";\nimport { NavLink, useSearchParams } from \"react-router\";\n\nimport type { SidebarItem as SidebarItemType } from \"../../../config/validators/SidebarSchema.js\";\nimport { joinPath } from \"../../util/joinPath.js\";\nimport { AnchorLink } from \"../AnchorLink.js\";\nimport { useViewportAnchor } from \"../context/ViewportAnchorContext.js\";\nimport { SidebarBadge } from \"./SidebarBadge.js\";\nimport { SidebarCategory } from \"./SidebarCategory.js\";\n\nexport const navigationListItem = cva(\n \"flex items-center gap-2 px-[--padding-nav-item] py-1.5 rounded-lg hover:bg-accent transition-colors duration-300\",\n {\n variants: {\n isActive: {\n true: \"text-primary font-medium\",\n false: \"text-foreground/80\",\n },\n isMuted: {\n true: \"text-foreground/30\",\n false: \"\",\n },\n },\n defaultVariants: {\n isActive: false,\n },\n },\n);\n\nexport const DATA_ANCHOR_ATTR = \"data-anchor\";\n\nexport const SidebarItem = ({\n item,\n onRequestClose,\n}: {\n item: SidebarItemType;\n onRequestClose?: () => void;\n}) => {\n const { activeAnchor } = useViewportAnchor();\n const [searchParams] = useSearchParams();\n\n switch (item.type) {\n case \"category\":\n return (\n <SidebarCategory category={item} onRequestClose={onRequestClose} />\n );\n case \"doc\":\n return (\n <NavLink\n className={({ isActive }) => navigationListItem({ isActive })}\n to={joinPath(item.id)}\n onClick={onRequestClose}\n >\n {item.icon && <item.icon size={16} className=\"align-[-0.125em]\" />}\n {item.badge ? (\n <>\n <span className=\"truncate flex-1\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n item.label\n )}\n </NavLink>\n );\n case \"link\":\n return item.href.startsWith(\"#\") ? (\n <AnchorLink\n to={{ hash: item.href, search: searchParams.toString() }}\n {...{ [DATA_ANCHOR_ATTR]: item.href.slice(1) }}\n className={navigationListItem({\n isActive: item.href.slice(1) === activeAnchor,\n className: item.badge?.placement !== \"start\" && \"justify-between\",\n })}\n onClick={onRequestClose}\n >\n {item.badge ? (\n <>\n <span className=\"truncate\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n <span className=\"break-all\">{item.label}</span>\n )}\n </AnchorLink>\n ) : !item.href.startsWith(\"http\") ? (\n <NavLink\n className={navigationListItem({\n className: item.badge?.placement !== \"start\" && \"justify-between\",\n })}\n to={item.href}\n >\n {item.badge ? (\n <>\n <span className=\"truncate\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n <span className=\"break-all\">{item.label}</span>\n )}\n </NavLink>\n ) : (\n <a\n className={navigationListItem()}\n href={item.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={onRequestClose}\n >\n <span className=\"whitespace-normal\">{item.label}</span>\n {/* This prevents that the icon would be positioned in its own line if the text fills a line entirely */}\n <span className=\"whitespace-nowrap\">\n <ExternalLinkIcon className=\"inline -translate-y-0.5\" size={12} />\n </span>\n </a>\n );\n }\n};\n","import { useEffect } from \"react\";\nimport { useLocation } from \"react-router\";\nimport { useViewportAnchor } from \"../components/context/ViewportAnchorContext.js\";\nimport { DATA_ANCHOR_ATTR } from \"../components/navigation/SidebarItem.js\";\n\nconst scrollIntoViewIfNeeded = (\n element: Element | null,\n options: ScrollIntoViewOptions = { block: \"center\" },\n) => {\n if (!element) return;\n\n const rect = element.getBoundingClientRect();\n const isInView =\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <=\n (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n\n if (isInView) return;\n\n element.scrollIntoView(options);\n};\n\nexport const useScrollToAnchor = () => {\n const location = useLocation();\n const { setActiveAnchor } = useViewportAnchor();\n\n useEffect(() => {\n if (!location.hash) return;\n\n const hash = decodeURIComponent(location.hash.split(\"/\")[0]!.slice(1));\n\n const scrollToElement = () => {\n const element = document.getElementById(hash);\n const link = document.querySelector(`[${DATA_ANCHOR_ATTR}=\"${hash}\"]`);\n\n if (element) {\n element.scrollIntoView();\n scrollIntoViewIfNeeded(link);\n requestIdleCallback(() => setActiveAnchor(hash));\n return true;\n }\n\n return false;\n };\n\n if (!scrollToElement()) {\n const observer = new MutationObserver((_, obs) => {\n if (!scrollToElement()) return;\n obs.disconnect();\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n\n return () => observer.disconnect();\n }\n }, [location.hash, setActiveAnchor]);\n};\n","import { useEffect, useRef } from \"react\";\nimport { useLocation } from \"react-router\";\n\nexport const useScrollToTop = () => {\n const location = useLocation();\n const previousPath = useRef(location.pathname);\n\n useEffect(() => {\n if (previousPath.current === location.pathname) return;\n window.scrollTo(0, 0);\n previousPath.current = location.pathname;\n }, [location.pathname]);\n};\n","import { cn } from \"../util/cn.js\";\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","import type { LucideIcon } from \"lucide-react\";\nimport { type ReactElement } from \"react\";\nimport { type RouteObject } from \"react-router\";\nimport type { Sidebar } from \"../../config/validators/SidebarSchema.js\";\nimport { MdxComponentsType } from \"../util/MdxComponents.js\";\nimport { ZudokuContext, type ApiIdentity } from \"./ZudokuContext.js\";\n\nexport type ZudokuPlugin =\n | CommonPlugin\n | ProfileMenuPlugin\n | NavigationPlugin\n | ApiIdentityPlugin\n | SearchProviderPlugin;\n\nexport type { RouteObject };\n\nexport interface NavigationPlugin {\n getRoutes: () => RouteObject[];\n getSidebar?: (path: string) => Promise<Sidebar>;\n}\n\nexport interface ApiIdentityPlugin {\n getIdentities: (context: ZudokuContext) => Promise<ApiIdentity[]>;\n}\n\nexport interface SearchProviderPlugin {\n renderSearch: (o: {\n isOpen: boolean;\n onClose: () => void;\n }) => React.JSX.Element | null;\n}\n\nexport interface ProfileMenuPlugin {\n getProfileMenuItems: (context: ZudokuContext) => ProfileNavigationItem[];\n}\n\nexport type ProfileNavigationItem = {\n label: string;\n path?: string;\n weight?: number;\n category?: \"top\" | \"middle\" | \"bottom\";\n children?: ProfileNavigationItem[];\n icon?: LucideIcon;\n};\n\nexport interface CommonPlugin {\n initialize?: (\n context: ZudokuContext,\n ) => Promise<void | boolean> | void | boolean;\n getHead?: () => ReactElement | undefined;\n getMdxComponents?: () => MdxComponentsType;\n}\n\nexport const isProfileMenuPlugin = (\n obj: ZudokuPlugin,\n): obj is ProfileMenuPlugin =>\n \"getProfileMenuItems\" in obj && typeof obj.getProfileMenuItems === \"function\";\n\nexport const isNavigationPlugin = (\n obj: ZudokuPlugin,\n): obj is NavigationPlugin =>\n \"getRoutes\" in obj && typeof obj.getRoutes === \"function\";\n\nexport const isSearchPlugin = (\n obj: ZudokuPlugin,\n): obj is SearchProviderPlugin =>\n \"renderSearch\" in obj && typeof obj.renderSearch === \"function\";\n\nexport const needsInitialization = (obj: ZudokuPlugin): obj is CommonPlugin =>\n \"initialize\" in obj && typeof obj.initialize === \"function\";\n\nexport const hasHead = (obj: ZudokuPlugin): obj is CommonPlugin =>\n \"getHead\" in obj && typeof obj.getHead === \"function\";\n\nexport const isMdxProviderPlugin = (obj: ZudokuPlugin): obj is CommonPlugin =>\n \"getMdxComponents\" in obj && typeof obj.getMdxComponents === \"function\";\n\nexport const isApiIdentityPlugin = (\n obj: ZudokuPlugin,\n): obj is ApiIdentityPlugin =>\n \"getIdentities\" in obj && typeof obj.getIdentities === \"function\";\n","import { CircleXIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { cn } from \"../util/cn.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\n\nconst COLOR_MAP = {\n info: \"bg-blue-500\",\n note: \"bg-gray-500\",\n tip: \"bg-green-600\",\n caution: \"bg-orange-500\",\n danger: \"bg-rose-500\",\n} as const;\n\nexport const Banner = () => {\n const { page } = useZudoku();\n const [isBannerOpen, setIsBannerOpen] = useState(true);\n\n if (!page?.banner || !isBannerOpen) {\n return <style>{`:root { --banner-height: 0px; }`}</style>;\n }\n\n const mappedColor =\n page.banner.color && page.banner.color in COLOR_MAP\n ? COLOR_MAP[page.banner.color as keyof typeof COLOR_MAP]\n : !page.banner.color\n ? \"bg-primary\"\n : undefined;\n\n const style = !mappedColor ? { backgroundColor: page.banner.color } : {};\n\n return (\n <div\n className={cn(\n \"relative text-primary-foreground text-sm font-medium px-4 py-2 flex gap-2 items-center\",\n mappedColor,\n )}\n style={style}\n >\n <div className=\"w-full\">{page.banner.message}</div>\n {page.banner.dismissible && (\n <button\n type=\"button\"\n className=\"md:absolute md:right-4 -m-1.5 p-1.5 hover:bg-accent-foreground/10 rounded-md\"\n onClick={() => setIsBannerOpen(false)}\n >\n <CircleXIcon size={16} />\n </button>\n )}\n </div>\n );\n};\n","import { SearchIcon } from \"lucide-react\";\nimport { Suspense, useCallback, useEffect, useState } from \"react\";\nimport { isSearchPlugin } from \"../core/plugins.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\n\nexport const Search = ({ className }: { className?: string }) => {\n const ctx = useZudoku();\n const [isOpen, setIsOpen] = useState(false);\n\n const onClose = useCallback(() => setIsOpen(false), []);\n\n useEffect(() => {\n if (isOpen) {\n return;\n }\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key === \"k\" && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n setIsOpen(true);\n }\n }\n\n window.addEventListener(\"keydown\", onKeyDown);\n\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [isOpen, setIsOpen]);\n\n const searchPlugin = ctx.plugins.find(isSearchPlugin);\n\n if (!searchPlugin) {\n return null;\n }\n\n return (\n <div className={className}>\n <button\n type=\"button\"\n onClick={() => setIsOpen(true)}\n className=\"flex items-center border border-input hover:bg-accent hover:text-accent-foreground p-4 relative h-8 justify-start rounded-lg bg-background text-sm text-muted-foreground shadow-none w-full sm:w-72\"\n >\n <div className=\"flex items-center gap-2 flex-grow\">\n <SearchIcon size={14} />\n Search\n </div>\n <kbd className=\"absolute right-[0.3rem] top-[0.3rem] hidden h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[11px] font-medium opacity-100 sm:flex\">\n ⌘K\n </kbd>\n </button>\n <Suspense fallback={null}>\n {searchPlugin.renderSearch({\n isOpen,\n onClose,\n })}\n </Suspense>\n </div>\n );\n};\n","import { MoonStarIcon, SunIcon } from \"lucide-react\";\nimport { useTheme } from \"next-themes\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { ClientOnly } from \"./ClientOnly.js\";\n\nexport const ThemeSwitch = () => {\n const { resolvedTheme, setTheme } = useTheme();\n const ThemeIcon = resolvedTheme === \"dark\" ? MoonStarIcon : SunIcon;\n\n return (\n <ClientOnly>\n <Button\n variant=\"ghost\"\n aria-label={\n resolvedTheme === \"dark\"\n ? \"Switch to light mode\"\n : \"Switch to dark mode\"\n }\n className=\"p-2.5 -m-2.5 rounded-full\"\n onClick={() => setTheme(resolvedTheme === \"dark\" ? \"light\" : \"dark\")}\n >\n <ThemeIcon size={18} />\n </Button>\n </ClientOnly>\n );\n};\n","import { cx } from \"class-variance-authority\";\nimport { Suspense } from \"react\";\nimport { NavLink, useNavigation } from \"react-router\";\nimport { TopNavigationItem } from \"../../config/validators/common.js\";\nimport { useAuth } from \"../authentication/hook.js\";\nimport { ZudokuError } from \"../util/invariant.js\";\nimport { joinPath } from \"../util/joinPath.js\";\nimport { useCurrentNavigation, useZudoku } from \"./context/ZudokuContext.js\";\nimport { traverseSidebar } from \"./navigation/utils.js\";\n\nexport const isHiddenItem =\n (isAuthenticated?: boolean) =>\n (item: { display?: \"auth\" | \"anon\" | \"always\" }) => {\n return (\n (item.display === \"auth\" && isAuthenticated) ||\n (item.display === \"anon\" && !isAuthenticated) ||\n !item.display ||\n item.display === \"always\"\n );\n };\n\nexport const TopNavigation = () => {\n const { topNavigation } = useZudoku();\n const { isAuthenticated } = useAuth();\n\n // Hide top nav if there is only one item\n if (topNavigation.length <= 1) {\n return <style>{`:root { --top-nav-height: 0px; }`}</style>;\n }\n\n return (\n <Suspense>\n <nav className=\"hidden lg:block border-b text-sm px-12 h-[--top-nav-height]\">\n <ul className=\"flex flex-row items-center gap-8\">\n {topNavigation.filter(isHiddenItem(isAuthenticated)).map((item) => (\n <li key={item.id}>\n <TopNavItem {...item} />\n </li>\n ))}\n </ul>\n </nav>\n </Suspense>\n );\n};\n\nexport const TopNavItem = ({\n id,\n label,\n default: defaultLink,\n}: TopNavigationItem) => {\n const { sidebars } = useZudoku();\n const currentSidebar = sidebars[id];\n const currentNav = useCurrentNavigation();\n const isNavigating = Boolean(useNavigation().location);\n const isActive = currentNav.topNavItem?.id === id && !isNavigating;\n\n // TODO: This is a bit of a hack to get the first link in the sidebar\n // We should really process this when we load the config so we can validate\n // that the sidebar is actually set. In this case we just fall back to linking\n // to the id if we can't resolve a sidebar.\n const first =\n defaultLink ??\n (currentSidebar\n ? traverseSidebar(currentSidebar, (item) => {\n if (item.type === \"doc\") return joinPath(item.id);\n })\n : joinPath(id));\n\n if (!first) {\n throw new ZudokuError(\"Page not found.\", {\n developerHint: `No links found in top navigation for '${id}'. Check that the sidebar isn't empty or that a default link is set.`,\n });\n }\n\n return (\n // We don't use isActive here because it has to be inside the sidebar,\n // the top nav id doesn't necessarily start with the sidebar id\n <NavLink\n className={({ isPending }) =>\n cx(\n \"block lg:py-3.5 font-medium -mb-px border-b-2\",\n isActive || isPending\n ? \"border-primary text-foreground\"\n : \"border-transparent text-foreground/75 hover:text-foreground hover:border-accent-foreground/25\",\n )\n }\n to={first}\n >\n {label}\n </NavLink>\n );\n};\n","import { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { MenuIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { useAuth } from \"../authentication/hook.js\";\nimport {\n Drawer,\n DrawerContent,\n DrawerTitle,\n DrawerTrigger,\n} from \"../ui/Drawer.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\nimport { Search } from \"./Search.js\";\nimport { ThemeSwitch } from \"./ThemeSwitch.js\";\nimport { isHiddenItem, TopNavItem } from \"./TopNavigation.js\";\n\nexport const MobileTopNavigation = () => {\n const { topNavigation } = useZudoku();\n const { isAuthenticated } = useAuth();\n const [drawerOpen, setDrawerOpen] = useState(false);\n\n return (\n <Drawer\n direction=\"right\"\n open={drawerOpen}\n onOpenChange={(open) => setDrawerOpen(open)}\n >\n <div className=\"flex lg:hidden justify-self-end\">\n <DrawerTrigger className=\"lg:hidden\">\n <MenuIcon size={22} />\n </DrawerTrigger>\n </div>\n <DrawerContent\n className=\"lg:hidden h-[100dvh] right-0 left-auto w-[320px] rounded-none\"\n aria-describedby={undefined}\n >\n <div className=\"p-6 overflow-y-auto overscroll-none\">\n <VisuallyHidden>\n <DrawerTitle>Navigation</DrawerTitle>\n </VisuallyHidden>\n <Search className=\"flex p-4\" />\n <ul className=\"flex flex-col items-center gap-4 p-4\">\n <li>\n <ThemeSwitch />\n </li>\n {topNavigation.filter(isHiddenItem(isAuthenticated)).map((item) => (\n <li key={item.label}>\n <button onClick={() => setDrawerOpen(false)}>\n <TopNavItem {...item} />\n </button>\n </li>\n ))}\n </ul>\n </div>\n </DrawerContent>\n </Drawer>\n );\n};\n","import { memo } from \"react\";\nimport { Link } from \"react-router\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { Skeleton } from \"zudoku/ui/Skeleton.js\";\nimport { useAuth } from \"../authentication/hook.js\";\nimport { isProfileMenuPlugin, ProfileNavigationItem } from \"../core/plugins.js\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"../ui/DropdownMenu.js\";\nimport { joinPath } from \"../util/joinPath.js\";\nimport { Banner } from \"./Banner.js\";\nimport { ClientOnly } from \"./ClientOnly.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\nimport { MobileTopNavigation } from \"./MobileTopNavigation.js\";\nimport { Search } from \"./Search.js\";\nimport { Slotlet } from \"./SlotletProvider.js\";\nimport { ThemeSwitch } from \"./ThemeSwitch.js\";\nimport { TopNavigation } from \"./TopNavigation.js\";\n\nconst RecursiveMenu = ({ item }: { item: ProfileNavigationItem }) => {\n return item.children ? (\n <DropdownMenuSub key={item.label}>\n <DropdownMenuSubTrigger>{item.label}</DropdownMenuSubTrigger>\n <DropdownMenuPortal>\n <DropdownMenuSubContent>\n {item.children.map((item, i) => (\n // eslint-disable-next-line react/no-array-index-key\n <RecursiveMenu key={i} item={item} />\n ))}\n </DropdownMenuSubContent>\n </DropdownMenuPortal>\n </DropdownMenuSub>\n ) : (\n <Link to={item.path ?? \"\"}>\n <DropdownMenuItem key={item.label} className=\"flex gap-2\">\n {item.icon && (\n <item.icon size={16} strokeWidth={1} absoluteStrokeWidth />\n )}\n {item.label}\n </DropdownMenuItem>\n </Link>\n );\n};\n\nexport const Header = memo(function HeaderInner() {\n const auth = useAuth();\n const { isAuthenticated, profile, isAuthEnabled } = useAuth();\n const context = useZudoku();\n const { page, plugins } = context;\n\n const accountItems = plugins\n .filter((p) => isProfileMenuPlugin(p))\n .flatMap((p) => p.getProfileMenuItems(context))\n .sort((i) => i.weight ?? 0);\n\n return (\n <header className=\"sticky lg:top-0 z-10 bg-background/80 backdrop-blur w-full\">\n <Banner />\n <div className=\"max-w-screen-2xl mx-auto\">\n <div className=\"grid grid-cols-2 lg:grid-cols-[calc(var(--side-nav-width))_1fr] lg:gap-12 items-center border-b px-10 lg:px-12 h-[--top-header-height]\">\n <div className=\"flex\">\n <Link to=\"/\">\n <div className=\"flex items-center gap-3.5\">\n {page?.logo && (\n <>\n <img\n src={\n /https?:\\/\\//.test(page.logo.src.light)\n ? page.logo.src.light\n : joinPath(\n import.meta.env.BASE_URL,\n page.logo.src.light,\n )\n }\n alt={page.logo.alt ?? page.pageTitle}\n style={{ width: page.logo.width }}\n className=\"h-10 dark:hidden\"\n loading=\"lazy\"\n />\n <img\n src={\n /https?:\\/\\//.test(page.logo.src.dark)\n ? page.logo.src.dark\n : joinPath(\n import.meta.env.BASE_URL,\n page.logo.src.dark,\n )\n }\n alt={page.logo.alt ?? page.pageTitle}\n style={{ width: page.logo.width }}\n className=\"h-10 hidden dark:block\"\n loading=\"lazy\"\n />\n </>\n )}\n <span className=\"font-bold text-2xl text-foreground/85 tracking-wide\">\n {page?.pageTitle}\n </span>\n </div>\n </Link>\n </div>\n <div className=\"grid grid-cols-1 lg:grid-cols-[--sidecar-grid-cols] items-center gap-8\">\n <div className=\"w-full justify-center hidden lg:flex\">\n <Search />\n </div>\n\n <MobileTopNavigation />\n <div className=\"hidden lg:flex items-center justify-self-end text-sm gap-2\">\n <Slotlet name=\"head-navigation-start\" />\n {isAuthEnabled && (\n <ClientOnly\n fallback={<Skeleton className=\"rounded h-5 w-24 mr-4\" />}\n >\n {!isAuthenticated ? (\n <Button variant=\"ghost\" onClick={() => auth.login()}>\n Login\n </Button>\n ) : (\n Object.values(accountItems).length > 0 && (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\">\n {profile?.name ? `${profile.name}` : \"My Account\"}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"w-56\">\n <DropdownMenuLabel>\n {profile?.name ? `${profile.name}` : \"My Account\"}\n {profile?.email && (\n <div className=\"font-normal text-muted-foreground\">\n {profile.email}\n </div>\n )}\n </DropdownMenuLabel>\n {accountItems.filter((i) => i.category === \"top\")\n .length > 0 && <DropdownMenuSeparator />}\n {accountItems\n .filter((i) => i.category === \"top\")\n .map((i) => (\n <RecursiveMenu key={i.label} item={i} />\n ))}\n {accountItems.filter(\n (i) => !i.category || i.category === \"middle\",\n ).length > 0 && <DropdownMenuSeparator />}\n {accountItems\n .filter(\n (i) => !i.category || i.category === \"middle\",\n )\n .map((i) => (\n <RecursiveMenu key={i.label} item={i} />\n ))}\n {accountItems.filter((i) => i.category === \"bottom\")\n .length > 0 && <DropdownMenuSeparator />}\n {accountItems\n .filter((i) => i.category === \"bottom\")\n .map((i) => (\n <RecursiveMenu key={i.label} item={i} />\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n )}\n </ClientOnly>\n )}\n <ThemeSwitch />\n <Slotlet name=\"head-navigation-end\" />\n </div>\n </div>\n </div>\n <Slotlet name=\"top-navigation-before\" />\n <TopNavigation />\n <Slotlet name=\"top-navigation-after\" />\n </div>\n </header>\n );\n});\n","import { forwardRef, type PropsWithChildren } from \"react\";\nimport { cn } from \"../../util/cn.js\";\n\nexport const SidebarWrapper = forwardRef<\n HTMLDivElement,\n PropsWithChildren<{ pushMainContent?: boolean; className?: string }>\n>(({ children, className, pushMainContent }, ref) => (\n <nav\n // this data attribute is used in `Layout.tsx` to determine if side navigation\n // is present for the current page so the main content is pushed to the right\n // it's also important to set `peer` class here.\n // maybe this could be simplified by adjusting the layout\n data-navigation={String(pushMainContent)}\n className={cn(\n \"scrollbar peer hidden lg:flex flex-col fixed text-sm overflow-y-auto shrink-0\",\n \"-mx-[--padding-nav-item] pb-20 mt-[--padding-content-top]\",\n \"w-[--side-nav-width] h-[calc(100%-var(--header-height))] scroll-pt-2 gap-2\",\n className,\n )}\n ref={ref}\n >\n {children}\n </nav>\n));\n\nSidebarWrapper.displayName = \"SidebarWrapper\";\n","import { useRef } from \"react\";\n\nimport { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { DrawerContent, DrawerTitle } from \"../../ui/Drawer.js\";\nimport { useCurrentNavigation } from \"../context/ZudokuContext.js\";\nimport { Slotlet } from \"../SlotletProvider.js\";\nimport { SidebarItem } from \"./SidebarItem.js\";\nimport { SidebarWrapper } from \"./SidebarWrapper.js\";\n\nexport const Sidebar = ({\n onRequestClose,\n}: {\n onRequestClose?: () => void;\n}) => {\n const navRef = useRef<HTMLDivElement | null>(null);\n const navigation = useCurrentNavigation();\n\n return (\n <>\n <SidebarWrapper\n ref={navRef}\n pushMainContent={navigation.sidebar.length > 0}\n >\n <Slotlet name=\"zudoku-before-navigation\" />\n {navigation.sidebar.map((item) => (\n <SidebarItem key={item.label} item={item} />\n ))}\n <Slotlet name=\"zudoku-after-navigation\" />\n </SidebarWrapper>\n <DrawerContent\n className=\"lg:hidden h-[100dvh] left-0 w-[320px] rounded-none\"\n aria-describedby={undefined}\n >\n <div className=\"p-6 overflow-y-auto overscroll-none\">\n <VisuallyHidden>\n <DrawerTitle>Sidebar</DrawerTitle>\n </VisuallyHidden>\n {navigation.sidebar.map((item) => (\n <SidebarItem\n key={item.label}\n item={item}\n onRequestClose={onRequestClose}\n />\n ))}\n </div>\n </DrawerContent>\n </>\n );\n};\n","import { Helmet } from \"@zudoku/react-helmet-async\";\nimport { PanelLeftIcon } from \"lucide-react\";\nimport { Suspense, useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { Outlet, useLocation, useNavigation } from \"react-router\";\nimport { useSpinDelay } from \"spin-delay\";\nimport { Drawer, DrawerTrigger } from \"../ui/Drawer.js\";\nimport { cn } from \"../util/cn.js\";\nimport { useScrollToAnchor } from \"../util/useScrollToAnchor.js\";\nimport { useScrollToTop } from \"../util/useScrollToTop.js\";\nimport { useViewportAnchor } from \"./context/ViewportAnchorContext.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\nimport { Header } from \"./Header.js\";\nimport { Sidebar } from \"./navigation/Sidebar.js\";\nimport { Slotlet } from \"./SlotletProvider.js\";\nimport { Spinner } from \"./Spinner.js\";\n\nconst LoadingFallback = () => (\n <main className=\"grid h-[calc(100vh-var(--header-height))] place-items-center\">\n <Spinner />\n </main>\n);\n\nexport const Layout = ({ children }: { children?: ReactNode }) => {\n const location = useLocation();\n const { setActiveAnchor } = useViewportAnchor();\n const { meta, authentication } = useZudoku();\n\n useScrollToAnchor();\n useScrollToTop();\n\n const previousLocationPath = useRef(location.pathname);\n\n useEffect(() => {\n // Initialize the authentication plugin\n authentication?.onPageLoad?.();\n }, [authentication]);\n\n useEffect(() => {\n // always reset on location change\n if (location.pathname !== previousLocationPath.current) {\n setActiveAnchor(\"\");\n }\n previousLocationPath.current = location.pathname;\n }, [location.pathname, setActiveAnchor]);\n\n // Page transition is happening: https://reactrouter.com/start/framework/pending-ui#global-pending-navigation\n const isNavigating = Boolean(useNavigation().location);\n const showSpinner = useSpinDelay(isNavigating, {\n delay: 300,\n minDuration: 500,\n });\n const [isDrawerOpen, setDrawerOpen] = useState(false);\n\n return (\n <>\n {import.meta.env.MODE === \"standalone\" && (\n <style>{`:root { --top-nav-height: 0px; }`}</style>\n )}\n <Helmet titleTemplate={meta?.title}>\n {meta?.description && (\n <meta name=\"description\" content={meta.description} />\n )}\n {meta?.favicon && <link rel=\"icon\" href={meta.favicon} />}\n </Helmet>\n <Slotlet name=\"layout-before-head\" />\n <Header />\n <Slotlet name=\"layout-after-head\" />\n\n <div className=\"w-full max-w-screen-2xl mx-auto px-10 lg:px-12\">\n {showSpinner ? (\n <LoadingFallback />\n ) : (\n <Suspense fallback={<LoadingFallback />}>\n <Drawer\n direction=\"left\"\n open={isDrawerOpen}\n onOpenChange={(open) => setDrawerOpen(open)}\n >\n <Sidebar onRequestClose={() => setDrawerOpen(false)} />\n <div\n className={cn(\n \"lg:hidden -mx-10 px-10 py-2 sticky bg-background/80 backdrop-blur z-10 top-0 left-0 right-0 border-b\",\n \"peer-data-[navigation=false]:hidden\",\n )}\n >\n <DrawerTrigger className=\"flex items-center gap-2\">\n <PanelLeftIcon size={16} strokeWidth={1.5} />\n <span className=\"text-sm\">Menu</span>\n </DrawerTrigger>\n </div>\n <main\n className={cn(\n \"h-full dark:border-white/10 translate-x-0\",\n \"lg:overflow-visible\",\n // This works in tandem with the `SidebarWrapper` component\n \"lg:peer-data-[navigation=true]:w-[calc(100%-var(--side-nav-width))]\",\n \"lg:peer-data-[navigation=true]:translate-x-[--side-nav-width] lg:peer-data-[navigation=true]:pl-12\",\n )}\n >\n <Slotlet name=\"zudoku-before-content\" />\n {children ?? <Outlet />}\n <Slotlet name=\"zudoku-after-content\" />\n </main>\n </Drawer>\n </Suspense>\n )}\n </div>\n </>\n );\n};\n","'use client';\nimport { createContext, Component, createElement, useContext, useState, useMemo, forwardRef } from 'react';\n\nconst ErrorBoundaryContext = createContext(null);\n\nconst initialState = {\n didCatch: false,\n error: null\n};\nclass ErrorBoundary extends Component {\n constructor(props) {\n super(props);\n this.resetErrorBoundary = this.resetErrorBoundary.bind(this);\n this.state = initialState;\n }\n static getDerivedStateFromError(error) {\n return {\n didCatch: true,\n error\n };\n }\n resetErrorBoundary() {\n const {\n error\n } = this.state;\n if (error !== null) {\n var _this$props$onReset, _this$props;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n (_this$props$onReset = (_this$props = this.props).onReset) === null || _this$props$onReset === void 0 ? void 0 : _this$props$onReset.call(_this$props, {\n args,\n reason: \"imperative-api\"\n });\n this.setState(initialState);\n }\n }\n componentDidCatch(error, info) {\n var _this$props$onError, _this$props2;\n (_this$props$onError = (_this$props2 = this.props).onError) === null || _this$props$onError === void 0 ? void 0 : _this$props$onError.call(_this$props2, error, info);\n }\n componentDidUpdate(prevProps, prevState) {\n const {\n didCatch\n } = this.state;\n const {\n resetKeys\n } = this.props;\n\n // There's an edge case where if the thing that triggered the error happens to *also* be in the resetKeys array,\n // we'd end up resetting the error boundary immediately.\n // This would likely trigger a second error to be thrown.\n // So we make sure that we don't check the resetKeys on the first call of cDU after the error is set.\n\n if (didCatch && prevState.error !== null && hasArrayChanged(prevProps.resetKeys, resetKeys)) {\n var _this$props$onReset2, _this$props3;\n (_this$props$onReset2 = (_this$props3 = this.props).onReset) === null || _this$props$onReset2 === void 0 ? void 0 : _this$props$onReset2.call(_this$props3, {\n next: resetKeys,\n prev: prevProps.resetKeys,\n reason: \"keys\"\n });\n this.setState(initialState);\n }\n }\n render() {\n const {\n children,\n fallbackRender,\n FallbackComponent,\n fallback\n } = this.props;\n const {\n didCatch,\n error\n } = this.state;\n let childToRender = children;\n if (didCatch) {\n const props = {\n error,\n resetErrorBoundary: this.resetErrorBoundary\n };\n if (typeof fallbackRender === \"function\") {\n childToRender = fallbackRender(props);\n } else if (FallbackComponent) {\n childToRender = createElement(FallbackComponent, props);\n } else if (fallback !== undefined) {\n childToRender = fallback;\n } else {\n throw error;\n }\n }\n return createElement(ErrorBoundaryContext.Provider, {\n value: {\n didCatch,\n error,\n resetErrorBoundary: this.resetErrorBoundary\n }\n }, childToRender);\n }\n}\nfunction hasArrayChanged() {\n let a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return a.length !== b.length || a.some((item, index) => !Object.is(item, b[index]));\n}\n\nfunction assertErrorBoundaryContext(value) {\n if (value == null || typeof value.didCatch !== \"boolean\" || typeof value.resetErrorBoundary !== \"function\") {\n throw new Error(\"ErrorBoundaryContext not found\");\n }\n}\n\nfunction useErrorBoundary() {\n const context = useContext(ErrorBoundaryContext);\n assertErrorBoundaryContext(context);\n const [state, setState] = useState({\n error: null,\n hasError: false\n });\n const memoized = useMemo(() => ({\n resetBoundary: () => {\n context.resetErrorBoundary();\n setState({\n error: null,\n hasError: false\n });\n },\n showBoundary: error => setState({\n error,\n hasError: true\n })\n }), [context.resetErrorBoundary]);\n if (state.hasError) {\n throw state.error;\n }\n return memoized;\n}\n\nfunction withErrorBoundary(component, errorBoundaryProps) {\n const Wrapped = forwardRef((props, ref) => createElement(ErrorBoundary, errorBoundaryProps, createElement(component, {\n ...props,\n ref\n })));\n\n // Format for display in DevTools\n const name = component.displayName || component.name || \"Unknown\";\n Wrapped.displayName = \"withErrorBoundary(\".concat(name, \")\");\n return Wrapped;\n}\n\nexport { ErrorBoundary, ErrorBoundaryContext, useErrorBoundary, withErrorBoundary };\n","import { ReactNode } from \"react\";\nimport { TopNavigationItem } from \"../../config/validators/common.js\";\nimport type { SidebarConfig } from \"../../config/validators/SidebarSchema.js\";\nimport { type AuthenticationProvider } from \"../authentication/authentication.js\";\nimport type { ComponentsContextType } from \"../components/context/ComponentsContext.js\";\nimport { Slotlets } from \"../components/SlotletProvider.js\";\nimport { joinPath } from \"../util/joinPath.js\";\nimport type { MdxComponentsType } from \"../util/MdxComponents.js\";\nimport {\n isApiIdentityPlugin,\n isNavigationPlugin,\n type NavigationPlugin,\n needsInitialization,\n type ZudokuPlugin,\n} from \"./plugins.js\";\n\nexport interface ApiIdentity {\n authorizeRequest: (request: Request) => Request;\n label: string;\n id: string;\n}\n\nexport type ApiKeyCache = \"api-keys\";\n\ntype Metadata = Partial<{\n title: string;\n description: string;\n logo: string;\n favicon: string;\n generator: string;\n applicationName: string;\n referrer: string;\n keywords: string[];\n authors: string[];\n creator: string;\n publisher: string;\n}>;\n\ntype Page = Partial<{\n pageTitle?: string;\n logo?: {\n src: {\n light: string;\n dark: string;\n };\n width?: string;\n alt?: string;\n };\n banner?: {\n message: ReactNode;\n color?: \"note\" | \"tip\" | \"info\" | \"caution\" | \"danger\" | (string & {});\n dismissible?: boolean;\n };\n}>;\n\nexport type ZudokuContextOptions = {\n metadata?: Metadata;\n page?: Page;\n authentication?: AuthenticationProvider;\n topNavigation?: TopNavigationItem[];\n sidebars?: SidebarConfig;\n plugins?: ZudokuPlugin[];\n slotlets?: Slotlets;\n mdx?: {\n components?: MdxComponentsType;\n };\n overrides?: ComponentsContextType;\n};\n\nexport class ZudokuContext {\n public plugins: NonNullable<ZudokuContextOptions[\"plugins\"]>;\n public sidebars: SidebarConfig;\n public topNavigation: NonNullable<ZudokuContextOptions[\"topNavigation\"]>;\n public meta: ZudokuContextOptions[\"metadata\"];\n public page: ZudokuContextOptions[\"page\"];\n public authentication?: ZudokuContextOptions[\"authentication\"];\n private navigationPlugins: NavigationPlugin[];\n\n constructor(config: ZudokuContextOptions) {\n this.plugins = config.plugins ?? [];\n this.topNavigation = config.topNavigation ?? [];\n this.sidebars = config.sidebars ?? {};\n this.navigationPlugins = this.plugins.filter(isNavigationPlugin);\n this.authentication = config.authentication;\n this.meta = config.metadata;\n this.page = config.page;\n }\n\n initialize = async (): Promise<void> => {\n await Promise.all(\n this.plugins\n .filter(needsInitialization)\n .map((plugin) => plugin.initialize?.(this)),\n );\n };\n\n getApiIdentities = async () => {\n const keys = await Promise.all(\n this.plugins\n .filter(isApiIdentityPlugin)\n .map((plugin) => plugin.getIdentities(this)),\n );\n\n return keys.flat();\n };\n\n getPluginSidebar = async (path: string) => {\n const navigations = await Promise.all(\n this.navigationPlugins.map((plugin) =>\n plugin.getSidebar?.(joinPath(path)),\n ),\n );\n\n return navigations.flatMap((nav) => nav ?? []);\n };\n\n signRequest = async (request: Request) => {\n if (!this.authentication) {\n throw new Error(\"No authentication provider configured\");\n }\n\n const accessToken = await this.authentication.getAccessToken();\n\n request.headers.set(\"Authorization\", `Bearer ${accessToken}`);\n\n return request;\n };\n}\n","import { FallbackProps } from \"react-error-boundary\";\nimport { ErrorAlert } from \"./ErrorAlert.js\";\n\nexport function TopLevelError({ error, resetErrorBoundary }: FallbackProps) {\n // Call resetErrorBoundary() to reset the error boundary and retry the render.\n\n return <ErrorAlert error={error} />;\n}\n","const root = globalThis;\n\nif (!root.requestIdleCallback || !root.cancelIdleCallback) {\n root.requestIdleCallback = (cb: IdleRequestCallback) => setTimeout(cb, 1);\n root.cancelIdleCallback = clearTimeout;\n}\n","import {\n createContext,\n useContext,\n type ComponentProps,\n type ComponentType,\n} from \"react\";\nimport { Header } from \"../Header.js\";\n\nexport const DEFAULT_COMPONENTS = {\n Header,\n};\n\nexport type ComponentsContextType = {\n Header?: ComponentType<ComponentProps<typeof Header>>;\n};\n\nconst ComponentsContext =\n createContext<Required<ComponentsContextType>>(DEFAULT_COMPONENTS);\n\nexport const ComponentsProvider = ComponentsContext.Provider;\n\nexport const useComponents = () => {\n return useContext(ComponentsContext);\n};\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport type { PropsWithChildren } from \"react\";\nimport { ZudokuContext } from \"../../core/ZudokuContext.js\";\nimport { ZudokuReactContext } from \"./ZudokuContext.js\";\n\nexport const ZudokuProvider = ({\n children,\n context,\n}: PropsWithChildren<{ context: ZudokuContext }>) => {\n useSuspenseQuery({\n queryFn: async () => {\n await context.initialize();\n return true;\n },\n queryKey: [\"zudoku-initialize\"],\n });\n\n return (\n <ZudokuReactContext.Provider value={context}>\n {children}\n </ZudokuReactContext.Provider>\n );\n};\n","import { MDXProvider } from \"@mdx-js/react\";\nimport { Helmet } from \"@zudoku/react-helmet-async\";\nimport { ThemeProvider } from \"next-themes\";\nimport {\n Fragment,\n memo,\n type PropsWithChildren,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { Outlet, useNavigation } from \"react-router\";\nimport { hasHead, isMdxProviderPlugin } from \"../core/plugins.js\";\nimport { ZudokuContext, ZudokuContextOptions } from \"../core/ZudokuContext.js\";\nimport { TopLevelError } from \"../errors/TopLevelError.js\";\nimport { StaggeredRenderContext } from \"../plugins/openapi/StaggeredRender.js\";\nimport { MdxComponents } from \"../util/MdxComponents.js\";\nimport \"../util/requestIdleCallbackPolyfill.js\";\nimport {\n ComponentsProvider,\n DEFAULT_COMPONENTS,\n} from \"./context/ComponentsContext.js\";\nimport { ViewportAnchorProvider } from \"./context/ViewportAnchorContext.js\";\nimport { ZudokuProvider } from \"./context/ZudokuProvider.js\";\nimport { SlotletProvider } from \"./SlotletProvider.js\";\n\nconst ZudokoInner = memo(\n ({ children, ...props }: PropsWithChildren<ZudokuContextOptions>) => {\n const components = useMemo(\n () => ({ ...DEFAULT_COMPONENTS, ...props.overrides }),\n [props.overrides],\n );\n\n const mdxComponents = useMemo(() => {\n const componentsFromPlugins = (props.plugins ?? [])\n .filter(isMdxProviderPlugin)\n .flatMap((plugin) =>\n plugin.getMdxComponents ? [plugin.getMdxComponents()] : [],\n );\n\n return {\n ...componentsFromPlugins.reduce(\n (acc, curr) => ({ ...acc, ...curr }),\n {},\n ),\n ...MdxComponents,\n ...props.mdx?.components,\n };\n }, [props.mdx?.components, props.plugins]);\n const { stagger } = useContext(StaggeredRenderContext);\n const [didNavigate, setDidNavigate] = useState(false);\n const staggeredValue = useMemo(\n () => (didNavigate ? { stagger: true } : { stagger }),\n [stagger, didNavigate],\n );\n const navigation = useNavigation();\n\n useEffect(() => {\n if (didNavigate) {\n return;\n }\n setDidNavigate(true);\n }, [didNavigate, navigation.location]);\n\n const [zudokuContext] = useState(() => new ZudokuContext(props));\n\n const heads = props.plugins\n ?.filter(hasHead)\n // eslint-disable-next-line react/no-array-index-key\n .map((plugin, i) => <Fragment key={i}>{plugin.getHead?.()}</Fragment>);\n\n return (\n <>\n <Helmet>{heads}</Helmet>\n <StaggeredRenderContext.Provider value={staggeredValue}>\n <ZudokuProvider context={zudokuContext}>\n <MDXProvider components={mdxComponents}>\n <ThemeProvider attribute=\"class\" disableTransitionOnChange>\n <ComponentsProvider value={components}>\n <SlotletProvider slotlets={props.slotlets}>\n <ViewportAnchorProvider>\n {children ?? <Outlet />}\n </ViewportAnchorProvider>\n </SlotletProvider>\n </ComponentsProvider>\n </ThemeProvider>\n </MDXProvider>\n </ZudokuProvider>\n </StaggeredRenderContext.Provider>\n </>\n );\n },\n);\n\nZudokoInner.displayName = \"ZudokoInner\";\n\nconst Zudoku = (props: ZudokuContextOptions) => {\n return (\n <ErrorBoundary FallbackComponent={TopLevelError}>\n <ZudokoInner {...props} />\n </ErrorBoundary>\n );\n};\nZudoku.displayName = \"Zudoku\";\n\nexport { Zudoku };\n","import { useMDXComponents as useMDXComponentsImport } from \"@mdx-js/react\";\nimport { Helmet } from \"@zudoku/react-helmet-async\";\nimport { Link as LinkImport } from \"react-router\";\nimport { useAuthState } from \"../authentication/state.js\";\nimport { RouterError as RouterErrorImport } from \"../errors/RouterError.js\";\nimport { ServerError as ServerErrorImport } from \"../errors/ServerError.js\";\nimport { Button as ButtonImport } from \"../ui/Button.js\";\nimport { Callout as CalloutImport } from \"../ui/Callout.js\";\nimport {\n Bootstrap as BootstrapImport,\n BootstrapStatic as BootstrapStaticImport,\n} from \"./Bootstrap.js\";\nimport { ClientOnly as ClientOnlyImport } from \"./ClientOnly.js\";\nimport { Layout as LayoutImport } from \"./Layout.js\";\nimport { Zudoku as ZudokuImport } from \"./Zudoku.js\";\nimport { useZudoku as useZudokuImport } from \"./context/ZudokuContext.js\";\nexport const useMDXComponents = /*@__PURE__*/ useMDXComponentsImport;\nexport const Layout = /*@__PURE__*/ LayoutImport;\nexport const RouterError = /*@__PURE__*/ RouterErrorImport;\nexport const ServerError = /*@__PURE__*/ ServerErrorImport;\nexport const Bootstrap = /*@__PURE__*/ BootstrapImport;\nexport const BootstrapStatic = /*@__PURE__*/ BootstrapStaticImport;\n\nexport const Head = /*@__PURE__*/ Helmet;\n\nexport const useZudoku = /*@__PURE__*/ useZudokuImport;\nexport const useAuth = /*@__PURE__*/ useAuthState;\nexport const Zudoku = /*@__PURE__*/ ZudokuImport;\n\nexport const Callout = /*@__PURE__*/ CalloutImport;\nexport const ClientOnly = /*@__PURE__*/ ClientOnlyImport;\nexport const Button = /*@__PURE__*/ ButtonImport;\nexport const Link: typeof LinkImport = /*@__PURE__*/ LinkImport;\n"],"names":["ServerError","error","jsx","ErrorAlert","QueryCache","_a","Subscribable","config","__privateAdd","_queries","__privateSet","client","options","state","queryKey","queryHash","hashQueryKeyByOptions","query","Query","__privateGet","queryInMap","notifyManager","filters","defaultedFilters","matchQuery","queries","event","listener","MutationCache","_mutations","_mutationId","mutation","Mutation","__privateWrapper","scope","scopeFor","mutations","x","firstPendingMutation","m","foundMutation","matchMutation","pausedMutations","noop","infiniteQueryBehavior","pages","context","direction","_c","_b","oldPages","_d","oldPageParams","_e","result","currentPage","fetchFn","cancelled","addSignalProperty","object","queryFn","ensureQueryFn","fetchPage","data","param","previous","queryFnContext","page","maxPages","addTo","addToStart","addToEnd","pageParamFn","getPreviousPageParam","getNextPageParam","oldData","remainingPages","pageParams","lastIndex","QueryClient","_queryCache","_mutationCache","_defaultOptions","_queryDefaults","_mutationDefaults","_mountCount","_unsubscribeFocus","_unsubscribeOnline","focusManager","focused","onlineManager","online","cachedData","defaultedOptions","resolveStaleTime","updater","prevData","functionalUpdate","queryCache","refetchFilters","cancelOptions","defaultedCancelOptions","promises","fetchOptions","promise","hashKey","defaults","queryDefault","partialMatchKey","mutationKey","skipToken","defaultTransformerFn","hydrate","dehydratedState","mutationCache","deserializeData","mutationOptions","meta","_ignored","serializedState","initialPromise","HydrationBoundary","children","queryClient","useQueryClient","hydrationQueue","setHydrationQueue","React","optionsRef","newQueries","existingQueries","dehydratedQuery","existingQuery","hydrationIsNewer","queryAlreadyQueued","prev","RouterProvider2","props","RouterProvider","ReactDOM","Bootstrap","router","StrictMode","QueryClientProvider","HelmetProvider","StaggeredRenderContext","BootstrapStatic","helmetContext","StaticRouterProvider","global","factory","exports","require$$0","this","react","defaultOptions","useIsSSR","isSSR","setIsSSR","useSpinDelay","loading","initialState","setState","timeout","delay","SidebarCategory","category","onRequestClose","isCategoryOpen","useIsCategoryOpen","hasInteracted","setHasInteracted","useState","isCollapsible","isCollapsed","isDefaultOpen","open","setOpen","isActive","useMatch","useEffect","ToggleButton","e","ChevronRightIcon","cn","jsxs","Collapsible","navigationListItem","NavLink","joinPath","item","SidebarItem","cva","DATA_ANCHOR_ATTR","activeAnchor","useViewportAnchor","searchParams","useSearchParams","Fragment","SidebarBadge","AnchorLink","ExternalLinkIcon","scrollIntoViewIfNeeded","element","rect","useScrollToAnchor","location","useLocation","setActiveAnchor","hash","scrollToElement","link","observer","_","obs","useScrollToTop","previousPath","useRef","Skeleton","className","isProfileMenuPlugin","obj","isNavigationPlugin","isSearchPlugin","needsInitialization","hasHead","isMdxProviderPlugin","isApiIdentityPlugin","COLOR_MAP","Banner","useZudoku","isBannerOpen","setIsBannerOpen","mappedColor","style","CircleXIcon","Search","ctx","isOpen","setIsOpen","onClose","useCallback","onKeyDown","searchPlugin","SearchIcon","Suspense","ThemeSwitch","resolvedTheme","setTheme","useTheme","ThemeIcon","MoonStarIcon","SunIcon","ClientOnly","Button","isHiddenItem","isAuthenticated","TopNavigation","topNavigation","useAuth","TopNavItem","id","label","defaultLink","sidebars","currentSidebar","currentNav","useCurrentNavigation","isNavigating","useNavigation","first","traverseSidebar","ZudokuError","isPending","cx","MobileTopNavigation","drawerOpen","setDrawerOpen","Drawer","DrawerTrigger","MenuIcon","DrawerContent","VisuallyHidden","DrawerTitle","RecursiveMenu","DropdownMenuSub","DropdownMenuSubTrigger","DropdownMenuPortal","DropdownMenuSubContent","i","Link","DropdownMenuItem","Header","memo","auth","profile","isAuthEnabled","plugins","accountItems","p","Slotlet","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","SidebarWrapper","forwardRef","pushMainContent","ref","Sidebar","navRef","navigation","LoadingFallback","Spinner","Layout","authentication","previousLocationPath","showSpinner","isDrawerOpen","Helmet","PanelLeftIcon","Outlet","ErrorBoundaryContext","createContext","ErrorBoundary","Component","_this$props$onReset","_this$props","_len","args","_key","info","_this$props$onError","_this$props2","prevProps","prevState","didCatch","resetKeys","hasArrayChanged","_this$props$onReset2","_this$props3","fallbackRender","FallbackComponent","fallback","childToRender","createElement","a","b","index","ZudokuContext","__publicField","plugin","path","nav","request","accessToken","TopLevelError","resetErrorBoundary","root","cb","DEFAULT_COMPONENTS","ComponentsContext","ComponentsProvider","ZudokuProvider","useSuspenseQuery","ZudokuReactContext","ZudokoInner","components","useMemo","mdxComponents","acc","curr","MdxComponents","stagger","useContext","didNavigate","setDidNavigate","staggeredValue","zudokuContext","heads","MDXProvider","ThemeProvider","SlotletProvider","ViewportAnchorProvider","Zudoku","useMDXComponents","useMDXComponentsImport","LayoutImport","RouterError","RouterErrorImport","ServerErrorImport","BootstrapImport","BootstrapStaticImport","Head","useZudokuImport","useAuthState","ZudokuImport","Callout","CalloutImport","ClientOnlyImport","ButtonImport","LinkImport"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEgB,SAAAA,GAAY,EAAE,OAAAC,KAA6B;AAClD,SAAAC,gBAAAA,MAACC,MAAW,OAAAF,GAAc;AACnC;WCCIG,MAAaC,KAAA,cAAcC,GAAa;AAAA,EAC1C,YAAYC,IAAS,IAAI;AACvB,UAAO;AAIT,IAAAC,EAAA,MAAAC;AAHE,SAAK,SAASF,GACdG,EAAA,MAAKD,GAA2B,oBAAI,IAAK;AAAA,EAC7C;AAAA,EAEE,MAAME,GAAQC,GAASC,GAAO;AAC5B,UAAMC,IAAWF,EAAQ,UACnBG,IAAYH,EAAQ,aAAaI,GAAsBF,GAAUF,CAAO;AAC9E,QAAIK,IAAQ,KAAK,IAAIF,CAAS;AAC9B,WAAKE,MACHA,IAAQ,IAAIC,GAAM;AAAA,MAChB,OAAO;AAAA,MACP,UAAAJ;AAAA,MACA,WAAAC;AAAA,MACA,SAASJ,EAAO,oBAAoBC,CAAO;AAAA,MAC3C,OAAAC;AAAA,MACA,gBAAgBF,EAAO,iBAAiBG,CAAQ;AAAA,IACxD,CAAO,GACD,KAAK,IAAIG,CAAK,IAETA;AAAA,EACX;AAAA,EACE,IAAIA,GAAO;AACT,IAAKE,EAAA,MAAKV,GAAS,IAAIQ,EAAM,SAAS,MACpCE,EAAA,MAAKV,GAAS,IAAIQ,EAAM,WAAWA,CAAK,GACxC,KAAK,OAAO;AAAA,MACV,MAAM;AAAA,MACN,OAAAA;AAAA,IACR,CAAO;AAAA,EAEP;AAAA,EACE,OAAOA,GAAO;AACZ,UAAMG,IAAaD,EAAA,MAAKV,GAAS,IAAIQ,EAAM,SAAS;AACpD,IAAIG,MACFH,EAAM,QAAS,GACXG,MAAeH,KACjBE,EAAA,MAAKV,GAAS,OAAOQ,EAAM,SAAS,GAEtC,KAAK,OAAO,EAAE,MAAM,WAAW,OAAAA,EAAK,CAAE;AAAA,EAE5C;AAAA,EACE,QAAQ;AACN,IAAAI,EAAc,MAAM,MAAM;AACxB,WAAK,OAAM,EAAG,QAAQ,CAACJ,MAAU;AAC/B,aAAK,OAAOA,CAAK;AAAA,MACzB,CAAO;AAAA,IACP,CAAK;AAAA,EACL;AAAA,EACE,IAAIF,GAAW;AACb,WAAOI,EAAA,MAAKV,GAAS,IAAIM,CAAS;AAAA,EACtC;AAAA,EACE,SAAS;AACP,WAAO,CAAC,GAAGI,EAAA,MAAKV,GAAS,OAAM,CAAE;AAAA,EACrC;AAAA,EACE,KAAKa,GAAS;AACZ,UAAMC,IAAmB,EAAE,OAAO,IAAM,GAAGD,EAAS;AACpD,WAAO,KAAK,OAAM,EAAG;AAAA,MACnB,CAACL,MAAUO,GAAWD,GAAkBN,CAAK;AAAA,IAC9C;AAAA,EACL;AAAA,EACE,QAAQK,IAAU,IAAI;AACpB,UAAMG,IAAU,KAAK,OAAQ;AAC7B,WAAO,OAAO,KAAKH,CAAO,EAAE,SAAS,IAAIG,EAAQ,OAAO,CAACR,MAAUO,GAAWF,GAASL,CAAK,CAAC,IAAIQ;AAAA,EACrG;AAAA,EACE,OAAOC,GAAO;AACZ,IAAAL,EAAc,MAAM,MAAM;AACxB,WAAK,UAAU,QAAQ,CAACM,MAAa;AACnC,QAAAA,EAASD,CAAK;AAAA,MACtB,CAAO;AAAA,IACP,CAAK;AAAA,EACL;AAAA,EACE,UAAU;AACR,IAAAL,EAAc,MAAM,MAAM;AACxB,WAAK,OAAM,EAAG,QAAQ,CAACJ,MAAU;AAC/B,QAAAA,EAAM,QAAS;AAAA,MACvB,CAAO;AAAA,IACP,CAAK;AAAA,EACL;AAAA,EACE,WAAW;AACT,IAAAI,EAAc,MAAM,MAAM;AACxB,WAAK,OAAM,EAAG,QAAQ,CAACJ,MAAU;AAC/B,QAAAA,EAAM,SAAU;AAAA,MACxB,CAAO;AAAA,IACP,CAAK;AAAA,EACL;AACA,GAjFER,IAAA,eANeJ,eCAbuB,MAAgBvB,KAAA,cAAcC,GAAa;AAAA,EAC7C,YAAYC,IAAS,IAAI;AACvB,UAAO;AAKT,IAAAC,EAAA,MAAAqB;AACA,IAAArB,EAAA,MAAAsB;AALE,SAAK,SAASvB,GACdG,EAAA,MAAKmB,GAA6B,oBAAI,IAAK,IAC3CnB,EAAA,MAAKoB,GAAc,KAAK,IAAK;AAAA,EACjC;AAAA,EAGE,MAAMnB,GAAQC,GAASC,GAAO;AAC5B,UAAMkB,IAAW,IAAIC,GAAS;AAAA,MAC5B,eAAe;AAAA,MACf,YAAmB,EAALC,EAAA,MAAKH,GAAL;AAAA,MACd,SAASnB,EAAO,uBAAuBC,CAAO;AAAA,MAC9C,OAAAC;AAAA,IACN,CAAK;AACD,gBAAK,IAAIkB,CAAQ,GACVA;AAAA,EACX;AAAA,EACE,IAAIA,GAAU;AACZ,UAAMG,IAAQC,EAASJ,CAAQ,GACzBK,IAAYjB,EAAA,MAAKU,GAAW,IAAIK,CAAK,KAAK,CAAE;AAClD,IAAAE,EAAU,KAAKL,CAAQ,GACvBZ,EAAA,MAAKU,GAAW,IAAIK,GAAOE,CAAS,GACpC,KAAK,OAAO,EAAE,MAAM,SAAS,UAAAL,EAAQ,CAAE;AAAA,EAC3C;AAAA,EACE,OAAOA,GAAU;;AACf,UAAMG,IAAQC,EAASJ,CAAQ;AAC/B,QAAIZ,EAAA,MAAKU,GAAW,IAAIK,CAAK,GAAG;AAC9B,YAAME,KAAY/B,IAAAc,EAAA,MAAKU,GAAW,IAAIK,CAAK,MAAzB,gBAAA7B,EAA4B,OAAO,CAACgC,MAAMA,MAAMN;AAClE,MAAIK,MACEA,EAAU,WAAW,IACvBjB,EAAA,MAAKU,GAAW,OAAOK,CAAK,IAE5Bf,EAAA,MAAKU,GAAW,IAAIK,GAAOE,CAAS;AAAA,IAG9C;AACI,SAAK,OAAO,EAAE,MAAM,WAAW,UAAAL,EAAQ,CAAE;AAAA,EAC7C;AAAA,EACE,OAAOA,GAAU;;AACf,UAAMO,KAAuBjC,IAAAc,EAAA,MAAKU,GAAW,IAAIM,EAASJ,CAAQ,CAAC,MAAtC,gBAAA1B,EAAyC,KAAK,CAACkC,MAAMA,EAAE,MAAM,WAAW;AACrG,WAAO,CAACD,KAAwBA,MAAyBP;AAAA,EAC7D;AAAA,EACE,QAAQA,GAAU;;AAChB,UAAMS,KAAgBnC,IAAAc,EAAA,MAAKU,GAAW,IAAIM,EAASJ,CAAQ,CAAC,MAAtC,gBAAA1B,EAAyC,KAAK,CAACkC,MAAMA,MAAMR,KAAYQ,EAAE,MAAM;AACrG,YAAOC,KAAA,gBAAAA,EAAe,eAAc,QAAQ,QAAS;AAAA,EACzD;AAAA,EACE,QAAQ;AACN,IAAAnB,EAAc,MAAM,MAAM;AACxB,WAAK,OAAM,EAAG,QAAQ,CAACU,MAAa;AAClC,aAAK,OAAOA,CAAQ;AAAA,MAC5B,CAAO;AAAA,IACP,CAAK;AAAA,EACL;AAAA,EACE,SAAS;AACP,WAAO,CAAC,GAAGZ,EAAA,MAAKU,GAAW,OAAQ,CAAA,EAAE,KAAM;AAAA,EAC/C;AAAA,EACE,KAAKP,GAAS;AACZ,UAAMC,IAAmB,EAAE,OAAO,IAAM,GAAGD,EAAS;AACpD,WAAO,KAAK,OAAM,EAAG;AAAA,MACnB,CAACS,MAAaU,GAAclB,GAAkBQ,CAAQ;AAAA,IACvD;AAAA,EACL;AAAA,EACE,QAAQT,IAAU,IAAI;AACpB,WAAO,KAAK,OAAM,EAAG,OAAO,CAACS,MAAaU,GAAcnB,GAASS,CAAQ,CAAC;AAAA,EAC9E;AAAA,EACE,OAAOL,GAAO;AACZ,IAAAL,EAAc,MAAM,MAAM;AACxB,WAAK,UAAU,QAAQ,CAACM,MAAa;AACnC,QAAAA,EAASD,CAAK;AAAA,MACtB,CAAO;AAAA,IACP,CAAK;AAAA,EACL;AAAA,EACE,wBAAwB;AACtB,UAAMgB,IAAkB,KAAK,SAAS,OAAO,CAACL,MAAMA,EAAE,MAAM,QAAQ;AACpE,WAAOhB,EAAc;AAAA,MACnB,MAAM,QAAQ;AAAA,QACZqB,EAAgB,IAAI,CAACX,MAAaA,EAAS,SAAU,EAAC,MAAMY,CAAI,CAAC;AAAA,MACzE;AAAA,IACK;AAAA,EACL;AACA,GA3EEd,IAAA,eACAC,IAAA,eARkBzB;AAmFpB,SAAS8B,EAASJ,GAAU;;AAC1B,WAAO1B,IAAA0B,EAAS,QAAQ,UAAjB,gBAAA1B,EAAwB,OAAM,OAAO0B,EAAS,UAAU;AACjE;ACxFA,SAASa,GAAsBC,GAAO;AACpC,SAAO;AAAA,IACL,SAAS,CAACC,GAAS7B,MAAU;;AAC3B,YAAML,IAAUkC,EAAQ,SAClBC,KAAYC,KAAAC,KAAA5C,IAAAyC,EAAQ,iBAAR,gBAAAzC,EAAsB,SAAtB,gBAAA4C,EAA4B,cAA5B,gBAAAD,EAAuC,WACnDE,MAAWC,IAAAL,EAAQ,MAAM,SAAd,gBAAAK,EAAoB,UAAS,CAAE,GAC1CC,MAAgBC,IAAAP,EAAQ,MAAM,SAAd,gBAAAO,EAAoB,eAAc,CAAE;AAC1D,UAAIC,IAAS,EAAE,OAAO,CAAA,GAAI,YAAY,CAAA,EAAI,GACtCC,IAAc;AAClB,YAAMC,IAAU,YAAY;AAC1B,YAAIC,IAAY;AAChB,cAAMC,IAAoB,CAACC,MAAW;AACpC,iBAAO,eAAeA,GAAQ,UAAU;AAAA,YACtC,YAAY;AAAA,YACZ,KAAK,OACCb,EAAQ,OAAO,UACjBW,IAAY,KAEZX,EAAQ,OAAO,iBAAiB,SAAS,MAAM;AAC7C,cAAAW,IAAY;AAAA,YAC9B,CAAiB,GAEIX,EAAQ;AAAA,UAE7B,CAAW;AAAA,QACF,GACKc,IAAUC,GAAcf,EAAQ,SAASA,EAAQ,YAAY,GAC7DgB,IAAY,OAAOC,GAAMC,GAAOC,MAAa;AACjD,cAAIR;AACF,mBAAO,QAAQ,OAAQ;AAEzB,cAAIO,KAAS,QAAQD,EAAK,MAAM;AAC9B,mBAAO,QAAQ,QAAQA,CAAI;AAE7B,gBAAMG,IAAiB;AAAA,YACrB,UAAUpB,EAAQ;AAAA,YAClB,WAAWkB;AAAA,YACX,WAAWC,IAAW,aAAa;AAAA,YACnC,MAAMnB,EAAQ,QAAQ;AAAA,UACvB;AACD,UAAAY,EAAkBQ,CAAc;AAChC,gBAAMC,KAAO,MAAMP;AAAA,YACjBM;AAAA,UACD,GACK,EAAE,UAAAE,OAAatB,EAAQ,SACvBuB,KAAQJ,IAAWK,KAAaC;AACtC,iBAAO;AAAA,YACL,OAAOF,GAAMN,EAAK,OAAOI,IAAMC,EAAQ;AAAA,YACvC,YAAYC,GAAMN,EAAK,YAAYC,GAAOI,EAAQ;AAAA,UACnD;AAAA,QACF;AACD,YAAIrB,KAAaG,EAAS,QAAQ;AAChC,gBAAMe,IAAWlB,MAAc,YACzByB,IAAcP,IAAWQ,KAAuBC,IAChDC,IAAU;AAAA,YACd,OAAOzB;AAAA,YACP,YAAYE;AAAA,UACb,GACKY,IAAQQ,EAAY5D,GAAS+D,CAAO;AAC1C,UAAArB,IAAS,MAAMQ,EAAUa,GAASX,GAAOC,CAAQ;AAAA,QAC3D,OAAe;AACL,gBAAMW,IAAiB/B,KAASK,EAAS;AACzC,aAAG;AACD,kBAAMc,IAAQT,MAAgB,IAAIH,EAAc,CAAC,KAAKxC,EAAQ,mBAAmB8D,GAAiB9D,GAAS0C,CAAM;AACjH,gBAAIC,IAAc,KAAKS,KAAS;AAC9B;AAEF,YAAAV,IAAS,MAAMQ,EAAUR,GAAQU,CAAK,GACtCT;AAAA,UACD,SAAQA,IAAcqB;AAAA,QACjC;AACQ,eAAOtB;AAAA,MACR;AACD,MAAIR,EAAQ,QAAQ,YAClBA,EAAQ,UAAU,MAAM;;AACtB,gBAAOG,KAAA5C,IAAAyC,EAAQ,SAAQ,cAAhB,gBAAAG,EAAA;AAAA,UAAA5C;AAAA,UACLmD;AAAA,UACA;AAAA,YACE,UAAUV,EAAQ;AAAA,YAClB,MAAMA,EAAQ,QAAQ;AAAA,YACtB,QAAQA,EAAQ;AAAA,UACjB;AAAA,UACD7B;AAAA;AAAA,MAEH,IAED6B,EAAQ,UAAUU;AAAA,IAE1B;AAAA,EACG;AACH;AACA,SAASkB,GAAiB9D,GAAS,EAAE,OAAAiC,GAAO,YAAAgC,EAAU,GAAI;AACxD,QAAMC,IAAYjC,EAAM,SAAS;AACjC,SAAOA,EAAM,SAAS,IAAIjC,EAAQ;AAAA,IAChCiC,EAAMiC,CAAS;AAAA,IACfjC;AAAA,IACAgC,EAAWC,CAAS;AAAA,IACpBD;AAAA,EACD,IAAG;AACN;AACA,SAASJ,GAAqB7D,GAAS,EAAE,OAAAiC,GAAO,YAAAgC,EAAU,GAAI;;AAC5D,SAAOhC,EAAM,SAAS,KAAIxC,IAAAO,EAAQ,yBAAR,gBAAAP,EAAA,KAAAO,GAA+BiC,EAAM,CAAC,GAAGA,GAAOgC,EAAW,CAAC,GAAGA,KAAc;AACzG;gCCxFIE,MAAc1E,KAAA,MAAM;AAAA,EAStB,YAAYE,IAAS,IAAI;AARzB,IAAAC,EAAA,MAAAwE;AACA,IAAAxE,EAAA,MAAAyE;AACA,IAAAzE,EAAA,MAAA0E;AACA,IAAA1E,EAAA,MAAA2E;AACA,IAAA3E,EAAA,MAAA4E;AACA,IAAA5E,EAAA,MAAA6E;AACA,IAAA7E,EAAA,MAAA8E;AACA,IAAA9E,EAAA,MAAA+E;AAEE,IAAA7E,EAAA,MAAKsE,GAAczE,EAAO,cAAc,IAAIH,GAAY,IACxDM,EAAA,MAAKuE,GAAiB1E,EAAO,iBAAiB,IAAIqB,GAAe,IACjElB,EAAA,MAAKwE,GAAkB3E,EAAO,kBAAkB,CAAE,IAClDG,EAAA,MAAKyE,GAAiC,oBAAI,IAAK,IAC/CzE,EAAA,MAAK0E,GAAoC,oBAAI,IAAK,IAClD1E,EAAA,MAAK2E,GAAc;AAAA,EACvB;AAAA,EACE,QAAQ;AAEN,IADApD,EAAA,MAAKoD,GAAL,KACIlE,EAAA,MAAKkE,OAAgB,MAEzB3E,EAAA,MAAK4E,GAAoBE,GAAa,UAAU,OAAOC,MAAY;AACjE,MAAIA,MACF,MAAM,KAAK,sBAAuB,GAClCtE,EAAA,MAAK6D,GAAY,QAAS;AAAA,IAElC,CAAK,IACDtE,EAAA,MAAK6E,GAAqBG,GAAc,UAAU,OAAOC,MAAW;AAClE,MAAIA,MACF,MAAM,KAAK,sBAAuB,GAClCxE,EAAA,MAAK6D,GAAY,SAAU;AAAA,IAEnC,CAAK;AAAA,EACL;AAAA,EACE,UAAU;;AAER,IADA/C,EAAA,MAAKoD,GAAL,KACIlE,EAAA,MAAKkE,OAAgB,OAEzBhF,IAAAc,EAAA,MAAKmE,OAAL,QAAAjF,EAAA,YACAK,EAAA,MAAK4E,GAAoB,UACzBrC,IAAA9B,EAAA,MAAKoE,OAAL,QAAAtC,EAAA,YACAvC,EAAA,MAAK6E,GAAqB;AAAA,EAC9B;AAAA,EACE,WAAWjE,GAAS;AAClB,WAAOH,EAAA,MAAK6D,GAAY,QAAQ,EAAE,GAAG1D,GAAS,aAAa,WAAY,CAAA,EAAE;AAAA,EAC7E;AAAA,EACE,WAAWA,GAAS;AAClB,WAAOH,EAAA,MAAK8D,GAAe,QAAQ,EAAE,GAAG3D,GAAS,QAAQ,UAAW,CAAA,EAAE;AAAA,EAC1E;AAAA,EACE,aAAaR,GAAU;;AACrB,UAAMF,IAAU,KAAK,oBAAoB,EAAE,UAAAE,EAAQ,CAAE;AACrD,YAAOT,IAAAc,EAAA,MAAK6D,GAAY,IAAIpE,EAAQ,SAAS,MAAtC,gBAAAP,EAAyC,MAAM;AAAA,EAC1D;AAAA,EACE,gBAAgBO,GAAS;AACvB,UAAMgF,IAAa,KAAK,aAAahF,EAAQ,QAAQ;AACrD,QAAIgF,MAAe;AACjB,aAAO,KAAK,WAAWhF,CAAO;AACzB;AACL,YAAMiF,IAAmB,KAAK,oBAAoBjF,CAAO,GACnDK,IAAQE,EAAA,MAAK6D,GAAY,MAAM,MAAMa,CAAgB;AAC3D,aAAIjF,EAAQ,qBAAqBK,EAAM,cAAc6E,GAAiBD,EAAiB,WAAW5E,CAAK,CAAC,KACjG,KAAK,cAAc4E,CAAgB,GAEnC,QAAQ,QAAQD,CAAU;AAAA,IACvC;AAAA,EACA;AAAA,EACE,eAAetE,GAAS;AACtB,WAAOH,EAAA,MAAK6D,GAAY,QAAQ1D,CAAO,EAAE,IAAI,CAAC,EAAE,UAAAR,GAAU,OAAAD,QAAY;AACpE,YAAMkD,IAAOlD,EAAM;AACnB,aAAO,CAACC,GAAUiD,CAAI;AAAA,IAC5B,CAAK;AAAA,EACL;AAAA,EACE,aAAajD,GAAUiF,GAASnF,GAAS;AACvC,UAAMiF,IAAmB,KAAK,oBAAoB,EAAE,UAAA/E,EAAQ,CAAE,GACxDG,IAAQE,EAAA,MAAK6D,GAAY;AAAA,MAC7Ba,EAAiB;AAAA,IAClB,GACKG,IAAW/E,KAAA,gBAAAA,EAAO,MAAM,MACxB8C,IAAOkC,GAAiBF,GAASC,CAAQ;AAC/C,QAAIjC,MAAS;AAGb,aAAO5C,EAAA,MAAK6D,GAAY,MAAM,MAAMa,CAAgB,EAAE,QAAQ9B,GAAM,EAAE,GAAGnD,GAAS,QAAQ,GAAI,CAAE;AAAA,EACpG;AAAA,EACE,eAAeU,GAASyE,GAASnF,GAAS;AACxC,WAAOS,EAAc;AAAA,MACnB,MAAMF,EAAA,MAAK6D,GAAY,QAAQ1D,CAAO,EAAE,IAAI,CAAC,EAAE,UAAAR,QAAe;AAAA,QAC5DA;AAAA,QACA,KAAK,aAAaA,GAAUiF,GAASnF,CAAO;AAAA,MAC7C,CAAA;AAAA,IACF;AAAA,EACL;AAAA,EACE,cAAcE,GAAU;;AACtB,UAAMF,IAAU,KAAK,oBAAoB,EAAE,UAAAE,EAAQ,CAAE;AACrD,YAAOT,IAAAc,EAAA,MAAK6D,GAAY;AAAA,MACtBpE,EAAQ;AAAA,IACd,MAFW,gBAAAP,EAEJ;AAAA,EACP;AAAA,EACE,cAAciB,GAAS;AACrB,UAAM4E,IAAa/E,EAAA,MAAK6D;AACxB,IAAA3D,EAAc,MAAM,MAAM;AACxB,MAAA6E,EAAW,QAAQ5E,CAAO,EAAE,QAAQ,CAACL,MAAU;AAC7C,QAAAiF,EAAW,OAAOjF,CAAK;AAAA,MAC/B,CAAO;AAAA,IACP,CAAK;AAAA,EACL;AAAA,EACE,aAAaK,GAASV,GAAS;AAC7B,UAAMsF,IAAa/E,EAAA,MAAK6D,IAClBmB,IAAiB;AAAA,MACrB,MAAM;AAAA,MACN,GAAG7E;AAAA,IACJ;AACD,WAAOD,EAAc,MAAM,OACzB6E,EAAW,QAAQ5E,CAAO,EAAE,QAAQ,CAACL,MAAU;AAC7C,MAAAA,EAAM,MAAO;AAAA,IACrB,CAAO,GACM,KAAK,eAAekF,GAAgBvF,CAAO,EACnD;AAAA,EACL;AAAA,EACE,cAAcU,GAAS8E,IAAgB,IAAI;AACzC,UAAMC,IAAyB,EAAE,QAAQ,IAAM,GAAGD,EAAe,GAC3DE,IAAWjF,EAAc;AAAA,MAC7B,MAAMF,EAAA,MAAK6D,GAAY,QAAQ1D,CAAO,EAAE,IAAI,CAACL,MAAUA,EAAM,OAAOoF,CAAsB,CAAC;AAAA,IAC5F;AACD,WAAO,QAAQ,IAAIC,CAAQ,EAAE,KAAK3D,CAAI,EAAE,MAAMA,CAAI;AAAA,EACtD;AAAA,EACE,kBAAkBrB,GAASV,IAAU,IAAI;AACvC,WAAOS,EAAc,MAAM,MAAM;AAI/B,UAHAF,EAAA,MAAK6D,GAAY,QAAQ1D,CAAO,EAAE,QAAQ,CAACL,MAAU;AACnD,QAAAA,EAAM,WAAY;AAAA,MAC1B,CAAO,IACGK,KAAA,gBAAAA,EAAS,iBAAgB;AAC3B,eAAO,QAAQ,QAAS;AAE1B,YAAM6E,IAAiB;AAAA,QACrB,GAAG7E;AAAA,QACH,OAAMA,KAAA,gBAAAA,EAAS,iBAAeA,KAAA,gBAAAA,EAAS,SAAQ;AAAA,MAChD;AACD,aAAO,KAAK,eAAe6E,GAAgBvF,CAAO;AAAA,IACxD,CAAK;AAAA,EACL;AAAA,EACE,eAAeU,GAASV,IAAU,IAAI;AACpC,UAAM2F,IAAe;AAAA,MACnB,GAAG3F;AAAA,MACH,eAAeA,EAAQ,iBAAiB;AAAA,IACzC,GACK0F,IAAWjF,EAAc;AAAA,MAC7B,MAAMF,EAAA,MAAK6D,GAAY,QAAQ1D,CAAO,EAAE,OAAO,CAACL,MAAU,CAACA,EAAM,WAAU,CAAE,EAAE,IAAI,CAACA,MAAU;AAC5F,YAAIuF,IAAUvF,EAAM,MAAM,QAAQsF,CAAY;AAC9C,eAAKA,EAAa,iBAChBC,IAAUA,EAAQ,MAAM7D,CAAI,IAEvB1B,EAAM,MAAM,gBAAgB,WAAW,QAAQ,QAAO,IAAKuF;AAAA,MACnE,CAAA;AAAA,IACF;AACD,WAAO,QAAQ,IAAIF,CAAQ,EAAE,KAAK3D,CAAI;AAAA,EAC1C;AAAA,EACE,WAAW/B,GAAS;AAClB,UAAMiF,IAAmB,KAAK,oBAAoBjF,CAAO;AACzD,IAAIiF,EAAiB,UAAU,WAC7BA,EAAiB,QAAQ;AAE3B,UAAM5E,IAAQE,EAAA,MAAK6D,GAAY,MAAM,MAAMa,CAAgB;AAC3D,WAAO5E,EAAM;AAAA,MACX6E,GAAiBD,EAAiB,WAAW5E,CAAK;AAAA,IACxD,IAAQA,EAAM,MAAM4E,CAAgB,IAAI,QAAQ,QAAQ5E,EAAM,MAAM,IAAI;AAAA,EACxE;AAAA,EACE,cAAcL,GAAS;AACrB,WAAO,KAAK,WAAWA,CAAO,EAAE,KAAK+B,CAAI,EAAE,MAAMA,CAAI;AAAA,EACzD;AAAA,EACE,mBAAmB/B,GAAS;AAC1B,WAAAA,EAAQ,WAAWgC,GAAsBhC,EAAQ,KAAK,GAC/C,KAAK,WAAWA,CAAO;AAAA,EAClC;AAAA,EACE,sBAAsBA,GAAS;AAC7B,WAAO,KAAK,mBAAmBA,CAAO,EAAE,KAAK+B,CAAI,EAAE,MAAMA,CAAI;AAAA,EACjE;AAAA,EACE,wBAAwB/B,GAAS;AAC/B,WAAAA,EAAQ,WAAWgC,GAAsBhC,EAAQ,KAAK,GAC/C,KAAK,gBAAgBA,CAAO;AAAA,EACvC;AAAA,EACE,wBAAwB;AACtB,WAAI8E,GAAc,aACTvE,EAAA,MAAK8D,GAAe,sBAAuB,IAE7C,QAAQ,QAAS;AAAA,EAC5B;AAAA,EACE,gBAAgB;AACd,WAAO9D,EAAA,MAAK6D;AAAA,EAChB;AAAA,EACE,mBAAmB;AACjB,WAAO7D,EAAA,MAAK8D;AAAA,EAChB;AAAA,EACE,oBAAoB;AAClB,WAAO9D,EAAA,MAAK+D;AAAA,EAChB;AAAA,EACE,kBAAkBtE,GAAS;AACzB,IAAAF,EAAA,MAAKwE,GAAkBtE;AAAA,EAC3B;AAAA,EACE,iBAAiBE,GAAUF,GAAS;AAClC,IAAAO,EAAA,MAAKgE,GAAe,IAAIsB,GAAQ3F,CAAQ,GAAG;AAAA,MACzC,UAAAA;AAAA,MACA,gBAAgBF;AAAA,IACtB,CAAK;AAAA,EACL;AAAA,EACE,iBAAiBE,GAAU;AACzB,UAAM4F,IAAW,CAAC,GAAGvF,EAAA,MAAKgE,GAAe,OAAM,CAAE,GAC3C7B,IAAS,CAAE;AACjB,WAAAoD,EAAS,QAAQ,CAACC,MAAiB;AACjC,MAAIC,GAAgB9F,GAAU6F,EAAa,QAAQ,KACjD,OAAO,OAAOrD,GAAQqD,EAAa,cAAc;AAAA,IAEzD,CAAK,GACMrD;AAAA,EACX;AAAA,EACE,oBAAoBuD,GAAajG,GAAS;AACxC,IAAAO,EAAA,MAAKiE,GAAkB,IAAIqB,GAAQI,CAAW,GAAG;AAAA,MAC/C,aAAAA;AAAA,MACA,gBAAgBjG;AAAA,IACtB,CAAK;AAAA,EACL;AAAA,EACE,oBAAoBiG,GAAa;AAC/B,UAAMH,IAAW,CAAC,GAAGvF,EAAA,MAAKiE,GAAkB,OAAM,CAAE;AACpD,QAAI9B,IAAS,CAAE;AACf,WAAAoD,EAAS,QAAQ,CAACC,MAAiB;AACjC,MAAIC,GAAgBC,GAAaF,EAAa,WAAW,MACvDrD,IAAS,EAAE,GAAGA,GAAQ,GAAGqD,EAAa,eAAgB;AAAA,IAE9D,CAAK,GACMrD;AAAA,EACX;AAAA,EACE,oBAAoB1C,GAAS;AAC3B,QAAIA,EAAQ;AACV,aAAOA;AAET,UAAMiF,IAAmB;AAAA,MACvB,GAAG1E,EAAA,MAAK+D,GAAgB;AAAA,MACxB,GAAG,KAAK,iBAAiBtE,EAAQ,QAAQ;AAAA,MACzC,GAAGA;AAAA,MACH,YAAY;AAAA,IACb;AACD,WAAKiF,EAAiB,cACpBA,EAAiB,YAAY7E;AAAA,MAC3B6E,EAAiB;AAAA,MACjBA;AAAA,IACD,IAECA,EAAiB,uBAAuB,WAC1CA,EAAiB,qBAAqBA,EAAiB,gBAAgB,WAErEA,EAAiB,iBAAiB,WACpCA,EAAiB,eAAe,CAAC,CAACA,EAAiB,WAEjD,CAACA,EAAiB,eAAeA,EAAiB,cACpDA,EAAiB,cAAc,iBAE7BA,EAAiB,YAAYiB,OAC/BjB,EAAiB,UAAU,KAEtBA;AAAA,EACX;AAAA,EACE,uBAAuBjF,GAAS;AAC9B,WAAIA,KAAA,QAAAA,EAAS,aACJA,IAEF;AAAA,MACL,GAAGO,EAAA,MAAK+D,GAAgB;AAAA,MACxB,IAAGtE,KAAA,gBAAAA,EAAS,gBAAe,KAAK,oBAAoBA,EAAQ,WAAW;AAAA,MACvE,GAAGA;AAAA,MACH,YAAY;AAAA,IACb;AAAA,EACL;AAAA,EACE,QAAQ;AACN,IAAAO,EAAA,MAAK6D,GAAY,MAAO,GACxB7D,EAAA,MAAK8D,GAAe,MAAO;AAAA,EAC/B;AACA,GAnRED,IAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA,eARgBlF;ACflB,SAAS0G,GAAqBhD,GAAM;AAClC,SAAOA;AACT;AAkDA,SAASiD,GAAQrG,GAAQsG,GAAiBrG,GAAS;;AACjD,MAAI,OAAOqG,KAAoB,YAAYA,MAAoB;AAC7D;AAEF,QAAMC,IAAgBvG,EAAO,iBAAkB,GACzCuF,IAAavF,EAAO,cAAe,GACnCwG,MAAkB9G,IAAAO,KAAA,gBAAAA,EAAS,mBAAT,gBAAAP,EAAyB,sBAAmB4C,IAAAtC,EAAO,kBAAmB,EAAC,YAA3B,gBAAAsC,EAAoC,oBAAmB8D,IACrH3E,IAAY6E,EAAgB,aAAa,CAAE,GAC3CxF,IAAUwF,EAAgB,WAAW,CAAE;AAC7C,EAAA7E,EAAU,QAAQ,CAAC,EAAE,OAAAvB,GAAO,GAAGuG,EAAe,MAAO;;AACnD,IAAAF,EAAc;AAAA,MACZvG;AAAA,MACA;AAAA,QACE,IAAGN,IAAAM,EAAO,oBAAoB,YAA3B,gBAAAN,EAAoC;AAAA,QACvC,IAAG4C,IAAArC,KAAA,gBAAAA,EAAS,mBAAT,gBAAAqC,EAAyB;AAAA,QAC5B,GAAGmE;AAAA,MACJ;AAAA,MACDvG;AAAA,IACD;AAAA,EACL,CAAG,GACDY,EAAQ,QAAQ,CAAC,EAAE,UAAAX,GAAU,OAAAD,GAAO,WAAAE,GAAW,MAAAsG,GAAM,SAAAb,QAAc;;AACjE,QAAIvF,IAAQiF,EAAW,IAAInF,CAAS;AACpC,UAAMgD,IAAOlD,EAAM,SAAS,SAASA,EAAM,OAAOsG,EAAgBtG,EAAM,IAAI;AAC5E,QAAII;AACF,UAAIA,EAAM,MAAM,gBAAgBJ,EAAM,eAAe;AACnD,cAAM,EAAE,aAAayG,GAAU,GAAGC,EAAiB,IAAG1G;AACtD,QAAAI,EAAM,SAAS;AAAA,UACb,GAAGsG;AAAA,UACH,MAAAxD;AAAA,QACV,CAAS;AAAA,MACT;AAAA;AAEM,MAAA9C,IAAQiF,EAAW;AAAA,QACjBvF;AAAA,QACA;AAAA,UACE,IAAGN,IAAAM,EAAO,oBAAoB,YAA3B,gBAAAN,EAAoC;AAAA,UACvC,IAAG4C,IAAArC,KAAA,gBAAAA,EAAS,mBAAT,gBAAAqC,EAAyB;AAAA,UAC5B,UAAAnC;AAAA,UACA,WAAAC;AAAA,UACA,MAAAsG;AAAA,QACD;AAAA;AAAA;AAAA,QAGD;AAAA,UACE,GAAGxG;AAAA,UACH,MAAAkD;AAAA,UACA,aAAa;AAAA,QACvB;AAAA,MACO;AAEH,QAAIyC,GAAS;AACX,YAAMgB,IAAiB,QAAQ,QAAQhB,CAAO,EAAE,KAAKW,CAAe;AACpE,MAAKlG,EAAM,MAAM,QAAQ,EAAE,gBAAAuG,EAAc,CAAE;AAAA,IACjD;AAAA,EACA,CAAG;AACH;ACtGA,IAAIC,KAAoB,CAAC;AAAA,EACvB,UAAAC;AAAA,EACA,SAAA9G,IAAU,CAAE;AAAA,EACZ,OAAAC;AAAA,EACA,aAAA8G;AACF,MAAM;AACJ,QAAMhH,IAASiH,GAAeD,CAAW,GACnC,CAACE,GAAgBC,CAAiB,IAAIC,EAAM,SAAU,GACtDC,IAAaD,EAAM,OAAOnH,CAAO;AACvC,SAAAoH,EAAW,UAAUpH,GACrBmH,EAAM,QAAQ,MAAM;AAClB,QAAIlH,GAAO;AACT,UAAI,OAAOA,KAAU;AACnB;AAEF,YAAMqF,IAAavF,EAAO,cAAe,GACnCc,IAAUZ,EAAM,WAAW,CAAE,GAC7BoH,IAAa,CAAE,GACfC,IAAkB,CAAE;AAC1B,iBAAWC,KAAmB1G,GAAS;AACrC,cAAM2G,IAAgBlC,EAAW,IAAIiC,EAAgB,SAAS;AAC9D,YAAI,CAACC;AACH,UAAAH,EAAW,KAAKE,CAAe;AAAA,aAC1B;AACL,gBAAME,IAAmBF,EAAgB,MAAM,gBAAgBC,EAAc,MAAM,eAC7EE,IAAqBT,KAAA,gBAAAA,EAAgB;AAAA,YACzC,CAAC5G,MAAUA,EAAM,cAAckH,EAAgB;AAAA;AAEjD,UAAIE,MAAqB,CAACC,KAAsBH,EAAgB,MAAM,gBAAgBG,EAAmB,MAAM,kBAC7GJ,EAAgB,KAAKC,CAAe;AAAA,QAEhD;AAAA,MACA;AACM,MAAIF,EAAW,SAAS,KACtBjB,GAAQrG,GAAQ,EAAE,SAASsH,EAAY,GAAED,EAAW,OAAO,GAEzDE,EAAgB,SAAS,KAC3BJ;AAAA,QACE,CAACS,MAASA,IAAO,CAAC,GAAGA,GAAM,GAAGL,CAAe,IAAIA;AAAA,MAClD;AAAA,IAET;AAAA,EACG,GAAE,CAACvH,GAAQkH,GAAgBhH,CAAK,CAAC,GAClCkH,EAAM,UAAU,MAAM;AACpB,IAAIF,MACFb,GAAQrG,GAAQ,EAAE,SAASkH,EAAgB,GAAEG,EAAW,OAAO,GAC/DF,EAAkB,MAAM;AAAA,EAE9B,GAAK,CAACnH,GAAQkH,CAAc,CAAC,GACpBH;AACT;ACxDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCA,SAASc,GAAgBC,GAAO;AAC9B,SAAuB,gBAAAV,EAAM,cAAcW,IAAgB,EAAE,WAAWC,GAAS,WAAW,GAAGF,GAAO;AACxG;AClBA,MAAMd,KAAc,IAAI5C,GAAY;AAAA,EAClC,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,WAAW,MAAO,KAAK;AAAA,IAAA;AAAA,EACzB;AAEJ,CAAC,GAEK6D,KAAY,CAAC;AAAA,EACjB,QAAAC;AAAA,EACA,SAAA7B,IAAU;AACZ,MAIG9G,gBAAAA,EAAA,IAAA4I,IAAA,EACC,UAAC5I,gBAAAA,EAAA,IAAA6I,IAAA,EAAoB,QAAQpB,IAC3B,UAAAzH,gBAAAA,EAAAA,IAACuH,IAAkB,EAAA,OAAOT,IAAW,OAAe,OAAO,QACzD,gCAACgC,IACC,EAAA,UAAA9I,gBAAAA,EAAA,IAAC+I,GAAuB,UAAvB,EAAgC,OAAO,EAAE,SAAS,CAACjC,EAAQ,GAC1D,UAAC9G,gBAAAA,MAAAwI,IAAA,EAAe,QAAAG,EAAgB,CAAA,EAClC,CAAA,GACF,EAAA,CACF,EACF,CAAA,GACF,GAGIK,KAAkB,CAAC;AAAA,EACvB,QAAAL;AAAA,EACA,SAAA/F;AAAA,EACA,aAAA6E;AAAAA,EACA,eAAAwB;AACF,4BAMGL,IACC,EAAA,UAAA5I,gBAAAA,EAAA,IAAC6I,IAAoB,EAAA,QAAQpB,GAC3B,UAACzH,gBAAAA,MAAA8I,IAAA,EAAe,SAASG,GACvB,gCAACC,IAAqB,EAAA,QAAAP,GAAgB,SAAA/F,EAAkB,CAAA,GAC1D,GACF,EACF,CAAA;;;;AC7DF,KAAC,SAAUuG,GAAQC,GAAS;AACqC,MAAAA,EAAQC,GAASC,EAAgB;AAAA,IAGlG,GAAEC,IAAO,SAAUF,GAASG,GAAO;AACjC,YAAMC,IAAiB;AAAA,QACrB,OAAO;AAAA,QACP,aAAa;AAAA,QACb,KAAK;AAAA,MACN;AAED,eAASC,IAAW;AAClB,cAAM,CAACC,GAAOC,CAAQ,IAAIJ,EAAM,SAAS,EAAI;AAC7C,eAAAA,EAAM,UAAU,MAAM;AACpB,UAAAI,EAAS,EAAK;AAAA,QACf,GAAE,EAAE,GACED;AAAA,MACX;AAEE,eAASE,EAAaC,GAASpJ,GAAS;AACtC,QAAAA,IAAU,OAAO,OAAO,CAAA,GAAI+I,GAAgB/I,CAAO;AACnD,cAAMiJ,IAAQD,OAAchJ,EAAQ,KAC9BqJ,IAAeJ,KAASG,IAAU,YAAY,QAC9C,CAACnJ,GAAOqJ,CAAQ,IAAIR,EAAM,SAASO,CAAY,GAC/CE,IAAUT,EAAM,OAAO,IAAI;AACjC,eAAAA,EAAM,UAAU,MAAM;AACpB,cAAIM,MAAYnJ,MAAU,UAAUgJ,IAAQ;AAC1C,yBAAaM,EAAQ,OAAO;AAC5B,kBAAMC,IAAQP,IAAQ,IAAIjJ,EAAQ;AAClC,YAAAuJ,EAAQ,UAAU,WAAW,MAAM;AACjC,kBAAI,CAACH;AACH,uBAAOE,EAAS,MAAM;AAGxB,cAAAC,EAAQ,UAAU,WAAW,MAAM;AACjC,gBAAAD,EAAS,QAAQ;AAAA,cAC7B,GAAatJ,EAAQ,WAAW,GACtBsJ,EAAS,SAAS;AAAA,YACnB,GAAEE,CAAK,GAEHP,KACHK,EAAS,OAAO;AAAA,UAE1B;AAEM,UAAI,CAACF,KAAWnJ,MAAU,cACxB,aAAasJ,EAAQ,OAAO,GAC5BD,EAAS,MAAM;AAAA,QAEvB,GAAO,CAACF,GAASnJ,GAAOD,EAAQ,OAAOA,EAAQ,aAAaiJ,CAAK,CAAC,GAC9DH,EAAM,UAAU,MACP,MAAM,aAAaS,EAAQ,OAAO,GACxC,EAAE,GACEtJ,MAAU,aAAaA,MAAU;AAAA,MAC5C;AAEE,MAAA0I,EAAQ,iBAAiBI,GACzBJ,EAAQ,eAAeQ;AAAA,IAEzB,CAAG;AAAA;;;ACjDI,MAAMM,KAAkB,CAAC;AAAA,EAC9B,UAAAC;AAAA,EACA,gBAAAC;AACF,MAGM;;AACE,QAAAC,IAAiBC,GAAkBH,CAAQ,GAC3C,CAACI,GAAeC,CAAgB,IAAIC,EAAS,EAAK,GAElDC,IAAgBP,EAAS,eAAe,IACxCQ,IAAcR,EAAS,aAAa,IACpCS,IAAgB,GACpB,CAACF,KAAiB,CAACC,KAAeN,IAE9B,CAACQ,GAAMC,CAAO,IAAIL,EAASG,CAAa,GACxCG,IAAWC,KAAS9K,IAAAiK,EAAS,SAAT,gBAAAjK,EAAe,OAAM,EAAE;AAEjD,EAAA+K,EAAU,MAAM;AAGd,IAAIZ,KACFS,EAAQ,EAAI;AAAA,EACd,GACC,CAACT,CAAc,CAAC;AAEnB,QAAMa,IAAeR,KACnB3K,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS,CAACoL,MAAM;AACd,QAAAA,EAAE,eAAe,GACTL,EAAA,CAAC1C,MAAS,CAACA,CAAI,GACvBoC,EAAiB,EAAI;AAAA,MACvB;AAAA,MAEA,UAAAzK,gBAAAA,EAAA;AAAA,QAACqL;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,WAAWC;AAAA,YACTd,KAAiB;AAAA,YACjB;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAIA,SAAAe,gBAAAA,EAAA;AAAA,IAACC,GAAY;AAAA,IAAZ;AAAA,MACC,WAAU;AAAA,MACV,aAAaX;AAAA,MACb,MAAAC;AAAA,MACA,cAAc,MAAMC,EAAQ,EAAI;AAAA,MAEhC,UAAA;AAAA,QAAC/K,gBAAAA,EAAAA,IAAAwL,GAAY,SAAZ,EAAoB,WAAU,SAAQ,SAAO,IAAC,UAAU,CAACb,GACxD,UAAAY,gBAAAA,EAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS,MAAMd,EAAiB,EAAI;AAAA,YACpC,WAAWgB,EAAmB;AAAA,cAC5B,UAAU;AAAA,cACV,WAAW;AAAA,gBACT;AAAA,gBACAd,IACI,mBACA;AAAA,cAAA;AAAA,YACN,CACD;AAAA,YAEA,UAAA;AAAA,cAAAP,EAAS,QACRpK,gBAAAA,EAAA;AAAA,gBAACoK,EAAS;AAAA,gBAAT;AAAA,kBACC,MAAM;AAAA,kBACN,WAAWkB,EAAG,qBAAqBN,KAAY,cAAc;AAAA,gBAAA;AAAA,cAC/D;AAAA,gBAEDjI,IAAAqH,EAAS,SAAT,gBAAArH,EAAe,UAAS,QACvB/C,gBAAAA,EAAA;AAAA,gBAAC0L;AAAA,gBAAA;AAAA,kBACC,IAAIC,EAASvB,EAAS,KAAK,EAAE;AAAA,kBAC7B,WAAU;AAAA,kBACV,SAAS,MAAM;AAET,oBAAAY,KAAY,CAACF,KACfC,EAAQ,EAAI;AAAA,kBAEhB;AAAA,kBAEA,UAAAQ,gBAAAA,EAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAWD;AAAA,wBACT;AAAA,wBACAN,IAAW,iBAAiB;AAAA,sBAC9B;AAAA,sBAEA,UAAA;AAAA,wBAAAhL,gBAAAA,EAAA,IAAC,OAAI,EAAA,WAAU,YAAY,UAAAoK,EAAS,OAAM;AAAA,wBACzCe;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACH;AAAA,cAGF,IAAAI,gBAAAA,EAAA,KAAC,OAAI,EAAA,WAAU,4CACb,UAAA;AAAA,gBAAAvL,gBAAAA,EAAA,IAAC,OAAI,EAAA,WAAU,8BAA8B,UAAAoK,EAAS,OAAM;AAAA,gBAC3De;AAAA,cAAA,EACH,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,GAGN;AAAA,QACAnL,gBAAAA,EAAA;AAAA,UAACwL,GAAY;AAAA,UAAZ;AAAA,YACC,WAAWF;AAAA;AAAA,cAETd,KAAiB;AAAA,cACjB;AAAA,YACF;AAAA,YAEA,UAAAxK,gBAAAA,EAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WACE;AAAA,gBAGD,UAASoK,EAAA,MAAM,IAAI,CAACwB,MACnB5L,gBAAAA,EAAA;AAAA,kBAAC6L;AAAA,kBAAA;AAAA,oBAMC,gBAAAxB;AAAA,oBACA,MAAAuB;AAAA,kBAAA;AAAA,mBALG,QAAQA,IAAOA,EAAK,KAAK,OACzB,UAAUA,IAAOA,EAAK,OAAO,MAC9BA,EAAK;AAAA,gBAKV,CAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACH;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EACF;AAEJ,GC9HaH,IAAqBK;AAAA,EAChC;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,UAAU;AAAA,QACR,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IAEX;AAAA,IACA,iBAAiB;AAAA,MACf,UAAU;AAAA,IAAA;AAAA,EACZ;AAEJ,GAEaC,KAAmB,eAEnBF,KAAc,CAAC;AAAA,EAC1B,MAAAD;AAAA,EACA,gBAAAvB;AACF,MAGM;;AACE,QAAA,EAAE,cAAA2B,EAAa,IAAIC,GAAkB,GACrC,CAACC,CAAY,IAAIC,GAAgB;AAEvC,UAAQP,EAAK,MAAM;AAAA,IACjB,KAAK;AACH,aACG5L,gBAAAA,EAAAA,IAAAmK,IAAA,EAAgB,UAAUyB,GAAM,gBAAAvB,EAAgC,CAAA;AAAA,IAErE,KAAK;AAED,aAAAkB,gBAAAA,EAAA;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,WAAW,CAAC,EAAE,UAAAV,EAAA,MAAeS,EAAmB,EAAE,UAAAT,GAAU;AAAA,UAC5D,IAAIW,EAASC,EAAK,EAAE;AAAA,UACpB,SAASvB;AAAA,UAER,UAAA;AAAA,YAAKuB,EAAA,8BAASA,EAAK,MAAL,EAAU,MAAM,IAAI,WAAU,oBAAmB;AAAA,YAC/DA,EAAK,QAEFL,gBAAAA,EAAAA,KAAAa,EAAA,UAAA,EAAA,UAAA;AAAA,cAAApM,gBAAAA,EAAAA,IAAC,UAAK,WAAU,mBAAkB,OAAO4L,EAAK,OAC3C,YAAK,MACR,CAAA;AAAA,cACC5L,gBAAAA,EAAAA,IAAAqM,IAAA,EAAc,GAAGT,EAAK,MAAO,CAAA;AAAA,YAAA,EAChC,CAAA,IAEAA,EAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MAET;AAAA,IAEJ,KAAK;AACH,aAAOA,EAAK,KAAK,WAAW,GAAG,IAC7B5L,gBAAAA,EAAA;AAAA,QAACsM;AAAA,QAAA;AAAA,UACC,IAAI,EAAE,MAAMV,EAAK,MAAM,QAAQM,EAAa,WAAW;AAAA,UACjD,CAACH,EAAgB,GAAGH,EAAK,KAAK,MAAM,CAAC;AAAA,UAC3C,WAAWH,EAAmB;AAAA,YAC5B,UAAUG,EAAK,KAAK,MAAM,CAAC,MAAMI;AAAA,YACjC,aAAW7L,IAAAyL,EAAK,UAAL,gBAAAzL,EAAY,eAAc,WAAW;AAAA,UAAA,CACjD;AAAA,UACD,SAASkK;AAAA,UAER,UAAAuB,EAAK,QAEFL,gBAAAA,EAAA,KAAAa,EAAA,UAAA,EAAA,UAAA;AAAA,YAAApM,gBAAAA,EAAAA,IAAC,UAAK,WAAU,YAAW,OAAO4L,EAAK,OACpC,YAAK,MACR,CAAA;AAAA,YACC5L,gBAAAA,EAAAA,IAAAqM,IAAA,EAAc,GAAGT,EAAK,MAAO,CAAA;AAAA,UAAA,GAChC,IAEC5L,gBAAAA,EAAA,IAAA,QAAA,EAAK,WAAU,aAAa,YAAK,MAAM,CAAA;AAAA,QAAA;AAAA,UAGzC4L,EAAK,KAAK,WAAW,MAAM,IAmB9BL,gBAAAA,EAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWE,EAAmB;AAAA,UAC9B,MAAMG,EAAK;AAAA,UACX,QAAO;AAAA,UACP,KAAI;AAAA,UACJ,SAASvB;AAAA,UAET,UAAA;AAAA,YAAArK,gBAAAA,EAAA,IAAC,QAAK,EAAA,WAAU,qBAAqB,UAAA4L,EAAK,OAAM;AAAA,YAEhD5L,gBAAAA,EAAAA,IAAC,QAAK,EAAA,WAAU,qBACd,UAAAA,gBAAAA,EAAAA,IAACuM,MAAiB,WAAU,2BAA0B,MAAM,GAAI,CAAA,EAClE,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACF,IA9BAvM,gBAAAA,EAAA;AAAA,QAAC0L;AAAA,QAAA;AAAA,UACC,WAAWD,EAAmB;AAAA,YAC5B,aAAW1I,IAAA6I,EAAK,UAAL,gBAAA7I,EAAY,eAAc,WAAW;AAAA,UAAA,CACjD;AAAA,UACD,IAAI6I,EAAK;AAAA,UAER,UAAAA,EAAK,QAEFL,gBAAAA,EAAA,KAAAa,EAAA,UAAA,EAAA,UAAA;AAAA,YAAApM,gBAAAA,EAAAA,IAAC,UAAK,WAAU,YAAW,OAAO4L,EAAK,OACpC,YAAK,MACR,CAAA;AAAA,YACC5L,gBAAAA,EAAAA,IAAAqM,IAAA,EAAc,GAAGT,EAAK,MAAO,CAAA;AAAA,UAAA,GAChC,IAEC5L,gBAAAA,EAAA,IAAA,QAAA,EAAK,WAAU,aAAa,YAAK,MAAM,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,EAgB5C;AAGR,GCtHMwM,KAAyB,CAC7BC,GACA/L,IAAiC,EAAE,OAAO,eACvC;AACH,MAAI,CAAC+L,EAAS;AAER,QAAAC,IAAOD,EAAQ,sBAAsB;AAQ3C,EANEC,EAAK,OAAO,KACZA,EAAK,QAAQ,KACbA,EAAK,WACF,OAAO,eAAe,SAAS,gBAAgB,iBAClDA,EAAK,UAAU,OAAO,cAAc,SAAS,gBAAgB,gBAI/DD,EAAQ,eAAe/L,CAAO;AAChC,GAEaiM,KAAoB,MAAM;AACrC,QAAMC,IAAWC,GAAY,GACvB,EAAE,iBAAAC,EAAgB,IAAIb,GAAkB;AAE9C,EAAAf,EAAU,MAAM;AACV,QAAA,CAAC0B,EAAS,KAAM;AAEd,UAAAG,IAAO,mBAAmBH,EAAS,KAAK,MAAM,GAAG,EAAE,CAAC,EAAG,MAAM,CAAC,CAAC,GAE/DI,IAAkB,MAAM;AACtB,YAAAP,IAAU,SAAS,eAAeM,CAAI,GACtCE,IAAO,SAAS,cAAc,IAAIlB,EAAgB,KAAKgB,CAAI,IAAI;AAErE,aAAIN,KACFA,EAAQ,eAAe,GACvBD,GAAuBS,CAAI,GACP,oBAAA,MAAMH,EAAgBC,CAAI,CAAC,GACxC,MAGF;AAAA,IACT;AAEI,QAAA,CAACC,KAAmB;AACtB,YAAME,IAAW,IAAI,iBAAiB,CAACC,GAAGC,MAAQ;AAC5C,QAACJ,OACLI,EAAI,WAAW;AAAA,MAAA,CAChB;AAEQ,aAAAF,EAAA,QAAQ,SAAS,MAAM,EAAE,WAAW,IAAM,SAAS,IAAM,GAE3D,MAAMA,EAAS,WAAW;AAAA,IAAA;AAAA,EAElC,GAAA,CAACN,EAAS,MAAME,CAAe,CAAC;AACrC,GCvDaO,KAAiB,MAAM;AAClC,QAAMT,IAAWC,GAAY,GACvBS,IAAeC,GAAOX,EAAS,QAAQ;AAE7C,EAAA1B,EAAU,MAAM;AACV,IAAAoC,EAAa,YAAYV,EAAS,aAC/B,OAAA,SAAS,GAAG,CAAC,GACpBU,EAAa,UAAUV,EAAS;AAAA,EAAA,GAC/B,CAACA,EAAS,QAAQ,CAAC;AACxB;ACVA,SAASY,GAAS;AAAA,EAChB,WAAAC;AAAA,EACA,GAAGlF;AACL,GAAyC;AAErC,SAAAvI,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWsL,EAAG,qCAAqCmC,CAAS;AAAA,MAC3D,GAAGlF;AAAA,IAAA;AAAA,EACN;AAEJ;ACyCO,MAAMmF,KAAsB,CACjCC,MAEA,yBAAyBA,KAAO,OAAOA,EAAI,uBAAwB,YAExDC,KAAqB,CAChCD,MAEA,eAAeA,KAAO,OAAOA,EAAI,aAAc,YAEpCE,KAAiB,CAC5BF,MAEA,kBAAkBA,KAAO,OAAOA,EAAI,gBAAiB,YAE1CG,KAAsB,CAACH,MAClC,gBAAgBA,KAAO,OAAOA,EAAI,cAAe,YAEtCI,KAAU,CAACJ,MACtB,aAAaA,KAAO,OAAOA,EAAI,WAAY,YAEhCK,KAAsB,CAACL,MAClC,sBAAsBA,KAAO,OAAOA,EAAI,oBAAqB,YAElDM,KAAsB,CACjCN,MAEA,mBAAmBA,KAAO,OAAOA,EAAI,iBAAkB,YC3EnDO,KAAY;AAAA,EAChB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,SAAS;AAAA,EACT,QAAQ;AACV,GAEaC,KAAS,MAAM;AACpB,QAAA,EAAE,MAAAlK,EAAK,IAAImK,EAAU,GACrB,CAACC,GAAcC,CAAe,IAAI5D,EAAS,EAAI;AAErD,MAAI,EAACzG,KAAA,QAAAA,EAAM,WAAU,CAACoK;AACb,WAAArO,gBAAAA,EAAAA,IAAC,WAAO,UAAkC,kCAAA,CAAA;AAGnD,QAAMuO,IACJtK,EAAK,OAAO,SAASA,EAAK,OAAO,SAASiK,KACtCA,GAAUjK,EAAK,OAAO,KAA+B,IACpDA,EAAK,OAAO,QAEX,SADA,cAGFuK,IAASD,IAAuD,CAAC,IAA1C,EAAE,iBAAiBtK,EAAK,OAAO,MAAM;AAGhE,SAAAsH,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWD;AAAA,QACT;AAAA,QACAiD;AAAA,MACF;AAAA,MACA,OAAAC;AAAA,MAEA,UAAA;AAAA,QAAAxO,gBAAAA,MAAC,OAAI,EAAA,WAAU,UAAU,UAAAiE,EAAK,OAAO,SAAQ;AAAA,QAC5CA,EAAK,OAAO,eACXjE,gBAAAA,EAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAU;AAAA,YACV,SAAS,MAAMsO,EAAgB,EAAK;AAAA,YAEpC,UAAAtO,gBAAAA,EAAAA,IAACyO,IAAY,EAAA,MAAM,GAAI,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACzB;AAAA,IAAA;AAAA,EAEJ;AAEJ,GC7CaC,KAAS,CAAC,EAAE,WAAAjB,QAAwC;AAC/D,QAAMkB,IAAMP,EAAU,GAChB,CAACQ,GAAQC,CAAS,IAAInE,EAAS,EAAK,GAEpCoE,IAAUC,GAAY,MAAMF,EAAU,EAAK,GAAG,CAAA,CAAE;AAEtD,EAAA3D,EAAU,MAAM;AACd,QAAI0D;AACF;AAGF,aAASI,EAAUxN,GAAsB;AACvC,MAAIA,EAAM,QAAQ,QAAQA,EAAM,WAAWA,EAAM,aAC/CA,EAAM,eAAe,GACrBqN,EAAU,EAAI;AAAA,IAChB;AAGK,kBAAA,iBAAiB,WAAWG,CAAS,GAErC,MAAM;AACJ,aAAA,oBAAoB,WAAWA,CAAS;AAAA,IACjD;AAAA,EAAA,GACC,CAACJ,GAAQC,CAAS,CAAC;AAEtB,QAAMI,IAAeN,EAAI,QAAQ,KAAKd,EAAc;AAEpD,SAAKoB,IAKH1D,gBAAAA,OAAC,SAAI,WAAAkC,GACH,UAAA;AAAA,IAAAlC,gBAAAA,EAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,MAAMsD,EAAU,EAAI;AAAA,QAC7B,WAAU;AAAA,QAEV,UAAA;AAAA,UAACtD,gBAAAA,EAAAA,KAAA,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,YAACvL,gBAAAA,EAAAA,IAAAkP,IAAA,EAAW,MAAM,GAAI,CAAA;AAAA,YAAE;AAAA,UAAA,GAE1B;AAAA,UACClP,gBAAAA,EAAA,IAAA,OAAA,EAAI,WAAU,uKAAsK,UAErL,KAAA,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,IACCA,gBAAAA,EAAA,IAAAmP,IAAA,EAAS,UAAU,MACjB,YAAa,aAAa;AAAA,MACzB,QAAAP;AAAA,MACA,SAAAE;AAAA,IAAA,CACD,EACH,CAAA;AAAA,EAAA,GACF,IAxBO;AA0BX,GCtDaM,KAAc,MAAM;AAC/B,QAAM,EAAE,eAAAC,GAAe,UAAAC,EAAS,IAAIC,GAAS,GACvCC,IAAYH,MAAkB,SAASI,KAAeC;AAE5D,+BACGC,IACC,EAAA,UAAA3P,gBAAAA,EAAA;AAAA,IAAC4P;AAAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,cACEP,MAAkB,SACd,yBACA;AAAA,MAEN,WAAU;AAAA,MACV,SAAS,MAAMC,EAASD,MAAkB,SAAS,UAAU,MAAM;AAAA,MAEnE,UAAArP,gBAAAA,EAAAA,IAACwP,GAAU,EAAA,MAAM,GAAI,CAAA;AAAA,IAAA;AAAA,EAAA,GAEzB;AAEJ,GCfaK,KACX,CAACC,MACD,CAAClE,MAEIA,EAAK,YAAY,UAAUkE,KAC3BlE,EAAK,YAAY,UAAU,CAACkE,KAC7B,CAAClE,EAAK,WACNA,EAAK,YAAY,UAIVmE,KAAgB,MAAM;AAC3B,QAAA,EAAE,eAAAC,EAAc,IAAI5B,EAAU,GAC9B,EAAE,iBAAA0B,EAAgB,IAAIG,GAAQ;AAGhC,SAAAD,EAAc,UAAU,IACnBhQ,gBAAAA,EAAAA,IAAC,WAAO,UAAmC,mCAAA,CAAA,IAIjDA,gBAAAA,EAAAA,IAAAmP,IAAA,EACC,UAACnP,gBAAAA,EAAAA,IAAA,OAAA,EAAI,WAAU,+DACb,UAACA,gBAAAA,EAAA,IAAA,MAAA,EAAG,WAAU,oCACX,UAAcgQ,EAAA,OAAOH,GAAaC,CAAe,CAAC,EAAE,IAAI,CAAClE,MACvD5L,gBAAAA,EAAA,IAAA,MAAA,EACC,gCAACkQ,IAAY,EAAA,GAAGtE,EAAM,CAAA,EAAA,GADfA,EAAK,EAEd,CACD,EACH,CAAA,EACF,CAAA,GACF;AAEJ,GAEasE,KAAa,CAAC;AAAA,EACzB,IAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAASC;AACX,MAAyB;;AACjB,QAAA,EAAE,UAAAC,EAAS,IAAIlC,EAAU,GACzBmC,IAAiBD,EAASH,CAAE,GAC5BK,IAAaC,GAAqB,GAClCC,IAAe,EAAQC,GAAc,EAAE,UACvC3F,MAAW7K,IAAAqQ,EAAW,eAAX,gBAAArQ,EAAuB,QAAOgQ,KAAM,CAACO,GAMhDE,IACJP,MACCE,IACGM,GAAgBN,GAAgB,CAAC3E,MAAS;AACxC,QAAIA,EAAK,SAAS,MAAc,QAAAD,EAASC,EAAK,EAAE;AAAA,EAAA,CACjD,IACDD,EAASwE,CAAE;AAEjB,MAAI,CAACS;AACG,UAAA,IAAIE,GAAY,mBAAmB;AAAA,MACvC,eAAe,yCAAyCX,CAAE;AAAA,IAAA,CAC3D;AAGH;AAAA;AAAA;AAAA,IAGEnQ,gBAAAA,EAAA;AAAA,MAAC0L;AAAA,MAAA;AAAA,QACC,WAAW,CAAC,EAAE,WAAAqF,EAAA,MACZC;AAAA,UACE;AAAA,UACAhG,KAAY+F,IACR,mCACA;AAAA,QACN;AAAA,QAEF,IAAIH;AAAA,QAEH,UAAAR;AAAA,MAAA;AAAA,IAAA;AAAA;AAGP,GC5Eaa,KAAsB,MAAM;AACjC,QAAA,EAAE,eAAAjB,EAAc,IAAI5B,EAAU,GAC9B,EAAE,iBAAA0B,EAAgB,IAAIG,GAAQ,GAC9B,CAACiB,GAAYC,CAAa,IAAIzG,EAAS,EAAK;AAGhD,SAAAa,gBAAAA,EAAA;AAAA,IAAC6F;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAMF;AAAA,MACN,cAAc,CAACpG,MAASqG,EAAcrG,CAAI;AAAA,MAE1C,UAAA;AAAA,QAAA9K,gBAAAA,EAAA,IAAC,OAAI,EAAA,WAAU,mCACb,UAAAA,gBAAAA,EAAAA,IAACqR,IAAc,EAAA,WAAU,aACvB,UAAArR,gBAAAA,EAAA,IAACsR,IAAS,EAAA,MAAM,GAAI,CAAA,EACtB,CAAA,GACF;AAAA,QACAtR,gBAAAA,EAAA;AAAA,UAACuR;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,oBAAkB;AAAA,YAElB,UAAAhG,gBAAAA,EAAA,KAAC,OAAI,EAAA,WAAU,uCACb,UAAA;AAAA,cAAAvL,gBAAAA,MAACwR,IACC,EAAA,UAAAxR,gBAAAA,EAAA,IAACyR,IAAY,EAAA,UAAA,aAAU,CAAA,GACzB;AAAA,cACAzR,gBAAAA,EAAAA,IAAC0O,IAAO,EAAA,WAAU,WAAW,CAAA;AAAA,cAC7BnD,gBAAAA,EAAAA,KAAC,MAAG,EAAA,WAAU,wCACZ,UAAA;AAAA,gBAACvL,gBAAAA,EAAA,IAAA,MAAA,EACC,UAACA,gBAAAA,EAAA,IAAAoP,IAAA,CAAY,CAAA,GACf;AAAA,gBACCY,EAAc,OAAOH,GAAaC,CAAe,CAAC,EAAE,IAAI,CAAClE,MACvD5L,gBAAAA,EAAA,IAAA,MAAA,EACC,UAACA,gBAAAA,EAAA,IAAA,UAAA,EAAO,SAAS,MAAMmR,EAAc,EAAK,GACxC,UAACnR,gBAAAA,EAAAA,IAAAkQ,IAAA,EAAY,GAAGtE,EAAA,CAAM,EACxB,CAAA,EAAA,GAHOA,EAAK,KAId,CACD;AAAA,cAAA,EACH,CAAA;AAAA,YAAA,EACF,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EACF;AAEJ,GC5BM8F,IAAgB,CAAC,EAAE,MAAA9F,QAChBA,EAAK,WACTL,gBAAAA,EAAA,KAAAoG,IACC,EAAA,UAAA;AAAA,wBAACC,IAAA,EAAwB,YAAK,OAAM;AAAA,EACnC5R,gBAAAA,EAAAA,IAAA6R,MACC,UAAC7R,gBAAAA,EAAA,IAAA8R,IAAA,EACE,YAAK,SAAS,IAAI,CAAClG,GAAMmG;AAAA;AAAA,0BAEvBL,GAAA,EAAsB,MAAM9F,KAATmG,CAAe;AAAA,GACpC,EACH,CAAA,EACF,CAAA;AAAA,EAToB,GAAAnG,EAAK,KAU3B,IAEA5L,gBAAAA,EAAA,IAACgS,IAAK,EAAA,IAAIpG,EAAK,QAAQ,IACrB,UAAAL,gBAAAA,OAAC0G,IAAkC,EAAA,WAAU,cAC1C,UAAA;AAAA,EAAKrG,EAAA,QACH5L,gBAAAA,MAAA4L,EAAK,MAAL,EAAU,MAAM,IAAI,aAAa,GAAG,qBAAmB,GAAA,CAAC;AAAA,EAE1DA,EAAK;AAAA,KAJeA,EAAK,KAK5B,GACF,GAISsG,KAASC,GAAK,WAAuB;AAChD,QAAMC,IAAOnC,GAAQ,GACf,EAAE,iBAAAH,GAAiB,SAAAuC,GAAS,eAAAC,EAAA,IAAkBrC,GAAQ,GACtDrN,IAAUwL,EAAU,GACpB,EAAE,MAAAnK,GAAM,SAAAsO,EAAA,IAAY3P,GAEpB4P,IAAeD,EAClB,OAAO,CAACE,MAAM/E,GAAoB+E,CAAC,CAAC,EACpC,QAAQ,CAACA,MAAMA,EAAE,oBAAoB7P,CAAO,CAAC,EAC7C,KAAK,CAACmP,MAAMA,EAAE,UAAU,CAAC;AAG1B,SAACxG,gBAAAA,EAAA,KAAA,UAAO,EAAA,WAAU,8DAChB,UAAA;AAAA,IAAAvL,gBAAAA,EAAA,IAACmO,IAAO,EAAA;AAAA,IACP5C,gBAAAA,EAAAA,KAAA,OAAI,EAAA,WAAU,4BACb,UAAA;AAAA,MAACA,gBAAAA,EAAAA,KAAA,OAAA,EAAI,WAAU,0IACb,UAAA;AAAA,8BAAC,OAAA,EAAI,WAAU,QACb,UAACvL,gBAAAA,EAAA,IAAAgS,IAAA,EAAK,IAAG,KACP,UAAAzG,gBAAAA,OAAC,OAAI,EAAA,WAAU,6BACZ,UAAA;AAAA,WAAAtH,KAAA,gBAAAA,EAAM,SAEHsH,gBAAAA,EAAAA,KAAAa,EAAA,UAAA,EAAA,UAAA;AAAA,YAAApM,gBAAAA,EAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KACE,cAAc,KAAKiE,EAAK,KAAK,IAAI,KAAK,IAClCA,EAAK,KAAK,IAAI,QACd0H;AAAA,kBACE;AAAA,kBACA1H,EAAK,KAAK,IAAI;AAAA,gBAChB;AAAA,gBAEN,KAAKA,EAAK,KAAK,OAAOA,EAAK;AAAA,gBAC3B,OAAO,EAAE,OAAOA,EAAK,KAAK,MAAM;AAAA,gBAChC,WAAU;AAAA,gBACV,SAAQ;AAAA,cAAA;AAAA,YACV;AAAA,YACAjE,gBAAAA,EAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KACE,cAAc,KAAKiE,EAAK,KAAK,IAAI,IAAI,IACjCA,EAAK,KAAK,IAAI,OACd0H;AAAA,kBACE;AAAA,kBACA1H,EAAK,KAAK,IAAI;AAAA,gBAChB;AAAA,gBAEN,KAAKA,EAAK,KAAK,OAAOA,EAAK;AAAA,gBAC3B,OAAO,EAAE,OAAOA,EAAK,KAAK,MAAM;AAAA,gBAChC,WAAU;AAAA,gBACV,SAAQ;AAAA,cAAA;AAAA,YAAA;AAAA,UACV,GACF;AAAA,UAEDjE,gBAAAA,EAAA,IAAA,QAAA,EAAK,WAAU,uDACb,iCAAM,UACT,CAAA;AAAA,QAAA,EACF,CAAA,EACF,CAAA,GACF;AAAA,QACCuL,gBAAAA,EAAAA,KAAA,OAAI,EAAA,WAAU,0EACb,UAAA;AAAA,UAAAvL,gBAAAA,MAAC,OAAI,EAAA,WAAU,wCACb,UAAAA,gBAAAA,MAAC0O,KAAO,CAAA,GACV;AAAA,gCAECuC,IAAoB,EAAA;AAAA,UACpB1F,gBAAAA,EAAAA,KAAA,OAAI,EAAA,WAAU,8DACb,UAAA;AAAA,YAACvL,gBAAAA,EAAAA,IAAA0S,GAAA,EAAQ,MAAK,yBAAwB;AAAA,YACrCJ,KACCtS,gBAAAA,EAAA;AAAA,cAAC2P;AAAAA,cAAA;AAAA,gBACC,UAAW3P,gBAAAA,EAAAA,IAAAwN,IAAS,EAAA,WAAU,yBAAwB;AAAA,gBAErD,UAACsC,IAKA,OAAO,OAAO0C,CAAY,EAAE,SAAS,KACnCjH,gBAAAA,EAAAA,KAACoH,IAAa,EAAA,OAAO,IACnB,UAAA;AAAA,kBAAA3S,gBAAAA,MAAC4S,IAAoB,EAAA,SAAO,IAC1B,UAAA5S,gBAAAA,EAAA,IAAC4P,MAAO,SAAQ,SACb,UAASyC,KAAA,QAAAA,EAAA,OAAO,GAAGA,EAAQ,IAAI,KAAK,aACvC,CAAA,GACF;AAAA,kBACC9G,gBAAAA,EAAAA,KAAAsH,IAAoB,EAAA,WAAU,QAC7B,UAAA;AAAA,oBAAAtH,gBAAAA,OAACuH,IACE,EAAA,UAAA;AAAA,sBAAAT,KAAA,QAAAA,EAAS,OAAO,GAAGA,EAAQ,IAAI,KAAK;AAAA,uBACpCA,KAAA,gBAAAA,EAAS,UACRrS,gBAAAA,EAAA,IAAC,SAAI,WAAU,qCACZ,YAAQ,MACX,CAAA;AAAA,oBAAA,GAEJ;AAAA,oBACCwS,EAAa,OAAO,CAACT,MAAMA,EAAE,aAAa,KAAK,EAC7C,SAAS,KAAM/R,gBAAAA,MAAA+S,IAAsB,CAAA,CAAA;AAAA,oBACvCP,EACE,OAAO,CAACT,MAAMA,EAAE,aAAa,KAAK,EAClC,IAAI,CAACA,MACH/R,gBAAAA,EAAAA,IAAA0R,GAAA,EAA4B,MAAMK,KAAfA,EAAE,KAAgB,CACvC;AAAA,oBACFS,EAAa;AAAA,sBACZ,CAACT,MAAM,CAACA,EAAE,YAAYA,EAAE,aAAa;AAAA,sBACrC,SAAS,KAAM/R,gBAAAA,MAAA+S,IAAsB,CAAA,CAAA;AAAA,oBACtCP,EACE;AAAA,sBACC,CAACT,MAAM,CAACA,EAAE,YAAYA,EAAE,aAAa;AAAA,oBAEtC,EAAA,IAAI,CAACA,MACH/R,gBAAAA,EAAAA,IAAA0R,KAA4B,MAAMK,EAAA,GAAfA,EAAE,KAAgB,CACvC;AAAA,oBACFS,EAAa,OAAO,CAACT,MAAMA,EAAE,aAAa,QAAQ,EAChD,SAAS,KAAM/R,gBAAAA,MAAA+S,IAAsB,CAAA,CAAA;AAAA,oBACvCP,EACE,OAAO,CAACT,MAAMA,EAAE,aAAa,QAAQ,EACrC,IAAI,CAACA,MACH/R,gBAAAA,EAAAA,IAAA0R,GAAA,EAA4B,MAAMK,EAAf,GAAAA,EAAE,KAAgB,CACvC;AAAA,kBAAA,EACL,CAAA;AAAA,gBAAA,EACF,CAAA,IA7CD/R,gBAAAA,EAAA,IAAA4P,IAAA,EAAO,SAAQ,SAAQ,SAAS,MAAMwC,EAAK,MAAS,GAAA,kBAErD,CAAA;AAAA,cA2CE;AAAA,YAGN;AAAA,kCAEDhD,IAAY,EAAA;AAAA,YACZpP,gBAAAA,EAAAA,IAAA0S,GAAQ,EAAA,MAAK,sBAAsB,CAAA;AAAA,UAAA,EACtC,CAAA;AAAA,QAAA,EACF,CAAA;AAAA,MAAA,GACF;AAAA,MACC1S,gBAAAA,EAAAA,IAAA0S,GAAQ,EAAA,MAAK,yBAAwB;AAAA,4BACrC3C,IAAc,EAAA;AAAA,MACd/P,gBAAAA,EAAAA,IAAA0S,GAAQ,EAAA,MAAK,uBAAuB,CAAA;AAAA,IAAA,EACvC,CAAA;AAAA,EAAA,GACF;AAEJ,CAAC,GCrLYM,KAAiBC,GAG5B,CAAC,EAAE,UAAAzL,GAAU,WAAAiG,GAAW,iBAAAyF,EAAA,GAAmBC,MAC3CnT,gBAAAA,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IAKC,mBAAiB,OAAOkT,CAAe;AAAA,IACvC,WAAW5H;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACAmC;AAAA,IACF;AAAA,IACA,KAAA0F;AAAA,IAEC,UAAA3L;AAAA,EAAA;AACH,CACD;AAEDwL,GAAe,cAAc;AChBtB,MAAMI,KAAU,CAAC;AAAA,EACtB,gBAAA/I;AACF,MAEM;AACE,QAAAgJ,IAAS9F,GAA8B,IAAI,GAC3C+F,IAAa7C,GAAqB;AAExC,SAEIlF,gBAAAA,EAAA,KAAAa,YAAA,EAAA,UAAA;AAAA,IAAAb,gBAAAA,EAAA;AAAA,MAACyH;AAAA,MAAA;AAAA,QACC,KAAKK;AAAA,QACL,iBAAiBC,EAAW,QAAQ,SAAS;AAAA,QAE7C,UAAA;AAAA,UAACtT,gBAAAA,EAAAA,IAAA0S,GAAA,EAAQ,MAAK,2BAA2B,CAAA;AAAA,UACxCY,EAAW,QAAQ,IAAI,CAAC1H,4BACtBC,IAA6B,EAAA,MAAAD,EAAA,GAAZA,EAAK,KAAmB,CAC3C;AAAA,UACD5L,gBAAAA,EAAAA,IAAC0S,GAAQ,EAAA,MAAK,0BAA0B,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAC1C;AAAA,IACA1S,gBAAAA,EAAA;AAAA,MAACuR;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,oBAAkB;AAAA,QAElB,UAAAhG,gBAAAA,EAAA,KAAC,OAAI,EAAA,WAAU,uCACb,UAAA;AAAA,UAAAvL,gBAAAA,MAACwR,IACC,EAAA,UAAAxR,gBAAAA,EAAA,IAACyR,IAAY,EAAA,UAAA,UAAO,CAAA,GACtB;AAAA,UACC6B,EAAW,QAAQ,IAAI,CAAC1H,MACvB5L,gBAAAA,EAAA;AAAA,YAAC6L;AAAA,YAAA;AAAA,cAEC,MAAAD;AAAA,cACA,gBAAAvB;AAAA,YAAA;AAAA,YAFKuB,EAAK;AAAA,UAIb,CAAA;AAAA,QAAA,EACH,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,GChCM2H,KAAkB,MACrBvT,gBAAAA,EAAAA,IAAA,QAAA,EAAK,WAAU,gEACd,UAACA,gBAAAA,EAAA,IAAAwT,MAAQ,GACX,GAGWC,KAAS,CAAC,EAAE,UAAAjM,QAAyC;AAChE,QAAMoF,IAAWC,GAAY,GACvB,EAAE,iBAAAC,EAAgB,IAAIb,GAAkB,GACxC,EAAE,MAAA9E,GAAM,gBAAAuM,EAAe,IAAItF,EAAU;AAEzB,EAAAzB,GAAA,GACHU,GAAA;AAET,QAAAsG,IAAuBpG,GAAOX,EAAS,QAAQ;AAErD,EAAA1B,EAAU,MAAM;;AAEd,KAAA/K,IAAAuT,KAAA,gBAAAA,EAAgB,eAAhB,QAAAvT,EAAA,KAAAuT;AAAA,EAA6B,GAC5B,CAACA,CAAc,CAAC,GAEnBxI,EAAU,MAAM;AAEV,IAAA0B,EAAS,aAAa+G,EAAqB,WAC7C7G,EAAgB,EAAE,GAEpB6G,EAAqB,UAAU/G,EAAS;AAAA,EACvC,GAAA,CAACA,EAAS,UAAUE,CAAe,CAAC;AAGvC,QAAM4D,IAAe,EAAQC,GAAc,EAAE,UACvCiD,IAAc/J,gBAAa6G,GAAc;AAAA,IAC7C,OAAO;AAAA,IACP,aAAa;AAAA,EAAA,CACd,GACK,CAACmD,GAAc1C,CAAa,IAAIzG,EAAS,EAAK;AAI/C,SAAAa,gBAAAA,EAAA,KAAAa,YAAA,EAAA,UAAA;AAAA,IAAA;AAAA,2BAGA0H,IAAA,EAAO,eAAe3M,KAAA,gBAAAA,EAAM,OAC1B,UAAA;AAAA,OAAAA,KAAA,gBAAAA,EAAM,gBACJnH,gBAAAA,EAAA,IAAA,QAAA,EAAK,MAAK,eAAc,SAASmH,EAAK,aAAa;AAAA,OAErDA,KAAA,gBAAAA,EAAM,YAAYnH,gBAAAA,EAAA,IAAA,QAAA,EAAK,KAAI,QAAO,MAAMmH,EAAK,QAAS,CAAA;AAAA,IAAA,GACzD;AAAA,IACCnH,gBAAAA,EAAAA,IAAA0S,GAAQ,EAAA,MAAK,sBAAqB;AAAA,0BAClCR,IAAO,EAAA;AAAA,IACPlS,gBAAAA,EAAAA,IAAA0S,GAAQ,EAAA,MAAK,qBAAoB;AAAA,IAEjC1S,gBAAAA,MAAA,OAAA,EAAI,WAAU,kDACZ,UACC4T,0BAACL,IAAgB,CAAA,CAAA,IAEhBvT,gBAAAA,MAAAmP,IAAA,EAAS,gCAAWoE,KAAgB,CAAA,GACnC,UAAAhI,gBAAAA,EAAA;AAAA,MAAC6F;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAMyC;AAAA,QACN,cAAc,CAAC/I,MAASqG,EAAcrG,CAAI;AAAA,QAE1C,UAAA;AAAA,UAAA9K,gBAAAA,EAAA,IAACoT,IAAQ,EAAA,gBAAgB,MAAMjC,EAAc,EAAK,GAAG;AAAA,UACrDnR,gBAAAA,EAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWsL;AAAA,gBACT;AAAA,gBACA;AAAA,cACF;AAAA,cAEA,UAACC,gBAAAA,EAAA,KAAA8F,IAAc,EAAA,WAAU,2BACvB,UAAA;AAAA,sCAAC0C,IAAc,EAAA,MAAM,IAAI,aAAa,KAAK;AAAA,sCAC1C,QAAA,EAAK,WAAU,WAAU,UAAI,OAAA,CAAA;AAAA,cAAA,EAChC,CAAA;AAAA,YAAA;AAAA,UACF;AAAA,UACAxI,gBAAAA,EAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWD;AAAA,gBACT;AAAA,gBACA;AAAA;AAAA,gBAEA;AAAA,gBACA;AAAA,cACF;AAAA,cAEA,UAAA;AAAA,gBAACtL,gBAAAA,EAAAA,IAAA0S,GAAA,EAAQ,MAAK,yBAAwB;AAAA,gBACrClL,2BAAawM,IAAO,EAAA;AAAA,gBACpBhU,gBAAAA,EAAAA,IAAA0S,GAAQ,EAAA,MAAK,uBAAuB,CAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACvC;AAAA,MAAA;AAAA,IACF,EAAA,CACF,EAEJ,CAAA;AAAA,EAAA,GACF;AAEJ,GC1GMuB,KAAuBC,GAAc,IAAI,GAEzCnK,KAAe;AAAA,EACnB,UAAU;AAAA,EACV,OAAO;AACT;AACA,MAAMoK,WAAsBC,GAAU;AAAA,EACpC,YAAY7L,GAAO;AACjB,UAAMA,CAAK,GACX,KAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI,GAC3D,KAAK,QAAQwB;AAAA,EACjB;AAAA,EACE,OAAO,yBAAyBhK,GAAO;AACrC,WAAO;AAAA,MACL,UAAU;AAAA,MACV,OAAAA;AAAA,IACD;AAAA,EACL;AAAA,EACE,qBAAqB;AACnB,UAAM;AAAA,MACJ,OAAAA;AAAA,IACD,IAAG,KAAK;AACT,QAAIA,MAAU,MAAM;AAElB,eADIsU,GAAqBC,GAChBC,IAAO,UAAU,QAAQC,IAAO,IAAI,MAAMD,CAAI,GAAGE,IAAO,GAAGA,IAAOF,GAAME;AAC/E,QAAAD,EAAKC,CAAI,IAAI,UAAUA,CAAI;AAE7B,OAACJ,KAAuBC,IAAc,KAAK,OAAO,aAAa,QAAQD,MAAwB,UAAkBA,EAAoB,KAAKC,GAAa;AAAA,QACrJ,MAAAE;AAAA,QACA,QAAQ;AAAA,MAChB,CAAO,GACD,KAAK,SAASzK,EAAY;AAAA,IAChC;AAAA,EACA;AAAA,EACE,kBAAkBhK,GAAO2U,GAAM;AAC7B,QAAIC,GAAqBC;AACzB,KAACD,KAAuBC,IAAe,KAAK,OAAO,aAAa,QAAQD,MAAwB,UAAkBA,EAAoB,KAAKC,GAAc7U,GAAO2U,CAAI;AAAA,EACxK;AAAA,EACE,mBAAmBG,GAAWC,GAAW;AACvC,UAAM;AAAA,MACJ,UAAAC;AAAA,IACD,IAAG,KAAK,OACH;AAAA,MACJ,WAAAC;AAAA,IACD,IAAG,KAAK;AAOT,QAAID,KAAYD,EAAU,UAAU,QAAQG,GAAgBJ,EAAU,WAAWG,CAAS,GAAG;AAC3F,UAAIE,GAAsBC;AAC1B,OAACD,KAAwBC,IAAe,KAAK,OAAO,aAAa,QAAQD,MAAyB,UAAkBA,EAAqB,KAAKC,GAAc;AAAA,QAC1J,MAAMH;AAAA,QACN,MAAMH,EAAU;AAAA,QAChB,QAAQ;AAAA,MAChB,CAAO,GACD,KAAK,SAAS9K,EAAY;AAAA,IAChC;AAAA,EACA;AAAA,EACE,SAAS;AACP,UAAM;AAAA,MACJ,UAAAvC;AAAA,MACA,gBAAA4N;AAAA,MACA,mBAAAC;AAAA,MACA,UAAAC;AAAA,IACD,IAAG,KAAK,OACH;AAAA,MACJ,UAAAP;AAAA,MACA,OAAAhV;AAAA,IACD,IAAG,KAAK;AACT,QAAIwV,IAAgB/N;AACpB,QAAIuN,GAAU;AACZ,YAAMxM,IAAQ;AAAA,QACZ,OAAAxI;AAAA,QACA,oBAAoB,KAAK;AAAA,MAC1B;AACD,UAAI,OAAOqV,KAAmB;AAC5B,QAAAG,IAAgBH,EAAe7M,CAAK;AAAA,eAC3B8M;AACT,QAAAE,IAAgBC,GAAcH,GAAmB9M,CAAK;AAAA,eAC7C+M,MAAa;AACtB,QAAAC,IAAgBD;AAAA;AAEhB,cAAMvV;AAAA,IAEd;AACI,WAAOyV,GAAcvB,GAAqB,UAAU;AAAA,MAClD,OAAO;AAAA,QACL,UAAAc;AAAA,QACA,OAAAhV;AAAA,QACA,oBAAoB,KAAK;AAAA,MACjC;AAAA,IACK,GAAEwV,CAAa;AAAA,EACpB;AACA;AACA,SAASN,KAAkB;AACzB,MAAIQ,IAAI,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAE,GAC1EC,IAAI,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAE;AAC9E,SAAOD,EAAE,WAAWC,EAAE,UAAUD,EAAE,KAAK,CAAC7J,GAAM+J,MAAU,CAAC,OAAO,GAAG/J,GAAM8J,EAAEC,CAAK,CAAC,CAAC;AACpF;ACnCO,MAAMC,GAAc;AAAA,EASzB,YAAYvV,GAA8B;AARnC,IAAAwV,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACC,IAAAA,EAAA;AAYR,IAAAA,EAAA,oBAAa,YAA2B;AACtC,YAAM,QAAQ;AAAA,QACZ,KAAK,QACF,OAAO/H,EAAmB,EAC1B,IAAI,CAACgI,MAAW;;AAAA,kBAAA3V,IAAA2V,EAAO,eAAP,gBAAA3V,EAAA,KAAA2V,GAAoB;AAAA,SAAK;AAAA,MAC9C;AAAA,IACF;AAEA,IAAAD,EAAA,0BAAmB,aACJ,MAAM,QAAQ;AAAA,MACzB,KAAK,QACF,OAAO5H,EAAmB,EAC1B,IAAI,CAAC6H,MAAWA,EAAO,cAAc,IAAI,CAAC;AAAA,IAC/C,GAEY,KAAK;AAGnB,IAAAD,EAAA,0BAAmB,OAAOE,OACJ,MAAM,QAAQ;AAAA,MAChC,KAAK,kBAAkB;AAAA,QAAI,CAACD,MAC1B;;AAAA,kBAAA3V,IAAA2V,EAAO,eAAP,gBAAA3V,EAAA,KAAA2V,GAAoBnK,EAASoK,CAAI;AAAA;AAAA,MAAC;AAAA,IAEtC,GAEmB,QAAQ,CAACC,MAAQA,KAAO,CAAA,CAAE;AAG/C,IAAAH,EAAA,qBAAc,OAAOI,MAAqB;AACpC,UAAA,CAAC,KAAK;AACF,cAAA,IAAI,MAAM,uCAAuC;AAGzD,YAAMC,IAAc,MAAM,KAAK,eAAe,eAAe;AAE7D,aAAAD,EAAQ,QAAQ,IAAI,iBAAiB,UAAUC,CAAW,EAAE,GAErDD;AAAA,IACT;AA/CO,SAAA,UAAU5V,EAAO,WAAW,CAAC,GAC7B,KAAA,gBAAgBA,EAAO,iBAAiB,CAAC,GACzC,KAAA,WAAWA,EAAO,YAAY,CAAC,GACpC,KAAK,oBAAoB,KAAK,QAAQ,OAAOuN,EAAkB,GAC/D,KAAK,iBAAiBvN,EAAO,gBAC7B,KAAK,OAAOA,EAAO,UACnB,KAAK,OAAOA,EAAO;AAAA,EAAA;AA0CvB;AC5HO,SAAS8V,GAAc,EAAE,OAAApW,GAAO,oBAAAqW,KAAqC;AAGnE,SAAApW,gBAAAA,MAACC,MAAW,OAAAF,GAAc;AACnC;ACPA,MAAMsW,IAAO;AAAA,CAET,CAACA,EAAK,uBAAuB,CAACA,EAAK,wBACrCA,EAAK,sBAAsB,CAACC,MAA4B,WAAWA,GAAI,CAAC,GACxED,EAAK,qBAAqB;ACIrB,MAAME,KAAqB;AAAA,EAChC,QAAArE;AACF,GAMMsE,KACJtC,GAA+CqC,EAAkB,GAEtDE,KAAqBD,GAAkB,UCdvCE,KAAiB,CAAC;AAAA,EAC7B,UAAAlP;AAAA,EACA,SAAA5E;AACF,OACmB+T,GAAA;AAAA,EACf,SAAS,aACP,MAAM/T,EAAQ,WAAW,GAClB;AAAA,EAET,UAAU,CAAC,mBAAmB;AAAA,CAC/B,yBAGEgU,GAAmB,UAAnB,EAA4B,OAAOhU,GACjC,UAAA4E,GACH,ICQEqP,KAAc1E;AAAA,EAClB,CAAC,EAAE,UAAA3K,GAAU,GAAGe,QAAqD;;AACnE,UAAMuO,IAAaC;AAAA,MACjB,OAAO,EAAE,GAAGR,IAAoB,GAAGhO,EAAM,UAAU;AAAA,MACnD,CAACA,EAAM,SAAS;AAAA,IAClB,GAEMyO,IAAgBD,GAAQ,MAAM;;AAO3B,aAAA;AAAA,QACL,IAP6BxO,EAAM,WAAW,CAAA,GAC7C,OAAOyF,EAAmB,EAC1B;AAAA,UAAQ,CAAC8H,MACRA,EAAO,mBAAmB,CAACA,EAAO,iBAAA,CAAkB,IAAI,CAAA;AAAA,QAC1D,EAGyB;AAAA,UACvB,CAACmB,GAAKC,OAAU,EAAE,GAAGD,GAAK,GAAGC,EAAK;AAAA,UAClC,CAAA;AAAA,QACF;AAAA,QACA,GAAGC;AAAA,QACH,IAAGhX,IAAAoI,EAAM,QAAN,gBAAApI,EAAW;AAAA,MAChB;AAAA,IAAA,GACC,EAACA,IAAAoI,EAAM,QAAN,gBAAApI,EAAW,YAAYoI,EAAM,OAAO,CAAC,GACnC,EAAE,SAAA6O,EAAA,IAAYC,GAAWtO,EAAsB,GAC/C,CAACuO,GAAaC,CAAc,IAAI7M,EAAS,EAAK,GAC9C8M,IAAiBT;AAAA,MACrB,MAAOO,IAAc,EAAE,SAAS,GAAK,IAAI,EAAE,SAAAF,EAAQ;AAAA,MACnD,CAACA,GAASE,CAAW;AAAA,IACvB,GACMhE,IAAa3C,GAAc;AAEjC,IAAAzF,EAAU,MAAM;AACd,MAAIoM,KAGJC,EAAe,EAAI;AAAA,IAClB,GAAA,CAACD,GAAahE,EAAW,QAAQ,CAAC;AAE/B,UAAA,CAACmE,CAAa,IAAI/M,EAAS,MAAM,IAAIkL,GAAcrN,CAAK,CAAC,GAEzDmP,KAAQ3U,IAAAwF,EAAM,YAAN,gBAAAxF,EACV,OAAOgL,IAER,IAAI,CAAC+H,GAAQ/D,MAAA;;mCAAO3F,IAAA,EAAkB,iBAAO,sCAAU,GAArB2F,CAAuB;AAAA;AAE5D,WAEIxG,gBAAAA,EAAA,KAAAa,YAAA,EAAA,UAAA;AAAA,MAAApM,gBAAAA,EAAAA,IAAC8T,MAAQ,UAAM4D,EAAA,CAAA;AAAA,4BACd3O,GAAuB,UAAvB,EAAgC,OAAOyO,GACtC,gCAACd,IAAe,EAAA,SAASe,GACvB,UAAAzX,gBAAAA,MAAC2X,MAAY,YAAYX,GACvB,gCAACY,IAAc,EAAA,WAAU,SAAQ,2BAAyB,IACxD,UAAC5X,gBAAAA,MAAAyW,IAAA,EAAmB,OAAOK,GACzB,UAAA9W,gBAAAA,EAAA,IAAC6X,MAAgB,UAAUtP,EAAM,UAC/B,UAACvI,gBAAAA,EAAA,IAAA8X,IAAA,EACE,UAAYtQ,KAAAxH,gBAAAA,EAAA,IAACgU,KAAO,CAAA,GACvB,EAAA,CACF,GACF,EACF,CAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA;AAAA,IAAA,GACF;AAAA,EAAA;AAGN;AAEA6C,GAAY,cAAc;AAE1B,MAAMkB,KAAS,CAACxP,MAEZvI,gBAAAA,MAACmU,MAAc,mBAAmBgC,IAChC,gCAACU,IAAa,EAAA,GAAGtO,GAAO,EAC1B,CAAA;AAGJwP,GAAO,cAAc;ACzFd,MAAMC,KAAiCC,IACjCxE,KAAuByE,IACvBC,KAA4BC,IAC5BtY,KAA4BuY,IAC5B3P,KAA0B4P,IAC1BtP,KAAgCuP,IAEhCC,KAAqB1E,IAErB1F,KAA0BqK,GAC1BxI,KAAwByI,IACxBX,KAAuBY,IAEvBC,KAAwBC,IACxBlJ,KAA2BmJ,IAC3BlJ,KAAuBmJ,IACvB/G,KAAwCgH;","x_google_ignoreList":[1,2,3,4,5,6,7,9,25]}
1
+ {"version":3,"file":"zudoku.components.js","sources":["../src/lib/errors/ServerError.tsx","../../../node_modules/.pnpm/@tanstack+query-core@5.62.3/node_modules/@tanstack/query-core/build/modern/queryCache.js","../../../node_modules/.pnpm/@tanstack+query-core@5.62.3/node_modules/@tanstack/query-core/build/modern/mutationCache.js","../../../node_modules/.pnpm/@tanstack+query-core@5.62.3/node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../../node_modules/.pnpm/@tanstack+query-core@5.62.3/node_modules/@tanstack/query-core/build/modern/queryClient.js","../../../node_modules/.pnpm/@tanstack+query-core@5.62.3/node_modules/@tanstack/query-core/build/modern/hydration.js","../../../node_modules/.pnpm/@tanstack+react-query@5.62.3_react@19.0.0/node_modules/@tanstack/react-query/build/modern/HydrationBoundary.js","../../../node_modules/.pnpm/react-router@7.0.2_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/react-router/dist/development/dom-export.mjs","../src/lib/components/Bootstrap.tsx","../../../node_modules/.pnpm/spin-delay@2.0.1_react@19.0.0/node_modules/spin-delay/dist/index.js","../src/lib/components/navigation/SidebarCategory.tsx","../src/lib/components/navigation/SidebarItem.tsx","../src/lib/util/useScrollToAnchor.ts","../src/lib/util/useScrollToTop.ts","../src/lib/ui/Skeleton.tsx","../src/lib/core/plugins.ts","../src/lib/components/Banner.tsx","../src/lib/components/Search.tsx","../src/lib/components/ThemeSwitch.tsx","../src/lib/components/TopNavigation.tsx","../src/lib/components/MobileTopNavigation.tsx","../src/lib/components/Header.tsx","../src/lib/components/navigation/SidebarWrapper.tsx","../src/lib/components/navigation/Sidebar.tsx","../src/lib/components/Layout.tsx","../../../node_modules/.pnpm/react-error-boundary@4.1.2_react@19.0.0/node_modules/react-error-boundary/dist/react-error-boundary.esm.js","../src/lib/core/ZudokuContext.ts","../src/lib/errors/TopLevelError.tsx","../src/lib/util/requestIdleCallbackPolyfill.ts","../src/lib/components/context/ComponentsContext.tsx","../src/lib/components/context/ZudokuProvider.tsx","../src/lib/components/Zudoku.tsx","../src/lib/components/index.ts"],"sourcesContent":["import { ErrorAlert } from \"./ErrorAlert.js\";\n\nexport function ServerError({ error }: { error: unknown }) {\n return <ErrorAlert error={error} />;\n}\n","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#queries = /* @__PURE__ */ new Map();\n }\n #queries;\n build(client, options, state) {\n const queryKey = options.queryKey;\n const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n let query = this.get(queryHash);\n if (!query) {\n query = new Query({\n cache: this,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey)\n });\n this.add(query);\n }\n return query;\n }\n add(query) {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query);\n this.notify({\n type: \"added\",\n query\n });\n }\n }\n remove(query) {\n const queryInMap = this.#queries.get(query.queryHash);\n if (queryInMap) {\n query.destroy();\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash);\n }\n this.notify({ type: \"removed\", query });\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query);\n });\n });\n }\n get(queryHash) {\n return this.#queries.get(queryHash);\n }\n getAll() {\n return [...this.#queries.values()];\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (query) => matchQuery(defaultedFilters, query)\n );\n }\n findAll(filters = {}) {\n const queries = this.getAll();\n return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n onFocus() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus();\n });\n });\n }\n onOnline() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline();\n });\n });\n }\n};\nexport {\n QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#mutations = /* @__PURE__ */ new Map();\n this.#mutationId = Date.now();\n }\n #mutations;\n #mutationId;\n build(client, options, state) {\n const mutation = new Mutation({\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state\n });\n this.add(mutation);\n return mutation;\n }\n add(mutation) {\n const scope = scopeFor(mutation);\n const mutations = this.#mutations.get(scope) ?? [];\n mutations.push(mutation);\n this.#mutations.set(scope, mutations);\n this.notify({ type: \"added\", mutation });\n }\n remove(mutation) {\n const scope = scopeFor(mutation);\n if (this.#mutations.has(scope)) {\n const mutations = this.#mutations.get(scope)?.filter((x) => x !== mutation);\n if (mutations) {\n if (mutations.length === 0) {\n this.#mutations.delete(scope);\n } else {\n this.#mutations.set(scope, mutations);\n }\n }\n }\n this.notify({ type: \"removed\", mutation });\n }\n canRun(mutation) {\n const firstPendingMutation = this.#mutations.get(scopeFor(mutation))?.find((m) => m.state.status === \"pending\");\n return !firstPendingMutation || firstPendingMutation === mutation;\n }\n runNext(mutation) {\n const foundMutation = this.#mutations.get(scopeFor(mutation))?.find((m) => m !== mutation && m.state.isPaused);\n return foundMutation?.continue() ?? Promise.resolve();\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((mutation) => {\n this.remove(mutation);\n });\n });\n }\n getAll() {\n return [...this.#mutations.values()].flat();\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (mutation) => matchMutation(defaultedFilters, mutation)\n );\n }\n findAll(filters = {}) {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n resumePausedMutations() {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n return notifyManager.batch(\n () => Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop))\n )\n );\n }\n};\nfunction scopeFor(mutation) {\n return mutation.options.scope?.id ?? String(mutation.mutationId);\n}\nexport {\n MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/infiniteQueryBehavior.ts\nimport { addToEnd, addToStart, ensureQueryFn } from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n return {\n onFetch: (context, query) => {\n const options = context.options;\n const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n const oldPages = context.state.data?.pages || [];\n const oldPageParams = context.state.data?.pageParams || [];\n let result = { pages: [], pageParams: [] };\n let currentPage = 0;\n const fetchFn = async () => {\n let cancelled = false;\n const addSignalProperty = (object) => {\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n if (context.signal.aborted) {\n cancelled = true;\n } else {\n context.signal.addEventListener(\"abort\", () => {\n cancelled = true;\n });\n }\n return context.signal;\n }\n });\n };\n const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n const fetchPage = async (data, param, previous) => {\n if (cancelled) {\n return Promise.reject();\n }\n if (param == null && data.pages.length) {\n return Promise.resolve(data);\n }\n const queryFnContext = {\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? \"backward\" : \"forward\",\n meta: context.options.meta\n };\n addSignalProperty(queryFnContext);\n const page = await queryFn(\n queryFnContext\n );\n const { maxPages } = context.options;\n const addTo = previous ? addToStart : addToEnd;\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n };\n };\n if (direction && oldPages.length) {\n const previous = direction === \"backward\";\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams\n };\n const param = pageParamFn(options, oldData);\n result = await fetchPage(oldData, param, previous);\n } else {\n const remainingPages = pages ?? oldPages.length;\n do {\n const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n if (currentPage > 0 && param == null) {\n break;\n }\n result = await fetchPage(result, param);\n currentPage++;\n } while (currentPage < remainingPages);\n }\n return result;\n };\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn,\n {\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal\n },\n query\n );\n };\n } else {\n context.fetchFn = fetchFn;\n }\n }\n };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n const lastIndex = pages.length - 1;\n return pages.length > 0 ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams\n ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n if (!data)\n return false;\n return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n if (!data || !options.getPreviousPageParam)\n return false;\n return getPreviousPageParam(options, data) != null;\n}\nexport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/queryClient.ts\nimport {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar QueryClient = class {\n #queryCache;\n #mutationCache;\n #defaultOptions;\n #queryDefaults;\n #mutationDefaults;\n #mountCount;\n #unsubscribeFocus;\n #unsubscribeOnline;\n constructor(config = {}) {\n this.#queryCache = config.queryCache || new QueryCache();\n this.#mutationCache = config.mutationCache || new MutationCache();\n this.#defaultOptions = config.defaultOptions || {};\n this.#queryDefaults = /* @__PURE__ */ new Map();\n this.#mutationDefaults = /* @__PURE__ */ new Map();\n this.#mountCount = 0;\n }\n mount() {\n this.#mountCount++;\n if (this.#mountCount !== 1)\n return;\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations();\n this.#queryCache.onFocus();\n }\n });\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations();\n this.#queryCache.onOnline();\n }\n });\n }\n unmount() {\n this.#mountCount--;\n if (this.#mountCount !== 0)\n return;\n this.#unsubscribeFocus?.();\n this.#unsubscribeFocus = void 0;\n this.#unsubscribeOnline?.();\n this.#unsubscribeOnline = void 0;\n }\n isFetching(filters) {\n return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n }\n isMutating(filters) {\n return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n }\n getQueryData(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(options.queryHash)?.state.data;\n }\n ensureQueryData(options) {\n const cachedData = this.getQueryData(options.queryKey);\n if (cachedData === void 0) {\n return this.fetchQuery(options);\n } else {\n const defaultedOptions = this.defaultQueryOptions(options);\n const query = this.#queryCache.build(this, defaultedOptions);\n if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n void this.prefetchQuery(defaultedOptions);\n }\n return Promise.resolve(cachedData);\n }\n }\n getQueriesData(filters) {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data;\n return [queryKey, data];\n });\n }\n setQueryData(queryKey, updater, options) {\n const defaultedOptions = this.defaultQueryOptions({ queryKey });\n const query = this.#queryCache.get(\n defaultedOptions.queryHash\n );\n const prevData = query?.state.data;\n const data = functionalUpdate(updater, prevData);\n if (data === void 0) {\n return void 0;\n }\n return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n }\n setQueriesData(filters, updater, options) {\n return notifyManager.batch(\n () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n queryKey,\n this.setQueryData(queryKey, updater, options)\n ])\n );\n }\n getQueryState(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(\n options.queryHash\n )?.state;\n }\n removeQueries(filters) {\n const queryCache = this.#queryCache;\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query);\n });\n });\n }\n resetQueries(filters, options) {\n const queryCache = this.#queryCache;\n const refetchFilters = {\n type: \"active\",\n ...filters\n };\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset();\n });\n return this.refetchQueries(refetchFilters, options);\n });\n }\n cancelQueries(filters, cancelOptions = {}) {\n const defaultedCancelOptions = { revert: true, ...cancelOptions };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n );\n return Promise.all(promises).then(noop).catch(noop);\n }\n invalidateQueries(filters, options = {}) {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate();\n });\n if (filters?.refetchType === \"none\") {\n return Promise.resolve();\n }\n const refetchFilters = {\n ...filters,\n type: filters?.refetchType ?? filters?.type ?? \"active\"\n };\n return this.refetchQueries(refetchFilters, options);\n });\n }\n refetchQueries(filters, options = {}) {\n const fetchOptions = {\n ...options,\n cancelRefetch: options.cancelRefetch ?? true\n };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled()).map((query) => {\n let promise = query.fetch(void 0, fetchOptions);\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop);\n }\n return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n })\n );\n return Promise.all(promises).then(noop);\n }\n fetchQuery(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n if (defaultedOptions.retry === void 0) {\n defaultedOptions.retry = false;\n }\n const query = this.#queryCache.build(this, defaultedOptions);\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query)\n ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n }\n prefetchQuery(options) {\n return this.fetchQuery(options).then(noop).catch(noop);\n }\n fetchInfiniteQuery(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.fetchQuery(options);\n }\n prefetchInfiniteQuery(options) {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n }\n ensureInfiniteQueryData(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.ensureQueryData(options);\n }\n resumePausedMutations() {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations();\n }\n return Promise.resolve();\n }\n getQueryCache() {\n return this.#queryCache;\n }\n getMutationCache() {\n return this.#mutationCache;\n }\n getDefaultOptions() {\n return this.#defaultOptions;\n }\n setDefaultOptions(options) {\n this.#defaultOptions = options;\n }\n setQueryDefaults(queryKey, options) {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options\n });\n }\n getQueryDefaults(queryKey) {\n const defaults = [...this.#queryDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n setMutationDefaults(mutationKey, options) {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options\n });\n }\n getMutationDefaults(mutationKey) {\n const defaults = [...this.#mutationDefaults.values()];\n let result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n result = { ...result, ...queryDefault.defaultOptions };\n }\n });\n return result;\n }\n defaultQueryOptions(options) {\n if (options._defaulted) {\n return options;\n }\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true\n };\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions\n );\n }\n if (defaultedOptions.refetchOnReconnect === void 0) {\n defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n }\n if (defaultedOptions.throwOnError === void 0) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n }\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = \"offlineFirst\";\n }\n if (defaultedOptions.queryFn === skipToken) {\n defaultedOptions.enabled = false;\n }\n return defaultedOptions;\n }\n defaultMutationOptions(options) {\n if (options?._defaulted) {\n return options;\n }\n return {\n ...this.#defaultOptions.mutations,\n ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n ...options,\n _defaulted: true\n };\n }\n clear() {\n this.#queryCache.clear();\n this.#mutationCache.clear();\n }\n};\nexport {\n QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","// src/hydration.ts\nfunction defaultTransformerFn(data) {\n return data;\n}\nfunction dehydrateMutation(mutation) {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n ...mutation.options.scope && { scope: mutation.options.scope },\n ...mutation.meta && { meta: mutation.meta }\n };\n}\nfunction dehydrateQuery(query, serializeData) {\n return {\n state: {\n ...query.state,\n ...query.state.data !== void 0 && {\n data: serializeData(query.state.data)\n }\n },\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n ...query.state.status === \"pending\" && {\n promise: query.promise?.then(serializeData).catch((error) => {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\n `A query that was dehydrated as pending ended up rejecting. [${query.queryHash}]: ${error}; The error will be redacted in production builds`\n );\n }\n return Promise.reject(new Error(\"redacted\"));\n })\n },\n ...query.meta && { meta: query.meta }\n };\n}\nfunction defaultShouldDehydrateMutation(mutation) {\n return mutation.state.isPaused;\n}\nfunction defaultShouldDehydrateQuery(query) {\n return query.state.status === \"success\";\n}\nfunction dehydrate(client, options = {}) {\n const filterMutation = options.shouldDehydrateMutation ?? client.getDefaultOptions().dehydrate?.shouldDehydrateMutation ?? defaultShouldDehydrateMutation;\n const mutations = client.getMutationCache().getAll().flatMap(\n (mutation) => filterMutation(mutation) ? [dehydrateMutation(mutation)] : []\n );\n const filterQuery = options.shouldDehydrateQuery ?? client.getDefaultOptions().dehydrate?.shouldDehydrateQuery ?? defaultShouldDehydrateQuery;\n const serializeData = options.serializeData ?? client.getDefaultOptions().dehydrate?.serializeData ?? defaultTransformerFn;\n const queries = client.getQueryCache().getAll().flatMap(\n (query) => filterQuery(query) ? [dehydrateQuery(query, serializeData)] : []\n );\n return { mutations, queries };\n}\nfunction hydrate(client, dehydratedState, options) {\n if (typeof dehydratedState !== \"object\" || dehydratedState === null) {\n return;\n }\n const mutationCache = client.getMutationCache();\n const queryCache = client.getQueryCache();\n const deserializeData = options?.defaultOptions?.deserializeData ?? client.getDefaultOptions().hydrate?.deserializeData ?? defaultTransformerFn;\n const mutations = dehydratedState.mutations || [];\n const queries = dehydratedState.queries || [];\n mutations.forEach(({ state, ...mutationOptions }) => {\n mutationCache.build(\n client,\n {\n ...client.getDefaultOptions().hydrate?.mutations,\n ...options?.defaultOptions?.mutations,\n ...mutationOptions\n },\n state\n );\n });\n queries.forEach(({ queryKey, state, queryHash, meta, promise }) => {\n let query = queryCache.get(queryHash);\n const data = state.data === void 0 ? state.data : deserializeData(state.data);\n if (query) {\n if (query.state.dataUpdatedAt < state.dataUpdatedAt) {\n const { fetchStatus: _ignored, ...serializedState } = state;\n query.setState({\n ...serializedState,\n data\n });\n }\n } else {\n query = queryCache.build(\n client,\n {\n ...client.getDefaultOptions().hydrate?.queries,\n ...options?.defaultOptions?.queries,\n queryKey,\n queryHash,\n meta\n },\n // Reset fetch status to idle to avoid\n // query being stuck in fetching state upon hydration\n {\n ...state,\n data,\n fetchStatus: \"idle\"\n }\n );\n }\n if (promise) {\n const initialPromise = Promise.resolve(promise).then(deserializeData);\n void query.fetch(void 0, { initialPromise });\n }\n });\n}\nexport {\n defaultShouldDehydrateMutation,\n defaultShouldDehydrateQuery,\n dehydrate,\n hydrate\n};\n//# sourceMappingURL=hydration.js.map","\"use client\";\n\n// src/HydrationBoundary.tsx\nimport * as React from \"react\";\nimport { hydrate } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nvar HydrationBoundary = ({\n children,\n options = {},\n state,\n queryClient\n}) => {\n const client = useQueryClient(queryClient);\n const [hydrationQueue, setHydrationQueue] = React.useState();\n const optionsRef = React.useRef(options);\n optionsRef.current = options;\n React.useMemo(() => {\n if (state) {\n if (typeof state !== \"object\") {\n return;\n }\n const queryCache = client.getQueryCache();\n const queries = state.queries || [];\n const newQueries = [];\n const existingQueries = [];\n for (const dehydratedQuery of queries) {\n const existingQuery = queryCache.get(dehydratedQuery.queryHash);\n if (!existingQuery) {\n newQueries.push(dehydratedQuery);\n } else {\n const hydrationIsNewer = dehydratedQuery.state.dataUpdatedAt > existingQuery.state.dataUpdatedAt;\n const queryAlreadyQueued = hydrationQueue?.find(\n (query) => query.queryHash === dehydratedQuery.queryHash\n );\n if (hydrationIsNewer && (!queryAlreadyQueued || dehydratedQuery.state.dataUpdatedAt > queryAlreadyQueued.state.dataUpdatedAt)) {\n existingQueries.push(dehydratedQuery);\n }\n }\n }\n if (newQueries.length > 0) {\n hydrate(client, { queries: newQueries }, optionsRef.current);\n }\n if (existingQueries.length > 0) {\n setHydrationQueue(\n (prev) => prev ? [...prev, ...existingQueries] : existingQueries\n );\n }\n }\n }, [client, hydrationQueue, state]);\n React.useEffect(() => {\n if (hydrationQueue) {\n hydrate(client, { queries: hydrationQueue }, optionsRef.current);\n setHydrationQueue(void 0);\n }\n }, [client, hydrationQueue]);\n return children;\n};\nexport {\n HydrationBoundary\n};\n//# sourceMappingURL=HydrationBoundary.js.map","/**\n * react-router v7.0.2\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport {\n FrameworkContext,\n RemixErrorBoundary,\n RouterProvider,\n createBrowserHistory,\n createClientRoutes,\n createClientRoutesWithHMRRevalidationOptOut,\n createRouter,\n decodeViaTurboStream,\n deserializeErrors,\n getPatchRoutesOnNavigationFunction,\n getSingleFetchDataStrategy,\n invariant,\n mapRouteProperties,\n matchRoutes,\n shouldHydrateRouteLoader,\n useFogOFWarDiscovery\n} from \"./chunk-D52XG6IA.mjs\";\n\n// lib/dom-export/dom-router-provider.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nfunction RouterProvider2(props) {\n return /* @__PURE__ */ React.createElement(RouterProvider, { flushSync: ReactDOM.flushSync, ...props });\n}\n\n// lib/dom-export/hydrated-router.tsx\nimport * as React2 from \"react\";\nvar ssrInfo = null;\nvar router = null;\nfunction initSsrInfo() {\n if (!ssrInfo && window.__reactRouterContext && window.__reactRouterManifest && window.__reactRouterRouteModules) {\n ssrInfo = {\n context: window.__reactRouterContext,\n manifest: window.__reactRouterManifest,\n routeModules: window.__reactRouterRouteModules,\n stateDecodingPromise: void 0,\n router: void 0,\n routerInitialized: false\n };\n }\n}\nfunction createHydratedRouter() {\n initSsrInfo();\n if (!ssrInfo) {\n throw new Error(\n \"You must be using the SSR features of React Router in order to skip passing a `router` prop to `<RouterProvider>`\"\n );\n }\n let localSsrInfo = ssrInfo;\n if (!ssrInfo.stateDecodingPromise) {\n let stream = ssrInfo.context.stream;\n invariant(stream, \"No stream found for single fetch decoding\");\n ssrInfo.context.stream = void 0;\n ssrInfo.stateDecodingPromise = decodeViaTurboStream(stream, window).then((value) => {\n ssrInfo.context.state = value.value;\n localSsrInfo.stateDecodingPromise.value = true;\n }).catch((e) => {\n localSsrInfo.stateDecodingPromise.error = e;\n });\n }\n if (ssrInfo.stateDecodingPromise.error) {\n throw ssrInfo.stateDecodingPromise.error;\n }\n if (!ssrInfo.stateDecodingPromise.value) {\n throw ssrInfo.stateDecodingPromise;\n }\n let routes = createClientRoutes(\n ssrInfo.manifest.routes,\n ssrInfo.routeModules,\n ssrInfo.context.state,\n ssrInfo.context.isSpaMode\n );\n let hydrationData = void 0;\n if (!ssrInfo.context.isSpaMode) {\n hydrationData = {\n ...ssrInfo.context.state,\n loaderData: { ...ssrInfo.context.state.loaderData }\n };\n let initialMatches = matchRoutes(\n routes,\n window.location,\n window.__reactRouterContext?.basename\n );\n if (initialMatches) {\n for (let match of initialMatches) {\n let routeId = match.route.id;\n let route = ssrInfo.routeModules[routeId];\n let manifestRoute = ssrInfo.manifest.routes[routeId];\n if (route && manifestRoute && shouldHydrateRouteLoader(\n manifestRoute,\n route,\n ssrInfo.context.isSpaMode\n ) && (route.HydrateFallback || !manifestRoute.hasLoader)) {\n delete hydrationData.loaderData[routeId];\n } else if (manifestRoute && !manifestRoute.hasLoader) {\n hydrationData.loaderData[routeId] = null;\n }\n }\n }\n if (hydrationData && hydrationData.errors) {\n hydrationData.errors = deserializeErrors(hydrationData.errors);\n }\n }\n let router2 = createRouter({\n routes,\n history: createBrowserHistory(),\n basename: ssrInfo.context.basename,\n hydrationData,\n mapRouteProperties,\n dataStrategy: getSingleFetchDataStrategy(\n ssrInfo.manifest,\n ssrInfo.routeModules,\n () => router2\n ),\n patchRoutesOnNavigation: getPatchRoutesOnNavigationFunction(\n ssrInfo.manifest,\n ssrInfo.routeModules,\n ssrInfo.context.isSpaMode,\n ssrInfo.context.basename\n )\n });\n ssrInfo.router = router2;\n if (router2.state.initialized) {\n ssrInfo.routerInitialized = true;\n router2.initialize();\n }\n router2.createRoutesForHMR = /* spacer so ts-ignore does not affect the right hand of the assignment */\n createClientRoutesWithHMRRevalidationOptOut;\n window.__reactRouterDataRouter = router2;\n return router2;\n}\nfunction HydratedRouter() {\n if (!router) {\n router = createHydratedRouter();\n }\n let [criticalCss, setCriticalCss] = React2.useState(\n process.env.NODE_ENV === \"development\" ? ssrInfo?.context.criticalCss : void 0\n );\n if (process.env.NODE_ENV === \"development\") {\n if (ssrInfo) {\n window.__reactRouterClearCriticalCss = () => setCriticalCss(void 0);\n }\n }\n let [location, setLocation] = React2.useState(router.state.location);\n React2.useLayoutEffect(() => {\n if (ssrInfo && ssrInfo.router && !ssrInfo.routerInitialized) {\n ssrInfo.routerInitialized = true;\n ssrInfo.router.initialize();\n }\n }, []);\n React2.useLayoutEffect(() => {\n if (ssrInfo && ssrInfo.router) {\n return ssrInfo.router.subscribe((newState) => {\n if (newState.location !== location) {\n setLocation(newState.location);\n }\n });\n }\n }, [location]);\n invariant(ssrInfo, \"ssrInfo unavailable for HydratedRouter\");\n useFogOFWarDiscovery(\n router,\n ssrInfo.manifest,\n ssrInfo.routeModules,\n ssrInfo.context.isSpaMode\n );\n return (\n // This fragment is important to ensure we match the <ServerRouter> JSX\n // structure so that useId values hydrate correctly\n /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(\n FrameworkContext.Provider,\n {\n value: {\n manifest: ssrInfo.manifest,\n routeModules: ssrInfo.routeModules,\n future: ssrInfo.context.future,\n criticalCss,\n isSpaMode: ssrInfo.context.isSpaMode\n }\n },\n /* @__PURE__ */ React2.createElement(RemixErrorBoundary, { location }, /* @__PURE__ */ React2.createElement(RouterProvider2, { router }))\n ), /* @__PURE__ */ React2.createElement(React2.Fragment, null))\n );\n}\nexport {\n HydratedRouter,\n RouterProvider2 as RouterProvider\n};\n","import {\n HydrationBoundary,\n QueryClient,\n QueryClientProvider,\n} from \"@tanstack/react-query\";\nimport { type HelmetData, HelmetProvider } from \"@zudoku/react-helmet-async\";\nimport { StrictMode } from \"react\";\nimport {\n type createBrowserRouter,\n type createStaticRouter,\n type StaticHandlerContext,\n StaticRouterProvider,\n} from \"react-router\";\nimport { RouterProvider } from \"react-router/dom\";\nimport { StaggeredRenderContext } from \"../plugins/openapi/StaggeredRender.js\";\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 1000 * 60 * 5,\n },\n },\n});\n\nconst Bootstrap = ({\n router,\n hydrate = false,\n}: {\n hydrate?: boolean;\n router: ReturnType<typeof createBrowserRouter>;\n}) => (\n <StrictMode>\n <QueryClientProvider client={queryClient}>\n <HydrationBoundary state={hydrate ? (window as any).DATA : undefined}>\n <HelmetProvider>\n <StaggeredRenderContext.Provider value={{ stagger: !hydrate }}>\n <RouterProvider router={router} />\n </StaggeredRenderContext.Provider>\n </HelmetProvider>\n </HydrationBoundary>\n </QueryClientProvider>\n </StrictMode>\n);\n\nconst BootstrapStatic = ({\n router,\n context,\n queryClient,\n helmetContext,\n}: {\n helmetContext: HelmetData[\"context\"];\n context: StaticHandlerContext;\n queryClient: QueryClient;\n router: ReturnType<typeof createStaticRouter>;\n}) => (\n <StrictMode>\n <QueryClientProvider client={queryClient}>\n <HelmetProvider context={helmetContext}>\n <StaticRouterProvider router={router} context={context} />\n </HelmetProvider>\n </QueryClientProvider>\n </StrictMode>\n);\n\nexport { Bootstrap, BootstrapStatic };\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :\n typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :\n (global = global || self, factory(global.spinDelay = {}, global.react));\n}(this, (function (exports, react) {\n const defaultOptions = {\n delay: 500,\n minDuration: 200,\n ssr: true\n };\n\n function useIsSSR() {\n const [isSSR, setIsSSR] = react.useState(true);\n react.useEffect(() => {\n setIsSSR(false);\n }, []);\n return isSSR;\n }\n\n function useSpinDelay(loading, options) {\n options = Object.assign({}, defaultOptions, options);\n const isSSR = useIsSSR() && options.ssr;\n const initialState = isSSR && loading ? 'DISPLAY' : 'IDLE';\n const [state, setState] = react.useState(initialState);\n const timeout = react.useRef(null);\n react.useEffect(() => {\n if (loading && (state === 'IDLE' || isSSR)) {\n clearTimeout(timeout.current);\n const delay = isSSR ? 0 : options.delay;\n timeout.current = setTimeout(() => {\n if (!loading) {\n return setState('IDLE');\n }\n\n timeout.current = setTimeout(() => {\n setState('EXPIRE');\n }, options.minDuration);\n setState('DISPLAY');\n }, delay);\n\n if (!isSSR) {\n setState('DELAY');\n }\n }\n\n if (!loading && state !== 'DISPLAY') {\n clearTimeout(timeout.current);\n setState('IDLE');\n }\n }, [loading, state, options.delay, options.minDuration, isSSR]);\n react.useEffect(() => {\n return () => clearTimeout(timeout.current);\n }, []);\n return state === 'DISPLAY' || state === 'EXPIRE';\n }\n\n exports.defaultOptions = defaultOptions;\n exports.useSpinDelay = useSpinDelay;\n\n})));\n//# sourceMappingURL=index.js.map\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { ChevronRightIcon } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { NavLink, useMatch } from \"react-router\";\nimport type { SidebarItemCategory } from \"../../../config/validators/SidebarSchema.js\";\nimport { cn } from \"../../util/cn.js\";\nimport { joinPath } from \"../../util/joinPath.js\";\nimport { navigationListItem, SidebarItem } from \"./SidebarItem.js\";\nimport { useIsCategoryOpen } from \"./utils.js\";\n\nexport const SidebarCategory = ({\n category,\n onRequestClose,\n}: {\n category: SidebarItemCategory;\n onRequestClose?: () => void;\n}) => {\n const isCategoryOpen = useIsCategoryOpen(category);\n const [hasInteracted, setHasInteracted] = useState(false);\n\n const isCollapsible = category.collapsible ?? true;\n const isCollapsed = category.collapsed ?? true;\n const isDefaultOpen = Boolean(\n !isCollapsible || !isCollapsed || isCategoryOpen,\n );\n const [open, setOpen] = useState(isDefaultOpen);\n const isActive = useMatch(category.link?.id ?? \"\");\n\n useEffect(() => {\n // this is triggered when an item from the sidebar is clicked\n // and the sidebar, enclosing this item, is not opened\n if (isCategoryOpen) {\n setOpen(true);\n }\n }, [isCategoryOpen]);\n\n const ToggleButton = isCollapsible && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n setOpen((prev) => !prev);\n setHasInteracted(true);\n }}\n >\n <ChevronRightIcon\n size={16}\n className={cn(\n hasInteracted && \"transition\",\n \"shrink-0 group-data-[state=open]:rotate-90\",\n )}\n />\n </button>\n );\n\n return (\n <Collapsible.Root\n className=\"flex flex-col\"\n defaultOpen={isDefaultOpen}\n open={open}\n onOpenChange={() => setOpen(true)}\n >\n <Collapsible.Trigger className=\"group\" asChild disabled={!isCollapsible}>\n <div\n onClick={() => setHasInteracted(true)}\n className={navigationListItem({\n isActive: false,\n className: [\n \"text-start\",\n isCollapsible\n ? \"cursor-pointer\"\n : \"cursor-default hover:bg-transparent\",\n ],\n })}\n >\n {category.icon && (\n <category.icon\n size={16}\n className={cn(\"align-[-0.125em] \", isActive && \"text-primary\")}\n />\n )}\n {category.link?.type === \"doc\" ? (\n <NavLink\n to={joinPath(category.link.id)}\n className=\"flex-1\"\n onClick={() => {\n // if it is the current path and closed then open it because there's no path change to trigger the open\n if (isActive && !open) {\n setOpen(true);\n }\n }}\n >\n <div\n className={cn(\n \"flex items-center gap-2 justify-between w-full\",\n isActive ? \"text-primary\" : \"text-foreground/80\",\n )}\n >\n <div className=\"truncate\">{category.label}</div>\n {ToggleButton}\n </div>\n </NavLink>\n ) : (\n <div className=\"flex items-center justify-between w-full\">\n <div className=\"flex gap-2 truncate w-full\">{category.label}</div>\n {ToggleButton}\n </div>\n )}\n </div>\n </Collapsible.Trigger>\n <Collapsible.Content\n className={cn(\n // CollapsibleContent class is used to animate and it should only be applied when the user has triggered the toggle\n hasInteracted && \"CollapsibleContent\",\n \"ms-6 my-1\",\n )}\n >\n <ul\n className={\n \"relative after:absolute after:-left-[--padding-nav-item] after:translate-x-[1.5px] after:top-0 after:bottom-0 after:w-px after:bg-border\"\n }\n >\n {category.items.map((item) => (\n <SidebarItem\n key={\n (\"id\" in item ? item.id : \"\") +\n (\"href\" in item ? item.href : \"\") +\n item.label\n }\n onRequestClose={onRequestClose}\n item={item}\n />\n ))}\n </ul>\n </Collapsible.Content>\n </Collapsible.Root>\n );\n};\n","import { cva } from \"class-variance-authority\";\nimport { ExternalLinkIcon } from \"lucide-react\";\nimport { NavLink, useSearchParams } from \"react-router\";\n\nimport type { SidebarItem as SidebarItemType } from \"../../../config/validators/SidebarSchema.js\";\nimport { joinPath } from \"../../util/joinPath.js\";\nimport { AnchorLink } from \"../AnchorLink.js\";\nimport { useViewportAnchor } from \"../context/ViewportAnchorContext.js\";\nimport { SidebarBadge } from \"./SidebarBadge.js\";\nimport { SidebarCategory } from \"./SidebarCategory.js\";\n\nexport const navigationListItem = cva(\n \"flex items-center gap-2 px-[--padding-nav-item] py-1.5 rounded-lg hover:bg-accent transition-colors duration-300\",\n {\n variants: {\n isActive: {\n true: \"text-primary font-medium\",\n false: \"text-foreground/80\",\n },\n isMuted: {\n true: \"text-foreground/30\",\n false: \"\",\n },\n },\n defaultVariants: {\n isActive: false,\n },\n },\n);\n\nexport const DATA_ANCHOR_ATTR = \"data-anchor\";\n\nexport const SidebarItem = ({\n item,\n onRequestClose,\n}: {\n item: SidebarItemType;\n onRequestClose?: () => void;\n}) => {\n const { activeAnchor } = useViewportAnchor();\n const [searchParams] = useSearchParams();\n\n switch (item.type) {\n case \"category\":\n return (\n <SidebarCategory category={item} onRequestClose={onRequestClose} />\n );\n case \"doc\":\n return (\n <NavLink\n className={({ isActive }) => navigationListItem({ isActive })}\n to={joinPath(item.id)}\n onClick={onRequestClose}\n >\n {item.icon && <item.icon size={16} className=\"align-[-0.125em]\" />}\n {item.badge ? (\n <>\n <span className=\"truncate flex-1\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n item.label\n )}\n </NavLink>\n );\n case \"link\":\n return item.href.startsWith(\"#\") ? (\n <AnchorLink\n to={{ hash: item.href, search: searchParams.toString() }}\n {...{ [DATA_ANCHOR_ATTR]: item.href.slice(1) }}\n className={navigationListItem({\n isActive: item.href.slice(1) === activeAnchor,\n className: item.badge?.placement !== \"start\" && \"justify-between\",\n })}\n onClick={onRequestClose}\n >\n {item.badge ? (\n <>\n <span className=\"truncate\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n <span className=\"break-all\">{item.label}</span>\n )}\n </AnchorLink>\n ) : !item.href.startsWith(\"http\") ? (\n <NavLink\n className={navigationListItem({\n className: item.badge?.placement !== \"start\" && \"justify-between\",\n })}\n to={item.href}\n >\n {item.badge ? (\n <>\n <span className=\"truncate\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n <span className=\"break-all\">{item.label}</span>\n )}\n </NavLink>\n ) : (\n <a\n className={navigationListItem()}\n href={item.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={onRequestClose}\n >\n <span className=\"whitespace-normal\">{item.label}</span>\n {/* This prevents that the icon would be positioned in its own line if the text fills a line entirely */}\n <span className=\"whitespace-nowrap\">\n <ExternalLinkIcon className=\"inline -translate-y-0.5\" size={12} />\n </span>\n </a>\n );\n }\n};\n","import { useEffect } from \"react\";\nimport { useLocation } from \"react-router\";\nimport { useViewportAnchor } from \"../components/context/ViewportAnchorContext.js\";\nimport { DATA_ANCHOR_ATTR } from \"../components/navigation/SidebarItem.js\";\n\nconst scrollIntoViewIfNeeded = (\n element: Element | null,\n options: ScrollIntoViewOptions = { block: \"center\" },\n) => {\n if (!element) return;\n\n const rect = element.getBoundingClientRect();\n const isInView =\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <=\n (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n\n if (isInView) return;\n\n element.scrollIntoView(options);\n};\n\nexport const useScrollToAnchor = () => {\n const location = useLocation();\n const { setActiveAnchor } = useViewportAnchor();\n\n useEffect(() => {\n if (!location.hash) return;\n\n const hash = decodeURIComponent(location.hash.split(\"/\")[0]!.slice(1));\n\n const scrollToElement = () => {\n const element = document.getElementById(hash);\n const link = document.querySelector(`[${DATA_ANCHOR_ATTR}=\"${hash}\"]`);\n\n if (element) {\n element.scrollIntoView();\n scrollIntoViewIfNeeded(link);\n requestIdleCallback(() => setActiveAnchor(hash));\n return true;\n }\n\n return false;\n };\n\n if (!scrollToElement()) {\n const observer = new MutationObserver((_, obs) => {\n if (!scrollToElement()) return;\n obs.disconnect();\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n\n return () => observer.disconnect();\n }\n }, [location.hash, setActiveAnchor]);\n};\n","import { useEffect, useRef } from \"react\";\nimport { useLocation } from \"react-router\";\n\nexport const useScrollToTop = () => {\n const location = useLocation();\n const previousPath = useRef(location.pathname);\n\n useEffect(() => {\n if (previousPath.current === location.pathname) return;\n window.scrollTo(0, 0);\n previousPath.current = location.pathname;\n }, [location.pathname]);\n};\n","import { cn } from \"../util/cn.js\";\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","import type { LucideIcon } from \"lucide-react\";\nimport { type ReactElement } from \"react\";\nimport { type RouteObject } from \"react-router\";\nimport type { Sidebar } from \"../../config/validators/SidebarSchema.js\";\nimport { MdxComponentsType } from \"../util/MdxComponents.js\";\nimport { ZudokuContext, type ApiIdentity } from \"./ZudokuContext.js\";\n\nexport type ZudokuPlugin =\n | CommonPlugin\n | ProfileMenuPlugin\n | NavigationPlugin\n | ApiIdentityPlugin\n | SearchProviderPlugin;\n\nexport type { RouteObject };\n\nexport interface NavigationPlugin {\n getRoutes: () => RouteObject[];\n getSidebar?: (path: string) => Promise<Sidebar>;\n}\n\nexport interface ApiIdentityPlugin {\n getIdentities: (context: ZudokuContext) => Promise<ApiIdentity[]>;\n}\n\nexport interface SearchProviderPlugin {\n renderSearch: (o: {\n isOpen: boolean;\n onClose: () => void;\n }) => React.JSX.Element | null;\n}\n\nexport interface ProfileMenuPlugin {\n getProfileMenuItems: (context: ZudokuContext) => ProfileNavigationItem[];\n}\n\nexport type ProfileNavigationItem = {\n label: string;\n path?: string;\n weight?: number;\n category?: \"top\" | \"middle\" | \"bottom\";\n children?: ProfileNavigationItem[];\n icon?: LucideIcon;\n};\n\nexport interface CommonPlugin {\n initialize?: (\n context: ZudokuContext,\n ) => Promise<void | boolean> | void | boolean;\n getHead?: () => ReactElement | undefined;\n getMdxComponents?: () => MdxComponentsType;\n}\n\nexport const isProfileMenuPlugin = (\n obj: ZudokuPlugin,\n): obj is ProfileMenuPlugin =>\n \"getProfileMenuItems\" in obj && typeof obj.getProfileMenuItems === \"function\";\n\nexport const isNavigationPlugin = (\n obj: ZudokuPlugin,\n): obj is NavigationPlugin =>\n \"getRoutes\" in obj && typeof obj.getRoutes === \"function\";\n\nexport const isSearchPlugin = (\n obj: ZudokuPlugin,\n): obj is SearchProviderPlugin =>\n \"renderSearch\" in obj && typeof obj.renderSearch === \"function\";\n\nexport const needsInitialization = (obj: ZudokuPlugin): obj is CommonPlugin =>\n \"initialize\" in obj && typeof obj.initialize === \"function\";\n\nexport const hasHead = (obj: ZudokuPlugin): obj is CommonPlugin =>\n \"getHead\" in obj && typeof obj.getHead === \"function\";\n\nexport const isMdxProviderPlugin = (obj: ZudokuPlugin): obj is CommonPlugin =>\n \"getMdxComponents\" in obj && typeof obj.getMdxComponents === \"function\";\n\nexport const isApiIdentityPlugin = (\n obj: ZudokuPlugin,\n): obj is ApiIdentityPlugin =>\n \"getIdentities\" in obj && typeof obj.getIdentities === \"function\";\n","import { CircleXIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { cn } from \"../util/cn.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\n\nconst COLOR_MAP = {\n info: \"bg-blue-500\",\n note: \"bg-gray-500\",\n tip: \"bg-green-600\",\n caution: \"bg-orange-500\",\n danger: \"bg-rose-500\",\n} as const;\n\nexport const Banner = () => {\n const { page } = useZudoku();\n const [isBannerOpen, setIsBannerOpen] = useState(true);\n\n if (!page?.banner || !isBannerOpen) {\n return <style>{`:root { --banner-height: 0px; }`}</style>;\n }\n\n const mappedColor =\n page.banner.color && page.banner.color in COLOR_MAP\n ? COLOR_MAP[page.banner.color as keyof typeof COLOR_MAP]\n : !page.banner.color\n ? \"bg-primary\"\n : undefined;\n\n const style = !mappedColor ? { backgroundColor: page.banner.color } : {};\n\n return (\n <div\n className={cn(\n \"relative text-primary-foreground text-sm font-medium px-4 py-2 flex gap-2 items-center\",\n mappedColor,\n )}\n style={style}\n >\n <div className=\"w-full\">{page.banner.message}</div>\n {page.banner.dismissible && (\n <button\n type=\"button\"\n className=\"md:absolute md:right-4 -m-1.5 p-1.5 hover:bg-accent-foreground/10 rounded-md\"\n onClick={() => setIsBannerOpen(false)}\n >\n <CircleXIcon size={16} />\n </button>\n )}\n </div>\n );\n};\n","import { SearchIcon } from \"lucide-react\";\nimport { Suspense, useCallback, useEffect, useState } from \"react\";\nimport { isSearchPlugin } from \"../core/plugins.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\n\nexport const Search = ({ className }: { className?: string }) => {\n const ctx = useZudoku();\n const [isOpen, setIsOpen] = useState(false);\n\n const onClose = useCallback(() => setIsOpen(false), []);\n\n useEffect(() => {\n if (isOpen) {\n return;\n }\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key === \"k\" && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n setIsOpen(true);\n }\n }\n\n window.addEventListener(\"keydown\", onKeyDown);\n\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [isOpen, setIsOpen]);\n\n const searchPlugin = ctx.plugins.find(isSearchPlugin);\n\n if (!searchPlugin) {\n return null;\n }\n\n return (\n <div className={className}>\n <button\n type=\"button\"\n onClick={() => setIsOpen(true)}\n className=\"flex items-center border border-input hover:bg-accent hover:text-accent-foreground p-4 relative h-8 justify-start rounded-lg bg-background text-sm text-muted-foreground shadow-none w-full sm:w-72\"\n >\n <div className=\"flex items-center gap-2 flex-grow\">\n <SearchIcon size={14} />\n Search\n </div>\n <kbd className=\"absolute right-[0.3rem] top-[0.3rem] hidden h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[11px] font-medium opacity-100 sm:flex\">\n ⌘K\n </kbd>\n </button>\n <Suspense fallback={null}>\n {searchPlugin.renderSearch({\n isOpen,\n onClose,\n })}\n </Suspense>\n </div>\n );\n};\n","import { MoonStarIcon, SunIcon } from \"lucide-react\";\nimport { useTheme } from \"next-themes\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { ClientOnly } from \"./ClientOnly.js\";\n\nexport const ThemeSwitch = () => {\n const { resolvedTheme, setTheme } = useTheme();\n const ThemeIcon = resolvedTheme === \"dark\" ? MoonStarIcon : SunIcon;\n\n return (\n <ClientOnly>\n <Button\n variant=\"ghost\"\n aria-label={\n resolvedTheme === \"dark\"\n ? \"Switch to light mode\"\n : \"Switch to dark mode\"\n }\n className=\"p-2.5 -m-2.5 rounded-full\"\n onClick={() => setTheme(resolvedTheme === \"dark\" ? \"light\" : \"dark\")}\n >\n <ThemeIcon size={18} />\n </Button>\n </ClientOnly>\n );\n};\n","import { cx } from \"class-variance-authority\";\nimport { Suspense } from \"react\";\nimport { NavLink, useNavigation } from \"react-router\";\nimport { TopNavigationItem } from \"../../config/validators/common.js\";\nimport { useAuth } from \"../authentication/hook.js\";\nimport { ZudokuError } from \"../util/invariant.js\";\nimport { joinPath } from \"../util/joinPath.js\";\nimport { useCurrentNavigation, useZudoku } from \"./context/ZudokuContext.js\";\nimport { traverseSidebar } from \"./navigation/utils.js\";\n\nexport const isHiddenItem =\n (isAuthenticated?: boolean) =>\n (item: { display?: \"auth\" | \"anon\" | \"always\" }) => {\n return (\n (item.display === \"auth\" && isAuthenticated) ||\n (item.display === \"anon\" && !isAuthenticated) ||\n !item.display ||\n item.display === \"always\"\n );\n };\n\nexport const TopNavigation = () => {\n const { topNavigation } = useZudoku();\n const { isAuthenticated } = useAuth();\n\n // Hide top nav if there is only one item\n if (topNavigation.length <= 1) {\n return <style>{`:root { --top-nav-height: 0px; }`}</style>;\n }\n\n return (\n <Suspense>\n <nav className=\"hidden lg:block border-b text-sm px-12 h-[--top-nav-height]\">\n <ul className=\"flex flex-row items-center gap-8\">\n {topNavigation.filter(isHiddenItem(isAuthenticated)).map((item) => (\n <li key={item.id}>\n <TopNavItem {...item} />\n </li>\n ))}\n </ul>\n </nav>\n </Suspense>\n );\n};\n\nexport const TopNavItem = ({\n id,\n label,\n default: defaultLink,\n}: TopNavigationItem) => {\n const { sidebars } = useZudoku();\n const currentSidebar = sidebars[id];\n const currentNav = useCurrentNavigation();\n const isNavigating = Boolean(useNavigation().location);\n const isActive = currentNav.topNavItem?.id === id && !isNavigating;\n\n // TODO: This is a bit of a hack to get the first link in the sidebar\n // We should really process this when we load the config so we can validate\n // that the sidebar is actually set. In this case we just fall back to linking\n // to the id if we can't resolve a sidebar.\n const first =\n defaultLink ??\n (currentSidebar\n ? traverseSidebar(currentSidebar, (item) => {\n if (item.type === \"doc\") return joinPath(item.id);\n })\n : joinPath(id));\n\n if (!first) {\n throw new ZudokuError(\"Page not found.\", {\n developerHint: `No links found in top navigation for '${id}'. Check that the sidebar isn't empty or that a default link is set.`,\n });\n }\n\n return (\n // We don't use isActive here because it has to be inside the sidebar,\n // the top nav id doesn't necessarily start with the sidebar id\n <NavLink\n className={({ isPending }) =>\n cx(\n \"block lg:py-3.5 font-medium -mb-px border-b-2\",\n isActive || isPending\n ? \"border-primary text-foreground\"\n : \"border-transparent text-foreground/75 hover:text-foreground hover:border-accent-foreground/25\",\n )\n }\n to={first}\n >\n {label}\n </NavLink>\n );\n};\n","import { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { MenuIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { useAuth } from \"../authentication/hook.js\";\nimport {\n Drawer,\n DrawerContent,\n DrawerTitle,\n DrawerTrigger,\n} from \"../ui/Drawer.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\nimport { Search } from \"./Search.js\";\nimport { ThemeSwitch } from \"./ThemeSwitch.js\";\nimport { isHiddenItem, TopNavItem } from \"./TopNavigation.js\";\n\nexport const MobileTopNavigation = () => {\n const { topNavigation } = useZudoku();\n const { isAuthenticated } = useAuth();\n const [drawerOpen, setDrawerOpen] = useState(false);\n\n return (\n <Drawer\n direction=\"right\"\n open={drawerOpen}\n onOpenChange={(open) => setDrawerOpen(open)}\n >\n <div className=\"flex lg:hidden justify-self-end\">\n <DrawerTrigger className=\"lg:hidden\">\n <MenuIcon size={22} />\n </DrawerTrigger>\n </div>\n <DrawerContent\n className=\"lg:hidden h-[100dvh] right-0 left-auto w-[320px] rounded-none\"\n aria-describedby={undefined}\n >\n <div className=\"p-4 overflow-y-auto overscroll-none\">\n <VisuallyHidden>\n <DrawerTitle>Navigation</DrawerTitle>\n </VisuallyHidden>\n <Search className=\"flex p-4\" />\n <ul className=\"flex flex-col items-center gap-4 p-4\">\n <li>\n <ThemeSwitch />\n </li>\n {topNavigation.filter(isHiddenItem(isAuthenticated)).map((item) => (\n <li key={item.label}>\n <button onClick={() => setDrawerOpen(false)}>\n <TopNavItem {...item} />\n </button>\n </li>\n ))}\n </ul>\n </div>\n </DrawerContent>\n </Drawer>\n );\n};\n","import { memo } from \"react\";\nimport { Link } from \"react-router\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { Skeleton } from \"zudoku/ui/Skeleton.js\";\nimport { useAuth } from \"../authentication/hook.js\";\nimport { isProfileMenuPlugin, ProfileNavigationItem } from \"../core/plugins.js\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"../ui/DropdownMenu.js\";\nimport { joinPath } from \"../util/joinPath.js\";\nimport { Banner } from \"./Banner.js\";\nimport { ClientOnly } from \"./ClientOnly.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\nimport { MobileTopNavigation } from \"./MobileTopNavigation.js\";\nimport { Search } from \"./Search.js\";\nimport { Slotlet } from \"./SlotletProvider.js\";\nimport { ThemeSwitch } from \"./ThemeSwitch.js\";\nimport { TopNavigation } from \"./TopNavigation.js\";\n\nconst RecursiveMenu = ({ item }: { item: ProfileNavigationItem }) => {\n return item.children ? (\n <DropdownMenuSub key={item.label}>\n <DropdownMenuSubTrigger>{item.label}</DropdownMenuSubTrigger>\n <DropdownMenuPortal>\n <DropdownMenuSubContent>\n {item.children.map((item, i) => (\n // eslint-disable-next-line react/no-array-index-key\n <RecursiveMenu key={i} item={item} />\n ))}\n </DropdownMenuSubContent>\n </DropdownMenuPortal>\n </DropdownMenuSub>\n ) : (\n <Link to={item.path ?? \"\"}>\n <DropdownMenuItem key={item.label} className=\"flex gap-2\">\n {item.icon && (\n <item.icon size={16} strokeWidth={1} absoluteStrokeWidth />\n )}\n {item.label}\n </DropdownMenuItem>\n </Link>\n );\n};\n\nexport const Header = memo(function HeaderInner() {\n const auth = useAuth();\n const { isAuthenticated, profile, isAuthEnabled } = useAuth();\n const context = useZudoku();\n const { page, plugins } = context;\n\n const accountItems = plugins\n .filter((p) => isProfileMenuPlugin(p))\n .flatMap((p) => p.getProfileMenuItems(context))\n .sort((i) => i.weight ?? 0);\n\n return (\n <header className=\"sticky lg:top-0 z-10 bg-background/80 backdrop-blur w-full\">\n <Banner />\n <div className=\"max-w-screen-2xl mx-auto\">\n <div className=\"grid grid-cols-[1fr_auto] lg:grid-cols-[calc(var(--side-nav-width))_1fr] lg:gap-12 items-center border-b px-4 lg:px-12 h-[--top-header-height]\">\n <div className=\"flex\">\n <Link to=\"/\">\n <div className=\"flex items-center gap-3.5\">\n {page?.logo && (\n <>\n <img\n src={\n /https?:\\/\\//.test(page.logo.src.light)\n ? page.logo.src.light\n : joinPath(\n import.meta.env.BASE_URL,\n page.logo.src.light,\n )\n }\n alt={page.logo.alt ?? page.pageTitle}\n style={{ width: page.logo.width }}\n className=\"h-10 dark:hidden\"\n loading=\"lazy\"\n />\n <img\n src={\n /https?:\\/\\//.test(page.logo.src.dark)\n ? page.logo.src.dark\n : joinPath(\n import.meta.env.BASE_URL,\n page.logo.src.dark,\n )\n }\n alt={page.logo.alt ?? page.pageTitle}\n style={{ width: page.logo.width }}\n className=\"h-10 hidden dark:block\"\n loading=\"lazy\"\n />\n </>\n )}\n <span className=\"font-bold text-2xl text-foreground/85 tracking-wide\">\n {page?.pageTitle}\n </span>\n </div>\n </Link>\n </div>\n <div className=\"grid grid-cols-1 lg:grid-cols-[--sidecar-grid-cols] items-center gap-8\">\n <div className=\"w-full justify-center hidden lg:flex\">\n <Search />\n </div>\n\n <MobileTopNavigation />\n <div className=\"hidden lg:flex items-center justify-self-end text-sm gap-2\">\n <Slotlet name=\"head-navigation-start\" />\n {isAuthEnabled && (\n <ClientOnly\n fallback={<Skeleton className=\"rounded h-5 w-24 mr-4\" />}\n >\n {!isAuthenticated ? (\n <Button variant=\"ghost\" onClick={() => auth.login()}>\n Login\n </Button>\n ) : (\n Object.values(accountItems).length > 0 && (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\">\n {profile?.name ? `${profile.name}` : \"My Account\"}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"w-56\">\n <DropdownMenuLabel>\n {profile?.name ? `${profile.name}` : \"My Account\"}\n {profile?.email && (\n <div className=\"font-normal text-muted-foreground\">\n {profile.email}\n </div>\n )}\n </DropdownMenuLabel>\n {accountItems.filter((i) => i.category === \"top\")\n .length > 0 && <DropdownMenuSeparator />}\n {accountItems\n .filter((i) => i.category === \"top\")\n .map((i) => (\n <RecursiveMenu key={i.label} item={i} />\n ))}\n {accountItems.filter(\n (i) => !i.category || i.category === \"middle\",\n ).length > 0 && <DropdownMenuSeparator />}\n {accountItems\n .filter(\n (i) => !i.category || i.category === \"middle\",\n )\n .map((i) => (\n <RecursiveMenu key={i.label} item={i} />\n ))}\n {accountItems.filter((i) => i.category === \"bottom\")\n .length > 0 && <DropdownMenuSeparator />}\n {accountItems\n .filter((i) => i.category === \"bottom\")\n .map((i) => (\n <RecursiveMenu key={i.label} item={i} />\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n )}\n </ClientOnly>\n )}\n <ThemeSwitch />\n <Slotlet name=\"head-navigation-end\" />\n </div>\n </div>\n </div>\n <Slotlet name=\"top-navigation-before\" />\n <TopNavigation />\n <Slotlet name=\"top-navigation-after\" />\n </div>\n </header>\n );\n});\n","import { forwardRef, type PropsWithChildren } from \"react\";\nimport { cn } from \"../../util/cn.js\";\n\nexport const SidebarWrapper = forwardRef<\n HTMLDivElement,\n PropsWithChildren<{ pushMainContent?: boolean; className?: string }>\n>(({ children, className, pushMainContent }, ref) => (\n <nav\n // this data attribute is used in `Layout.tsx` to determine if side navigation\n // is present for the current page so the main content is pushed to the right\n // it's also important to set `peer` class here.\n // maybe this could be simplified by adjusting the layout\n data-navigation={String(pushMainContent)}\n className={cn(\n \"scrollbar peer hidden lg:flex flex-col fixed text-sm overflow-y-auto shrink-0\",\n \"-mx-[--padding-nav-item] pb-20 mt-[--padding-content-top]\",\n \"w-[--side-nav-width] h-[calc(100%-var(--header-height))] scroll-pt-2 gap-2\",\n className,\n )}\n ref={ref}\n >\n {children}\n </nav>\n));\n\nSidebarWrapper.displayName = \"SidebarWrapper\";\n","import { useRef } from \"react\";\n\nimport { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { DrawerContent, DrawerTitle } from \"../../ui/Drawer.js\";\nimport { useCurrentNavigation } from \"../context/ZudokuContext.js\";\nimport { Slotlet } from \"../SlotletProvider.js\";\nimport { SidebarItem } from \"./SidebarItem.js\";\nimport { SidebarWrapper } from \"./SidebarWrapper.js\";\n\nexport const Sidebar = ({\n onRequestClose,\n}: {\n onRequestClose?: () => void;\n}) => {\n const navRef = useRef<HTMLDivElement | null>(null);\n const navigation = useCurrentNavigation();\n\n return (\n <>\n <SidebarWrapper\n ref={navRef}\n pushMainContent={navigation.sidebar.length > 0}\n >\n <Slotlet name=\"zudoku-before-navigation\" />\n {navigation.sidebar.map((item) => (\n <SidebarItem key={item.label} item={item} />\n ))}\n <Slotlet name=\"zudoku-after-navigation\" />\n </SidebarWrapper>\n <DrawerContent\n className=\"lg:hidden h-[100dvh] left-0 w-[320px] rounded-none\"\n aria-describedby={undefined}\n >\n <div className=\"p-4 overflow-y-auto overscroll-none\">\n <VisuallyHidden>\n <DrawerTitle>Sidebar</DrawerTitle>\n </VisuallyHidden>\n {navigation.sidebar.map((item) => (\n <SidebarItem\n key={item.label}\n item={item}\n onRequestClose={onRequestClose}\n />\n ))}\n </div>\n </DrawerContent>\n </>\n );\n};\n","import { Helmet } from \"@zudoku/react-helmet-async\";\nimport { PanelLeftIcon } from \"lucide-react\";\nimport { Suspense, useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { Outlet, useLocation, useNavigation } from \"react-router\";\nimport { useSpinDelay } from \"spin-delay\";\nimport { Drawer, DrawerTrigger } from \"../ui/Drawer.js\";\nimport { cn } from \"../util/cn.js\";\nimport { useScrollToAnchor } from \"../util/useScrollToAnchor.js\";\nimport { useScrollToTop } from \"../util/useScrollToTop.js\";\nimport { useViewportAnchor } from \"./context/ViewportAnchorContext.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\nimport { Header } from \"./Header.js\";\nimport { Sidebar } from \"./navigation/Sidebar.js\";\nimport { Slotlet } from \"./SlotletProvider.js\";\nimport { Spinner } from \"./Spinner.js\";\n\nconst LoadingFallback = () => (\n <main className=\"grid h-[calc(100vh-var(--header-height))] place-items-center\">\n <Spinner />\n </main>\n);\n\nexport const Layout = ({ children }: { children?: ReactNode }) => {\n const location = useLocation();\n const { setActiveAnchor } = useViewportAnchor();\n const { meta, authentication } = useZudoku();\n\n useScrollToAnchor();\n useScrollToTop();\n\n const previousLocationPath = useRef(location.pathname);\n\n useEffect(() => {\n // Initialize the authentication plugin\n authentication?.onPageLoad?.();\n }, [authentication]);\n\n useEffect(() => {\n // always reset on location change\n if (location.pathname !== previousLocationPath.current) {\n setActiveAnchor(\"\");\n }\n previousLocationPath.current = location.pathname;\n }, [location.pathname, setActiveAnchor]);\n\n // Page transition is happening: https://reactrouter.com/start/framework/pending-ui#global-pending-navigation\n const isNavigating = Boolean(useNavigation().location);\n const showSpinner = useSpinDelay(isNavigating, {\n delay: 300,\n minDuration: 500,\n });\n const [isDrawerOpen, setDrawerOpen] = useState(false);\n\n return (\n <>\n {import.meta.env.MODE === \"standalone\" && (\n <style>{`:root { --top-nav-height: 0px; }`}</style>\n )}\n <Helmet titleTemplate={meta?.title}>\n {meta?.description && (\n <meta name=\"description\" content={meta.description} />\n )}\n {meta?.favicon && <link rel=\"icon\" href={meta.favicon} />}\n </Helmet>\n <Slotlet name=\"layout-before-head\" />\n <Header />\n <Slotlet name=\"layout-after-head\" />\n\n <div className=\"w-full max-w-screen-2xl mx-auto px-4 lg:px-12\">\n {showSpinner ? (\n <LoadingFallback />\n ) : (\n <Suspense fallback={<LoadingFallback />}>\n <Drawer\n direction=\"left\"\n open={isDrawerOpen}\n onOpenChange={(open) => setDrawerOpen(open)}\n >\n <Sidebar onRequestClose={() => setDrawerOpen(false)} />\n <div\n className={cn(\n \"lg:hidden -mx-10 px-10 py-2 sticky bg-background/80 backdrop-blur z-10 top-0 left-0 right-0 border-b\",\n \"peer-data-[navigation=false]:hidden\",\n )}\n >\n <DrawerTrigger className=\"flex items-center gap-2\">\n <PanelLeftIcon size={16} strokeWidth={1.5} />\n <span className=\"text-sm\">Menu</span>\n </DrawerTrigger>\n </div>\n <main\n className={cn(\n \"h-full dark:border-white/10 translate-x-0\",\n \"lg:overflow-visible\",\n // This works in tandem with the `SidebarWrapper` component\n \"lg:peer-data-[navigation=true]:w-[calc(100%-var(--side-nav-width))]\",\n \"lg:peer-data-[navigation=true]:translate-x-[--side-nav-width] lg:peer-data-[navigation=true]:pl-12\",\n )}\n >\n <Slotlet name=\"zudoku-before-content\" />\n {children ?? <Outlet />}\n <Slotlet name=\"zudoku-after-content\" />\n </main>\n </Drawer>\n </Suspense>\n )}\n </div>\n </>\n );\n};\n","'use client';\nimport { createContext, Component, createElement, useContext, useState, useMemo, forwardRef } from 'react';\n\nconst ErrorBoundaryContext = createContext(null);\n\nconst initialState = {\n didCatch: false,\n error: null\n};\nclass ErrorBoundary extends Component {\n constructor(props) {\n super(props);\n this.resetErrorBoundary = this.resetErrorBoundary.bind(this);\n this.state = initialState;\n }\n static getDerivedStateFromError(error) {\n return {\n didCatch: true,\n error\n };\n }\n resetErrorBoundary() {\n const {\n error\n } = this.state;\n if (error !== null) {\n var _this$props$onReset, _this$props;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n (_this$props$onReset = (_this$props = this.props).onReset) === null || _this$props$onReset === void 0 ? void 0 : _this$props$onReset.call(_this$props, {\n args,\n reason: \"imperative-api\"\n });\n this.setState(initialState);\n }\n }\n componentDidCatch(error, info) {\n var _this$props$onError, _this$props2;\n (_this$props$onError = (_this$props2 = this.props).onError) === null || _this$props$onError === void 0 ? void 0 : _this$props$onError.call(_this$props2, error, info);\n }\n componentDidUpdate(prevProps, prevState) {\n const {\n didCatch\n } = this.state;\n const {\n resetKeys\n } = this.props;\n\n // There's an edge case where if the thing that triggered the error happens to *also* be in the resetKeys array,\n // we'd end up resetting the error boundary immediately.\n // This would likely trigger a second error to be thrown.\n // So we make sure that we don't check the resetKeys on the first call of cDU after the error is set.\n\n if (didCatch && prevState.error !== null && hasArrayChanged(prevProps.resetKeys, resetKeys)) {\n var _this$props$onReset2, _this$props3;\n (_this$props$onReset2 = (_this$props3 = this.props).onReset) === null || _this$props$onReset2 === void 0 ? void 0 : _this$props$onReset2.call(_this$props3, {\n next: resetKeys,\n prev: prevProps.resetKeys,\n reason: \"keys\"\n });\n this.setState(initialState);\n }\n }\n render() {\n const {\n children,\n fallbackRender,\n FallbackComponent,\n fallback\n } = this.props;\n const {\n didCatch,\n error\n } = this.state;\n let childToRender = children;\n if (didCatch) {\n const props = {\n error,\n resetErrorBoundary: this.resetErrorBoundary\n };\n if (typeof fallbackRender === \"function\") {\n childToRender = fallbackRender(props);\n } else if (FallbackComponent) {\n childToRender = createElement(FallbackComponent, props);\n } else if (fallback !== undefined) {\n childToRender = fallback;\n } else {\n throw error;\n }\n }\n return createElement(ErrorBoundaryContext.Provider, {\n value: {\n didCatch,\n error,\n resetErrorBoundary: this.resetErrorBoundary\n }\n }, childToRender);\n }\n}\nfunction hasArrayChanged() {\n let a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return a.length !== b.length || a.some((item, index) => !Object.is(item, b[index]));\n}\n\nfunction assertErrorBoundaryContext(value) {\n if (value == null || typeof value.didCatch !== \"boolean\" || typeof value.resetErrorBoundary !== \"function\") {\n throw new Error(\"ErrorBoundaryContext not found\");\n }\n}\n\nfunction useErrorBoundary() {\n const context = useContext(ErrorBoundaryContext);\n assertErrorBoundaryContext(context);\n const [state, setState] = useState({\n error: null,\n hasError: false\n });\n const memoized = useMemo(() => ({\n resetBoundary: () => {\n context.resetErrorBoundary();\n setState({\n error: null,\n hasError: false\n });\n },\n showBoundary: error => setState({\n error,\n hasError: true\n })\n }), [context.resetErrorBoundary]);\n if (state.hasError) {\n throw state.error;\n }\n return memoized;\n}\n\nfunction withErrorBoundary(component, errorBoundaryProps) {\n const Wrapped = forwardRef((props, ref) => createElement(ErrorBoundary, errorBoundaryProps, createElement(component, {\n ...props,\n ref\n })));\n\n // Format for display in DevTools\n const name = component.displayName || component.name || \"Unknown\";\n Wrapped.displayName = \"withErrorBoundary(\".concat(name, \")\");\n return Wrapped;\n}\n\nexport { ErrorBoundary, ErrorBoundaryContext, useErrorBoundary, withErrorBoundary };\n","import { ReactNode } from \"react\";\nimport { TopNavigationItem } from \"../../config/validators/common.js\";\nimport type { SidebarConfig } from \"../../config/validators/SidebarSchema.js\";\nimport { type AuthenticationProvider } from \"../authentication/authentication.js\";\nimport type { ComponentsContextType } from \"../components/context/ComponentsContext.js\";\nimport { Slotlets } from \"../components/SlotletProvider.js\";\nimport { joinPath } from \"../util/joinPath.js\";\nimport type { MdxComponentsType } from \"../util/MdxComponents.js\";\nimport {\n isApiIdentityPlugin,\n isNavigationPlugin,\n type NavigationPlugin,\n needsInitialization,\n type ZudokuPlugin,\n} from \"./plugins.js\";\n\nexport interface ApiIdentity {\n authorizeRequest: (request: Request) => Request;\n label: string;\n id: string;\n}\n\nexport type ApiKeyCache = \"api-keys\";\n\ntype Metadata = Partial<{\n title: string;\n description: string;\n logo: string;\n favicon: string;\n generator: string;\n applicationName: string;\n referrer: string;\n keywords: string[];\n authors: string[];\n creator: string;\n publisher: string;\n}>;\n\ntype Page = Partial<{\n pageTitle?: string;\n logo?: {\n src: {\n light: string;\n dark: string;\n };\n width?: string;\n alt?: string;\n };\n banner?: {\n message: ReactNode;\n color?: \"note\" | \"tip\" | \"info\" | \"caution\" | \"danger\" | (string & {});\n dismissible?: boolean;\n };\n}>;\n\nexport type ZudokuContextOptions = {\n metadata?: Metadata;\n page?: Page;\n authentication?: AuthenticationProvider;\n topNavigation?: TopNavigationItem[];\n sidebars?: SidebarConfig;\n plugins?: ZudokuPlugin[];\n slotlets?: Slotlets;\n mdx?: {\n components?: MdxComponentsType;\n };\n overrides?: ComponentsContextType;\n};\n\nexport class ZudokuContext {\n public plugins: NonNullable<ZudokuContextOptions[\"plugins\"]>;\n public sidebars: SidebarConfig;\n public topNavigation: NonNullable<ZudokuContextOptions[\"topNavigation\"]>;\n public meta: ZudokuContextOptions[\"metadata\"];\n public page: ZudokuContextOptions[\"page\"];\n public authentication?: ZudokuContextOptions[\"authentication\"];\n private navigationPlugins: NavigationPlugin[];\n\n constructor(config: ZudokuContextOptions) {\n this.plugins = config.plugins ?? [];\n this.topNavigation = config.topNavigation ?? [];\n this.sidebars = config.sidebars ?? {};\n this.navigationPlugins = this.plugins.filter(isNavigationPlugin);\n this.authentication = config.authentication;\n this.meta = config.metadata;\n this.page = config.page;\n }\n\n initialize = async (): Promise<void> => {\n await Promise.all(\n this.plugins\n .filter(needsInitialization)\n .map((plugin) => plugin.initialize?.(this)),\n );\n };\n\n getApiIdentities = async () => {\n const keys = await Promise.all(\n this.plugins\n .filter(isApiIdentityPlugin)\n .map((plugin) => plugin.getIdentities(this)),\n );\n\n return keys.flat();\n };\n\n getPluginSidebar = async (path: string) => {\n const navigations = await Promise.all(\n this.navigationPlugins.map((plugin) =>\n plugin.getSidebar?.(joinPath(path)),\n ),\n );\n\n return navigations.flatMap((nav) => nav ?? []);\n };\n\n signRequest = async (request: Request) => {\n if (!this.authentication) {\n throw new Error(\"No authentication provider configured\");\n }\n\n const accessToken = await this.authentication.getAccessToken();\n\n request.headers.set(\"Authorization\", `Bearer ${accessToken}`);\n\n return request;\n };\n}\n","import { FallbackProps } from \"react-error-boundary\";\nimport { ErrorAlert } from \"./ErrorAlert.js\";\n\nexport function TopLevelError({ error, resetErrorBoundary }: FallbackProps) {\n // Call resetErrorBoundary() to reset the error boundary and retry the render.\n\n return <ErrorAlert error={error} />;\n}\n","const root = globalThis;\n\nif (!root.requestIdleCallback || !root.cancelIdleCallback) {\n root.requestIdleCallback = (cb: IdleRequestCallback) => setTimeout(cb, 1);\n root.cancelIdleCallback = clearTimeout;\n}\n","import {\n createContext,\n useContext,\n type ComponentProps,\n type ComponentType,\n} from \"react\";\nimport { Header } from \"../Header.js\";\n\nexport const DEFAULT_COMPONENTS = {\n Header,\n};\n\nexport type ComponentsContextType = {\n Header?: ComponentType<ComponentProps<typeof Header>>;\n};\n\nconst ComponentsContext =\n createContext<Required<ComponentsContextType>>(DEFAULT_COMPONENTS);\n\nexport const ComponentsProvider = ComponentsContext.Provider;\n\nexport const useComponents = () => {\n return useContext(ComponentsContext);\n};\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport type { PropsWithChildren } from \"react\";\nimport { ZudokuContext } from \"../../core/ZudokuContext.js\";\nimport { ZudokuReactContext } from \"./ZudokuContext.js\";\n\nexport const ZudokuProvider = ({\n children,\n context,\n}: PropsWithChildren<{ context: ZudokuContext }>) => {\n useSuspenseQuery({\n queryFn: async () => {\n await context.initialize();\n return true;\n },\n queryKey: [\"zudoku-initialize\"],\n });\n\n return (\n <ZudokuReactContext.Provider value={context}>\n {children}\n </ZudokuReactContext.Provider>\n );\n};\n","import { MDXProvider } from \"@mdx-js/react\";\nimport { Helmet } from \"@zudoku/react-helmet-async\";\nimport { ThemeProvider } from \"next-themes\";\nimport {\n Fragment,\n memo,\n type PropsWithChildren,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { Outlet, useNavigation } from \"react-router\";\nimport { hasHead, isMdxProviderPlugin } from \"../core/plugins.js\";\nimport { ZudokuContext, ZudokuContextOptions } from \"../core/ZudokuContext.js\";\nimport { TopLevelError } from \"../errors/TopLevelError.js\";\nimport { StaggeredRenderContext } from \"../plugins/openapi/StaggeredRender.js\";\nimport { MdxComponents } from \"../util/MdxComponents.js\";\nimport \"../util/requestIdleCallbackPolyfill.js\";\nimport {\n ComponentsProvider,\n DEFAULT_COMPONENTS,\n} from \"./context/ComponentsContext.js\";\nimport { ViewportAnchorProvider } from \"./context/ViewportAnchorContext.js\";\nimport { ZudokuProvider } from \"./context/ZudokuProvider.js\";\nimport { SlotletProvider } from \"./SlotletProvider.js\";\n\nconst ZudokoInner = memo(\n ({ children, ...props }: PropsWithChildren<ZudokuContextOptions>) => {\n const components = useMemo(\n () => ({ ...DEFAULT_COMPONENTS, ...props.overrides }),\n [props.overrides],\n );\n\n const mdxComponents = useMemo(() => {\n const componentsFromPlugins = (props.plugins ?? [])\n .filter(isMdxProviderPlugin)\n .flatMap((plugin) =>\n plugin.getMdxComponents ? [plugin.getMdxComponents()] : [],\n );\n\n return {\n ...componentsFromPlugins.reduce(\n (acc, curr) => ({ ...acc, ...curr }),\n {},\n ),\n ...MdxComponents,\n ...props.mdx?.components,\n };\n }, [props.mdx?.components, props.plugins]);\n const { stagger } = useContext(StaggeredRenderContext);\n const [didNavigate, setDidNavigate] = useState(false);\n const staggeredValue = useMemo(\n () => (didNavigate ? { stagger: true } : { stagger }),\n [stagger, didNavigate],\n );\n const navigation = useNavigation();\n\n useEffect(() => {\n if (didNavigate) {\n return;\n }\n setDidNavigate(true);\n }, [didNavigate, navigation.location]);\n\n const [zudokuContext] = useState(() => new ZudokuContext(props));\n\n const heads = props.plugins\n ?.filter(hasHead)\n // eslint-disable-next-line react/no-array-index-key\n .map((plugin, i) => <Fragment key={i}>{plugin.getHead?.()}</Fragment>);\n\n return (\n <>\n <Helmet>{heads}</Helmet>\n <StaggeredRenderContext.Provider value={staggeredValue}>\n <ZudokuProvider context={zudokuContext}>\n <MDXProvider components={mdxComponents}>\n <ThemeProvider attribute=\"class\" disableTransitionOnChange>\n <ComponentsProvider value={components}>\n <SlotletProvider slotlets={props.slotlets}>\n <ViewportAnchorProvider>\n {children ?? <Outlet />}\n </ViewportAnchorProvider>\n </SlotletProvider>\n </ComponentsProvider>\n </ThemeProvider>\n </MDXProvider>\n </ZudokuProvider>\n </StaggeredRenderContext.Provider>\n </>\n );\n },\n);\n\nZudokoInner.displayName = \"ZudokoInner\";\n\nconst Zudoku = (props: ZudokuContextOptions) => {\n return (\n <ErrorBoundary FallbackComponent={TopLevelError}>\n <ZudokoInner {...props} />\n </ErrorBoundary>\n );\n};\nZudoku.displayName = \"Zudoku\";\n\nexport { Zudoku };\n","import { useMDXComponents as useMDXComponentsImport } from \"@mdx-js/react\";\nimport { Helmet } from \"@zudoku/react-helmet-async\";\nimport { Link as LinkImport } from \"react-router\";\nimport { useAuthState } from \"../authentication/state.js\";\nimport { RouterError as RouterErrorImport } from \"../errors/RouterError.js\";\nimport { ServerError as ServerErrorImport } from \"../errors/ServerError.js\";\nimport { Button as ButtonImport } from \"../ui/Button.js\";\nimport { Callout as CalloutImport } from \"../ui/Callout.js\";\nimport {\n Bootstrap as BootstrapImport,\n BootstrapStatic as BootstrapStaticImport,\n} from \"./Bootstrap.js\";\nimport { ClientOnly as ClientOnlyImport } from \"./ClientOnly.js\";\nimport { Layout as LayoutImport } from \"./Layout.js\";\nimport { Zudoku as ZudokuImport } from \"./Zudoku.js\";\nimport { useZudoku as useZudokuImport } from \"./context/ZudokuContext.js\";\nexport const useMDXComponents = /*@__PURE__*/ useMDXComponentsImport;\nexport const Layout = /*@__PURE__*/ LayoutImport;\nexport const RouterError = /*@__PURE__*/ RouterErrorImport;\nexport const ServerError = /*@__PURE__*/ ServerErrorImport;\nexport const Bootstrap = /*@__PURE__*/ BootstrapImport;\nexport const BootstrapStatic = /*@__PURE__*/ BootstrapStaticImport;\n\nexport const Head = /*@__PURE__*/ Helmet;\n\nexport const useZudoku = /*@__PURE__*/ useZudokuImport;\nexport const useAuth = /*@__PURE__*/ useAuthState;\nexport const Zudoku = /*@__PURE__*/ ZudokuImport;\n\nexport const Callout = /*@__PURE__*/ CalloutImport;\nexport const ClientOnly = /*@__PURE__*/ ClientOnlyImport;\nexport const Button = /*@__PURE__*/ ButtonImport;\nexport const Link: typeof LinkImport = /*@__PURE__*/ LinkImport;\n"],"names":["ServerError","error","jsx","ErrorAlert","QueryCache","_a","Subscribable","config","__privateAdd","_queries","__privateSet","client","options","state","queryKey","queryHash","hashQueryKeyByOptions","query","Query","__privateGet","queryInMap","notifyManager","filters","defaultedFilters","matchQuery","queries","event","listener","MutationCache","_mutations","_mutationId","mutation","Mutation","__privateWrapper","scope","scopeFor","mutations","x","firstPendingMutation","m","foundMutation","matchMutation","pausedMutations","noop","infiniteQueryBehavior","pages","context","direction","_c","_b","oldPages","_d","oldPageParams","_e","result","currentPage","fetchFn","cancelled","addSignalProperty","object","queryFn","ensureQueryFn","fetchPage","data","param","previous","queryFnContext","page","maxPages","addTo","addToStart","addToEnd","pageParamFn","getPreviousPageParam","getNextPageParam","oldData","remainingPages","pageParams","lastIndex","QueryClient","_queryCache","_mutationCache","_defaultOptions","_queryDefaults","_mutationDefaults","_mountCount","_unsubscribeFocus","_unsubscribeOnline","focusManager","focused","onlineManager","online","cachedData","defaultedOptions","resolveStaleTime","updater","prevData","functionalUpdate","queryCache","refetchFilters","cancelOptions","defaultedCancelOptions","promises","fetchOptions","promise","hashKey","defaults","queryDefault","partialMatchKey","mutationKey","skipToken","defaultTransformerFn","hydrate","dehydratedState","mutationCache","deserializeData","mutationOptions","meta","_ignored","serializedState","initialPromise","HydrationBoundary","children","queryClient","useQueryClient","hydrationQueue","setHydrationQueue","React","optionsRef","newQueries","existingQueries","dehydratedQuery","existingQuery","hydrationIsNewer","queryAlreadyQueued","prev","RouterProvider2","props","RouterProvider","ReactDOM","Bootstrap","router","StrictMode","QueryClientProvider","HelmetProvider","StaggeredRenderContext","BootstrapStatic","helmetContext","StaticRouterProvider","global","factory","exports","require$$0","this","react","defaultOptions","useIsSSR","isSSR","setIsSSR","useSpinDelay","loading","initialState","setState","timeout","delay","SidebarCategory","category","onRequestClose","isCategoryOpen","useIsCategoryOpen","hasInteracted","setHasInteracted","useState","isCollapsible","isCollapsed","isDefaultOpen","open","setOpen","isActive","useMatch","useEffect","ToggleButton","e","ChevronRightIcon","cn","jsxs","Collapsible","navigationListItem","NavLink","joinPath","item","SidebarItem","cva","DATA_ANCHOR_ATTR","activeAnchor","useViewportAnchor","searchParams","useSearchParams","Fragment","SidebarBadge","AnchorLink","ExternalLinkIcon","scrollIntoViewIfNeeded","element","rect","useScrollToAnchor","location","useLocation","setActiveAnchor","hash","scrollToElement","link","observer","_","obs","useScrollToTop","previousPath","useRef","Skeleton","className","isProfileMenuPlugin","obj","isNavigationPlugin","isSearchPlugin","needsInitialization","hasHead","isMdxProviderPlugin","isApiIdentityPlugin","COLOR_MAP","Banner","useZudoku","isBannerOpen","setIsBannerOpen","mappedColor","style","CircleXIcon","Search","ctx","isOpen","setIsOpen","onClose","useCallback","onKeyDown","searchPlugin","SearchIcon","Suspense","ThemeSwitch","resolvedTheme","setTheme","useTheme","ThemeIcon","MoonStarIcon","SunIcon","ClientOnly","Button","isHiddenItem","isAuthenticated","TopNavigation","topNavigation","useAuth","TopNavItem","id","label","defaultLink","sidebars","currentSidebar","currentNav","useCurrentNavigation","isNavigating","useNavigation","first","traverseSidebar","ZudokuError","isPending","cx","MobileTopNavigation","drawerOpen","setDrawerOpen","Drawer","DrawerTrigger","MenuIcon","DrawerContent","VisuallyHidden","DrawerTitle","RecursiveMenu","DropdownMenuSub","DropdownMenuSubTrigger","DropdownMenuPortal","DropdownMenuSubContent","i","Link","DropdownMenuItem","Header","memo","auth","profile","isAuthEnabled","plugins","accountItems","p","Slotlet","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","SidebarWrapper","forwardRef","pushMainContent","ref","Sidebar","navRef","navigation","LoadingFallback","Spinner","Layout","authentication","previousLocationPath","showSpinner","isDrawerOpen","Helmet","PanelLeftIcon","Outlet","ErrorBoundaryContext","createContext","ErrorBoundary","Component","_this$props$onReset","_this$props","_len","args","_key","info","_this$props$onError","_this$props2","prevProps","prevState","didCatch","resetKeys","hasArrayChanged","_this$props$onReset2","_this$props3","fallbackRender","FallbackComponent","fallback","childToRender","createElement","a","b","index","ZudokuContext","__publicField","plugin","path","nav","request","accessToken","TopLevelError","resetErrorBoundary","root","cb","DEFAULT_COMPONENTS","ComponentsContext","ComponentsProvider","ZudokuProvider","useSuspenseQuery","ZudokuReactContext","ZudokoInner","components","useMemo","mdxComponents","acc","curr","MdxComponents","stagger","useContext","didNavigate","setDidNavigate","staggeredValue","zudokuContext","heads","MDXProvider","ThemeProvider","SlotletProvider","ViewportAnchorProvider","Zudoku","useMDXComponents","useMDXComponentsImport","LayoutImport","RouterError","RouterErrorImport","ServerErrorImport","BootstrapImport","BootstrapStaticImport","Head","useZudokuImport","useAuthState","ZudokuImport","Callout","CalloutImport","ClientOnlyImport","ButtonImport","LinkImport"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,9,25]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zudoku",
3
- "version": "0.23.0",
3
+ "version": "0.23.1",
4
4
  "type": "module",
5
5
  "homepage": "https://zudoku.dev",
6
6
  "repository": {
@@ -66,7 +66,7 @@ export const Header = memo(function HeaderInner() {
66
66
  <header className="sticky lg:top-0 z-10 bg-background/80 backdrop-blur w-full">
67
67
  <Banner />
68
68
  <div className="max-w-screen-2xl mx-auto">
69
- <div className="grid grid-cols-2 lg:grid-cols-[calc(var(--side-nav-width))_1fr] lg:gap-12 items-center border-b px-10 lg:px-12 h-[--top-header-height]">
69
+ <div className="grid grid-cols-[1fr_auto] lg:grid-cols-[calc(var(--side-nav-width))_1fr] lg:gap-12 items-center border-b px-4 lg:px-12 h-[--top-header-height]">
70
70
  <div className="flex">
71
71
  <Link to="/">
72
72
  <div className="flex items-center gap-3.5">
@@ -66,7 +66,7 @@ export const Layout = ({ children }: { children?: ReactNode }) => {
66
66
  <Header />
67
67
  <Slotlet name="layout-after-head" />
68
68
 
69
- <div className="w-full max-w-screen-2xl mx-auto px-10 lg:px-12">
69
+ <div className="w-full max-w-screen-2xl mx-auto px-4 lg:px-12">
70
70
  {showSpinner ? (
71
71
  <LoadingFallback />
72
72
  ) : (
@@ -33,7 +33,7 @@ export const MobileTopNavigation = () => {
33
33
  className="lg:hidden h-[100dvh] right-0 left-auto w-[320px] rounded-none"
34
34
  aria-describedby={undefined}
35
35
  >
36
- <div className="p-6 overflow-y-auto overscroll-none">
36
+ <div className="p-4 overflow-y-auto overscroll-none">
37
37
  <VisuallyHidden>
38
38
  <DrawerTitle>Navigation</DrawerTitle>
39
39
  </VisuallyHidden>
@@ -31,7 +31,7 @@ export const Sidebar = ({
31
31
  className="lg:hidden h-[100dvh] left-0 w-[320px] rounded-none"
32
32
  aria-describedby={undefined}
33
33
  >
34
- <div className="p-6 overflow-y-auto overscroll-none">
34
+ <div className="p-4 overflow-y-auto overscroll-none">
35
35
  <VisuallyHidden>
36
36
  <DrawerTitle>Sidebar</DrawerTitle>
37
37
  </VisuallyHidden>