zudoku 0.38.0 → 0.39.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/entry.server.d.ts +5 -4
- package/dist/app/entry.server.js +2 -2
- package/dist/app/entry.server.js.map +1 -1
- package/dist/app/tailwind.js +14 -0
- package/dist/app/tailwind.js.map +1 -1
- package/dist/cli/cmds/dev.js +1 -7
- package/dist/cli/cmds/dev.js.map +1 -1
- package/dist/config/validators/common.d.ts +17 -0
- package/dist/config/validators/common.js +1 -0
- package/dist/config/validators/common.js.map +1 -1
- package/dist/config/validators/validate.d.ts +7 -0
- package/dist/lib/components/Bootstrap.d.ts +2 -1
- package/dist/lib/components/Bootstrap.js +3 -2
- package/dist/lib/components/Bootstrap.js.map +1 -1
- package/dist/lib/components/Header.js +2 -2
- package/dist/lib/components/Header.js.map +1 -1
- package/dist/lib/components/Heading.d.ts +1 -1
- package/dist/lib/components/Layout.js +2 -9
- package/dist/lib/components/Layout.js.map +1 -1
- package/dist/lib/components/Main.js +3 -1
- package/dist/lib/components/Main.js.map +1 -1
- package/dist/lib/components/MobileTopNavigation.js +6 -3
- package/dist/lib/components/MobileTopNavigation.js.map +1 -1
- package/dist/lib/components/Pagination.d.ts +10 -0
- package/dist/lib/components/Pagination.js +10 -0
- package/dist/lib/components/Pagination.js.map +1 -0
- package/dist/lib/components/TopNavigation.d.ts +1 -0
- package/dist/lib/components/TopNavigation.js +18 -2
- package/dist/lib/components/TopNavigation.js.map +1 -1
- package/dist/lib/components/Zudoku.js +4 -1
- package/dist/lib/components/Zudoku.js.map +1 -1
- package/dist/lib/components/context/BypassProtectedRoutesContext.d.ts +1 -0
- package/dist/lib/components/context/BypassProtectedRoutesContext.js +3 -0
- package/dist/lib/components/context/BypassProtectedRoutesContext.js.map +1 -0
- package/dist/lib/components/index.d.ts +2 -1
- package/dist/lib/components/navigation/PoweredByZudoku.d.ts +3 -0
- package/dist/lib/components/navigation/PoweredByZudoku.js +6 -0
- package/dist/lib/components/navigation/PoweredByZudoku.js.map +1 -0
- package/dist/lib/components/navigation/SidebarItem.d.ts +1 -0
- package/dist/lib/components/navigation/SidebarItem.js +7 -3
- package/dist/lib/components/navigation/SidebarItem.js.map +1 -1
- package/dist/lib/components/navigation/SidebarWrapper.js +9 -2
- package/dist/lib/components/navigation/SidebarWrapper.js.map +1 -1
- package/dist/lib/{plugins/markdown → components/navigation}/Toc.js +5 -7
- package/dist/lib/components/navigation/Toc.js.map +1 -0
- package/dist/lib/components/navigation/ZudokuLogo.d.ts +6 -0
- package/dist/lib/components/navigation/ZudokuLogo.js +5 -0
- package/dist/lib/components/navigation/ZudokuLogo.js.map +1 -0
- package/dist/lib/core/RouteGuard.d.ts +1 -0
- package/dist/lib/core/RouteGuard.js +9 -3
- package/dist/lib/core/RouteGuard.js.map +1 -1
- package/dist/lib/core/ZudokuContext.d.ts +1 -0
- package/dist/lib/core/ZudokuContext.js.map +1 -1
- package/dist/lib/oas/graphql/index.d.ts +2 -1
- package/dist/lib/oas/graphql/index.js +74 -14
- package/dist/lib/oas/graphql/index.js.map +1 -1
- package/dist/lib/oas/parser/dereference/index.js +2 -0
- package/dist/lib/oas/parser/dereference/index.js.map +1 -1
- package/dist/lib/oas/parser/index.d.ts +5 -3
- package/dist/lib/oas/parser/index.js +0 -22
- package/dist/lib/oas/parser/index.js.map +1 -1
- package/dist/lib/plugins/api-catalog/index.js +19 -17
- package/dist/lib/plugins/api-catalog/index.js.map +1 -1
- package/dist/lib/plugins/markdown/MdxPage.js +3 -3
- package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
- package/dist/lib/plugins/openapi/ColorizedParam.js +1 -1
- package/dist/lib/plugins/openapi/ColorizedParam.js.map +1 -1
- package/dist/lib/plugins/openapi/OperationList.d.ts +1 -1
- package/dist/lib/plugins/openapi/OperationList.js +28 -8
- package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
- package/dist/lib/plugins/openapi/OperationListItem.js +1 -1
- package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
- package/dist/lib/plugins/openapi/ParameterListItem.js +2 -1
- package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
- package/dist/lib/plugins/openapi/SchemaList.d.ts +1 -0
- package/dist/lib/plugins/openapi/SchemaList.js +52 -0
- package/dist/lib/plugins/openapi/SchemaList.js.map +1 -0
- package/dist/lib/plugins/openapi/client/GraphQLClient.d.ts +1 -1
- package/dist/lib/plugins/openapi/client/GraphQLClient.js +1 -1
- package/dist/lib/plugins/openapi/client/GraphQLClient.js.map +1 -1
- package/dist/lib/plugins/openapi/client/useCreateQuery.d.ts +6 -2
- package/dist/lib/plugins/openapi/client/useCreateQuery.js +5 -5
- package/dist/lib/plugins/openapi/client/useCreateQuery.js.map +1 -1
- package/dist/lib/plugins/openapi/components/EnumValues.js +1 -1
- package/dist/lib/plugins/openapi/components/EnumValues.js.map +1 -1
- package/dist/lib/plugins/openapi/graphql/gql.d.ts +6 -2
- package/dist/lib/plugins/openapi/graphql/gql.js +3 -2
- package/dist/lib/plugins/openapi/graphql/gql.js.map +1 -1
- package/dist/lib/plugins/openapi/graphql/graphql.d.ts +67 -11
- package/dist/lib/plugins/openapi/graphql/graphql.js +34 -5
- package/dist/lib/plugins/openapi/graphql/graphql.js.map +1 -1
- package/dist/lib/plugins/openapi/index.js +12 -0
- package/dist/lib/plugins/openapi/index.js.map +1 -1
- package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroup.d.ts +1 -2
- package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroup.js +2 -2
- package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroup.js.map +1 -1
- package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupConnector.d.ts +2 -1
- package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupConnector.js +2 -2
- package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupConnector.js.map +1 -1
- package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupItem.d.ts +0 -1
- package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupItem.js +1 -1
- package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupItem.js.map +1 -1
- package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.d.ts +4 -0
- package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js +12 -0
- package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js.map +1 -0
- package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.d.ts +2 -4
- package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js +12 -9
- package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js.map +1 -1
- package/dist/lib/plugins/openapi/schema/SchemaView.d.ts +1 -2
- package/dist/lib/plugins/openapi/schema/SchemaView.js +30 -52
- package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
- package/dist/lib/plugins/openapi/schema/utils.d.ts +1 -0
- package/dist/lib/plugins/openapi/schema/utils.js +3 -1
- package/dist/lib/plugins/openapi/schema/utils.js.map +1 -1
- package/dist/lib/plugins/openapi/util/getRoutes.js +9 -3
- package/dist/lib/plugins/openapi/util/getRoutes.js.map +1 -1
- package/dist/lib/plugins/search-pagefind/PagefindSearch.js +9 -4
- package/dist/lib/plugins/search-pagefind/PagefindSearch.js.map +1 -1
- package/dist/lib/plugins/search-pagefind/ResultList.d.ts +1 -1
- package/dist/lib/plugins/search-pagefind/ResultList.js +6 -12
- package/dist/lib/plugins/search-pagefind/ResultList.js.map +1 -1
- package/dist/lib/plugins/search-pagefind/index.d.ts +1 -3
- package/dist/lib/util/useOnScreen.d.ts +3 -2
- package/dist/lib/util/useOnScreen.js +3 -3
- package/dist/lib/util/useOnScreen.js.map +1 -1
- package/dist/vite/api/schema-codegen.js +2 -2
- package/dist/vite/api/schema-codegen.js.map +1 -1
- package/dist/vite/api/schema-codegen.test.js +5 -0
- package/dist/vite/api/schema-codegen.test.js.map +1 -1
- package/dist/vite/build.js +1 -9
- package/dist/vite/build.js.map +1 -1
- package/dist/vite/plugin-api.js +8 -7
- package/dist/vite/plugin-api.js.map +1 -1
- package/dist/vite/plugin-search.js +1 -1
- package/dist/vite/plugin-search.js.map +1 -1
- package/dist/vite/prerender/FileWritingResponse.d.ts +9 -5
- package/dist/vite/prerender/FileWritingResponse.js +5 -5
- package/dist/vite/prerender/FileWritingResponse.js.map +1 -1
- package/dist/vite/prerender/InMemoryResponse.d.ts +16 -0
- package/dist/vite/prerender/InMemoryResponse.js +32 -0
- package/dist/vite/prerender/InMemoryResponse.js.map +1 -0
- package/dist/vite/prerender/PrerenderResponse.d.ts +10 -0
- package/dist/vite/prerender/PrerenderResponse.js +2 -0
- package/dist/vite/prerender/PrerenderResponse.js.map +1 -0
- package/dist/vite/prerender/prerender.d.ts +1 -0
- package/dist/vite/prerender/prerender.js +18 -0
- package/dist/vite/prerender/prerender.js.map +1 -1
- package/dist/vite/prerender/worker.js +36 -8
- package/dist/vite/prerender/worker.js.map +1 -1
- package/dist/zuplo/with-zuplo.js +4 -0
- package/dist/zuplo/with-zuplo.js.map +1 -1
- package/lib/{AuthenticationPlugin-Duy_R1TU.js → AuthenticationPlugin-foqdvvkf.js} +2 -2
- package/lib/{AuthenticationPlugin-Duy_R1TU.js.map → AuthenticationPlugin-foqdvvkf.js.map} +1 -1
- package/lib/{Markdown-DIZ8nBVC.js → Markdown-aF5FdsNi.js} +1339 -1335
- package/lib/{Markdown-DIZ8nBVC.js.map → Markdown-aF5FdsNi.js.map} +1 -1
- package/lib/MdxPage-JscVnWM8.js +84 -0
- package/lib/MdxPage-JscVnWM8.js.map +1 -0
- package/lib/{OasProvider-D1A10JeA.js → OasProvider-C7Y53snX.js} +3 -3
- package/lib/{OasProvider-D1A10JeA.js.map → OasProvider-C7Y53snX.js.map} +1 -1
- package/lib/OperationList-_M8wg22T.js +5066 -0
- package/lib/OperationList-_M8wg22T.js.map +1 -0
- package/lib/Pagination-DCCvGq0m.js +46 -0
- package/lib/Pagination-DCCvGq0m.js.map +1 -0
- package/lib/RouteGuard-CqZPoZYJ.js +744 -0
- package/lib/RouteGuard-CqZPoZYJ.js.map +1 -0
- package/lib/SchemaList-CrKZdUyo.js +148 -0
- package/lib/SchemaList-CrKZdUyo.js.map +1 -0
- package/lib/SchemaView-B4JHn-BX.js +354 -0
- package/lib/SchemaView-B4JHn-BX.js.map +1 -0
- package/lib/{Select-fAYcJ0OU.js → Select-DVFRKf1R.js} +3 -3
- package/lib/{Select-fAYcJ0OU.js.map → Select-DVFRKf1R.js.map} +1 -1
- package/lib/{SlotletProvider-BEwNY8q0.js → SlotletProvider-DXvc0aY6.js} +2 -2
- package/lib/{SlotletProvider-BEwNY8q0.js.map → SlotletProvider-DXvc0aY6.js.map} +1 -1
- package/lib/Toc-YBsgI72s.js +92 -0
- package/lib/Toc-YBsgI72s.js.map +1 -0
- package/lib/{createServer-DjgKDpGV.js → createServer-mYvGvmc0.js} +2596 -2502
- package/lib/createServer-mYvGvmc0.js.map +1 -0
- package/lib/{hook-Cge6LiTK.js → hook-CqpVYDqN.js} +28 -28
- package/lib/{hook-Cge6LiTK.js.map → hook-CqpVYDqN.js.map} +1 -1
- package/lib/{index-B0y3fTg-.js → index-C8-tlf_X.js} +771 -729
- package/lib/index-C8-tlf_X.js.map +1 -0
- package/lib/index-D6ktNq4i.js +1863 -0
- package/lib/index-D6ktNq4i.js.map +1 -0
- package/lib/{mutation-EChriCeF.js → mutation-8LjrN7uz.js} +2 -2
- package/lib/{mutation-EChriCeF.js.map → mutation-8LjrN7uz.js.map} +1 -1
- package/lib/objectEntries-yMIkr2mI.js +5 -0
- package/lib/objectEntries-yMIkr2mI.js.map +1 -0
- package/lib/useLatest-hmRS46UF.js +11 -0
- package/lib/useLatest-hmRS46UF.js.map +1 -0
- package/lib/zudoku.auth-auth0.js +1 -1
- package/lib/zudoku.auth-clerk.js +2 -2
- package/lib/zudoku.auth-openid.js +2 -2
- package/lib/zudoku.components.js +32 -1454
- package/lib/zudoku.components.js.map +1 -1
- package/lib/zudoku.hooks.js +1 -1
- package/lib/zudoku.plugin-api-catalog.js +80 -76
- package/lib/zudoku.plugin-api-catalog.js.map +1 -1
- package/lib/zudoku.plugin-api-keys.js +3 -3
- package/lib/zudoku.plugin-custom-pages.js +1 -1
- package/lib/zudoku.plugin-markdown.js +1 -1
- package/lib/zudoku.plugin-openapi.js +2 -2
- package/lib/zudoku.plugin-search-pagefind.js +132 -137
- package/lib/zudoku.plugin-search-pagefind.js.map +1 -1
- package/package.json +6 -5
- package/src/app/entry.server.tsx +6 -3
- package/src/app/tailwind.ts +14 -0
- package/src/lib/components/Bootstrap.tsx +13 -6
- package/src/lib/components/Header.tsx +2 -2
- package/src/lib/components/Layout.tsx +5 -17
- package/src/lib/components/Main.tsx +6 -3
- package/src/lib/components/MobileTopNavigation.tsx +27 -18
- package/src/lib/components/Pagination.tsx +47 -0
- package/src/lib/components/TopNavigation.tsx +29 -2
- package/src/lib/components/Zudoku.tsx +5 -3
- package/src/lib/components/context/BypassProtectedRoutesContext.ts +3 -0
- package/src/lib/components/navigation/PoweredByZudoku.tsx +23 -0
- package/src/lib/components/navigation/SidebarItem.tsx +10 -4
- package/src/lib/components/navigation/SidebarWrapper.tsx +27 -13
- package/src/lib/{plugins/markdown → components/navigation}/Toc.tsx +5 -14
- package/src/lib/components/navigation/ZudokuLogo.tsx +25 -0
- package/src/lib/core/RouteGuard.tsx +26 -4
- package/src/lib/core/ZudokuContext.ts +1 -0
- package/src/lib/oas/graphql/index.ts +118 -45
- package/src/lib/oas/parser/dereference/index.ts +2 -0
- package/src/lib/oas/parser/index.ts +7 -29
- package/src/lib/plugins/api-catalog/index.tsx +40 -35
- package/src/lib/plugins/markdown/MdxPage.tsx +6 -36
- package/src/lib/plugins/openapi/ColorizedParam.tsx +1 -1
- package/src/lib/plugins/openapi/OperationList.tsx +36 -15
- package/src/lib/plugins/openapi/OperationListItem.tsx +7 -2
- package/src/lib/plugins/openapi/ParameterListItem.tsx +2 -0
- package/src/lib/plugins/openapi/SchemaList.tsx +151 -0
- package/src/lib/plugins/openapi/client/GraphQLClient.tsx +1 -1
- package/src/lib/plugins/openapi/client/useCreateQuery.ts +12 -5
- package/src/lib/plugins/openapi/components/EnumValues.tsx +1 -1
- package/src/lib/plugins/openapi/graphql/gql.ts +15 -6
- package/src/lib/plugins/openapi/graphql/graphql.ts +104 -15
- package/src/lib/plugins/openapi/index.tsx +13 -0
- package/src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroup.tsx +1 -8
- package/src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupConnector.tsx +3 -0
- package/src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupItem.tsx +6 -3
- package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +36 -0
- package/src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx +20 -21
- package/src/lib/plugins/openapi/schema/SchemaView.tsx +69 -141
- package/src/lib/plugins/openapi/schema/utils.ts +7 -1
- package/src/lib/plugins/openapi/util/getRoutes.tsx +9 -6
- package/src/lib/plugins/search-pagefind/PagefindSearch.tsx +11 -4
- package/src/lib/plugins/search-pagefind/ResultList.tsx +5 -16
- package/src/lib/plugins/search-pagefind/index.tsx +1 -1
- package/src/lib/util/useOnScreen.ts +6 -4
- package/dist/cli/dev/pagefind-command.d.ts +0 -3
- package/dist/cli/dev/pagefind-command.js +0 -59
- package/dist/cli/dev/pagefind-command.js.map +0 -1
- package/dist/lib/components/context/PluginSystem.d.ts +0 -1
- package/dist/lib/components/context/PluginSystem.js +0 -2
- package/dist/lib/components/context/PluginSystem.js.map +0 -1
- package/dist/lib/plugins/markdown/Toc.js.map +0 -1
- package/lib/MdxPage-JEdbfW-f.js +0 -195
- package/lib/MdxPage-JEdbfW-f.js.map +0 -1
- package/lib/OperationList-yOmYzMIp.js +0 -5379
- package/lib/OperationList-yOmYzMIp.js.map +0 -1
- package/lib/createServer-DjgKDpGV.js.map +0 -1
- package/lib/index-B0y3fTg-.js.map +0 -1
- package/lib/index.esm-CltAN0Tf.js +0 -711
- package/lib/index.esm-CltAN0Tf.js.map +0 -1
- package/lib/objectEntries-BS7aAgOm.js +0 -12
- package/lib/objectEntries-BS7aAgOm.js.map +0 -1
- package/src/lib/components/context/PluginSystem.ts +0 -0
- /package/dist/lib/{plugins/markdown → components/navigation}/Toc.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
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/core/RouteGuard.tsx","../src/lib/errors/ServerError.tsx","../../../node_modules/.pnpm/react-router@7.2.0_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/ui/Drawer.tsx","../src/lib/components/navigation/SidebarWrapper.tsx","../src/lib/components/navigation/Sidebar.tsx","../src/lib/components/Main.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","../../../node_modules/.pnpm/nanoevents@9.1.0/node_modules/nanoevents/index.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/RouterEventsEmitter.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 { useQuery } from \"@tanstack/react-query\";\nimport { matchPath, Outlet, useLocation, useNavigate } from \"react-router\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"zudoku/ui/Dialog.js\";\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 navigate = useNavigate();\n const location = useLocation();\n const latestPath = useLatest(location.pathname);\n const { protectedRoutes = [] } = zudoku.options;\n\n const isProtected = protectedRoutes.some((path) =>\n matchPath({ path, end: true }, location.pathname),\n );\n\n useQuery({\n queryKey: [\"login-redirect\"],\n queryFn: async () => {\n await new Promise((resolve) => setTimeout(resolve, 1200));\n await zudoku.authentication?.signIn({\n redirectTo: latestPath.current,\n });\n return true;\n },\n enabled:\n typeof window !== \"undefined\" &&\n isProtected &&\n !auth.isPending &&\n !auth.isAuthenticated,\n });\n\n if (isProtected && !auth.isAuthenticated) {\n return (\n <Dialog\n open={true}\n onOpenChange={(open) => {\n if (!open) {\n void navigate(-1);\n }\n }}\n >\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Logging you in...</DialogTitle>\n </DialogHeader>\n <DialogDescription>\n Please wait while we log you in.\n </DialogDescription>\n </DialogContent>\n </Dialog>\n );\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.2.0\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-HA7DTUK3.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.ssr,\n ssrInfo.context.isSpaMode\n );\n let hydrationData = void 0;\n let loaderData = ssrInfo.context.state.loaderData;\n if (ssrInfo.context.isSpaMode) {\n hydrationData = { loaderData };\n } else {\n hydrationData = {\n ...ssrInfo.context.state,\n loaderData: { ...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 ssrInfo.context.ssr,\n () => router2\n ),\n patchRoutesOnNavigation: getPatchRoutesOnNavigationFunction(\n ssrInfo.manifest,\n ssrInfo.routeModules,\n ssrInfo.context.ssr,\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.ssr,\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 ssr: ssrInfo.context.ssr,\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 data-pagefind-ignore=\"all\"\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\",\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 type { TopNavigationItem } from \"../../config/validators/common.js\";\nimport { useAuth } from \"../authentication/hook.js\";\nimport { joinUrl } from \"../util/joinUrl.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\" | \"hide\" }): boolean => {\n if (item.display === \"hide\") return false;\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 const filteredItems = topNavigation.filter(isHiddenItem(isAuthenticated));\n\n if (filteredItems.length === 0) {\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 {filteredItems.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 joinUrl(item.id);\n })\n : joinUrl(id)) ??\n joinUrl(id);\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 type=\"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 {\n isProfileMenuPlugin,\n type ProfileNavigationItem,\n} 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 flex relative items-center justify-between 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\n <div className=\"absolute inset-x-0 justify-center items-center hidden lg:flex w-full pointer-events-none\">\n <Search className=\"pointer-events-auto\" />\n </div>\n\n <div className=\"flex items-center gap-8\">\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 * as React from \"react\";\nimport { Drawer as DrawerPrimitive } from \"vaul\";\nimport { cn } from \"../util/cn.js\";\n\nconst Drawer = ({\n shouldScaleBackground = true,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) => (\n <DrawerPrimitive.Root\n shouldScaleBackground={shouldScaleBackground}\n {...props}\n />\n);\nDrawer.displayName = \"Drawer\";\n\nconst DrawerTrigger: typeof DrawerPrimitive.Trigger = DrawerPrimitive.Trigger;\n\nconst DrawerPortal: typeof DrawerPrimitive.Portal = DrawerPrimitive.Portal;\n\nconst DrawerClose: typeof DrawerPrimitive.Close = DrawerPrimitive.Close;\n\nconst DrawerOverlay: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay> &\n React.RefAttributes<React.ElementRef<typeof DrawerPrimitive.Overlay>>\n> = React.forwardRef(({ className, ...props }, ref) => (\n <DrawerPrimitive.Overlay\n ref={ref}\n className={cn(\"fixed inset-0 z-50 bg-black/80\", className)}\n {...props}\n />\n));\nDrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName;\n\nconst DrawerContent: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content> & {\n hideBar?: boolean;\n } & React.RefAttributes<React.ElementRef<typeof DrawerPrimitive.Content>>\n> = React.forwardRef(\n ({ className, children, hideBar = true, ...props }, ref) => (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-background\",\n className,\n )}\n {...props}\n >\n {!hideBar && (\n <div className=\"mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted\" />\n )}\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n ),\n);\n\nDrawerContent.displayName = \"DrawerContent\";\n\nconst DrawerHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"grid gap-1.5 p-4 text-center sm:text-left\", className)}\n {...props}\n />\n);\nDrawerHeader.displayName = \"DrawerHeader\";\n\nconst DrawerFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n);\nDrawerFooter.displayName = \"DrawerFooter\";\n\nconst DrawerTitle: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title> &\n React.RefAttributes<React.ElementRef<typeof DrawerPrimitive.Title>>\n> = React.forwardRef(({ className, ...props }, ref) => (\n <DrawerPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className,\n )}\n {...props}\n />\n));\nDrawerTitle.displayName = DrawerPrimitive.Title.displayName;\n\nconst DrawerDescription: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description> &\n React.RefAttributes<React.ElementRef<typeof DrawerPrimitive.Description>>\n> = React.forwardRef(({ className, ...props }, ref) => (\n <DrawerPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDrawerDescription.displayName = DrawerPrimitive.Description.displayName;\n\nexport {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerOverlay,\n DrawerPortal,\n DrawerTitle,\n DrawerTrigger,\n};\n","import { type PropsWithChildren, type Ref } from \"react\";\nimport { cn } from \"../../util/cn.js\";\n\nexport const SidebarWrapper = ({\n children,\n className,\n ref,\n}: PropsWithChildren<{\n className?: string;\n ref?: Ref<HTMLDivElement>;\n}>) => (\n <nav\n className={cn(\n \"hidden lg:flex h-full scrollbar flex-col overflow-y-auto shrink-0 text-sm border-r pr-6\",\n \"sticky top-[--header-height] h-[calc(100vh-var(--header-height))]\",\n \"-mx-[--padding-nav-item] max-w-[--side-nav-width] pb-6 pt-[--padding-content-top] scroll-pt-2 gap-2\",\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 type { SidebarItem as SidebarItemType } from \"../../../config/validators/SidebarSchema.js\";\nimport { DrawerContent, DrawerTitle } from \"../../ui/Drawer.js\";\nimport { scrollIntoViewIfNeeded } from \"../../util/scrollIntoViewIfNeeded.js\";\nimport { Slotlet } from \"../SlotletProvider.js\";\nimport { SidebarItem } from \"./SidebarItem.js\";\nimport { SidebarWrapper } from \"./SidebarWrapper.js\";\n\nexport const Sidebar = ({\n onRequestClose,\n sidebar,\n}: {\n onRequestClose?: () => void;\n sidebar: SidebarItemType[];\n}) => {\n const navRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const active = navRef.current?.querySelector('[aria-current=\"page\"]');\n scrollIntoViewIfNeeded(active ?? null);\n }, []);\n\n return (\n <>\n <SidebarWrapper ref={navRef}>\n <Slotlet name=\"zudoku-before-navigation\" />\n {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 {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 { PanelLeftIcon } from \"lucide-react\";\nimport { type PropsWithChildren, useState } from \"react\";\nimport { Drawer, DrawerTrigger } from \"zudoku/ui/Drawer.js\";\nimport { cn } from \"../util/cn.js\";\nimport { useCurrentNavigation } from \"./context/ZudokuContext.js\";\nimport { Sidebar } from \"./navigation/Sidebar.js\";\nimport { Slotlet } from \"./SlotletProvider.js\";\n\nexport const Main = ({ children }: PropsWithChildren) => {\n const [isDrawerOpen, setDrawerOpen] = useState(false);\n const { sidebar } = useCurrentNavigation();\n const hasSidebar = sidebar.length > 0;\n\n return (\n <Drawer\n direction=\"left\"\n open={isDrawerOpen}\n onOpenChange={(open) => setDrawerOpen(open)}\n >\n {hasSidebar && (\n <Sidebar\n onRequestClose={() => setDrawerOpen(false)}\n sidebar={sidebar}\n />\n )}\n {hasSidebar && (\n <div className=\"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 <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 )}\n <main\n data-pagefind-body\n className={cn(\n \"h-auto dark:border-white/10 translate-x-0\",\n hasSidebar ? \"lg:pl-12\" : \"col-span-full\",\n )}\n >\n <Slotlet name=\"zudoku-before-content\" />\n {children}\n <Slotlet name=\"zudoku-after-content\" />\n </main>\n </Drawer>\n );\n};\n","import { Helmet } from \"@zudoku/react-helmet-async\";\nimport { Suspense, useEffect, type ReactNode } from \"react\";\nimport { Outlet, useLocation, useNavigation } from \"react-router\";\nimport { useSpinDelay } from \"spin-delay\";\nimport { joinUrl } from \"../util/joinUrl.js\";\nimport { useScrollToAnchor } from \"../util/useScrollToAnchor.js\";\nimport { useScrollToTop } from \"../util/useScrollToTop.js\";\nimport { useZudoku } from \"./context/ZudokuContext.js\";\nimport { Header } from \"./Header.js\";\nimport { Main } from \"./Main.js\";\nimport { Slotlet } from \"./SlotletProvider.js\";\nimport { Spinner } from \"./Spinner.js\";\n\nconst LoadingFallback = () => (\n <main className=\"col-span-full row-span-full grid place-items-center\">\n <Spinner />\n </main>\n);\n\nexport const Layout = ({ children }: { children?: ReactNode }) => {\n const { meta, authentication, options } = useZudoku();\n const location = useLocation();\n\n useScrollToAnchor();\n useScrollToTop();\n\n useEffect(() => {\n // Initialize the authentication plugin\n authentication?.onPageLoad?.();\n }, [authentication]);\n\n // Page transition is happening: https://reactrouter.com/start/framework/pending-navigation\n const isNavigating = Boolean(useNavigation().location);\n const showSpinner = useSpinDelay(isNavigating, {\n delay: 300,\n minDuration: 500,\n });\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 {options.canonicalUrlOrigin && (\n <link\n rel=\"canonical\"\n href={joinUrl(\n options.canonicalUrlOrigin,\n options.basePath,\n location.pathname,\n )}\n />\n )}\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=\"grid grid-cols-1 grid-rows-[min-content_1fr] lg:grid-cols-[var(--side-nav-width)_1fr] max-w-screen-2xl w-full lg:mx-auto px-4 lg:px-8 2xl:border-x\">\n {showSpinner ? (\n <LoadingFallback />\n ) : (\n <Suspense fallback={<LoadingFallback />}>\n <Main>{children ?? <Outlet />}</Main>\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","export let createNanoEvents = () => ({\n emit(event, ...args) {\n for (\n let callbacks = this.events[event] || [],\n i = 0,\n length = callbacks.length;\n i < length;\n i++\n ) {\n callbacks[i](...args)\n }\n },\n events: {},\n on(event, cb) {\n ;(this.events[event] ||= []).push(cb)\n return () => {\n this.events[event] = this.events[event]?.filter(i => cb !== i)\n }\n }\n})\n","import type { QueryClient } from \"@tanstack/react-query\";\nimport { createNanoEvents } from \"nanoevents\";\nimport type { ReactNode } from \"react\";\nimport type { Location } from \"react-router\";\nimport type { TopNavigationItem } from \"../../config/validators/common.js\";\nimport type { SidebarConfig } from \"../../config/validators/SidebarSchema.js\";\nimport type { AuthenticationProvider } from \"../authentication/authentication.js\";\nimport { type AuthState, useAuthState } from \"../authentication/state.js\";\nimport type { ComponentsContextType } from \"../components/context/ComponentsContext.js\";\nimport type { Slotlets } from \"../components/SlotletProvider.js\";\nimport { joinPath } from \"../util/joinPath.js\";\nimport type { MdxComponentsType } from \"../util/MdxComponents.js\";\nimport { objectEntries } from \"../util/objectEntries.js\";\nimport {\n isApiIdentityPlugin,\n isEventConsumerPlugin,\n isNavigationPlugin,\n type NavigationPlugin,\n needsInitialization,\n type ZudokuPlugin,\n} from \"./plugins.js\";\n\nexport interface ZudokuEvents {\n location: (event: { from?: Location; to: Location }) => void;\n auth: (auth: { prev: AuthState; next: AuthState }) => void;\n}\n\nexport interface ApiIdentity {\n authorizeRequest: (request: Request) => Promise<Request> | Request;\n authorizationFields?: {\n headers?: string[];\n queryParams?: string[];\n };\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 basePath?: string;\n canonicalUrlOrigin?: string;\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 private emitter = createNanoEvents<ZudokuEvents>();\n\n constructor(\n public readonly options: ZudokuContextOptions,\n public readonly queryClient: QueryClient,\n ) {\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 this.plugins.forEach((plugin) => {\n if (!isEventConsumerPlugin(plugin)) return;\n\n objectEntries(plugin.events).forEach(([event, handler]) => {\n this.emitter.on(event, handler!);\n });\n });\n\n useAuthState.subscribe((state, prevState) => {\n this.emitEvent(\"auth\", {\n prev: prevState,\n next: state,\n });\n });\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 addEventListener<E extends keyof ZudokuEvents>(\n event: E,\n callback: ZudokuEvents[E],\n ) {\n return this.emitter.on(event, callback);\n }\n\n emitEvent = <E extends keyof ZudokuEvents>(\n event: E,\n ...data: Parameters<ZudokuEvents[E]>\n ) => {\n return this.emitter.emit(event, ...data);\n };\n\n getPluginSidebar = async (path: string) => {\n const navigations = await Promise.all(\n this.navigationPlugins.map((plugin) =>\n plugin.getSidebar?.(joinPath(path), this),\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 return await this.authentication.signRequest(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 { useEffect, useRef } from \"react\";\nimport { useLocation, type Location } from \"react-router\";\nimport { useZudoku } from \"./ZudokuContext.js\";\n\nexport const RouterEventsEmitter = () => {\n const location = useLocation();\n const zudoku = useZudoku();\n const previousLocation = useRef<Location | undefined>(undefined);\n\n useEffect(() => {\n zudoku.emitEvent(\"location\", {\n from: previousLocation.current,\n to: location,\n });\n previousLocation.current = location;\n }, [zudoku, location]);\n\n return null;\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 { useQueryClient } from \"@tanstack/react-query\";\nimport { Helmet } from \"@zudoku/react-helmet-async\";\nimport { ThemeProvider } from \"next-themes\";\nimport {\n memo,\n type PropsWithChildren,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { Outlet, useLocation, useNavigation } from \"react-router\";\nimport { hasHead, isMdxProviderPlugin } from \"../core/plugins.js\";\nimport {\n ZudokuContext,\n type ZudokuContextOptions,\n} 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 { RouterEventsEmitter } from \"./context/RouterEventsEmitter.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 location = useLocation();\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 const queryClient = useQueryClient();\n\n useEffect(() => {\n if (didNavigate) {\n return;\n }\n setDidNavigate(true);\n }, [didNavigate, navigation.location]);\n\n const [zudokuContext] = useState(\n () => new ZudokuContext(props, queryClient),\n );\n\n const heads = props.plugins\n ?.flatMap((plugin) =>\n hasHead(plugin) ? (plugin.getHead?.({ location }) ?? []) : [],\n )\n // eslint-disable-next-line react/no-array-index-key\n .map((entry, i) => <Helmet key={i}>{entry}</Helmet>);\n\n return (\n <>\n {heads}\n <StaggeredRenderContext.Provider value={staggeredValue}>\n <ZudokuProvider context={zudokuContext}>\n <RouterEventsEmitter />\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","RouteGuard","auth","useAuth","zudoku","useZudoku","navigate","useNavigate","location","useLocation","latestPath","useLatest","protectedRoutes","isProtected","path","matchPath","useQuery","resolve","jsx","Dialog","open","DialogContent","DialogHeader","DialogTitle","DialogDescription","ZudokuError","Outlet","ServerError","error","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","useRef","useEffect","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","filteredItems","TopNavItem","Slotlet","id","label","defaultLink","sidebars","currentSidebar","currentNav","useCurrentNavigation","isNavigating","useNavigation","isActive","first","traverseSidebar","joinUrl","NavLink","isPending","cx","MobileTopNavigation","drawerOpen","setDrawerOpen","Drawer","DrawerTrigger","MenuIcon","DrawerContent","VisuallyHidden","DrawerTitle","RecursiveMenu","DropdownMenuSub","DropdownMenuSubTrigger","DropdownMenuPortal","DropdownMenuSubContent","i","Link","DropdownMenuItem","Header","memo","profile","isAuthEnabled","plugins","accountItems","p","isProfileMenuPlugin","Fragment","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","shouldScaleBackground","DrawerPrimitive","DrawerPortal","DrawerOverlay","ref","hideBar","DrawerDescription","SidebarWrapper","Sidebar","onRequestClose","sidebar","navRef","active","scrollIntoViewIfNeeded","SidebarItem","Main","isDrawerOpen","hasSidebar","PanelLeftIcon","LoadingFallback","Spinner","Layout","authentication","useScrollToAnchor","showSpinner","Helmet","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","createNanoEvents","callbacks","length","cb","ZudokuContext","__publicField","needsInitialization","plugin","isApiIdentityPlugin","joinPath","nav","request","isNavigationPlugin","isEventConsumerPlugin","objectEntries","handler","useAuthState","callback","TopLevelError","resetErrorBoundary","root","DEFAULT_COMPONENTS","ComponentsContext","ComponentsProvider","RouterEventsEmitter","previousLocation","ZudokuProvider","useSuspenseQuery","ZudokuReactContext","ZudokoInner","components","useMemo","mdxComponents","isMdxProviderPlugin","acc","curr","MdxComponents","stagger","useContext","didNavigate","setDidNavigate","staggeredValue","navigation","zudokuContext","heads","hasHead","entry","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,8,11,27,28]}
|
|
1
|
+
{"version":3,"file":"zudoku.components.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
|
package/lib/zudoku.hooks.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z as f } from "./index-DwT-v3zK.js";
|
|
2
2
|
import { useState as m, useEffect as i } from "react";
|
|
3
|
-
import { a } from "./hook-
|
|
3
|
+
import { e as a } from "./hook-CqpVYDqN.js";
|
|
4
4
|
function d(e, t) {
|
|
5
5
|
const s = a(), [n, o] = m();
|
|
6
6
|
return i(() => s.addEventListener(e, (...u) => {
|
|
@@ -1,120 +1,124 @@
|
|
|
1
|
-
import { j as
|
|
1
|
+
import { j as t } from "./jsx-runtime-CYK1ROHF.js";
|
|
2
2
|
import { s as h } from "./index-LNp6rxyU.js";
|
|
3
3
|
import { d as b, m as x } from "./chunk-HA7DTUK3-C4gP41vD.js";
|
|
4
|
-
import { u as j,
|
|
5
|
-
import { H as v } from "./
|
|
6
|
-
import {
|
|
7
|
-
import { H as S, M as w } from "./Markdown-
|
|
4
|
+
import { u as j, d as y, f as p } from "./hook-CqpVYDqN.js";
|
|
5
|
+
import { H as v } from "./RouteGuard-CqZPoZYJ.js";
|
|
6
|
+
import { L as N } from "./index-D6ktNq4i.js";
|
|
7
|
+
import { H as S, M as w } from "./Markdown-aF5FdsNi.js";
|
|
8
8
|
const H = ({
|
|
9
|
-
items:
|
|
10
|
-
filterCatalogItems:
|
|
11
|
-
label:
|
|
12
|
-
categoryLabel:
|
|
9
|
+
items: r,
|
|
10
|
+
filterCatalogItems: o = (n) => n,
|
|
11
|
+
label: d = "API Library",
|
|
12
|
+
categoryLabel: a
|
|
13
13
|
}) => {
|
|
14
|
-
const n = j(),
|
|
15
|
-
queryFn: () => r
|
|
14
|
+
const n = j(), i = b({ path: "/catalog/:category" }), s = i == null ? void 0 : i.params.category, l = y({
|
|
15
|
+
queryFn: () => o(r, { auth: n }),
|
|
16
16
|
queryKey: ["catalogItems", n]
|
|
17
|
-
}),
|
|
18
|
-
return /* @__PURE__ */
|
|
17
|
+
}), m = s ? { "data-pagefind-ignore": "all" } : {};
|
|
18
|
+
return /* @__PURE__ */ t.jsxs(
|
|
19
19
|
"section",
|
|
20
20
|
{
|
|
21
21
|
className: "pt-[--padding-content-top] pb-[--padding-content-bottom]",
|
|
22
|
-
...
|
|
22
|
+
...m,
|
|
23
23
|
children: [
|
|
24
|
-
/* @__PURE__ */
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
/* @__PURE__ */ t.jsx(v, { children: /* @__PURE__ */ t.jsxs("title", { children: [
|
|
25
|
+
a ? `${a} - ` : "",
|
|
26
|
+
d
|
|
27
27
|
] }) }),
|
|
28
|
-
/* @__PURE__ */
|
|
29
|
-
/* @__PURE__ */
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
/* @__PURE__ */ t.jsxs("div", { className: "grid gap-4", children: [
|
|
29
|
+
/* @__PURE__ */ t.jsxs(S, { level: 2, children: [
|
|
30
|
+
d,
|
|
31
|
+
a && ` - ${a}`
|
|
32
32
|
] }),
|
|
33
|
-
/* @__PURE__ */
|
|
34
|
-
(
|
|
35
|
-
(
|
|
33
|
+
/* @__PURE__ */ t.jsx("div", { className: "grid grid-cols-2 gap-4", children: l.data.filter(
|
|
34
|
+
(e) => !s || e.categories.find(
|
|
35
|
+
(c) => c.tags.find((g) => u(c.label, g) === s)
|
|
36
36
|
)
|
|
37
|
-
).map((
|
|
37
|
+
).map((e) => /* @__PURE__ */ t.jsx(
|
|
38
38
|
N,
|
|
39
39
|
{
|
|
40
|
-
to:
|
|
40
|
+
to: p(e.path),
|
|
41
41
|
className: "no-underline hover:!text-foreground",
|
|
42
|
-
children: /* @__PURE__ */
|
|
43
|
-
/* @__PURE__ */
|
|
44
|
-
/* @__PURE__ */
|
|
42
|
+
children: /* @__PURE__ */ t.jsxs("div", { className: "border h-full rounded-lg p-4 flex flex-col gap-2 cursor-pointer hover:bg-border/20 font-normal", children: [
|
|
43
|
+
/* @__PURE__ */ t.jsx("span", { className: "font-semibold", children: e.label }),
|
|
44
|
+
/* @__PURE__ */ t.jsx(
|
|
45
45
|
w,
|
|
46
46
|
{
|
|
47
47
|
className: "text-sm whitespace-pre-wrap mb-6 line-clamp-2",
|
|
48
|
-
content:
|
|
48
|
+
content: e.description
|
|
49
49
|
}
|
|
50
50
|
)
|
|
51
51
|
] })
|
|
52
52
|
},
|
|
53
|
-
|
|
53
|
+
e.path
|
|
54
54
|
)) })
|
|
55
55
|
] })
|
|
56
56
|
]
|
|
57
57
|
}
|
|
58
58
|
);
|
|
59
|
-
},
|
|
60
|
-
navigationId:
|
|
61
|
-
items:
|
|
62
|
-
label:
|
|
63
|
-
categories:
|
|
59
|
+
}, u = (r, o) => h(`${r}-${o}`), A = ({
|
|
60
|
+
navigationId: r,
|
|
61
|
+
items: o,
|
|
62
|
+
label: d,
|
|
63
|
+
categories: a = [],
|
|
64
64
|
filterCatalogItems: n
|
|
65
|
-
}) =>
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
65
|
+
}) => {
|
|
66
|
+
const i = Object.fromEntries(
|
|
67
|
+
a.flatMap(
|
|
68
|
+
(s) => [void 0, ...s.tags].map((l) => [
|
|
69
|
+
p(r, l ? u(s.label, l) : void 0),
|
|
70
|
+
l
|
|
71
|
+
])
|
|
72
|
+
)
|
|
73
|
+
);
|
|
74
|
+
return {
|
|
75
|
+
getSidebar: async (s) => {
|
|
76
|
+
if (!Object.keys(i).some(
|
|
77
|
+
(e) => x(e, s)
|
|
78
|
+
))
|
|
79
|
+
return [];
|
|
80
|
+
const m = a.map((e) => ({
|
|
81
|
+
type: "category",
|
|
82
|
+
label: e.label,
|
|
83
|
+
collapsible: !1,
|
|
84
|
+
items: e.tags.map((c) => ({
|
|
76
85
|
type: "doc",
|
|
77
|
-
id:
|
|
78
|
-
label:
|
|
86
|
+
id: p(r, u(e.label, c)),
|
|
87
|
+
label: c,
|
|
79
88
|
badge: {
|
|
80
89
|
label: String(
|
|
81
|
-
|
|
82
|
-
(
|
|
90
|
+
o.filter(
|
|
91
|
+
(g) => g.categories.find((f) => f.tags.includes(c))
|
|
83
92
|
).length
|
|
84
93
|
),
|
|
85
94
|
color: "outline"
|
|
86
95
|
}
|
|
87
|
-
}
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
path: d(
|
|
100
|
-
s,
|
|
101
|
-
a ? g(o.label, a) : void 0
|
|
102
|
-
),
|
|
103
|
-
element: /* @__PURE__ */ e.jsx(
|
|
96
|
+
}))
|
|
97
|
+
}));
|
|
98
|
+
return m.unshift({
|
|
99
|
+
type: "doc",
|
|
100
|
+
id: p(r),
|
|
101
|
+
label: "Overview",
|
|
102
|
+
badge: { label: String(o.length), color: "outline" }
|
|
103
|
+
}), m;
|
|
104
|
+
},
|
|
105
|
+
getRoutes: () => Object.entries(i).map(([s, l]) => ({
|
|
106
|
+
path: s,
|
|
107
|
+
element: /* @__PURE__ */ t.jsx(
|
|
104
108
|
H,
|
|
105
109
|
{
|
|
106
|
-
label:
|
|
107
|
-
categoryLabel:
|
|
108
|
-
items:
|
|
110
|
+
label: d,
|
|
111
|
+
categoryLabel: l,
|
|
112
|
+
items: o,
|
|
109
113
|
filterCatalogItems: n,
|
|
110
|
-
categories:
|
|
114
|
+
categories: a
|
|
111
115
|
}
|
|
112
116
|
)
|
|
113
117
|
}))
|
|
114
|
-
|
|
115
|
-
}
|
|
118
|
+
};
|
|
119
|
+
};
|
|
116
120
|
export {
|
|
117
|
-
|
|
118
|
-
|
|
121
|
+
A as apiCatalogPlugin,
|
|
122
|
+
u as getKey
|
|
119
123
|
};
|
|
120
124
|
//# sourceMappingURL=zudoku.plugin-api-catalog.js.map
|