zudoku 0.55.1 → 0.56.0

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.
Files changed (129) hide show
  1. package/dist/app/main.d.ts +1 -1
  2. package/dist/app/main.js +11 -4
  3. package/dist/app/main.js.map +1 -1
  4. package/dist/config/validators/InputNavigationSchema.d.ts +4 -0
  5. package/dist/config/validators/InputNavigationSchema.js +1 -0
  6. package/dist/config/validators/InputNavigationSchema.js.map +1 -1
  7. package/dist/config/validators/validate.d.ts +1 -0
  8. package/dist/config/validators/validate.js +1 -0
  9. package/dist/config/validators/validate.js.map +1 -1
  10. package/dist/flat-config.d.ts +329 -0
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.js +1 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/lib/components/BuildCheck.js +7 -0
  15. package/dist/lib/components/BuildCheck.js.map +1 -1
  16. package/dist/lib/components/Header.js +1 -1
  17. package/dist/lib/components/Header.js.map +1 -1
  18. package/dist/lib/components/Layout.js +4 -7
  19. package/dist/lib/components/Layout.js.map +1 -1
  20. package/dist/lib/components/Meta.d.ts +2 -0
  21. package/dist/lib/components/Meta.js +11 -0
  22. package/dist/lib/components/Meta.js.map +1 -0
  23. package/dist/lib/components/context/ZudokuContext.js +1 -1
  24. package/dist/lib/components/context/ZudokuContext.js.map +1 -1
  25. package/dist/lib/components/index.d.ts +1 -0
  26. package/dist/lib/components/index.js +2 -0
  27. package/dist/lib/components/index.js.map +1 -1
  28. package/dist/lib/components/navigation/NavigationItem.js +3 -2
  29. package/dist/lib/components/navigation/NavigationItem.js.map +1 -1
  30. package/dist/lib/components/navigation/utils.js +12 -11
  31. package/dist/lib/components/navigation/utils.js.map +1 -1
  32. package/dist/lib/core/ZudokuContext.d.ts +1 -0
  33. package/dist/lib/core/ZudokuContext.js.map +1 -1
  34. package/dist/lib/plugins/custom-pages/index.js +3 -0
  35. package/dist/lib/plugins/custom-pages/index.js.map +1 -1
  36. package/dist/lib/ui/CodeBlock.js +2 -2
  37. package/dist/lib/ui/CodeBlock.js.map +1 -1
  38. package/dist/lib/ui/Dialog.js +2 -2
  39. package/dist/lib/ui/Dialog.js.map +1 -1
  40. package/dist/vite/plugin-mdx.js +1 -1
  41. package/dist/vite/plugin-mdx.js.map +1 -1
  42. package/dist/vite/sitemap.js +10 -9
  43. package/dist/vite/sitemap.js.map +1 -1
  44. package/lib/{CodeBlock-CVT6z0PP.js → CodeBlock-yJjjRwj-.js} +3 -3
  45. package/lib/CodeBlock-yJjjRwj-.js.map +1 -0
  46. package/lib/{Command-BYukybsa.js → Command-CfgGXMfJ.js} +2 -2
  47. package/lib/{Command-BYukybsa.js.map → Command-CfgGXMfJ.js.map} +1 -1
  48. package/lib/Dialog-B7YnrNnG.js +114 -0
  49. package/lib/Dialog-B7YnrNnG.js.map +1 -0
  50. package/lib/{MdxPage-BKyikAKk.js → MdxPage-D49lfheg.js} +7 -7
  51. package/lib/{MdxPage-BKyikAKk.js.map → MdxPage-D49lfheg.js.map} +1 -1
  52. package/lib/{OAuthErrorPage--neTdY8H.js → OAuthErrorPage-COKL9zOi.js} +6 -6
  53. package/lib/{OAuthErrorPage--neTdY8H.js.map → OAuthErrorPage-COKL9zOi.js.map} +1 -1
  54. package/lib/{OasProvider-yysXhMVI.js → OasProvider-CCv_-asV.js} +2 -2
  55. package/lib/{OasProvider-yysXhMVI.js.map → OasProvider-CCv_-asV.js.map} +1 -1
  56. package/lib/{OperationList-CSYrpcpD.js → OperationList-DkS0B0y1.js} +11 -11
  57. package/lib/{OperationList-CSYrpcpD.js.map → OperationList-DkS0B0y1.js.map} +1 -1
  58. package/lib/{Pagination-QsyyJuoq.js → Pagination-VfR2DCXf.js} +2 -2
  59. package/lib/{Pagination-QsyyJuoq.js.map → Pagination-VfR2DCXf.js.map} +1 -1
  60. package/lib/{RouteGuard-D17dUEM_.js → RouteGuard-CSi9-hSR.js} +4 -4
  61. package/lib/{RouteGuard-D17dUEM_.js.map → RouteGuard-CSi9-hSR.js.map} +1 -1
  62. package/lib/{SchemaList-CSZkqmwI.js → SchemaList-B7ezc5Uy.js} +8 -8
  63. package/lib/{SchemaList-CSZkqmwI.js.map → SchemaList-B7ezc5Uy.js.map} +1 -1
  64. package/lib/{SchemaView-bhJ_U4vL.js → SchemaView-BuL-ycaR.js} +4 -4
  65. package/lib/{SchemaView-bhJ_U4vL.js.map → SchemaView-BuL-ycaR.js.map} +1 -1
  66. package/lib/{Select-DlfI9FFO.js → Select-B9h5k2Pz.js} +3 -3
  67. package/lib/{Select-DlfI9FFO.js.map → Select-B9h5k2Pz.js.map} +1 -1
  68. package/lib/{SignUp-C6ogvx5s.js → SignUp-Cn_gZ7UN.js} +3 -3
  69. package/lib/{SignUp-C6ogvx5s.js.map → SignUp-Cn_gZ7UN.js.map} +1 -1
  70. package/lib/{Slot-Dgy8tqef.js → Slot-BFCJzl5J.js} +358 -358
  71. package/lib/{Slot-Dgy8tqef.js.map → Slot-BFCJzl5J.js.map} +1 -1
  72. package/lib/{SyntaxHighlight-BD_Z_Csq.js → SyntaxHighlight-CSW4eaIJ.js} +313 -313
  73. package/lib/SyntaxHighlight-CSW4eaIJ.js.map +1 -0
  74. package/lib/{Toc-CjX59Ljo.js → Toc-B9K7a2FS.js} +2 -2
  75. package/lib/{Toc-CjX59Ljo.js.map → Toc-B9K7a2FS.js.map} +1 -1
  76. package/lib/{ZudokuContext-Coxa0DfE.js → ZudokuContext-mDDq1hft.js} +76 -68
  77. package/lib/{ZudokuContext-Coxa0DfE.js.map → ZudokuContext-mDDq1hft.js.map} +1 -1
  78. package/lib/{circular-Q4G1nwyb.js → circular-BMUvC5RK.js} +2 -2
  79. package/lib/{circular-Q4G1nwyb.js.map → circular-BMUvC5RK.js.map} +1 -1
  80. package/lib/{createServer-Dtstxqn7.js → createServer-I8dX2VSu.js} +4 -4
  81. package/lib/{createServer-Dtstxqn7.js.map → createServer-I8dX2VSu.js.map} +1 -1
  82. package/lib/{errors-BoJYHL2E.js → errors-D2Qdkul6.js} +2 -2
  83. package/lib/{errors-BoJYHL2E.js.map → errors-D2Qdkul6.js.map} +1 -1
  84. package/lib/{hook-DEPqwjke.js → hook-CGx8MPrU.js} +2 -2
  85. package/lib/{hook-DEPqwjke.js.map → hook-CGx8MPrU.js.map} +1 -1
  86. package/lib/{index-DYs8gxKX.js → index-Cc70HIQT.js} +106 -101
  87. package/lib/index-Cc70HIQT.js.map +1 -0
  88. package/lib/{index-Bl1W774G.js → index-ChOC1gfC.js} +2 -2
  89. package/lib/{index-Bl1W774G.js.map → index-ChOC1gfC.js.map} +1 -1
  90. package/lib/{index-DRkS-pvf.js → index-DZqSbZzE.js} +16 -16
  91. package/lib/{index-DRkS-pvf.js.map → index-DZqSbZzE.js.map} +1 -1
  92. package/lib/ui/CodeBlock.js +1 -1
  93. package/lib/ui/Command.js +1 -1
  94. package/lib/ui/Dialog.js +56 -41
  95. package/lib/ui/Dialog.js.map +1 -1
  96. package/lib/ui/SyntaxHighlight.js +3 -3
  97. package/lib/zudoku.auth-auth0.js +1 -1
  98. package/lib/zudoku.auth-azureb2c.js +5 -5
  99. package/lib/zudoku.auth-clerk.js +2 -2
  100. package/lib/zudoku.auth-openid.js +5 -5
  101. package/lib/zudoku.auth-supabase.js +2 -2
  102. package/lib/zudoku.components.js +19 -18
  103. package/lib/zudoku.hooks.js +3 -3
  104. package/lib/zudoku.plugin-api-catalog.js +6 -6
  105. package/lib/zudoku.plugin-api-keys.js +6 -6
  106. package/lib/zudoku.plugin-custom-pages.js +8 -5
  107. package/lib/zudoku.plugin-custom-pages.js.map +1 -1
  108. package/lib/zudoku.plugin-markdown.js +1 -1
  109. package/lib/zudoku.plugin-openapi.js +3 -3
  110. package/lib/zudoku.plugin-search-pagefind.js +5 -5
  111. package/package.json +6 -6
  112. package/src/app/main.tsx +18 -4
  113. package/src/lib/components/BuildCheck.tsx +10 -0
  114. package/src/lib/components/Header.tsx +3 -2
  115. package/src/lib/components/Layout.tsx +2 -21
  116. package/src/lib/components/Meta.tsx +32 -0
  117. package/src/lib/components/context/ZudokuContext.ts +1 -1
  118. package/src/lib/components/index.ts +2 -0
  119. package/src/lib/components/navigation/NavigationItem.tsx +4 -2
  120. package/src/lib/components/navigation/utils.ts +12 -12
  121. package/src/lib/core/ZudokuContext.ts +1 -0
  122. package/src/lib/plugins/custom-pages/index.tsx +3 -0
  123. package/src/lib/ui/CodeBlock.tsx +2 -2
  124. package/src/lib/ui/Dialog.tsx +12 -3
  125. package/lib/CodeBlock-CVT6z0PP.js.map +0 -1
  126. package/lib/Dialog-u9Uz9sTt.js +0 -99
  127. package/lib/Dialog-u9Uz9sTt.js.map +0 -1
  128. package/lib/SyntaxHighlight-BD_Z_Csq.js.map +0 -1
  129. package/lib/index-DYs8gxKX.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { j as t } from "./jsx-runtime-C5mzlN2N.js";
2
2
  import { LogOutIcon as n } from "lucide-react";
3
- import { S as i, a, b as u } from "./SignUp-C6ogvx5s.js";
3
+ import { S as i, a, b as u } from "./SignUp-Cn_gZ7UN.js";
4
4
  import { Z as m } from "./invariant-Bm-FVUQE.js";
5
5
  class h {
6
6
  getRoutes() {
@@ -42,4 +42,4 @@ export {
42
42
  h as C,
43
43
  f as O
44
44
  };
45
- //# sourceMappingURL=errors-BoJYHL2E.js.map
45
+ //# sourceMappingURL=errors-D2Qdkul6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors-BoJYHL2E.js","sources":["../src/lib/authentication/AuthenticationPlugin.tsx","../src/lib/authentication/errors.ts"],"sourcesContent":["import { LogOutIcon } from \"lucide-react\";\nimport {\n type CommonPlugin,\n type NavigationPlugin,\n type ProfileMenuPlugin,\n} from \"../core/plugins.js\";\nimport { SignIn } from \"./components/SignIn.js\";\nimport { SignOut } from \"./components/SignOut.js\";\nimport { SignUp } from \"./components/SignUp.js\";\n\ntype PluginInterface = NavigationPlugin & CommonPlugin & ProfileMenuPlugin;\n\nexport class CoreAuthenticationPlugin implements PluginInterface {\n getRoutes() {\n return [\n {\n path: \"/signout\",\n element: <SignOut />,\n },\n {\n path: \"/signin\",\n element: <SignIn />,\n },\n {\n path: \"/signup\",\n element: <SignUp />,\n },\n ];\n }\n\n getProfileMenuItems() {\n return [\n {\n label: \"Logout\",\n path: \"/signout\",\n category: \"bottom\",\n icon: LogOutIcon,\n } as const,\n ];\n }\n}\n","import type { OAuth2Error } from \"oauth4webapi\";\nimport { ZudokuError, type ZudokuErrorOptions } from \"../util/invariant.js\";\n\nexport class AuthorizationError extends Error {}\n\nexport class OAuthAuthorizationError extends ZudokuError {\n constructor(\n message: string,\n public error: OAuth2Error,\n options?: ZudokuErrorOptions,\n ) {\n super(message, options);\n }\n}\n\nexport type OAuthErrorType =\n // Authorization errors\n | \"invalid_request\"\n | \"unauthorized_client\"\n | \"access_denied\"\n | \"unsupported_response_type\"\n | \"invalid_scope\"\n | \"server_error\"\n | \"temporarily_unavailable\"\n // Token errors\n | \"invalid_client\"\n | \"invalid_grant\"\n | \"unsupported_grant_type\"\n // Custom errors\n | \"invalid_state\"\n | \"missing_code_verifier\"\n | \"network_error\"\n | \"token_expired\"\n | \"configuration_error\"\n | \"unknown_error\";\n"],"names":["CoreAuthenticationPlugin","SignOut","SignIn","SignUp","LogOutIcon","AuthorizationError","OAuthAuthorizationError","ZudokuError","message","error","options"],"mappings":";;;;AAYO,MAAMA,EAAoD;AAAA,EAC/D,YAAY;AACV,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,+BAAUC,GAAA,CAAA,CAAQ;AAAA,MAAA;AAAA,MAEpB;AAAA,QACE,MAAM;AAAA,QACN,+BAAUC,GAAA,CAAA,CAAO;AAAA,MAAA;AAAA,MAEnB;AAAA,QACE,MAAM;AAAA,QACN,+BAAUC,GAAA,CAAA,CAAO;AAAA,MAAA;AAAA,IACnB;AAAA,EAEJ;AAAA,EAEA,sBAAsB;AACpB,WAAO;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAU;AAAA,QACV,MAAMC;AAAA,MAAA;AAAA,IACR;AAAA,EAEJ;AACF;ACrCO,MAAMC,UAA2B,MAAM;AAAC;AAExC,MAAMC,UAAgCC,EAAY;AAAA,EACvD,YACEC,GACOC,GACPC,GACA;AACA,UAAMF,GAASE,CAAO,GAHf,KAAA,QAAAD;AAAA,EAIT;AACF;"}
1
+ {"version":3,"file":"errors-D2Qdkul6.js","sources":["../src/lib/authentication/AuthenticationPlugin.tsx","../src/lib/authentication/errors.ts"],"sourcesContent":["import { LogOutIcon } from \"lucide-react\";\nimport {\n type CommonPlugin,\n type NavigationPlugin,\n type ProfileMenuPlugin,\n} from \"../core/plugins.js\";\nimport { SignIn } from \"./components/SignIn.js\";\nimport { SignOut } from \"./components/SignOut.js\";\nimport { SignUp } from \"./components/SignUp.js\";\n\ntype PluginInterface = NavigationPlugin & CommonPlugin & ProfileMenuPlugin;\n\nexport class CoreAuthenticationPlugin implements PluginInterface {\n getRoutes() {\n return [\n {\n path: \"/signout\",\n element: <SignOut />,\n },\n {\n path: \"/signin\",\n element: <SignIn />,\n },\n {\n path: \"/signup\",\n element: <SignUp />,\n },\n ];\n }\n\n getProfileMenuItems() {\n return [\n {\n label: \"Logout\",\n path: \"/signout\",\n category: \"bottom\",\n icon: LogOutIcon,\n } as const,\n ];\n }\n}\n","import type { OAuth2Error } from \"oauth4webapi\";\nimport { ZudokuError, type ZudokuErrorOptions } from \"../util/invariant.js\";\n\nexport class AuthorizationError extends Error {}\n\nexport class OAuthAuthorizationError extends ZudokuError {\n constructor(\n message: string,\n public error: OAuth2Error,\n options?: ZudokuErrorOptions,\n ) {\n super(message, options);\n }\n}\n\nexport type OAuthErrorType =\n // Authorization errors\n | \"invalid_request\"\n | \"unauthorized_client\"\n | \"access_denied\"\n | \"unsupported_response_type\"\n | \"invalid_scope\"\n | \"server_error\"\n | \"temporarily_unavailable\"\n // Token errors\n | \"invalid_client\"\n | \"invalid_grant\"\n | \"unsupported_grant_type\"\n // Custom errors\n | \"invalid_state\"\n | \"missing_code_verifier\"\n | \"network_error\"\n | \"token_expired\"\n | \"configuration_error\"\n | \"unknown_error\";\n"],"names":["CoreAuthenticationPlugin","SignOut","SignIn","SignUp","LogOutIcon","AuthorizationError","OAuthAuthorizationError","ZudokuError","message","error","options"],"mappings":";;;;AAYO,MAAMA,EAAoD;AAAA,EAC/D,YAAY;AACV,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,+BAAUC,GAAA,CAAA,CAAQ;AAAA,MAAA;AAAA,MAEpB;AAAA,QACE,MAAM;AAAA,QACN,+BAAUC,GAAA,CAAA,CAAO;AAAA,MAAA;AAAA,MAEnB;AAAA,QACE,MAAM;AAAA,QACN,+BAAUC,GAAA,CAAA,CAAO;AAAA,MAAA;AAAA,IACnB;AAAA,EAEJ;AAAA,EAEA,sBAAsB;AACpB,WAAO;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAU;AAAA,QACV,MAAMC;AAAA,MAAA;AAAA,IACR;AAAA,EAEJ;AACF;ACrCO,MAAMC,UAA2B,MAAM;AAAC;AAExC,MAAMC,UAAgCC,EAAY;AAAA,EACvD,YACEC,GACOC,GACPC,GACA;AACA,UAAMF,GAASE,CAAO,GAHf,KAAA,QAAAD;AAAA,EAIT;AACF;"}
@@ -1,4 +1,4 @@
1
- import { c as _ } from "./ZudokuContext-Coxa0DfE.js";
1
+ import { c as _ } from "./ZudokuContext-mDDq1hft.js";
2
2
  import I from "react";
3
3
  const E = (t) => {
4
4
  let n;
@@ -244,4 +244,4 @@ export {
244
244
  x as p,
245
245
  O as u
246
246
  };
247
- //# sourceMappingURL=hook-DEPqwjke.js.map
247
+ //# sourceMappingURL=hook-CGx8MPrU.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hook-DEPqwjke.js","sources":["../../../node_modules/.pnpm/zustand@5.0.6_@types+react@19.1.8_react@19.1.0_use-sync-external-store@1.5.0_react@19.1.0_/node_modules/zustand/esm/vanilla.mjs","../../../node_modules/.pnpm/zustand@5.0.6_@types+react@19.1.8_react@19.1.0_use-sync-external-store@1.5.0_react@19.1.0_/node_modules/zustand/esm/react.mjs","../../../node_modules/.pnpm/zustand@5.0.6_@types+react@19.1.8_react@19.1.0_use-sync-external-store@1.5.0_react@19.1.0_/node_modules/zustand/esm/middleware.mjs","../src/lib/authentication/state.ts","../src/lib/authentication/hook.ts"],"sourcesContent":["const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n () => selector(api.getState()),\n () => selector(api.getInitialState())\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = (createState) => createState ? createImpl(createState) : createImpl;\n\nexport { create, useStore };\n","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...args) => api.dispatch(...args), ...initial };\n};\nconst redux = reduxImpl;\n\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api) return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst removeStoreFromTrackedConnections = (name, store) => {\n if (store === void 0) return;\n const connectionInfo = trackedConnections.get(name);\n if (!connectionInfo) return;\n delete connectionInfo.stores[store];\n if (Object.keys(connectionInfo.stores).length === 0) {\n trackedConnections.delete(name);\n }\n};\nconst findCallerName = (stack) => {\n var _a, _b;\n if (!stack) return void 0;\n const traceLines = stack.split(\"\\n\");\n const apiSetStateLineIndex = traceLines.findIndex(\n (traceLine) => traceLine.includes(\"api.setState\")\n );\n if (apiSetStateLineIndex < 0) return void 0;\n const callerLine = ((_a = traceLines[apiSetStateLineIndex + 1]) == null ? void 0 : _a.trim()) || \"\";\n return (_b = /.+ (.+) .+/.exec(callerLine)) == null ? void 0 : _b[1];\n};\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = (state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording) return r;\n const action = nameOrAction === void 0 ? {\n type: anonymousActionType || findCallerName(new Error().stack) || \"anonymous\"\n } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n };\n api.devtools = {\n cleanup: () => {\n if (connection && typeof connection.unsubscribe === \"function\") {\n connection.unsubscribe();\n }\n removeStoreFromTrackedConnections(options.name, store);\n }\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (api.dispatchFromDevtools && typeof api.dispatch === \"function\") {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...args) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && args[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...args);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format.\n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (!api.dispatchFromDevtools) return;\n if (typeof api.dispatch !== \"function\") return;\n api.dispatch(action);\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState) return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, fn) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0) fn(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = (selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n };\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nfunction combine(initialState, create) {\n return (...args) => Object.assign({}, initialState, create(...args));\n}\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(name, JSON.stringify(newValue, options == null ? void 0 : options.replacer)),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst persistImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage) return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n const migration = options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n if (migration instanceof Promise) {\n return migration.then((result) => [true, result]);\n }\n return [true, migration];\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return [false, deserializedStorageValue.state];\n }\n }\n return [false, void 0];\n }).then((migrationResult) => {\n var _a2;\n const [migrated, migratedState] = migrationResult;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n if (migrated) {\n return setItem();\n }\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persist = persistImpl;\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector };\n","import { create, type Mutate, type StoreApi } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\n\nexport interface AuthState<ProviderData = unknown> {\n isAuthenticated: boolean;\n isPending: boolean;\n profile: UserProfile | null;\n providerData: ProviderData | null;\n setAuthenticationPending: () => void;\n setLoggedOut: () => void;\n setLoggedIn: ({\n profile,\n providerData,\n }: {\n profile: UserProfile;\n providerData: unknown;\n }) => void;\n}\n\nexport type StoreWithPersist<T> = Mutate<\n StoreApi<T>,\n [[\"zustand/persist\", unknown]]\n>;\n\nconst withStorageDOMEvents = <T>(store: StoreWithPersist<T>) => {\n const storageEventCallback = (e: StorageEvent) => {\n if (e.key === store.persist.getOptions().name && e.newValue) {\n void store.persist.rehydrate();\n }\n };\n\n window.addEventListener(\"storage\", storageEventCallback);\n\n return () => {\n window.removeEventListener(\"storage\", storageEventCallback);\n };\n};\n\nexport const useAuthState = create<AuthState>()(\n persist(\n (set) => ({\n isAuthenticated: false,\n isPending: true,\n profile: null,\n providerData: null,\n setAuthenticationPending: () =>\n set(() => ({\n isAuthenticated: false,\n isPending: false,\n profile: null,\n providerData: null,\n })),\n setLoggedOut: () =>\n set(() => ({\n isAuthenticated: false,\n isPending: false,\n profile: null,\n providerData: null,\n })),\n setLoggedIn: ({\n profile,\n providerData,\n }: {\n profile: UserProfile;\n providerData: unknown;\n }) =>\n set(() => ({\n isAuthenticated: true,\n isPending: false,\n profile,\n providerData,\n })),\n }),\n {\n merge: (persistedState, currentState) => {\n return {\n ...currentState,\n isPending: false,\n ...(typeof persistedState === \"object\" ? persistedState : {}),\n };\n },\n name: \"auth-state\",\n storage: createJSONStorage(() => localStorage),\n },\n ),\n);\n\nif (typeof window !== \"undefined\") {\n withStorageDOMEvents(useAuthState);\n}\n\nexport interface UserProfile {\n sub: string;\n email: string | undefined;\n emailVerified: boolean;\n name: string | undefined;\n pictureUrl: string | undefined;\n [key: string]: string | boolean | undefined;\n}\n","import { useZudoku } from \"../components/context/ZudokuContext.js\";\nimport { useAuthState } from \"./state.js\";\n\nexport type UseAuthReturn = ReturnType<typeof useAuth>;\n\nexport const useAuth = () => {\n const { authentication } = useZudoku();\n const authState = useAuthState();\n const isAuthEnabled = typeof authentication !== \"undefined\";\n\n return {\n isAuthEnabled,\n ...authState,\n\n login: async () => {\n if (!isAuthEnabled) {\n throw new Error(\"Authentication is not enabled.\");\n }\n // TODO: Should handle errors/state\n await authentication.signIn({\n redirectTo: window.location.href,\n });\n },\n\n logout: async () => {\n if (!isAuthEnabled) {\n throw new Error(\"Authentication is not enabled.\");\n }\n // TODO: Should handle errors/state\n await authentication.signOut();\n\n // Redirect to home\n window.location.href = \"/\";\n },\n\n signup: async () => {\n if (!isAuthEnabled) {\n throw new Error(\"Authentication is not enabled.\");\n }\n await authentication.signUp({\n redirectTo: window.location.href,\n });\n },\n };\n};\n"],"names":["createStoreImpl","createState","state","listeners","setState","partial","replace","nextState","previousState","listener","getState","api","initialState","createStore","identity","arg","useStore","selector","slice","React","createImpl","useBoundStore","create","createJSONStorage","getStorage","options","storage","name","_a","parse","str2","str","newValue","toThenable","fn","input","result","onFulfilled","_onRejected","_onFulfilled","onRejected","persistImpl","config","baseOptions","set","get","persistedState","currentState","hasHydrated","hydrationListeners","finishHydrationListeners","args","setItem","savedSetState","configResult","stateFromStorage","hydrate","_b","cb","_a2","postRehydrationCallback","deserializedStorageValue","migration","migrationResult","migrated","migratedState","e","newOptions","persist","withStorageDOMEvents","store","storageEventCallback","useAuthState","profile","providerData","useAuth","authentication","useZudoku","authState","isAuthEnabled"],"mappings":"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","x_google_ignoreList":[0,1,2]}
1
+ {"version":3,"file":"hook-CGx8MPrU.js","sources":["../../../node_modules/.pnpm/zustand@5.0.6_@types+react@19.1.8_react@19.1.0_use-sync-external-store@1.5.0_react@19.1.0_/node_modules/zustand/esm/vanilla.mjs","../../../node_modules/.pnpm/zustand@5.0.6_@types+react@19.1.8_react@19.1.0_use-sync-external-store@1.5.0_react@19.1.0_/node_modules/zustand/esm/react.mjs","../../../node_modules/.pnpm/zustand@5.0.6_@types+react@19.1.8_react@19.1.0_use-sync-external-store@1.5.0_react@19.1.0_/node_modules/zustand/esm/middleware.mjs","../src/lib/authentication/state.ts","../src/lib/authentication/hook.ts"],"sourcesContent":["const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n () => selector(api.getState()),\n () => selector(api.getInitialState())\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = (createState) => createState ? createImpl(createState) : createImpl;\n\nexport { create, useStore };\n","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...args) => api.dispatch(...args), ...initial };\n};\nconst redux = reduxImpl;\n\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api) return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst removeStoreFromTrackedConnections = (name, store) => {\n if (store === void 0) return;\n const connectionInfo = trackedConnections.get(name);\n if (!connectionInfo) return;\n delete connectionInfo.stores[store];\n if (Object.keys(connectionInfo.stores).length === 0) {\n trackedConnections.delete(name);\n }\n};\nconst findCallerName = (stack) => {\n var _a, _b;\n if (!stack) return void 0;\n const traceLines = stack.split(\"\\n\");\n const apiSetStateLineIndex = traceLines.findIndex(\n (traceLine) => traceLine.includes(\"api.setState\")\n );\n if (apiSetStateLineIndex < 0) return void 0;\n const callerLine = ((_a = traceLines[apiSetStateLineIndex + 1]) == null ? void 0 : _a.trim()) || \"\";\n return (_b = /.+ (.+) .+/.exec(callerLine)) == null ? void 0 : _b[1];\n};\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = (state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording) return r;\n const action = nameOrAction === void 0 ? {\n type: anonymousActionType || findCallerName(new Error().stack) || \"anonymous\"\n } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n };\n api.devtools = {\n cleanup: () => {\n if (connection && typeof connection.unsubscribe === \"function\") {\n connection.unsubscribe();\n }\n removeStoreFromTrackedConnections(options.name, store);\n }\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (api.dispatchFromDevtools && typeof api.dispatch === \"function\") {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...args) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && args[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...args);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format.\n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (!api.dispatchFromDevtools) return;\n if (typeof api.dispatch !== \"function\") return;\n api.dispatch(action);\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState) return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, fn) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0) fn(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = (selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n };\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nfunction combine(initialState, create) {\n return (...args) => Object.assign({}, initialState, create(...args));\n}\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(name, JSON.stringify(newValue, options == null ? void 0 : options.replacer)),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst persistImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage) return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n const migration = options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n if (migration instanceof Promise) {\n return migration.then((result) => [true, result]);\n }\n return [true, migration];\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return [false, deserializedStorageValue.state];\n }\n }\n return [false, void 0];\n }).then((migrationResult) => {\n var _a2;\n const [migrated, migratedState] = migrationResult;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n if (migrated) {\n return setItem();\n }\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persist = persistImpl;\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector };\n","import { create, type Mutate, type StoreApi } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\n\nexport interface AuthState<ProviderData = unknown> {\n isAuthenticated: boolean;\n isPending: boolean;\n profile: UserProfile | null;\n providerData: ProviderData | null;\n setAuthenticationPending: () => void;\n setLoggedOut: () => void;\n setLoggedIn: ({\n profile,\n providerData,\n }: {\n profile: UserProfile;\n providerData: unknown;\n }) => void;\n}\n\nexport type StoreWithPersist<T> = Mutate<\n StoreApi<T>,\n [[\"zustand/persist\", unknown]]\n>;\n\nconst withStorageDOMEvents = <T>(store: StoreWithPersist<T>) => {\n const storageEventCallback = (e: StorageEvent) => {\n if (e.key === store.persist.getOptions().name && e.newValue) {\n void store.persist.rehydrate();\n }\n };\n\n window.addEventListener(\"storage\", storageEventCallback);\n\n return () => {\n window.removeEventListener(\"storage\", storageEventCallback);\n };\n};\n\nexport const useAuthState = create<AuthState>()(\n persist(\n (set) => ({\n isAuthenticated: false,\n isPending: true,\n profile: null,\n providerData: null,\n setAuthenticationPending: () =>\n set(() => ({\n isAuthenticated: false,\n isPending: false,\n profile: null,\n providerData: null,\n })),\n setLoggedOut: () =>\n set(() => ({\n isAuthenticated: false,\n isPending: false,\n profile: null,\n providerData: null,\n })),\n setLoggedIn: ({\n profile,\n providerData,\n }: {\n profile: UserProfile;\n providerData: unknown;\n }) =>\n set(() => ({\n isAuthenticated: true,\n isPending: false,\n profile,\n providerData,\n })),\n }),\n {\n merge: (persistedState, currentState) => {\n return {\n ...currentState,\n isPending: false,\n ...(typeof persistedState === \"object\" ? persistedState : {}),\n };\n },\n name: \"auth-state\",\n storage: createJSONStorage(() => localStorage),\n },\n ),\n);\n\nif (typeof window !== \"undefined\") {\n withStorageDOMEvents(useAuthState);\n}\n\nexport interface UserProfile {\n sub: string;\n email: string | undefined;\n emailVerified: boolean;\n name: string | undefined;\n pictureUrl: string | undefined;\n [key: string]: string | boolean | undefined;\n}\n","import { useZudoku } from \"../components/context/ZudokuContext.js\";\nimport { useAuthState } from \"./state.js\";\n\nexport type UseAuthReturn = ReturnType<typeof useAuth>;\n\nexport const useAuth = () => {\n const { authentication } = useZudoku();\n const authState = useAuthState();\n const isAuthEnabled = typeof authentication !== \"undefined\";\n\n return {\n isAuthEnabled,\n ...authState,\n\n login: async () => {\n if (!isAuthEnabled) {\n throw new Error(\"Authentication is not enabled.\");\n }\n // TODO: Should handle errors/state\n await authentication.signIn({\n redirectTo: window.location.href,\n });\n },\n\n logout: async () => {\n if (!isAuthEnabled) {\n throw new Error(\"Authentication is not enabled.\");\n }\n // TODO: Should handle errors/state\n await authentication.signOut();\n\n // Redirect to home\n window.location.href = \"/\";\n },\n\n signup: async () => {\n if (!isAuthEnabled) {\n throw new Error(\"Authentication is not enabled.\");\n }\n await authentication.signUp({\n redirectTo: window.location.href,\n });\n },\n };\n};\n"],"names":["createStoreImpl","createState","state","listeners","setState","partial","replace","nextState","previousState","listener","getState","api","initialState","createStore","identity","arg","useStore","selector","slice","React","createImpl","useBoundStore","create","createJSONStorage","getStorage","options","storage","name","_a","parse","str2","str","newValue","toThenable","fn","input","result","onFulfilled","_onRejected","_onFulfilled","onRejected","persistImpl","config","baseOptions","set","get","persistedState","currentState","hasHydrated","hydrationListeners","finishHydrationListeners","args","setItem","savedSetState","configResult","stateFromStorage","hydrate","_b","cb","_a2","postRehydrationCallback","deserializedStorageValue","migration","migrationResult","migrated","migratedState","e","newOptions","persist","withStorageDOMEvents","store","storageEventCallback","useAuthState","profile","providerData","useAuth","authentication","useZudoku","authState","isAuthEnabled"],"mappings":"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","x_google_ignoreList":[0,1,2]}
@@ -1,14 +1,14 @@
1
- import { B as Rt, a as It, H as Me, R as tn } from "./RouteGuard-D17dUEM_.js";
1
+ import { B as Rt, a as It, H as Me, R as tn } from "./RouteGuard-CSi9-hSR.js";
2
2
  import { z as Dt, M as rn, J as nn, u as on } from "./useExposedProps-DUoV7MCU.js";
3
3
  import { R as sn, S as an, c as we, e as Fe, f as cn, L as qe, O as Mt } from "./chunk-QMGIS6GS-CdEm9pzB.js";
4
- import { a as se, u as un } from "./hook-DEPqwjke.js";
5
- import { h as ln, E as Ft, a as A, A as dn, i as fn, s as hn, N as Je, j as pn, T as qt, C as mn, H as gn, k as vn, l as yn, m as xn, V as _n, R as bn, M as wn } from "./Slot-Dgy8tqef.js";
4
+ import { a as se, u as un } from "./hook-CGx8MPrU.js";
5
+ import { h as ln, E as Ft, a as A, A as dn, i as fn, s as hn, N as Je, j as pn, T as qt, C as mn, H as gn, k as vn, l as yn, m as xn, V as _n, R as bn, M as wn } from "./Slot-BFCJzl5J.js";
6
6
  import { j as i } from "./jsx-runtime-C5mzlN2N.js";
7
7
  import { Button as Ut } from "./ui/Button.js";
8
8
  import { Callout as jn } from "./ui/Callout.js";
9
- import { S as Lt, m as Qt, Q as kn, n as I, o as Xe, p as et, f as L, q as zn, r as $n, v as Pn, w as En, x as tt, y as rt, z as Sn, h as nt, A as ot, B as Zn, D as Tn, e as Bt, E as Kt, i as Cn, c as M, F as Ht, G as Wt, j as te, H as On, b as Nn, N as An, Z as Rn, d as In, C as Dn } from "./ZudokuContext-Coxa0DfE.js";
9
+ import { S as Lt, m as Qt, Q as kn, n as I, o as Xe, p as et, f as L, q as zn, r as $n, v as Pn, w as En, x as tt, y as rt, z as Sn, h as nt, A as ot, B as Zn, D as Tn, e as Bt, E as Kt, i as Cn, c as M, F as Ht, G as Wt, j as te, H as On, b as Nn, N as An, Z as Rn, d as In, C as Dn } from "./ZudokuContext-mDDq1hft.js";
10
10
  import * as K from "react";
11
- import { createContext as Ue, StrictMode as Vt, useRef as H, useEffect as F, useState as J, useCallback as B, Suspense as Le, Fragment as Mn, memo as Yt, Component as Fn, createElement as st, useMemo as Ee, useContext as qn } from "react";
11
+ import { createContext as Ue, StrictMode as Vt, useEffect as F, useRef as H, useState as J, useCallback as B, Suspense as Le, Fragment as Mn, memo as Yt, Component as Fn, createElement as st, useMemo as Ee, useContext as qn } from "react";
12
12
  import * as Un from "react-dom";
13
13
  import { CircleFadingArrowUpIcon as Ln, LoaderCircleIcon as Qn, ExternalLink as Bn, CircleXIcon as Kn, ChevronRightIcon as Hn, SearchIcon as Wn, SunIcon as Vn, MoonIcon as Yn, MenuIcon as Gn, PanelLeftIcon as Jn } from "lucide-react";
14
14
  import { C as re } from "./ClientOnly-E7hGysn1.js";
@@ -2593,7 +2593,9 @@ const hc = Qa({
2593
2593
  return s.json();
2594
2594
  }).then((s) => hc.parse(s))
2595
2595
  });
2596
- if (n.isError || !n.data || n.data.buildId === e)
2596
+ if (F(() => {
2597
+ n.data?.status === "success" && n.data.buildId && (document.cookie = `zuplo-build=${n.data.buildId}; path=/; max-age=300; secure; SameSite=None`);
2598
+ }, [n.data]), n.isError || !n.data || n.data.buildId === e)
2597
2599
  return null;
2598
2600
  const o = n.data.status === "success";
2599
2601
  return /* @__PURE__ */ i.jsxs("div", { className: "fixed flex flex-col gap-3 p-4 rounded-xl w-96 border z-20 bg-background left-0 right-0 top-4 mx-auto shadow-lg", children: [
@@ -2634,7 +2636,7 @@ const hc = Qa({
2634
2636
  alt: e
2635
2637
  }
2636
2638
  ) : e, vc = (e) => /^https?:/.test(e), yc = () => {
2637
- const { site: e } = iu(), t = e?.footer;
2639
+ const { site: e } = au(), t = e?.footer;
2638
2640
  return t ? /* @__PURE__ */ i.jsx("footer", { className: "border-t bg-background", children: /* @__PURE__ */ i.jsxs("div", { className: "mx-auto max-w-screen-2xl px-4 lg:px-8 py-8 pt-20", children: [
2639
2641
  /* @__PURE__ */ i.jsxs(
2640
2642
  "div",
@@ -3461,31 +3463,28 @@ const Pr = ({ className: e }) => {
3461
3463
  /* @__PURE__ */ i.jsxs("div", { className: N(p, "relative"), children: [
3462
3464
  /* @__PURE__ */ i.jsx($r, {}),
3463
3465
  /* @__PURE__ */ i.jsxs("div", { className: "max-w-screen-2xl mx-auto flex items-center justify-between h-(--top-header-height) px-4 lg:px-8 border-transparent", children: [
3464
- /* @__PURE__ */ i.jsx("div", { className: "flex", children: /* @__PURE__ */ i.jsx(qe, { to: a?.logo?.href ?? "/", children: /* @__PURE__ */ i.jsxs("div", { className: "flex items-center gap-3.5", children: [
3465
- a?.logo && /* @__PURE__ */ i.jsxs(i.Fragment, { children: [
3466
- /* @__PURE__ */ i.jsx(
3467
- "img",
3468
- {
3469
- src: v,
3470
- alt: a.logo.alt ?? a.title,
3471
- style: { width: a.logo.width },
3472
- className: "max-h-(--top-header-height) dark:hidden",
3473
- loading: "lazy"
3474
- }
3475
- ),
3476
- /* @__PURE__ */ i.jsx(
3477
- "img",
3478
- {
3479
- src: m,
3480
- alt: a.logo.alt ?? a.title,
3481
- style: { width: a.logo.width },
3482
- className: "max-h-(--top-header-height) hidden dark:block",
3483
- loading: "lazy"
3484
- }
3485
- )
3486
- ] }),
3487
- /* @__PURE__ */ i.jsx("span", { className: "font-semibold text-2xl", children: a?.title })
3488
- ] }) }) }),
3466
+ /* @__PURE__ */ i.jsx("div", { className: "flex", children: /* @__PURE__ */ i.jsx(qe, { to: a?.logo?.href ?? "/", children: /* @__PURE__ */ i.jsx("div", { className: "flex items-center gap-3.5", children: a?.logo ? /* @__PURE__ */ i.jsxs(i.Fragment, { children: [
3467
+ /* @__PURE__ */ i.jsx(
3468
+ "img",
3469
+ {
3470
+ src: v,
3471
+ alt: a.logo.alt ?? a.title,
3472
+ style: { width: a.logo.width },
3473
+ className: "max-h-(--top-header-height) dark:hidden",
3474
+ loading: "lazy"
3475
+ }
3476
+ ),
3477
+ /* @__PURE__ */ i.jsx(
3478
+ "img",
3479
+ {
3480
+ src: m,
3481
+ alt: a.logo.alt ?? a.title,
3482
+ style: { width: a.logo.width },
3483
+ className: "max-h-(--top-header-height) hidden dark:block",
3484
+ loading: "lazy"
3485
+ }
3486
+ )
3487
+ ] }) : /* @__PURE__ */ i.jsx("span", { className: "font-semibold text-2xl", children: a?.title }) }) }) }),
3489
3488
  /* @__PURE__ */ i.jsx("div", { className: "absolute inset-x-0 justify-center items-center hidden lg:flex w-full pointer-events-none", children: /* @__PURE__ */ i.jsx(Pr, { className: "pointer-events-auto" }) }),
3490
3489
  /* @__PURE__ */ i.jsxs("div", { className: "flex items-center gap-8", children: [
3491
3490
  /* @__PURE__ */ i.jsx(Ac, {}),
@@ -3702,25 +3701,10 @@ const qc = ({
3702
3701
  }
3703
3702
  );
3704
3703
  }, Lc = () => /* @__PURE__ */ i.jsx("main", { className: "col-span-full row-span-full grid place-items-center", children: /* @__PURE__ */ i.jsx(Gt, {}) }), Qc = ({ children: e }) => {
3705
- const { meta: t, authentication: r, options: n } = M(), o = we();
3704
+ const { authentication: t } = M();
3706
3705
  return pn(), mc(), F(() => {
3707
- r?.onPageLoad?.();
3708
- }, [r]), /* @__PURE__ */ i.jsxs(i.Fragment, { children: [
3709
- /* @__PURE__ */ i.jsxs(Me, { titleTemplate: t?.title, children: [
3710
- n.canonicalUrlOrigin && /* @__PURE__ */ i.jsx(
3711
- "link",
3712
- {
3713
- rel: "canonical",
3714
- href: te(
3715
- n.canonicalUrlOrigin,
3716
- n.basePath,
3717
- o.pathname
3718
- )
3719
- }
3720
- ),
3721
- t?.description && /* @__PURE__ */ i.jsx("meta", { name: "description", content: t.description }),
3722
- t?.favicon && /* @__PURE__ */ i.jsx("link", { rel: "icon", href: t.favicon })
3723
- ] }),
3706
+ t?.onPageLoad?.();
3707
+ }, [t]), /* @__PURE__ */ i.jsxs(i.Fragment, { children: [
3724
3708
  /* @__PURE__ */ i.jsx(A.Target, { name: "layout-before-head" }),
3725
3709
  /* @__PURE__ */ i.jsx(Tr, {}),
3726
3710
  /* @__PURE__ */ i.jsx(A.Target, { name: "layout-after-head" }),
@@ -3737,7 +3721,27 @@ const qc = ({
3737
3721
  ),
3738
3722
  /* @__PURE__ */ i.jsx(yc, {})
3739
3723
  ] });
3740
- }, Bc = ({
3724
+ }, Bc = ({ children: e }) => {
3725
+ const { meta: t, options: r } = M(), n = we();
3726
+ return /* @__PURE__ */ i.jsxs(i.Fragment, { children: [
3727
+ /* @__PURE__ */ i.jsxs(Me, { titleTemplate: t?.title, defaultTitle: t?.defaultTitle, children: [
3728
+ r.canonicalUrlOrigin && /* @__PURE__ */ i.jsx(
3729
+ "link",
3730
+ {
3731
+ rel: "canonical",
3732
+ href: te(
3733
+ r.canonicalUrlOrigin,
3734
+ r.basePath,
3735
+ n.pathname
3736
+ )
3737
+ }
3738
+ ),
3739
+ t?.description && /* @__PURE__ */ i.jsx("meta", { name: "description", content: t.description }),
3740
+ t?.favicon && /* @__PURE__ */ i.jsx("link", { rel: "icon", href: t.favicon })
3741
+ ] }),
3742
+ e
3743
+ ] });
3744
+ }, Kc = ({
3741
3745
  title: e = "An error occurred",
3742
3746
  message: t,
3743
3747
  category: r
@@ -3745,7 +3749,7 @@ const qc = ({
3745
3749
  r && /* @__PURE__ */ i.jsx(mn, { children: r }),
3746
3750
  e && /* @__PURE__ */ i.jsx(gn, { level: 1, className: "flex gap-3.5 items-center", children: e }),
3747
3751
  /* @__PURE__ */ i.jsx("p", { children: t })
3748
- ] }), Kc = (e) => {
3752
+ ] }), Hc = (e) => {
3749
3753
  switch (e) {
3750
3754
  case 400:
3751
3755
  return {
@@ -3808,23 +3812,23 @@ const qc = ({
3808
3812
  message: "Something went wrong while processing your request."
3809
3813
  };
3810
3814
  }
3811
- }, Hc = ({ statusCode: e, message: t }) => {
3815
+ }, Wc = ({ statusCode: e, message: t }) => {
3812
3816
  if (e === 404)
3813
3817
  return /* @__PURE__ */ i.jsx(vn, {});
3814
- const r = Kc(e);
3818
+ const r = Hc(e);
3815
3819
  return /* @__PURE__ */ i.jsx(
3816
- Bc,
3820
+ Kc,
3817
3821
  {
3818
3822
  title: r.title,
3819
3823
  message: t ?? r.message,
3820
3824
  category: e
3821
3825
  }
3822
3826
  );
3823
- }, Wc = Ue(null), Te = {
3827
+ }, Vc = Ue(null), Te = {
3824
3828
  didCatch: !1,
3825
3829
  error: null
3826
3830
  };
3827
- class Vc extends Fn {
3831
+ class Yc extends Fn {
3828
3832
  constructor(t) {
3829
3833
  super(t), this.resetErrorBoundary = this.resetErrorBoundary.bind(this), this.state = Te;
3830
3834
  }
@@ -3857,7 +3861,7 @@ class Vc extends Fn {
3857
3861
  } = this.state, {
3858
3862
  resetKeys: o
3859
3863
  } = this.props;
3860
- if (n && r.error !== null && Yc(t.resetKeys, o)) {
3864
+ if (n && r.error !== null && Gc(t.resetKeys, o)) {
3861
3865
  var s, a;
3862
3866
  (s = (a = this.props).onReset) === null || s === void 0 || s.call(a, {
3863
3867
  next: o,
@@ -3891,7 +3895,7 @@ class Vc extends Fn {
3891
3895
  else
3892
3896
  throw a;
3893
3897
  }
3894
- return st(Wc.Provider, {
3898
+ return st(Vc.Provider, {
3895
3899
  value: {
3896
3900
  didCatch: s,
3897
3901
  error: a,
@@ -3900,11 +3904,11 @@ class Vc extends Fn {
3900
3904
  }, c);
3901
3905
  }
3902
3906
  }
3903
- function Yc() {
3907
+ function Gc() {
3904
3908
  let e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [], t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
3905
3909
  return e.length !== t.length || e.some((r, n) => !Object.is(r, t[n]));
3906
3910
  }
3907
- let Gc = () => ({
3911
+ let Jc = () => ({
3908
3912
  emit(e, ...t) {
3909
3913
  for (let r = this.events[e] || [], n = 0, o = r.length; n < o; n++)
3910
3914
  r[n](...t);
@@ -3930,8 +3934,8 @@ const Nt = vr([
3930
3934
  (r) => r.auth.isAuthenticated
3931
3935
  ])
3932
3936
  ) : e;
3933
- }), Jc = (e) => Object.entries(e);
3934
- class Xc {
3937
+ }), Xc = (e) => Object.entries(e);
3938
+ class eu {
3935
3939
  plugins;
3936
3940
  navigation;
3937
3941
  meta;
@@ -3940,7 +3944,7 @@ class Xc {
3940
3944
  queryClient;
3941
3945
  options;
3942
3946
  navigationPlugins;
3943
- emitter = Gc();
3947
+ emitter = Jc();
3944
3948
  constructor(t, r) {
3945
3949
  const o = {
3946
3950
  ...Object.fromEntries(
@@ -3953,7 +3957,7 @@ class Xc {
3953
3957
  ...Nt.parse(t.protectedRoutes)
3954
3958
  };
3955
3959
  this.queryClient = r, this.options = { ...t, protectedRoutes: o }, this.plugins = t.plugins ?? [], this.navigation = t.navigation ?? [], this.navigationPlugins = this.plugins.filter(it), this.authentication = this.plugins.find(eo), this.meta = t.metadata, this.site = t.site, this.plugins.forEach((s) => {
3956
- to(s) && Jc(s.events).forEach(([a, c]) => {
3960
+ to(s) && Xc(s.events).forEach(([a, c]) => {
3957
3961
  this.emitter.on(a, c);
3958
3962
  });
3959
3963
  }), un.subscribe((s, a) => {
@@ -3980,25 +3984,25 @@ class Xc {
3980
3984
  (n) => n.getNavigation?.(te(t), this)
3981
3985
  )
3982
3986
  )).flatMap((n) => n ?? []);
3983
- getProfileMenuItems = () => this.plugins.filter((r) => Jt(r)).flatMap((r) => r.getProfileMenuItems(this)).sort(eu(["top", "middle", "bottom"])).sort((r) => r.weight ?? 0);
3987
+ getProfileMenuItems = () => this.plugins.filter((r) => Jt(r)).flatMap((r) => r.getProfileMenuItems(this)).sort(tu(["top", "middle", "bottom"])).sort((r) => r.weight ?? 0);
3984
3988
  signRequest = async (t) => {
3985
3989
  if (!this.authentication)
3986
3990
  throw new Error("No authentication provider configured");
3987
3991
  return await this.authentication.signRequest(t);
3988
3992
  };
3989
3993
  }
3990
- const eu = (e) => (t, r) => {
3994
+ const tu = (e) => (t, r) => {
3991
3995
  const n = e.indexOf(t.category ?? "middle"), o = e.indexOf(r.category ?? "middle");
3992
3996
  return n - o;
3993
3997
  };
3994
- function tu({ error: e, resetErrorBoundary: t }) {
3998
+ function ru({ error: e, resetErrorBoundary: t }) {
3995
3999
  return /* @__PURE__ */ i.jsx(Ft, { error: e });
3996
4000
  }
3997
4001
  const ge = globalThis;
3998
4002
  (!ge.requestIdleCallback || !ge.cancelIdleCallback) && (ge.requestIdleCallback = (e) => setTimeout(e, 1), ge.cancelIdleCallback = clearTimeout);
3999
4003
  const Ar = {
4000
4004
  Header: Tr
4001
- }, ru = Ue(Ar), nu = ru.Provider, ou = () => {
4005
+ }, nu = Ue(Ar), ou = nu.Provider, su = () => {
4002
4006
  const e = we(), t = M(), r = H(void 0);
4003
4007
  return F(() => {
4004
4008
  t.emitEvent("location", {
@@ -4006,7 +4010,7 @@ const Ar = {
4006
4010
  to: e
4007
4011
  }), r.current = e;
4008
4012
  }, [t, e]), null;
4009
- }, su = ({
4013
+ }, iu = ({
4010
4014
  children: e,
4011
4015
  context: t
4012
4016
  }) => (Nn({
@@ -4034,49 +4038,50 @@ const Rr = Yt(
4034
4038
  ), l = Fe(), v = Bt();
4035
4039
  F(() => {
4036
4040
  a || c(!0);
4037
- }, [a, l.location]), At ??= new Xc(t, v);
4041
+ }, [a, l.location]), At ??= new eu(t, v);
4038
4042
  const m = t.plugins?.flatMap(
4039
4043
  (p) => so(p) ? p.getHead?.({ location: n }) ?? [] : []
4040
4044
  ).map((p, d) => /* @__PURE__ */ i.jsx(Me, { children: p }, d));
4041
4045
  return /* @__PURE__ */ i.jsxs(i.Fragment, { children: [
4042
4046
  m,
4043
- /* @__PURE__ */ i.jsx(Oe.Provider, { value: f, children: /* @__PURE__ */ i.jsxs(su, { context: At, children: [
4044
- /* @__PURE__ */ i.jsx(ou, {}),
4045
- /* @__PURE__ */ i.jsx(xn, { slots: t.slots ?? t.UNSAFE_slotlets, children: /* @__PURE__ */ i.jsx(rn, { components: o, children: /* @__PURE__ */ i.jsx(nn, { attribute: "class", disableTransitionOnChange: !0, children: /* @__PURE__ */ i.jsx(nu, { value: r, children: /* @__PURE__ */ i.jsx(_n, { children: e ?? /* @__PURE__ */ i.jsx(Mt, {}) }) }) }) }) })
4047
+ /* @__PURE__ */ i.jsx(Oe.Provider, { value: f, children: /* @__PURE__ */ i.jsxs(iu, { context: At, children: [
4048
+ /* @__PURE__ */ i.jsx(su, {}),
4049
+ /* @__PURE__ */ i.jsx(xn, { slots: t.slots ?? t.UNSAFE_slotlets, children: /* @__PURE__ */ i.jsx(rn, { components: o, children: /* @__PURE__ */ i.jsx(nn, { attribute: "class", disableTransitionOnChange: !0, children: /* @__PURE__ */ i.jsx(ou, { value: r, children: /* @__PURE__ */ i.jsx(_n, { children: e ?? /* @__PURE__ */ i.jsx(Mt, {}) }) }) }) }) })
4046
4050
  ] }) })
4047
4051
  ] });
4048
4052
  }
4049
4053
  );
4050
4054
  Rr.displayName = "ZudokoInner";
4051
- const Ir = (e) => /* @__PURE__ */ i.jsx(Vc, { FallbackComponent: tu, children: /* @__PURE__ */ i.jsx(Rr, { ...e }) });
4055
+ const Ir = (e) => /* @__PURE__ */ i.jsx(Yc, { FallbackComponent: ru, children: /* @__PURE__ */ i.jsx(Rr, { ...e }) });
4052
4056
  Ir.displayName = "Zudoku";
4053
- const Pu = Qc, Eu = bn, Su = zo, Zu = Eo, Tu = So, Cu = tn, Ou = Me, Nu = Hc, Au = jn, Ru = wn, Iu = Gt, Du = re, Mu = Ut, Fu = qe, qu = pc, Uu = Ir, Lu = qt, Qu = on, iu = M, Bu = se, Ku = In, Hu = Dn, Wu = Dt;
4057
+ const Eu = Qc, Su = bn, Zu = zo, Tu = Eo, Cu = So, Ou = tn, Nu = Me, Au = Wc, Ru = jn, Iu = wn, Du = Gt, Mu = re, Fu = Ut, qu = qe, Uu = pc, Lu = Ir, Qu = qt, Bu = Bc, Ku = on, au = M, Hu = se, Wu = In, Vu = Dn, Yu = Dt;
4054
4058
  export {
4055
- Mu as B,
4056
- Au as C,
4057
- Vc as E,
4058
- Ou as H,
4059
- Fu as L,
4060
- Ru as M,
4061
- Eu as R,
4062
- Iu as S,
4063
- Lu as T,
4064
- Uu as Z,
4059
+ Fu as B,
4060
+ Ru as C,
4061
+ Yc as E,
4062
+ Nu as H,
4063
+ qu as L,
4064
+ Iu as M,
4065
+ Su as R,
4066
+ Du as S,
4067
+ Qu as T,
4068
+ Lu as Z,
4065
4069
  Tc as a,
4066
- Bu as b,
4067
- Pu as c,
4068
- Su as d,
4069
- Zu as e,
4070
- Tu as f,
4071
- Cu as g,
4072
- Nu as h,
4073
- Du as i,
4074
- qu as j,
4075
- Qu as k,
4070
+ Hu as b,
4071
+ Eu as c,
4072
+ Zu as d,
4073
+ Tu as e,
4074
+ Cu as f,
4075
+ Ou as g,
4076
+ Au as h,
4077
+ Mu as i,
4078
+ Uu as j,
4079
+ Bu as k,
4076
4080
  Ku as l,
4077
- Hu as m,
4078
- Wu as n,
4079
- Jc as o,
4080
- iu as u
4081
+ Wu as m,
4082
+ Vu as n,
4083
+ Xc as o,
4084
+ Yu as p,
4085
+ au as u
4081
4086
  };
4082
- //# sourceMappingURL=index-DYs8gxKX.js.map
4087
+ //# sourceMappingURL=index-Cc70HIQT.js.map