zudoku 0.32.1 → 0.32.3
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.
- package/dist/app/tailwind.js +6 -0
- package/dist/app/tailwind.js.map +1 -1
- package/dist/config/validators/InputSidebarSchema.d.ts +15 -15
- package/dist/config/validators/InputSidebarSchema.js +10 -1
- package/dist/config/validators/InputSidebarSchema.js.map +1 -1
- package/dist/config/validators/common.d.ts +40 -40
- package/dist/config/validators/icon-types.d.ts +1 -1
- package/dist/config/validators/validate.d.ts +19 -19
- package/dist/lib/components/Header.js +2 -2
- package/dist/lib/components/Header.js.map +1 -1
- package/dist/lib/components/Layout.js +1 -1
- package/dist/lib/components/Layout.js.map +1 -1
- package/dist/lib/components/TopNavigation.js +3 -2
- package/dist/lib/components/TopNavigation.js.map +1 -1
- package/dist/lib/components/context/ZudokuContext.d.ts +1 -1
- package/dist/lib/components/index.d.ts +1 -0
- package/dist/lib/components/index.js +2 -0
- package/dist/lib/components/index.js.map +1 -1
- package/dist/lib/components/navigation/SidebarBadge.d.ts +2 -0
- package/dist/lib/components/navigation/SidebarBadge.js +3 -1
- package/dist/lib/components/navigation/SidebarBadge.js.map +1 -1
- package/dist/lib/components/navigation/SidebarItem.js +1 -1
- package/dist/lib/components/navigation/SidebarItem.js.map +1 -1
- package/dist/lib/components/navigation/SidebarWrapper.js +1 -1
- package/dist/lib/components/navigation/SidebarWrapper.js.map +1 -1
- package/dist/lib/oas/graphql/index.js +3 -1
- package/dist/lib/oas/graphql/index.js.map +1 -1
- package/dist/lib/plugins/api-catalog/Catalog.d.ts +2 -2
- package/dist/lib/plugins/api-catalog/Catalog.js +11 -24
- package/dist/lib/plugins/api-catalog/Catalog.js.map +1 -1
- package/dist/lib/plugins/api-catalog/index.d.ts +1 -0
- package/dist/lib/plugins/api-catalog/index.js +37 -8
- package/dist/lib/plugins/api-catalog/index.js.map +1 -1
- package/dist/lib/plugins/markdown/MdxPage.js +1 -1
- package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
- package/dist/lib/plugins/openapi/Sidecar.js +1 -1
- package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
- package/dist/lib/plugins/openapi/SidecarExamples.js +2 -2
- package/dist/lib/plugins/openapi/SidecarExamples.js.map +1 -1
- package/dist/lib/plugins/openapi/graphql/gql.js +0 -11
- package/dist/lib/plugins/openapi/graphql/gql.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js +1 -1
- package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js.map +1 -1
- package/dist/lib/ui/Badge.d.ts +1 -1
- package/dist/lib/ui/Button.d.ts +1 -1
- package/dist/lib/ui/Command.d.ts +1 -1
- package/dist/lib/ui/SyntaxHighlight.d.ts +14 -0
- package/dist/lib/{components → ui}/SyntaxHighlight.js +9 -6
- package/dist/lib/ui/SyntaxHighlight.js.map +1 -0
- package/dist/lib/ui/util.d.ts +2 -0
- package/dist/lib/ui/util.js +3 -0
- package/dist/lib/ui/util.js.map +1 -0
- package/dist/lib/util/MdxComponents.js +1 -1
- package/dist/lib/util/MdxComponents.js.map +1 -1
- package/dist/vite/config.js +4 -14
- package/dist/vite/config.js.map +1 -1
- package/dist/vite/plugin-api.js +2 -2
- package/dist/vite/plugin-api.js.map +1 -1
- package/dist/vite/plugin-config-reload.js +2 -1
- package/dist/vite/plugin-config-reload.js.map +1 -1
- package/dist/vite/plugin-config.js +5 -2
- package/dist/vite/plugin-config.js.map +1 -1
- package/lib/{AuthenticationPlugin-_YVa673u.js → AuthenticationPlugin-BlxA4Mbn.js} +4 -4
- package/lib/{AuthenticationPlugin-_YVa673u.js.map → AuthenticationPlugin-BlxA4Mbn.js.map} +1 -1
- package/lib/{CategoryHeading-MYL1u_6K.js → CategoryHeading-DpB47wvk.js} +3 -3
- package/lib/{CategoryHeading-MYL1u_6K.js.map → CategoryHeading-DpB47wvk.js.map} +1 -1
- package/lib/{Markdown-8mv9nhGd.js → Markdown-Cr9sYpR_.js} +4800 -4729
- package/lib/Markdown-Cr9sYpR_.js.map +1 -0
- package/lib/{MdxPage-GM1T5jmO.js → MdxPage-Dt-UEQl8.js} +10 -10
- package/lib/MdxPage-Dt-UEQl8.js.map +1 -0
- package/lib/{OasProvider-IS9wBrb7.js → OasProvider-WVtvHP5H.js} +6 -6
- package/lib/{OasProvider-IS9wBrb7.js.map → OasProvider-WVtvHP5H.js.map} +1 -1
- package/lib/{OperationList-BTmRbbXk.js → OperationList-DhOwupvv.js} +18 -19
- package/lib/{OperationList-BTmRbbXk.js.map → OperationList-DhOwupvv.js.map} +1 -1
- package/lib/Select-D9hI1G-y.js +223 -0
- package/lib/{Select-D9CKL33X.js.map → Select-D9hI1G-y.js.map} +1 -1
- package/lib/{SlotletProvider-D0mFmGJu.js → SlotletProvider-CEfNOA8i.js} +53 -53
- package/lib/{SlotletProvider-D0mFmGJu.js.map → SlotletProvider-CEfNOA8i.js.map} +1 -1
- package/lib/{Spinner-BlzrEEk1.js → Spinner-1KrEmx1V.js} +3 -3
- package/lib/{Spinner-BlzrEEk1.js.map → Spinner-1KrEmx1V.js.map} +1 -1
- package/lib/{SyntaxHighlight-B0L4SC_N.js → SyntaxHighlight-CcnUjERD.js} +445 -445
- package/lib/SyntaxHighlight-CcnUjERD.js.map +1 -0
- package/lib/{chunk-SYFQ2XB5-QijJrSf0.js → chunk-IR6S3I6Y-D_3UmFIn.js} +597 -597
- package/lib/chunk-IR6S3I6Y-D_3UmFIn.js.map +1 -0
- package/lib/{circular-DxaIIlWD.js → circular-v7K6lDDh.js} +1413 -1413
- package/lib/{circular-DxaIIlWD.js.map → circular-v7K6lDDh.js.map} +1 -1
- package/lib/context-DLCwaMXN.js +22 -0
- package/lib/{context-rwLGh-6_.js.map → context-DLCwaMXN.js.map} +1 -1
- package/lib/{createServer-DSQiPwjN.js → createServer-DMf6O2Rz.js} +3669 -3562
- package/lib/createServer-DMf6O2Rz.js.map +1 -0
- package/lib/{hook-C_t2ISLC.js → hook-CWwSAAlH.js} +384 -379
- package/lib/hook-CWwSAAlH.js.map +1 -0
- package/lib/index-Bn6Lc9tq.js +9 -0
- package/lib/index-Bn6Lc9tq.js.map +1 -0
- package/lib/index-CPNSgwSb.js +36 -0
- package/lib/{index-Djenk2Hj.js.map → index-CPNSgwSb.js.map} +1 -1
- package/lib/{index-BANyVRgL.js → index-Do_30Hpk.js} +78 -78
- package/lib/index-Do_30Hpk.js.map +1 -0
- package/lib/{index-B7mqiOei.js → index-Du5aNddU.js} +101 -101
- package/lib/index-Du5aNddU.js.map +1 -0
- package/lib/{index-CjJS0l4l.js → index-LNp6rxyU.js} +2 -2
- package/lib/{index-CjJS0l4l.js.map → index-LNp6rxyU.js.map} +1 -1
- package/lib/{index.esm-CrSoEshU.js → index.esm--gIChbWs.js} +3 -3
- package/lib/{index.esm-CrSoEshU.js.map → index.esm--gIChbWs.js.map} +1 -1
- package/lib/{index.esm-9-TF9KQB.js → index.esm-CQHE3GEU.js} +52 -53
- package/lib/{index.esm-9-TF9KQB.js.map → index.esm-CQHE3GEU.js.map} +1 -1
- package/lib/joinUrl-10po2Jdj.js +20 -0
- package/lib/{joinUrl-nLx9pD-Z.js.map → joinUrl-10po2Jdj.js.map} +1 -1
- package/lib/{jsx-runtime-Bdg6XQ1m.js → jsx-runtime-CYK1ROHF.js} +99 -99
- package/lib/{jsx-runtime-Bdg6XQ1m.js.map → jsx-runtime-CYK1ROHF.js.map} +1 -1
- package/lib/{mutation-Cm3O9f3X.js → mutation-B0wxqzSN.js} +26 -26
- package/lib/{mutation-Cm3O9f3X.js.map → mutation-B0wxqzSN.js.map} +1 -1
- package/lib/post-processors/removeExtensions.js +4 -4
- package/lib/ui/Accordion.js +1 -1
- package/lib/ui/ActionButton.js +2 -2
- package/lib/ui/Alert.js +2 -2
- package/lib/ui/AlertDialog.js +1 -1
- package/lib/ui/Badge.js +2 -2
- package/lib/ui/Breadcrumb.js +4 -4
- package/lib/ui/Button.js +2 -2
- package/lib/ui/Callout.js +4 -4
- package/lib/ui/Card.js +1 -1
- package/lib/ui/Carousel.js +1 -1
- package/lib/ui/Checkbox.js +2 -2
- package/lib/ui/Command.js +2 -2
- package/lib/ui/Dialog.js +1 -1
- package/lib/ui/Drawer.js +521 -543
- package/lib/ui/Drawer.js.map +1 -1
- package/lib/ui/DropdownMenu.js +1 -1
- package/lib/ui/Form.js +5 -5
- package/lib/ui/HoverCard.js +1 -1
- package/lib/ui/Input.js +1 -1
- package/lib/ui/Label.js +2 -2
- package/lib/ui/Pagination.js +10 -10
- package/lib/ui/Popover.js +1 -1
- package/lib/ui/Progress.js +1 -1
- package/lib/ui/RadioGroup.js +1 -1
- package/lib/ui/ScrollArea.js +1 -1
- package/lib/ui/Select.js +1 -1
- package/lib/ui/Skeleton.js +1 -1
- package/lib/ui/Slider.js +1 -1
- package/lib/ui/Switch.js +1 -1
- package/lib/ui/SyntaxHighlight.js +10 -0
- package/lib/ui/SyntaxHighlight.js.map +1 -0
- package/lib/ui/Tabs.js +1 -1
- package/lib/ui/Textarea.js +1 -1
- package/lib/ui/Toggle.js +2 -2
- package/lib/ui/ToggleGroup.js +1 -1
- package/lib/ui/Tooltip.js +1 -1
- package/lib/ui/util.js +6 -0
- package/lib/ui/util.js.map +1 -0
- package/lib/{useExposedProps-Bbf99zic.js → useExposedProps-RIvey2Oy.js} +2 -2
- package/lib/{useExposedProps-Bbf99zic.js.map → useExposedProps-RIvey2Oy.js.map} +1 -1
- package/lib/{useScrollToAnchor-BGEcH3HM.js → useScrollToAnchor-C-sRxs9o.js} +13 -9
- package/lib/useScrollToAnchor-C-sRxs9o.js.map +1 -0
- package/lib/zudoku.auth-auth0.js +1 -1
- package/lib/zudoku.auth-clerk.js +18 -18
- package/lib/zudoku.auth-openid.js +255 -295
- package/lib/zudoku.auth-openid.js.map +1 -1
- package/lib/zudoku.components.js +290 -283
- package/lib/zudoku.components.js.map +1 -1
- package/lib/zudoku.icons.js +1 -1
- package/lib/zudoku.plugin-api-catalog.js +91 -108
- package/lib/zudoku.plugin-api-catalog.js.map +1 -1
- package/lib/zudoku.plugin-api-keys.js +6 -6
- package/lib/zudoku.plugin-custom-pages.js +3 -3
- package/lib/zudoku.plugin-markdown.js +2 -2
- package/lib/zudoku.plugin-openapi.js +6 -6
- package/lib/zudoku.plugin-redirect.js +1 -1
- package/lib/zudoku.plugin-search-inkeep.js +9 -9
- package/package.json +49 -50
- package/src/app/tailwind.ts +6 -0
- package/src/lib/components/Header.tsx +3 -3
- package/src/lib/components/Layout.tsx +2 -2
- package/src/lib/components/TopNavigation.tsx +13 -9
- package/src/lib/components/index.ts +2 -0
- package/src/lib/components/navigation/SidebarBadge.tsx +4 -1
- package/src/lib/components/navigation/SidebarItem.tsx +1 -0
- package/src/lib/components/navigation/SidebarWrapper.tsx +1 -1
- package/src/lib/oas/graphql/index.ts +4 -1
- package/src/lib/plugins/api-catalog/Catalog.tsx +31 -94
- package/src/lib/plugins/api-catalog/index.tsx +54 -9
- package/src/lib/plugins/markdown/MdxPage.tsx +1 -1
- package/src/lib/plugins/openapi/Sidecar.tsx +1 -1
- package/src/lib/plugins/openapi/SidecarExamples.tsx +1 -2
- package/src/lib/plugins/openapi/graphql/gql.ts +9 -1
- package/src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx +1 -1
- package/src/lib/{components → ui}/SyntaxHighlight.tsx +23 -8
- package/src/lib/ui/util.tsx +3 -0
- package/src/lib/util/MdxComponents.tsx +1 -1
- package/dist/lib/components/SyntaxHighlight.d.ts +0 -12
- package/dist/lib/components/SyntaxHighlight.js.map +0 -1
- package/lib/Markdown-8mv9nhGd.js.map +0 -1
- package/lib/MdxPage-GM1T5jmO.js.map +0 -1
- package/lib/Select-D9CKL33X.js +0 -223
- package/lib/SyntaxHighlight-B0L4SC_N.js.map +0 -1
- package/lib/chunk-SYFQ2XB5-QijJrSf0.js.map +0 -1
- package/lib/context-rwLGh-6_.js +0 -22
- package/lib/createServer-DSQiPwjN.js.map +0 -1
- package/lib/hook-C_t2ISLC.js.map +0 -1
- package/lib/index-B7mqiOei.js.map +0 -1
- package/lib/index-BANyVRgL.js.map +0 -1
- package/lib/index-Djenk2Hj.js +0 -36
- package/lib/joinUrl-nLx9pD-Z.js +0 -20
- package/lib/useScrollToAnchor-BGEcH3HM.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zudoku.components.js","sources":["../../../node_modules/.pnpm/@tanstack+query-core@5.64.2/node_modules/@tanstack/query-core/build/modern/queryCache.js","../../../node_modules/.pnpm/@tanstack+query-core@5.64.2/node_modules/@tanstack/query-core/build/modern/mutationCache.js","../../../node_modules/.pnpm/@tanstack+query-core@5.64.2/node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../../node_modules/.pnpm/@tanstack+query-core@5.64.2/node_modules/@tanstack/query-core/build/modern/queryClient.js","../../../node_modules/.pnpm/@tanstack+query-core@5.64.2/node_modules/@tanstack/query-core/build/modern/hydration.js","../../../node_modules/.pnpm/@tanstack+react-query@5.64.2_react@19.0.0/node_modules/@tanstack/react-query/build/modern/HydrationBoundary.js","../src/lib/util/useLatest.ts","../src/lib/core/RouteGuard.tsx","../src/lib/errors/ServerError.tsx","../../../node_modules/.pnpm/react-router@7.1.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/react-router/dist/development/dom-export.mjs","../src/lib/plugins/openapi/StaggeredRender.tsx","../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/util/useScrollToTop.ts","../src/lib/ui/Skeleton.tsx","../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","../src/lib/components/ErrorPage.tsx","../src/lib/components/StatusPage.tsx","../../../node_modules/.pnpm/react-error-boundary@5.0.0_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":["// 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 Set();\n this.#scopes = /* @__PURE__ */ new Map();\n this.#mutationId = 0;\n }\n #mutations;\n #scopes;\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 this.#mutations.add(mutation);\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n scopedMutations.push(mutation);\n } else {\n this.#scopes.set(scope, [mutation]);\n }\n }\n this.notify({ type: \"added\", mutation });\n }\n remove(mutation) {\n if (this.#mutations.delete(mutation)) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n if (scopedMutations.length > 1) {\n const index = scopedMutations.indexOf(mutation);\n if (index !== -1) {\n scopedMutations.splice(index, 1);\n }\n } else if (scopedMutations[0] === mutation) {\n this.#scopes.delete(scope);\n }\n }\n }\n }\n this.notify({ type: \"removed\", mutation });\n }\n canRun(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const mutationsWithSameScope = this.#scopes.get(scope);\n const firstPendingMutation = mutationsWithSameScope?.find(\n (m) => m.state.status === \"pending\"\n );\n return !firstPendingMutation || firstPendingMutation === mutation;\n } else {\n return true;\n }\n }\n runNext(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const foundMutation = this.#scopes.get(scope)?.find((m) => m !== mutation && m.state.isPaused);\n return foundMutation?.continue() ?? Promise.resolve();\n } else {\n return Promise.resolve();\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.#mutations.forEach((mutation) => {\n this.notify({ type: \"removed\", mutation });\n });\n this.#mutations.clear();\n this.#scopes.clear();\n });\n }\n getAll() {\n return Array.from(this.#mutations);\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;\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 defaultedOptions = this.defaultQueryOptions(options);\n const query = this.#queryCache.build(this, defaultedOptions);\n const cachedData = query.state.data;\n if (cachedData === void 0) {\n return this.fetchQuery(options);\n }\n if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n void this.prefetchQuery(defaultedOptions);\n }\n return Promise.resolve(cachedData);\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","import { useEffect, useRef } from \"react\";\n\n// This hook is useful when you need to store a reference to a variable that changes over time,\n// but you don't want to re-run any callbacks that depend on that variable every time it changes.\n// By using a reference to the latest value, you can ensure that any callbacks only run when necessary,\n// without any unnecessary re-renders.\n\n// Note: It's safe to put the return value of this hook in a dependency array, because it won't change!\nexport const useLatest = <T>(current: T) => {\n const valueRef = useRef(current);\n valueRef.current = current;\n\n useEffect(() => {\n valueRef.current = current;\n }, [current]);\n\n return valueRef;\n};\n","import { useEffect } from \"react\";\nimport { matchPath, Outlet, useLocation } from \"react-router\";\nimport { useAuth } from \"../authentication/hook.js\";\nimport { useZudoku } from \"../components/context/ZudokuContext.js\";\nimport { ZudokuError } from \"../util/invariant.js\";\nimport { useLatest } from \"../util/useLatest.js\";\n\nexport const RouteGuard = () => {\n const auth = useAuth();\n const zudoku = useZudoku();\n const location = useLocation();\n const latestPath = useLatest(location.pathname);\n\n const isProtected = zudoku.options.protectedRoutes?.some((path) =>\n matchPath({ path, end: true }, location.pathname),\n );\n\n useEffect(() => {\n if (isProtected && !auth.isAuthenticated) {\n void zudoku.authentication?.signIn({\n redirectTo: latestPath.current,\n });\n }\n }, [isProtected, auth.isAuthenticated, zudoku.authentication, latestPath]);\n\n if (isProtected && !auth.isAuthenticated) {\n return null;\n }\n\n if (isProtected && !auth.isAuthEnabled) {\n throw new ZudokuError(\"Authentication is not enabled\", {\n title: \"Authentication is not enabled\",\n developerHint:\n \"To use protectedRoutes you need authentication to be enabled\",\n });\n }\n\n return <Outlet />;\n};\n","import { ErrorAlert } from \"./ErrorAlert.js\";\n\nexport function ServerError({ error }: { error: unknown }) {\n return <ErrorAlert error={error} />;\n}\n","/**\n * react-router v7.1.3\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-SYFQ2XB5.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 Children,\n createContext,\n ReactNode,\n useContext,\n useEffect,\n useState,\n} from \"react\";\n\nexport const StaggeredRenderContext = createContext({ stagger: false });\n\nconst StaggeredRender = ({ children }: { children: ReactNode[] }) => {\n const { stagger } = useContext(StaggeredRenderContext);\n const [renderAll, setRenderAll] = useState(!stagger);\n\n useEffect(() => {\n if (renderAll) {\n return;\n }\n\n const idle = requestIdleCallback(() => {\n setRenderAll(true);\n });\n\n return () => cancelIdleCallback(idle);\n }, [renderAll]);\n\n return !renderAll ? Children.toArray(children).slice(0, 3) : children;\n};\n\nexport default StaggeredRender;\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 { 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 const isNewPage = previousPath.current !== location.pathname;\n const hasAnchor = location.hash !== \"\";\n\n if (isNewPage && !hasAnchor) {\n window.scrollTo(0, 0);\n }\n\n previousPath.current = location.pathname;\n }, [location.pathname, location.hash]);\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 { 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 { MoonIcon, SunIcon } from \"lucide-react\";\nimport { useTheme } from \"next-themes\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { cn } from \"../util/cn.js\";\nimport { ClientOnly } from \"./ClientOnly.js\";\n\nexport const ThemeSwitch = () => {\n const { resolvedTheme, setTheme } = useTheme();\n\n return (\n <ClientOnly fallback={<Button variant=\"ghost\" size=\"icon\" />}>\n <button\n type=\"button\"\n className=\"flex rounded-full border p-0.5 gap-0.5 group\"\n onClick={() => setTheme(resolvedTheme === \"dark\" ? \"light\" : \"dark\")}\n aria-label={\n resolvedTheme === \"dark\"\n ? \"Switch to light mode\"\n : \"Switch to dark mode\"\n }\n >\n <div\n className={cn(\n \"border border-transparent rounded-full p-0.5 [&>svg>circle]:transition-colors [&>svg>path]:transition-transform transition-all [&>svg>path]:duration-200 [&>svg>circle]:duration-500 [&>svg>circle]:fill-transparent\",\n resolvedTheme === \"light\" && \"border-border bg-muted/50\",\n resolvedTheme === \"dark\" &&\n \"group-hover:[&>svg>path]:scale-110 group-hover:[&>svg>path]:-translate-x-[1px] group-hover:[&>svg>path]:-translate-y-[1px] group-hover:rotate-[15deg] \",\n )}\n >\n <SunIcon size={16} />\n </div>\n <div\n className={cn(\n \"border border-transparent rounded-full p-0.5 transition-transform transform-gpu duration-500\",\n resolvedTheme === \"dark\" &&\n \"border-border bg-muted [&>svg>path]:fill-white [&>svg>path]:stroke-transparent\",\n resolvedTheme === \"light\" &&\n \"group-hover:rotate-[-10deg] [&>svg>path]:stroke-currentColor\",\n )}\n >\n <MoonIcon size={16} />\n </div>\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 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\",\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 { joinUrl } from \"../util/joinUrl.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=\"border-b\">\n <div className=\"max-w-screen-2xl border-l border-r mx-auto grid grid-cols-[1fr_auto] lg:grid-cols-[calc(var(--side-nav-width))_1fr] lg:gap-12 items-center 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 : joinUrl(\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 : joinUrl(\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 <Slotlet name=\"head-navigation-end\" />\n <ThemeSwitch />\n </div>\n </div>\n </div>\n </div>\n <div className=\"border-b\">\n <div className=\"max-w-screen-2xl mx-auto border-l border-r\">\n <Slotlet name=\"top-navigation-before\" />\n <TopNavigation />\n <Slotlet name=\"top-navigation-after\" />\n </div>\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 border-r pr-10\",\n \"-mx-[--padding-nav-item] pb-20 pt-[--padding-content-top]\",\n \"w-[--side-nav-width] h-[calc(100%-var(--header-height))] scroll-pt-2 gap-2\",\n !pushMainContent && \"border-r-0\",\n className,\n )}\n ref={ref}\n >\n {children}\n </nav>\n));\n\nSidebarWrapper.displayName = \"SidebarWrapper\";\n","import { useEffect, useRef } from \"react\";\n\nimport { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { DrawerContent, DrawerTitle } from \"../../ui/Drawer.js\";\nimport { scrollIntoViewIfNeeded } from \"../../util/scrollIntoViewIfNeeded.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 useEffect(() => {\n const active = navRef.current?.querySelector('[aria-current=\"page\"]');\n scrollIntoViewIfNeeded(active ?? null);\n }, []);\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 border-l border-r\">\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","import type { ReactNode } from \"react\";\nimport { CategoryHeading } from \"./CategoryHeading.js\";\nimport { Heading } from \"./Heading.js\";\nimport { ProseClasses } from \"./Markdown.js\";\n\nexport const ErrorPage = ({\n title = \"An error occurred\",\n message,\n category,\n}: {\n title?: ReactNode;\n message?: ReactNode;\n category?: ReactNode;\n}) => {\n return (\n <div className={ProseClasses + \" h-full pt-[--padding-content-top]\"}>\n {category && <CategoryHeading>{category}</CategoryHeading>}\n {title && (\n <Heading level={1} className=\"flex gap-3.5 items-center\">\n {title}\n </Heading>\n )}\n <p>{message}</p>\n </div>\n );\n};\n","import type { ReactNode } from \"react\";\nimport { ErrorPage } from \"./ErrorPage.js\";\n\ntype StatusPageProps = {\n statusCode: number;\n message?: ReactNode;\n};\n\nconst getDefaultContent = (\n statusCode: number,\n): { title: string; message: string } => {\n switch (statusCode) {\n case 400:\n return {\n title: \"Bad Request\",\n message:\n \"The request could not be understood by the server due to malformed syntax.\",\n };\n case 403:\n return {\n title: \"Forbidden\",\n message: \"You don't have permission to access this resource.\",\n };\n case 404:\n return {\n title: \"Not Found\",\n message: \"The requested resource could not be found.\",\n };\n case 405:\n return {\n title: \"Method Not Allowed\",\n message:\n \"The request method is not supported for the requested resource.\",\n };\n case 414:\n return {\n title: \"Request URI Too Large\",\n message: \"The request URI is too large.\",\n };\n case 416:\n return {\n title: \"Range Not Satisfiable\",\n message: \"The server cannot satisfy the request range.\",\n };\n case 500:\n return {\n title: \"Internal Server Error\",\n message: \"An unexpected error occurred while processing your request.\",\n };\n case 501:\n return {\n title: \"Not Implemented\",\n message:\n \"The server does not support the functionality required to fulfill the request.\",\n };\n case 502:\n return {\n title: \"Bad Gateway\",\n message:\n \"The server received an invalid response from the upstream server.\",\n };\n case 503:\n return {\n title: \"Service Unavailable\",\n message: \"The server is temporarily unable to handle the request.\",\n };\n case 504:\n return {\n title: \"Gateway Timeout\",\n message:\n \"The server did not receive a timely response from the upstream server.\",\n };\n default:\n return {\n title: \"An error occurred\",\n message: \"Something went wrong while processing your request.\",\n };\n }\n};\n\nexport const StatusPage = ({ statusCode, message }: StatusPageProps) => {\n const defaultContent = getDefaultContent(statusCode);\n\n return (\n <ErrorPage\n title={defaultContent.title}\n message={message ?? defaultContent.message}\n category={statusCode}\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) => Promise<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 protectedRoutes?: string[];\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 readonly navigationPlugins: NavigationPlugin[];\n\n constructor(public readonly options: ZudokuContextOptions) {\n this.plugins = options.plugins ?? [];\n this.topNavigation = options.topNavigation ?? [];\n this.sidebars = options.sidebars ?? {};\n this.navigationPlugins = this.plugins.filter(isNavigationPlugin);\n this.authentication = options.authentication;\n this.meta = options.metadata;\n this.page = options.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 { useAuth as useAuthImport } from \"../authentication/hook.js\";\nimport { RouteGuard as RouteGuardImport } from \"../core/RouteGuard.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 {\n CACHE_KEYS as CACHE_KEYS_IMPORT,\n useCache as useCacheImport,\n} from \"./cache.js\";\nimport { ClientOnly as ClientOnlyImport } from \"./ClientOnly.js\";\nimport { useZudoku as useZudokuImport } from \"./context/ZudokuContext.js\";\nimport { Layout as LayoutImport } from \"./Layout.js\";\nimport { Markdown as MarkdownImport } from \"./Markdown.js\";\nimport { Spinner as SpinnerImport } from \"./Spinner.js\";\nimport { StatusPage as StatusPageImport } from \"./StatusPage.js\";\nimport { Zudoku as ZudokuImport } from \"./Zudoku.js\";\n\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;\nexport const RouteGuard = /*@__PURE__*/ RouteGuardImport;\n\nexport const Head = /*@__PURE__*/ Helmet;\n\nexport const useZudoku = /*@__PURE__*/ useZudokuImport;\nexport const useAuth = /*@__PURE__*/ useAuthImport;\nexport const useCache = /*@__PURE__*/ useCacheImport;\nexport const CACHE_KEYS = /*@__PURE__*/ CACHE_KEYS_IMPORT;\nexport const Zudoku = /*@__PURE__*/ ZudokuImport;\n\nexport const StatusPage = /*@__PURE__*/ StatusPageImport;\nexport const Callout = /*@__PURE__*/ CalloutImport;\nexport const Markdown = /*@__PURE__*/ MarkdownImport;\nexport const Spinner = /*@__PURE__*/ SpinnerImport;\nexport const ClientOnly = /*@__PURE__*/ ClientOnlyImport;\nexport const Button = /*@__PURE__*/ ButtonImport;\nexport const Link = /*@__PURE__*/ LinkImport;\n"],"names":["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","_scopes","_mutationId","mutation","Mutation","__privateWrapper","scope","scopeFor","scopedMutations","index","mutationsWithSameScope","firstPendingMutation","m","foundMutation","matchMutation","pausedMutations","x","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","defaultedOptions","cachedData","resolveStaleTime","updater","prevData","functionalUpdate","queryCache","refetchFilters","cancelOptions","defaultedCancelOptions","promises","fetchOptions","promise","hashKey","defaults","queryDefault","partialMatchKey","mutationKey","skipToken","defaultTransformerFn","hydrate","dehydratedState","mutationCache","deserializeData","mutations","mutationOptions","meta","_ignored","serializedState","initialPromise","HydrationBoundary","children","queryClient","useQueryClient","hydrationQueue","setHydrationQueue","React","optionsRef","newQueries","existingQueries","dehydratedQuery","existingQuery","hydrationIsNewer","queryAlreadyQueued","prev","useLatest","current","valueRef","useRef","useEffect","RouteGuard","auth","useAuth","zudoku","useZudoku","location","useLocation","latestPath","isProtected","path","matchPath","ZudokuError","Outlet","ServerError","error","jsx","ErrorAlert","RouterProvider2","props","RouterProvider","ReactDOM","StaggeredRenderContext","createContext","Bootstrap","router","StrictMode","QueryClientProvider","HelmetProvider","BootstrapStatic","helmetContext","StaticRouterProvider","global","factory","exports","require$$0","this","react","defaultOptions","useIsSSR","isSSR","setIsSSR","useSpinDelay","loading","initialState","setState","timeout","delay","useScrollToTop","previousPath","isNewPage","hasAnchor","Skeleton","className","cn","COLOR_MAP","Banner","isBannerOpen","setIsBannerOpen","useState","mappedColor","style","jsxs","CircleXIcon","Search","ctx","isOpen","setIsOpen","onClose","useCallback","onKeyDown","searchPlugin","isSearchPlugin","SearchIcon","Suspense","ThemeSwitch","resolvedTheme","setTheme","useTheme","ClientOnly","Button","SunIcon","MoonIcon","isHiddenItem","isAuthenticated","item","TopNavigation","topNavigation","TopNavItem","id","label","defaultLink","sidebars","currentSidebar","currentNav","useCurrentNavigation","isNavigating","useNavigation","isActive","first","traverseSidebar","joinPath","NavLink","isPending","cx","MobileTopNavigation","drawerOpen","setDrawerOpen","Drawer","open","DrawerTrigger","MenuIcon","DrawerContent","VisuallyHidden","DrawerTitle","RecursiveMenu","DropdownMenuSub","DropdownMenuSubTrigger","DropdownMenuPortal","DropdownMenuSubContent","i","Link","DropdownMenuItem","Header","memo","profile","isAuthEnabled","plugins","accountItems","p","isProfileMenuPlugin","Fragment","joinUrl","Slotlet","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","SidebarWrapper","forwardRef","pushMainContent","ref","Sidebar","onRequestClose","navRef","navigation","active","scrollIntoViewIfNeeded","SidebarItem","LoadingFallback","Spinner","Layout","setActiveAnchor","useViewportAnchor","authentication","useScrollToAnchor","previousLocationPath","showSpinner","isDrawerOpen","Helmet","PanelLeftIcon","ErrorPage","title","message","category","ProseClasses","CategoryHeading","Heading","getDefaultContent","statusCode","StatusPage","defaultContent","ErrorBoundaryContext","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","ZudokuContext","__publicField","needsInitialization","plugin","isApiIdentityPlugin","nav","request","accessToken","isNavigationPlugin","TopLevelError","resetErrorBoundary","root","cb","DEFAULT_COMPONENTS","ComponentsContext","ComponentsProvider","ZudokuProvider","useSuspenseQuery","ZudokuReactContext","ZudokoInner","components","useMemo","mdxComponents","isMdxProviderPlugin","acc","curr","MdxComponents","stagger","useContext","didNavigate","setDidNavigate","staggeredValue","zudokuContext","heads","hasHead","MDXProvider","ThemeProvider","SlotletProvider","ViewportAnchorProvider","Zudoku","useMDXComponents","useMDXComponentsImport","LayoutImport","RouterError","RouterErrorImport","ServerErrorImport","BootstrapImport","BootstrapStaticImport","RouteGuardImport","Head","useZudokuImport","useAuthImport","useCache","useCacheImport","CACHE_KEYS","CACHE_KEYS_IMPORT","ZudokuImport","StatusPageImport","Callout","CalloutImport","Markdown","MarkdownImport","SpinnerImport","ClientOnlyImport","ButtonImport","LinkImport"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,9,12,26]}
|
|
1
|
+
{"version":3,"file":"zudoku.components.js","sources":["../../../node_modules/.pnpm/@tanstack+query-core@5.66.4/node_modules/@tanstack/query-core/build/modern/queryCache.js","../../../node_modules/.pnpm/@tanstack+query-core@5.66.4/node_modules/@tanstack/query-core/build/modern/mutationCache.js","../../../node_modules/.pnpm/@tanstack+query-core@5.66.4/node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../../node_modules/.pnpm/@tanstack+query-core@5.66.4/node_modules/@tanstack/query-core/build/modern/queryClient.js","../../../node_modules/.pnpm/@tanstack+query-core@5.66.4/node_modules/@tanstack/query-core/build/modern/hydration.js","../../../node_modules/.pnpm/@tanstack+react-query@5.66.6_react@19.0.0/node_modules/@tanstack/react-query/build/modern/HydrationBoundary.js","../src/lib/util/useLatest.ts","../src/lib/core/RouteGuard.tsx","../src/lib/errors/ServerError.tsx","../../../node_modules/.pnpm/react-router@7.1.5_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/react-router/dist/development/dom-export.mjs","../src/lib/plugins/openapi/StaggeredRender.tsx","../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/util/useScrollToTop.ts","../src/lib/ui/Skeleton.tsx","../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","../src/lib/components/ErrorPage.tsx","../src/lib/components/StatusPage.tsx","../../../node_modules/.pnpm/react-error-boundary@5.0.0_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":["// 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 client,\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 Set();\n this.#scopes = /* @__PURE__ */ new Map();\n this.#mutationId = 0;\n }\n #mutations;\n #scopes;\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 this.#mutations.add(mutation);\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n scopedMutations.push(mutation);\n } else {\n this.#scopes.set(scope, [mutation]);\n }\n }\n this.notify({ type: \"added\", mutation });\n }\n remove(mutation) {\n if (this.#mutations.delete(mutation)) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n if (scopedMutations.length > 1) {\n const index = scopedMutations.indexOf(mutation);\n if (index !== -1) {\n scopedMutations.splice(index, 1);\n }\n } else if (scopedMutations[0] === mutation) {\n this.#scopes.delete(scope);\n }\n }\n }\n }\n this.notify({ type: \"removed\", mutation });\n }\n canRun(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const mutationsWithSameScope = this.#scopes.get(scope);\n const firstPendingMutation = mutationsWithSameScope?.find(\n (m) => m.state.status === \"pending\"\n );\n return !firstPendingMutation || firstPendingMutation === mutation;\n } else {\n return true;\n }\n }\n runNext(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const foundMutation = this.#scopes.get(scope)?.find((m) => m !== mutation && m.state.isPaused);\n return foundMutation?.continue() ?? Promise.resolve();\n } else {\n return Promise.resolve();\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.#mutations.forEach((mutation) => {\n this.notify({ type: \"removed\", mutation });\n });\n this.#mutations.clear();\n this.#scopes.clear();\n });\n }\n getAll() {\n return Array.from(this.#mutations);\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;\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 client: context.client,\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 client: context.client,\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 defaultedOptions = this.defaultQueryOptions(options);\n const query = this.#queryCache.build(this, defaultedOptions);\n const cachedData = query.state.data;\n if (cachedData === void 0) {\n return this.fetchQuery(options);\n }\n if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n void this.prefetchQuery(defaultedOptions);\n }\n return Promise.resolve(cachedData);\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, shouldRedactErrors) {\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 (!shouldRedactErrors(error)) {\n return Promise.reject(error);\n }\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 defaultshouldRedactErrors(_) {\n return true;\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 shouldRedactErrors = options.shouldRedactErrors ?? client.getDefaultOptions().dehydrate?.shouldRedactErrors ?? defaultshouldRedactErrors;\n const serializeData = options.serializeData ?? client.getDefaultOptions().dehydrate?.serializeData ?? defaultTransformerFn;\n const queries = client.getQueryCache().getAll().flatMap(\n (query) => filterQuery(query) ? [dehydrateQuery(query, serializeData, shouldRedactErrors)] : []\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 defaultshouldRedactErrors,\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 hasProperty = (obj, key) => {\n return typeof obj === \"object\" && obj !== null && key in obj;\n};\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 || // RSC special serialized then-able chunks\n hasProperty(dehydratedQuery.promise, \"status\") && hasProperty(existingQuery.promise, \"status\") && dehydratedQuery.promise.status !== existingQuery.promise.status;\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","import { useEffect, useRef } from \"react\";\n\n// This hook is useful when you need to store a reference to a variable that changes over time,\n// but you don't want to re-run any callbacks that depend on that variable every time it changes.\n// By using a reference to the latest value, you can ensure that any callbacks only run when necessary,\n// without any unnecessary re-renders.\n\n// Note: It's safe to put the return value of this hook in a dependency array, because it won't change!\nexport const useLatest = <T>(current: T) => {\n const valueRef = useRef(current);\n valueRef.current = current;\n\n useEffect(() => {\n valueRef.current = current;\n }, [current]);\n\n return valueRef;\n};\n","import { useEffect } from \"react\";\nimport { matchPath, Outlet, useLocation } from \"react-router\";\nimport { useAuth } from \"../authentication/hook.js\";\nimport { useZudoku } from \"../components/context/ZudokuContext.js\";\nimport { ZudokuError } from \"../util/invariant.js\";\nimport { useLatest } from \"../util/useLatest.js\";\n\nexport const RouteGuard = () => {\n const auth = useAuth();\n const zudoku = useZudoku();\n const location = useLocation();\n const latestPath = useLatest(location.pathname);\n\n const isProtected = zudoku.options.protectedRoutes?.some((path) =>\n matchPath({ path, end: true }, location.pathname),\n );\n\n useEffect(() => {\n if (isProtected && !auth.isAuthenticated) {\n void zudoku.authentication?.signIn({\n redirectTo: latestPath.current,\n });\n }\n }, [isProtected, auth.isAuthenticated, zudoku.authentication, latestPath]);\n\n if (isProtected && !auth.isAuthenticated) {\n return null;\n }\n\n if (isProtected && !auth.isAuthEnabled) {\n throw new ZudokuError(\"Authentication is not enabled\", {\n title: \"Authentication is not enabled\",\n developerHint:\n \"To use protectedRoutes you need authentication to be enabled\",\n });\n }\n\n return <Outlet />;\n};\n","import { ErrorAlert } from \"./ErrorAlert.js\";\n\nexport function ServerError({ error }: { error: unknown }) {\n return <ErrorAlert error={error} />;\n}\n","/**\n * react-router v7.1.5\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-IR6S3I6Y.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 Children,\n createContext,\n ReactNode,\n useContext,\n useEffect,\n useState,\n} from \"react\";\n\nexport const StaggeredRenderContext = createContext({ stagger: false });\n\nconst StaggeredRender = ({ children }: { children: ReactNode[] }) => {\n const { stagger } = useContext(StaggeredRenderContext);\n const [renderAll, setRenderAll] = useState(!stagger);\n\n useEffect(() => {\n if (renderAll) {\n return;\n }\n\n const idle = requestIdleCallback(() => {\n setRenderAll(true);\n });\n\n return () => cancelIdleCallback(idle);\n }, [renderAll]);\n\n return !renderAll ? Children.toArray(children).slice(0, 3) : children;\n};\n\nexport default StaggeredRender;\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 { 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 const isNewPage = previousPath.current !== location.pathname;\n const hasAnchor = location.hash !== \"\";\n\n if (isNewPage && !hasAnchor) {\n window.scrollTo(0, 0);\n }\n\n previousPath.current = location.pathname;\n }, [location.pathname, location.hash]);\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 { 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 { MoonIcon, SunIcon } from \"lucide-react\";\nimport { useTheme } from \"next-themes\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { cn } from \"../util/cn.js\";\nimport { ClientOnly } from \"./ClientOnly.js\";\n\nexport const ThemeSwitch = () => {\n const { resolvedTheme, setTheme } = useTheme();\n\n return (\n <ClientOnly fallback={<Button variant=\"ghost\" size=\"icon\" />}>\n <button\n type=\"button\"\n className=\"flex rounded-full border p-0.5 gap-0.5 group\"\n onClick={() => setTheme(resolvedTheme === \"dark\" ? \"light\" : \"dark\")}\n aria-label={\n resolvedTheme === \"dark\"\n ? \"Switch to light mode\"\n : \"Switch to dark mode\"\n }\n >\n <div\n className={cn(\n \"border border-transparent rounded-full p-0.5 [&>svg>circle]:transition-colors [&>svg>path]:transition-transform transition-all [&>svg>path]:duration-200 [&>svg>circle]:duration-500 [&>svg>circle]:fill-transparent\",\n resolvedTheme === \"light\" && \"border-border bg-muted/50\",\n resolvedTheme === \"dark\" &&\n \"group-hover:[&>svg>path]:scale-110 group-hover:[&>svg>path]:-translate-x-[1px] group-hover:[&>svg>path]:-translate-y-[1px] group-hover:rotate-[15deg] \",\n )}\n >\n <SunIcon size={16} />\n </div>\n <div\n className={cn(\n \"border border-transparent rounded-full p-0.5 transition-transform transform-gpu duration-500\",\n resolvedTheme === \"dark\" &&\n \"border-border bg-muted [&>svg>path]:fill-white [&>svg>path]:stroke-transparent\",\n resolvedTheme === \"light\" &&\n \"group-hover:rotate-[-10deg] [&>svg>path]:stroke-currentColor\",\n )}\n >\n <MoonIcon size={16} />\n </div>\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\";\nimport { Slotlet } from \"./SlotletProvider.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 <div className=\" items-center justify-between px-8 h-[--top-nav-height] hidden lg:flex text-sm\">\n <nav className=\"text-sm\">\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 <Slotlet name=\"top-navigation-side\" />\n </div>\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\",\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 { joinUrl } from \"../util/joinUrl.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=\"border-b\">\n <div className=\"max-w-screen-2xl 2xl:border-x mx-auto grid grid-cols-[1fr_auto] lg:grid-cols-[calc(var(--side-nav-width))_1fr] lg:gap-12 items-center px-4 lg:px-8 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 : joinUrl(\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 : joinUrl(\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 <Slotlet name=\"head-navigation-end\" />\n <ThemeSwitch />\n </div>\n </div>\n </div>\n </div>\n <div className=\"border-b hidden lg:block\">\n <div className=\"max-w-screen-2xl mx-auto 2xl:border-x\">\n <Slotlet name=\"top-navigation-before\" />\n <TopNavigation />\n <Slotlet name=\"top-navigation-after\" />\n </div>\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 border-r pr-6\",\n \"-mx-[--padding-nav-item] pb-20 pt-[--padding-content-top]\",\n \"w-[--side-nav-width] h-[calc(100%-var(--header-height))] scroll-pt-2 gap-2\",\n !pushMainContent && \"border-r-0\",\n className,\n )}\n ref={ref}\n >\n {children}\n </nav>\n));\n\nSidebarWrapper.displayName = \"SidebarWrapper\";\n","import { useEffect, useRef } from \"react\";\n\nimport { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { DrawerContent, DrawerTitle } from \"../../ui/Drawer.js\";\nimport { scrollIntoViewIfNeeded } from \"../../util/scrollIntoViewIfNeeded.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 useEffect(() => {\n const active = navRef.current?.querySelector('[aria-current=\"page\"]');\n scrollIntoViewIfNeeded(active ?? null);\n }, []);\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 min-h-[calc(100vh-var(--header-height))] max-w-screen-2xl mx-auto px-4 lg:px-8 2xl:border-x\">\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-4 px-4 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","import type { ReactNode } from \"react\";\nimport { CategoryHeading } from \"./CategoryHeading.js\";\nimport { Heading } from \"./Heading.js\";\nimport { ProseClasses } from \"./Markdown.js\";\n\nexport const ErrorPage = ({\n title = \"An error occurred\",\n message,\n category,\n}: {\n title?: ReactNode;\n message?: ReactNode;\n category?: ReactNode;\n}) => {\n return (\n <div className={ProseClasses + \" h-full pt-[--padding-content-top]\"}>\n {category && <CategoryHeading>{category}</CategoryHeading>}\n {title && (\n <Heading level={1} className=\"flex gap-3.5 items-center\">\n {title}\n </Heading>\n )}\n <p>{message}</p>\n </div>\n );\n};\n","import type { ReactNode } from \"react\";\nimport { ErrorPage } from \"./ErrorPage.js\";\n\ntype StatusPageProps = {\n statusCode: number;\n message?: ReactNode;\n};\n\nconst getDefaultContent = (\n statusCode: number,\n): { title: string; message: string } => {\n switch (statusCode) {\n case 400:\n return {\n title: \"Bad Request\",\n message:\n \"The request could not be understood by the server due to malformed syntax.\",\n };\n case 403:\n return {\n title: \"Forbidden\",\n message: \"You don't have permission to access this resource.\",\n };\n case 404:\n return {\n title: \"Not Found\",\n message: \"The requested resource could not be found.\",\n };\n case 405:\n return {\n title: \"Method Not Allowed\",\n message:\n \"The request method is not supported for the requested resource.\",\n };\n case 414:\n return {\n title: \"Request URI Too Large\",\n message: \"The request URI is too large.\",\n };\n case 416:\n return {\n title: \"Range Not Satisfiable\",\n message: \"The server cannot satisfy the request range.\",\n };\n case 500:\n return {\n title: \"Internal Server Error\",\n message: \"An unexpected error occurred while processing your request.\",\n };\n case 501:\n return {\n title: \"Not Implemented\",\n message:\n \"The server does not support the functionality required to fulfill the request.\",\n };\n case 502:\n return {\n title: \"Bad Gateway\",\n message:\n \"The server received an invalid response from the upstream server.\",\n };\n case 503:\n return {\n title: \"Service Unavailable\",\n message: \"The server is temporarily unable to handle the request.\",\n };\n case 504:\n return {\n title: \"Gateway Timeout\",\n message:\n \"The server did not receive a timely response from the upstream server.\",\n };\n default:\n return {\n title: \"An error occurred\",\n message: \"Something went wrong while processing your request.\",\n };\n }\n};\n\nexport const StatusPage = ({ statusCode, message }: StatusPageProps) => {\n const defaultContent = getDefaultContent(statusCode);\n\n return (\n <ErrorPage\n title={defaultContent.title}\n message={message ?? defaultContent.message}\n category={statusCode}\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) => Promise<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 protectedRoutes?: string[];\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 readonly navigationPlugins: NavigationPlugin[];\n\n constructor(public readonly options: ZudokuContextOptions) {\n this.plugins = options.plugins ?? [];\n this.topNavigation = options.topNavigation ?? [];\n this.sidebars = options.sidebars ?? {};\n this.navigationPlugins = this.plugins.filter(isNavigationPlugin);\n this.authentication = options.authentication;\n this.meta = options.metadata;\n this.page = options.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 { useTheme as useThemeImport } from \"next-themes\";\nimport { Link as LinkImport } from \"react-router\";\nimport { useAuth as useAuthImport } from \"../authentication/hook.js\";\nimport { RouteGuard as RouteGuardImport } from \"../core/RouteGuard.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 {\n CACHE_KEYS as CACHE_KEYS_IMPORT,\n useCache as useCacheImport,\n} from \"./cache.js\";\nimport { ClientOnly as ClientOnlyImport } from \"./ClientOnly.js\";\nimport { useZudoku as useZudokuImport } from \"./context/ZudokuContext.js\";\nimport { Layout as LayoutImport } from \"./Layout.js\";\nimport { Markdown as MarkdownImport } from \"./Markdown.js\";\nimport { Spinner as SpinnerImport } from \"./Spinner.js\";\nimport { StatusPage as StatusPageImport } from \"./StatusPage.js\";\nimport { Zudoku as ZudokuImport } from \"./Zudoku.js\";\n\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;\nexport const RouteGuard = /*@__PURE__*/ RouteGuardImport;\n\nexport const Head = /*@__PURE__*/ Helmet;\n\nexport const useZudoku = /*@__PURE__*/ useZudokuImport;\nexport const useAuth = /*@__PURE__*/ useAuthImport;\nexport const useCache = /*@__PURE__*/ useCacheImport;\nexport const CACHE_KEYS = /*@__PURE__*/ CACHE_KEYS_IMPORT;\nexport const Zudoku = /*@__PURE__*/ ZudokuImport;\n\nexport const StatusPage = /*@__PURE__*/ StatusPageImport;\nexport const Callout = /*@__PURE__*/ CalloutImport;\nexport const Markdown = /*@__PURE__*/ MarkdownImport;\nexport const Spinner = /*@__PURE__*/ SpinnerImport;\nexport const ClientOnly = /*@__PURE__*/ ClientOnlyImport;\nexport const Button = /*@__PURE__*/ ButtonImport;\nexport const Link = /*@__PURE__*/ LinkImport;\nexport const useTheme = /*@__PURE__*/ useThemeImport;\n"],"names":["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","_scopes","_mutationId","mutation","Mutation","__privateWrapper","scope","scopeFor","scopedMutations","index","mutationsWithSameScope","firstPendingMutation","m","foundMutation","matchMutation","pausedMutations","x","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","defaultedOptions","cachedData","resolveStaleTime","updater","prevData","functionalUpdate","queryCache","refetchFilters","cancelOptions","defaultedCancelOptions","promises","fetchOptions","promise","hashKey","defaults","queryDefault","partialMatchKey","mutationKey","skipToken","defaultTransformerFn","hydrate","dehydratedState","mutationCache","deserializeData","mutations","mutationOptions","meta","_ignored","serializedState","initialPromise","hasProperty","obj","key","HydrationBoundary","children","queryClient","useQueryClient","hydrationQueue","setHydrationQueue","React","optionsRef","newQueries","existingQueries","dehydratedQuery","existingQuery","hydrationIsNewer","queryAlreadyQueued","prev","useLatest","current","valueRef","useRef","useEffect","RouteGuard","auth","useAuth","zudoku","useZudoku","location","useLocation","latestPath","isProtected","path","matchPath","ZudokuError","Outlet","ServerError","error","jsx","ErrorAlert","RouterProvider2","props","RouterProvider","ReactDOM","StaggeredRenderContext","createContext","Bootstrap","router","StrictMode","QueryClientProvider","HelmetProvider","BootstrapStatic","helmetContext","StaticRouterProvider","global","factory","exports","require$$0","this","react","defaultOptions","useIsSSR","isSSR","setIsSSR","useSpinDelay","loading","initialState","setState","timeout","delay","useScrollToTop","previousPath","isNewPage","hasAnchor","Skeleton","className","cn","COLOR_MAP","Banner","isBannerOpen","setIsBannerOpen","useState","mappedColor","style","jsxs","CircleXIcon","Search","ctx","isOpen","setIsOpen","onClose","useCallback","onKeyDown","searchPlugin","isSearchPlugin","SearchIcon","Suspense","ThemeSwitch","resolvedTheme","setTheme","useTheme","ClientOnly","Button","SunIcon","MoonIcon","isHiddenItem","isAuthenticated","item","TopNavigation","topNavigation","TopNavItem","Slotlet","id","label","defaultLink","sidebars","currentSidebar","currentNav","useCurrentNavigation","isNavigating","useNavigation","isActive","first","traverseSidebar","joinPath","NavLink","isPending","cx","MobileTopNavigation","drawerOpen","setDrawerOpen","Drawer","open","DrawerTrigger","MenuIcon","DrawerContent","VisuallyHidden","DrawerTitle","RecursiveMenu","DropdownMenuSub","DropdownMenuSubTrigger","DropdownMenuPortal","DropdownMenuSubContent","i","Link","DropdownMenuItem","Header","memo","profile","isAuthEnabled","plugins","accountItems","p","isProfileMenuPlugin","Fragment","joinUrl","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","SidebarWrapper","forwardRef","pushMainContent","ref","Sidebar","onRequestClose","navRef","navigation","active","scrollIntoViewIfNeeded","SidebarItem","LoadingFallback","Spinner","Layout","setActiveAnchor","useViewportAnchor","authentication","useScrollToAnchor","previousLocationPath","showSpinner","isDrawerOpen","Helmet","PanelLeftIcon","ErrorPage","title","message","category","ProseClasses","CategoryHeading","Heading","getDefaultContent","statusCode","StatusPage","defaultContent","ErrorBoundaryContext","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","ZudokuContext","__publicField","needsInitialization","plugin","isApiIdentityPlugin","nav","request","accessToken","isNavigationPlugin","TopLevelError","resetErrorBoundary","root","cb","DEFAULT_COMPONENTS","ComponentsContext","ComponentsProvider","ZudokuProvider","useSuspenseQuery","ZudokuReactContext","ZudokoInner","components","useMemo","mdxComponents","isMdxProviderPlugin","acc","curr","MdxComponents","stagger","useContext","didNavigate","setDidNavigate","staggeredValue","zudokuContext","heads","hasHead","MDXProvider","ThemeProvider","SlotletProvider","ViewportAnchorProvider","Zudoku","useMDXComponents","useMDXComponentsImport","LayoutImport","RouterError","RouterErrorImport","ServerErrorImport","BootstrapImport","BootstrapStaticImport","RouteGuardImport","Head","useZudokuImport","useAuthImport","useCache","useCacheImport","CACHE_KEYS","CACHE_KEYS_IMPORT","ZudokuImport","StatusPageImport","Callout","CalloutImport","Markdown","MarkdownImport","SpinnerImport","ClientOnlyImport","ButtonImport","LinkImport","useThemeImport"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,9,12,26]}
|