zudoku 0.43.0 → 0.43.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.
Files changed (180) hide show
  1. package/dist/config/validators/common.d.ts +193 -0
  2. package/dist/config/validators/common.js +2 -0
  3. package/dist/config/validators/common.js.map +1 -1
  4. package/dist/config/validators/validate.d.ts +70 -0
  5. package/dist/lib/components/Banner.js +1 -1
  6. package/dist/lib/components/Banner.js.map +1 -1
  7. package/dist/lib/components/Heading.d.ts +2 -2
  8. package/dist/lib/components/Heading.js +1 -1
  9. package/dist/lib/components/Heading.js.map +1 -1
  10. package/dist/lib/components/Layout.js +1 -1
  11. package/dist/lib/components/Layout.js.map +1 -1
  12. package/dist/lib/components/Main.js +3 -2
  13. package/dist/lib/components/Main.js.map +1 -1
  14. package/dist/lib/components/MobileTopNavigation.js +1 -1
  15. package/dist/lib/components/MobileTopNavigation.js.map +1 -1
  16. package/dist/lib/components/Pagination.js +2 -2
  17. package/dist/lib/components/Pagination.js.map +1 -1
  18. package/dist/lib/components/Search.js +1 -1
  19. package/dist/lib/components/Search.js.map +1 -1
  20. package/dist/lib/components/TopNavigation.js +1 -1
  21. package/dist/lib/components/TopNavigation.js.map +1 -1
  22. package/dist/lib/components/navigation/PoweredByZudoku.js +1 -1
  23. package/dist/lib/components/navigation/PoweredByZudoku.js.map +1 -1
  24. package/dist/lib/components/navigation/Sidebar.js +1 -1
  25. package/dist/lib/components/navigation/Sidebar.js.map +1 -1
  26. package/dist/lib/components/navigation/SidebarCategory.js +9 -5
  27. package/dist/lib/components/navigation/SidebarCategory.js.map +1 -1
  28. package/dist/lib/components/navigation/SidebarItem.js +2 -3
  29. package/dist/lib/components/navigation/SidebarItem.js.map +1 -1
  30. package/dist/lib/components/navigation/Toc.js +2 -2
  31. package/dist/lib/components/navigation/Toc.js.map +1 -1
  32. package/dist/lib/core/ZudokuContext.d.ts +2 -1
  33. package/dist/lib/core/ZudokuContext.js.map +1 -1
  34. package/dist/lib/oas/parser/upgrade/index.d.ts +1 -0
  35. package/dist/lib/oas/parser/upgrade/index.js +76 -24
  36. package/dist/lib/oas/parser/upgrade/index.js.map +1 -1
  37. package/dist/lib/plugins/openapi/CollapsibleCode.js +1 -1
  38. package/dist/lib/plugins/openapi/OperationList.js +1 -1
  39. package/dist/lib/plugins/openapi/OperationListItem.js +4 -2
  40. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  41. package/dist/lib/plugins/openapi/SchemaList.js +1 -1
  42. package/dist/lib/plugins/openapi/client/useCreateQuery.d.ts +5 -0
  43. package/dist/lib/plugins/openapi/client/useCreateQuery.js +10 -4
  44. package/dist/lib/plugins/openapi/client/useCreateQuery.js.map +1 -1
  45. package/dist/lib/plugins/openapi/index.d.ts +3 -4
  46. package/dist/lib/plugins/openapi/index.js +6 -4
  47. package/dist/lib/plugins/openapi/index.js.map +1 -1
  48. package/dist/lib/plugins/openapi/interfaces.d.ts +4 -3
  49. package/dist/lib/plugins/openapi/playground/IdentitySelector.js +1 -1
  50. package/dist/lib/plugins/openapi/playground/Playground.js +2 -2
  51. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  52. package/dist/lib/plugins/openapi/playground/QueryParams.d.ts +1 -1
  53. package/dist/lib/plugins/openapi/playground/QueryParams.js +1 -1
  54. package/dist/lib/plugins/openapi/playground/SubmitButton.d.ts +1 -1
  55. package/dist/lib/plugins/openapi/playground/SubmitButton.js +1 -1
  56. package/dist/lib/plugins/openapi/playground/result-panel/RequestTab.js +1 -1
  57. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js +1 -1
  58. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js +1 -1
  59. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js +2 -2
  60. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js.map +1 -1
  61. package/dist/lib/plugins/openapi/util/getRoutes.js +33 -3
  62. package/dist/lib/plugins/openapi/util/getRoutes.js.map +1 -1
  63. package/dist/lib/ui/SyntaxHighlight.js +1 -1
  64. package/dist/lib/ui/SyntaxHighlight.js.map +1 -1
  65. package/dist/lib/util/traverse.d.ts +1 -1
  66. package/dist/lib/util/traverse.js +6 -5
  67. package/dist/lib/util/traverse.js.map +1 -1
  68. package/dist/vite/build.js +1 -0
  69. package/dist/vite/build.js.map +1 -1
  70. package/dist/vite/dev-server.js +5 -2
  71. package/dist/vite/dev-server.js.map +1 -1
  72. package/dist/vite/html.d.ts +6 -2
  73. package/dist/vite/html.js +11 -8
  74. package/dist/vite/html.js.map +1 -1
  75. package/dist/vite/plugin-api.js +2 -2
  76. package/dist/vite/plugin-api.js.map +1 -1
  77. package/lib/{AuthenticationPlugin-ByDF051g.js → AuthenticationPlugin-BxoEZCSJ.js} +4 -4
  78. package/lib/{AuthenticationPlugin-ByDF051g.js.map → AuthenticationPlugin-BxoEZCSJ.js.map} +1 -1
  79. package/lib/{Markdown-mFpg_n9p.js → Markdown-DvdVn1O7.js} +1839 -1836
  80. package/lib/Markdown-DvdVn1O7.js.map +1 -0
  81. package/lib/{MdxPage-Cm7atiW3.js → MdxPage-DUcuusMU.js} +7 -7
  82. package/lib/{MdxPage-Cm7atiW3.js.map → MdxPage-DUcuusMU.js.map} +1 -1
  83. package/lib/{OasProvider-DOs0v9u7.js → OasProvider-CjMm8pB7.js} +8 -9
  84. package/lib/{OasProvider-DOs0v9u7.js.map → OasProvider-CjMm8pB7.js.map} +1 -1
  85. package/lib/{OperationList-CKac6iap.js → OperationList-BhJcPgGi.js} +1269 -1261
  86. package/lib/{OperationList-CKac6iap.js.map → OperationList-BhJcPgGi.js.map} +1 -1
  87. package/lib/Pagination-BgQxwq5j.js +48 -0
  88. package/lib/Pagination-BgQxwq5j.js.map +1 -0
  89. package/lib/{RouteGuard-DRtEu9nh.js → RouteGuard-D2gX29iI.js} +3 -3
  90. package/lib/{RouteGuard-DRtEu9nh.js.map → RouteGuard-D2gX29iI.js.map} +1 -1
  91. package/lib/{SchemaList-BTX2mRMW.js → SchemaList-BexhT_Z0.js} +22 -23
  92. package/lib/{SchemaList-BTX2mRMW.js.map → SchemaList-BexhT_Z0.js.map} +1 -1
  93. package/lib/{SchemaView-BYRn_-2l.js → SchemaView-Dt_-u8rW.js} +123 -146
  94. package/lib/SchemaView-Dt_-u8rW.js.map +1 -0
  95. package/lib/{Select-CT64Ou40.js → Select-CYaEBIYK.js} +3 -3
  96. package/lib/{Select-CT64Ou40.js.map → Select-CYaEBIYK.js.map} +1 -1
  97. package/lib/{SlotletProvider-CS_nO-XT.js → SlotletProvider-wWbHYqWf.js} +7 -7
  98. package/lib/SlotletProvider-wWbHYqWf.js.map +1 -0
  99. package/lib/{SyntaxHighlight-CxhyyMkF.js → SyntaxHighlight-o7q0acut.js} +81 -81
  100. package/lib/{SyntaxHighlight-CxhyyMkF.js.map → SyntaxHighlight-o7q0acut.js.map} +1 -1
  101. package/lib/{Toc-D_tV8_Ri.js → Toc-BnN4zBb3.js} +17 -17
  102. package/lib/Toc-BnN4zBb3.js.map +1 -0
  103. package/lib/{chunk-BAXFHI7N-BVBOl9s0.js → chunk-BAXFHI7N-BLTsN6tl.js} +679 -659
  104. package/lib/{chunk-BAXFHI7N-BVBOl9s0.js.map → chunk-BAXFHI7N-BLTsN6tl.js.map} +1 -1
  105. package/lib/{circular-ByJI6Mci.js → circular-BWEIet3w.js} +4616 -5567
  106. package/lib/circular-BWEIet3w.js.map +1 -0
  107. package/lib/{createServer-IW7v5hWm.js → createServer-BQD3Eeqb.js} +1998 -1970
  108. package/lib/createServer-BQD3Eeqb.js.map +1 -0
  109. package/lib/{hook-CldJlP5c.js → hook-8GM2HXNM.js} +24 -24
  110. package/lib/{hook-CldJlP5c.js.map → hook-8GM2HXNM.js.map} +1 -1
  111. package/lib/index-CFf9AN-y.js +3208 -0
  112. package/lib/index-CFf9AN-y.js.map +1 -0
  113. package/lib/{index-DnQftvP4.js → index-DGNSSXgR.js} +77 -69
  114. package/lib/{index-DnQftvP4.js.map → index-DGNSSXgR.js.map} +1 -1
  115. package/lib/{mutation-DBQh7AOZ.js → mutation-Bq5bn7Hf.js} +2 -2
  116. package/lib/{mutation-DBQh7AOZ.js.map → mutation-Bq5bn7Hf.js.map} +1 -1
  117. package/lib/processors/traverse.js +9 -7
  118. package/lib/processors/traverse.js.map +1 -1
  119. package/lib/ui/SyntaxHighlight.js +1 -1
  120. package/lib/{useExposedProps-DbIZXspi.js → useExposedProps-DmTJxEXG.js} +2 -2
  121. package/lib/{useExposedProps-DbIZXspi.js.map → useExposedProps-DmTJxEXG.js.map} +1 -1
  122. package/lib/zudoku.auth-auth0.js +1 -1
  123. package/lib/zudoku.auth-clerk.js +2 -2
  124. package/lib/zudoku.auth-openid.js +3 -3
  125. package/lib/zudoku.components.js +6 -6
  126. package/lib/zudoku.hooks.js +1 -1
  127. package/lib/zudoku.plugin-api-catalog.js +5 -5
  128. package/lib/zudoku.plugin-api-keys.js +4 -4
  129. package/lib/zudoku.plugin-custom-pages.js +2 -2
  130. package/lib/zudoku.plugin-markdown.js +1 -1
  131. package/lib/zudoku.plugin-openapi.js +6 -5
  132. package/lib/zudoku.plugin-redirect.js +1 -1
  133. package/lib/zudoku.plugin-search-pagefind.js +3 -3
  134. package/package.json +3 -3
  135. package/src/app/main.css +2 -2
  136. package/src/lib/components/Banner.tsx +1 -1
  137. package/src/lib/components/Heading.tsx +3 -3
  138. package/src/lib/components/Layout.tsx +1 -4
  139. package/src/lib/components/Main.tsx +4 -3
  140. package/src/lib/components/MobileTopNavigation.tsx +2 -2
  141. package/src/lib/components/Pagination.tsx +3 -3
  142. package/src/lib/components/Search.tsx +1 -1
  143. package/src/lib/components/TopNavigation.tsx +1 -1
  144. package/src/lib/components/navigation/PoweredByZudoku.tsx +6 -1
  145. package/src/lib/components/navigation/Sidebar.tsx +1 -1
  146. package/src/lib/components/navigation/SidebarCategory.tsx +9 -5
  147. package/src/lib/components/navigation/SidebarItem.tsx +2 -3
  148. package/src/lib/components/navigation/Toc.tsx +4 -4
  149. package/src/lib/core/ZudokuContext.ts +2 -1
  150. package/src/lib/oas/parser/upgrade/index.ts +97 -27
  151. package/src/lib/plugins/openapi/CollapsibleCode.tsx +2 -2
  152. package/src/lib/plugins/openapi/OperationList.tsx +1 -1
  153. package/src/lib/plugins/openapi/OperationListItem.tsx +15 -6
  154. package/src/lib/plugins/openapi/SchemaList.tsx +1 -1
  155. package/src/lib/plugins/openapi/client/useCreateQuery.ts +23 -4
  156. package/src/lib/plugins/openapi/index.tsx +8 -7
  157. package/src/lib/plugins/openapi/interfaces.ts +4 -3
  158. package/src/lib/plugins/openapi/playground/IdentitySelector.tsx +2 -2
  159. package/src/lib/plugins/openapi/playground/Playground.tsx +5 -5
  160. package/src/lib/plugins/openapi/playground/QueryParams.tsx +2 -2
  161. package/src/lib/plugins/openapi/playground/SubmitButton.tsx +2 -2
  162. package/src/lib/plugins/openapi/playground/result-panel/RequestTab.tsx +2 -2
  163. package/src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx +1 -1
  164. package/src/lib/plugins/openapi/playground/result-panel/ResultPanel.tsx +1 -1
  165. package/src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx +2 -2
  166. package/src/lib/plugins/openapi/util/getRoutes.tsx +67 -3
  167. package/src/lib/ui/SyntaxHighlight.tsx +2 -2
  168. package/src/lib/util/traverse.ts +8 -5
  169. package/lib/Markdown-mFpg_n9p.js.map +0 -1
  170. package/lib/Pagination-DLPL5z77.js +0 -48
  171. package/lib/Pagination-DLPL5z77.js.map +0 -1
  172. package/lib/SchemaView-BYRn_-2l.js.map +0 -1
  173. package/lib/SlotletProvider-CS_nO-XT.js.map +0 -1
  174. package/lib/Toc-D_tV8_Ri.js.map +0 -1
  175. package/lib/circular-ByJI6Mci.js.map +0 -1
  176. package/lib/context-Lrf2Y9bR.js +0 -22
  177. package/lib/context-Lrf2Y9bR.js.map +0 -1
  178. package/lib/createServer-IW7v5hWm.js.map +0 -1
  179. package/lib/index-DuB48L78.js +0 -2184
  180. package/lib/index-DuB48L78.js.map +0 -1
@@ -3,7 +3,7 @@ var j = (i) => {
3
3
  };
4
4
  var y = (i, t, s) => t.has(i) || j("Cannot " + s);
5
5
  var e = (i, t, s) => (y(i, t, "read from private field"), s ? s.call(i) : t.get(i)), l = (i, t, s) => t.has(i) ? j("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(i) : t.set(i, s), p = (i, t, s, a) => (y(i, t, "write to private field"), a ? a.call(i, s) : t.set(i, s), s), h = (i, t, s) => (y(i, t, "access private method"), s);
6
- import { R as q, c as z, n as B } from "./hook-CldJlP5c.js";
6
+ import { R as q, c as z, n as B } from "./hook-8GM2HXNM.js";
7
7
  var r, o, d, u, c, U, L = (U = class extends q {
8
8
  constructor(t) {
9
9
  super();
@@ -208,4 +208,4 @@ export {
208
208
  L as M,
209
209
  H as g
210
210
  };
211
- //# sourceMappingURL=mutation-DBQh7AOZ.js.map
211
+ //# sourceMappingURL=mutation-Bq5bn7Hf.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mutation-DBQh7AOZ.js","sources":["../../../node_modules/.pnpm/@tanstack+query-core@5.74.3/node_modules/@tanstack/query-core/build/modern/mutation.js"],"sourcesContent":["// src/mutation.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Removable } from \"./removable.js\";\nimport { createRetryer } from \"./retryer.js\";\nvar Mutation = class extends Removable {\n #observers;\n #mutationCache;\n #retryer;\n constructor(config) {\n super();\n this.mutationId = config.mutationId;\n this.#mutationCache = config.mutationCache;\n this.#observers = [];\n this.state = config.state || getDefaultState();\n this.setOptions(config.options);\n this.scheduleGc();\n }\n setOptions(options) {\n this.options = options;\n this.updateGcTime(this.options.gcTime);\n }\n get meta() {\n return this.options.meta;\n }\n addObserver(observer) {\n if (!this.#observers.includes(observer)) {\n this.#observers.push(observer);\n this.clearGcTimeout();\n this.#mutationCache.notify({\n type: \"observerAdded\",\n mutation: this,\n observer\n });\n }\n }\n removeObserver(observer) {\n this.#observers = this.#observers.filter((x) => x !== observer);\n this.scheduleGc();\n this.#mutationCache.notify({\n type: \"observerRemoved\",\n mutation: this,\n observer\n });\n }\n optionalRemove() {\n if (!this.#observers.length) {\n if (this.state.status === \"pending\") {\n this.scheduleGc();\n } else {\n this.#mutationCache.remove(this);\n }\n }\n }\n continue() {\n return this.#retryer?.continue() ?? // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n this.execute(this.state.variables);\n }\n async execute(variables) {\n const onContinue = () => {\n this.#dispatch({ type: \"continue\" });\n };\n this.#retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject(new Error(\"No mutationFn found\"));\n }\n return this.options.mutationFn(variables);\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue,\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n canRun: () => this.#mutationCache.canRun(this)\n });\n const restored = this.state.status === \"pending\";\n const isPaused = !this.#retryer.canStart();\n try {\n if (restored) {\n onContinue();\n } else {\n this.#dispatch({ type: \"pending\", variables, isPaused });\n await this.#mutationCache.config.onMutate?.(\n variables,\n this\n );\n const context = await this.options.onMutate?.(variables);\n if (context !== this.state.context) {\n this.#dispatch({\n type: \"pending\",\n context,\n variables,\n isPaused\n });\n }\n }\n const data = await this.#retryer.start();\n await this.#mutationCache.config.onSuccess?.(\n data,\n variables,\n this.state.context,\n this\n );\n await this.options.onSuccess?.(data, variables, this.state.context);\n await this.#mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this\n );\n await this.options.onSettled?.(data, null, variables, this.state.context);\n this.#dispatch({ type: \"success\", data });\n return data;\n } catch (error) {\n try {\n await this.#mutationCache.config.onError?.(\n error,\n variables,\n this.state.context,\n this\n );\n await this.options.onError?.(\n error,\n variables,\n this.state.context\n );\n await this.#mutationCache.config.onSettled?.(\n void 0,\n error,\n this.state.variables,\n this.state.context,\n this\n );\n await this.options.onSettled?.(\n void 0,\n error,\n variables,\n this.state.context\n );\n throw error;\n } finally {\n this.#dispatch({ type: \"error\", error });\n }\n } finally {\n this.#mutationCache.runNext(this);\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n isPaused: true\n };\n case \"continue\":\n return {\n ...state,\n isPaused: false\n };\n case \"pending\":\n return {\n ...state,\n context: action.context,\n data: void 0,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: action.isPaused,\n status: \"pending\",\n variables: action.variables,\n submittedAt: Date.now()\n };\n case \"success\":\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: \"success\",\n isPaused: false\n };\n case \"error\":\n return {\n ...state,\n data: void 0,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: \"error\"\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onMutationUpdate(action);\n });\n this.#mutationCache.notify({\n mutation: this,\n type: \"updated\",\n action\n });\n });\n }\n};\nfunction getDefaultState() {\n return {\n context: void 0,\n data: void 0,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: \"idle\",\n variables: void 0,\n submittedAt: 0\n };\n}\nexport {\n Mutation,\n getDefaultState\n};\n//# sourceMappingURL=mutation.js.map"],"names":["Mutation","_a","Removable","config","__privateAdd","_Mutation_instances","_observers","_mutationCache","_retryer","__privateSet","getDefaultState","options","observer","__privateGet","x","variables","onContinue","__privateMethod","dispatch_fn","createRetryer","failureCount","error","restored","isPaused","_b","context","_d","_c","data","_f","_e","_h","_g","_j","_i","_l","_k","_n","_m","_p","_o","_r","_q","_t","_s","action","reducer","state","notifyManager"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"mutation-Bq5bn7Hf.js","sources":["../../../node_modules/.pnpm/@tanstack+query-core@5.74.3/node_modules/@tanstack/query-core/build/modern/mutation.js"],"sourcesContent":["// src/mutation.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Removable } from \"./removable.js\";\nimport { createRetryer } from \"./retryer.js\";\nvar Mutation = class extends Removable {\n #observers;\n #mutationCache;\n #retryer;\n constructor(config) {\n super();\n this.mutationId = config.mutationId;\n this.#mutationCache = config.mutationCache;\n this.#observers = [];\n this.state = config.state || getDefaultState();\n this.setOptions(config.options);\n this.scheduleGc();\n }\n setOptions(options) {\n this.options = options;\n this.updateGcTime(this.options.gcTime);\n }\n get meta() {\n return this.options.meta;\n }\n addObserver(observer) {\n if (!this.#observers.includes(observer)) {\n this.#observers.push(observer);\n this.clearGcTimeout();\n this.#mutationCache.notify({\n type: \"observerAdded\",\n mutation: this,\n observer\n });\n }\n }\n removeObserver(observer) {\n this.#observers = this.#observers.filter((x) => x !== observer);\n this.scheduleGc();\n this.#mutationCache.notify({\n type: \"observerRemoved\",\n mutation: this,\n observer\n });\n }\n optionalRemove() {\n if (!this.#observers.length) {\n if (this.state.status === \"pending\") {\n this.scheduleGc();\n } else {\n this.#mutationCache.remove(this);\n }\n }\n }\n continue() {\n return this.#retryer?.continue() ?? // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n this.execute(this.state.variables);\n }\n async execute(variables) {\n const onContinue = () => {\n this.#dispatch({ type: \"continue\" });\n };\n this.#retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject(new Error(\"No mutationFn found\"));\n }\n return this.options.mutationFn(variables);\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue,\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n canRun: () => this.#mutationCache.canRun(this)\n });\n const restored = this.state.status === \"pending\";\n const isPaused = !this.#retryer.canStart();\n try {\n if (restored) {\n onContinue();\n } else {\n this.#dispatch({ type: \"pending\", variables, isPaused });\n await this.#mutationCache.config.onMutate?.(\n variables,\n this\n );\n const context = await this.options.onMutate?.(variables);\n if (context !== this.state.context) {\n this.#dispatch({\n type: \"pending\",\n context,\n variables,\n isPaused\n });\n }\n }\n const data = await this.#retryer.start();\n await this.#mutationCache.config.onSuccess?.(\n data,\n variables,\n this.state.context,\n this\n );\n await this.options.onSuccess?.(data, variables, this.state.context);\n await this.#mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this\n );\n await this.options.onSettled?.(data, null, variables, this.state.context);\n this.#dispatch({ type: \"success\", data });\n return data;\n } catch (error) {\n try {\n await this.#mutationCache.config.onError?.(\n error,\n variables,\n this.state.context,\n this\n );\n await this.options.onError?.(\n error,\n variables,\n this.state.context\n );\n await this.#mutationCache.config.onSettled?.(\n void 0,\n error,\n this.state.variables,\n this.state.context,\n this\n );\n await this.options.onSettled?.(\n void 0,\n error,\n variables,\n this.state.context\n );\n throw error;\n } finally {\n this.#dispatch({ type: \"error\", error });\n }\n } finally {\n this.#mutationCache.runNext(this);\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n isPaused: true\n };\n case \"continue\":\n return {\n ...state,\n isPaused: false\n };\n case \"pending\":\n return {\n ...state,\n context: action.context,\n data: void 0,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: action.isPaused,\n status: \"pending\",\n variables: action.variables,\n submittedAt: Date.now()\n };\n case \"success\":\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: \"success\",\n isPaused: false\n };\n case \"error\":\n return {\n ...state,\n data: void 0,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: \"error\"\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onMutationUpdate(action);\n });\n this.#mutationCache.notify({\n mutation: this,\n type: \"updated\",\n action\n });\n });\n }\n};\nfunction getDefaultState() {\n return {\n context: void 0,\n data: void 0,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: \"idle\",\n variables: void 0,\n submittedAt: 0\n };\n}\nexport {\n Mutation,\n getDefaultState\n};\n//# sourceMappingURL=mutation.js.map"],"names":["Mutation","_a","Removable","config","__privateAdd","_Mutation_instances","_observers","_mutationCache","_retryer","__privateSet","getDefaultState","options","observer","__privateGet","x","variables","onContinue","__privateMethod","dispatch_fn","createRetryer","failureCount","error","restored","isPaused","_b","context","_d","_c","data","_f","_e","_h","_g","_j","_i","_l","_k","_n","_m","_p","_o","_r","_q","_t","_s","action","reducer","state","notifyManager"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,15 +1,17 @@
1
- const n = (c, l) => {
2
- const r = l(c);
1
+ const u = (y, s, c = []) => {
2
+ const r = s(y, c);
3
3
  if (typeof r != "object" || r === null)
4
4
  return r;
5
5
  const t = Array.isArray(r) ? [] : {};
6
- for (const [s, e] of Object.entries(r))
7
- Array.isArray(e) ? t[s] = e.map(
8
- (o) => typeof o == "object" && o != null ? n(o, l) : o
9
- ) : typeof e == "object" && e != null ? t[s] = n(e, l) : t[s] = e;
6
+ for (const [o, e] of Object.entries(r)) {
7
+ const l = [...c, o];
8
+ Array.isArray(e) ? t[o] = e.map(
9
+ (n, f) => typeof n == "object" && n != null ? u(n, s, [...l, f.toString()]) : n
10
+ ) : typeof e == "object" && e != null ? t[o] = u(e, s, l) : t[o] = e;
11
+ }
10
12
  return t;
11
13
  };
12
14
  export {
13
- n as traverse
15
+ u as traverse
14
16
  };
15
17
  //# sourceMappingURL=traverse.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverse.js","sources":["../../src/lib/util/traverse.ts"],"sourcesContent":["import type { JsonValue, RecordAny } from \"./types.js\";\n\nexport type { RecordAny };\n\nexport const traverse = <T extends JsonValue = RecordAny>(\n specification: RecordAny,\n transform: (specification: RecordAny) => T,\n) => {\n const transformed = transform(specification);\n if (typeof transformed !== \"object\" || transformed === null) {\n return transformed;\n }\n\n const result: RecordAny = Array.isArray(transformed) ? [] : {};\n\n for (const [key, value] of Object.entries(transformed)) {\n if (Array.isArray(value)) {\n result[key] = value.map((item) =>\n typeof item === \"object\" && item != null\n ? traverse(item, transform)\n : item,\n );\n } else if (typeof value === \"object\" && value != null) {\n result[key] = traverse(value, transform);\n } else {\n result[key] = value;\n }\n }\n\n return result;\n};\n"],"names":["traverse","specification","transform","transformed","result","key","value","item"],"mappings":"AAIa,MAAAA,IAAW,CACtBC,GACAC,MACG;AACG,QAAAC,IAAcD,EAAUD,CAAa;AAC3C,MAAI,OAAOE,KAAgB,YAAYA,MAAgB;AAC9C,WAAAA;AAGT,QAAMC,IAAoB,MAAM,QAAQD,CAAW,IAAI,KAAK,CAAC;AAE7D,aAAW,CAACE,GAAKC,CAAK,KAAK,OAAO,QAAQH,CAAW;AAC/C,IAAA,MAAM,QAAQG,CAAK,IACdF,EAAAC,CAAG,IAAIC,EAAM;AAAA,MAAI,CAACC,MACvB,OAAOA,KAAS,YAAYA,KAAQ,OAChCP,EAASO,GAAML,CAAS,IACxBK;AAAA,IACN,IACS,OAAOD,KAAU,YAAYA,KAAS,OAC/CF,EAAOC,CAAG,IAAIL,EAASM,GAAOJ,CAAS,IAEvCE,EAAOC,CAAG,IAAIC;AAIX,SAAAF;AACT;"}
1
+ {"version":3,"file":"traverse.js","sources":["../../src/lib/util/traverse.ts"],"sourcesContent":["import type { JsonValue, RecordAny } from \"./types.js\";\n\nexport type { RecordAny };\n\nexport const traverse = <T extends JsonValue = RecordAny>(\n specification: RecordAny,\n transform: (specification: RecordAny, path?: string[]) => T,\n path: string[] = [],\n) => {\n const transformed = transform(specification, path);\n if (typeof transformed !== \"object\" || transformed === null) {\n return transformed;\n }\n\n const result: RecordAny = Array.isArray(transformed) ? [] : {};\n\n for (const [key, value] of Object.entries(transformed)) {\n const currentPath = [...path, key];\n\n if (Array.isArray(value)) {\n result[key] = value.map((item, index) =>\n typeof item === \"object\" && item != null\n ? traverse(item, transform, [...currentPath, index.toString()])\n : item,\n );\n } else if (typeof value === \"object\" && value != null) {\n result[key] = traverse(value, transform, currentPath);\n } else {\n result[key] = value;\n }\n }\n\n return result;\n};\n"],"names":["traverse","specification","transform","path","transformed","result","key","value","currentPath","item","index"],"mappings":"AAIO,MAAMA,IAAW,CACtBC,GACAC,GACAC,IAAiB,CAAA,MACd;AACG,QAAAC,IAAcF,EAAUD,GAAeE,CAAI;AACjD,MAAI,OAAOC,KAAgB,YAAYA,MAAgB;AAC9C,WAAAA;AAGT,QAAMC,IAAoB,MAAM,QAAQD,CAAW,IAAI,KAAK,CAAC;AAE7D,aAAW,CAACE,GAAKC,CAAK,KAAK,OAAO,QAAQH,CAAW,GAAG;AACtD,UAAMI,IAAc,CAAC,GAAGL,GAAMG,CAAG;AAE7B,IAAA,MAAM,QAAQC,CAAK,IACdF,EAAAC,CAAG,IAAIC,EAAM;AAAA,MAAI,CAACE,GAAMC,MAC7B,OAAOD,KAAS,YAAYA,KAAQ,OAChCT,EAASS,GAAMP,GAAW,CAAC,GAAGM,GAAaE,EAAM,SAAU,CAAA,CAAC,IAC5DD;AAAA,IACN,IACS,OAAOF,KAAU,YAAYA,KAAS,OAC/CF,EAAOC,CAAG,IAAIN,EAASO,GAAOL,GAAWM,CAAW,IAEpDH,EAAOC,CAAG,IAAIC;AAAA,EAChB;AAGK,SAAAF;AACT;"}
@@ -1,5 +1,5 @@
1
1
  import "../jsx-runtime-C5mzlN2N.js";
2
- import { S as h } from "../SyntaxHighlight-CxhyyMkF.js";
2
+ import { S as h } from "../SyntaxHighlight-o7q0acut.js";
3
3
  import "lucide-react";
4
4
  import "../index-DwT-v3zK.js";
5
5
  import "react";
@@ -1,4 +1,4 @@
1
- import { u as t, a as c, b as n, c as u } from "./chunk-BAXFHI7N-BVBOl9s0.js";
1
+ import { u as t, a as c, b as n, c as u } from "./chunk-BAXFHI7N-BLTsN6tl.js";
2
2
  const i = () => {
3
3
  const a = t(), s = c(), [e, o] = n(), r = u();
4
4
  return { location: a, navigate: s, params: r, searchParams: e, setSearchParams: o };
@@ -6,4 +6,4 @@ const i = () => {
6
6
  export {
7
7
  i as u
8
8
  };
9
- //# sourceMappingURL=useExposedProps-DbIZXspi.js.map
9
+ //# sourceMappingURL=useExposedProps-DmTJxEXG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useExposedProps-DbIZXspi.js","sources":["../src/lib/util/useExposedProps.tsx"],"sourcesContent":["import {\n useLocation,\n useNavigate,\n useParams,\n useSearchParams,\n} from \"react-router\";\nimport type { ExposedComponentProps } from \"../components/SlotletProvider.js\";\n\nexport const useExposedProps = (): ExposedComponentProps => {\n const location = useLocation();\n const navigate = useNavigate();\n const [searchParams, setSearchParams] = useSearchParams();\n const params = useParams();\n\n return { location, navigate, params, searchParams, setSearchParams };\n};\n"],"names":["useExposedProps","location","useLocation","navigate","useNavigate","searchParams","setSearchParams","useSearchParams","params","useParams"],"mappings":";AAQO,MAAMA,IAAkB,MAA6B;AAC1D,QAAMC,IAAWC,EAAY,GACvBC,IAAWC,EAAY,GACvB,CAACC,GAAcC,CAAe,IAAIC,EAAgB,GAClDC,IAASC,EAAU;AAEzB,SAAO,EAAE,UAAAR,GAAU,UAAAE,GAAU,QAAAK,GAAQ,cAAAH,GAAc,iBAAAC,EAAgB;AACrE;"}
1
+ {"version":3,"file":"useExposedProps-DmTJxEXG.js","sources":["../src/lib/util/useExposedProps.tsx"],"sourcesContent":["import {\n useLocation,\n useNavigate,\n useParams,\n useSearchParams,\n} from \"react-router\";\nimport type { ExposedComponentProps } from \"../components/SlotletProvider.js\";\n\nexport const useExposedProps = (): ExposedComponentProps => {\n const location = useLocation();\n const navigate = useNavigate();\n const [searchParams, setSearchParams] = useSearchParams();\n const params = useParams();\n\n return { location, navigate, params, searchParams, setSearchParams };\n};\n"],"names":["useExposedProps","location","useLocation","navigate","useNavigate","searchParams","setSearchParams","useSearchParams","params","useParams"],"mappings":";AAQO,MAAMA,IAAkB,MAA6B;AAC1D,QAAMC,IAAWC,EAAY,GACvBC,IAAWC,EAAY,GACvB,CAACC,GAAcC,CAAe,IAAIC,EAAgB,GAClDC,IAASC,EAAU;AAEzB,SAAO,EAAE,UAAAR,GAAU,UAAAE,GAAU,QAAAK,GAAQ,cAAAH,GAAc,iBAAAC,EAAgB;AACrE;"}
@@ -1,7 +1,7 @@
1
1
  var r = Object.defineProperty;
2
2
  var c = (t, s, e) => s in t ? r(t, s, { enumerable: !0, configurable: !0, writable: !0, value: e }) : t[s] = e;
3
3
  var n = (t, s, e) => c(t, typeof s != "symbol" ? s + "" : s, e);
4
- import { u } from "./hook-CldJlP5c.js";
4
+ import { u } from "./hook-8GM2HXNM.js";
5
5
  import { OpenIDAuthenticationProvider as d } from "./zudoku.auth-openid.js";
6
6
  class h extends d {
7
7
  constructor(e) {
@@ -1,8 +1,8 @@
1
1
  var g = Object.defineProperty;
2
2
  var m = (n, t, s) => t in n ? g(n, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : n[t] = s;
3
3
  var c = (n, t, s) => m(n, typeof t != "symbol" ? t + "" : t, s);
4
- import { A as h } from "./AuthenticationPlugin-ByDF051g.js";
5
- import { u as l } from "./hook-CldJlP5c.js";
4
+ import { A as h } from "./AuthenticationPlugin-BxoEZCSJ.js";
5
+ import { u as l } from "./hook-8GM2HXNM.js";
6
6
  class p extends h {
7
7
  constructor(s) {
8
8
  super();
@@ -4,9 +4,9 @@ var w = (t, e, n) => Le(t, typeof e != "symbol" ? e + "" : e, n);
4
4
  import { j as B } from "./jsx-runtime-C5mzlN2N.js";
5
5
  import { g as xe } from "./_commonjsHelpers-B4e78b8K.js";
6
6
  import { C as Ie } from "./ClientOnly-E7hGysn1.js";
7
- import { d as je, f as ie, u as L } from "./hook-CldJlP5c.js";
8
- import { A as Je } from "./AuthenticationPlugin-ByDF051g.js";
9
- import { N as Oe } from "./chunk-BAXFHI7N-BVBOl9s0.js";
7
+ import { d as je, f as ie, u as L } from "./hook-8GM2HXNM.js";
8
+ import { A as Je } from "./AuthenticationPlugin-BxoEZCSJ.js";
9
+ import { N as Oe } from "./chunk-BAXFHI7N-BLTsN6tl.js";
10
10
  import { Z as ze } from "./invariant-Caa8-XvF.js";
11
11
  var D = { exports: {} }, De = D.exports, ae;
12
12
  function Ne() {
@@ -1,13 +1,13 @@
1
- import "./RouteGuard-DRtEu9nh.js";
1
+ import "./RouteGuard-D2gX29iI.js";
2
2
  import "./index-DwT-v3zK.js";
3
- import "./chunk-BAXFHI7N-BVBOl9s0.js";
4
- import "./hook-CldJlP5c.js";
5
- import "./SlotletProvider-CS_nO-XT.js";
6
- import { e as d, f as k, n as l, B as S, C as h, j as B, l as c, H as E, d as H, L, M, g as R, R as Z, S as f, k as g, i as y, Z as A, a as b, h as j, c as v, m as w, b as x } from "./index-DnQftvP4.js";
3
+ import "./chunk-BAXFHI7N-BLTsN6tl.js";
4
+ import "./hook-8GM2HXNM.js";
5
+ import "./SlotletProvider-wWbHYqWf.js";
6
+ import { e as d, f as k, n as l, B as S, C as h, j as B, l as c, H as E, d as H, L, M, g as R, R as Z, S as f, k as g, i as y, Z as A, a as b, h as j, c as v, m as w, b as x } from "./index-DGNSSXgR.js";
7
7
  import "./ui/Button.js";
8
8
  import "./ui/Callout.js";
9
9
  import "./ClientOnly-E7hGysn1.js";
10
- import "./Markdown-mFpg_n9p.js";
10
+ import "./Markdown-DvdVn1O7.js";
11
11
  import "./Spinner-mNLZ6awP.js";
12
12
  export {
13
13
  d as Bootstrap,
@@ -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 { e as a } from "./hook-CldJlP5c.js";
3
+ import { e as a } from "./hook-8GM2HXNM.js";
4
4
  function d(e, t) {
5
5
  const s = a(), [n, o] = m();
6
6
  return i(() => s.addEventListener(e, (...u) => {
@@ -1,10 +1,10 @@
1
1
  import { j as s } from "./jsx-runtime-C5mzlN2N.js";
2
2
  import { s as h } from "./index-LNp6rxyU.js";
3
- import { d as b, m as x } from "./chunk-BAXFHI7N-BVBOl9s0.js";
4
- import { u as j, d as y, f as p } from "./hook-CldJlP5c.js";
5
- import { H as v } from "./RouteGuard-DRtEu9nh.js";
6
- import { L as N } from "./index-DnQftvP4.js";
7
- import { H as S, M as w } from "./Markdown-mFpg_n9p.js";
3
+ import { d as b, m as x } from "./chunk-BAXFHI7N-BLTsN6tl.js";
4
+ import { u as j, d as y, f as p } from "./hook-8GM2HXNM.js";
5
+ import { H as v } from "./RouteGuard-D2gX29iI.js";
6
+ import { L as N } from "./index-DGNSSXgR.js";
7
+ import { H as S, M as w } from "./Markdown-DvdVn1O7.js";
8
8
  const H = ({
9
9
  items: r,
10
10
  filterCatalogItems: o = (n) => n,
@@ -1,11 +1,11 @@
1
1
  import { j as e } from "./jsx-runtime-C5mzlN2N.js";
2
2
  import { RotateCwIcon as j, TrashIcon as v, EyeOffIcon as w, EyeIcon as K, CheckIcon as b, CopyIcon as k, FileKey2Icon as N } from "lucide-react";
3
- import { D as I, S as x, R as S } from "./SlotletProvider-CS_nO-XT.js";
3
+ import { D as I, S as x, R as S } from "./SlotletProvider-wWbHYqWf.js";
4
4
  import { i as c } from "./invariant-Caa8-XvF.js";
5
- import { e as h, g, l as A, d as C } from "./hook-CldJlP5c.js";
6
- import { u as d, S as E, a as P, b as D, c as q, d as R, e as p } from "./Select-CT64Ou40.js";
5
+ import { e as h, g, l as A, d as C } from "./hook-8GM2HXNM.js";
6
+ import { u as d, S as E, a as P, b as D, c as q, d as R, e as p } from "./Select-CYaEBIYK.js";
7
7
  import { a as O } from "./index.esm-D2ZUREQN.js";
8
- import { a as z, L as u, O as F } from "./chunk-BAXFHI7N-BVBOl9s0.js";
8
+ import { a as z, L as u, O as F } from "./chunk-BAXFHI7N-BLTsN6tl.js";
9
9
  import { Button as l } from "./ui/Button.js";
10
10
  import { Input as T } from "./ui/Input.js";
11
11
  import { useState as y } from "react";
@@ -1,8 +1,8 @@
1
1
  import { j as o } from "./jsx-runtime-C5mzlN2N.js";
2
2
  import a from "react";
3
- import { P as n } from "./Markdown-mFpg_n9p.js";
3
+ import { P as n } from "./Markdown-DvdVn1O7.js";
4
4
  import { c } from "./cn-qaFjX9_3.js";
5
- import { u as p } from "./useExposedProps-DbIZXspi.js";
5
+ import { u as p } from "./useExposedProps-DmTJxEXG.js";
6
6
  const u = ({
7
7
  element: t,
8
8
  render: s,
@@ -53,7 +53,7 @@ const P = (e) => ({
53
53
  const u = {
54
54
  path: r,
55
55
  lazy: async () => {
56
- const { MdxPage: p } = await import("./MdxPage-Cm7atiW3.js"), { default: f, ...l } = await i();
56
+ const { MdxPage: p } = await import("./MdxPage-DUcuusMU.js"), { default: f, ...l } = await i();
57
57
  return {
58
58
  element: /* @__PURE__ */ d.jsx(
59
59
  p,
@@ -1,11 +1,12 @@
1
1
  import "./jsx-runtime-C5mzlN2N.js";
2
2
  import "lucide-react";
3
- import "./chunk-BAXFHI7N-BVBOl9s0.js";
4
- import "./hook-CldJlP5c.js";
3
+ import "./chunk-BAXFHI7N-BLTsN6tl.js";
4
+ import "./hook-8GM2HXNM.js";
5
5
  import "./ui/Button.js";
6
- import { U as a, o as e } from "./index-DuB48L78.js";
6
+ import { z as a, U as s, A } from "./index-CFf9AN-y.js";
7
7
  export {
8
- a as UNTAGGED_PATH,
9
- e as openApiPlugin
8
+ a as GetSidebarOperationsQuery,
9
+ s as UNTAGGED_PATH,
10
+ A as openApiPlugin
10
11
  };
11
12
  //# sourceMappingURL=zudoku.plugin-openapi.js.map
@@ -1,4 +1,4 @@
1
- import { r as o } from "./chunk-BAXFHI7N-BVBOl9s0.js";
1
+ import { r as o } from "./chunk-BAXFHI7N-BLTsN6tl.js";
2
2
  const a = (r) => ({
3
3
  getRoutes: () => r.redirects.map(({ from: e, to: t }) => ({
4
4
  path: e,
@@ -1,14 +1,14 @@
1
1
  import { j as t } from "./jsx-runtime-C5mzlN2N.js";
2
2
  import { C as k } from "./ClientOnly-E7hGysn1.js";
3
3
  import { VisuallyHidden as v } from "@radix-ui/react-visually-hidden";
4
- import { u as N, e as j, m as S, o as _, f as L } from "./hook-CldJlP5c.js";
4
+ import { u as N, e as j, m as S, o as _, f as L } from "./hook-8GM2HXNM.js";
5
5
  import { useRef as b, useLayoutEffect as T, useState as w } from "react";
6
6
  import { B as E } from "./Button-BBNrKpQd.js";
7
7
  import { C as R, a as p, b as x, c as F, d as I, e as q, f as P } from "./Callout-D3Ja4OPX.js";
8
8
  import { b as $ } from "./Dialog-ByYz4ABw.js";
9
- import { S as A } from "./RouteGuard-DRtEu9nh.js";
9
+ import { S as A } from "./RouteGuard-D2gX29iI.js";
10
10
  import { BracketsIcon as D, FileTextIcon as O } from "lucide-react";
11
- import { a as B, L as g } from "./chunk-BAXFHI7N-BVBOl9s0.js";
11
+ import { a as B, L as g } from "./chunk-BAXFHI7N-BLTsN6tl.js";
12
12
  const U = async ({
13
13
  search: r,
14
14
  options: n,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zudoku",
3
- "version": "0.43.0",
3
+ "version": "0.43.1",
4
4
  "type": "module",
5
5
  "homepage": "https://zudoku.dev",
6
6
  "repository": {
@@ -136,7 +136,7 @@
136
136
  "@mdx-js/rollup": "3.1.0",
137
137
  "@pothos/core": "4.6.0",
138
138
  "@radix-ui/react-accordion": "1.2.4",
139
- "@radix-ui/react-alert-dialog": "1.1.7",
139
+ "@radix-ui/react-alert-dialog": "1.1.13",
140
140
  "@radix-ui/react-aspect-ratio": "1.1.3",
141
141
  "@radix-ui/react-checkbox": "1.1.5",
142
142
  "@radix-ui/react-collapsible": "1.1.4",
@@ -178,7 +178,7 @@
178
178
  "embla-carousel-react": "8.6.0",
179
179
  "esm-loader-css": "^1.0.3",
180
180
  "estree-util-value-to-estree": "3.3.3",
181
- "express": "4.21.2",
181
+ "express": "5.1.0",
182
182
  "fast-equals": "5.2.2",
183
183
  "glob": "11.0.1",
184
184
  "graphql": "16.10.0",
package/src/app/main.css CHANGED
@@ -96,7 +96,7 @@
96
96
 
97
97
  html {
98
98
  /* This is to prevent layout jumping when the scrollbar appears/disappears */
99
- @apply -mr-[--scrollbar-width] scroll-pt-[--scroll-padding];
99
+ @apply -me-[--scrollbar-width] scroll-pt-[--scroll-padding];
100
100
  }
101
101
 
102
102
  html,
@@ -326,7 +326,7 @@
326
326
 
327
327
  /* Bullet with number */
328
328
  .stepper > ol > li::before {
329
- @apply absolute left-0 flex items-center justify-center size-[--bullet-size];
329
+ @apply absolute start-0 flex items-center justify-center size-[--bullet-size];
330
330
  @apply bg-muted/80 border border-border text-muted-foreground text-[calc(var(--bullet-size)/2)] font-semibold rounded-full;
331
331
  content: counter(step-counter);
332
332
  }
@@ -41,7 +41,7 @@ export const Banner = () => {
41
41
  {page.banner.dismissible && (
42
42
  <button
43
43
  type="button"
44
- className="md:absolute md:right-4 -m-1.5 p-1.5 hover:bg-accent-foreground/10 rounded-md"
44
+ className="md:absolute md:end-4 -m-1.5 p-1.5 hover:bg-accent-foreground/10 rounded-md"
45
45
  onClick={() => setIsBannerOpen(false)}
46
46
  >
47
47
  <CircleXIcon size={16} />
@@ -1,4 +1,4 @@
1
- import React, { type ReactNode } from "react";
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
2
  import { useRegisterAnchorElement } from "./context/ViewportAnchorContext.js";
3
3
 
4
4
  import { cva, type VariantProps } from "class-variance-authority";
@@ -38,7 +38,7 @@ const getComponent = (level: number) => {
38
38
  }
39
39
  };
40
40
 
41
- export type HeadingProps = React.HTMLAttributes<HTMLHeadingElement> &
41
+ export type HeadingProps = HTMLAttributes<HTMLHeadingElement> &
42
42
  VariantProps<typeof heading> & {
43
43
  children: ReactNode;
44
44
  className?: string;
@@ -66,7 +66,7 @@ export const Heading = ({
66
66
  {id && (
67
67
  <a
68
68
  href={`#${id}`}
69
- className="before:content-['#'] no-underline absolute text-primary -left-[0.8em] pr-2.5 opacity-0 group-hover:opacity-50 hover:!opacity-100 transition-opacity duration-200"
69
+ className="before:content-['#'] no-underline absolute text-primary -start-[0.8em] pe-2.5 opacity-0 group-hover:opacity-50 hover:!opacity-100 transition-opacity duration-200"
70
70
  aria-label={`Link to ${id}`}
71
71
  >
72
72
  {/* Zero width space */}
@@ -32,9 +32,6 @@ export const Layout = ({ children }: { children?: ReactNode }) => {
32
32
 
33
33
  return (
34
34
  <>
35
- {import.meta.env.MODE === "standalone" && (
36
- <style>{`:root { --top-nav-height: 0px; }`}</style>
37
- )}
38
35
  <Helmet titleTemplate={meta?.title}>
39
36
  {options.canonicalUrlOrigin && (
40
37
  <link
@@ -58,7 +55,7 @@ export const Layout = ({ children }: { children?: ReactNode }) => {
58
55
  <div
59
56
  className={cn(
60
57
  "grid max-w-screen-2xl w-full lg:mx-auto",
61
- "has-[:only-child]:grid-rows-1 grid-rows-[0_min-content_1fr] lg:grid-rows-[min-content_1fr]",
58
+ "[&:has(>:only-child)]:grid-rows-1 grid-rows-[0_min-content_1fr] lg:grid-rows-[min-content_1fr]",
62
59
  "grid-cols-1 lg:grid-cols-[var(--side-nav-width)_1fr]",
63
60
  )}
64
61
  >
@@ -3,7 +3,7 @@ import { type PropsWithChildren, useState } from "react";
3
3
  import { useNavigation } from "react-router";
4
4
  import { Drawer, DrawerTrigger } from "zudoku/ui/Drawer.js";
5
5
  import { cn } from "../util/cn.js";
6
- import { useCurrentNavigation } from "./context/ZudokuContext.js";
6
+ import { useCurrentNavigation, useZudoku } from "./context/ZudokuContext.js";
7
7
  import { Sidebar } from "./navigation/Sidebar.js";
8
8
  import { Slotlet } from "./SlotletProvider.js";
9
9
 
@@ -12,10 +12,11 @@ export const Main = ({ children }: PropsWithChildren) => {
12
12
  const { sidebar } = useCurrentNavigation();
13
13
  const hasSidebar = sidebar.length > 0;
14
14
  const isNavigating = useNavigation().state === "loading";
15
+ const { options } = useZudoku();
15
16
 
16
17
  return (
17
18
  <Drawer
18
- direction="left"
19
+ direction={options.page?.dir === "rtl" ? "right" : "left"}
19
20
  open={isDrawerOpen}
20
21
  onOpenChange={(open) => setDrawerOpen(open)}
21
22
  >
@@ -26,7 +27,7 @@ export const Main = ({ children }: PropsWithChildren) => {
26
27
  />
27
28
  )}
28
29
  {hasSidebar && (
29
- <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">
30
+ <div className="lg:hidden -mx-4 px-4 py-2 sticky bg-background/80 backdrop-blur z-10 top-0 start-0 end-0 border-b">
30
31
  <DrawerTrigger className="flex items-center gap-2 px-4">
31
32
  <PanelLeftIcon size={16} strokeWidth={1.5} />
32
33
  <span className="text-sm">Menu</span>
@@ -21,7 +21,7 @@ export const MobileTopNavigation = () => {
21
21
 
22
22
  return (
23
23
  <Drawer
24
- direction="right"
24
+ direction={options.page?.dir === "rtl" ? "left" : "right"}
25
25
  open={drawerOpen}
26
26
  onOpenChange={(open) => setDrawerOpen(open)}
27
27
  >
@@ -32,7 +32,7 @@ export const MobileTopNavigation = () => {
32
32
  <PageProgress />
33
33
  </div>
34
34
  <DrawerContent
35
- className="lg:hidden h-[100dvh] right-0 left-auto w-[320px] rounded-none"
35
+ className="lg:hidden h-[100dvh] end-0 start-auto w-[320px] rounded-none"
36
36
  aria-describedby={undefined}
37
37
  >
38
38
  <div className="p-4 overflow-y-auto overscroll-none h-full flex flex-col justify-between">
@@ -13,7 +13,7 @@ export const Pagination = ({
13
13
  className?: string;
14
14
  }) => {
15
15
  const linkClass =
16
- "group transition-all p-5 space-x-1 transition-all hover:text-foreground";
16
+ "group transition-all p-5 space-x-1 rtl:space-x-reverse transition-all hover:text-foreground";
17
17
 
18
18
  return (
19
19
  <div
@@ -27,7 +27,7 @@ export const Pagination = ({
27
27
  <Button variant="ghost" asChild>
28
28
  <Link to={prev.to} relative="path" className={linkClass}>
29
29
  <ArrowLeftIcon
30
- className="group-hover:motion-safe:animate-bounce-x-start"
30
+ className="ltr:group-hover:motion-safe:animate-bounce-x-start rtl:rotate-180"
31
31
  size={12}
32
32
  />
33
33
  <span className="truncate">{prev.label}</span>
@@ -39,7 +39,7 @@ export const Pagination = ({
39
39
  <Link to={next.to} relative="path" className={linkClass}>
40
40
  <span className="truncate ">{next.label}</span>
41
41
  <ArrowRightIcon
42
- className="group-hover:motion-safe:animate-bounce-x-end"
42
+ className="ltr:group-hover:motion-safe:animate-bounce-x-end rtl:rotate-180"
43
43
  size={12}
44
44
  />
45
45
  </Link>
@@ -64,7 +64,7 @@ export const Search = ({ className }: { className?: string }) => {
64
64
  const KbdShortcut = () => {
65
65
  const os = detectOS();
66
66
  return (
67
- <kbd className="absolute right-1.5 hidden h-5 select-none items-center gap-1 rounded-sm border bg-muted px-1.5 font-mono text-[11px] font-medium opacity-100 sm:flex">
67
+ <kbd className="absolute end-1.5 hidden h-5 select-none items-center gap-1 rounded-sm border bg-muted px-1.5 font-mono text-[11px] font-medium opacity-100 sm:flex">
68
68
  {os === "macOS" ? "⌘" : "Ctrl"}+K
69
69
  </kbd>
70
70
  );
@@ -52,7 +52,7 @@ export const TopNavigation = () => {
52
52
 
53
53
  const filteredItems = topNavigation.filter(isHiddenItem(isAuthenticated));
54
54
 
55
- if (filteredItems.length === 0) {
55
+ if (filteredItems.length === 0 || import.meta.env.MODE === "standalone") {
56
56
  return <style>{`:root { --top-nav-height: 0px; }`}</style>;
57
57
  }
58
58
 
@@ -22,7 +22,12 @@ export const PoweredByZudoku = ({ className }: { className?: string }) => (
22
22
  powered by {import.meta.env.IS_ZUPLO ? "Zuplo" : "Zudoku"}
23
23
  </div>
24
24
  <div className="text-xs font-medium opacity-70 hover:text-foreground transition-colors cursor-pointer">
25
- <ChevronRightIcon size={12} absoluteStrokeWidth strokeWidth={1.5} />
25
+ <ChevronRightIcon
26
+ size={12}
27
+ absoluteStrokeWidth
28
+ strokeWidth={1.5}
29
+ className="rtl:rotate-180"
30
+ />
26
31
  </div>
27
32
  </a>
28
33
  );
@@ -28,7 +28,7 @@ export const Sidebar = ({
28
28
  <Slotlet name="zudoku-after-navigation" />
29
29
  </SidebarWrapper>
30
30
  <DrawerContent
31
- className="lg:hidden h-[100dvh] left-0 w-[320px] rounded-none"
31
+ className="lg:hidden h-[100dvh] start-0 w-[320px] rounded-none"
32
32
  aria-describedby={undefined}
33
33
  >
34
34
  <div className="p-4 overflow-y-auto overscroll-none">
@@ -2,11 +2,11 @@ import * as Collapsible from "@radix-ui/react-collapsible";
2
2
  import { deepEqual } from "fast-equals";
3
3
  import { ChevronRightIcon } from "lucide-react";
4
4
  import { memo, useEffect, useState } from "react";
5
- import { NavLink, useMatch } from "react-router";
5
+ import { NavLink, useLocation, useMatch } from "react-router";
6
6
  import { Button } from "zudoku/ui/Button.js";
7
7
  import type { SidebarItemCategory } from "../../../config/validators/SidebarSchema.js";
8
8
  import { cn } from "../../util/cn.js";
9
- import { joinPath } from "../../util/joinPath.js";
9
+ import { joinUrl } from "../../util/joinUrl.js";
10
10
  import { navigationListItem, SidebarItem } from "./SidebarItem.js";
11
11
  import { useIsCategoryOpen } from "./utils.js";
12
12
 
@@ -19,6 +19,7 @@ const SidebarCategoryInner = ({
19
19
  }) => {
20
20
  const isCategoryOpen = useIsCategoryOpen(category);
21
21
  const [hasInteracted, setHasInteracted] = useState(false);
22
+ const location = useLocation();
22
23
 
23
24
  const isCollapsible = category.collapsible ?? true;
24
25
  const isCollapsed = category.collapsed ?? true;
@@ -51,7 +52,7 @@ const SidebarCategoryInner = ({
51
52
  size={16}
52
53
  className={cn(
53
54
  hasInteracted && "transition",
54
- "shrink-0 group-data-[state=open]:rotate-90",
55
+ "shrink-0 group-data-[state=open]:rotate-90 rtl:rotate-180",
55
56
  )}
56
57
  />
57
58
  </Button>
@@ -83,7 +84,10 @@ const SidebarCategoryInner = ({
83
84
  <Collapsible.Trigger className="group" asChild disabled={!isCollapsible}>
84
85
  {category.link?.type === "doc" ? (
85
86
  <NavLink
86
- to={joinPath(category.link.id)}
87
+ to={{
88
+ pathname: joinUrl(category.link.id),
89
+ search: location.search,
90
+ }}
87
91
  className={styles}
88
92
  onClick={() => {
89
93
  setHasInteracted(true);
@@ -117,7 +121,7 @@ const SidebarCategoryInner = ({
117
121
  "ms-6 my-1",
118
122
  )}
119
123
  >
120
- <ul className="relative after:absolute after:-left-[--padding-nav-item] after:translate-x-[1.5px] after:top-0 after:bottom-0 after:w-px after:bg-border">
124
+ <ul className="relative after:absolute after:-start-[--padding-nav-item] after:translate-x-[1.5px] after:top-0 after:bottom-0 after:w-px after:bg-border">
121
125
  {category.items.map((item) => (
122
126
  <SidebarItem
123
127
  key={
@@ -1,6 +1,6 @@
1
1
  import { cva } from "class-variance-authority";
2
2
  import { ExternalLinkIcon } from "lucide-react";
3
- import { NavLink, useLocation, useSearchParams } from "react-router";
3
+ import { NavLink, useLocation } from "react-router";
4
4
 
5
5
  import type { SidebarItem as SidebarItemType } from "../../../config/validators/SidebarSchema.js";
6
6
  import { joinUrl } from "../../util/joinUrl.js";
@@ -43,7 +43,6 @@ export const SidebarItem = ({
43
43
  }) => {
44
44
  const location = useLocation();
45
45
  const { activeAnchor } = useViewportAnchor();
46
- const [searchParams] = useSearchParams();
47
46
 
48
47
  switch (item.type) {
49
48
  case "category":
@@ -79,7 +78,7 @@ export const SidebarItem = ({
79
78
  to={{
80
79
  pathname: item.href.split("#")[0],
81
80
  hash: item.href.split("#")[1],
82
- search: searchParams.toString(),
81
+ search: location.search,
83
82
  }}
84
83
  {...{ [DATA_ANCHOR_ATTR]: item.href.split("#")[1] }}
85
84
  className={navigationListItem({