zudoku 0.0.2-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (403) hide show
  1. package/cli.js +1 -0
  2. package/dist/app/DevPortal.d.ts +26 -0
  3. package/dist/app/DevPortal.js +41 -0
  4. package/dist/app/DevPortal.js.map +1 -0
  5. package/dist/app/Heading.d.ts +9 -0
  6. package/dist/app/Heading.js +27 -0
  7. package/dist/app/Heading.js.map +1 -0
  8. package/dist/app/app.d.ts +2 -0
  9. package/dist/app/app.js +69 -0
  10. package/dist/app/app.js.map +1 -0
  11. package/dist/app/authentication/authentication.d.ts +13 -0
  12. package/dist/app/authentication/authentication.js +2 -0
  13. package/dist/app/authentication/authentication.js.map +1 -0
  14. package/dist/app/authentication/clerk.d.ts +5 -0
  15. package/dist/app/authentication/clerk.js +36 -0
  16. package/dist/app/authentication/clerk.js.map +1 -0
  17. package/dist/app/authentication/openid.d.ts +11 -0
  18. package/dist/app/authentication/openid.js +118 -0
  19. package/dist/app/authentication/openid.js.map +1 -0
  20. package/dist/app/components/AnchorLink.d.ts +5 -0
  21. package/dist/app/components/AnchorLink.js +17 -0
  22. package/dist/app/components/AnchorLink.js.map +1 -0
  23. package/dist/app/components/CategoryHeading.d.ts +5 -0
  24. package/dist/app/components/CategoryHeading.js +6 -0
  25. package/dist/app/components/CategoryHeading.js.map +1 -0
  26. package/dist/app/components/DynamicIcon.d.ts +6 -0
  27. package/dist/app/components/DynamicIcon.js +6 -0
  28. package/dist/app/components/DynamicIcon.js.map +1 -0
  29. package/dist/app/components/Header.d.ts +2 -0
  30. package/dist/app/components/Header.js +15 -0
  31. package/dist/app/components/Header.js.map +1 -0
  32. package/dist/app/components/Layout.d.ts +4 -0
  33. package/dist/app/components/Layout.js +31 -0
  34. package/dist/app/components/Layout.js.map +1 -0
  35. package/dist/app/components/Markdown.d.ts +5 -0
  36. package/dist/app/components/Markdown.js +20 -0
  37. package/dist/app/components/Markdown.js.map +1 -0
  38. package/dist/app/components/SyntaxHighlight.d.ts +9 -0
  39. package/dist/app/components/SyntaxHighlight.js +31 -0
  40. package/dist/app/components/SyntaxHighlight.js.map +1 -0
  41. package/dist/app/components/TopNavigation.d.ts +1 -0
  42. package/dist/app/components/TopNavigation.js +11 -0
  43. package/dist/app/components/TopNavigation.js.map +1 -0
  44. package/dist/app/components/context/ComponentsContext.d.ts +10 -0
  45. package/dist/app/components/context/ComponentsContext.js +11 -0
  46. package/dist/app/components/context/ComponentsContext.js.map +1 -0
  47. package/dist/app/components/context/DevPortalProvider.d.ts +10 -0
  48. package/dist/app/components/context/DevPortalProvider.js +39 -0
  49. package/dist/app/components/context/DevPortalProvider.js.map +1 -0
  50. package/dist/app/components/context/PluginSystem.d.ts +1 -0
  51. package/dist/app/components/context/PluginSystem.js +2 -0
  52. package/dist/app/components/context/PluginSystem.js.map +1 -0
  53. package/dist/app/components/context/ThemeContext.d.ts +5 -0
  54. package/dist/app/components/context/ThemeContext.js +33 -0
  55. package/dist/app/components/context/ThemeContext.js.map +1 -0
  56. package/dist/app/components/context/ViewportAnchorContext.d.ts +15 -0
  57. package/dist/app/components/context/ViewportAnchorContext.js +89 -0
  58. package/dist/app/components/context/ViewportAnchorContext.js.map +1 -0
  59. package/dist/app/components/navigation/SideNavigation.d.ts +1 -0
  60. package/dist/app/components/navigation/SideNavigation.js +11 -0
  61. package/dist/app/components/navigation/SideNavigation.js.map +1 -0
  62. package/dist/app/components/navigation/SideNavigationCategory.d.ts +4 -0
  63. package/dist/app/components/navigation/SideNavigationCategory.js +26 -0
  64. package/dist/app/components/navigation/SideNavigationCategory.js.map +1 -0
  65. package/dist/app/components/navigation/SideNavigationItem.d.ts +12 -0
  66. package/dist/app/components/navigation/SideNavigationItem.js +38 -0
  67. package/dist/app/components/navigation/SideNavigationItem.js.map +1 -0
  68. package/dist/app/components/navigation/SideNavigationWrapper.d.ts +4 -0
  69. package/dist/app/components/navigation/SideNavigationWrapper.js +6 -0
  70. package/dist/app/components/navigation/SideNavigationWrapper.js.map +1 -0
  71. package/dist/app/components/navigation/useNavigationCollapsibleState.d.ts +7 -0
  72. package/dist/app/components/navigation/useNavigationCollapsibleState.js +16 -0
  73. package/dist/app/components/navigation/useNavigationCollapsibleState.js.map +1 -0
  74. package/dist/app/components/navigation/util.d.ts +8 -0
  75. package/dist/app/components/navigation/util.js +15 -0
  76. package/dist/app/components/navigation/util.js.map +1 -0
  77. package/dist/app/config.d.ts +3 -0
  78. package/dist/app/config.js +9 -0
  79. package/dist/app/config.js.map +1 -0
  80. package/dist/app/core/DevPortalContext.d.ts +80 -0
  81. package/dist/app/core/DevPortalContext.js +68 -0
  82. package/dist/app/core/DevPortalContext.js.map +1 -0
  83. package/dist/app/core/helmet.d.ts +4 -0
  84. package/dist/app/core/helmet.js +5 -0
  85. package/dist/app/core/helmet.js.map +1 -0
  86. package/dist/app/core/icons.d.ts +1 -0
  87. package/dist/app/core/icons.js +2 -0
  88. package/dist/app/core/icons.js.map +1 -0
  89. package/dist/app/core/plugins.d.ts +24 -0
  90. package/dist/app/core/plugins.js +4 -0
  91. package/dist/app/core/plugins.js.map +1 -0
  92. package/dist/app/core/router.d.ts +1 -0
  93. package/dist/app/core/router.js +2 -0
  94. package/dist/app/core/router.js.map +1 -0
  95. package/dist/app/core/types/combine.d.ts +4 -0
  96. package/dist/app/core/types/combine.js +2 -0
  97. package/dist/app/core/types/combine.js.map +1 -0
  98. package/dist/app/main.d.ts +1 -0
  99. package/dist/app/main.js +18 -0
  100. package/dist/app/main.js.map +1 -0
  101. package/dist/app/markdowns.d.ts +3 -0
  102. package/dist/app/markdowns.js +5 -0
  103. package/dist/app/markdowns.js.map +1 -0
  104. package/dist/app/oas/graphql/index.d.ts +12 -0
  105. package/dist/app/oas/graphql/index.js +290 -0
  106. package/dist/app/oas/graphql/index.js.map +1 -0
  107. package/dist/app/oas/graphql/server.d.ts +1 -0
  108. package/dist/app/oas/graphql/server.js +8 -0
  109. package/dist/app/oas/graphql/server.js.map +1 -0
  110. package/dist/app/oas/parser/dereference/index.d.ts +5 -0
  111. package/dist/app/oas/parser/dereference/index.js +43 -0
  112. package/dist/app/oas/parser/dereference/index.js.map +1 -0
  113. package/dist/app/oas/parser/dereference/resolveRef.d.ts +5 -0
  114. package/dist/app/oas/parser/dereference/resolveRef.js +26 -0
  115. package/dist/app/oas/parser/dereference/resolveRef.js.map +1 -0
  116. package/dist/app/oas/parser/index.d.ts +21 -0
  117. package/dist/app/oas/parser/index.js +58 -0
  118. package/dist/app/oas/parser/index.js.map +1 -0
  119. package/dist/app/oas/parser/schemas/v3.0.json +1489 -0
  120. package/dist/app/oas/parser/schemas/v3.1.json +1298 -0
  121. package/dist/app/oas/parser/upgrade/index.d.ts +9 -0
  122. package/dist/app/oas/parser/upgrade/index.js +90 -0
  123. package/dist/app/oas/parser/upgrade/index.js.map +1 -0
  124. package/dist/app/plugins/api-key/SettingsApiKeys.d.ts +4 -0
  125. package/dist/app/plugins/api-key/SettingsApiKeys.js +7 -0
  126. package/dist/app/plugins/api-key/SettingsApiKeys.js.map +1 -0
  127. package/dist/app/plugins/api-key/index.d.ts +32 -0
  128. package/dist/app/plugins/api-key/index.js +55 -0
  129. package/dist/app/plugins/api-key/index.js.map +1 -0
  130. package/dist/app/plugins/markdown/MdxPage.d.ts +3 -0
  131. package/dist/app/plugins/markdown/MdxPage.js +55 -0
  132. package/dist/app/plugins/markdown/MdxPage.js.map +1 -0
  133. package/dist/app/plugins/markdown/Toc.d.ts +4 -0
  134. package/dist/app/plugins/markdown/Toc.js +40 -0
  135. package/dist/app/plugins/markdown/Toc.js.map +1 -0
  136. package/dist/app/plugins/markdown/generateRoutes.d.ts +3 -0
  137. package/dist/app/plugins/markdown/generateRoutes.js +50 -0
  138. package/dist/app/plugins/markdown/generateRoutes.js.map +1 -0
  139. package/dist/app/plugins/markdown/index.d.ts +19 -0
  140. package/dist/app/plugins/markdown/index.js +9 -0
  141. package/dist/app/plugins/markdown/index.js.map +1 -0
  142. package/dist/app/plugins/openapi/ColorizedParam.d.ts +8 -0
  143. package/dist/app/plugins/openapi/ColorizedParam.js +40 -0
  144. package/dist/app/plugins/openapi/ColorizedParam.js.map +1 -0
  145. package/dist/app/plugins/openapi/MakeRequest.d.ts +4 -0
  146. package/dist/app/plugins/openapi/MakeRequest.js +11 -0
  147. package/dist/app/plugins/openapi/MakeRequest.js.map +1 -0
  148. package/dist/app/plugins/openapi/MethodBadge.d.ts +13 -0
  149. package/dist/app/plugins/openapi/MethodBadge.js +26 -0
  150. package/dist/app/plugins/openapi/MethodBadge.js.map +1 -0
  151. package/dist/app/plugins/openapi/OperationList.d.ts +47 -0
  152. package/dist/app/plugins/openapi/OperationList.js +82 -0
  153. package/dist/app/plugins/openapi/OperationList.js.map +1 -0
  154. package/dist/app/plugins/openapi/OperationListItem.d.ts +7 -0
  155. package/dist/app/plugins/openapi/OperationListItem.js +15 -0
  156. package/dist/app/plugins/openapi/OperationListItem.js.map +1 -0
  157. package/dist/app/plugins/openapi/ParameterList.d.ts +7 -0
  158. package/dist/app/plugins/openapi/ParameterList.js +5 -0
  159. package/dist/app/plugins/openapi/ParameterList.js.map +1 -0
  160. package/dist/app/plugins/openapi/ParameterListItem.d.ts +8 -0
  161. package/dist/app/plugins/openapi/ParameterListItem.js +13 -0
  162. package/dist/app/plugins/openapi/ParameterListItem.js.map +1 -0
  163. package/dist/app/plugins/openapi/RequestBodySidecarBox.d.ts +6 -0
  164. package/dist/app/plugins/openapi/RequestBodySidecarBox.js +19 -0
  165. package/dist/app/plugins/openapi/RequestBodySidecarBox.js.map +1 -0
  166. package/dist/app/plugins/openapi/ResponsesSidecarBox.d.ts +6 -0
  167. package/dist/app/plugins/openapi/ResponsesSidecarBox.js +15 -0
  168. package/dist/app/plugins/openapi/ResponsesSidecarBox.js.map +1 -0
  169. package/dist/app/plugins/openapi/Select.d.ts +9 -0
  170. package/dist/app/plugins/openapi/Select.js +5 -0
  171. package/dist/app/plugins/openapi/Select.js.map +1 -0
  172. package/dist/app/plugins/openapi/Sidecar.d.ts +4 -0
  173. package/dist/app/plugins/openapi/Sidecar.js +39 -0
  174. package/dist/app/plugins/openapi/Sidecar.js.map +1 -0
  175. package/dist/app/plugins/openapi/SidecarBox.d.ts +10 -0
  176. package/dist/app/plugins/openapi/SidecarBox.js +8 -0
  177. package/dist/app/plugins/openapi/SidecarBox.js.map +1 -0
  178. package/dist/app/plugins/openapi/graphql/index.d.ts +836 -0
  179. package/dist/app/plugins/openapi/graphql/index.js +4 -0
  180. package/dist/app/plugins/openapi/graphql/index.js.map +1 -0
  181. package/dist/app/plugins/openapi/index.d.ts +22 -0
  182. package/dist/app/plugins/openapi/index.js +91 -0
  183. package/dist/app/plugins/openapi/index.js.map +1 -0
  184. package/dist/app/plugins/openapi/util/generateSchemaExample.d.ts +3 -0
  185. package/dist/app/plugins/openapi/util/generateSchemaExample.js +52 -0
  186. package/dist/app/plugins/openapi/util/generateSchemaExample.js.map +1 -0
  187. package/dist/app/plugins/openapi/util/getCode.d.ts +2 -0
  188. package/dist/app/plugins/openapi/util/getCode.js +54 -0
  189. package/dist/app/plugins/openapi/util/getCode.js.map +1 -0
  190. package/dist/app/plugins/openapi/util/urql.d.ts +8 -0
  191. package/dist/app/plugins/openapi/util/urql.js +8 -0
  192. package/dist/app/plugins/openapi/util/urql.js.map +1 -0
  193. package/dist/app/plugins/openapi/worker/createSharedWorkerClient.d.ts +5 -0
  194. package/dist/app/plugins/openapi/worker/createSharedWorkerClient.js +47 -0
  195. package/dist/app/plugins/openapi/worker/createSharedWorkerClient.js.map +1 -0
  196. package/dist/app/plugins/openapi/worker/worker.d.ts +1 -0
  197. package/dist/app/plugins/openapi/worker/worker.js +20 -0
  198. package/dist/app/plugins/openapi/worker/worker.js.map +1 -0
  199. package/dist/app/plugins/redirect/index.d.ts +10 -0
  200. package/dist/app/plugins/redirect/index.js +11 -0
  201. package/dist/app/plugins/redirect/index.js.map +1 -0
  202. package/dist/app/tailwind.d.ts +3 -0
  203. package/dist/app/tailwind.js +69 -0
  204. package/dist/app/tailwind.js.map +1 -0
  205. package/dist/app/ui/Callout.d.ts +51 -0
  206. package/dist/app/ui/Callout.js +50 -0
  207. package/dist/app/ui/Callout.js.map +1 -0
  208. package/dist/app/ui/Card.d.ts +8 -0
  209. package/dist/app/ui/Card.js +17 -0
  210. package/dist/app/ui/Card.js.map +1 -0
  211. package/dist/app/ui/Note.d.ts +8 -0
  212. package/dist/app/ui/Note.js +23 -0
  213. package/dist/app/ui/Note.js.map +1 -0
  214. package/dist/app/util/MdxComponents.d.ts +27 -0
  215. package/dist/app/util/MdxComponents.js +40 -0
  216. package/dist/app/util/MdxComponents.js.map +1 -0
  217. package/dist/app/util/cn.d.ts +2 -0
  218. package/dist/app/util/cn.js +6 -0
  219. package/dist/app/util/cn.js.map +1 -0
  220. package/dist/app/util/createWaitForNotify.d.ts +1 -0
  221. package/dist/app/util/createWaitForNotify.js +15 -0
  222. package/dist/app/util/createWaitForNotify.js.map +1 -0
  223. package/dist/app/util/groupBy.d.ts +6 -0
  224. package/dist/app/util/groupBy.js +9 -0
  225. package/dist/app/util/groupBy.js.map +1 -0
  226. package/dist/app/util/joinPath.d.ts +1 -0
  227. package/dist/app/util/joinPath.js +8 -0
  228. package/dist/app/util/joinPath.js.map +1 -0
  229. package/dist/app/util/pastellize.d.ts +4 -0
  230. package/dist/app/util/pastellize.js +14 -0
  231. package/dist/app/util/pastellize.js.map +1 -0
  232. package/dist/app/util/slugify.d.ts +3 -0
  233. package/dist/app/util/slugify.js +3 -0
  234. package/dist/app/util/slugify.js.map +1 -0
  235. package/dist/app/util/traverseNavigation.d.ts +6 -0
  236. package/dist/app/util/traverseNavigation.js +30 -0
  237. package/dist/app/util/traverseNavigation.js.map +1 -0
  238. package/dist/app/util/useScrollToAnchor.d.ts +1 -0
  239. package/dist/app/util/useScrollToAnchor.js +33 -0
  240. package/dist/app/util/useScrollToAnchor.js.map +1 -0
  241. package/dist/app/util/useScrollToTop.d.ts +1 -0
  242. package/dist/app/util/useScrollToTop.js +13 -0
  243. package/dist/app/util/useScrollToTop.js.map +1 -0
  244. package/dist/auth.d.ts +2 -0
  245. package/dist/auth.js +3 -0
  246. package/dist/auth.js.map +1 -0
  247. package/dist/cli/build/handler.d.ts +4 -0
  248. package/dist/cli/build/handler.js +9 -0
  249. package/dist/cli/build/handler.js.map +1 -0
  250. package/dist/cli/cli.d.ts +1 -0
  251. package/dist/cli/cli.js +64 -0
  252. package/dist/cli/cli.js.map +1 -0
  253. package/dist/cli/cmds/build.d.ts +8 -0
  254. package/dist/cli/cmds/build.js +23 -0
  255. package/dist/cli/cmds/build.js.map +1 -0
  256. package/dist/cli/cmds/dev.d.ts +8 -0
  257. package/dist/cli/cmds/dev.js +29 -0
  258. package/dist/cli/cmds/dev.js.map +1 -0
  259. package/dist/cli/common/analytics/lib.d.ts +17 -0
  260. package/dist/cli/common/analytics/lib.js +53 -0
  261. package/dist/cli/common/analytics/lib.js.map +1 -0
  262. package/dist/cli/common/constants.d.ts +5 -0
  263. package/dist/cli/common/constants.js +9 -0
  264. package/dist/cli/common/constants.js.map +1 -0
  265. package/dist/cli/common/logger.d.ts +2 -0
  266. package/dist/cli/common/logger.js +14 -0
  267. package/dist/cli/common/logger.js.map +1 -0
  268. package/dist/cli/common/machine-id/lib.d.ts +1 -0
  269. package/dist/cli/common/machine-id/lib.js +74 -0
  270. package/dist/cli/common/machine-id/lib.js.map +1 -0
  271. package/dist/cli/common/outdated.d.ts +1 -0
  272. package/dist/cli/common/outdated.js +70 -0
  273. package/dist/cli/common/outdated.js.map +1 -0
  274. package/dist/cli/common/output.d.ts +9 -0
  275. package/dist/cli/common/output.js +65 -0
  276. package/dist/cli/common/output.js.map +1 -0
  277. package/dist/cli/common/utils/box.d.ts +33 -0
  278. package/dist/cli/common/utils/box.js +81 -0
  279. package/dist/cli/common/utils/box.js.map +1 -0
  280. package/dist/cli/common/utils/ports.d.ts +1 -0
  281. package/dist/cli/common/utils/ports.js +18 -0
  282. package/dist/cli/common/utils/ports.js.map +1 -0
  283. package/dist/cli/common/validators/lib.d.ts +20 -0
  284. package/dist/cli/common/validators/lib.js +31 -0
  285. package/dist/cli/common/validators/lib.js.map +1 -0
  286. package/dist/cli/common/xdg/lib.d.ts +6 -0
  287. package/dist/cli/common/xdg/lib.js +18 -0
  288. package/dist/cli/common/xdg/lib.js.map +1 -0
  289. package/dist/cli/dev/handler.d.ts +5 -0
  290. package/dist/cli/dev/handler.js +22 -0
  291. package/dist/cli/dev/handler.js.map +1 -0
  292. package/dist/config/config.d.ts +37 -0
  293. package/dist/config/config.js +2 -0
  294. package/dist/config/config.js.map +1 -0
  295. package/dist/index.d.ts +7 -0
  296. package/dist/index.js +6 -0
  297. package/dist/index.js.map +1 -0
  298. package/dist/plugins.d.ts +4 -0
  299. package/dist/plugins.js +6 -0
  300. package/dist/plugins.js.map +1 -0
  301. package/dist/vite/build.d.ts +3 -0
  302. package/dist/vite/build.js +29 -0
  303. package/dist/vite/build.js.map +1 -0
  304. package/dist/vite/config.d.ts +6 -0
  305. package/dist/vite/config.js +74 -0
  306. package/dist/vite/config.js.map +1 -0
  307. package/dist/vite/dev-server.d.ts +10 -0
  308. package/dist/vite/dev-server.js +53 -0
  309. package/dist/vite/dev-server.js.map +1 -0
  310. package/dist/vite/html.d.ts +5 -0
  311. package/dist/vite/html.js +32 -0
  312. package/dist/vite/html.js.map +1 -0
  313. package/dist/vite/import-auth-plugin.d.ts +3 -0
  314. package/dist/vite/import-auth-plugin.js +28 -0
  315. package/dist/vite/import-auth-plugin.js.map +1 -0
  316. package/dist/vite/plugin.d.ts +7 -0
  317. package/dist/vite/plugin.js +109 -0
  318. package/dist/vite/plugin.js.map +1 -0
  319. package/package.json +118 -0
  320. package/src/app/DevPortal.tsx +115 -0
  321. package/src/app/Heading.tsx +60 -0
  322. package/src/app/app.tsx +85 -0
  323. package/src/app/authentication/authentication.ts +18 -0
  324. package/src/app/authentication/clerk.ts +47 -0
  325. package/src/app/authentication/openid.ts +192 -0
  326. package/src/app/components/AnchorLink.tsx +19 -0
  327. package/src/app/components/CategoryHeading.tsx +16 -0
  328. package/src/app/components/DynamicIcon.tsx +60 -0
  329. package/src/app/components/Header.tsx +69 -0
  330. package/src/app/components/Layout.tsx +56 -0
  331. package/src/app/components/Markdown.tsx +37 -0
  332. package/src/app/components/SyntaxHighlight.tsx +92 -0
  333. package/src/app/components/TopNavigation.tsx +32 -0
  334. package/src/app/components/context/ComponentsContext.tsx +24 -0
  335. package/src/app/components/context/DevPortalProvider.ts +54 -0
  336. package/src/app/components/context/PluginSystem.ts +0 -0
  337. package/src/app/components/context/ThemeContext.tsx +46 -0
  338. package/src/app/components/context/ViewportAnchorContext.tsx +139 -0
  339. package/src/app/components/navigation/SideNavigation.tsx +18 -0
  340. package/src/app/components/navigation/SideNavigationCategory.tsx +74 -0
  341. package/src/app/components/navigation/SideNavigationItem.tsx +143 -0
  342. package/src/app/components/navigation/SideNavigationWrapper.tsx +15 -0
  343. package/src/app/components/navigation/useNavigationCollapsibleState.ts +27 -0
  344. package/src/app/components/navigation/util.ts +38 -0
  345. package/src/app/config.ts +20 -0
  346. package/src/app/core/DevPortalContext.ts +164 -0
  347. package/src/app/core/helmet.ts +5 -0
  348. package/src/app/core/icons.tsx +1 -0
  349. package/src/app/core/plugins.ts +43 -0
  350. package/src/app/core/router.tsx +1 -0
  351. package/src/app/core/types/combine.ts +16 -0
  352. package/src/app/main.css +137 -0
  353. package/src/app/main.tsx +22 -0
  354. package/src/app/markdowns.ts +7 -0
  355. package/src/app/oas/graphql/index.ts +422 -0
  356. package/src/app/oas/graphql/server.ts +10 -0
  357. package/src/app/oas/parser/dereference/index.ts +59 -0
  358. package/src/app/oas/parser/dereference/resolveRef.ts +32 -0
  359. package/src/app/oas/parser/index.ts +94 -0
  360. package/src/app/oas/parser/schemas/v3.0.json +1489 -0
  361. package/src/app/oas/parser/schemas/v3.1.json +1298 -0
  362. package/src/app/oas/parser/upgrade/index.ts +108 -0
  363. package/src/app/plugins/api-key/SettingsApiKeys.tsx +22 -0
  364. package/src/app/plugins/api-key/index.tsx +123 -0
  365. package/src/app/plugins/markdown/MdxPage.tsx +128 -0
  366. package/src/app/plugins/markdown/Toc.tsx +122 -0
  367. package/src/app/plugins/markdown/generateRoutes.tsx +72 -0
  368. package/src/app/plugins/markdown/index.tsx +31 -0
  369. package/src/app/plugins/openapi/ColorizedParam.tsx +73 -0
  370. package/src/app/plugins/openapi/MakeRequest.tsx +30 -0
  371. package/src/app/plugins/openapi/MethodBadge.tsx +36 -0
  372. package/src/app/plugins/openapi/OperationList.tsx +119 -0
  373. package/src/app/plugins/openapi/OperationListItem.tsx +55 -0
  374. package/src/app/plugins/openapi/ParameterList.tsx +32 -0
  375. package/src/app/plugins/openapi/ParameterListItem.tsx +60 -0
  376. package/src/app/plugins/openapi/RequestBodySidecarBox.tsx +48 -0
  377. package/src/app/plugins/openapi/ResponsesSidecarBox.tsx +60 -0
  378. package/src/app/plugins/openapi/Select.tsx +35 -0
  379. package/src/app/plugins/openapi/Sidecar.tsx +99 -0
  380. package/src/app/plugins/openapi/SidecarBox.tsx +35 -0
  381. package/src/app/plugins/openapi/graphql/env.d.ts +48 -0
  382. package/src/app/plugins/openapi/graphql/index.ts +13 -0
  383. package/src/app/plugins/openapi/index.tsx +142 -0
  384. package/src/app/plugins/openapi/util/generateSchemaExample.ts +59 -0
  385. package/src/app/plugins/openapi/util/getCode.tsx +69 -0
  386. package/src/app/plugins/openapi/util/urql.ts +8 -0
  387. package/src/app/plugins/openapi/worker/createSharedWorkerClient.ts +60 -0
  388. package/src/app/plugins/openapi/worker/worker.ts +30 -0
  389. package/src/app/plugins/redirect/index.tsx +20 -0
  390. package/src/app/tailwind.ts +72 -0
  391. package/src/app/ui/Callout.tsx +87 -0
  392. package/src/app/ui/Card.tsx +82 -0
  393. package/src/app/ui/Note.tsx +58 -0
  394. package/src/app/util/MdxComponents.tsx +70 -0
  395. package/src/app/util/cn.ts +6 -0
  396. package/src/app/util/createWaitForNotify.ts +18 -0
  397. package/src/app/util/groupBy.ts +24 -0
  398. package/src/app/util/joinPath.tsx +10 -0
  399. package/src/app/util/pastellize.ts +25 -0
  400. package/src/app/util/slugify.ts +3 -0
  401. package/src/app/util/traverseNavigation.ts +55 -0
  402. package/src/app/util/useScrollToAnchor.ts +38 -0
  403. package/src/app/util/useScrollToTop.ts +13 -0
package/cli.js ADDED
@@ -0,0 +1 @@
1
+ import "./dist/cli/cli.js";
@@ -0,0 +1,26 @@
1
+ /// <reference types="react" resolution-mode="require"/>
2
+ import { type AuthProvider } from "./authentication/authentication.js";
3
+ import { type ComponentsContextType } from "./components/context/ComponentsContext.js";
4
+ import { type NavigationItem } from "./core/DevPortalContext.js";
5
+ import { type DevPortalPlugin } from "./core/plugins.js";
6
+ import { type MdxComponentsType } from "./util/MdxComponents.js";
7
+ export declare const DevPortalSystemPaths: {
8
+ readonly Settings: "/settings";
9
+ };
10
+ export type DevPortalPath = string | (typeof DevPortalSystemPaths)[keyof typeof DevPortalSystemPaths];
11
+ export type DevPortalProps = {
12
+ meta?: Partial<{
13
+ headerTitle: string;
14
+ pageTitle: string;
15
+ description: string;
16
+ logo: string;
17
+ favicon: string;
18
+ }>;
19
+ authentication?: AuthProvider;
20
+ navigation: NavigationItem[];
21
+ plugins?: DevPortalPlugin[];
22
+ mdxComponents?: MdxComponentsType;
23
+ overrides?: ComponentsContextType;
24
+ };
25
+ declare const MemoDevPortal: import("react").MemoExoticComponent<(props: DevPortalProps) => import("react/jsx-runtime").JSX.Element>;
26
+ export default MemoDevPortal;
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { MDXProvider } from "@mdx-js/react";
3
+ import { QueryClientProvider } from "@tanstack/react-query";
4
+ import { memo, Suspense, useEffect, useMemo } from "react";
5
+ import { createBrowserRouter, RouterProvider } from "react-router-dom";
6
+ import { ComponentsProvider, DEFAULT_COMPONENTS, } from "./components/context/ComponentsContext.js";
7
+ import { DevPortalProvider } from "./components/context/DevPortalProvider.js";
8
+ import { ThemeProvider } from "./components/context/ThemeContext.js";
9
+ import { ViewportAnchorProvider } from "./components/context/ViewportAnchorContext.js";
10
+ import { Layout } from "./components/Layout.js";
11
+ import { DevPortalContext, queryClient, } from "./core/DevPortalContext.js";
12
+ import { HelmetProvider } from "./core/helmet.js";
13
+ import { isNavigationPlugin } from "./core/plugins.js";
14
+ import { MdxComponents } from "./util/MdxComponents.js";
15
+ export const DevPortalSystemPaths = {
16
+ Settings: "/settings",
17
+ };
18
+ const DevPortal = (props) => {
19
+ const router = useMemo(() => {
20
+ const routes = (props.plugins ?? []).flatMap((plugin) => isNavigationPlugin(plugin) ? plugin.getRoutes() : []);
21
+ return createBrowserRouter([
22
+ {
23
+ path: "/",
24
+ element: _jsx(Layout, {}),
25
+ errorElement: (_jsx(Layout, { children: _jsx("div", { className: "h-[75vh] flex items-center justify-center", children: "Error, look at the console" }) })),
26
+ children: routes,
27
+ },
28
+ ]);
29
+ }, [props.plugins]);
30
+ const components = useMemo(() => ({ ...DEFAULT_COMPONENTS, ...props.overrides }), [props.overrides]);
31
+ const mdxComponents = useMemo(() => ({ ...MdxComponents, ...props.mdxComponents }), [props.mdxComponents]);
32
+ const devPortalContext = useMemo(() => new DevPortalContext(props), [props]);
33
+ useEffect(() => {
34
+ void devPortalContext.initialize();
35
+ }, [devPortalContext]);
36
+ return (_jsx(QueryClientProvider, { client: queryClient, children: _jsx(HelmetProvider, { children: _jsx(DevPortalProvider, { value: devPortalContext, children: _jsx(MDXProvider, { components: mdxComponents, children: _jsx(ThemeProvider, { children: _jsx(ComponentsProvider, { value: components, children: _jsx(ViewportAnchorProvider, { children: _jsx(Suspense, { fallback: _jsx("div", { className: "grid place-items-center h-full", children: "Loading..." }), children: _jsx(RouterProvider, { router: router }) }) }) }) }) }) }) }) }));
37
+ };
38
+ const MemoDevPortal = memo(DevPortal);
39
+ MemoDevPortal.displayName = "DevPortal";
40
+ export default MemoDevPortal;
41
+ //# sourceMappingURL=DevPortal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DevPortal.js","sourceRoot":"","sources":["../../src/app/DevPortal.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type ReactNode } from "react";
2
+ export type HeadingProps = {
3
+ children: ReactNode;
4
+ className?: string;
5
+ id?: string;
6
+ level?: 1 | 2 | 3 | 4 | 5 | 6;
7
+ registerSidebarAnchor?: boolean;
8
+ };
9
+ export declare const Heading: ({ level, children, id, className, registerSidebarAnchor, }: HeadingProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useRegisterAnchorElement } from "./components/context/ViewportAnchorContext.js";
3
+ import { cn } from "./util/cn.js";
4
+ const getComponent = (level) => {
5
+ switch (level) {
6
+ case 1:
7
+ return "h1";
8
+ case 2:
9
+ return "h2";
10
+ case 3:
11
+ return "h3";
12
+ case 4:
13
+ return "h4";
14
+ case 5:
15
+ return "h5";
16
+ case 6:
17
+ return "h6";
18
+ default:
19
+ return "h1";
20
+ }
21
+ };
22
+ export const Heading = ({ level, children, id, className, registerSidebarAnchor, }) => {
23
+ const Component = getComponent(level ?? 1);
24
+ const { ref } = useRegisterAnchorElement();
25
+ return (_jsxs(Component, { className: cn("group relative", className), ref: registerSidebarAnchor ? ref : undefined, id: id, children: [id && (_jsx("a", { href: `#${id}`, className: "no-underline absolute text-primary -left-[0.8em] pr-2.5 opacity-0 group-hover:opacity-50 hover:!opacity-100 transition-opacity duration-200", "aria-label": `Link to ${id}`, children: "#" })), children] }));
26
+ };
27
+ //# sourceMappingURL=Heading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Heading.js","sourceRoot":"","sources":["../../src/app/Heading.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;IACrC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,CAAC;YACJ,OAAO,IAAI,CAAC;QACd,KAAK,CAAC;YACJ,OAAO,IAAI,CAAC;QACd,KAAK,CAAC;YACJ,OAAO,IAAI,CAAC;QACd,KAAK,CAAC;YACJ,OAAO,IAAI,CAAC;QACd,KAAK,CAAC;YACJ,OAAO,IAAI,CAAC;QACd,KAAK,CAAC;YACJ,OAAO,IAAI,CAAC;QACd;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC,CAAC;AAUF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EACtB,KAAK,EACL,QAAQ,EACR,EAAE,EACF,SAAS,EACT,qBAAqB,GACR,EAAE,EAAE;IACjB,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,EAAE,GAAG,wBAAwB,EAAE,CAAC;IAE3C,OAAO,CACL,MAAC,SAAS,IACR,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,EAC1C,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAC5C,EAAE,EAAE,EAAE,aAEL,EAAE,IAAI,CACL,YACE,IAAI,EAAE,IAAI,EAAE,EAAE,EACd,SAAS,EAAC,6IAA6I,gBAC3I,WAAW,EAAE,EAAE,kBAGzB,CACL,EACA,QAAQ,IACC,CACb,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import "./main.css";
2
+ export default function App(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,69 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import "./main.css";
3
+ import DevPortal from "./DevPortal.js";
4
+ import { markdownPlugin } from "./plugins/markdown/index.js";
5
+ import { openApiPlugin } from "./plugins/openapi/index.js";
6
+ import config from "./config.js";
7
+ // async function getAuthProvider(authConfig: AuthenticationConfig) {
8
+ // if (authConfig.type === "clerk") {
9
+ // const clerkProvider = import("./authentication/clerk.js");
10
+ // return clerkProvider(authConfig);
11
+ // } else {
12
+ // throw new Error(
13
+ // `The authentication type "${authConfig.type}" is not supported.`,
14
+ // );
15
+ // }
16
+ // //openIdAuth({
17
+ // // clientId: oauth.client_id,
18
+ // // authorizationEndpoint: oauth.authorize_url,
19
+ // // tokenEndpoint: oauth.token_fetch_url,
20
+ // // })
21
+ // }
22
+ export default function App() {
23
+ return (_jsx(DevPortal, { meta: {
24
+ headerTitle: config?.ui?.headerTitle ?? "Developer Portal",
25
+ pageTitle: config?.ui?.pageTitle ?? "%s | Dev Portal",
26
+ logo: config?.ui?.logo ?? "https://cdn.zuplo.com/www/favicon.png",
27
+ favicon: config?.ui?.metadata?.favicon ??
28
+ "https://cdn.zuplo.com/www/favicon.png",
29
+ }, navigation: config.navigation ?? [],
30
+ // authentication={
31
+ // config.authentication
32
+ // ? getAuthProvider(config.authentication)
33
+ // : undefined
34
+ // }
35
+ plugins: [
36
+ ...(config.docs
37
+ ? Array.isArray(config.docs)
38
+ ? config.docs
39
+ : [config.docs]
40
+ : []).map((docs) => markdownPlugin({
41
+ markdownFiles: docs?.files ?? {},
42
+ })),
43
+ ...(config.apis
44
+ ? Array.isArray(config.apis)
45
+ ? config.apis
46
+ : [config.apis]
47
+ : []).map((api) => openApiPlugin(api)),
48
+ // apiKeyPlugin({
49
+ // // consumerEndpoint:
50
+ // // "https://zudoku-customer-main-b36fa2f.d2.zuplo.dev/v1/developer/api-keys",
51
+ // getConsumers: async (ctx) => {
52
+ // const accessToken = await ctx.authentication?.getToken?.(ctx);
53
+ // if (!accessToken) {
54
+ // return;
55
+ // }
56
+ // const consumers = await fetch(
57
+ // "https://zudoku-customer-main-b36fa2f.d2.zuplo.dev/v1/developer/api-keys",
58
+ // {
59
+ // headers: {
60
+ // Authorization: `Bearer ${accessToken}`,
61
+ // },
62
+ // },
63
+ // );
64
+ // return { consumers: [await consumers.json()] };
65
+ // },
66
+ // }),
67
+ ] }));
68
+ }
69
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app/app.tsx"],"names":[],"mappings":";AAAA,OAAO,YAAY,CAAC;AAEpB,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,qEAAqE;AACrE,uCAAuC;AACvC,iEAAiE;AACjE,wCAAwC;AACxC,aAAa;AACb,uBAAuB;AACvB,0EAA0E;AAC1E,SAAS;AACT,MAAM;AACN,mBAAmB;AACnB,oCAAoC;AACpC,qDAAqD;AACrD,+CAA+C;AAC/C,UAAU;AACV,IAAI;AAEJ,MAAM,CAAC,OAAO,UAAU,GAAG;IACzB,OAAO,CACL,KAAC,SAAS,IACR,IAAI,EAAE;YACJ,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,IAAI,kBAAkB;YAC1D,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,IAAI,iBAAiB;YACrD,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,IAAI,uCAAuC;YACjE,OAAO,EACL,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO;gBAC7B,uCAAuC;SAC1C,EACD,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;QACnC,mBAAmB;QACnB,0BAA0B;QAC1B,+CAA+C;QAC/C,kBAAkB;QAClB,IAAI;QACJ,OAAO,EAAE;YACP,GAAG,CAAC,MAAM,CAAC,IAAI;gBACb,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;oBAC1B,CAAC,CAAC,MAAM,CAAC,IAAI;oBACb,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;gBACjB,CAAC,CAAC,EAAE,CACL,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACb,cAAc,CAAC;gBACb,aAAa,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE;aACjC,CAAC,CACH;YACD,GAAG,CAAC,MAAM,CAAC,IAAI;gBACb,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;oBAC1B,CAAC,CAAC,MAAM,CAAC,IAAI;oBACb,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;gBACjB,CAAC,CAAC,EAAE,CACL,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAElC,iBAAiB;YACjB,yBAAyB;YACzB,oFAAoF;YACpF,mCAAmC;YACnC,qEAAqE;YAErE,0BAA0B;YAC1B,gBAAgB;YAChB,QAAQ;YAER,qCAAqC;YACrC,mFAAmF;YACnF,UAAU;YACV,qBAAqB;YACrB,oDAAoD;YACpD,aAAa;YACb,WAAW;YACX,SAAS;YAET,sDAAsD;YACtD,OAAO;YACP,MAAM;SACP,GACD,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { DevPortalContext } from "../core/DevPortalContext.js";
2
+ export interface AuthProvider {
3
+ initialize(context: DevPortalContext): Promise<unknown>;
4
+ login(context: DevPortalContext): Promise<unknown>;
5
+ getToken?: (context: DevPortalContext) => Promise<string | undefined>;
6
+ handleAuthenticationResponse?: (path: Path, context: DevPortalContext) => Promise<unknown>;
7
+ signOut(context: DevPortalContext): void;
8
+ }
9
+ export type Path = {
10
+ pathname: string;
11
+ search: string;
12
+ hash: string;
13
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=authentication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../../src/app/authentication/authentication.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import { type AuthProvider } from "./authentication.js";
2
+ declare const clerkProvider: ({ clerkPubKey, }: {
3
+ clerkPubKey: string;
4
+ }) => AuthProvider;
5
+ export default clerkProvider;
@@ -0,0 +1,36 @@
1
+ import { Clerk } from "@clerk/clerk-js";
2
+ const clerkProvider = ({ clerkPubKey, }) => {
3
+ const clerkApi = new Clerk(clerkPubKey);
4
+ const clerkIsLoaded = clerkApi.load({});
5
+ return {
6
+ initialize: async (context) => {
7
+ await clerkIsLoaded;
8
+ if (clerkApi.session) {
9
+ await context.setUserProfile({
10
+ isLoggedIn: true,
11
+ name: clerkApi.session.user.fullName ?? undefined,
12
+ email: clerkApi.session.user.emailAddresses.at(0)?.emailAddress ??
13
+ undefined,
14
+ });
15
+ }
16
+ else {
17
+ await context.setUserProfile({
18
+ isLoggedIn: false,
19
+ });
20
+ }
21
+ },
22
+ getToken: async () => {
23
+ await clerkIsLoaded;
24
+ const token = await clerkApi.session?.getToken();
25
+ return token ?? undefined;
26
+ },
27
+ signOut() {
28
+ clerkApi.signOut();
29
+ },
30
+ login: async () => {
31
+ await clerkApi.redirectToSignIn();
32
+ },
33
+ };
34
+ };
35
+ export default clerkProvider;
36
+ //# sourceMappingURL=clerk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clerk.js","sourceRoot":"","sources":["../../../src/app/authentication/clerk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,MAAM,aAAa,GAAG,CAAC,EACrB,WAAW,GAGZ,EAAgB,EAAE;IACjB,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;IAExC,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAExC,OAAO;QACL,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC5B,MAAM,aAAa,CAAC;YAEpB,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,MAAM,OAAO,CAAC,cAAc,CAAC;oBAC3B,UAAU,EAAE,IAAI;oBAChB,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,SAAS;oBACjD,KAAK,EACH,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY;wBACxD,SAAS;iBACZ,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,CAAC,cAAc,CAAC;oBAC3B,UAAU,EAAE,KAAK;iBAClB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,MAAM,aAAa,CAAC;YACpB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;YACjD,OAAO,KAAK,IAAI,SAAS,CAAC;QAC5B,CAAC;QAED,OAAO;YACL,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QACpC,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type AuthProvider } from "./authentication.js";
2
+ export type AuthServerOption = {
3
+ issuer?: string;
4
+ authorizationEndpoint?: string;
5
+ tokenEndpoint?: string;
6
+ };
7
+ export declare const openIdAuth: ({ clientId, clientSecret, issuer, authorizationEndpoint, tokenEndpoint, }: {
8
+ clientId: string;
9
+ clientSecret?: string;
10
+ audience?: string;
11
+ } & AuthServerOption) => AuthProvider;
@@ -0,0 +1,118 @@
1
+ import * as oauth from "oauth4webapi";
2
+ const algorithm = "oauth2";
3
+ const getAuthServerByIssuer = async (issuer) => {
4
+ const authorizationServer = await oauth
5
+ .discoveryRequest(new URL(issuer), { algorithm })
6
+ .then((response) => oauth.processDiscoveryResponse(new URL(issuer), response));
7
+ return authorizationServer;
8
+ };
9
+ const getAuthServer = async ({ issuer, authorizationEndpoint, tokenEndpoint, }) => {
10
+ return issuer
11
+ ? await getAuthServerByIssuer(issuer)
12
+ : ({
13
+ issuer: new URL(authorizationEndpoint).origin,
14
+ authorization_endpoint: authorizationEndpoint,
15
+ token_endpoint: tokenEndpoint,
16
+ code_challenge_methods_supported: [],
17
+ });
18
+ };
19
+ export const openIdAuth = ({ clientId, clientSecret, issuer, authorizationEndpoint, tokenEndpoint, }) => {
20
+ const client = {
21
+ client_id: clientId,
22
+ client_secret: clientSecret,
23
+ token_endpoint_auth_method: "none",
24
+ };
25
+ const redirect_uri = "http://localhost:5173/oauth/callback";
26
+ return {
27
+ initialize() {
28
+ return Promise.resolve();
29
+ },
30
+ signOut() { },
31
+ login: async (context) => {
32
+ const code_challenge_method = "S256";
33
+ const authorizationServer = await getAuthServer({
34
+ issuer,
35
+ authorizationEndpoint,
36
+ tokenEndpoint,
37
+ });
38
+ if (!authorizationServer.authorization_endpoint) {
39
+ throw new Error("No authorization endpoint");
40
+ }
41
+ /**
42
+ * The following MUST be generated for every redirect to the authorization_endpoint. You must store
43
+ * the codeVerifier and nonce in the end-user session such that it can be recovered as the user
44
+ * gets redirected from the authorization server back to your application.
45
+ */
46
+ const codeVerifier = oauth.generateRandomCodeVerifier();
47
+ const codeChallenge = await oauth.calculatePKCECodeChallenge(codeVerifier);
48
+ await context.sessionStorage.set("codeVerifier", codeVerifier);
49
+ // redirect user to as.authorization_endpoint
50
+ const authorizationUrl = new URL(authorizationServer.authorization_endpoint);
51
+ authorizationUrl.searchParams.set("client_id", client.client_id);
52
+ authorizationUrl.searchParams.set("redirect_uri", redirect_uri);
53
+ authorizationUrl.searchParams.set("response_type", "code");
54
+ // authorizationUrl.searchParams.set("scope", "api:read");
55
+ authorizationUrl.searchParams.set("code_challenge", codeChallenge);
56
+ authorizationUrl.searchParams.set("code_challenge_method", code_challenge_method);
57
+ /**
58
+ * We cannot be sure the AS supports PKCE so we're going to use state too. Use of PKCE is
59
+ * backwards compatible even if the AS doesn't support it which is why we're using it regardless.
60
+ */
61
+ if (authorizationServer.code_challenge_methods_supported?.includes("S256") !== true) {
62
+ const state = oauth.generateRandomState();
63
+ authorizationUrl.searchParams.set("state", state);
64
+ }
65
+ // now redirect the user to authorizationUrl.href
66
+ location.href = authorizationUrl.href;
67
+ },
68
+ handleAuthenticationResponse: async ({ search }, { sessionStorage }) => {
69
+ const searchParams = new URLSearchParams(search);
70
+ const state = searchParams.get("state");
71
+ if (!state) {
72
+ return;
73
+ }
74
+ // one eternity later, the user lands back on the redirect_uri
75
+ // Authorization Code Grant Request & Response
76
+ const codeVerifier = await sessionStorage.get("codeVerifier");
77
+ if (!codeVerifier) {
78
+ return;
79
+ }
80
+ const as = await getAuthServer({
81
+ issuer,
82
+ authorizationEndpoint,
83
+ tokenEndpoint,
84
+ });
85
+ const params = oauth.validateAuthResponse(as, client, searchParams, state);
86
+ if (oauth.isOAuth2Error(params)) {
87
+ console.error("Error Response", params);
88
+ throw new Error(); // Handle OAuth 2.0 redirect error
89
+ }
90
+ const response = await oauth.authorizationCodeGrantRequest(as, client, params, redirect_uri, codeVerifier);
91
+ // @todo do we need to do these
92
+ // const challenges = oauth.parseWwwAuthenticateChallenges(response);
93
+ // if (challenges) {
94
+ // for (const challenge of challenges) {
95
+ // console.error("WWW-Authenticate Challenge", challenge);
96
+ // }
97
+ // throw new Error(); // Handle WWW-Authenticate Challenges as needed
98
+ // }
99
+ const oauthResult = await oauth.processAuthorizationCodeOpenIDResponse(as, client, response);
100
+ if (oauth.isOAuth2Error(oauthResult)) {
101
+ console.error("Error Response", oauthResult);
102
+ throw new Error(oauthResult.error);
103
+ }
104
+ const userInfoResponse = await oauth.userInfoRequest(as, client, oauthResult.access_token);
105
+ const userInfo = await userInfoResponse.json();
106
+ // void storage.setProfile({
107
+ // sub: userInfo.sub,
108
+ // email: userInfo.email,
109
+ // name: userInfo.name,
110
+ // email_verified: userInfo.email_verified ?? false,
111
+ // picture: userInfo.picture,
112
+ // id_token: oauthResult.id_token,
113
+ // access_token: oauthResult.access_token,
114
+ // });
115
+ },
116
+ };
117
+ };
118
+ //# sourceMappingURL=openid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openid.js","sourceRoot":"","sources":["../../../src/app/authentication/openid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type LinkProps } from "react-router-dom";
2
+ /**
3
+ * Link that scrolls to anchor even if the hash is already set in the URL.
4
+ */
5
+ export declare const AnchorLink: (props: LinkProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Link, useLocation } from "react-router-dom";
3
+ /**
4
+ * Link that scrolls to anchor even if the hash is already set in the URL.
5
+ */
6
+ export const AnchorLink = (props) => {
7
+ const location = useLocation();
8
+ const hash = typeof props.to === "string" ? props.to : props.to.hash;
9
+ const handleClick = (event) => {
10
+ if (!hash?.startsWith("#") || hash !== location.hash)
11
+ return;
12
+ event.preventDefault();
13
+ document.getElementById(hash.slice(1))?.scrollIntoView();
14
+ };
15
+ return _jsx(Link, { onClick: handleClick, ...props });
16
+ };
17
+ //# sourceMappingURL=AnchorLink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnchorLink.js","sourceRoot":"","sources":["../../../src/app/components/AnchorLink.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAkB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAErE;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAgB,EAAE,EAAE;IAC7C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC;IAErE,MAAM,WAAW,GAAG,CAAC,KAA0C,EAAE,EAAE;QACjE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI;YAAE,OAAO;QAE7D,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3D,CAAC,CAAC;IAEF,OAAO,KAAC,IAAI,IAAC,OAAO,EAAE,WAAW,KAAM,KAAK,GAAI,CAAC;AACnD,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ReactNode } from "react";
2
+ export declare const CategoryHeading: ({ children, className, }: {
3
+ children: ReactNode;
4
+ className?: string;
5
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cx } from "class-variance-authority";
3
+ export const CategoryHeading = ({ children, className, }) => {
4
+ return (_jsx("div", { className: cx("text-sm font-semibold text-primary mb-2", className), children: children }));
5
+ };
6
+ //# sourceMappingURL=CategoryHeading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CategoryHeading.js","sourceRoot":"","sources":["../../../src/app/components/CategoryHeading.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC9B,QAAQ,EACR,SAAS,GAIV,EAAE,EAAE;IACH,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,yCAAyC,EAAE,SAAS,CAAC,YACrE,QAAQ,GACL,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export type IconName = string;
2
+ export declare function isValidIcon(name: unknown): name is IconName;
3
+ export declare const DynamicIcon: (props: {
4
+ name: string;
5
+ size?: number;
6
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export function isValidIcon(name) {
3
+ return true;
4
+ }
5
+ export const DynamicIcon = (props) => (_jsx("div", {}));
6
+ //# sourceMappingURL=DynamicIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicIcon.js","sourceRoot":"","sources":["../../../src/app/components/DynamicIcon.tsx"],"names":[],"mappings":";AAqDA,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAsC,EAAE,EAAE,CAAC,CACrE,eAAW,CACZ,CAAC"}
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" resolution-mode="require"/>
2
+ export declare const Header: import("react").MemoExoticComponent<() => import("react/jsx-runtime").JSX.Element>;
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { MoonStarIcon, SearchIcon, SunIcon } from "lucide-react";
3
+ import { memo } from "react";
4
+ import { useDevPortalState } from "../core/DevPortalContext.js";
5
+ import { TopNavigation } from "./TopNavigation.js";
6
+ import { useDevPortal } from "./context/DevPortalProvider.js";
7
+ import { useTheme } from "./context/ThemeContext.js";
8
+ export const Header = memo(() => {
9
+ const [isDark, toggleTheme] = useTheme();
10
+ const { isLoggedIn, email } = useDevPortalState();
11
+ const { login, logout, meta } = useDevPortal();
12
+ const ThemeIcon = isDark ? MoonStarIcon : SunIcon;
13
+ return (_jsx("header", { className: "fixed top-0 w-full z-10 bg-background/80 backdrop-blur", children: _jsxs("div", { className: "max-w-screen-2xl mx-auto", children: [_jsxs("div", { className: "grid grid-cols-[calc(var(--side-nav-width))_1fr] lg:gap-12 items-center border-b border-border px-12 h-[--top-header-height]", children: [_jsxs("div", { className: "flex items-center gap-3.5", children: [meta?.logo && (_jsx("img", { src: meta.logo, alt: "My Dev Portal", className: "h-10" })), _jsx("span", { className: "font-bold text-2xl text-foreground/85 tracking-wide", children: meta?.headerTitle })] }), _jsxs("div", { className: "grid grid-cols-[--sidecar-grid-cols] items-center gap-8", children: [_jsx("div", { className: "w-full max-w-prose mx-auto", children: _jsxs("button", { className: "flex items-center border border-input hover:bg-accent hover:text-accent-foreground p-4 relative h-8 justify-start rounded-lg bg-background text-sm text-muted-foreground shadow-none w-40 sm:w-72", children: [_jsxs("div", { className: "flex items-center gap-2 flex-grow", children: [_jsx(SearchIcon, { size: 14 }), "Search"] }), _jsx("kbd", { className: "absolute right-[0.3rem] top-[0.3rem] hidden h-5 select-none items-center gap-1 rounded border border-border bg-muted px-1.5 font-mono text-[11px] font-medium opacity-100 sm:flex", children: "\u2318K" })] }) }), _jsxs("div", { className: "items-center justify-self-end text-sm hidden lg:flex", children: [!isLoggedIn ? (_jsxs("button", { className: "cursor-pointer hover:bg-secondary p-1 px-2 mx-2 rounded", onClick: logout, children: ["Logout ", email ? `(${email})` : null] })) : (_jsx("button", { className: "cursor-pointer hover:bg-secondary p-1 px-2 mx-2 rounded", onClick: login, children: "Login" })), _jsx("button", { className: "cursor-pointer hover:bg-secondary p-2.5 -m-2.5 rounded-full", onClick: toggleTheme, children: _jsx(ThemeIcon, { size: 18 }) })] })] })] }), _jsx(TopNavigation, {})] }) }));
14
+ });
15
+ //# sourceMappingURL=Header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/app/components/Header.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;IAC9B,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,QAAQ,EAAE,CAAC;IACzC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAClD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,CAAC;IAE/C,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;IAElD,OAAO,CACL,iBAAQ,SAAS,EAAC,wDAAwD,YACxE,eAAK,SAAS,EAAC,0BAA0B,aACvC,eAAK,SAAS,EAAC,8HAA8H,aAC3I,eAAK,SAAS,EAAC,2BAA2B,aACvC,IAAI,EAAE,IAAI,IAAI,CACb,cAAK,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAC,eAAe,EAAC,SAAS,EAAC,MAAM,GAAG,CAC7D,EACD,eAAM,SAAS,EAAC,qDAAqD,YAClE,IAAI,EAAE,WAAW,GACb,IACH,EACN,eAAK,SAAS,EAAC,yDAAyD,aACtE,cAAK,SAAS,EAAC,4BAA4B,YACzC,kBAAQ,SAAS,EAAC,mMAAmM,aACnN,eAAK,SAAS,EAAC,mCAAmC,aAChD,KAAC,UAAU,IAAC,IAAI,EAAE,EAAE,GAAI,cAEpB,EACN,cAAK,SAAS,EAAC,mLAAmL,wBAE5L,IACC,GACL,EACN,eAAK,SAAS,EAAC,sDAAsD,aAClE,CAAC,UAAU,CAAC,CAAC,CAAC,CACb,kBACE,SAAS,EAAC,yDAAyD,EACnE,OAAO,EAAE,MAAM,wBAEP,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,IAC5B,CACV,CAAC,CAAC,CAAC,CACF,iBACE,SAAS,EAAC,yDAAyD,EACnE,OAAO,EAAE,KAAK,sBAGP,CACV,EAED,iBACE,SAAS,EAAC,6DAA6D,EACvE,OAAO,EAAE,WAAW,YAEpB,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,GAAI,GAChB,IACL,IACF,IACF,EACN,KAAC,aAAa,KAAG,IACb,GACC,CACV,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type ReactNode } from "react";
2
+ export declare const Layout: ({ children }: {
3
+ children?: ReactNode;
4
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Suspense, useEffect, useRef } from "react";
3
+ import { Outlet, useLocation } from "react-router-dom";
4
+ import { Helmet } from "../core/helmet.js";
5
+ import { useScrollToAnchor } from "../util/useScrollToAnchor.js";
6
+ import { useScrollToTop } from "../util/useScrollToTop.js";
7
+ import { Header } from "./Header.js";
8
+ import { useDevPortal } from "./context/DevPortalProvider.js";
9
+ import { useViewportAnchor } from "./context/ViewportAnchorContext.js";
10
+ import { SideNavigation } from "./navigation/SideNavigation.js";
11
+ import { SideNavigationWrapper } from "./navigation/SideNavigationWrapper.js";
12
+ export const Layout = ({ children }) => {
13
+ const location = useLocation();
14
+ const { setActiveAnchor } = useViewportAnchor();
15
+ const { meta, handleAuthenticationResponse } = useDevPortal();
16
+ useEffect(() => {
17
+ void handleAuthenticationResponse(location);
18
+ }, [handleAuthenticationResponse, location]);
19
+ useScrollToAnchor();
20
+ useScrollToTop();
21
+ const previousLocationPath = useRef(location.pathname);
22
+ useEffect(() => {
23
+ // always reset on location change
24
+ if (location.pathname !== previousLocationPath.current) {
25
+ setActiveAnchor("");
26
+ }
27
+ previousLocationPath.current = location.pathname;
28
+ }, [location.pathname, setActiveAnchor]);
29
+ return (_jsxs(_Fragment, { children: [_jsxs(Helmet, { titleTemplate: meta?.pageTitle, children: [_jsx("title", { children: "Home" }), meta?.description && (_jsx("meta", { name: "description", content: meta.description })), meta?.favicon && _jsx("link", { rel: "icon", href: meta.favicon })] }), _jsx(Header, {}), _jsxs("div", { className: "max-w-screen-2xl mx-auto pt-[--header-height] px-10 lg:px-12", children: [_jsx(Suspense, { fallback: _jsx(SideNavigationWrapper, { children: "Loading..." }), children: _jsx(SideNavigation, {}) }), _jsx("main", { className: "dark:border-white/10 lg:overflow-visible translate-x-0 lg:w-[calc(100%-var(--side-nav-width))] lg:translate-x-[--side-nav-width] pl-12", children: children ?? _jsx(Outlet, {}) })] })] }));
30
+ };
31
+ //# sourceMappingURL=Layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../../src/app/components/Layout.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAkB,MAAM,OAAO,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EAAE,QAAQ,EAA4B,EAAE,EAAE;IAC/D,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAE,eAAe,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAChD,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE,GAAG,YAAY,EAAE,CAAC;IAE9D,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,EAAE,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE7C,iBAAiB,EAAE,CAAC;IACpB,cAAc,EAAE,CAAC;IAEjB,MAAM,oBAAoB,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,kCAAkC;QAClC,IAAI,QAAQ,CAAC,QAAQ,KAAK,oBAAoB,CAAC,OAAO,EAAE,CAAC;YACvD,eAAe,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC;QACD,oBAAoB,CAAC,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACnD,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;IAEzC,OAAO,CACL,8BACE,MAAC,MAAM,IAAC,aAAa,EAAE,IAAI,EAAE,SAAS,aACpC,mCAAmB,EAClB,IAAI,EAAE,WAAW,IAAI,CACpB,eAAM,IAAI,EAAC,aAAa,EAAC,OAAO,EAAE,IAAI,CAAC,WAAW,GAAI,CACvD,EACA,IAAI,EAAE,OAAO,IAAI,eAAM,GAAG,EAAC,MAAM,EAAC,IAAI,EAAE,IAAI,CAAC,OAAO,GAAI,IAClD,EACT,KAAC,MAAM,KAAG,EACV,eAAK,SAAS,EAAC,8DAA8D,aAC3E,KAAC,QAAQ,IACP,QAAQ,EAAE,KAAC,qBAAqB,6BAAmC,YAEnE,KAAC,cAAc,KAAG,GACT,EACX,eAAM,SAAS,EAAC,wIAAwI,YACrJ,QAAQ,IAAI,KAAC,MAAM,KAAG,GAClB,IACH,IACL,CACJ,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const ProseClasses = "prose dark:prose-invert prose-neutral";
2
+ export declare const Markdown: ({ content, className, }: {
3
+ content: string;
4
+ className?: string;
5
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import ReactMarkdown from "react-markdown";
3
+ import remarkGfm from "remark-gfm";
4
+ import { visit } from "unist-util-visit";
5
+ import { MdxComponents } from "../util/MdxComponents.js";
6
+ // same as in packages/dev-portal/framework/vite.ts
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ const rehypeCodeBlockPlugin = () => (tree) => {
9
+ visit(tree, "element", (node, _index, parent) => {
10
+ if (node.tagName === "code") {
11
+ node.properties.inline = parent?.tagName !== "pre";
12
+ }
13
+ });
14
+ };
15
+ const remarkPlugins = [remarkGfm];
16
+ const rehypePlugins = [rehypeCodeBlockPlugin];
17
+ // other styles are defined in main.css .prose
18
+ export const ProseClasses = "prose dark:prose-invert prose-neutral";
19
+ export const Markdown = ({ content, className, }) => (_jsx(ReactMarkdown, { remarkPlugins: remarkPlugins, rehypePlugins: rehypePlugins, components: MdxComponents, className: className, children: content }));
20
+ //# sourceMappingURL=Markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../../src/app/components/Markdown.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAC3C,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,mDAAmD;AACnD,8DAA8D;AAC9D,MAAM,qBAAqB,GAAG,GAAG,EAAE,CAAC,CAAC,IAAS,EAAE,EAAE;IAChD,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QAC9C,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,EAAE,OAAO,KAAK,KAAK,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,SAAS,CAAC,CAAC;AAClC,MAAM,aAAa,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAE9C,8CAA8C;AAC9C,MAAM,CAAC,MAAM,YAAY,GAAG,uCAAuC,CAAC;AAEpE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EACvB,OAAO,EACP,SAAS,GAIV,EAAE,EAAE,CAAC,CACJ,KAAC,aAAa,IACZ,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,aAAa,EACzB,SAAS,EAAE,SAAS,YAEnB,OAAO,GACM,CACjB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type HighlightProps } from "prism-react-renderer";
2
+ type SyntaxHighlightProps = {
3
+ className?: string;
4
+ noBackground?: boolean;
5
+ wrapLines?: boolean;
6
+ copyable?: boolean;
7
+ } & Omit<HighlightProps, "children">;
8
+ export declare const SyntaxHighlight: ({ copyable, ...props }: SyntaxHighlightProps) => import("react/jsx-runtime").JSX.Element;
9
+ export {};