docusaurus-theme-openapi-docs 0.0.0-1000

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 (312) hide show
  1. package/LICENSE +21 -0
  2. package/babel.config.js +35 -0
  3. package/lib/index.d.ts +2 -0
  4. package/lib/index.js +81 -0
  5. package/lib/markdown/createDescription.d.ts +1 -0
  6. package/lib/markdown/createDescription.js +15 -0
  7. package/lib/markdown/schema.d.ts +3 -0
  8. package/lib/markdown/schema.js +149 -0
  9. package/lib/markdown/utils.d.ts +10 -0
  10. package/lib/markdown/utils.js +49 -0
  11. package/lib/markdown/utils.test.d.ts +1 -0
  12. package/lib/markdown/utils.test.js +43 -0
  13. package/lib/theme/ApiExplorer/Accept/index.d.ts +3 -0
  14. package/lib/theme/ApiExplorer/Accept/index.js +38 -0
  15. package/lib/theme/ApiExplorer/Accept/slice.d.ts +11 -0
  16. package/lib/theme/ApiExplorer/Accept/slice.js +22 -0
  17. package/lib/theme/ApiExplorer/ApiCodeBlock/Container/_Container.scss +7 -0
  18. package/lib/theme/ApiExplorer/ApiCodeBlock/Container/index.d.ts +4 -0
  19. package/lib/theme/ApiExplorer/ApiCodeBlock/Container/index.js +35 -0
  20. package/lib/theme/ApiExplorer/ApiCodeBlock/Content/Element.d.ts +3 -0
  21. package/lib/theme/ApiExplorer/ApiCodeBlock/Content/Element.js +41 -0
  22. package/lib/theme/ApiExplorer/ApiCodeBlock/Content/String.d.ts +3 -0
  23. package/lib/theme/ApiExplorer/ApiCodeBlock/Content/String.js +153 -0
  24. package/lib/theme/ApiExplorer/ApiCodeBlock/Content/_Content.scss +91 -0
  25. package/lib/theme/ApiExplorer/ApiCodeBlock/CopyButton/_CopyButton.scss +44 -0
  26. package/lib/theme/ApiExplorer/ApiCodeBlock/CopyButton/index.d.ts +3 -0
  27. package/lib/theme/ApiExplorer/ApiCodeBlock/CopyButton/index.js +147 -0
  28. package/lib/theme/ApiExplorer/ApiCodeBlock/ExitButton/_ExitButton.scss +16 -0
  29. package/lib/theme/ApiExplorer/ApiCodeBlock/ExitButton/index.d.ts +6 -0
  30. package/lib/theme/ApiExplorer/ApiCodeBlock/ExitButton/index.js +58 -0
  31. package/lib/theme/ApiExplorer/ApiCodeBlock/ExpandButton/_ExpandButton.scss +62 -0
  32. package/lib/theme/ApiExplorer/ApiCodeBlock/ExpandButton/index.d.ts +14 -0
  33. package/lib/theme/ApiExplorer/ApiCodeBlock/ExpandButton/index.js +248 -0
  34. package/lib/theme/ApiExplorer/ApiCodeBlock/Line/_Line.scss +34 -0
  35. package/lib/theme/ApiExplorer/ApiCodeBlock/Line/index.d.ts +3 -0
  36. package/lib/theme/ApiExplorer/ApiCodeBlock/Line/index.js +59 -0
  37. package/lib/theme/ApiExplorer/ApiCodeBlock/WordWrapButton/_WordWrapButton.scss +10 -0
  38. package/lib/theme/ApiExplorer/ApiCodeBlock/WordWrapButton/index.d.ts +7 -0
  39. package/lib/theme/ApiExplorer/ApiCodeBlock/WordWrapButton/index.js +51 -0
  40. package/lib/theme/ApiExplorer/ApiCodeBlock/index.d.ts +3 -0
  41. package/lib/theme/ApiExplorer/ApiCodeBlock/index.js +110 -0
  42. package/lib/theme/ApiExplorer/Authorization/auth-types.d.ts +3 -0
  43. package/lib/theme/ApiExplorer/Authorization/auth-types.js +28 -0
  44. package/lib/theme/ApiExplorer/Authorization/index.d.ts +3 -0
  45. package/lib/theme/ApiExplorer/Authorization/index.js +160 -0
  46. package/lib/theme/ApiExplorer/Authorization/slice.d.ts +40 -0
  47. package/lib/theme/ApiExplorer/Authorization/slice.js +102 -0
  48. package/lib/theme/ApiExplorer/Body/index.d.ts +10 -0
  49. package/lib/theme/ApiExplorer/Body/index.js +381 -0
  50. package/lib/theme/ApiExplorer/Body/json2xml.js +43 -0
  51. package/lib/theme/ApiExplorer/Body/slice.d.ts +82 -0
  52. package/lib/theme/ApiExplorer/Body/slice.js +97 -0
  53. package/lib/theme/ApiExplorer/CodeSnippets/code-snippets-types.d.ts +21 -0
  54. package/lib/theme/ApiExplorer/CodeSnippets/code-snippets-types.js +8 -0
  55. package/lib/theme/ApiExplorer/CodeSnippets/index.d.ts +10 -0
  56. package/lib/theme/ApiExplorer/CodeSnippets/index.js +389 -0
  57. package/lib/theme/ApiExplorer/CodeSnippets/languages.d.ts +5 -0
  58. package/lib/theme/ApiExplorer/CodeSnippets/languages.js +95 -0
  59. package/lib/theme/ApiExplorer/CodeSnippets/languages.json +1290 -0
  60. package/lib/theme/ApiExplorer/CodeTabs/_CodeTabs.scss +501 -0
  61. package/lib/theme/ApiExplorer/CodeTabs/index.d.ts +15 -0
  62. package/lib/theme/ApiExplorer/CodeTabs/index.js +271 -0
  63. package/lib/theme/ApiExplorer/ContentType/index.d.ts +3 -0
  64. package/lib/theme/ApiExplorer/ContentType/index.js +40 -0
  65. package/lib/theme/ApiExplorer/ContentType/slice.d.ts +11 -0
  66. package/lib/theme/ApiExplorer/ContentType/slice.js +22 -0
  67. package/lib/theme/ApiExplorer/Export/index.d.ts +3 -0
  68. package/lib/theme/ApiExplorer/Export/index.js +57 -0
  69. package/lib/theme/ApiExplorer/FloatingButton/_FloatingButton.scss +27 -0
  70. package/lib/theme/ApiExplorer/FloatingButton/index.d.ts +8 -0
  71. package/lib/theme/ApiExplorer/FloatingButton/index.js +28 -0
  72. package/lib/theme/ApiExplorer/FormFileUpload/_FormFileUpload.scss +74 -0
  73. package/lib/theme/ApiExplorer/FormFileUpload/index.d.ts +7 -0
  74. package/lib/theme/ApiExplorer/FormFileUpload/index.js +173 -0
  75. package/lib/theme/ApiExplorer/FormItem/_FormItem.scss +21 -0
  76. package/lib/theme/ApiExplorer/FormItem/index.d.ts +10 -0
  77. package/lib/theme/ApiExplorer/FormItem/index.js +44 -0
  78. package/lib/theme/ApiExplorer/FormMultiSelect/_FormMultiSelect.scss +30 -0
  79. package/lib/theme/ApiExplorer/FormMultiSelect/index.d.ts +9 -0
  80. package/lib/theme/ApiExplorer/FormMultiSelect/index.js +51 -0
  81. package/lib/theme/ApiExplorer/FormSelect/_FormSelect.scss +43 -0
  82. package/lib/theme/ApiExplorer/FormSelect/index.d.ts +8 -0
  83. package/lib/theme/ApiExplorer/FormSelect/index.js +35 -0
  84. package/lib/theme/ApiExplorer/FormTextInput/_FormTextInput.scss +34 -0
  85. package/lib/theme/ApiExplorer/FormTextInput/index.d.ts +9 -0
  86. package/lib/theme/ApiExplorer/FormTextInput/index.js +73 -0
  87. package/lib/theme/ApiExplorer/LiveEditor/_LiveEditor.scss +15 -0
  88. package/lib/theme/ApiExplorer/LiveEditor/index.d.ts +6 -0
  89. package/lib/theme/ApiExplorer/LiveEditor/index.js +168 -0
  90. package/lib/theme/ApiExplorer/MethodEndpoint/_MethodEndpoint.scss +22 -0
  91. package/lib/theme/ApiExplorer/MethodEndpoint/index.d.ts +8 -0
  92. package/lib/theme/ApiExplorer/MethodEndpoint/index.js +86 -0
  93. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamArrayFormItem.d.ts +6 -0
  94. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamArrayFormItem.js +220 -0
  95. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamBooleanFormItem.d.ts +6 -0
  96. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamBooleanFormItem.js +63 -0
  97. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamMultiSelectFormItem.d.ts +6 -0
  98. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamMultiSelectFormItem.js +89 -0
  99. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamSelectFormItem.d.ts +6 -0
  100. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamSelectFormItem.js +63 -0
  101. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamTextFormItem.d.ts +6 -0
  102. package/lib/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamTextFormItem.js +38 -0
  103. package/lib/theme/ApiExplorer/ParamOptions/_ParamOptions.scss +123 -0
  104. package/lib/theme/ApiExplorer/ParamOptions/index.d.ts +7 -0
  105. package/lib/theme/ApiExplorer/ParamOptions/index.js +223 -0
  106. package/lib/theme/ApiExplorer/ParamOptions/slice.d.ts +17 -0
  107. package/lib/theme/ApiExplorer/ParamOptions/slice.js +25 -0
  108. package/lib/theme/ApiExplorer/Request/_Request.scss +129 -0
  109. package/lib/theme/ApiExplorer/Request/index.d.ts +6 -0
  110. package/lib/theme/ApiExplorer/Request/index.js +396 -0
  111. package/lib/theme/ApiExplorer/Request/makeRequest.d.ts +4 -0
  112. package/lib/theme/ApiExplorer/Request/makeRequest.js +222 -0
  113. package/lib/theme/ApiExplorer/Response/_Response.scss +121 -0
  114. package/lib/theme/ApiExplorer/Response/index.d.ts +6 -0
  115. package/lib/theme/ApiExplorer/Response/index.js +193 -0
  116. package/lib/theme/ApiExplorer/Response/slice.d.ts +17 -0
  117. package/lib/theme/ApiExplorer/Response/slice.js +51 -0
  118. package/lib/theme/ApiExplorer/SecuritySchemes/index.d.ts +3 -0
  119. package/lib/theme/ApiExplorer/SecuritySchemes/index.js +380 -0
  120. package/lib/theme/ApiExplorer/Server/_Server.scss +26 -0
  121. package/lib/theme/ApiExplorer/Server/index.d.ts +3 -0
  122. package/lib/theme/ApiExplorer/Server/index.js +199 -0
  123. package/lib/theme/ApiExplorer/Server/slice.d.ts +13 -0
  124. package/lib/theme/ApiExplorer/Server/slice.js +33 -0
  125. package/lib/theme/ApiExplorer/buildPostmanRequest.d.ts +20 -0
  126. package/lib/theme/ApiExplorer/buildPostmanRequest.js +465 -0
  127. package/lib/theme/ApiExplorer/index.d.ts +7 -0
  128. package/lib/theme/ApiExplorer/index.js +41 -0
  129. package/lib/theme/ApiExplorer/persistanceMiddleware.d.ts +3 -0
  130. package/lib/theme/ApiExplorer/persistanceMiddleware.js +54 -0
  131. package/lib/theme/ApiExplorer/storage-utils.d.ts +4 -0
  132. package/lib/theme/ApiExplorer/storage-utils.js +41 -0
  133. package/lib/theme/ApiItem/Layout/index.d.ts +3 -0
  134. package/lib/theme/ApiItem/Layout/index.js +121 -0
  135. package/lib/theme/ApiItem/Layout/styles.module.css +17 -0
  136. package/lib/theme/ApiItem/hooks.d.ts +12 -0
  137. package/lib/theme/ApiItem/hooks.js +13 -0
  138. package/lib/theme/ApiItem/index.d.ts +2 -0
  139. package/lib/theme/ApiItem/index.js +238 -0
  140. package/lib/theme/ApiItem/store.d.ts +46 -0
  141. package/lib/theme/ApiItem/store.js +53 -0
  142. package/lib/theme/ApiLogo/index.d.ts +2 -0
  143. package/lib/theme/ApiLogo/index.js +51 -0
  144. package/lib/theme/ApiTabs/_ApiTabs.scss +142 -0
  145. package/lib/theme/ApiTabs/index.d.ts +7 -0
  146. package/lib/theme/ApiTabs/index.js +270 -0
  147. package/lib/theme/ArrayBrackets/index.d.ts +3 -0
  148. package/lib/theme/ArrayBrackets/index.js +50 -0
  149. package/lib/theme/DiscriminatorTabs/_DiscriminatorTabs.scss +98 -0
  150. package/lib/theme/DiscriminatorTabs/index.d.ts +3 -0
  151. package/lib/theme/DiscriminatorTabs/index.js +258 -0
  152. package/lib/theme/Markdown/Details/_Details.scss +122 -0
  153. package/lib/theme/Markdown/index.js +179 -0
  154. package/lib/theme/MimeTabs/_MimeTabs.scss +70 -0
  155. package/lib/theme/MimeTabs/index.d.ts +6 -0
  156. package/lib/theme/MimeTabs/index.js +286 -0
  157. package/lib/theme/OperationTabs/_OperationTabs.scss +72 -0
  158. package/lib/theme/OperationTabs/index.d.ts +3 -0
  159. package/lib/theme/OperationTabs/index.js +248 -0
  160. package/lib/theme/ParamsDetails/index.d.ts +6 -0
  161. package/lib/theme/ParamsDetails/index.js +85 -0
  162. package/lib/theme/ParamsItem/_ParamsItem.scss +54 -0
  163. package/lib/theme/ParamsItem/index.d.ts +25 -0
  164. package/lib/theme/ParamsItem/index.js +218 -0
  165. package/lib/theme/RequestSchema/index.d.ts +15 -0
  166. package/lib/theme/RequestSchema/index.js +194 -0
  167. package/lib/theme/ResponseExamples/index.d.ts +18 -0
  168. package/lib/theme/ResponseExamples/index.js +193 -0
  169. package/lib/theme/ResponseHeaders/index.d.ts +13 -0
  170. package/lib/theme/ResponseHeaders/index.js +39 -0
  171. package/lib/theme/ResponseSamples/_ResponseSamples.scss +3 -0
  172. package/lib/theme/ResponseSamples/index.d.ts +8 -0
  173. package/lib/theme/ResponseSamples/index.js +27 -0
  174. package/lib/theme/ResponseSchema/index.d.ts +15 -0
  175. package/lib/theme/ResponseSchema/index.js +159 -0
  176. package/lib/theme/Schema/index.d.ts +8 -0
  177. package/lib/theme/Schema/index.js +885 -0
  178. package/lib/theme/SchemaItem/_SchemaItem.scss +89 -0
  179. package/lib/theme/SchemaItem/index.d.ts +12 -0
  180. package/lib/theme/SchemaItem/index.js +213 -0
  181. package/lib/theme/SchemaTabs/_SchemaTabs.scss +61 -0
  182. package/lib/theme/SchemaTabs/index.d.ts +3 -0
  183. package/lib/theme/SchemaTabs/index.js +255 -0
  184. package/lib/theme/SkeletonLoader/index.d.ts +6 -0
  185. package/lib/theme/SkeletonLoader/index.js +20 -0
  186. package/lib/theme/StatusCodes/index.d.ts +9 -0
  187. package/lib/theme/StatusCodes/index.js +81 -0
  188. package/lib/theme/styles.scss +212 -0
  189. package/lib/types.d.ts +157 -0
  190. package/lib/types.js +8 -0
  191. package/package.json +83 -0
  192. package/src/index.ts +85 -0
  193. package/src/markdown/createDescription.ts +13 -0
  194. package/src/markdown/schema.ts +181 -0
  195. package/src/markdown/utils.test.ts +49 -0
  196. package/src/markdown/utils.ts +59 -0
  197. package/src/plugin-content-docs.d.ts +20 -0
  198. package/src/postman-code-generators.d.ts +9 -0
  199. package/src/react-magic-dropzone.d.ts +9 -0
  200. package/src/theme/ApiExplorer/Accept/index.tsx +36 -0
  201. package/src/theme/ApiExplorer/Accept/slice.ts +29 -0
  202. package/src/theme/ApiExplorer/ApiCodeBlock/Container/_Container.scss +7 -0
  203. package/src/theme/ApiExplorer/ApiCodeBlock/Container/index.tsx +32 -0
  204. package/src/theme/ApiExplorer/ApiCodeBlock/Content/Element.tsx +34 -0
  205. package/src/theme/ApiExplorer/ApiCodeBlock/Content/String.tsx +134 -0
  206. package/src/theme/ApiExplorer/ApiCodeBlock/Content/_Content.scss +91 -0
  207. package/src/theme/ApiExplorer/ApiCodeBlock/CopyButton/_CopyButton.scss +44 -0
  208. package/src/theme/ApiExplorer/ApiCodeBlock/CopyButton/index.tsx +79 -0
  209. package/src/theme/ApiExplorer/ApiCodeBlock/ExitButton/_ExitButton.scss +16 -0
  210. package/src/theme/ApiExplorer/ApiCodeBlock/ExitButton/index.tsx +55 -0
  211. package/src/theme/ApiExplorer/ApiCodeBlock/ExpandButton/_ExpandButton.scss +62 -0
  212. package/src/theme/ApiExplorer/ApiCodeBlock/ExpandButton/index.tsx +166 -0
  213. package/src/theme/ApiExplorer/ApiCodeBlock/Line/_Line.scss +34 -0
  214. package/src/theme/ApiExplorer/ApiCodeBlock/Line/index.tsx +48 -0
  215. package/src/theme/ApiExplorer/ApiCodeBlock/WordWrapButton/_WordWrapButton.scss +10 -0
  216. package/src/theme/ApiExplorer/ApiCodeBlock/WordWrapButton/index.tsx +54 -0
  217. package/src/theme/ApiExplorer/ApiCodeBlock/index.tsx +45 -0
  218. package/src/theme/ApiExplorer/Authorization/auth-types.ts +30 -0
  219. package/src/theme/ApiExplorer/Authorization/index.tsx +158 -0
  220. package/src/theme/ApiExplorer/Authorization/slice.ts +146 -0
  221. package/src/theme/ApiExplorer/Body/index.tsx +376 -0
  222. package/src/theme/ApiExplorer/Body/json2xml.js +43 -0
  223. package/src/theme/ApiExplorer/Body/slice.ts +133 -0
  224. package/src/theme/ApiExplorer/CodeSnippets/code-snippets-types.ts +57 -0
  225. package/src/theme/ApiExplorer/CodeSnippets/index.tsx +338 -0
  226. package/src/theme/ApiExplorer/CodeSnippets/languages.json +1290 -0
  227. package/src/theme/ApiExplorer/CodeSnippets/languages.ts +96 -0
  228. package/src/theme/ApiExplorer/CodeTabs/_CodeTabs.scss +501 -0
  229. package/src/theme/ApiExplorer/CodeTabs/index.tsx +248 -0
  230. package/src/theme/ApiExplorer/ContentType/index.tsx +38 -0
  231. package/src/theme/ApiExplorer/ContentType/slice.ts +29 -0
  232. package/src/theme/ApiExplorer/Export/index.tsx +47 -0
  233. package/src/theme/ApiExplorer/FloatingButton/_FloatingButton.scss +27 -0
  234. package/src/theme/ApiExplorer/FloatingButton/index.tsx +29 -0
  235. package/src/theme/ApiExplorer/FormFileUpload/_FormFileUpload.scss +74 -0
  236. package/src/theme/ApiExplorer/FormFileUpload/index.tsx +119 -0
  237. package/src/theme/ApiExplorer/FormItem/_FormItem.scss +21 -0
  238. package/src/theme/ApiExplorer/FormItem/index.tsx +33 -0
  239. package/src/theme/ApiExplorer/FormMultiSelect/_FormMultiSelect.scss +30 -0
  240. package/src/theme/ApiExplorer/FormMultiSelect/index.tsx +57 -0
  241. package/src/theme/ApiExplorer/FormSelect/_FormSelect.scss +43 -0
  242. package/src/theme/ApiExplorer/FormSelect/index.tsx +38 -0
  243. package/src/theme/ApiExplorer/FormTextInput/_FormTextInput.scss +34 -0
  244. package/src/theme/ApiExplorer/FormTextInput/index.tsx +80 -0
  245. package/src/theme/ApiExplorer/LiveEditor/_LiveEditor.scss +15 -0
  246. package/src/theme/ApiExplorer/LiveEditor/index.tsx +114 -0
  247. package/src/theme/ApiExplorer/MethodEndpoint/_MethodEndpoint.scss +22 -0
  248. package/src/theme/ApiExplorer/MethodEndpoint/index.tsx +91 -0
  249. package/src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamArrayFormItem.tsx +175 -0
  250. package/src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamBooleanFormItem.tsx +64 -0
  251. package/src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamMultiSelectFormItem.tsx +86 -0
  252. package/src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamSelectFormItem.tsx +65 -0
  253. package/src/theme/ApiExplorer/ParamOptions/ParamFormItems/ParamTextFormItem.tsx +38 -0
  254. package/src/theme/ApiExplorer/ParamOptions/_ParamOptions.scss +123 -0
  255. package/src/theme/ApiExplorer/ParamOptions/index.tsx +146 -0
  256. package/src/theme/ApiExplorer/ParamOptions/slice.ts +37 -0
  257. package/src/theme/ApiExplorer/Request/_Request.scss +129 -0
  258. package/src/theme/ApiExplorer/Request/index.tsx +309 -0
  259. package/src/theme/ApiExplorer/Request/makeRequest.ts +254 -0
  260. package/src/theme/ApiExplorer/Response/_Response.scss +121 -0
  261. package/src/theme/ApiExplorer/Response/index.tsx +157 -0
  262. package/src/theme/ApiExplorer/Response/slice.ts +52 -0
  263. package/src/theme/ApiExplorer/SecuritySchemes/index.tsx +287 -0
  264. package/src/theme/ApiExplorer/Server/_Server.scss +26 -0
  265. package/src/theme/ApiExplorer/Server/index.tsx +130 -0
  266. package/src/theme/ApiExplorer/Server/slice.ts +39 -0
  267. package/src/theme/ApiExplorer/buildPostmanRequest.ts +526 -0
  268. package/src/theme/ApiExplorer/index.tsx +41 -0
  269. package/src/theme/ApiExplorer/persistanceMiddleware.ts +71 -0
  270. package/src/theme/ApiExplorer/postman-collection.d.ts +10 -0
  271. package/src/theme/ApiExplorer/react-modal.d.ts +8 -0
  272. package/src/theme/ApiExplorer/storage-utils.ts +39 -0
  273. package/src/theme/ApiItem/Layout/index.tsx +85 -0
  274. package/src/theme/ApiItem/Layout/styles.module.css +17 -0
  275. package/src/theme/ApiItem/hooks.ts +13 -0
  276. package/src/theme/ApiItem/index.tsx +222 -0
  277. package/src/theme/ApiItem/store.ts +51 -0
  278. package/src/theme/ApiLogo/index.tsx +52 -0
  279. package/src/theme/ApiTabs/_ApiTabs.scss +142 -0
  280. package/src/theme/ApiTabs/index.tsx +238 -0
  281. package/src/theme/ArrayBrackets/index.tsx +37 -0
  282. package/src/theme/DiscriminatorTabs/_DiscriminatorTabs.scss +98 -0
  283. package/src/theme/DiscriminatorTabs/index.tsx +229 -0
  284. package/src/theme/Markdown/Details/_Details.scss +122 -0
  285. package/src/theme/Markdown/index.js +179 -0
  286. package/src/theme/MimeTabs/_MimeTabs.scss +70 -0
  287. package/src/theme/MimeTabs/index.tsx +257 -0
  288. package/src/theme/OperationTabs/_OperationTabs.scss +72 -0
  289. package/src/theme/OperationTabs/index.tsx +220 -0
  290. package/src/theme/ParamsDetails/index.tsx +81 -0
  291. package/src/theme/ParamsItem/_ParamsItem.scss +54 -0
  292. package/src/theme/ParamsItem/index.tsx +205 -0
  293. package/src/theme/RequestSchema/index.tsx +157 -0
  294. package/src/theme/ResponseExamples/index.tsx +192 -0
  295. package/src/theme/ResponseHeaders/index.tsx +49 -0
  296. package/src/theme/ResponseSamples/_ResponseSamples.scss +3 -0
  297. package/src/theme/ResponseSamples/index.tsx +31 -0
  298. package/src/theme/ResponseSchema/index.tsx +144 -0
  299. package/src/theme/Schema/index.tsx +939 -0
  300. package/src/theme/SchemaItem/_SchemaItem.scss +89 -0
  301. package/src/theme/SchemaItem/index.tsx +198 -0
  302. package/src/theme/SchemaTabs/_SchemaTabs.scss +61 -0
  303. package/src/theme/SchemaTabs/index.tsx +224 -0
  304. package/src/theme/SkeletonLoader/index.tsx +18 -0
  305. package/src/theme/StatusCodes/index.tsx +72 -0
  306. package/src/theme/styles.scss +212 -0
  307. package/src/theme-classic.d.ts +80 -0
  308. package/src/theme-openapi.d.ts +288 -0
  309. package/src/theme-translations.d.ts +9 -0
  310. package/src/types.ts +182 -0
  311. package/tsconfig.json +16 -0
  312. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,309 @@
1
+ /* ============================================================================
2
+ * Copyright (c) Palo Alto Networks
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ * ========================================================================== */
7
+
8
+ // @ts-nocheck
9
+ import React, { useState } from "react";
10
+
11
+ import { useDoc } from "@docusaurus/plugin-content-docs/client";
12
+ import Accept from "@theme/ApiExplorer/Accept";
13
+ import Authorization from "@theme/ApiExplorer/Authorization";
14
+ import Body from "@theme/ApiExplorer/Body";
15
+ import buildPostmanRequest from "@theme/ApiExplorer/buildPostmanRequest";
16
+ import ContentType from "@theme/ApiExplorer/ContentType";
17
+ import ParamOptions from "@theme/ApiExplorer/ParamOptions";
18
+ import {
19
+ setResponse,
20
+ setCode,
21
+ clearCode,
22
+ setHeaders,
23
+ clearHeaders,
24
+ } from "@theme/ApiExplorer/Response/slice";
25
+ import Server from "@theme/ApiExplorer/Server";
26
+ import { useTypedDispatch, useTypedSelector } from "@theme/ApiItem/hooks";
27
+ import { ParameterObject } from "docusaurus-plugin-openapi-docs/src/openapi/types";
28
+ import { ApiItem } from "docusaurus-plugin-openapi-docs/src/types";
29
+ import sdk from "postman-collection";
30
+ import { FormProvider, useForm } from "react-hook-form";
31
+
32
+ import makeRequest from "./makeRequest";
33
+
34
+ function Request({ item }: { item: ApiItem }) {
35
+ const postman = new sdk.Request(item.postman);
36
+ const metadata = useDoc();
37
+ const { proxy, hide_send_button: hideSendButton } = metadata.frontMatter;
38
+
39
+ const pathParams = useTypedSelector((state: any) => state.params.path);
40
+ const queryParams = useTypedSelector((state: any) => state.params.query);
41
+ const cookieParams = useTypedSelector((state: any) => state.params.cookie);
42
+ const contentType = useTypedSelector((state: any) => state.contentType.value);
43
+ const headerParams = useTypedSelector((state: any) => state.params.header);
44
+ const body = useTypedSelector((state: any) => state.body);
45
+ const accept = useTypedSelector((state: any) => state.accept.value);
46
+ const acceptOptions = useTypedDispatch((state: any) => state.accept.options);
47
+ const authSelected = useTypedSelector((state: any) => state.auth.selected);
48
+ const server = useTypedSelector((state: any) => state.server.value);
49
+ const serverOptions = useTypedSelector((state: any) => state.server.options);
50
+ const auth = useTypedSelector((state: any) => state.auth);
51
+ const dispatch = useTypedDispatch();
52
+
53
+ const [expandAccept, setExpandAccept] = useState(true);
54
+ const [expandAuth, setExpandAuth] = useState(true);
55
+ const [expandBody, setExpandBody] = useState(true);
56
+ const [expandParams, setExpandParams] = useState(true);
57
+ const [expandServer, setExpandServer] = useState(true);
58
+
59
+ const allParams = [
60
+ ...pathParams,
61
+ ...queryParams,
62
+ ...cookieParams,
63
+ ...headerParams,
64
+ ];
65
+
66
+ const postmanRequest = buildPostmanRequest(postman, {
67
+ queryParams,
68
+ pathParams,
69
+ cookieParams,
70
+ contentType,
71
+ accept,
72
+ headerParams,
73
+ body,
74
+ server,
75
+ auth,
76
+ });
77
+
78
+ const delay = (ms: number) =>
79
+ new Promise((resolve) => setTimeout(resolve, ms));
80
+
81
+ const paramsObject = {
82
+ path: [] as ParameterObject[],
83
+ query: [] as ParameterObject[],
84
+ header: [] as ParameterObject[],
85
+ cookie: [] as ParameterObject[],
86
+ };
87
+
88
+ item.parameters?.forEach(
89
+ (param: { in: "path" | "query" | "header" | "cookie" }) => {
90
+ const paramType = param.in;
91
+ const paramsArray: ParameterObject[] = paramsObject[paramType];
92
+ paramsArray.push(param as ParameterObject);
93
+ }
94
+ );
95
+
96
+ const methods = useForm({ shouldFocusError: false });
97
+
98
+ const handleEventStream = async (res) => {
99
+ res.headers && dispatch(setHeaders(Object.fromEntries(res.headers)));
100
+ dispatch(setCode(res.status));
101
+
102
+ const reader = res.body.getReader();
103
+ const decoder = new TextDecoder();
104
+ let result = "";
105
+ while (true) {
106
+ const { done, value } = await reader.read();
107
+ if (done) break;
108
+ result += decoder.decode(value, { stream: true });
109
+ dispatch(setResponse(result));
110
+ }
111
+ };
112
+
113
+ const handleResponse = async (res) => {
114
+ dispatch(setResponse(await res.text()));
115
+ dispatch(setCode(res.status));
116
+ res.headers && dispatch(setHeaders(Object.fromEntries(res.headers)));
117
+ };
118
+
119
+ const onSubmit = async (data) => {
120
+ dispatch(setResponse("Fetching..."));
121
+ try {
122
+ await delay(1200);
123
+ const res = await makeRequest(postmanRequest, proxy, body);
124
+ if (res.headers.get("content-type")?.includes("text/event-stream")) {
125
+ await handleEventStream(res);
126
+ } else {
127
+ await handleResponse(res);
128
+ }
129
+ } catch (e: any) {
130
+ console.log(e);
131
+ dispatch(setResponse("Connection failed"));
132
+ dispatch(clearCode());
133
+ dispatch(clearHeaders());
134
+ }
135
+ };
136
+
137
+ const showServerOptions = serverOptions.length > 0;
138
+ const showAcceptOptions = acceptOptions.length > 1;
139
+ const showRequestBody = contentType !== undefined;
140
+ const showRequestButton = item.servers && !hideSendButton;
141
+ const showAuth = authSelected !== undefined;
142
+ const showParams = allParams.length > 0;
143
+ const requestBodyRequired = item.requestBody?.required;
144
+
145
+ if (
146
+ !showAcceptOptions &&
147
+ !showAuth &&
148
+ !showParams &&
149
+ !showRequestBody &&
150
+ !showServerOptions
151
+ ) {
152
+ return null;
153
+ }
154
+
155
+ const expandAllDetails = () => {
156
+ setExpandAccept(true);
157
+ setExpandAuth(true);
158
+ setExpandBody(true);
159
+ setExpandParams(true);
160
+ setExpandServer(true);
161
+ };
162
+
163
+ const collapseAllDetails = () => {
164
+ setExpandAccept(false);
165
+ setExpandAuth(false);
166
+ setExpandBody(false);
167
+ setExpandParams(false);
168
+ setExpandServer(false);
169
+ };
170
+
171
+ const allDetailsExpanded =
172
+ expandParams && expandBody && expandServer && expandAuth && expandAccept;
173
+
174
+ return (
175
+ <FormProvider {...methods}>
176
+ <form
177
+ className="openapi-explorer__request-form"
178
+ onSubmit={methods.handleSubmit(onSubmit)}
179
+ >
180
+ <div className="openapi-explorer__request-header-container">
181
+ <span className="openapi-explorer__request-title">Request </span>
182
+ {allDetailsExpanded ? (
183
+ <span
184
+ className="openapi-explorer__expand-details-btn"
185
+ onClick={collapseAllDetails}
186
+ >
187
+ Collapse all
188
+ </span>
189
+ ) : (
190
+ <span
191
+ className="openapi-explorer__expand-details-btn"
192
+ onClick={expandAllDetails}
193
+ >
194
+ Expand all
195
+ </span>
196
+ )}
197
+ </div>
198
+ <div className="openapi-explorer__details-outer-container">
199
+ {showServerOptions && item.method !== "event" && (
200
+ <details
201
+ open={expandServer}
202
+ className="openapi-explorer__details-container"
203
+ >
204
+ <summary
205
+ className="openapi-explorer__details-summary"
206
+ onClick={(e) => {
207
+ e.preventDefault();
208
+ setExpandServer(!expandServer);
209
+ }}
210
+ >
211
+ Base URL
212
+ </summary>
213
+ <Server />
214
+ </details>
215
+ )}
216
+ {showAuth && (
217
+ <details
218
+ open={expandAuth}
219
+ className="openapi-explorer__details-container"
220
+ >
221
+ <summary
222
+ className="openapi-explorer__details-summary"
223
+ onClick={(e) => {
224
+ e.preventDefault();
225
+ setExpandAuth(!expandAuth);
226
+ }}
227
+ >
228
+ Auth
229
+ </summary>
230
+ <Authorization />
231
+ </details>
232
+ )}
233
+ {showParams && (
234
+ <details
235
+ open={
236
+ expandParams || Object.keys(methods.formState.errors).length
237
+ }
238
+ className="openapi-explorer__details-container"
239
+ >
240
+ <summary
241
+ className="openapi-explorer__details-summary"
242
+ onClick={(e) => {
243
+ e.preventDefault();
244
+ setExpandParams(!expandParams);
245
+ }}
246
+ >
247
+ Parameters
248
+ </summary>
249
+ <ParamOptions />
250
+ </details>
251
+ )}
252
+ {showRequestBody && (
253
+ <details
254
+ open={expandBody}
255
+ className="openapi-explorer__details-container"
256
+ >
257
+ <summary
258
+ className="openapi-explorer__details-summary"
259
+ onClick={(e) => {
260
+ e.preventDefault();
261
+ setExpandBody(!expandBody);
262
+ }}
263
+ >
264
+ Body
265
+ {requestBodyRequired && (
266
+ <span className="openapi-schema__required">
267
+ &nbsp;required
268
+ </span>
269
+ )}
270
+ </summary>
271
+ <>
272
+ <ContentType />
273
+ <Body
274
+ jsonRequestBodyExample={item.jsonRequestBodyExample}
275
+ requestBodyMetadata={item.requestBody}
276
+ required={requestBodyRequired}
277
+ />
278
+ </>
279
+ </details>
280
+ )}
281
+ {showAcceptOptions && (
282
+ <details
283
+ open={expandAccept}
284
+ className="openapi-explorer__details-container"
285
+ >
286
+ <summary
287
+ className="openapi-explorer__details-summary"
288
+ onClick={(e) => {
289
+ e.preventDefault();
290
+ setExpandAccept(!expandAccept);
291
+ }}
292
+ >
293
+ Accept
294
+ </summary>
295
+ <Accept />
296
+ </details>
297
+ )}
298
+ {showRequestButton && item.method !== "event" && (
299
+ <button className="openapi-explorer__request-btn" type="submit">
300
+ Send API Request
301
+ </button>
302
+ )}
303
+ </div>
304
+ </form>
305
+ </FormProvider>
306
+ );
307
+ }
308
+
309
+ export default Request;
@@ -0,0 +1,254 @@
1
+ /* ============================================================================
2
+ * Copyright (c) Palo Alto Networks
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ * ========================================================================== */
7
+
8
+ import { Body } from "@theme/ApiExplorer/Body/slice";
9
+ import sdk from "postman-collection";
10
+
11
+ function fetchWithtimeout(
12
+ url: string,
13
+ options: RequestInit,
14
+ timeout = 5000
15
+ ): any {
16
+ return Promise.race([
17
+ fetch(url, options),
18
+ new Promise((_, reject) =>
19
+ setTimeout(() => reject(new Error("Request timed out")), timeout)
20
+ ),
21
+ ]);
22
+ }
23
+
24
+ async function loadImage(content: Blob): Promise<string | ArrayBuffer | null> {
25
+ return new Promise((accept, reject) => {
26
+ const reader = new FileReader();
27
+
28
+ reader.onabort = () => {
29
+ console.log("file reading was aborted");
30
+ reject();
31
+ };
32
+
33
+ reader.onerror = () => {
34
+ console.log("file reading has failed");
35
+ reject();
36
+ };
37
+
38
+ reader.onload = () => {
39
+ // Do whatever you want with the file contents
40
+ const binaryStr = reader.result;
41
+ accept(binaryStr);
42
+ };
43
+ reader.readAsArrayBuffer(content);
44
+ });
45
+ }
46
+
47
+ async function makeRequest(
48
+ request: sdk.Request,
49
+ proxy: string | undefined,
50
+ _body: Body
51
+ ) {
52
+ const headers = request.toJSON().header;
53
+
54
+ let myHeaders = new Headers();
55
+ if (headers) {
56
+ headers.forEach((header: any) => {
57
+ if (header.key && header.value) {
58
+ myHeaders.append(header.key, header.value);
59
+ }
60
+ });
61
+ }
62
+
63
+ // The following code handles multiple files in the same formdata param.
64
+ // It removes the form data params where the src property is an array of filepath strings
65
+ // Splits that array into different form data params with src set as a single filepath string
66
+ // TODO:
67
+ // if (request.body && request.body.mode === 'formdata') {
68
+ // let formdata = request.body.formdata,
69
+ // formdataArray = [];
70
+ // formdata.members.forEach((param) => {
71
+ // let key = param.key,
72
+ // type = param.type,
73
+ // disabled = param.disabled,
74
+ // contentType = param.contentType;
75
+ // // check if type is file or text
76
+ // if (type === 'file') {
77
+ // // if src is not of type string we check for array(multiple files)
78
+ // if (typeof param.src !== 'string') {
79
+ // // if src is an array(not empty), iterate over it and add files as separate form fields
80
+ // if (Array.isArray(param.src) && param.src.length) {
81
+ // param.src.forEach((filePath) => {
82
+ // addFormParam(
83
+ // formdataArray,
84
+ // key,
85
+ // param.type,
86
+ // filePath,
87
+ // disabled,
88
+ // contentType
89
+ // );
90
+ // });
91
+ // }
92
+ // // if src is not an array or string, or is an empty array, add a placeholder for file path(no files case)
93
+ // else {
94
+ // addFormParam(
95
+ // formdataArray,
96
+ // key,
97
+ // param.type,
98
+ // '/path/to/file',
99
+ // disabled,
100
+ // contentType
101
+ // );
102
+ // }
103
+ // }
104
+ // // if src is string, directly add the param with src as filepath
105
+ // else {
106
+ // addFormParam(
107
+ // formdataArray,
108
+ // key,
109
+ // param.type,
110
+ // param.src,
111
+ // disabled,
112
+ // contentType
113
+ // );
114
+ // }
115
+ // }
116
+ // // if type is text, directly add it to formdata array
117
+ // else {
118
+ // addFormParam(
119
+ // formdataArray,
120
+ // key,
121
+ // param.type,
122
+ // param.value,
123
+ // disabled,
124
+ // contentType
125
+ // );
126
+ // }
127
+ // });
128
+ // request.body.update({
129
+ // mode: 'formdata',
130
+ // formdata: formdataArray,
131
+ // });
132
+ // }
133
+
134
+ const body = request.body?.toJSON();
135
+
136
+ let myBody: RequestInit["body"] = undefined;
137
+ if (body !== undefined && Object.keys(body).length > 0) {
138
+ switch (body.mode) {
139
+ case "urlencoded": {
140
+ myBody = new URLSearchParams();
141
+ if (Array.isArray(body.urlencoded)) {
142
+ for (const data of body.urlencoded) {
143
+ if (data.key && data.value) {
144
+ myBody.append(data.key, data.value);
145
+ }
146
+ }
147
+ }
148
+ break;
149
+ }
150
+ case "raw": {
151
+ myBody = (body.raw ?? "").toString();
152
+ break;
153
+ }
154
+ case "formdata": {
155
+ // The Content-Type header will be set automatically based on the type of body.
156
+ myHeaders.delete("Content-Type");
157
+
158
+ myBody = new FormData();
159
+ if (Array.isArray(request.body.formdata.members)) {
160
+ for (const data of request.body.formdata.members) {
161
+ if (data.key && data.value.content) {
162
+ myBody.append(data.key, data.value.content);
163
+ }
164
+ // handle generic key-value payload
165
+ if (data.key && typeof data.value === "string") {
166
+ myBody.append(data.key, data.value);
167
+ }
168
+ }
169
+ }
170
+ break;
171
+ }
172
+ case "file": {
173
+ if (_body.type === "raw" && _body.content?.type === "file") {
174
+ myBody = await loadImage(_body.content.value.content);
175
+ }
176
+ break;
177
+ }
178
+ default:
179
+ break;
180
+ }
181
+ }
182
+
183
+ const requestOptions: RequestInit = {
184
+ method: request.method,
185
+ headers: myHeaders,
186
+ body: myBody,
187
+ };
188
+
189
+ let finalUrl = request.url.toString();
190
+ if (proxy) {
191
+ // Ensure the proxy ends with a slash.
192
+ let normalizedProxy = proxy.replace(/\/$/, "") + "/";
193
+ finalUrl = normalizedProxy + request.url.toString();
194
+ }
195
+
196
+ return fetchWithtimeout(finalUrl, requestOptions).then((response: any) => {
197
+ const contentType = response.headers.get("content-type");
198
+ let fileExtension = "";
199
+
200
+ if (contentType) {
201
+ if (contentType.includes("application/pdf")) {
202
+ fileExtension = ".pdf";
203
+ } else if (contentType.includes("image/jpeg")) {
204
+ fileExtension = ".jpg";
205
+ } else if (contentType.includes("image/png")) {
206
+ fileExtension = ".png";
207
+ } else if (contentType.includes("image/gif")) {
208
+ fileExtension = ".gif";
209
+ } else if (contentType.includes("image/webp")) {
210
+ fileExtension = ".webp";
211
+ } else if (contentType.includes("video/mpeg")) {
212
+ fileExtension = ".mpeg";
213
+ } else if (contentType.includes("video/mp4")) {
214
+ fileExtension = ".mp4";
215
+ } else if (contentType.includes("audio/mpeg")) {
216
+ fileExtension = ".mp3";
217
+ } else if (contentType.includes("audio/ogg")) {
218
+ fileExtension = ".ogg";
219
+ } else if (contentType.includes("application/octet-stream")) {
220
+ fileExtension = ".bin";
221
+ } else if (contentType.includes("application/zip")) {
222
+ fileExtension = ".zip";
223
+ }
224
+
225
+ if (fileExtension) {
226
+ return response.blob().then((blob: any) => {
227
+ const url = window.URL.createObjectURL(blob);
228
+
229
+ const link = document.createElement("a");
230
+ link.href = url;
231
+ // Now the file name includes the extension
232
+ link.setAttribute("download", `file${fileExtension}`);
233
+
234
+ // These two lines are necessary to make the link click in Firefox
235
+ link.style.display = "none";
236
+ document.body.appendChild(link);
237
+
238
+ link.click();
239
+
240
+ // After link is clicked, it's safe to remove it.
241
+ setTimeout(() => document.body.removeChild(link), 0);
242
+
243
+ return response;
244
+ });
245
+ } else {
246
+ return response;
247
+ }
248
+ }
249
+
250
+ return response;
251
+ });
252
+ }
253
+
254
+ export default makeRequest;
@@ -0,0 +1,121 @@
1
+ .openapi-explorer__response-container {
2
+ background-color: var(--ifm-pre-background);
3
+ border-radius: var(--openapi-card-border-radius);
4
+ border: 1px solid var(--openapi-explorer-border-color);
5
+ box-shadow:
6
+ 0 2px 3px hsla(222, 8%, 43%, 0.1),
7
+ 0 8px 16px -10px hsla(222, 8%, 43%, 0.2);
8
+ color: var(--ifm-pre-color);
9
+ line-height: var(--ifm-pre-line-height);
10
+ margin-bottom: var(--ifm-spacing-vertical);
11
+ margin-top: 0;
12
+ overflow: auto;
13
+ transition: 300ms;
14
+
15
+ &:hover {
16
+ box-shadow:
17
+ 0 0 0 2px rgba(38, 53, 61, 0.15),
18
+ 0 2px 3px hsla(222, 8%, 43%, 0.15),
19
+ 0 16px 16px -10px hsla(222, 8%, 43%, 0.2);
20
+ }
21
+
22
+ .openapi-explorer__code-block code {
23
+ padding-top: 0;
24
+ }
25
+ }
26
+
27
+ .openapi-explorer__response-title-container {
28
+ display: flex;
29
+ justify-content: space-between;
30
+ border-bottom: 1px solid var(--openapi-explorer-border-color);
31
+ margin: 0;
32
+ padding: 0.75rem var(--ifm-pre-padding);
33
+ text-transform: uppercase;
34
+ font-size: 12px;
35
+ font-weight: bold;
36
+ }
37
+
38
+ .openapi-explorer__response-placeholder-message {
39
+ font-size: 12px;
40
+ padding: 1.25rem;
41
+ margin-bottom: 0;
42
+ text-align: center;
43
+ }
44
+
45
+ .openapi-explorer__response-clear-btn {
46
+ &:hover {
47
+ cursor: pointer;
48
+ }
49
+ }
50
+
51
+ .openapi-explorer__loading-container {
52
+ width: 100%;
53
+ display: flex;
54
+ justify-content: center;
55
+ }
56
+
57
+ .openapi-response__dot::before {
58
+ margin-right: 0.2rem;
59
+ margin-bottom: 0.15rem;
60
+ content: "⬤";
61
+ color: var(--ifm-color-primary);
62
+ font-size: 8px;
63
+ }
64
+
65
+ .openapi-response__dot--danger::before {
66
+ color: var(--ifm-color-danger);
67
+ }
68
+
69
+ .openapi-response__dot--success::before {
70
+ color: var(--ifm-color-success);
71
+ }
72
+
73
+ .openapi-response__dot--info::before {
74
+ color: var(--ifm-color-info);
75
+ }
76
+
77
+ .openapi-response__status-code {
78
+ margin-left: -1rem;
79
+ }
80
+
81
+ .openapi-response__status-headers {
82
+ margin-left: -1rem;
83
+ }
84
+
85
+ /* loading spinner */
86
+ .openapi-response__lds-ring {
87
+ display: inline-block;
88
+ position: relative;
89
+ width: 80px;
90
+ height: 80px;
91
+ }
92
+ .openapi-response__lds-ring div {
93
+ box-sizing: border-box;
94
+ display: block;
95
+ position: absolute;
96
+ width: 64px;
97
+ height: 64px;
98
+ margin: 8px;
99
+ border: 5px solid #dfc;
100
+ border-radius: 50%;
101
+ animation: openapi-response__lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1)
102
+ infinite;
103
+ border-color: var(--ifm-color-primary) transparent transparent transparent;
104
+ }
105
+ .openapi-response__lds-ring div:nth-child(1) {
106
+ animation-delay: -0.45s;
107
+ }
108
+ .openapi-response__lds-ring div:nth-child(2) {
109
+ animation-delay: -0.3s;
110
+ }
111
+ .openapi-response__lds-ring div:nth-child(3) {
112
+ animation-delay: -0.15s;
113
+ }
114
+ @keyframes openapi-response__lds-ring {
115
+ 0% {
116
+ transform: rotate(0deg);
117
+ }
118
+ 100% {
119
+ transform: rotate(360deg);
120
+ }
121
+ }