@gitbook/react-openapi 1.4.3 → 1.5.2

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 (263) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/InteractiveSection.js +59 -0
  3. package/dist/Markdown.js +10 -0
  4. package/dist/OpenAPICodeSample.js +219 -0
  5. package/dist/OpenAPICodeSampleInteractive.js +66 -0
  6. package/dist/OpenAPICodeSampleSelector.js +45 -0
  7. package/dist/OpenAPICopyButton.js +39 -0
  8. package/dist/OpenAPIDisclosure.js +30 -0
  9. package/dist/OpenAPIDisclosureGroup.js +75 -0
  10. package/dist/OpenAPIExample.js +41 -0
  11. package/dist/OpenAPIMediaType.js +58 -0
  12. package/dist/OpenAPIOperation.d.ts +12 -7
  13. package/dist/OpenAPIOperation.js +30 -0
  14. package/dist/OpenAPIOperationContext.d.ts +10 -6
  15. package/dist/OpenAPIOperationContext.js +30 -0
  16. package/dist/OpenAPIPath.js +51 -0
  17. package/dist/OpenAPIPrefillContextProvider.d.ts +11 -7
  18. package/dist/OpenAPIPrefillContextProvider.js +25 -0
  19. package/dist/OpenAPIRequestBody.js +28 -0
  20. package/dist/OpenAPIRequestBodyHeaderType.js +23 -0
  21. package/dist/OpenAPIResponse.js +39 -0
  22. package/dist/OpenAPIResponseExample.js +75 -0
  23. package/dist/OpenAPIResponseExampleContent.js +61 -0
  24. package/dist/OpenAPIResponses.js +61 -0
  25. package/dist/OpenAPISchema.js +373 -0
  26. package/dist/OpenAPISchemaName.js +45 -0
  27. package/dist/OpenAPISchemaServer.js +13 -0
  28. package/dist/OpenAPISecurities.js +124 -0
  29. package/dist/OpenAPISelect.js +45 -0
  30. package/dist/OpenAPISpec.js +73 -0
  31. package/dist/OpenAPIWebhook.d.ts +12 -7
  32. package/dist/OpenAPIWebhook.js +28 -0
  33. package/dist/OpenAPIWebhookExample.js +40 -0
  34. package/dist/ScalarApiButton.js +87 -0
  35. package/dist/StaticSection.js +37 -0
  36. package/dist/code-samples.js +267 -419
  37. package/dist/common/OpenAPIColumnSpec.js +23 -0
  38. package/dist/common/OpenAPIOperationDescription.js +18 -0
  39. package/dist/common/OpenAPIStability.js +17 -0
  40. package/dist/common/OpenAPISummary.js +27 -0
  41. package/dist/contentTypeChecks.js +24 -20
  42. package/dist/context.d.ts +68 -72
  43. package/dist/context.js +25 -39
  44. package/dist/decycle.js +39 -68
  45. package/dist/dereference.js +20 -64
  46. package/dist/generateSchemaExample.js +188 -332
  47. package/dist/getDisclosureLabel.js +15 -16
  48. package/dist/getOrCreateStoreByKey.js +20 -17
  49. package/dist/index.d.ts +12 -10
  50. package/dist/index.js +11 -8
  51. package/dist/json2xml.js +10 -5
  52. package/dist/resolveOpenAPIOperation.d.ts +11 -7
  53. package/dist/resolveOpenAPIOperation.js +88 -159
  54. package/dist/resolveOpenAPIWebhook.d.ts +11 -7
  55. package/dist/resolveOpenAPIWebhook.js +41 -116
  56. package/dist/schemas/OpenAPISchemaItem.js +26 -0
  57. package/dist/schemas/OpenAPISchemas.d.ts +16 -11
  58. package/dist/schemas/OpenAPISchemas.js +57 -0
  59. package/dist/schemas/resolveOpenAPISchemas.d.ts +9 -4
  60. package/dist/schemas/resolveOpenAPISchemas.js +15 -59
  61. package/dist/stringifyOpenAPI.js +12 -13
  62. package/dist/translate.js +43 -0
  63. package/dist/translations/de.js +47 -42
  64. package/dist/translations/en.d.ts +46 -42
  65. package/dist/translations/en.js +47 -42
  66. package/dist/translations/es.js +47 -42
  67. package/dist/translations/fr.js +47 -42
  68. package/dist/translations/index.d.ts +404 -391
  69. package/dist/translations/index.js +28 -24
  70. package/dist/translations/ja.js +47 -42
  71. package/dist/translations/nl.js +47 -42
  72. package/dist/translations/no.js +47 -42
  73. package/dist/translations/pt-br.js +47 -42
  74. package/dist/translations/types.d.ts +7 -5
  75. package/dist/translations/zh.js +47 -42
  76. package/dist/types.d.ts +30 -24
  77. package/dist/util/example.js +84 -0
  78. package/dist/util/server.js +32 -38
  79. package/dist/util/tryit-prefill.js +135 -121
  80. package/dist/utils.js +135 -196
  81. package/package.json +18 -11
  82. package/dist/InteractiveSection.d.ts +0 -33
  83. package/dist/InteractiveSection.jsx +0 -61
  84. package/dist/Markdown.d.ts +0 -4
  85. package/dist/Markdown.jsx +0 -5
  86. package/dist/OpenAPICodeSample.d.ts +0 -19
  87. package/dist/OpenAPICodeSample.jsx +0 -230
  88. package/dist/OpenAPICodeSampleInteractive.d.ts +0 -14
  89. package/dist/OpenAPICodeSampleInteractive.jsx +0 -73
  90. package/dist/OpenAPICodeSampleSelector.d.ts +0 -14
  91. package/dist/OpenAPICodeSampleSelector.jsx +0 -44
  92. package/dist/OpenAPICopyButton.d.ts +0 -13
  93. package/dist/OpenAPICopyButton.jsx +0 -35
  94. package/dist/OpenAPIDisclosure.d.ts +0 -11
  95. package/dist/OpenAPIDisclosure.jsx +0 -30
  96. package/dist/OpenAPIDisclosureGroup.d.ts +0 -23
  97. package/dist/OpenAPIDisclosureGroup.jsx +0 -83
  98. package/dist/OpenAPIExample.d.ts +0 -16
  99. package/dist/OpenAPIExample.jsx +0 -36
  100. package/dist/OpenAPIMediaType.d.ts +0 -21
  101. package/dist/OpenAPIMediaType.jsx +0 -61
  102. package/dist/OpenAPIOperation.jsx +0 -25
  103. package/dist/OpenAPIOperationContext.jsx +0 -26
  104. package/dist/OpenAPIOperationDescription.d.ts +0 -9
  105. package/dist/OpenAPIOperationDescription.jsx +0 -22
  106. package/dist/OpenAPIOperationStability.d.ts +0 -9
  107. package/dist/OpenAPIOperationStability.jsx +0 -27
  108. package/dist/OpenAPIPath.d.ts +0 -18
  109. package/dist/OpenAPIPath.jsx +0 -55
  110. package/dist/OpenAPIPrefillContextProvider.jsx +0 -19
  111. package/dist/OpenAPIRequestBody.d.ts +0 -11
  112. package/dist/OpenAPIRequestBody.jsx +0 -28
  113. package/dist/OpenAPIRequestBodyHeaderType.d.ts +0 -8
  114. package/dist/OpenAPIRequestBodyHeaderType.jsx +0 -25
  115. package/dist/OpenAPIResponse.d.ts +0 -10
  116. package/dist/OpenAPIResponse.jsx +0 -57
  117. package/dist/OpenAPIResponseExample.d.ts +0 -9
  118. package/dist/OpenAPIResponseExample.jsx +0 -105
  119. package/dist/OpenAPIResponseExampleContent.d.ts +0 -22
  120. package/dist/OpenAPIResponseExampleContent.jsx +0 -60
  121. package/dist/OpenAPIResponses.d.ts +0 -9
  122. package/dist/OpenAPIResponses.jsx +0 -77
  123. package/dist/OpenAPISchema.d.ts +0 -27
  124. package/dist/OpenAPISchema.jsx +0 -400
  125. package/dist/OpenAPISchemaName.d.ts +0 -16
  126. package/dist/OpenAPISchemaName.jsx +0 -43
  127. package/dist/OpenAPISchemaServer.d.ts +0 -12
  128. package/dist/OpenAPISchemaServer.jsx +0 -8
  129. package/dist/OpenAPISecurities.d.ts +0 -9
  130. package/dist/OpenAPISecurities.jsx +0 -114
  131. package/dist/OpenAPISelect.d.ts +0 -22
  132. package/dist/OpenAPISelect.jsx +0 -44
  133. package/dist/OpenAPISpec.d.ts +0 -6
  134. package/dist/OpenAPISpec.jsx +0 -80
  135. package/dist/OpenAPITabs.d.ts +0 -26
  136. package/dist/OpenAPITabs.jsx +0 -109
  137. package/dist/OpenAPIWebhook.jsx +0 -23
  138. package/dist/OpenAPIWebhookExample.d.ts +0 -6
  139. package/dist/OpenAPIWebhookExample.jsx +0 -41
  140. package/dist/ScalarApiButton.d.ts +0 -14
  141. package/dist/ScalarApiButton.jsx +0 -81
  142. package/dist/StaticSection.d.ts +0 -13
  143. package/dist/StaticSection.jsx +0 -32
  144. package/dist/code-samples.d.ts +0 -17
  145. package/dist/common/OpenAPIColumnSpec.d.ts +0 -6
  146. package/dist/common/OpenAPIColumnSpec.jsx +0 -20
  147. package/dist/common/OpenAPIOperationDescription.d.ts +0 -6
  148. package/dist/common/OpenAPIOperationDescription.jsx +0 -19
  149. package/dist/common/OpenAPIStability.d.ts +0 -4
  150. package/dist/common/OpenAPIStability.jsx +0 -15
  151. package/dist/common/OpenAPISummary.d.ts +0 -6
  152. package/dist/common/OpenAPISummary.jsx +0 -30
  153. package/dist/contentTypeChecks.d.ts +0 -10
  154. package/dist/decycle.d.ts +0 -2
  155. package/dist/dereference.d.ts +0 -5
  156. package/dist/generateSchemaExample.d.ts +0 -45
  157. package/dist/getDisclosureLabel.d.ts +0 -7
  158. package/dist/getOrCreateStoreByKey.d.ts +0 -10
  159. package/dist/json2xml.d.ts +0 -4
  160. package/dist/schemas/OpenAPISchemaItem.d.ts +0 -7
  161. package/dist/schemas/OpenAPISchemaItem.jsx +0 -16
  162. package/dist/schemas/OpenAPISchemas.jsx +0 -59
  163. package/dist/schemas/index.d.ts +0 -2
  164. package/dist/schemas/index.js +0 -2
  165. package/dist/stringifyOpenAPI.d.ts +0 -4
  166. package/dist/translate.d.ts +0 -10
  167. package/dist/translate.jsx +0 -75
  168. package/dist/translations/de.d.ts +0 -43
  169. package/dist/translations/es.d.ts +0 -43
  170. package/dist/translations/fr.d.ts +0 -43
  171. package/dist/translations/ja.d.ts +0 -43
  172. package/dist/translations/nl.d.ts +0 -43
  173. package/dist/translations/no.d.ts +0 -43
  174. package/dist/translations/pt-br.d.ts +0 -43
  175. package/dist/translations/types.js +0 -1
  176. package/dist/translations/zh.d.ts +0 -43
  177. package/dist/tsconfig.build.tsbuildinfo +0 -1
  178. package/dist/types.js +0 -1
  179. package/dist/util/example.d.ts +0 -35
  180. package/dist/util/example.jsx +0 -103
  181. package/dist/util/server.d.ts +0 -9
  182. package/dist/util/tryit-prefill.d.ts +0 -20
  183. package/dist/utils.d.ts +0 -50
  184. package/src/InteractiveSection.tsx +0 -147
  185. package/src/Markdown.tsx +0 -12
  186. package/src/OpenAPICodeSample.tsx +0 -330
  187. package/src/OpenAPICodeSampleInteractive.tsx +0 -136
  188. package/src/OpenAPICodeSampleSelector.tsx +0 -94
  189. package/src/OpenAPICopyButton.tsx +0 -72
  190. package/src/OpenAPIDisclosure.tsx +0 -46
  191. package/src/OpenAPIDisclosureGroup.tsx +0 -158
  192. package/src/OpenAPIExample.tsx +0 -55
  193. package/src/OpenAPIMediaType.tsx +0 -139
  194. package/src/OpenAPIOperation.tsx +0 -35
  195. package/src/OpenAPIOperationContext.tsx +0 -45
  196. package/src/OpenAPIOperationDescription.tsx +0 -34
  197. package/src/OpenAPIOperationStability.tsx +0 -39
  198. package/src/OpenAPIPath.tsx +0 -90
  199. package/src/OpenAPIPrefillContextProvider.tsx +0 -40
  200. package/src/OpenAPIRequestBody.tsx +0 -54
  201. package/src/OpenAPIRequestBodyHeaderType.tsx +0 -36
  202. package/src/OpenAPIResponse.tsx +0 -82
  203. package/src/OpenAPIResponseExample.tsx +0 -151
  204. package/src/OpenAPIResponseExampleContent.tsx +0 -125
  205. package/src/OpenAPIResponses.tsx +0 -125
  206. package/src/OpenAPISchema.test.ts +0 -172
  207. package/src/OpenAPISchema.tsx +0 -654
  208. package/src/OpenAPISchemaName.tsx +0 -80
  209. package/src/OpenAPISchemaServer.tsx +0 -34
  210. package/src/OpenAPISecurities.tsx +0 -231
  211. package/src/OpenAPISelect.tsx +0 -96
  212. package/src/OpenAPISpec.tsx +0 -138
  213. package/src/OpenAPITabs.tsx +0 -147
  214. package/src/OpenAPIWebhook.tsx +0 -33
  215. package/src/OpenAPIWebhookExample.tsx +0 -60
  216. package/src/ScalarApiButton.tsx +0 -132
  217. package/src/StaticSection.tsx +0 -91
  218. package/src/__snapshots__/json2xml.test.ts.snap +0 -18
  219. package/src/code-samples.test.ts +0 -714
  220. package/src/code-samples.ts +0 -448
  221. package/src/common/OpenAPIColumnSpec.tsx +0 -31
  222. package/src/common/OpenAPIOperationDescription.tsx +0 -31
  223. package/src/common/OpenAPIStability.tsx +0 -23
  224. package/src/common/OpenAPISummary.tsx +0 -45
  225. package/src/contentTypeChecks.ts +0 -39
  226. package/src/context.ts +0 -99
  227. package/src/decycle.ts +0 -68
  228. package/src/dereference.ts +0 -29
  229. package/src/generateSchemaExample.test.ts +0 -1040
  230. package/src/generateSchemaExample.ts +0 -530
  231. package/src/getDisclosureLabel.ts +0 -25
  232. package/src/getOrCreateStoreByKey.ts +0 -33
  233. package/src/index.ts +0 -10
  234. package/src/json2xml.test.ts +0 -46
  235. package/src/json2xml.ts +0 -8
  236. package/src/resolveOpenAPIOperation.test.ts +0 -177
  237. package/src/resolveOpenAPIOperation.ts +0 -151
  238. package/src/resolveOpenAPIWebhook.ts +0 -99
  239. package/src/schemas/OpenAPISchemaItem.tsx +0 -34
  240. package/src/schemas/OpenAPISchemas.tsx +0 -98
  241. package/src/schemas/index.ts +0 -2
  242. package/src/schemas/resolveOpenAPISchemas.test.ts +0 -174
  243. package/src/schemas/resolveOpenAPISchemas.ts +0 -28
  244. package/src/stringifyOpenAPI.ts +0 -25
  245. package/src/translate.tsx +0 -80
  246. package/src/translations/de.ts +0 -43
  247. package/src/translations/en.ts +0 -43
  248. package/src/translations/es.ts +0 -43
  249. package/src/translations/fr.ts +0 -43
  250. package/src/translations/index.ts +0 -33
  251. package/src/translations/ja.ts +0 -43
  252. package/src/translations/nl.ts +0 -43
  253. package/src/translations/no.ts +0 -43
  254. package/src/translations/pt-br.ts +0 -43
  255. package/src/translations/types.ts +0 -7
  256. package/src/translations/zh.ts +0 -43
  257. package/src/types.ts +0 -46
  258. package/src/util/example.tsx +0 -129
  259. package/src/util/server.test.ts +0 -58
  260. package/src/util/server.ts +0 -47
  261. package/src/util/tryit-prefill.test.ts +0 -311
  262. package/src/util/tryit-prefill.ts +0 -160
  263. package/src/utils.ts +0 -255
@@ -1,147 +0,0 @@
1
- 'use client';
2
-
3
- import { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';
4
- import { type Key, Tab, TabList, TabPanel, Tabs, type TabsProps } from 'react-aria-components';
5
- import { useEventCallback } from 'usehooks-ts';
6
- import { getOrCreateStoreByKey } from './getOrCreateStoreByKey';
7
-
8
- export type TabItem = {
9
- key: Key;
10
- label: string;
11
- body: React.ReactNode;
12
- footer?: React.ReactNode;
13
- };
14
-
15
- type OpenAPITabsContextData = {
16
- items: TabItem[];
17
- selectedTab: TabItem | null;
18
- };
19
-
20
- const OpenAPITabsContext = createContext<OpenAPITabsContextData | null>(null);
21
-
22
- function useOpenAPITabsContext() {
23
- const context = useContext(OpenAPITabsContext);
24
- if (!context) {
25
- throw new Error('OpenAPITabsContext is missing');
26
- }
27
- return context;
28
- }
29
-
30
- /**
31
- * The OpenAPI Tabs wrapper component.
32
- */
33
- export function OpenAPITabs(
34
- props: React.PropsWithChildren<TabsProps & { items: TabItem[]; stateKey?: string }>
35
- ) {
36
- const { children, items, stateKey } = props;
37
- const [tabKey, setTabKey] = useState<Key | null>(() => {
38
- if (stateKey && typeof window !== 'undefined') {
39
- const store = getOrCreateStoreByKey(stateKey);
40
- const tabKey = store.getState().key;
41
- if (tabKey) {
42
- return tabKey;
43
- }
44
- }
45
- return items[0]?.key ?? null;
46
- });
47
- const selectTab = useEventCallback((key: Key | null) => {
48
- if (!key || key === tabKey) {
49
- return;
50
- }
51
- const tab = items.find((item) => item.key === key);
52
- if (!tab) {
53
- return;
54
- }
55
- setTabKey(key);
56
- });
57
- const selectedTab = items.find((item) => item.key === tabKey) ?? items[0] ?? null;
58
- const cancelDeferRef = useRef<(() => void) | null>(null);
59
- useEffect(() => {
60
- if (!stateKey) {
61
- return undefined;
62
- }
63
- const store = getOrCreateStoreByKey(stateKey);
64
- return store.subscribe((state) => {
65
- cancelDeferRef.current?.();
66
- cancelDeferRef.current = defer(() => selectTab(state.key));
67
- });
68
- }, [stateKey, selectTab]);
69
- useEffect(() => {
70
- return () => cancelDeferRef.current?.();
71
- }, []);
72
- const contextValue = useMemo(() => ({ items, selectedTab }), [items, selectedTab]);
73
- return (
74
- <OpenAPITabsContext.Provider value={contextValue}>
75
- <Tabs
76
- className="openapi-tabs"
77
- onSelectionChange={(tabKey) => {
78
- selectTab(tabKey);
79
- if (stateKey) {
80
- const store = getOrCreateStoreByKey(stateKey);
81
- store.setState({ key: tabKey });
82
- }
83
- }}
84
- selectedKey={tabKey}
85
- >
86
- {children}
87
- </Tabs>
88
- </OpenAPITabsContext.Provider>
89
- );
90
- }
91
-
92
- const defer = (fn: () => void) => {
93
- const id = setTimeout(fn, 0);
94
- return () => clearTimeout(id);
95
- };
96
-
97
- /**
98
- * The OpenAPI Tabs list component.
99
- * This component should be used as a child of the OpenAPITabs component.
100
- * It renders the list of tabs.
101
- */
102
- export function OpenAPITabsList() {
103
- const { items } = useOpenAPITabsContext();
104
-
105
- return (
106
- <TabList className="openapi-tabs-list">
107
- {items.map((tab) => (
108
- <Tab
109
- key={tab.key}
110
- id={tab.key}
111
- style={({ isFocusVisible }) => ({
112
- outline: isFocusVisible
113
- ? '2px solid rgb(var(--primary-color-500)/0.4)'
114
- : 'none',
115
- })}
116
- className="openapi-tabs-tab"
117
- >
118
- {tab.label}
119
- </Tab>
120
- ))}
121
- </TabList>
122
- );
123
- }
124
-
125
- /**
126
- * The OpenAPI Tabs panels component.
127
- * This component should be used as a child of the OpenAPITabs component.
128
- * It renders the content of the selected tab.
129
- */
130
- export function OpenAPITabsPanels() {
131
- const { selectedTab } = useOpenAPITabsContext();
132
-
133
- if (!selectedTab) {
134
- return null;
135
- }
136
-
137
- const key = selectedTab.key.toString();
138
-
139
- return (
140
- <TabPanel id={key} className="openapi-tabs-panel">
141
- <div className="openapi-panel-body">{selectedTab.body}</div>
142
- {selectedTab.footer ? (
143
- <div className="openapi-panel-footer">{selectedTab.footer}</div>
144
- ) : null}
145
- </TabPanel>
146
- );
147
- }
@@ -1,33 +0,0 @@
1
- import clsx from 'clsx';
2
- import { OpenAPIWebhookExample } from './OpenAPIWebhookExample';
3
- import { OpenAPIColumnSpec } from './common/OpenAPIColumnSpec';
4
- import { OpenAPISummary } from './common/OpenAPISummary';
5
- import { type OpenAPIContextInput, resolveOpenAPIContext } from './context';
6
- import type { OpenAPIWebhookData } from './types';
7
-
8
- /**
9
- * Display an interactive OpenAPI webhook.
10
- */
11
- export function OpenAPIWebhook(props: {
12
- className?: string;
13
- data: OpenAPIWebhookData;
14
- context: OpenAPIContextInput;
15
- }) {
16
- const { className, data, context: contextInput } = props;
17
-
18
- const context = resolveOpenAPIContext(contextInput);
19
-
20
- return (
21
- <div className={clsx('openapi-webhook', className)}>
22
- <OpenAPISummary data={data} context={context} />
23
- <div className="openapi-columns">
24
- <OpenAPIColumnSpec data={data} context={context} />
25
- <div className="openapi-column-preview">
26
- <div className="openapi-column-preview-body">
27
- <OpenAPIWebhookExample data={data} context={context} />
28
- </div>
29
- </div>
30
- </div>
31
- </div>
32
- );
33
- }
@@ -1,60 +0,0 @@
1
- import type { OpenAPIV3 } from '@gitbook/openapi-parser';
2
- import { OpenAPIEmptyExample } from './OpenAPIExample';
3
- import { OpenAPIMediaTypeContent } from './OpenAPIMediaType';
4
- import { type OpenAPIContext, getOpenAPIClientContext } from './context';
5
- import type { OpenAPIWebhookData } from './types';
6
- import { getExamples } from './util/example';
7
- import { createStateKey } from './utils';
8
-
9
- export function OpenAPIWebhookExample(props: {
10
- data: OpenAPIWebhookData;
11
- context: OpenAPIContext;
12
- }) {
13
- const { data, context } = props;
14
- const { operation } = data;
15
-
16
- const items = (() => {
17
- if (!operation.requestBody) {
18
- return [];
19
- }
20
-
21
- return Object.entries(
22
- operation.requestBody.content as Record<string, OpenAPIV3.MediaTypeObject | null>
23
- ).map(([key, value]) => {
24
- const schema = value?.schema;
25
-
26
- if (!schema) {
27
- return {
28
- key,
29
- label: key,
30
- body: <OpenAPIEmptyExample context={context} />,
31
- };
32
- }
33
-
34
- return {
35
- key,
36
- label: key,
37
- body: <></>,
38
- examples: getExamples({
39
- mediaTypeObject: value,
40
- mediaType: key,
41
- context,
42
- }),
43
- };
44
- });
45
- })();
46
-
47
- return (
48
- <div className="openapi-panel">
49
- <h4 className="openapi-panel-heading">Payload</h4>
50
- <div className="openapi-panel-body">
51
- <OpenAPIMediaTypeContent
52
- selectIcon={context.icons.chevronDown}
53
- stateKey={createStateKey('request-body-media-type', context.blockKey)}
54
- items={items}
55
- context={getOpenAPIClientContext(context)}
56
- />
57
- </div>
58
- </div>
59
- );
60
- }
@@ -1,132 +0,0 @@
1
- 'use client';
2
-
3
- import { ApiClientModalProvider, useApiClientModal } from '@scalar/api-client-react';
4
- import { Suspense, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
5
- import { createPortal } from 'react-dom';
6
-
7
- import type { OpenAPIV3_1 } from '@gitbook/openapi-parser';
8
- import { useOpenAPIOperationContext } from './OpenAPIOperationContext';
9
- import { useOpenAPIPrefillContext } from './OpenAPIPrefillContextProvider';
10
- import type { OpenAPIClientContext } from './context';
11
- import { t } from './translate';
12
- import type { OpenAPIOperationData } from './types';
13
- import { resolveTryItPrefillForOperation } from './util/tryit-prefill';
14
-
15
- /**
16
- * Button which launches the Scalar API Client
17
- */
18
- export function ScalarApiButton(props: {
19
- method: OpenAPIV3_1.HttpMethods;
20
- path: string;
21
- securities: OpenAPIOperationData['securities'];
22
- servers: OpenAPIOperationData['servers'];
23
- specUrl: string;
24
- context: OpenAPIClientContext;
25
- }) {
26
- const { method, path, securities, servers, specUrl, context } = props;
27
- const [isOpen, setIsOpen] = useState(false);
28
- const controllerRef = useRef<ScalarModalControllerRef>(null);
29
-
30
- return (
31
- <div className="scalar scalar-activate">
32
- <button
33
- className="scalar-activate-button button"
34
- onClick={() => {
35
- controllerRef.current?.openClient?.();
36
- setIsOpen(true);
37
- }}
38
- >
39
- {t(context.translation, 'test_it')}
40
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 12" fill="currentColor">
41
- <path
42
- stroke="currentColor"
43
- strokeWidth="1.5"
44
- d="M1 10.05V1.43c0-.2.2-.31.37-.22l7.26 4.08c.17.1.17.33.01.43l-7.26 4.54a.25.25 0 0 1-.38-.21Z"
45
- />
46
- </svg>
47
- </button>
48
-
49
- {isOpen &&
50
- createPortal(
51
- <Suspense fallback={null}>
52
- <ScalarModal
53
- controllerRef={controllerRef}
54
- method={method}
55
- path={path}
56
- securities={securities}
57
- servers={servers}
58
- specUrl={specUrl}
59
- />
60
- </Suspense>,
61
- document.body
62
- )}
63
- </div>
64
- );
65
- }
66
-
67
- function ScalarModal(props: {
68
- method: OpenAPIV3_1.HttpMethods;
69
- path: string;
70
- securities: OpenAPIOperationData['securities'];
71
- servers: OpenAPIOperationData['servers'];
72
- specUrl: string;
73
- controllerRef: React.Ref<ScalarModalControllerRef>;
74
- }) {
75
- const { method, path, securities, servers, specUrl, controllerRef } = props;
76
-
77
- const getPrefillInputContextData = useOpenAPIPrefillContext();
78
- const prefillInputContext = getPrefillInputContextData();
79
-
80
- const prefillConfig = resolveTryItPrefillForOperation({
81
- operation: { securities, servers },
82
- prefillInputContext,
83
- });
84
-
85
- return (
86
- <ApiClientModalProvider
87
- configuration={{ url: specUrl, ...prefillConfig }}
88
- initialRequest={{ method, path }}
89
- >
90
- <ScalarModalController method={method} path={path} controllerRef={controllerRef} />
91
- </ApiClientModalProvider>
92
- );
93
- }
94
-
95
- type ScalarModalControllerRef = {
96
- openClient: (() => void) | undefined;
97
- };
98
-
99
- function ScalarModalController(props: {
100
- method: OpenAPIV3_1.HttpMethods;
101
- path: string;
102
- controllerRef: React.Ref<ScalarModalControllerRef>;
103
- }) {
104
- const { method, path, controllerRef } = props;
105
- const client = useApiClientModal();
106
- const openScalarClient = client?.open;
107
- const { onOpenClient: trackClientOpening } = useOpenAPIOperationContext();
108
- const openClient = useMemo(() => {
109
- if (openScalarClient) {
110
- return () => {
111
- openScalarClient({
112
- method,
113
- path,
114
- _source: 'gitbook',
115
- });
116
- trackClientOpening({ method, path });
117
- };
118
- }
119
- return null;
120
- }, [openScalarClient, method, path, trackClientOpening]);
121
- useImperativeHandle(
122
- controllerRef,
123
- () => ({ openClient: openClient ? () => openClient() : undefined }),
124
- [openClient]
125
- );
126
-
127
- // Open at mount
128
- useEffect(() => {
129
- openClient?.();
130
- }, [openClient]);
131
- return null;
132
- }
@@ -1,91 +0,0 @@
1
- import clsx from 'clsx';
2
- import { type ComponentPropsWithoutRef, forwardRef } from 'react';
3
-
4
- export function Section(props: ComponentPropsWithoutRef<'div'>) {
5
- return <div {...props} className={clsx('openapi-section', props.className)} />;
6
- }
7
-
8
- export function SectionHeader(props: ComponentPropsWithoutRef<'div'>) {
9
- return (
10
- <div
11
- {...props}
12
- className={clsx(
13
- 'openapi-section-header',
14
- props.className ? `${props.className}-header` : undefined
15
- )}
16
- />
17
- );
18
- }
19
-
20
- export function SectionHeaderContent(props: ComponentPropsWithoutRef<'div'>) {
21
- return (
22
- <div
23
- {...props}
24
- className={clsx(
25
- 'openapi-section-header-content',
26
- props.className && `${props.className}-header-content`
27
- )}
28
- />
29
- );
30
- }
31
-
32
- export const SectionBody = forwardRef(function SectionBody(
33
- props: ComponentPropsWithoutRef<'div'>,
34
- ref: React.ForwardedRef<HTMLDivElement>
35
- ) {
36
- return (
37
- <div
38
- ref={ref}
39
- {...props}
40
- className={clsx('openapi-section-body', props.className && `${props.className}-body`)}
41
- />
42
- );
43
- });
44
-
45
- export function SectionFooter(props: ComponentPropsWithoutRef<'div'>) {
46
- return (
47
- <div
48
- {...props}
49
- className={clsx(
50
- 'openapi-section-footer',
51
- props.className && `${props.className}-footer`
52
- )}
53
- />
54
- );
55
- }
56
-
57
- export function SectionFooterContent(props: ComponentPropsWithoutRef<'div'>) {
58
- return (
59
- <div
60
- {...props}
61
- className={clsx(
62
- 'openapi-section-footer-content',
63
- props.className && `${props.className}-footer-content`
64
- )}
65
- />
66
- );
67
- }
68
-
69
- export function StaticSection(props: {
70
- className: string;
71
- header?: React.ReactNode;
72
- children: React.ReactNode;
73
- footer?: React.ReactNode;
74
- }) {
75
- const { className, header, children, footer } = props;
76
- return (
77
- <Section className={className}>
78
- {header ? (
79
- <SectionHeader className={className}>
80
- <SectionHeaderContent className={className}>{header}</SectionHeaderContent>
81
- </SectionHeader>
82
- ) : null}
83
- <SectionBody className={className}>{children}</SectionBody>
84
- {footer ? (
85
- <SectionFooter className={className}>
86
- <SectionFooterContent className={className}>{footer}</SectionFooterContent>
87
- </SectionFooter>
88
- ) : null}
89
- </Section>
90
- );
91
- }
@@ -1,18 +0,0 @@
1
- // Bun Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`getUrlFromServerState indents correctly 1`] = `
4
- "<?xml version="1.0"?>
5
- <id>10</id>
6
- <name>doggie</name>
7
- <category>
8
- <id>1</id>
9
- <name>Dogs</name>
10
- </category>
11
- <photoUrls>string</photoUrls>
12
- <tags>
13
- <id>0</id>
14
- <name>string</name>
15
- </tags>
16
- <status>available</status>
17
- "
18
- `;