zudoku 0.65.3 → 0.66.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 (274) hide show
  1. package/dist/app/sentry.js +1 -1
  2. package/dist/config/validators/BuildSchema.js +18 -3
  3. package/dist/config/validators/BuildSchema.js.map +1 -1
  4. package/dist/config/validators/validate.d.ts +45 -5
  5. package/dist/config/validators/validate.js +7 -2
  6. package/dist/config/validators/validate.js.map +1 -1
  7. package/dist/flat-config.d.ts +10 -3
  8. package/dist/lib/authentication/ui/ZudokuAuthUi.js +5 -1
  9. package/dist/lib/authentication/ui/ZudokuAuthUi.js.map +1 -1
  10. package/dist/lib/components/Mermaid.d.ts +7 -0
  11. package/dist/lib/components/Mermaid.js +42 -0
  12. package/dist/lib/components/Mermaid.js.map +1 -0
  13. package/dist/lib/components/PagefindSearchMeta.d.ts +8 -0
  14. package/dist/lib/components/PagefindSearchMeta.js +7 -0
  15. package/dist/lib/components/PagefindSearchMeta.js.map +1 -0
  16. package/dist/lib/components/Zudoku.js +2 -5
  17. package/dist/lib/components/Zudoku.js.map +1 -1
  18. package/dist/lib/core/RouteGuard.js +1 -1
  19. package/dist/lib/core/RouteGuard.js.map +1 -1
  20. package/dist/lib/core/plugins.d.ts +3 -3
  21. package/dist/lib/oas/parser/index.d.ts +1 -0
  22. package/dist/lib/oas/parser/index.js.map +1 -1
  23. package/dist/lib/plugins/openapi/DownloadSchemaButton.d.ts +3 -0
  24. package/dist/lib/plugins/openapi/DownloadSchemaButton.js +47 -0
  25. package/dist/lib/plugins/openapi/DownloadSchemaButton.js.map +1 -0
  26. package/dist/lib/plugins/openapi/Endpoint.js +3 -6
  27. package/dist/lib/plugins/openapi/Endpoint.js.map +1 -1
  28. package/dist/lib/plugins/openapi/OasProvider.js +22 -13
  29. package/dist/lib/plugins/openapi/OasProvider.js.map +1 -1
  30. package/dist/lib/plugins/openapi/OperationList.js +12 -6
  31. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  32. package/dist/lib/plugins/openapi/OperationListItem.js +2 -2
  33. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  34. package/dist/lib/plugins/openapi/SchemaList.js +2 -1
  35. package/dist/lib/plugins/openapi/SchemaList.js.map +1 -1
  36. package/dist/lib/plugins/openapi/index.js +11 -5
  37. package/dist/lib/plugins/openapi/index.js.map +1 -1
  38. package/dist/lib/plugins/openapi/interfaces.d.ts +16 -13
  39. package/dist/lib/plugins/openapi/playground/Playground.js +1 -1
  40. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  41. package/dist/lib/plugins/openapi/schema/SchemaView.d.ts +1 -1
  42. package/dist/lib/plugins/openapi/schema/SchemaView.js +14 -6
  43. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  44. package/dist/lib/plugins/openapi/schema/utils.d.ts +2 -2
  45. package/dist/lib/plugins/openapi/schema/utils.js.map +1 -1
  46. package/dist/lib/plugins/openapi/util/getRoutes.d.ts +6 -1
  47. package/dist/lib/plugins/openapi/util/getRoutes.js +29 -2
  48. package/dist/lib/plugins/openapi/util/getRoutes.js.map +1 -1
  49. package/dist/lib/plugins/search-pagefind/IndexingDialog.d.ts +3 -0
  50. package/dist/lib/plugins/search-pagefind/IndexingDialog.js +64 -0
  51. package/dist/lib/plugins/search-pagefind/IndexingDialog.js.map +1 -0
  52. package/dist/lib/plugins/search-pagefind/PagefindSearch.js +22 -5
  53. package/dist/lib/plugins/search-pagefind/PagefindSearch.js.map +1 -1
  54. package/dist/lib/plugins/search-pagefind/ResultList.js +5 -4
  55. package/dist/lib/plugins/search-pagefind/ResultList.js.map +1 -1
  56. package/dist/lib/shiki.d.ts +1 -1
  57. package/dist/lib/shiki.js +18 -12
  58. package/dist/lib/shiki.js.map +1 -1
  59. package/dist/lib/ui/Button.d.ts +2 -2
  60. package/dist/lib/ui/Button.js +9 -8
  61. package/dist/lib/ui/Button.js.map +1 -1
  62. package/dist/lib/ui/ButtonGroup.d.ts +11 -0
  63. package/dist/lib/ui/ButtonGroup.js +28 -0
  64. package/dist/lib/ui/ButtonGroup.js.map +1 -0
  65. package/dist/lib/ui/Command.js +2 -2
  66. package/dist/lib/ui/Command.js.map +1 -1
  67. package/dist/lib/ui/DropdownMenu.d.ts +21 -23
  68. package/dist/lib/ui/DropdownMenu.js +47 -32
  69. package/dist/lib/ui/DropdownMenu.js.map +1 -1
  70. package/dist/lib/ui/Kbd.d.ts +3 -0
  71. package/dist/lib/ui/Kbd.js +10 -0
  72. package/dist/lib/ui/Kbd.js.map +1 -0
  73. package/dist/lib/util/MdxComponents.d.ts +1 -0
  74. package/dist/lib/util/MdxComponents.js +2 -0
  75. package/dist/lib/util/MdxComponents.js.map +1 -1
  76. package/dist/lib/util/flattenAllOf.js +27 -4
  77. package/dist/lib/util/flattenAllOf.js.map +1 -1
  78. package/dist/lib/util/flattenAllOf.test.js +67 -12
  79. package/dist/lib/util/flattenAllOf.test.js.map +1 -1
  80. package/dist/vite/api/SchemaManager.d.ts +5 -0
  81. package/dist/vite/api/SchemaManager.js +24 -0
  82. package/dist/vite/api/SchemaManager.js.map +1 -1
  83. package/dist/vite/api/SchemaManager.test.js +67 -0
  84. package/dist/vite/api/SchemaManager.test.js.map +1 -1
  85. package/dist/vite/config.js +8 -2
  86. package/dist/vite/config.js.map +1 -1
  87. package/dist/vite/dev-server.js +25 -0
  88. package/dist/vite/dev-server.js.map +1 -1
  89. package/dist/vite/pagefind-dev-index.d.ts +16 -0
  90. package/dist/vite/pagefind-dev-index.js +68 -0
  91. package/dist/vite/pagefind-dev-index.js.map +1 -0
  92. package/dist/vite/plugin-api.js +41 -3
  93. package/dist/vite/plugin-api.js.map +1 -1
  94. package/dist/vite/prerender/prerender.js +1 -19
  95. package/dist/vite/prerender/prerender.js.map +1 -1
  96. package/dist/vite/prerender/utils.d.ts +2 -0
  97. package/dist/vite/prerender/utils.js +24 -0
  98. package/dist/vite/prerender/utils.js.map +1 -0
  99. package/lib/ActionButton-DUgvSylL.js +25 -0
  100. package/lib/ActionButton-DUgvSylL.js.map +1 -0
  101. package/lib/Button-CynVW1JV.js +53 -0
  102. package/lib/Button-CynVW1JV.js.map +1 -0
  103. package/lib/ClaudeLogo-B4Xxt-x_.js +69 -0
  104. package/lib/ClaudeLogo-B4Xxt-x_.js.map +1 -0
  105. package/lib/{Command-CUcrW3qs.js → Command-BpT1iBE6.js} +25 -25
  106. package/lib/Command-BpT1iBE6.js.map +1 -0
  107. package/lib/Drawer-Ci7XwhqT.js.map +1 -1
  108. package/lib/DropdownMenu-C8SX_-S_.js +104 -0
  109. package/lib/DropdownMenu-C8SX_-S_.js.map +1 -0
  110. package/lib/{ErrorAlert-D5LKLFOd.js → ErrorAlert-DrOR8w3f.js} +1017 -1015
  111. package/lib/{ErrorAlert-D5LKLFOd.js.map → ErrorAlert-DrOR8w3f.js.map} +1 -1
  112. package/lib/IndexingDialog-B5zCiUKr.js +100 -0
  113. package/lib/IndexingDialog-B5zCiUKr.js.map +1 -0
  114. package/lib/MdxPage-BagO2c-n.js +210 -0
  115. package/lib/MdxPage-BagO2c-n.js.map +1 -0
  116. package/lib/Mermaid-D_VSX7_Q.js +102 -0
  117. package/lib/Mermaid-D_VSX7_Q.js.map +1 -0
  118. package/lib/{OAuthErrorPage-oXnxcJg4.js → OAuthErrorPage-Fq54RLgt.js} +7 -7
  119. package/lib/{OAuthErrorPage-oXnxcJg4.js.map → OAuthErrorPage-Fq54RLgt.js.map} +1 -1
  120. package/lib/OasProvider-DPH8mwDa.js +40 -0
  121. package/lib/OasProvider-DPH8mwDa.js.map +1 -0
  122. package/lib/{OperationList-CmMoKpGu.js → OperationList-C0jiEaG5.js} +1670 -1573
  123. package/lib/OperationList-C0jiEaG5.js.map +1 -0
  124. package/lib/{RouteGuard-Brz95MSt.js → RouteGuard-9wjejsKm.js} +19 -19
  125. package/lib/{RouteGuard-Brz95MSt.js.map → RouteGuard-9wjejsKm.js.map} +1 -1
  126. package/lib/{RouterError-VGZB_wg4.js → RouterError-DSLXagd5.js} +3 -3
  127. package/lib/{RouterError-VGZB_wg4.js.map → RouterError-DSLXagd5.js.map} +1 -1
  128. package/lib/{SchemaList-BykD27ga.js → SchemaList-BU0zCHn9.js} +28 -27
  129. package/lib/SchemaList-BU0zCHn9.js.map +1 -0
  130. package/lib/{SchemaView-Dt6hbCAt.js → SchemaView-DVae4RO2.js} +198 -187
  131. package/lib/SchemaView-DVae4RO2.js.map +1 -0
  132. package/lib/Select-CkxXP5I7.js +243 -0
  133. package/lib/Select-CkxXP5I7.js.map +1 -0
  134. package/lib/Separator-CTPSeW1S.js +27 -0
  135. package/lib/Separator-CTPSeW1S.js.map +1 -0
  136. package/lib/{SignUp-D2mmQOkg.js → SignUp-BjS4ozA7.js} +13 -13
  137. package/lib/{SignUp-D2mmQOkg.js.map → SignUp-BjS4ozA7.js.map} +1 -1
  138. package/lib/{SyntaxHighlight-C19vH0V_.js → SyntaxHighlight-Kdyskw3C.js} +654 -622
  139. package/lib/SyntaxHighlight-Kdyskw3C.js.map +1 -0
  140. package/lib/{Toc-CBWfFCVf.js → Toc-DJxFPfcS.js} +2 -2
  141. package/lib/{Toc-CBWfFCVf.js.map → Toc-DJxFPfcS.js.map} +1 -1
  142. package/lib/{ZudokuContext-BUZ5hkWB.js → ZudokuContext-BXldanA8.js} +11 -11
  143. package/lib/{ZudokuContext-BUZ5hkWB.js.map → ZudokuContext-BXldanA8.js.map} +1 -1
  144. package/lib/___vite-browser-external_commonjs-proxy-Cga3HsWk.js +9 -0
  145. package/lib/___vite-browser-external_commonjs-proxy-Cga3HsWk.js.map +1 -0
  146. package/lib/{chunk-PVWAREVJ-BMhpCH5D.js → chunk-PVWAREVJ-dLIqswPy.js} +5 -5
  147. package/lib/{chunk-PVWAREVJ-BMhpCH5D.js.map → chunk-PVWAREVJ-dLIqswPy.js.map} +1 -1
  148. package/lib/{circular-CNHs4gAz.js → circular-CzWF1hj5.js} +2 -2
  149. package/lib/{circular-CNHs4gAz.js.map → circular-CzWF1hj5.js.map} +1 -1
  150. package/lib/createServer-BIr2_tGn.js +16693 -0
  151. package/lib/createServer-BIr2_tGn.js.map +1 -0
  152. package/lib/createVariantComponent-B9_dVBvu.js +35 -0
  153. package/lib/createVariantComponent-B9_dVBvu.js.map +1 -0
  154. package/lib/{errors-D7xzOd8X.js → errors-Bs4duWDy.js} +3 -3
  155. package/lib/{errors-D7xzOd8X.js.map → errors-Bs4duWDy.js.map} +1 -1
  156. package/lib/firebase-qUdSEL1p.js +7366 -0
  157. package/lib/firebase-qUdSEL1p.js.map +1 -0
  158. package/lib/{hook-CMeoxziF.js → hook-BNxidGQq.js} +3 -3
  159. package/lib/{hook-CMeoxziF.js.map → hook-BNxidGQq.js.map} +1 -1
  160. package/lib/{index-unv8c40u.js → index-0oT9beQN.js} +568 -576
  161. package/lib/index-0oT9beQN.js.map +1 -0
  162. package/lib/{index-CF7_erXq.js → index-Bh-MffiL.js} +2 -2
  163. package/lib/{index-CF7_erXq.js.map → index-Bh-MffiL.js.map} +1 -1
  164. package/lib/{index-CPws05Tb.js → index-CCmMJp02.js} +10 -10
  165. package/lib/{index-CPws05Tb.js.map → index-CCmMJp02.js.map} +1 -1
  166. package/lib/index-CrcNWbel.js.map +1 -1
  167. package/lib/index-Css56y3F.js +133 -0
  168. package/lib/index-Css56y3F.js.map +1 -0
  169. package/lib/{index.esm-BnYHxCYC.js → index.esm-DtzT_KoE.js} +20 -20
  170. package/lib/{index.esm-BnYHxCYC.js.map → index.esm-DtzT_KoE.js.map} +1 -1
  171. package/lib/index.esm-kW-Utcsi.js +32 -0
  172. package/lib/index.esm-kW-Utcsi.js.map +1 -0
  173. package/lib/{invariant-Bm-FVUQE.js → invariant-CGOLuIIz.js} +3 -3
  174. package/lib/{invariant-Bm-FVUQE.js.map → invariant-CGOLuIIz.js.map} +1 -1
  175. package/lib/{mutation-BSU0xu4m.js → mutation-BoVlx8yA.js} +2 -2
  176. package/lib/{mutation-BSU0xu4m.js.map → mutation-BoVlx8yA.js.map} +1 -1
  177. package/lib/ui/ActionButton.js +1 -1
  178. package/lib/ui/Button.js +25 -24
  179. package/lib/ui/Button.js.map +1 -1
  180. package/lib/ui/ButtonGroup.js +77 -0
  181. package/lib/ui/ButtonGroup.js.map +1 -0
  182. package/lib/ui/Command.js +3 -3
  183. package/lib/ui/Command.js.map +1 -1
  184. package/lib/ui/DropdownMenu.js +227 -140
  185. package/lib/ui/DropdownMenu.js.map +1 -1
  186. package/lib/ui/Kbd.js +32 -0
  187. package/lib/ui/Kbd.js.map +1 -0
  188. package/lib/ui/SyntaxHighlight.js +3 -3
  189. package/lib/useMutation-C6RqWmTS.js +97 -0
  190. package/lib/useMutation-C6RqWmTS.js.map +1 -0
  191. package/lib/zudoku.__internal.js +8 -8
  192. package/lib/zudoku.auth-auth0.js +1 -1
  193. package/lib/zudoku.auth-azureb2c.js +4 -4
  194. package/lib/zudoku.auth-clerk.js +2 -2
  195. package/lib/zudoku.auth-firebase.js +9 -0
  196. package/lib/zudoku.auth-firebase.js.map +1 -0
  197. package/lib/zudoku.auth-openid.js +5 -5
  198. package/lib/zudoku.auth-supabase.js +5 -5
  199. package/lib/zudoku.components.js +7 -7
  200. package/lib/zudoku.hooks.js +11 -24
  201. package/lib/zudoku.hooks.js.map +1 -1
  202. package/lib/zudoku.mermaid.js +10 -0
  203. package/lib/zudoku.mermaid.js.map +1 -0
  204. package/lib/zudoku.plugin-api-catalog.js +6 -6
  205. package/lib/zudoku.plugin-api-keys.js +224 -215
  206. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  207. package/lib/zudoku.plugin-custom-pages.js +1 -1
  208. package/lib/zudoku.plugin-markdown.js +1 -1
  209. package/lib/zudoku.plugin-openapi.js +3 -3
  210. package/lib/zudoku.plugin-redirect.js +1 -1
  211. package/lib/zudoku.plugin-search-pagefind.js +184 -226
  212. package/lib/zudoku.plugin-search-pagefind.js.map +1 -1
  213. package/lib/zudoku.plugins.js.map +1 -1
  214. package/lib/zudoku.router.js +2 -2
  215. package/package.json +33 -21
  216. package/src/app/sentry.ts +1 -1
  217. package/src/lib/authentication/ui/ZudokuAuthUi.tsx +11 -1
  218. package/src/lib/components/Mermaid.tsx +68 -0
  219. package/src/lib/components/PagefindSearchMeta.tsx +14 -0
  220. package/src/lib/components/Zudoku.tsx +4 -7
  221. package/src/lib/core/RouteGuard.tsx +1 -1
  222. package/src/lib/core/plugins.ts +2 -2
  223. package/src/lib/oas/parser/index.ts +2 -0
  224. package/src/lib/plugins/openapi/DownloadSchemaButton.tsx +115 -0
  225. package/src/lib/plugins/openapi/Endpoint.tsx +20 -27
  226. package/src/lib/plugins/openapi/OasProvider.tsx +30 -17
  227. package/src/lib/plugins/openapi/OperationList.tsx +39 -21
  228. package/src/lib/plugins/openapi/OperationListItem.tsx +5 -5
  229. package/src/lib/plugins/openapi/SchemaList.tsx +4 -0
  230. package/src/lib/plugins/openapi/index.tsx +16 -7
  231. package/src/lib/plugins/openapi/interfaces.ts +16 -7
  232. package/src/lib/plugins/openapi/playground/Playground.tsx +1 -1
  233. package/src/lib/plugins/openapi/schema/SchemaView.tsx +36 -27
  234. package/src/lib/plugins/openapi/schema/utils.ts +5 -2
  235. package/src/lib/plugins/openapi/util/getRoutes.tsx +35 -3
  236. package/src/lib/plugins/search-pagefind/IndexingDialog.tsx +163 -0
  237. package/src/lib/plugins/search-pagefind/PagefindSearch.tsx +61 -22
  238. package/src/lib/plugins/search-pagefind/ResultList.tsx +8 -3
  239. package/src/lib/shiki.ts +21 -12
  240. package/src/lib/ui/Button.tsx +10 -10
  241. package/src/lib/ui/ButtonGroup.tsx +82 -0
  242. package/src/lib/ui/Command.tsx +3 -3
  243. package/src/lib/ui/DropdownMenu.tsx +226 -170
  244. package/src/lib/ui/Kbd.tsx +28 -0
  245. package/src/lib/util/MdxComponents.tsx +2 -0
  246. package/src/lib/util/flattenAllOf.test.ts +71 -19
  247. package/src/lib/util/flattenAllOf.ts +29 -8
  248. package/src/shiki/langs/markdown-nix.js +1 -0
  249. package/src/shiki/langs/openscad.js +1 -0
  250. package/dist/vite/create-pagefind-index.d.ts +0 -4
  251. package/dist/vite/create-pagefind-index.js +0 -12
  252. package/dist/vite/create-pagefind-index.js.map +0 -1
  253. package/lib/Button-B3ucvvQw.js +0 -52
  254. package/lib/Button-B3ucvvQw.js.map +0 -1
  255. package/lib/Command-CUcrW3qs.js.map +0 -1
  256. package/lib/DropdownMenu-BZ2NKQ3K.js +0 -126
  257. package/lib/DropdownMenu-BZ2NKQ3K.js.map +0 -1
  258. package/lib/MdxPage-hOCN-u-L.js +0 -240
  259. package/lib/MdxPage-hOCN-u-L.js.map +0 -1
  260. package/lib/OasProvider-CpniNNrW.js +0 -36
  261. package/lib/OasProvider-CpniNNrW.js.map +0 -1
  262. package/lib/OperationList-CmMoKpGu.js.map +0 -1
  263. package/lib/Pagination-lLSoHnxa.js +0 -37
  264. package/lib/Pagination-lLSoHnxa.js.map +0 -1
  265. package/lib/SchemaList-BykD27ga.js.map +0 -1
  266. package/lib/SchemaView-Dt6hbCAt.js.map +0 -1
  267. package/lib/Select-DFRCS31-.js +0 -399
  268. package/lib/Select-DFRCS31-.js.map +0 -1
  269. package/lib/SyntaxHighlight-C19vH0V_.js.map +0 -1
  270. package/lib/createServer-BmcVQAOQ.js +0 -13018
  271. package/lib/createServer-BmcVQAOQ.js.map +0 -1
  272. package/lib/index-unv8c40u.js.map +0 -1
  273. package/lib/useExposedProps-U3pmsHaG.js +0 -113
  274. package/lib/useExposedProps-U3pmsHaG.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaView-DVae4RO2.js","sources":["../src/lib/components/PagefindSearchMeta.tsx","../src/lib/util/groupBy.ts","../src/lib/ui/Frame.tsx","../src/lib/ui/Item.tsx","../src/lib/plugins/openapi/components/ConstValue.tsx","../src/lib/plugins/openapi/components/EnumValues.tsx","../src/lib/plugins/openapi/ParamInfos.tsx","../src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx","../src/lib/plugins/openapi/schema/utils.ts","../src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx","../src/lib/plugins/openapi/schema/union-helpers.ts","../src/lib/plugins/openapi/schema/UnionView.tsx","../src/lib/plugins/openapi/schema/SchemaView.tsx"],"sourcesContent":["import type { PropsWithChildren } from \"react\";\n\n/**\n * Adds metadata to be captured by Pagefind for search results.\n * Content is visually hidden but indexed by the search engine.\n */\nexport const PagefindSearchMeta = ({\n name,\n children,\n}: PropsWithChildren<{ name?: string }>) => (\n <span data-pagefind-meta={name} className=\"sr-only\">\n {children}\n </span>\n);\n","// biome-ignore-all lint/suspicious/noExplicitAny: Allow any type\nexport const groupBy = <\n T extends Record<PropertyKey, any>,\n KeySelector extends (item: T) => PropertyKey,\n>(\n arr: T[],\n keySelector: KeySelector,\n): Partial<Record<ReturnType<KeySelector>, T[]>> => {\n return arr.reduce(\n (accumulator, val) => {\n const groupedKey = keySelector(val) as ReturnType<KeySelector>;\n if (!accumulator[groupedKey]) {\n accumulator[groupedKey] = [];\n }\n accumulator[groupedKey].push(val);\n return accumulator;\n },\n {} as Record<ReturnType<KeySelector>, T[]>,\n );\n};\n","import type * as React from \"react\";\nimport { cn } from \"../util/cn.js\";\n\nfunction Frame({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"frame\"\n className={cn(\n \"relative flex flex-col rounded-2xl bg-muted p-1\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction FramePanel({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"frame-panel\"\n className={cn(\n \"relative bg-clip-padding rounded-xl border bg-card p-5 shadow-xs\",\n \"before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-xl)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] dark:bg-clip-border dark:before:shadow-[0_-1px_--theme(--color-white/8%)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction FrameHeader({ className, ...props }: React.ComponentProps<\"header\">) {\n return (\n <header\n data-slot=\"frame-panel-header\"\n className={cn(\"flex flex-col p-4\", className)}\n {...props}\n />\n );\n}\n\nfunction FrameTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"frame-panel-title\"\n className={cn(\"text-sm font-semibold\", className)}\n {...props}\n />\n );\n}\n\nfunction FrameDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"frame-panel-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction FrameFooter({ className, ...props }: React.ComponentProps<\"footer\">) {\n return (\n <footer\n data-slot=\"frame-panel-footer\"\n className={cn(\"flex flex-col gap-1 px-5 py-4\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Frame,\n FramePanel,\n FrameHeader,\n FrameTitle,\n FrameDescription,\n FrameFooter,\n};\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport { cn } from \"../util/cn.js\";\nimport { Separator } from \"./Separator.js\";\n\nfunction ItemGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n role=\"list\"\n data-slot=\"item-group\"\n className={cn(\"group/item-group flex flex-col\", className)}\n {...props}\n />\n );\n}\n\nfunction ItemSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"item-separator\"\n orientation=\"horizontal\"\n className={cn(\"my-0\", className)}\n {...props}\n />\n );\n}\n\nconst itemVariants = cva(\n \"group/item flex items-center border border-transparent text-sm rounded-md transition-colors [a]:hover:bg-accent/50 [a]:transition-colors duration-100 flex-wrap outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline: \"border-border\",\n muted: \"bg-muted/50\",\n },\n size: {\n default: \"p-4 gap-4 \",\n sm: \"py-3 px-4 gap-2.5\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nfunction Item({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> &\n VariantProps<typeof itemVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"div\";\n return (\n <Comp\n data-slot=\"item\"\n data-variant={variant}\n data-size={size}\n className={cn(itemVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nconst itemMediaVariants = cva(\n \"flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=item-description]]/item:self-start [&_svg]:pointer-events-none group-has-[[data-slot=item-description]]/item:translate-y-0.5\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"size-8 border rounded-sm bg-muted [&_svg:not([class*='size-'])]:size-4\",\n image:\n \"size-10 rounded-sm overflow-hidden [&_img]:size-full [&_img]:object-cover\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nfunction ItemMedia({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof itemMediaVariants>) {\n return (\n <div\n data-slot=\"item-media\"\n data-variant={variant}\n className={cn(itemMediaVariants({ variant, className }))}\n {...props}\n />\n );\n}\n\nfunction ItemContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-content\"\n className={cn(\n \"flex flex-1 flex-col gap-1 [&+[data-slot=item-content]]:flex-none\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-title\"\n className={cn(\n \"flex w-fit items-center gap-2 text-sm leading-snug font-medium\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"item-description\"\n className={cn(\n \"text-muted-foreground line-clamp-2 text-sm leading-normal font-normal text-balance\",\n \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemActions({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-actions\"\n className={cn(\"flex items-center gap-2\", className)}\n {...props}\n />\n );\n}\n\nfunction ItemHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-header\"\n className={cn(\n \"flex basis-full items-center justify-between gap-2\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-footer\"\n className={cn(\n \"flex basis-full items-center justify-between gap-2\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Item,\n ItemMedia,\n ItemContent,\n ItemActions,\n ItemGroup,\n ItemSeparator,\n ItemTitle,\n ItemDescription,\n ItemHeader,\n ItemFooter,\n};\n","import type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { SelectOnClick } from \"./SelectOnClick.js\";\n\nexport const ConstValue = ({\n schema,\n hideDescription = false,\n}: {\n schema: SchemaObject;\n hideDescription?: boolean;\n}) => {\n return (\n <div className=\"flex flex-col gap-1\">\n <div>\n <span className=\"text-muted-foreground\">Const value: </span>\n <SelectOnClick className=\"border rounded px-1 font-mono\">\n {schema.const}\n </SelectOnClick>\n {!hideDescription && schema.description && (\n <div className=\"text-muted-foreground\">{schema.description}</div>\n )}\n </div>\n </div>\n );\n};\n","import { ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { SelectOnClick } from \"./SelectOnClick.js\";\n\nexport const EnumValues = ({\n values,\n className,\n maxVisibleValues = 8,\n}: {\n values: Array<string | number>;\n className?: string;\n maxVisibleValues?: number;\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n\n if (!values.length) return null;\n\n const shouldCollapse = values.length > maxVisibleValues;\n const visibleValues =\n shouldCollapse && !isOpen ? values.slice(0, maxVisibleValues) : values;\n\n return (\n <div className={cn(\"flex flex-wrap gap-1.5\", className)}>\n <span className=\"text-muted-foreground\">Enum values:</span>\n {visibleValues.map((value) => (\n <div key={value}>\n <SelectOnClick className=\"border rounded-sm px-1 font-mono\">\n {value}\n </SelectOnClick>\n </div>\n ))}\n {shouldCollapse && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-fit px-0\"\n onClick={() => setIsOpen(!isOpen)}\n >\n {isOpen ? (\n <div className=\"flex items-center gap-1\">\n <ChevronUpIcon size={12} />\n <span className=\"text-muted-foreground\">show less</span>\n </div>\n ) : (\n <div className=\"flex items-center gap-1\">\n <ChevronDownIcon size={12} />\n <span className=\"text-muted-foreground\">\n show {values.length - maxVisibleValues} more\n </span>\n </div>\n )}\n </Button>\n )}\n </div>\n );\n};\n","import { ChevronsLeftRightIcon } from \"lucide-react\";\nimport { isValidElement, useState } from \"react\";\nimport { InlineCode } from \"../../components/InlineCode.js\";\nimport type { SchemaObject } from \"../../oas/parser/index.js\";\nimport { cn } from \"../../util/cn.js\";\n\nconst Pattern = ({ pattern }: { pattern: string }) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const isExpandable = pattern.length > 20;\n const shortPattern = isExpandable ? `${pattern.slice(0, 20)}…` : pattern;\n\n return (\n <InlineCode\n className={cn(\"text-xs\", isExpandable && \"cursor-pointer\")}\n onClick={() => setIsExpanded(!isExpanded)}\n selectOnClick={false}\n >\n {isExpanded ? pattern : shortPattern}\n {isExpandable && (\n <button type=\"button\" className=\"p-1 translate-y-[2px]\">\n {!isExpanded && <ChevronsLeftRightIcon size={12} />}\n </button>\n )}\n </InlineCode>\n );\n};\n\nconst getSchemaInfos = (schema?: SchemaObject) => {\n if (!schema) return [];\n\n return [\n schema.type === \"array\" && schema.items.type\n ? Array.isArray(schema.items.type)\n ? `(${schema.items.type.join(\" | \")})[]`\n : `${schema.items.type}[]`\n : Array.isArray(schema.type)\n ? schema.type.join(\" | \")\n : schema.type,\n\n schema.enum && \"enum\",\n schema.const && \"const\",\n schema.format,\n schema.minimum !== undefined && `min: ${schema.minimum}`,\n schema.maximum !== undefined && `max: ${schema.maximum}`,\n schema.minLength !== undefined && `minLength: ${schema.minLength}`,\n schema.maxLength !== undefined && `maxLength: ${schema.maxLength}`,\n schema.minItems !== undefined && `minItems: ${schema.minItems}`,\n schema.maxItems !== undefined && `maxItems: ${schema.maxItems}`,\n schema.minProperties !== undefined && `minProps: ${schema.minProperties}`,\n schema.maxProperties !== undefined && `maxProps: ${schema.maxProperties}`,\n schema.uniqueItems && \"unique\",\n schema.readOnly && \"readOnly\",\n schema.writeOnly && \"writeOnly\",\n schema.deprecated && \"deprecated\",\n schema.pattern && (\n <>\n pattern: <Pattern pattern={schema.pattern} />\n </>\n ),\n ];\n};\n\nexport const ParamInfos = ({\n schema,\n extraItems = [],\n className,\n}: {\n schema?: SchemaObject;\n extraItems?: unknown[];\n className?: string;\n}) => {\n const filteredItems = [...getSchemaInfos(schema), ...extraItems].flatMap(\n (item) => (typeof item === \"string\" || isValidElement(item) ? item : []),\n );\n\n return (\n <span className={className}>\n {filteredItems.map((item, index) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: index should be stable\n <span className=\"text-muted-foreground\" key={index}>\n {item}\n {index < filteredItems.length - 1 && (\n <span className=\"text-muted-foreground/50\">\n &nbsp;&middot;&nbsp;\n </span>\n )}\n </span>\n ))}\n </span>\n );\n};\n","import type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { SelectOnClick } from \"../components/SelectOnClick.js\";\n\nexport const SchemaExampleAndDefault = ({\n schema,\n}: {\n schema: SchemaObject;\n}) => {\n const example = schema.examples?.at(0);\n const defaultValue = schema.default;\n\n if (example === undefined && defaultValue === undefined) return null;\n\n return (\n <div className=\"flex flex-col gap-1\">\n {example !== undefined && (\n <div>\n <span className=\"text-muted-foreground\">Example: </span>\n <SelectOnClick className=\"border rounded-sm px-1 font-mono\">\n {typeof example === \"object\" || typeof example === \"boolean\"\n ? JSON.stringify(example)\n : example}\n </SelectOnClick>\n </div>\n )}\n {defaultValue !== undefined && (\n <div>\n <span className=\"text-muted-foreground\">Default: </span>\n <SelectOnClick className=\"border rounded-sm px-1 font-mono\">\n {typeof defaultValue === \"object\" ||\n typeof defaultValue === \"boolean\"\n ? JSON.stringify(defaultValue)\n : defaultValue}\n </SelectOnClick>\n </div>\n )}\n </div>\n );\n};\n","import { CIRCULAR_REF } from \"../../../oas/graphql/circular.js\";\nimport type {\n ArraySchemaObject,\n SchemaObject,\n} from \"../../../oas/parser/index.js\";\n\nexport const isBasicType = (\n type: unknown,\n): type is \"string\" | \"number\" | \"boolean\" | \"integer\" | \"null\" =>\n (typeof type === \"string\" &&\n [\"string\", \"number\", \"boolean\", \"integer\", \"null\"].includes(type)) ||\n (Array.isArray(type) && type.every(isBasicType));\n\nexport const isArrayType = (value: SchemaObject): value is ArraySchemaObject =>\n value.type === \"array\" ||\n // schema.type might be an array of types, so we need to check if \"array\" is one of them\n (Array.isArray(value.type) && value.type.includes(\"array\"));\n\nexport const isComplexType = (value?: SchemaObject) =>\n value &&\n ((value.type === \"object\" &&\n Object.keys(value.properties ?? {}).length > 0) ||\n (value.type === \"array\" &&\n typeof value.items === \"object\" &&\n (!value.items.type || value.items.type === \"object\")));\n\nexport const isCircularRef = (schema: unknown): schema is string =>\n typeof schema === \"string\" && schema.startsWith(CIRCULAR_REF);\n\nexport const isArrayCircularRef = (\n schema: SchemaObject,\n): schema is SchemaObject & { items: SchemaObject } =>\n isArrayType(schema) && \"items\" in schema && isCircularRef(schema.items);\n\nexport const extractCircularRefInfo = (\n ref?: string | SchemaObject,\n): string | undefined =>\n typeof ref === \"string\" ? ref.split(\":\")[1] : undefined;\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { MinusIcon, PlusIcon, RefreshCcwDotIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Item, ItemActions, ItemContent, ItemTitle } from \"zudoku/ui/Item.js\";\nimport { InlineCode } from \"../../../components/InlineCode.js\";\nimport { Markdown } from \"../../../components/Markdown.js\";\nimport type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { Button } from \"../../../ui/Button.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { ConstValue } from \"../components/ConstValue.js\";\nimport { EnumValues } from \"../components/EnumValues.js\";\nimport { ParamInfos } from \"../ParamInfos.js\";\nimport { SchemaExampleAndDefault } from \"./SchemaExampleAndDefault.js\";\nimport { SchemaView } from \"./SchemaView.js\";\nimport {\n extractCircularRefInfo,\n isArrayCircularRef,\n isArrayType,\n isCircularRef,\n isComplexType,\n} from \"./utils.js\";\n\nconst RecursiveIndicator = ({ circularProp }: { circularProp?: string }) => (\n <InlineCode\n className=\"inline-flex items-center gap-1.5 text-xs translate-y-0.5\"\n selectOnClick={false}\n >\n <RefreshCcwDotIcon size={13} />\n <span>{circularProp ? `${circularProp} (circular)` : \"circular\"}</span>\n </InlineCode>\n);\n\nexport const SchemaPropertyItem = ({\n name,\n schema,\n group,\n defaultOpen = false,\n showCollapseButton = true,\n}: {\n name: string;\n schema: SchemaObject;\n group: \"required\" | \"optional\" | \"deprecated\";\n defaultOpen?: boolean;\n showCollapseButton?: boolean;\n}) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n if (isCircularRef(schema)) {\n return (\n <Item>\n <ItemContent className=\"gap-y-2\">\n <div>\n <ItemTitle className=\"inline me-2\">\n <code>{name}</code>\n </ItemTitle>\n <ParamInfos\n className=\"inline\"\n schema={schema}\n extraItems={[\n group !== \"optional\" && (\n <span className=\"text-primary\">required</span>\n ),\n <RecursiveIndicator key=\"circular-ref\" />,\n ]}\n />\n </div>\n <SchemaExampleAndDefault schema={schema} />\n </ItemContent>\n </Item>\n );\n }\n\n const isCollapsible = Boolean(\n (schema.allOf ||\n schema.anyOf ||\n schema.oneOf ||\n isComplexType(schema) ||\n (isArrayType(schema) &&\n \"items\" in schema &&\n isComplexType(schema.items)) ||\n schema.additionalProperties) &&\n !isArrayCircularRef(schema),\n );\n\n const shouldRenderDescription = Boolean(\n schema.description ||\n (\"items\" in schema && schema.items?.enum) ||\n schema.const ||\n schema.enum ||\n schema.example !== undefined ||\n schema.default !== undefined,\n );\n\n return (\n <Item>\n <ItemContent className=\"gap-y-2\">\n <div>\n <ItemTitle className=\"inline me-2\">\n {isCollapsible ? (\n <button\n onClick={() => setIsOpen(!isOpen)}\n type=\"button\"\n className=\"hover:underline\"\n >\n <code>{name}</code>\n </button>\n ) : (\n <code>{name}</code>\n )}\n </ItemTitle>\n <ParamInfos\n className=\"inline\"\n schema={schema}\n extraItems={[\n group !== \"optional\" && (\n <span className=\"text-primary\">required</span>\n ),\n isArrayCircularRef(schema) && (\n <RecursiveIndicator\n circularProp={extractCircularRefInfo(schema.items)}\n />\n ),\n ]}\n />\n </div>\n {shouldRenderDescription && (\n <div className=\"flex flex-col gap-1.5\">\n {schema.description && (\n <Markdown className=\"prose-sm\" content={schema.description} />\n )}\n {\"items\" in schema && schema.items?.enum && (\n <EnumValues values={schema.items.enum} />\n )}\n {schema.const && <ConstValue schema={schema} hideDescription />}\n {schema.enum && <EnumValues values={schema.enum} />}\n <SchemaExampleAndDefault schema={schema} />\n </div>\n )}\n </ItemContent>\n\n {isCollapsible && showCollapseButton && (\n <ItemActions className=\"self-start\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"rounded-full\"\n onClick={() => setIsOpen(!isOpen)}\n aria-label=\"Toggle properties\"\n >\n {isOpen ? <MinusIcon size={16} /> : <PlusIcon size={16} />}\n </Button>\n </ItemActions>\n )}\n\n {isCollapsible && (\n <Collapsible.Root\n defaultOpen={defaultOpen}\n open={isOpen}\n onOpenChange={setIsOpen}\n className={cn(\"w-full\", !isOpen && \"contents\")}\n >\n <Collapsible.Content asChild>\n <ItemContent>\n {schema.anyOf || schema.oneOf || schema.type === \"object\" ? (\n <SchemaView schema={schema} />\n ) : isArrayType(schema) && \"items\" in schema ? (\n <SchemaView schema={schema.items} />\n ) : null}\n </ItemContent>\n </Collapsible.Content>\n </Collapsible.Root>\n )}\n </Item>\n );\n};\n","import type { SchemaObject } from \"../../../oas/parser/index.js\";\n\nexport type FieldSignature = {\n type?: SchemaObject[\"type\"];\n const?: unknown;\n enum?: unknown[];\n format?: string;\n pattern?: string;\n minimum?: number;\n maximum?: number;\n exclusiveMinimum?: boolean | number;\n exclusiveMaximum?: boolean | number;\n minLength?: number;\n maxLength?: number;\n minItems?: number;\n maxItems?: number;\n itemsType?: string | string[];\n additionalProps?: \"true\" | \"false\" | \"schema\";\n};\n\nexport type FieldDoc = {\n name: string;\n humanType: string;\n description?: string;\n requiredInAll: boolean;\n};\n\nexport const unionVariants = (schema: SchemaObject): SchemaObject[] => {\n const variants = (schema.oneOf ?? schema.anyOf ?? []) as SchemaObject[];\n\n // If parent schema has properties that variants don't, merge them\n // This handles the pattern where anyOf/oneOf is used just for required field combinations\n if (schema.properties && Object.keys(schema.properties).length > 0) {\n return variants.map((variant) => {\n // If variant doesn't define its own properties or type, inherit from parent\n const shouldInherit =\n !variant.properties &&\n !variant.type &&\n !variant.oneOf &&\n !variant.anyOf;\n\n if (shouldInherit) {\n return {\n ...variant,\n type: \"object\" as const,\n properties: schema.properties,\n required: variant.required ?? schema.required,\n };\n }\n\n return variant;\n });\n }\n\n return variants;\n};\n\nexport const decideExclusivity = (\n schema: SchemaObject,\n): \"exactly-one\" | \"at-least-one\" => {\n if (Array.isArray(schema.oneOf)) return \"exactly-one\";\n\n const discriminator = schema.discriminator?.propertyName;\n if (!discriminator) return \"at-least-one\";\n\n const variants = unionVariants(schema);\n const seen = new Set<string>();\n\n for (const variant of variants) {\n const prop = variant.properties?.[discriminator];\n\n const value =\n prop?.const ??\n (Array.isArray(prop?.enum) && prop.enum.length === 1\n ? String(prop.enum[0])\n : undefined);\n\n if (value == null || seen.has(String(value))) return \"at-least-one\";\n seen.add(String(value));\n }\n\n return \"exactly-one\";\n};\n\nexport const labelForVariant = (index: number, variant: SchemaObject) =>\n variant.title?.trim() || `Variant ${index + 1}`;\n\nexport const quickGuards = (variant: SchemaObject, root?: SchemaObject) => {\n const guards: string[] = [];\n\n if (variant.type) {\n guards.push(\n `type = ${Array.isArray(variant.type) ? variant.type.join(\"|\") : variant.type}`,\n );\n }\n\n const discriminator = root?.discriminator?.propertyName;\n if (discriminator) {\n const discriminatorProp = variant.properties?.[discriminator] as\n | SchemaObject\n | undefined;\n\n const discriminatorValue =\n discriminatorProp?.const ??\n (Array.isArray(discriminatorProp?.enum) &&\n discriminatorProp.enum.length === 1\n ? discriminatorProp.enum[0]\n : undefined);\n\n if (discriminatorValue !== undefined) {\n guards.push(`${discriminator}=${JSON.stringify(discriminatorValue)}`);\n }\n }\n\n const required = (variant.required ?? []).filter((k) => k !== discriminator);\n if (required.length) {\n const head = required.slice(0, 3).join(\", \");\n const more = required.length > 3 ? ` +${required.length - 3} more` : \"\";\n guards.push(`requires: ${head}${more}`);\n }\n\n return guards;\n};\n","import { useState } from \"react\";\nimport type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { Badge } from \"../../../ui/Badge.js\";\nimport { Frame, FramePanel } from \"../../../ui/Frame.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { SchemaView } from \"./SchemaView.js\";\nimport {\n decideExclusivity,\n labelForVariant,\n quickGuards,\n unionVariants,\n} from \"./union-helpers.js\";\n\nconst DecisionTable = ({\n variants,\n schema,\n selectedVariant,\n onSelectVariant,\n}: {\n variants: SchemaObject[];\n schema: SchemaObject;\n selectedVariant: string;\n onSelectVariant: (label: string) => void;\n}) => {\n const rows = variants.map((v, i) => ({\n label: labelForVariant(i, v),\n guards: quickGuards(v, schema),\n }));\n\n return (\n <div className=\"flex flex-col gap-2 text-sm\">\n <h4 className=\"font-medium\">Decision Table</h4>\n <div className=\"border rounded-md overflow-hidden\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b bg-muted/50\">\n <th className=\"text-left p-2 font-medium\">Variant</th>\n <th className=\"text-left p-2 font-medium\">Matching Criteria</th>\n </tr>\n </thead>\n <tbody className=\"divide-y\">\n {rows.map((row) => (\n <tr key={row.label} className=\"hover:bg-muted/30\">\n <td className=\"p-2 font-medium\">\n <button\n type=\"button\"\n className={cn(\n \"hover:underline\",\n selectedVariant === row.label && \"text-primary\",\n )}\n onClick={() => onSelectVariant(row.label)}\n >\n {row.label}\n </button>\n </td>\n <td className=\"p-2 text-muted-foreground text-xs\">\n {row.guards.length > 0\n ? row.guards.join(\" · \")\n : \"No specific criteria\"}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n\nexport const UnionView = ({\n schema,\n cardHeader,\n}: {\n schema: SchemaObject;\n cardHeader?: React.ReactNode;\n}) => {\n const mode = Array.isArray(schema.oneOf)\n ? \"oneOf\"\n : Array.isArray(schema.anyOf)\n ? \"anyOf\"\n : undefined;\n\n const variants = mode ? unionVariants(schema) : [];\n const [selectedVariant, setSelectedVariant] = useState(() =>\n variants[0] ? labelForVariant(0, variants[0]) : \"\",\n );\n\n if (!mode) return null;\n\n const exclusivity = decideExclusivity(schema);\n\n const semanticsMessage =\n exclusivity === \"exactly-one\" ? (\n <>\n Exactly one variant <b>must match</b>.\n </>\n ) : (\n <>\n At least one variant <b>must match</b>. Multiple variants{\" \"}\n <i>may match</i> simultaneously.\n </>\n );\n\n const currentVariantIndex = variants.findIndex(\n (v, i) => labelForVariant(i, v) === selectedVariant,\n );\n const currentVariant =\n currentVariantIndex >= 0 ? variants[currentVariantIndex] : null;\n\n return (\n <Frame>\n {cardHeader}\n <FramePanel className=\"text-sm flex flex-col gap-4\">\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"outline\">{mode}</Badge>\n <div className=\"flex-1 p-2\">\n <span className=\"text-sm\">{semanticsMessage}</span>\n </div>\n </div>\n\n <DecisionTable\n variants={variants}\n schema={schema}\n selectedVariant={selectedVariant}\n onSelectVariant={setSelectedVariant}\n />\n <strong>Properties for {selectedVariant}:</strong>\n {currentVariant && <SchemaView schema={currentVariant} />}\n </FramePanel>\n </Frame>\n );\n};\n","import { InfoIcon } from \"lucide-react\";\nimport { Fragment } from \"react\";\nimport {\n Frame,\n FrameDescription,\n FrameFooter,\n FrameHeader,\n FramePanel,\n} from \"zudoku/ui/Frame.js\";\nimport { ItemGroup, ItemSeparator } from \"zudoku/ui/Item.js\";\nimport { Markdown } from \"../../../components/Markdown.js\";\nimport type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { groupBy } from \"../../../util/groupBy.js\";\nimport { ConstValue } from \"../components/ConstValue.js\";\nimport { EnumValues } from \"../components/EnumValues.js\";\nimport { ParamInfos } from \"../ParamInfos.js\";\nimport { SchemaExampleAndDefault } from \"./SchemaExampleAndDefault.js\";\nimport { SchemaPropertyItem } from \"./SchemaPropertyItem.js\";\nimport { UnionView } from \"./UnionView.js\";\nimport { isArrayType, isBasicType } from \"./utils.js\";\n\nconst renderMarkdown = (content?: string) =>\n content && (\n <Markdown\n className=\"text-sm leading-normal line-clamp-4\"\n content={content}\n />\n );\n\nconst renderBasicSchema = (\n schema: SchemaObject,\n cardHeader?: React.ReactNode,\n embedded?: boolean,\n) => {\n const content = (\n <>\n <span className=\"text-sm text-muted-foreground\">\n <ParamInfos schema={schema} />\n </span>\n {schema.enum && <EnumValues values={schema.enum} />}\n {renderMarkdown(schema.description)}\n <SchemaExampleAndDefault schema={schema} />\n </>\n );\n\n if (embedded) {\n return <div className=\"space-y-2 p-4\">{content}</div>;\n }\n\n return (\n <Frame>\n {cardHeader}\n <FramePanel className=\"space-y-2\">{content}</FramePanel>\n </Frame>\n );\n};\n\nexport const SchemaView = ({\n schema,\n defaultOpen = false,\n cardHeader,\n embedded,\n}: {\n schema?: SchemaObject | null;\n defaultOpen?: boolean;\n cardHeader?: React.ReactNode;\n embedded?: boolean;\n}) => {\n if (!schema || Object.keys(schema).length === 0) {\n return (\n <Frame>\n {cardHeader}\n <FramePanel>\n <div className=\"text-sm text-muted-foreground italic\">\n No data returned\n </div>\n </FramePanel>\n </Frame>\n );\n }\n\n if (schema.const) {\n return <ConstValue schema={schema} />;\n }\n\n if (Array.isArray(schema.oneOf) || Array.isArray(schema.anyOf)) {\n return <UnionView schema={schema} cardHeader={cardHeader} />;\n }\n\n if (isBasicType(schema.type)) {\n return renderBasicSchema(schema, cardHeader, embedded);\n }\n\n if (isArrayType(schema) && typeof schema.items === \"object\") {\n const wrappedSchema: SchemaObject = {\n type: \"object\",\n properties: { \"\": schema },\n };\n\n return (\n <SchemaView schema={wrappedSchema} cardHeader={cardHeader} defaultOpen />\n );\n }\n\n const additionalObjectProperties = typeof schema.additionalProperties ===\n \"object\" && <SchemaView schema={schema.additionalProperties} embedded />;\n\n if (schema.type === \"object\") {\n const groupedProperties = groupBy(\n Object.entries(schema.properties ?? {}),\n ([propertyName, property]) => {\n return property.deprecated\n ? \"deprecated\"\n : schema.required?.includes(propertyName)\n ? \"required\"\n : \"optional\";\n },\n );\n\n const groupNames = [\"required\", \"optional\", \"deprecated\"] as const;\n const groups = groupNames.flatMap((group) => {\n const properties = groupedProperties[group];\n return properties ? { group, properties } : [];\n });\n\n const itemsList = groups.map(({ group, properties }, index) => (\n <Fragment key={group}>\n {index > 0 && <ItemSeparator />}\n <ItemGroup className=\"overflow-clip\">\n {properties.map(([name, schema], index) => (\n <Fragment key={name}>\n {index > 0 && <ItemSeparator />}\n <SchemaPropertyItem\n name={name}\n schema={schema}\n group={group}\n defaultOpen={defaultOpen}\n />\n </Fragment>\n ))}\n </ItemGroup>\n </Fragment>\n ));\n\n if (embedded) {\n return itemsList;\n }\n\n return (\n <Frame>\n {cardHeader}\n {schema.description && (\n <FrameHeader>\n <FrameDescription>{schema.description}</FrameDescription>\n </FrameHeader>\n )}\n <FramePanel className=\"p-0!\">\n {itemsList}\n {additionalObjectProperties}\n </FramePanel>\n {schema.additionalProperties === true && (\n <FrameFooter>\n <a\n className=\"text-sm flex items-center gap-1 hover:underline\"\n href=\"https://swagger.io/docs/specification/v3_0/data-models/dictionaries/\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n Additional properties are allowed\n <InfoIcon size={14} />\n </a>\n </FrameFooter>\n )}\n </Frame>\n );\n }\n};\n"],"names":["PagefindSearchMeta","name","children","groupBy","arr","keySelector","accumulator","val","groupedKey","Frame","className","props","jsx","cn","FramePanel","FrameHeader","FrameDescription","FrameFooter","ItemGroup","ItemSeparator","Separator","itemVariants","cva","Item","variant","size","asChild","Comp","Slot","ItemContent","ItemTitle","ItemActions","ConstValue","schema","hideDescription","SelectOnClick","EnumValues","values","maxVisibleValues","isOpen","setIsOpen","useState","shouldCollapse","visibleValues","value","Button","jsxs","ChevronUpIcon","ChevronDownIcon","Pattern","pattern","isExpanded","setIsExpanded","isExpandable","shortPattern","InlineCode","ChevronsLeftRightIcon","getSchemaInfos","Fragment","ParamInfos","extraItems","filteredItems","item","isValidElement","index","SchemaExampleAndDefault","example","defaultValue","isBasicType","type","isArrayType","isComplexType","isCircularRef","CIRCULAR_REF","isArrayCircularRef","extractCircularRefInfo","ref","RecursiveIndicator","circularProp","RefreshCcwDotIcon","SchemaPropertyItem","group","defaultOpen","showCollapseButton","isCollapsible","shouldRenderDescription","Markdown","MinusIcon","PlusIcon","Collapsible","SchemaView","unionVariants","variants","decideExclusivity","discriminator","seen","prop","labelForVariant","quickGuards","root","guards","discriminatorProp","discriminatorValue","required","k","head","more","DecisionTable","selectedVariant","onSelectVariant","rows","v","i","row","UnionView","cardHeader","mode","setSelectedVariant","semanticsMessage","currentVariantIndex","currentVariant","Badge","renderMarkdown","content","renderBasicSchema","embedded","wrappedSchema","additionalObjectProperties","groupedProperties","propertyName","property","itemsList","properties","InfoIcon"],"mappings":"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"}
@@ -0,0 +1,243 @@
1
+ import { j as e } from "./jsx-runtime-BzflLqGi.js";
2
+ import { EyeOffIcon as z, EyeIcon as w, CheckIcon as u, CopyIcon as S, ChevronDownIcon as m, ChevronUpIcon as N } from "lucide-react";
3
+ import { useState as I } from "react";
4
+ import { c as r } from "./cn-dYga0KKN.js";
5
+ import { u as k } from "./useCopyToClipboard-B_085nfO.js";
6
+ import { Button as c } from "./ui/Button.js";
7
+ import * as o from "@radix-ui/react-select";
8
+ import { cn as l } from "./ui/util.js";
9
+ const _ = ({
10
+ secret: t,
11
+ revealed: a = !1,
12
+ previewChars: s = 5,
13
+ className: n
14
+ }) => /* @__PURE__ */ e.jsxs("span", { className: r("w-full truncate", n), children: [
15
+ /* @__PURE__ */ e.jsx(
16
+ "div",
17
+ {
18
+ className: r(
19
+ "w-40 inline-block md:w-fit",
20
+ a ? "" : "opacity-50"
21
+ ),
22
+ children: a ? t.slice(0, s === 0 ? t.length : -s) : "•••• ".repeat(
23
+ t.slice(
24
+ 0,
25
+ s === 0 ? t.length : -s
26
+ ).length / 5
27
+ ) + "•".repeat(
28
+ t.slice(
29
+ 0,
30
+ s === 0 ? t.length : -s
31
+ ).length % 5
32
+ )
33
+ }
34
+ ),
35
+ s > 0 && /* @__PURE__ */ e.jsx("span", { children: t.slice(-s) })
36
+ ] }), P = ({
37
+ secret: t,
38
+ preview: a = 5,
39
+ className: s,
40
+ status: n,
41
+ onCopy: i,
42
+ revealed: p,
43
+ onReveal: x,
44
+ noReveal: f
45
+ }) => {
46
+ const g = Math.abs(a), [h, v] = I(!1), [j, b] = k(), d = p ?? h;
47
+ return /* @__PURE__ */ e.jsxs(
48
+ "div",
49
+ {
50
+ className: r(
51
+ "flex gap-2 items-center text-sm border rounded-md px-1",
52
+ s
53
+ ),
54
+ children: [
55
+ /* @__PURE__ */ e.jsxs("div", { className: "font-mono w-full h-9 items-center flex px-2 text-xs gap-2", children: [
56
+ n && /* @__PURE__ */ e.jsx(
57
+ "div",
58
+ {
59
+ className: r(
60
+ "rounded-full shrink-0 w-2 h-2 mr-2",
61
+ n === "active" && "bg-emerald-400",
62
+ n === "expired" && "bg-neutral-200",
63
+ n === "expiring" && "bg-yellow-400",
64
+ n === "revoked" && "bg-red-400",
65
+ n === "none" && "opacity-0"
66
+ )
67
+ }
68
+ ),
69
+ /* @__PURE__ */ e.jsx(
70
+ _,
71
+ {
72
+ secret: t,
73
+ revealed: d,
74
+ previewChars: g
75
+ }
76
+ )
77
+ ] }),
78
+ f !== !0 && /* @__PURE__ */ e.jsx(
79
+ c,
80
+ {
81
+ variant: "ghost",
82
+ onClick: () => {
83
+ v((y) => !y), x?.(!d);
84
+ },
85
+ size: "icon",
86
+ children: d ? /* @__PURE__ */ e.jsx(z, { size: 16 }) : /* @__PURE__ */ e.jsx(w, { size: 16 })
87
+ }
88
+ ),
89
+ /* @__PURE__ */ e.jsx(
90
+ c,
91
+ {
92
+ variant: "ghost",
93
+ onClick: () => {
94
+ b(t), i?.(t);
95
+ },
96
+ size: "icon",
97
+ children: j ? /* @__PURE__ */ e.jsx(u, { size: 16 }) : /* @__PURE__ */ e.jsx(S, { size: 16 })
98
+ }
99
+ )
100
+ ]
101
+ }
102
+ );
103
+ };
104
+ function M({
105
+ ...t
106
+ }) {
107
+ return /* @__PURE__ */ e.jsx(o.Root, { "data-slot": "select", ...t });
108
+ }
109
+ function O({
110
+ ...t
111
+ }) {
112
+ return /* @__PURE__ */ e.jsx(o.Group, { "data-slot": "select-group", ...t });
113
+ }
114
+ function $({
115
+ ...t
116
+ }) {
117
+ return /* @__PURE__ */ e.jsx(o.Value, { "data-slot": "select-value", ...t });
118
+ }
119
+ function q({
120
+ className: t,
121
+ size: a = "default",
122
+ children: s,
123
+ ...n
124
+ }) {
125
+ return /* @__PURE__ */ e.jsxs(
126
+ o.Trigger,
127
+ {
128
+ "data-slot": "select-trigger",
129
+ "data-size": a,
130
+ className: l(
131
+ "border-input data-placeholder:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
132
+ t
133
+ ),
134
+ ...n,
135
+ children: [
136
+ s,
137
+ /* @__PURE__ */ e.jsx(o.Icon, { asChild: !0, children: /* @__PURE__ */ e.jsx(m, { className: "size-4 opacity-50" }) })
138
+ ]
139
+ }
140
+ );
141
+ }
142
+ function A({
143
+ className: t,
144
+ children: a,
145
+ position: s = "popper",
146
+ align: n = "center",
147
+ ...i
148
+ }) {
149
+ return /* @__PURE__ */ e.jsx(o.Portal, { children: /* @__PURE__ */ e.jsxs(
150
+ o.Content,
151
+ {
152
+ "data-slot": "select-content",
153
+ className: l(
154
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-32 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",
155
+ s === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
156
+ t
157
+ ),
158
+ position: s,
159
+ align: n,
160
+ ...i,
161
+ children: [
162
+ /* @__PURE__ */ e.jsx(C, {}),
163
+ /* @__PURE__ */ e.jsx(
164
+ o.Viewport,
165
+ {
166
+ className: l(
167
+ "p-1",
168
+ s === "popper" && "h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1"
169
+ ),
170
+ children: a
171
+ }
172
+ ),
173
+ /* @__PURE__ */ e.jsx(T, {})
174
+ ]
175
+ }
176
+ ) });
177
+ }
178
+ function F({
179
+ className: t,
180
+ children: a,
181
+ ...s
182
+ }) {
183
+ return /* @__PURE__ */ e.jsxs(
184
+ o.Item,
185
+ {
186
+ "data-slot": "select-item",
187
+ className: l(
188
+ "focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
189
+ t
190
+ ),
191
+ ...s,
192
+ children: [
193
+ /* @__PURE__ */ e.jsx("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ e.jsx(o.ItemIndicator, { children: /* @__PURE__ */ e.jsx(u, { className: "size-4" }) }) }),
194
+ /* @__PURE__ */ e.jsx(o.ItemText, { children: a })
195
+ ]
196
+ }
197
+ );
198
+ }
199
+ function C({
200
+ className: t,
201
+ ...a
202
+ }) {
203
+ return /* @__PURE__ */ e.jsx(
204
+ o.ScrollUpButton,
205
+ {
206
+ "data-slot": "select-scroll-up-button",
207
+ className: l(
208
+ "flex cursor-default items-center justify-center py-1",
209
+ t
210
+ ),
211
+ ...a,
212
+ children: /* @__PURE__ */ e.jsx(N, { className: "size-4" })
213
+ }
214
+ );
215
+ }
216
+ function T({
217
+ className: t,
218
+ ...a
219
+ }) {
220
+ return /* @__PURE__ */ e.jsx(
221
+ o.ScrollDownButton,
222
+ {
223
+ "data-slot": "select-scroll-down-button",
224
+ className: l(
225
+ "flex cursor-default items-center justify-center py-1",
226
+ t
227
+ ),
228
+ ...a,
229
+ children: /* @__PURE__ */ e.jsx(m, { className: "size-4" })
230
+ }
231
+ );
232
+ }
233
+ export {
234
+ M as S,
235
+ q as a,
236
+ $ as b,
237
+ A as c,
238
+ O as d,
239
+ F as e,
240
+ P as f,
241
+ _ as g
242
+ };
243
+ //# sourceMappingURL=Select-CkxXP5I7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select-CkxXP5I7.js","sources":["../src/lib/ui/Secret.tsx","../src/lib/ui/Select.tsx"],"sourcesContent":["import { CheckIcon, CopyIcon, EyeIcon, EyeOffIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { cn } from \"../util/cn.js\";\nimport { useCopyToClipboard } from \"../util/useCopyToClipboard.js\";\nimport { Button } from \"./Button.js\";\n\ntype Status = \"active\" | \"expired\" | \"expiring\" | \"revoked\" | \"none\";\n\nexport const SecretText = ({\n secret,\n revealed = false,\n previewChars = 5,\n className,\n}: {\n secret: string;\n revealed?: boolean;\n previewChars?: number;\n className?: string;\n}) => {\n return (\n <span className={cn(\"w-full truncate\", className)}>\n <div\n className={cn(\n \"w-40 inline-block md:w-fit\",\n revealed ? \"\" : \"opacity-50\",\n )}\n >\n {revealed\n ? secret.slice(0, previewChars === 0 ? secret.length : -previewChars)\n : \"•••• \".repeat(\n secret.slice(\n 0,\n previewChars === 0 ? secret.length : -previewChars,\n ).length / 5,\n ) +\n \"•\".repeat(\n secret.slice(\n 0,\n previewChars === 0 ? secret.length : -previewChars,\n ).length % 5,\n )}\n </div>\n {previewChars > 0 && <span>{secret.slice(-previewChars)}</span>}\n </span>\n );\n};\n\nexport const Secret = ({\n secret,\n preview = 5,\n className,\n status,\n onCopy,\n revealed: controlledRevealed,\n onReveal,\n noReveal: disabledReveal,\n}: {\n revealed?: boolean;\n noReveal?: boolean;\n secret: string;\n status?: Status;\n className?: string;\n preview?: number;\n onCopy?: (secret: string) => void;\n onReveal?: (revealed: boolean) => void;\n}) => {\n const previewChars = Math.abs(preview);\n const [isRevealed, setRevealed] = useState(false);\n const [isCopied, copyToClipboard] = useCopyToClipboard();\n\n const revealed = controlledRevealed ?? isRevealed;\n\n return (\n <div\n className={cn(\n \"flex gap-2 items-center text-sm border rounded-md px-1\",\n className,\n )}\n >\n <div className=\"font-mono w-full h-9 items-center flex px-2 text-xs gap-2\">\n {status && (\n <div\n className={cn(\n \"rounded-full shrink-0 w-2 h-2 mr-2\",\n status === \"active\" && \"bg-emerald-400\",\n status === \"expired\" && \"bg-neutral-200\",\n status === \"expiring\" && \"bg-yellow-400\",\n status === \"revoked\" && \"bg-red-400\",\n status === \"none\" && \"opacity-0\",\n )}\n />\n )}\n <SecretText\n secret={secret}\n revealed={revealed}\n previewChars={previewChars}\n />\n </div>\n {disabledReveal !== true && (\n <Button\n variant=\"ghost\"\n onClick={() => {\n setRevealed((prev) => !prev);\n onReveal?.(!revealed);\n }}\n size=\"icon\"\n >\n {revealed ? <EyeOffIcon size={16} /> : <EyeIcon size={16} />}\n </Button>\n )}\n <Button\n variant=\"ghost\"\n onClick={() => {\n copyToClipboard(secret);\n onCopy?.(secret);\n }}\n size=\"icon\"\n >\n {isCopied ? <CheckIcon size={16} /> : <CopyIcon size={16} />}\n </Button>\n </div>\n );\n};\n","import * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\nimport type * as React from \"react\";\nimport { cn } from \"./util.js\";\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\";\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-placeholder:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n align = \"center\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-32 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n"],"names":["SecretText","secret","revealed","previewChars","className","cn","jsx","Secret","preview","status","onCopy","controlledRevealed","onReveal","disabledReveal","isRevealed","setRevealed","useState","isCopied","copyToClipboard","useCopyToClipboard","jsxs","Button","prev","EyeOffIcon","EyeIcon","CheckIcon","CopyIcon","Select","props","SelectPrimitive","SelectGroup","SelectValue","SelectTrigger","size","children","ChevronDownIcon","SelectContent","position","align","SelectScrollUpButton","SelectScrollDownButton","SelectItem","ChevronUpIcon"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { j as i } from "./jsx-runtime-BzflLqGi.js";
2
+ import * as n from "@radix-ui/react-separator";
3
+ import { c as e } from "./cn-dYga0KKN.js";
4
+ function p({
5
+ className: t,
6
+ orientation: a = "horizontal",
7
+ decorative: o = !0,
8
+ ...r
9
+ }) {
10
+ return /* @__PURE__ */ i.jsx(
11
+ n.Root,
12
+ {
13
+ "data-slot": "separator",
14
+ decorative: o,
15
+ orientation: a,
16
+ className: e(
17
+ "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
18
+ t
19
+ ),
20
+ ...r
21
+ }
22
+ );
23
+ }
24
+ export {
25
+ p as S
26
+ };
27
+ //# sourceMappingURL=Separator-CTPSeW1S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Separator-CTPSeW1S.js","sources":["../src/lib/ui/Separator.tsx"],"sourcesContent":["import * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport type * as React from \"react\";\nimport { cn } from \"../util/cn.js\";\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n"],"names":["Separator","className","orientation","decorative","props","jsx","SeparatorPrimitive","cn"],"mappings":";;;AAIA,SAASA,EAAU;AAAA,EACjB,WAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,YAAAC,IAAa;AAAA,EACb,GAAGC;AACL,GAAyD;AACvD,SACEC,gBAAAA,EAAAA;AAAAA,IAACC,EAAmB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,YAAAH;AAAA,MACA,aAAAD;AAAA,MACA,WAAWK;AAAA,QACT;AAAA,QACAN;AAAA,MAAA;AAAA,MAED,GAAGG;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -1,19 +1,19 @@
1
1
  import { j as e } from "./jsx-runtime-BzflLqGi.js";
2
2
  import { useEffect as t } from "react";
3
- import { a as m } from "./chunk-PVWAREVJ-BMhpCH5D.js";
4
- import { S as x, B as o, L as h } from "./index-CPws05Tb.js";
5
- import { C as a, a as c, b as l, c as d, d as u } from "./Card-KFniaZn5.js";
6
- import { u as i } from "./hook-CMeoxziF.js";
3
+ import { b as m } from "./chunk-PVWAREVJ-dLIqswPy.js";
4
+ import { S as x, B as o, L as h } from "./index-CCmMJp02.js";
5
+ import { C as c, a, b as l, c as d, d as u } from "./Card-KFniaZn5.js";
6
+ import { u as i } from "./hook-BNxidGQq.js";
7
7
  import { u as p } from "./useLatest-hmRS46UF.js";
8
- const y = () => {
8
+ const b = () => {
9
9
  const s = i(), [r] = m(), n = r.get("redirect") ?? void 0;
10
10
  return t(() => {
11
11
  s.login({
12
12
  redirectTo: n,
13
13
  replace: !0
14
14
  });
15
- }, [s, n]), /* @__PURE__ */ e.jsx("div", { className: "flex items-center justify-center mt-8", children: /* @__PURE__ */ e.jsxs(a, { className: "max-w-md w-full", children: [
16
- /* @__PURE__ */ e.jsxs(c, { children: [
15
+ }, [s, n]), /* @__PURE__ */ e.jsx("div", { className: "flex items-center justify-center mt-8", children: /* @__PURE__ */ e.jsxs(c, { className: "max-w-md w-full", children: [
16
+ /* @__PURE__ */ e.jsxs(a, { children: [
17
17
  /* @__PURE__ */ e.jsx(l, { className: "text-lg", children: "Sign in" }),
18
18
  /* @__PURE__ */ e.jsx(d, { children: "You're being redirected to our secure login provider to complete your sign-in process." })
19
19
  ] }),
@@ -22,7 +22,7 @@ const y = () => {
22
22
  " Redirecting..."
23
23
  ] }) })
24
24
  ] }) });
25
- }, b = () => {
25
+ }, y = () => {
26
26
  const s = i(), r = p(s.logout);
27
27
  return t(() => {
28
28
  r.current();
@@ -31,8 +31,8 @@ const y = () => {
31
31
  const s = i();
32
32
  return t(() => {
33
33
  s.signup();
34
- }, [s]), /* @__PURE__ */ e.jsx("div", { className: "flex items-center justify-center mt-8", children: /* @__PURE__ */ e.jsxs(a, { className: "max-w-md w-full", children: [
35
- /* @__PURE__ */ e.jsxs(c, { children: [
34
+ }, [s]), /* @__PURE__ */ e.jsx("div", { className: "flex items-center justify-center mt-8", children: /* @__PURE__ */ e.jsxs(c, { className: "max-w-md w-full", children: [
35
+ /* @__PURE__ */ e.jsxs(a, { children: [
36
36
  /* @__PURE__ */ e.jsx(l, { className: "text-lg", children: "Sign up" }),
37
37
  /* @__PURE__ */ e.jsx(d, { children: "You're being redirected to our secure login provider to complete your sign up process." })
38
38
  ] }),
@@ -43,8 +43,8 @@ const y = () => {
43
43
  ] }) });
44
44
  };
45
45
  export {
46
- b as S,
47
- y as a,
46
+ y as S,
47
+ b as a,
48
48
  w as b
49
49
  };
50
- //# sourceMappingURL=SignUp-D2mmQOkg.js.map
50
+ //# sourceMappingURL=SignUp-BjS4ozA7.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SignUp-D2mmQOkg.js","sources":["../src/lib/authentication/components/SignIn.tsx","../src/lib/authentication/components/SignOut.tsx","../src/lib/authentication/components/SignUp.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { useSearchParams } from \"react-router\";\nimport { Spinner } from \"zudoku/components\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"zudoku/ui/Card.js\";\nimport { useAuth } from \"../hook.js\";\n\nexport const SignIn = () => {\n const auth = useAuth();\n const [search] = useSearchParams();\n const redirectTo = search.get(\"redirect\") ?? undefined;\n\n useEffect(() => {\n void auth.login({\n redirectTo,\n replace: true,\n });\n }, [auth, redirectTo]);\n\n return (\n <div className=\"flex items-center justify-center mt-8\">\n <Card className=\"max-w-md w-full\">\n <CardHeader>\n <CardTitle className=\"text-lg\">Sign in</CardTitle>\n <CardDescription>\n You're being redirected to our secure login provider to complete\n your sign-in process.\n </CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-center text-sm font-medium gap-2\">\n <Spinner /> Redirecting...\n </div>\n </CardContent>\n </Card>\n </div>\n );\n};\n","import { useEffect } from \"react\";\nimport { useLatest } from \"../../util/useLatest.js\";\nimport { useAuth } from \"../hook.js\";\n\nexport const SignOut = () => {\n const auth = useAuth();\n\n const logout = useLatest(auth.logout);\n\n useEffect(() => {\n void logout.current();\n }, [logout]);\n\n return null;\n};\n","import { useEffect } from \"react\";\nimport { Button, Link } from \"zudoku/components\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"zudoku/ui/Card.js\";\nimport { useAuth } from \"../hook.js\";\n\nexport const SignUp = () => {\n const auth = useAuth();\n\n useEffect(() => {\n void auth.signup();\n }, [auth]);\n\n return (\n <div className=\"flex items-center justify-center mt-8\">\n <Card className=\"max-w-md w-full\">\n <CardHeader>\n <CardTitle className=\"text-lg\">Sign up</CardTitle>\n <CardDescription>\n You're being redirected to our secure login provider to complete\n your sign up process.\n </CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex flex-col gap-2 justify-center\">\n <Button onClick={() => auth.signup()} variant=\"default\">\n Register\n </Button>\n <Button variant=\"link\" className=\"text-muted-foreground\" asChild>\n <Link to=\"/\">Go home</Link>\n </Button>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n};\n"],"names":["SignIn","auth","useAuth","search","useSearchParams","redirectTo","useEffect","jsxs","Card","CardHeader","jsx","CardTitle","CardDescription","CardContent","Spinner","SignOut","logout","useLatest","SignUp","Button","Link"],"mappings":";;;;;;;AAYO,MAAMA,IAAS,MAAM;AAC1B,QAAMC,IAAOC,EAAA,GACP,CAACC,CAAM,IAAIC,EAAA,GACXC,IAAaF,EAAO,IAAI,UAAU,KAAK;AAE7C,SAAAG,EAAU,MAAM;AACd,IAAKL,EAAK,MAAM;AAAA,MACd,YAAAI;AAAA,MACA,SAAS;AAAA,IAAA,CACV;AAAA,EACH,GAAG,CAACJ,GAAMI,CAAU,CAAC,yBAGlB,OAAA,EAAI,WAAU,yCACb,UAAAE,gBAAAA,EAAAA,KAACC,GAAA,EAAK,WAAU,mBACd,UAAA;AAAA,IAAAD,gBAAAA,OAACE,GAAA,EACC,UAAA;AAAA,MAAAC,gBAAAA,EAAAA,IAACC,GAAA,EAAU,WAAU,WAAU,UAAA,WAAO;AAAA,MACtCD,gBAAAA,EAAAA,IAACE,KAAgB,UAAA,yFAAA,CAGjB;AAAA,IAAA,GACF;AAAA,IACAF,gBAAAA,MAACG,GAAA,EACC,UAAAN,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,+CACb,UAAA;AAAA,MAAAG,gBAAAA,EAAAA,IAACI,GAAA,EAAQ;AAAA,MAAE;AAAA,IAAA,EAAA,CACb,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ,GCtCaC,IAAU,MAAM;AAC3B,QAAMd,IAAOC,EAAA,GAEPc,IAASC,EAAUhB,EAAK,MAAM;AAEpC,SAAAK,EAAU,MAAM;AACd,IAAKU,EAAO,QAAA;AAAA,EACd,GAAG,CAACA,CAAM,CAAC,GAEJ;AACT,GCHaE,IAAS,MAAM;AAC1B,QAAMjB,IAAOC,EAAA;AAEb,SAAAI,EAAU,MAAM;AACd,IAAKL,EAAK,OAAA;AAAA,EACZ,GAAG,CAACA,CAAI,CAAC,yBAGN,OAAA,EAAI,WAAU,yCACb,UAAAM,gBAAAA,EAAAA,KAACC,GAAA,EAAK,WAAU,mBACd,UAAA;AAAA,IAAAD,gBAAAA,OAACE,GAAA,EACC,UAAA;AAAA,MAAAC,gBAAAA,EAAAA,IAACC,GAAA,EAAU,WAAU,WAAU,UAAA,WAAO;AAAA,MACtCD,gBAAAA,EAAAA,IAACE,KAAgB,UAAA,yFAAA,CAGjB;AAAA,IAAA,GACF;AAAA,IACAF,gBAAAA,MAACG,GAAA,EACC,UAAAN,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,sCACb,UAAA;AAAA,MAAAG,gBAAAA,EAAAA,IAACS,GAAA,EAAO,SAAS,MAAMlB,EAAK,UAAU,SAAQ,WAAU,UAAA,WAAA,CAExD;AAAA,MACAS,gBAAAA,EAAAA,IAACS,GAAA,EAAO,SAAQ,QAAO,WAAU,yBAAwB,SAAO,IAC9D,UAAAT,gBAAAA,EAAAA,IAACU,GAAA,EAAK,IAAG,KAAI,qBAAO,EAAA,CACtB;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;"}
1
+ {"version":3,"file":"SignUp-BjS4ozA7.js","sources":["../src/lib/authentication/components/SignIn.tsx","../src/lib/authentication/components/SignOut.tsx","../src/lib/authentication/components/SignUp.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { useSearchParams } from \"react-router\";\nimport { Spinner } from \"zudoku/components\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"zudoku/ui/Card.js\";\nimport { useAuth } from \"../hook.js\";\n\nexport const SignIn = () => {\n const auth = useAuth();\n const [search] = useSearchParams();\n const redirectTo = search.get(\"redirect\") ?? undefined;\n\n useEffect(() => {\n void auth.login({\n redirectTo,\n replace: true,\n });\n }, [auth, redirectTo]);\n\n return (\n <div className=\"flex items-center justify-center mt-8\">\n <Card className=\"max-w-md w-full\">\n <CardHeader>\n <CardTitle className=\"text-lg\">Sign in</CardTitle>\n <CardDescription>\n You're being redirected to our secure login provider to complete\n your sign-in process.\n </CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-center text-sm font-medium gap-2\">\n <Spinner /> Redirecting...\n </div>\n </CardContent>\n </Card>\n </div>\n );\n};\n","import { useEffect } from \"react\";\nimport { useLatest } from \"../../util/useLatest.js\";\nimport { useAuth } from \"../hook.js\";\n\nexport const SignOut = () => {\n const auth = useAuth();\n\n const logout = useLatest(auth.logout);\n\n useEffect(() => {\n void logout.current();\n }, [logout]);\n\n return null;\n};\n","import { useEffect } from \"react\";\nimport { Button, Link } from \"zudoku/components\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"zudoku/ui/Card.js\";\nimport { useAuth } from \"../hook.js\";\n\nexport const SignUp = () => {\n const auth = useAuth();\n\n useEffect(() => {\n void auth.signup();\n }, [auth]);\n\n return (\n <div className=\"flex items-center justify-center mt-8\">\n <Card className=\"max-w-md w-full\">\n <CardHeader>\n <CardTitle className=\"text-lg\">Sign up</CardTitle>\n <CardDescription>\n You're being redirected to our secure login provider to complete\n your sign up process.\n </CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex flex-col gap-2 justify-center\">\n <Button onClick={() => auth.signup()} variant=\"default\">\n Register\n </Button>\n <Button variant=\"link\" className=\"text-muted-foreground\" asChild>\n <Link to=\"/\">Go home</Link>\n </Button>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n};\n"],"names":["SignIn","auth","useAuth","search","useSearchParams","redirectTo","useEffect","jsxs","Card","CardHeader","jsx","CardTitle","CardDescription","CardContent","Spinner","SignOut","logout","useLatest","SignUp","Button","Link"],"mappings":";;;;;;;AAYO,MAAMA,IAAS,MAAM;AAC1B,QAAMC,IAAOC,EAAA,GACP,CAACC,CAAM,IAAIC,EAAA,GACXC,IAAaF,EAAO,IAAI,UAAU,KAAK;AAE7C,SAAAG,EAAU,MAAM;AACd,IAAKL,EAAK,MAAM;AAAA,MACd,YAAAI;AAAA,MACA,SAAS;AAAA,IAAA,CACV;AAAA,EACH,GAAG,CAACJ,GAAMI,CAAU,CAAC,yBAGlB,OAAA,EAAI,WAAU,yCACb,UAAAE,gBAAAA,EAAAA,KAACC,GAAA,EAAK,WAAU,mBACd,UAAA;AAAA,IAAAD,gBAAAA,OAACE,GAAA,EACC,UAAA;AAAA,MAAAC,gBAAAA,EAAAA,IAACC,GAAA,EAAU,WAAU,WAAU,UAAA,WAAO;AAAA,MACtCD,gBAAAA,EAAAA,IAACE,KAAgB,UAAA,yFAAA,CAGjB;AAAA,IAAA,GACF;AAAA,IACAF,gBAAAA,MAACG,GAAA,EACC,UAAAN,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,+CACb,UAAA;AAAA,MAAAG,gBAAAA,EAAAA,IAACI,GAAA,EAAQ;AAAA,MAAE;AAAA,IAAA,EAAA,CACb,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ,GCtCaC,IAAU,MAAM;AAC3B,QAAMd,IAAOC,EAAA,GAEPc,IAASC,EAAUhB,EAAK,MAAM;AAEpC,SAAAK,EAAU,MAAM;AACd,IAAKU,EAAO,QAAA;AAAA,EACd,GAAG,CAACA,CAAM,CAAC,GAEJ;AACT,GCHaE,IAAS,MAAM;AAC1B,QAAMjB,IAAOC,EAAA;AAEb,SAAAI,EAAU,MAAM;AACd,IAAKL,EAAK,OAAA;AAAA,EACZ,GAAG,CAACA,CAAI,CAAC,yBAGN,OAAA,EAAI,WAAU,yCACb,UAAAM,gBAAAA,EAAAA,KAACC,GAAA,EAAK,WAAU,mBACd,UAAA;AAAA,IAAAD,gBAAAA,OAACE,GAAA,EACC,UAAA;AAAA,MAAAC,gBAAAA,EAAAA,IAACC,GAAA,EAAU,WAAU,WAAU,UAAA,WAAO;AAAA,MACtCD,gBAAAA,EAAAA,IAACE,KAAgB,UAAA,yFAAA,CAGjB;AAAA,IAAA,GACF;AAAA,IACAF,gBAAAA,MAACG,GAAA,EACC,UAAAN,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,sCACb,UAAA;AAAA,MAAAG,gBAAAA,EAAAA,IAACS,GAAA,EAAO,SAAS,MAAMlB,EAAK,UAAU,SAAQ,WAAU,UAAA,WAAA,CAExD;AAAA,MACAS,gBAAAA,EAAAA,IAACS,GAAA,EAAO,SAAQ,QAAO,WAAU,yBAAwB,SAAO,IAC9D,UAAAT,gBAAAA,EAAAA,IAACU,GAAA,EAAK,IAAG,KAAI,qBAAO,EAAA,CACtB;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;"}