@stainless-api/docs-ui 0.1.0-beta.24 → 0.1.0-beta.26

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 (133) hide show
  1. package/dist/breadcrumbs-D5viAm7a.d.ts +20 -0
  2. package/dist/chunk-Bp6m_JJh.js +13 -0
  3. package/dist/component-generics-BnrVqdQj.d.ts +29 -0
  4. package/dist/component-generics-Df4EDvxk.js +41 -0
  5. package/dist/components/breadcrumbs.d.ts +2 -0
  6. package/dist/components/breadcrumbs.js +16 -0
  7. package/dist/components/chat.d.ts +14 -0
  8. package/dist/components/chat.js +128 -0
  9. package/dist/components/dropdown.d.ts +2 -0
  10. package/dist/components/dropdown.js +4 -0
  11. package/dist/components/icons.d.ts +50 -0
  12. package/dist/components/icons.js +3 -0
  13. package/dist/components/index.d.ts +12 -0
  14. package/dist/components/index.js +16 -0
  15. package/dist/components/method.d.ts +2 -0
  16. package/dist/components/method.js +16 -0
  17. package/dist/components/overview.d.ts +2 -0
  18. package/dist/components/overview.js +16 -0
  19. package/dist/components/primitives.d.ts +2 -0
  20. package/dist/components/primitives.js +16 -0
  21. package/dist/components/properties.d.ts +2 -0
  22. package/dist/components/properties.js +16 -0
  23. package/dist/components/scripts/dropdown.d.ts +12 -0
  24. package/dist/components/scripts/dropdown.js +50 -0
  25. package/dist/components/sdk.d.ts +3 -0
  26. package/dist/components/sdk.js +16 -0
  27. package/dist/components/sidebar.d.ts +2 -0
  28. package/dist/components/sidebar.js +16 -0
  29. package/dist/components/snippets.d.ts +4 -0
  30. package/dist/components/snippets.js +16 -0
  31. package/dist/contexts/component-generics.d.ts +2 -0
  32. package/dist/contexts/component-generics.js +3 -0
  33. package/dist/contexts/component-types.d.ts +18 -0
  34. package/dist/contexts/component-types.js +1 -0
  35. package/dist/contexts/component.d.ts +30 -0
  36. package/dist/contexts/component.js +16 -0
  37. package/dist/contexts/docs.d.ts +2 -0
  38. package/dist/contexts/docs.js +3 -0
  39. package/dist/contexts/index.d.ts +20 -0
  40. package/dist/contexts/index.js +16 -0
  41. package/dist/contexts/markdown.d.ts +2 -0
  42. package/dist/contexts/markdown.js +4 -0
  43. package/dist/contexts/navigation.d.ts +3 -0
  44. package/dist/contexts/navigation.js +3 -0
  45. package/dist/contexts/search.d.ts +4 -0
  46. package/dist/contexts/search.js +16 -0
  47. package/dist/contexts/use-components.d.ts +16 -0
  48. package/dist/contexts/use-components.js +4 -0
  49. package/dist/contexts-DO0sMzym.js +2581 -0
  50. package/dist/docs-Cj25B-Sh.js +50 -0
  51. package/dist/docs-DhNaW0DE.d.ts +45 -0
  52. package/dist/dropdown-Dv9VAYCW.d.ts +42 -0
  53. package/dist/dropdown-kUhwBigR.js +38 -0
  54. package/dist/icons--8QR-PrL.js +222 -0
  55. package/dist/index-BW6OPqAo.d.ts +16 -0
  56. package/dist/index-BXO3gZup.d.ts +239 -0
  57. package/dist/index-d8_VR8Z5.d.ts +14 -0
  58. package/dist/index.d.ts +22 -0
  59. package/dist/index.js +5030 -4830
  60. package/dist/languages/go.d.ts +13 -0
  61. package/dist/languages/go.js +16 -0
  62. package/dist/languages/http.d.ts +13 -0
  63. package/dist/languages/http.js +16 -0
  64. package/dist/languages/index.d.ts +13 -0
  65. package/dist/languages/index.js +16 -0
  66. package/dist/languages/java.d.ts +13 -0
  67. package/dist/languages/java.js +16 -0
  68. package/dist/languages/python.d.ts +13 -0
  69. package/dist/languages/python.js +16 -0
  70. package/dist/languages/ruby.d.ts +13 -0
  71. package/dist/languages/ruby.js +16 -0
  72. package/dist/languages/typescript.d.ts +13 -0
  73. package/dist/languages/typescript.js +16 -0
  74. package/dist/markdown/index.d.ts +12 -0
  75. package/dist/markdown/index.js +16 -0
  76. package/dist/markdown/md.d.ts +15 -0
  77. package/dist/markdown/md.js +3 -0
  78. package/dist/markdown/utils.d.ts +4 -0
  79. package/dist/markdown/utils.js +3 -0
  80. package/dist/markdown-DN8KaRR2.d.ts +21 -0
  81. package/dist/markdown-DunIdqFE.js +39 -0
  82. package/dist/mcp.cjs +983443 -0
  83. package/dist/md-Dg8aOyMA.js +41 -0
  84. package/dist/method-c3XDArUn.d.ts +70 -0
  85. package/dist/navigation-BSn6PX-7.d.ts +28 -0
  86. package/dist/navigation-CuCg3le8.js +20 -0
  87. package/dist/overview-D21weqVJ.d.ts +39 -0
  88. package/dist/pagefind-ChrPfuVv.js +15 -0
  89. package/dist/primitives-iB9fIrMF.d.ts +98 -0
  90. package/dist/properties-Ba6F_GGj.d.ts +46 -0
  91. package/dist/routing-BE6Vrs-z.d.ts +54 -0
  92. package/dist/routing-C8oZYLsf.js +189 -0
  93. package/dist/routing.d.ts +2 -0
  94. package/dist/routing.js +4 -4
  95. package/dist/sdk-D2x2l6JH.d.ts +118 -0
  96. package/dist/search/index.d.ts +26 -0
  97. package/dist/search/index.js +211 -0
  98. package/dist/search/providers/algolia.d.ts +24 -0
  99. package/dist/search/providers/algolia.js +16 -0
  100. package/dist/search/providers/fuse.d.ts +18 -0
  101. package/dist/search/providers/fuse.js +31 -0
  102. package/dist/search/providers/pagefind.d.ts +7 -0
  103. package/dist/search/providers/pagefind.js +3 -0
  104. package/dist/search/providers/walker.d.ts +9 -0
  105. package/dist/search/providers/walker.js +35 -0
  106. package/dist/search/types.d.ts +3 -0
  107. package/dist/search/types.js +3 -0
  108. package/dist/search-KMqOU2tz.d.ts +20 -0
  109. package/dist/sidebar-B1X4gmY2.d.ts +35 -0
  110. package/dist/snippets-BApdMOXp.d.ts +45 -0
  111. package/dist/style-BWu-Pqcm.d.ts +182 -0
  112. package/dist/style-CkbsakoF.js +183 -0
  113. package/dist/style.d.ts +2 -0
  114. package/dist/style.js +3 -0
  115. package/dist/styles/main.css +743 -748
  116. package/dist/styles/primitives.css +444 -427
  117. package/dist/styles/resets.css +33 -41
  118. package/dist/styles/search.css +265 -248
  119. package/dist/styles/sidebar.css +58 -60
  120. package/dist/styles/snippets.css +86 -88
  121. package/dist/styles/variables.css +86 -90
  122. package/dist/types-BLgvxY4i.d.ts +83 -0
  123. package/dist/types-DFN4M1Sp.js +34 -0
  124. package/dist/use-components-DI-AbT-D.js +7 -0
  125. package/dist/utils-B9JL_XWH.d.ts +21 -0
  126. package/dist/utils-BhYTrLot.js +32 -0
  127. package/dist/utils-ByZH9QWT.js +30 -0
  128. package/dist/utils-DlayebL1.d.ts +14 -0
  129. package/dist/utils.d.ts +2 -0
  130. package/dist/utils.js +4 -0
  131. package/package.json +4 -4
  132. package/src/search/mcp.ts +8 -8
  133. package/dist/mcp.js +0 -15967
@@ -0,0 +1,2581 @@
1
+ import { t as __export } from "./chunk-Bp6m_JJh.js";
2
+ import { a as useLanguage, c as useSnippet, i as useDocs, l as useSpec, n as useContentPanelLayout, o as useResource, r as useDeclaration, s as useSettings, t as DocsProvider } from "./docs-Cj25B-Sh.js";
3
+ import { a as createStrictContext, i as useComponents$1, n as customizeComponents, r as useComponentContext, t as ComponentProvider$1 } from "./component-generics-Df4EDvxk.js";
4
+ import { n as useNavigation, t as NavigationProvider } from "./navigation-CuCg3le8.js";
5
+ import { a as useRenderMarkdown, i as useMarkdownContext, n as MarkdownProvider, r as useHighlight, t as MarkdownContext } from "./markdown-DunIdqFE.js";
6
+ import { _ as walkTree, c as getLanguageSnippet, f as parseStainlessPath, n as Languages, o as generateRoute } from "./routing-C8oZYLsf.js";
7
+ import { t as style_default } from "./style-CkbsakoF.js";
8
+ import { t as useComponents } from "./use-components-DI-AbT-D.js";
9
+ import { a as PowershellIcon, c as TerraformIcon, i as KotlinIcon, l as TypescriptIcon, n as GoIcon, o as PythonIcon, r as JavaIcon, s as RubyIcon, t as CurlIcon } from "./icons--8QR-PrL.js";
10
+ import { n as getResourceFromSpec, r as isResourceEmpty, t as flatResources } from "./utils-BhYTrLot.js";
11
+ import { i as DropdownTrigger, n as DropdownItem, r as DropdownMenu, t as Dropdown } from "./dropdown-kUhwBigR.js";
12
+ import { a as item, c as parse, l as strong, n as fence, o as list, r as heading, s as paragraph, t as code, u as text } from "./md-Dg8aOyMA.js";
13
+ import { n as getSnippet, r as stripMarkup, t as getDecl } from "./utils-ByZH9QWT.js";
14
+ import { n as SearchableAttributes, r as SearchableAttributesChat } from "./types-DFN4M1Sp.js";
15
+ import * as React$1 from "react";
16
+ import React, { Fragment, useState } from "react";
17
+ import { searchClient } from "@algolia/client-search";
18
+ import { renderToStaticMarkup } from "react-dom/server";
19
+ import { ArrowDownLeft, ArrowDownWideNarrowIcon, ArrowUpNarrowWideIcon, ArrowUpRight, BookOpen, CheckIcon, ChevronDown, ChevronRight, CircleAlertIcon, Copy, CopyIcon, Github, MinusIcon, PlusIcon, X } from "lucide-react";
20
+ import clsx from "clsx";
21
+ import { Button } from "@stainless-api/ui-primitives";
22
+ import Markdoc from "@markdoc/markdoc";
23
+
24
+ //#region src/components/properties.tsx
25
+ function PropertyToggle({ target }) {
26
+ return <span className={style_default.ExpandToggle} data-stldocs-property-toggle-expanded="false" data-stldocs-property-toggle-target={target}>
27
+ <span className={style_default.ExpandToggleContent}>
28
+ Expand <ArrowDownWideNarrowIcon className={style_default.Icon} size={16} />
29
+ </span>
30
+ <span className={style_default.ExpandToggleContent}>
31
+ Collapse <ArrowUpNarrowWideIcon className={style_default.Icon} size={16} />
32
+ </span>
33
+ </span>;
34
+ }
35
+ function PropertyDescription({ description }) {
36
+ const { Markdown: Markdown$1 } = useComponents();
37
+ if (description) return <div className={style_default.PropertyDescription}>
38
+ <Markdown$1 content={description} />
39
+ </div>;
40
+ }
41
+ function Property$6({ id, name, typeName: typeName$1, badges, type, declaration: declaration$2, description, deprecated, expand, additional, constraints, children }) {
42
+ const Docs = useComponents();
43
+ const language = useLanguage();
44
+ const properties = useSettings()?.properties;
45
+ const collapseDescription = properties?.collapseDescription;
46
+ const types = properties?.types;
47
+ const textContent = <>
48
+ {typeof deprecated === "string" && <div className={style_default.PropertyDeprecatedMessage}>{deprecated}</div>}
49
+ {description && <Docs.PropertyDescription description={description} />}
50
+ {constraints && <div className={style_default.PropertyContent}>{constraints}</div>}
51
+ </>;
52
+ const rich = <>
53
+ <div className={style_default.PropertyDeclaration}>
54
+ {deprecated && <span className={style_default.PropertyDeprecated}>Deprecated</span>}
55
+ {declaration$2}
56
+ {badges && <span className={style_default.PropertyBadges}>{badges}</span>}
57
+ </div>
58
+ {collapseDescription === false ? textContent : null}
59
+ </>;
60
+ const simple = <>
61
+ {name && <div className={style_default.PropertyHeader}>
62
+ {deprecated && <span className={style_default.PropertyDeprecated}>Deprecated</span>}
63
+ {name && <span className={style_default.PropertyName}>{name}</span>}
64
+ {typeName$1 && <span className={style_default.PropertyTypeName}>{typeName$1}</span>}
65
+ {badges && <span className={style_default.PropertyBadges}>{badges}</span>}
66
+ </div>}
67
+ {type && <div className={style_default.PropertyType}>{type}</div>}
68
+ {collapseDescription === false ? textContent : null}
69
+ </>;
70
+ const content = <div id={id} className={style_default.PropertyInfo}>
71
+ {types === "simple" ? simple : rich}
72
+ </div>;
73
+ return <div className={style_default.Property} data-stldocs-language={language}>
74
+ {children || collapseDescription !== false && description ? <Docs.Expander summary={content} muted={!children} open={expand}>
75
+ {collapseDescription !== false ? textContent : null}
76
+ {additional}
77
+ {children && <div className={style_default.PropertyChildren}>{children}</div>}
78
+ </Docs.Expander> : content}
79
+ </div>;
80
+ }
81
+
82
+ //#endregion
83
+ //#region src/components/method.tsx
84
+ const HttpMethods = [
85
+ "get",
86
+ "head",
87
+ "put",
88
+ "delete",
89
+ "post",
90
+ "patch"
91
+ ];
92
+ const HttpMethodIcons = {
93
+ get: ArrowDownLeft,
94
+ put: ArrowUpRight,
95
+ post: ArrowUpRight,
96
+ patch: ArrowUpRight,
97
+ delete: X
98
+ };
99
+ function MethodIconBadge({ httpMethod, showName }) {
100
+ if (!httpMethod || !HttpMethods.includes(httpMethod)) return null;
101
+ return <span className={clsx(style_default.MethodRouteHttpMethod, style_default.MethodRouteHttpMethodIconOnly)} data-method={httpMethod}>
102
+ {HttpMethodIcons[httpMethod] && React$1.createElement(HttpMethodIcons[httpMethod], {
103
+ size: 14,
104
+ strokeWidth: 3,
105
+ className: style_default.Icon
106
+ })}
107
+ {showName && httpMethod}
108
+ </span>;
109
+ }
110
+ function MethodHeader({ title, badges, signature, children, level }) {
111
+ const Heading = level ?? "h5";
112
+ return <div className={style_default.MethodHeader}>
113
+ <Heading className={style_default.MethodTitle}>{title}</Heading>
114
+ {badges && <div className={style_default.MethodBadges}>{badges}</div>}
115
+ {signature}
116
+ {children}
117
+ </div>;
118
+ }
119
+ function MethodRoute({ httpMethod, endpoint, iconOnly }) {
120
+ return <div className={style_default.MethodRoute}>
121
+ <MethodIconBadge httpMethod={httpMethod} showName={!iconOnly} />
122
+ {endpoint && <span className={style_default.MethodRouteEndpoint}>{endpoint}</span>}
123
+ </div>;
124
+ }
125
+ function MethodDescription({ description }) {
126
+ const { Markdown: Markdown$1 } = useComponents();
127
+ if (description) return <div className={style_default.MethodDescription}>
128
+ <Markdown$1 content={description} />
129
+ </div>;
130
+ }
131
+ function MethodInfo$1({ children, parameters, returns }) {
132
+ return <div className={style_default.MethodInfo}>
133
+ {children && <div className={style_default.MethodContent}>{children}</div>}
134
+
135
+ {parameters && <div className={style_default.MethodInfoSection}>
136
+ <h5>
137
+ Parameters
138
+ <PropertyToggle target="parameters" />
139
+ </h5>
140
+ <div className={style_default.MethodParameters} data-stldocs-property-group="parameters">
141
+ {parameters}
142
+ </div>
143
+ </div>}
144
+
145
+ {returns && <div className={style_default.MethodInfoSection}>
146
+ <h5>
147
+ Returns
148
+ <PropertyToggle target="returns" />
149
+ </h5>
150
+ <div className={style_default.MethodReturns} data-stldocs-property-group="returns">
151
+ {returns}
152
+ </div>
153
+ </div>}
154
+ </div>;
155
+ }
156
+ function Method({ id, header, children, className,...props }) {
157
+ return <div id={id} className={clsx(style_default.Method, className)} tabIndex={0} {...props}>
158
+ {header}
159
+ <div className={style_default.MethodBody}>{children}</div>
160
+ </div>;
161
+ }
162
+
163
+ //#endregion
164
+ //#region src/components/primitives.tsx
165
+ function Join({ items, limit, children }) {
166
+ return (limit && items.length > limit + 1 ? [...items.slice(0, limit), <span className={style_default.Truncation} key="truncation">
167
+ {items.length - limit} more
168
+ </span>] : items).map((item$1, index) => <Fragment key={`iterator:${index}`}>
169
+ {!!index && children}
170
+ {item$1}
171
+ </Fragment>);
172
+ }
173
+ function Expander({ id, open, summary, virtual, muted, children }) {
174
+ const virtualExpanders = useSettings()?.virtualExpanders;
175
+ if (virtual || virtualExpanders) return <VirtualExpander summary={summary} open={open} muted={muted} id={id}>
176
+ {children}
177
+ </VirtualExpander>;
178
+ return <details className={style_default.Expander} open={open} data-stldocs-expander-muted={muted} data-stldocs-expander-initial-state={open}>
179
+ <summary className={style_default.ExpanderSummary}>
180
+ <div className={style_default.ExpanderSummaryIcon}>
181
+ <PlusIcon size={16} strokeWidth={1} className={style_default.Icon} />
182
+ <MinusIcon size={16} strokeWidth={1} className={style_default.Icon} />
183
+ </div>
184
+ <div className={style_default.ExpanderSummaryContent}>{summary}</div>
185
+ </summary>
186
+ <div className={style_default.ExpanderContent} id={id}>
187
+ {children}
188
+ </div>
189
+ </details>;
190
+ }
191
+ function VirtualExpander({ id, open: isOpen, muted, summary, children }) {
192
+ const [open, setOpen] = useState(isOpen);
193
+ React$1.useEffect(() => {
194
+ if (isOpen) setOpen(true);
195
+ }, [isOpen]);
196
+ return <div className={style_default.Expander} data-open={open} data-stldocs-expander-muted={muted} data-stldocs-expander-initial-state={open}>
197
+ <div className={style_default.ExpanderSummary} onClick={() => setOpen(!open)}>
198
+ <div className={style_default.ExpanderSummaryIcon}>
199
+ <PlusIcon size={16} className={style_default.Icon} />
200
+ <MinusIcon size={16} className={style_default.Icon} />
201
+ </div>
202
+ <div className={style_default.ExpanderSummaryContent}>{summary}</div>
203
+ </div>
204
+ {open && <div className={style_default.ExpanderContent} id={id}>
205
+ {children}
206
+ </div>}
207
+ </div>;
208
+ }
209
+ function Markdown({ content }) {
210
+ const rendered = useRenderMarkdown(content);
211
+ return rendered && <div className={`${style_default.Markdown} ${style_default.Content}`} dangerouslySetInnerHTML={{ __html: rendered }} />;
212
+ }
213
+ function Badge({ id, children }) {
214
+ return <span className={style_default.Badge} data-badge-id={id}>
215
+ {children ?? id}
216
+ </span>;
217
+ }
218
+ const TooltipNestingContext = React$1.createContext(false);
219
+ function Tooltip({ content, children }) {
220
+ if (React$1.useContext(TooltipNestingContext)) return children;
221
+ return <span className={style_default.Tooltip}>
222
+ <span className={style_default.TooltipContent}>
223
+ <TooltipNestingContext.Provider value={true}>{content}</TooltipNestingContext.Provider>
224
+ </span>
225
+ <span className={style_default.TooltipHost}>{children}</span>
226
+ </span>;
227
+ }
228
+ function Link({ stainlessPath, scroll = true, children,...props }) {
229
+ const { basePath, onNavigate } = useNavigation();
230
+ const language = useLanguage();
231
+ const href = React$1.useMemo(() => {
232
+ if (props.href) return props.href;
233
+ if (stainlessPath && basePath) return generateRoute(basePath, language, stainlessPath);
234
+ }, [
235
+ basePath,
236
+ language,
237
+ stainlessPath,
238
+ props.href
239
+ ]);
240
+ const handleClick = React$1.useCallback((e) => {
241
+ if (props.onClick) props.onClick(e);
242
+ if (e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;
243
+ if (href) onNavigate?.(e, {
244
+ href,
245
+ language,
246
+ stainlessPath,
247
+ scroll
248
+ });
249
+ }, [
250
+ href,
251
+ scroll,
252
+ onNavigate,
253
+ language,
254
+ props,
255
+ stainlessPath
256
+ ]);
257
+ if (!href) return children;
258
+ return <a href={href} onClick={handleClick} {...props}>
259
+ {children}
260
+ </a>;
261
+ }
262
+ const Input = React$1.forwardRef(function Input$1({ left, right,...props }, ref) {
263
+ return <div className={style_default.Input}>
264
+ {left}
265
+ <input {...props} ref={ref} className={style_default.InputTextField} />
266
+ {right}
267
+ </div>;
268
+ });
269
+ const ToggleButton = React$1.forwardRef(function ToggleButton$1({ children, selected,...props }, ref) {
270
+ return <button {...props} ref={ref} className={style_default.ToggleButton} data-stldocs-toggle-selected={selected}>
271
+ {children}
272
+ </button>;
273
+ });
274
+ function ListView({ items, itemDelegate, onSelectListItem,...rest }) {
275
+ const [selectedIndex, setSelectedIndex] = React$1.useState(0);
276
+ const [keyboardIndex, setKeyboardIndex] = React$1.useState(0);
277
+ const listRef = React$1.useRef(null);
278
+ const itemRef = React$1.useRef(null);
279
+ React$1.useEffect(() => {
280
+ setSelectedIndex(0);
281
+ setKeyboardIndex(0);
282
+ }, [items]);
283
+ const handleSelect = React$1.useCallback(() => {
284
+ const item$1 = items[selectedIndex];
285
+ if (item$1) onSelectListItem?.(item$1);
286
+ }, [
287
+ items,
288
+ selectedIndex,
289
+ onSelectListItem
290
+ ]);
291
+ React$1.useEffect(() => {
292
+ function handleKeyPress(ev) {
293
+ switch (ev.key) {
294
+ case "ArrowUp": {
295
+ ev.preventDefault();
296
+ const value = Math.max(0, selectedIndex - 1);
297
+ setSelectedIndex(value);
298
+ setKeyboardIndex(value);
299
+ break;
300
+ }
301
+ case "ArrowDown": {
302
+ ev.preventDefault();
303
+ const value = Math.min(items.length, selectedIndex + 1);
304
+ setSelectedIndex(value);
305
+ setKeyboardIndex(value);
306
+ break;
307
+ }
308
+ case "Enter":
309
+ ev.preventDefault();
310
+ handleSelect();
311
+ break;
312
+ }
313
+ }
314
+ addEventListener("keydown", handleKeyPress);
315
+ return () => removeEventListener("keydown", handleKeyPress);
316
+ }, [
317
+ items,
318
+ selectedIndex,
319
+ handleSelect
320
+ ]);
321
+ React$1.useEffect(() => {
322
+ if (!keyboardIndex || !itemRef.current || !listRef.current) {
323
+ listRef?.current?.scroll(0, 0);
324
+ return;
325
+ }
326
+ const selectedBounds = itemRef.current.getBoundingClientRect();
327
+ const listBounds = listRef.current.getBoundingClientRect();
328
+ if (selectedBounds.top < listBounds.top || selectedBounds.bottom > listBounds.bottom) itemRef.current.scrollIntoView({ block: "nearest" });
329
+ }, [
330
+ keyboardIndex,
331
+ items,
332
+ listRef
333
+ ]);
334
+ return <div ref={listRef} className={style_default.ListView} tabIndex={0} {...rest}>
335
+ {items.map((item$1, index) => <div key={index} ref={index === selectedIndex ? itemRef : null} className={style_default.ListViewItem} data-stldocs-listview-selected={index === selectedIndex} onClick={handleSelect} onMouseMove={() => setSelectedIndex(index)}>
336
+ {itemDelegate(item$1, index === selectedIndex)}
337
+ </div>)}
338
+ </div>;
339
+ }
340
+
341
+ //#endregion
342
+ //#region src/components/sdk.tsx
343
+ const PropertyModelContext = React$1.createContext({});
344
+ function usePropertyModel() {
345
+ return React$1.useContext(PropertyModelContext);
346
+ }
347
+ const ReferenceNestingContext = React$1.createContext([]);
348
+ function useReferenceNesting() {
349
+ return React$1.useContext(ReferenceNestingContext);
350
+ }
351
+ const SDKSnippetLanguages = {
352
+ "node.default": {
353
+ name: "TypeScript",
354
+ icon: "typescript"
355
+ },
356
+ "typescript.default": {
357
+ name: "TypeScript",
358
+ icon: "typescript"
359
+ },
360
+ "python.default": {
361
+ name: "Python",
362
+ icon: "python"
363
+ },
364
+ "go.default": {
365
+ name: "Go",
366
+ icon: "go"
367
+ },
368
+ "java.default": {
369
+ name: "Java",
370
+ icon: "java"
371
+ },
372
+ "kotlin.default": {
373
+ name: "Kotlin",
374
+ icon: "kotlin"
375
+ },
376
+ "http.curl": {
377
+ name: "cURL",
378
+ icon: "http"
379
+ },
380
+ "http.powershell": {
381
+ name: "Powershell",
382
+ icon: "powershell"
383
+ },
384
+ "terraform.default": {
385
+ name: "Terraform",
386
+ icon: "terraform"
387
+ },
388
+ "ruby.default": {
389
+ name: "Ruby",
390
+ icon: "ruby"
391
+ }
392
+ };
393
+ function SDKChildren({ paths, expand, depth }) {
394
+ const Docs = useComponents();
395
+ return <div className={style_default.Properties}>
396
+ {paths.map((path, i) => <Docs.SDKDeclaration path={path} key={i} expand={expand} depth={depth} />)}
397
+ </div>;
398
+ }
399
+ function SDKDeclaration({ path, expand, depth = 0 }) {
400
+ const Lang = useLanguageComponents();
401
+ const Docs = useComponents();
402
+ const decl = useDeclaration(path, true);
403
+ const settings = useSettings();
404
+ const model = usePropertyModel();
405
+ const nesting = useReferenceNesting();
406
+ const { selectedPath } = useNavigation();
407
+ if (decl.kind.endsWith("Reference")) {
408
+ const refId = "type" in decl && typeof decl.type !== "string" && "$ref" in decl.type ? decl.type["$ref"] : void 0;
409
+ if (refId && refId !== path && !nesting.includes(refId)) return <ReferenceNestingContext.Provider value={[...nesting, refId]}>
410
+ <SDKDeclaration path={refId} expand={expand} depth={depth} />
411
+ </ReferenceNestingContext.Provider>;
412
+ }
413
+ const isUnion = "childrenParentSchema" in decl && decl.childrenParentSchema && ["enum", "union"].includes(decl.childrenParentSchema);
414
+ const id = model?.propertyPath ? `${model.propertyPath} + ${path}` : path;
415
+ const shouldExpand = selectedPath?.startsWith(path) && nesting.length < 1 || settings?.properties?.expandDepth && depth <= settings?.properties?.expandDepth && !isUnion || expand;
416
+ const content = <Lang.Property decl={decl}>
417
+ {({ ...props }) => <Docs.Property id={id} expand={shouldExpand} constraints={"constraints" in decl && <Docs.SDKConstraints constraints={decl["constraints"]} />} declaration={<Lang.Declaration decl={decl} />} description={"docstring" in decl ? decl["docstring"] : void 0} deprecated={decl.deprecated} {...props}>
418
+ {"children" in decl && (decl.children?.length ?? 0) > 0 && (settings?.properties?.includeModelProperties !== false || !("modelPath" in decl)) && <>
419
+ {isUnion && <div className={style_default.PropertyAnnotation}>Accepts one of the following:</div>}
420
+ <Docs.SDKChildren paths={decl.children ?? []} depth={depth + 1} />
421
+ </>}
422
+ </Docs.Property>}
423
+ </Lang.Property>;
424
+ if ("modelPath" in decl) {
425
+ const value = {
426
+ modelPath: decl.modelPath,
427
+ propertyPath: decl.stainlessPath
428
+ };
429
+ return <PropertyModelContext.Provider value={value}>{content}</PropertyModelContext.Provider>;
430
+ }
431
+ return content;
432
+ }
433
+ function SDKConstraints({ constraints }) {
434
+ if (constraints) return <div className={style_default.PropertyConstraints}>
435
+ {Object.entries(constraints).map(([name, value]) => <div className={style_default.PropertyConstraint} key={name}>
436
+ <span className={style_default.PropertyConstraintName}>{name}</span>
437
+ <span className={style_default.PropertyConstraintValue}>{value}</span>
438
+ </div>)}
439
+ </div>;
440
+ }
441
+ const snippetIcons = {
442
+ "node.default": TypescriptIcon,
443
+ "typescript.default": TypescriptIcon,
444
+ "go.default": GoIcon,
445
+ "python.default": PythonIcon,
446
+ "terraform.default": TerraformIcon,
447
+ "http.curl": CurlIcon,
448
+ "http.powershell": PowershellIcon,
449
+ "ruby.default": RubyIcon,
450
+ "java.default": JavaIcon,
451
+ "kotlin.default": KotlinIcon
452
+ };
453
+ function SDKIcon({ language }) {
454
+ const LangIcon = snippetIcons[language];
455
+ if (!LangIcon) return null;
456
+ return <LangIcon className={clsx(style_default.Icon, language.split(".").shift())} />;
457
+ }
458
+ function SDKRequestTitle({ snippetLanguage }) {
459
+ const languageName = SDKSnippetLanguages[snippetLanguage]?.name;
460
+ return <span className={style_default.SnippetRequestTitleLanguage}>
461
+ <SDKIcon language={snippetLanguage} /> {languageName}
462
+ </span>;
463
+ }
464
+ function SDKExample({ method, transformRequestSnippet }) {
465
+ const Docs = useComponents();
466
+ const snippetLanguage = getLanguageSnippet(useLanguage());
467
+ return <Docs.Snippet requestTitle={<Docs.SDKRequestTitle snippetLanguage={snippetLanguage} />} method={method} transformRequestSnippet={transformRequestSnippet} />;
468
+ }
469
+ function SDKMethodHeader({ method }) {
470
+ const Docs = useComponents();
471
+ const Lang = useLanguageComponents();
472
+ const decl = useDeclaration(method.stainlessPath, true);
473
+ return <Docs.MethodHeader level="h1" title={method.summary ?? method.title} signature={<Lang.MethodSignature decl={decl} />} badges={method.deprecated && <Docs.Badge id="deprecated">Deprecated</Docs.Badge>}>
474
+ <Docs.MethodRoute httpMethod={method.httpMethod} endpoint={method.endpoint.split(" ", 2).at(-1)} />
475
+ </Docs.MethodHeader>;
476
+ }
477
+ function SDKMethodInfo({ method }) {
478
+ const Docs = useComponents();
479
+ const Lang = useLanguageComponents();
480
+ const decl = useDeclaration(method.stainlessPath, true);
481
+ const spec = useSpec();
482
+ const language = useLanguage();
483
+ if (Lang.MethodInfo) return <Lang.MethodInfo decl={decl} />;
484
+ function shouldExpand(items) {
485
+ if (items.length > 1) return false;
486
+ const item$1 = items[0];
487
+ if (!item$1) return false;
488
+ const decl$1 = spec?.decls?.[language]?.[item$1];
489
+ return decl$1 && "children" in decl$1 && decl$1.children && decl$1.children.length > 0;
490
+ }
491
+ return <Docs.MethodInfo parameters={"paramsChildren" in decl && Array.isArray(decl.paramsChildren) && decl.paramsChildren.length > 0 && <Docs.SDKChildren expand={shouldExpand(decl.paramsChildren)} paths={decl.paramsChildren} />} returns={"responseChildren" in decl && decl.responseChildren && decl.responseChildren.length > 0 && <Docs.SDKChildren expand={shouldExpand(decl.responseChildren)} paths={decl.responseChildren} />} />;
492
+ }
493
+ function SDKMethod({ method, transformRequestSnippet }) {
494
+ const Docs = useComponents();
495
+ const decl = useDeclaration(method?.stainlessPath, true);
496
+ const layout = useContentPanelLayout();
497
+ if (!decl) return;
498
+ return <Docs.Method id={method.stainlessPath} header={<Docs.SDKMethodHeader method={method} />} className={clsx({
499
+ [style_default.MethodSinglePane]: layout === "single-pane",
500
+ [style_default.MethodDoublePane]: layout === "double-pane"
501
+ })}>
502
+ <div className={style_default.MethodContentColumn}>
503
+ <Docs.MethodDescription description={method.description} />
504
+ <Docs.SDKMethodInfo method={method} />
505
+ </div>
506
+ <div className={style_default.MethodExample + " not-content"}>
507
+ <Docs.SDKExample method={method} transformRequestSnippet={transformRequestSnippet} />
508
+ </div>
509
+ <div className={style_default.MethodResponseColumn}>
510
+ <h5>Returns Examples</h5>
511
+ <Docs.SnippetResponse responses={method.exampleResponses} />
512
+ </div>
513
+ </Docs.Method>;
514
+ }
515
+ function SDKModel({ model }) {
516
+ const Docs = useComponents();
517
+ if (!useDeclaration(`${model.stainlessPath} > (schema)`, true)) return null;
518
+ return <div className={style_default.Model} tabIndex={0}>
519
+ <div className={style_default.ResourceContentProperties}>
520
+ <Docs.SDKDeclaration path={`${model.stainlessPath} > (schema)`} />
521
+ </div>
522
+ </div>;
523
+ }
524
+ function SDKReference({ stainlessPath, children }) {
525
+ const Docs = useComponents();
526
+ if (!stainlessPath || !stainlessPath.endsWith("(schema)")) return children;
527
+ return <span className={style_default.TypeReference}>
528
+ <Docs.Link stainlessPath={stainlessPath}>{children}</Docs.Link>
529
+ </span>;
530
+ }
531
+ function SDKLanguageBlock({ language, version, install, links }) {
532
+ const Docs = useComponents();
533
+ const lang = `${language}.default`;
534
+ return <div className={style_default.LanguageBlock}>
535
+ <div className={style_default.LanguageBlockContent}>
536
+ <div className={style_default.LanguageBlockContentIcon}>
537
+ <Docs.SDKIcon language={lang} size={24} />
538
+ </div>
539
+ <div className={style_default.LanguageBlockContentInfo}>
540
+ <div className={style_default.LanguageBlockContentInfoLanguage}>{Docs.SDKSnippetLanguages[lang].name}</div>
541
+ <div className={style_default.LanguageBlockContentInfoVersion}>{version}</div>
542
+ </div>
543
+ </div>
544
+
545
+ <div className={style_default.LanguageBlockInstall} data-stldocs-copy-parent>
546
+ <pre data-stldocs-copy-content>{install}</pre>{" "}
547
+ <Button variant="ghost" size="sm" data-stldocs-snippet-copy>
548
+ <Copy size={16} className={style_default.Icon} />
549
+ </Button>
550
+ </div>
551
+
552
+ <div className={style_default.LanguageBlockLinks}>
553
+ <Button href={links.repo} variant="outline">
554
+ <Button.Icon icon={Github} />
555
+ </Button>
556
+ <Button href={links.docs} variant="outline">
557
+ <Button.Icon icon={BookOpen} />
558
+ <Button.Label>Read Docs</Button.Label>
559
+ </Button>
560
+ </div>
561
+ </div>;
562
+ }
563
+
564
+ //#endregion
565
+ //#region src/components/snippets.tsx
566
+ function SnippetCode({ content, language }) {
567
+ const lang = useLanguage();
568
+ const highlighted = useHighlight(content, language || lang);
569
+ return <div className={style_default.SnippetCode}>
570
+ <pre className={style_default.SnippetCodeContent} data-stldocs-copy-content>
571
+ <code className={language === "json" ? "snippet-json" : "snippet"} dangerouslySetInnerHTML={{ __html: highlighted }} />
572
+ </pre>
573
+ </div>;
574
+ }
575
+ function SnippetContainer({ children }) {
576
+ return <div className={clsx(style_default.Snippet)}>{children}</div>;
577
+ }
578
+ function SnippetRequestContainer({ children }) {
579
+ return <div>{children}</div>;
580
+ }
581
+ function Snippet({ requestTitle, method, transformRequestSnippet }) {
582
+ const Docs = useComponents();
583
+ const language = useLanguage();
584
+ const [CopyButtonIcon, setCopyIcon] = React$1.useState(CopyIcon);
585
+ const originalSnippet = useSnippet(method.stainlessPath, void 0, language === "http" ? "curl" : "default");
586
+ const decl = useDeclaration(method.stainlessPath, false);
587
+ if (!originalSnippet) {
588
+ console.warn(`Snippet not found for method '${method.stainlessPath}'`);
589
+ return null;
590
+ }
591
+ const signature = decl && "qualified" in decl ? decl.qualified : void 0;
592
+ const responses = method.exampleResponses;
593
+ const snippet = transformRequestSnippet ? transformRequestSnippet({
594
+ snippet: originalSnippet,
595
+ language
596
+ }) : originalSnippet;
597
+ async function handleCopy() {
598
+ try {
599
+ await navigator.clipboard.writeText(snippet);
600
+ setCopyIcon(CheckIcon);
601
+ } catch {
602
+ setCopyIcon(CircleAlertIcon);
603
+ }
604
+ setTimeout(() => setCopyIcon(CopyIcon), 1e3);
605
+ }
606
+ return <Docs.SnippetContainer signature={signature}>
607
+ {snippet && <Docs.SnippetRequestContainer signature={signature}>
608
+ <div className={style_default.SnippetRequest} data-stldocs-copy-parent>
609
+ <div className={style_default.SnippetRequestTitle}>
610
+ <div className={style_default.SnippetRequestTitleMethod}>
611
+ <Docs.MethodRoute httpMethod={method.httpMethod} iconOnly />
612
+ <h5>{method.summary}</h5>
613
+ </div>
614
+ <div className={style_default.SnippetRequestTitleContent}>{requestTitle}</div>
615
+ <Button variant="ghost" data-stldocs-snippet-copy>
616
+ <CopyButtonIcon size={16} className={style_default.Icon} onClick={handleCopy} />
617
+ </Button>
618
+ </div>
619
+ <Docs.SnippetCode content={snippet} signature={signature} />
620
+ </div>
621
+ </Docs.SnippetRequestContainer>}
622
+ {responses && <Docs.SnippetResponse responses={responses} />}
623
+ </Docs.SnippetContainer>;
624
+ }
625
+ function SnippetResponse({ responses }) {
626
+ const { SnippetCode: SnippetCode$1 } = useComponents();
627
+ if (!responses) return null;
628
+ const mappedResponses = Object.keys(responses).map((key) => {
629
+ const responseContent = responses[key];
630
+ if (!responseContent) return null;
631
+ const responseType = Object.keys(responseContent)[0];
632
+ if (!responseType) return null;
633
+ const response = responseContent[responseType];
634
+ if (!response) return null;
635
+ const examples = response?.examples;
636
+ if (!examples) return null;
637
+ const exampleType = Object.keys(examples)[0];
638
+ if (!exampleType) return null;
639
+ let value = examples[exampleType]?.value;
640
+ if (!value) return null;
641
+ if (responseType === "application/json") value = JSON.stringify(value, null, 2);
642
+ return {
643
+ responseCode: key,
644
+ content: value
645
+ };
646
+ }).filter(Boolean);
647
+ if (mappedResponses.length === 0) return null;
648
+ return <div className={style_default.SnippetMultiResponse}>
649
+ <div className={clsx(style_default.Snippet)}>
650
+ <div className={clsx(style_default.SnippetResponseTab, mappedResponses.length === 1 && style_default.SnippetResponseTabSingleReturn)}>
651
+ {mappedResponses.map(({ responseCode }, index) => <button className={clsx(style_default.SnippetResponseTabItem, index === 0 && style_default.SnippetResponseTabItemActive)} key={`snippet-response-tab-item-${responseCode}-${index}`} data-snippet-response-tab-id={`snippet-response-tab-${responseCode}-${index}`} disabled={mappedResponses.length === 1}>
652
+ {responseCode} example
653
+ </button>)}
654
+ </div>
655
+ {mappedResponses.map(({ responseCode, content }, index) => {
656
+ return <div className={clsx(style_default.SnippetResponsePane, index === 0 && style_default.SnippetResponsePaneActive)} key={`snippet-response-${responseCode}-${index}`} data-snippet-response-pane-id={`snippet-response-tab-${responseCode}-${index}`}>
657
+ <SnippetCode$1 content={content} language="json" />
658
+ </div>;
659
+ })}
660
+ </div>
661
+ </div>;
662
+ }
663
+
664
+ //#endregion
665
+ //#region src/components/overview.tsx
666
+ function SDKResourceHeader({ resource, parents }) {
667
+ const segments = parents?.map((parent, index) => <span className={style_default.ResourceTitleSegment} key={parent.stainlessPath}>
668
+ {parent.title}
669
+ {index < parents.length && <ChevronRight size={16} className={style_default.Icon} />}
670
+ </span>);
671
+ if (!segments && !resource.description) return null;
672
+ return <div className={style_default.ResourceHeader}>
673
+ {segments && <h4 id={resource.stainlessPath} className={style_default.ResourceTitle}>
674
+ {segments}
675
+ <span className={style_default.ResourceTitleSegment}>{resource.title}</span>
676
+ </h4>}
677
+ {resource.description && <div className={style_default.ResourceDescription}>
678
+ <Markdown content={resource.description} />
679
+ </div>}
680
+ </div>;
681
+ }
682
+ function SDKMethodSummary({ method }) {
683
+ const Docs = useComponents();
684
+ const Lang = useLanguageComponents();
685
+ const decl = useDeclaration(method.stainlessPath, true);
686
+ return <Docs.MethodHeader level="h5" title={<Docs.Link stainlessPath={method.stainlessPath}>{method.summary ?? method.title}</Docs.Link>} signature={<Lang.MethodSignature decl={decl} />} badges={method.deprecated && <Docs.Badge id="deprecated">Deprecated</Docs.Badge>}>
687
+ <Docs.MethodRoute httpMethod={method.httpMethod} endpoint={method.endpoint.split(" ", 2).at(-1)} />
688
+ {}
689
+ {}
690
+ </Docs.MethodHeader>;
691
+ }
692
+ function SDKResource({ resource, parents, showModels }) {
693
+ const Docs = useComponents();
694
+ const language = useLanguage();
695
+ const spec = useSpec();
696
+ const methods = Object.values(resource.methods).filter((method) => spec?.decls?.[language]?.[method.stainlessPath]);
697
+ const models = Object.values(resource.models).filter((model) => spec?.decls?.[language]?.[`${model.stainlessPath} > (schema)`]);
698
+ return <div className={style_default.Resource}>
699
+ <div className={style_default.ResourceContent}>
700
+ <Docs.SDKResourceHeader resource={resource} parents={parents} />
701
+ {methods.length > 0 && <div className={style_default.ResourceContentGroup}>
702
+ {methods.map((method) => <div className={style_default.MethodSummary} key={method.stainlessPath}>
703
+ <Docs.SDKMethodSummary method={method} />
704
+ </div>)}
705
+ </div>}
706
+
707
+ {showModels !== false && models.length > 0 && <div className={style_default.ResourceContentGroup} data-stldocs-property-group="models">
708
+ <h5 className={style_default.ResourceContentGroupModelTitle}>
709
+ Models
710
+ <PropertyToggle target="models" />
711
+ </h5>
712
+ {models.map((model) => <Docs.SDKModel model={model} key={model.stainlessPath} />)}
713
+ </div>}
714
+ </div>
715
+ </div>;
716
+ }
717
+ function SDKOverview({ resource }) {
718
+ const { SDKResource: SDKResource$1 } = useComponents();
719
+ const nested = React$1.useMemo(() => flatResources(resource.subresources, [resource]), [resource]);
720
+ return <div className={style_default.Overview}>
721
+ <div className={style_default.OverviewHeader}>
722
+ <h1>{resource.title}</h1>
723
+ </div>
724
+ <SDKResource$1 resource={resource} />
725
+ {nested.map((props, index) => <SDKResource$1 {...props} key={index} />)}
726
+ </div>;
727
+ }
728
+ function SDKRoot({ stainlessPath }) {
729
+ const spec = useSpec();
730
+ const Docs = useComponents();
731
+ const parsed = parseStainlessPath(stainlessPath);
732
+ const resource = spec && getResourceFromSpec(stainlessPath, spec);
733
+ if (!resource || !parsed) {
734
+ console.warn(`Could not find resource or parsed path for '${stainlessPath}'`);
735
+ return null;
736
+ }
737
+ if (parsed.method) {
738
+ const method = resource.methods[parsed.method];
739
+ if (!method) {
740
+ console.warn(`Method '${parsed.method}' not found in resource '${resource.stainlessPath}'`);
741
+ return null;
742
+ }
743
+ return <div className={style_default.Root}>
744
+ <Docs.SDKMethod method={method} />
745
+ </div>;
746
+ }
747
+ return <div className={style_default.Root}>
748
+ <Docs.SDKOverview resource={resource} />
749
+ </div>;
750
+ }
751
+
752
+ //#endregion
753
+ //#region src/components/breadcrumbs.tsx
754
+ function generateApiBreadcrumbs(fullPath, spec, basePath) {
755
+ const cleanBasePath = basePath.replace(/\/+$/, "");
756
+ const cleanPath = fullPath.replace(/\/+$/, "");
757
+ if (!cleanPath.startsWith(cleanBasePath)) return null;
758
+ const rest = cleanPath.slice(cleanBasePath.length).split("/").filter(Boolean);
759
+ const breadcrumbs = [];
760
+ let href = cleanBasePath;
761
+ let i = 0;
762
+ if (Languages.includes(rest[0])) {
763
+ href += `/${rest[0]}`;
764
+ i++;
765
+ }
766
+ breadcrumbs.push({
767
+ title: "API Reference",
768
+ href
769
+ });
770
+ let currentSpec = spec;
771
+ while (i < rest.length) {
772
+ const idType = rest[i];
773
+ const idValue = rest[i + 1];
774
+ if (!idType || !idValue || !currentSpec?.[idType]?.[idValue]) break;
775
+ currentSpec = currentSpec[idType][idValue];
776
+ href += `/${idType}/${idValue}`;
777
+ const title = (idType === "methods" ? currentSpec.summary : currentSpec.title) ?? idValue;
778
+ breadcrumbs.push({
779
+ title,
780
+ href
781
+ });
782
+ i += 2;
783
+ }
784
+ return breadcrumbs;
785
+ }
786
+ function SDKBreadcrumbs({ spec, currentPath, basePath = "/api", config = { includeCurrentPage: false } }) {
787
+ const breadcrumbs = generateApiBreadcrumbs(currentPath, spec, basePath);
788
+ if (!breadcrumbs || breadcrumbs.length === 0) return null;
789
+ if (!config?.includeCurrentPage && breadcrumbs.length > 1) breadcrumbs.pop();
790
+ const items = breadcrumbs.map((crumb, index) => <div key={index} className={style_default.BreadcrumbsItem}>
791
+ <a href={crumb.href} className={style_default.BreadcrumbsLink}>
792
+ {crumb.title}
793
+ </a>
794
+ </div>);
795
+ return <div className={style_default.Breadcrumbs}>
796
+ <Join limit={breadcrumbs.length} items={items}>
797
+ <ChevronRight />
798
+ </Join>
799
+ </div>;
800
+ }
801
+
802
+ //#endregion
803
+ //#region src/components/sidebar.tsx
804
+ function SidebarExpander({ open, summary, children }) {
805
+ return <details className={style_default.SidebarExpander} open={open}>
806
+ <summary className={style_default.ExpanderSummary}>
807
+ <div className={style_default.ExpanderSummaryContent}>{summary}</div>
808
+ <div className={style_default.ExpanderSummaryIcon}>
809
+ <ChevronRight size={16} strokeWidth={1} className={style_default.Icon} />
810
+ <ChevronDown size={16} strokeWidth={1} className={style_default.Icon} />
811
+ </div>
812
+ </summary>
813
+ <div className={style_default.ExpanderContent}>{children}</div>
814
+ </details>;
815
+ }
816
+ function SidebarMethod({ method }) {
817
+ const Docs = useComponents();
818
+ const { selectedPath } = useNavigation();
819
+ return <div className={style_default.SidebarMethod} data-selected={method.stainlessPath === selectedPath}>
820
+ <MethodIconBadge httpMethod={method.httpMethod} />
821
+ <Docs.Link stainlessPath={method.stainlessPath}>{method.summary}</Docs.Link>
822
+ </div>;
823
+ }
824
+ function SidebarResource({ resource }) {
825
+ const Docs = useComponents();
826
+ const { selectedPath } = useNavigation();
827
+ const subresources = Object.values(resource.subresources ?? {}).map((sub) => <SidebarResource resource={sub} key={sub.stainlessPath} />);
828
+ const methods = Object.values(resource.methods).map((method) => <SidebarMethod method={method} key={method.stainlessPath} />);
829
+ const hasChildren = subresources.length > 0 || methods.length > 0;
830
+ const title = <div className={style_default.SidebarResourceTitle}>
831
+ <Docs.Link stainlessPath={resource.stainlessPath}>{resource.title}</Docs.Link>
832
+ </div>;
833
+ return <div className={style_default.SidebarResource} data-selected={resource.stainlessPath === selectedPath}>
834
+ {hasChildren ? <SidebarExpander summary={title} open={true}>
835
+ {methods}
836
+ {subresources}
837
+ </SidebarExpander> : title}
838
+ </div>;
839
+ }
840
+ function Sidebar({ resources }) {
841
+ return <div className={`${style_default.Root} ${style_default.Sidebar}`}>
842
+ {resources.filter((resource) => !isResourceEmpty(resource)).map((resource) => <SidebarResource resource={resource} key={resource.stainlessPath} />)}
843
+ </div>;
844
+ }
845
+
846
+ //#endregion
847
+ //#region src/components/index.ts
848
+ var components_exports = /* @__PURE__ */ __export({
849
+ Badge: () => Badge,
850
+ Dropdown: () => Dropdown,
851
+ DropdownItem: () => DropdownItem,
852
+ DropdownMenu: () => DropdownMenu,
853
+ DropdownTrigger: () => DropdownTrigger,
854
+ Expander: () => Expander,
855
+ HttpMethodIcons: () => HttpMethodIcons,
856
+ HttpMethods: () => HttpMethods,
857
+ Input: () => Input,
858
+ Join: () => Join,
859
+ Link: () => Link,
860
+ ListView: () => ListView,
861
+ Markdown: () => Markdown,
862
+ Method: () => Method,
863
+ MethodDescription: () => MethodDescription,
864
+ MethodHeader: () => MethodHeader,
865
+ MethodIconBadge: () => MethodIconBadge,
866
+ MethodInfo: () => MethodInfo$1,
867
+ MethodRoute: () => MethodRoute,
868
+ Property: () => Property$6,
869
+ PropertyDescription: () => PropertyDescription,
870
+ PropertyModelContext: () => PropertyModelContext,
871
+ PropertyToggle: () => PropertyToggle,
872
+ ReferenceNestingContext: () => ReferenceNestingContext,
873
+ SDKBreadcrumbs: () => SDKBreadcrumbs,
874
+ SDKChildren: () => SDKChildren,
875
+ SDKConstraints: () => SDKConstraints,
876
+ SDKDeclaration: () => SDKDeclaration,
877
+ SDKExample: () => SDKExample,
878
+ SDKIcon: () => SDKIcon,
879
+ SDKLanguageBlock: () => SDKLanguageBlock,
880
+ SDKMethod: () => SDKMethod,
881
+ SDKMethodHeader: () => SDKMethodHeader,
882
+ SDKMethodInfo: () => SDKMethodInfo,
883
+ SDKMethodSummary: () => SDKMethodSummary,
884
+ SDKModel: () => SDKModel,
885
+ SDKOverview: () => SDKOverview,
886
+ SDKReference: () => SDKReference,
887
+ SDKRequestTitle: () => SDKRequestTitle,
888
+ SDKResource: () => SDKResource,
889
+ SDKResourceHeader: () => SDKResourceHeader,
890
+ SDKRoot: () => SDKRoot,
891
+ SDKSnippetLanguages: () => SDKSnippetLanguages,
892
+ Sidebar: () => Sidebar,
893
+ SidebarExpander: () => SidebarExpander,
894
+ SidebarMethod: () => SidebarMethod,
895
+ SidebarResource: () => SidebarResource,
896
+ Snippet: () => Snippet,
897
+ SnippetCode: () => SnippetCode,
898
+ SnippetContainer: () => SnippetContainer,
899
+ SnippetRequestContainer: () => SnippetRequestContainer,
900
+ SnippetResponse: () => SnippetResponse,
901
+ ToggleButton: () => ToggleButton,
902
+ Tooltip: () => Tooltip,
903
+ VirtualExpander: () => VirtualExpander,
904
+ usePropertyModel: () => usePropertyModel,
905
+ useReferenceNesting: () => useReferenceNesting
906
+ });
907
+
908
+ //#endregion
909
+ //#region src/languages/typescript.tsx
910
+ var typescript_exports = /* @__PURE__ */ __export({
911
+ Declaration: () => Declaration$5,
912
+ MethodSignature: () => MethodSignature$5,
913
+ Property: () => Property$5,
914
+ Type: () => Type$5,
915
+ TypeName: () => TypeName$5
916
+ });
917
+ const ComplexTypes$3 = {
918
+ TSTypeObject: "object",
919
+ TSTypeUnion: "union",
920
+ TSTypeInterface: "interface",
921
+ TSTypeIntersection: "intersection",
922
+ TSTypeArray: "array"
923
+ };
924
+ const constStyle$3 = {
925
+ string: style_default.LiteralString,
926
+ number: style_default.LiteralNumeric,
927
+ boolean: style_default.LiteralBoolean
928
+ };
929
+ function Identifier$1({ name, optional }) {
930
+ return <>
931
+ <span className={style_default.TextIdentifier}>
932
+ {/^[_a-zA-Z][_a-zA-Z0-9]*$/.test(name) ? name : JSON.stringify(name)}
933
+ </span>
934
+ {optional && <span className={style_default.TextPunctuation}>?</span>}
935
+ </>;
936
+ }
937
+ function TypeParams({ params }) {
938
+ const Lang = useLanguageComponents();
939
+ const { Join: Join$1 } = useComponents();
940
+ if (!params?.length) return null;
941
+ const typeParams = params?.map((param, key) => param.constraint ? <React$1.Fragment key={key}>
942
+ <span className={style_default.TypeReference}>{param.name}</span>
943
+ <span className={style_default.TextKeyword}>extends </span>
944
+ <Lang.Type type={param.constraint} />
945
+ </React$1.Fragment> : <React$1.Fragment key={key}>param.name</React$1.Fragment>);
946
+ return <>
947
+ <span className={style_default.TypeBracket}>{"<"}</span>
948
+ <Join$1 items={typeParams} limit={3}>
949
+ <span className={style_default.TextOperator}>, </span>
950
+ </Join$1>
951
+ <span className={style_default.TypeBracket}>{">"}</span>
952
+ </>;
953
+ }
954
+ function TypePreview$2({ path }) {
955
+ const spec = useSpec();
956
+ const language = useLanguage();
957
+ const decl = useDeclaration(path, false);
958
+ const { Join: Join$1 } = useComponents();
959
+ if (!(decl && "children" in decl && decl.children && decl.children.length > 0) || decl && "type" in decl && "kind" in decl["type"] && decl["type"]["kind"] === "TSTypeUnion") return;
960
+ const items = decl.children.map((prop, key) => {
961
+ const p = spec?.decls?.[language]?.[prop];
962
+ return <span key={key} className={style_default.TypePropertyName}>
963
+ <span className={style_default.TextIdentifier}>{p && "key" in p ? p["key"] : null}</span>
964
+ </span>;
965
+ });
966
+ return <span className={style_default.TypePreview} data-stldocs-type-preview="properties">
967
+ <span className={style_default.TypeBrace}>{" {"}</span>
968
+ <span className={style_default.TypePreviewContent}>
969
+ {" "}
970
+ <Join$1 items={items} limit={3}>
971
+ <span className={style_default.TextOperator}>, </span>
972
+ </Join$1>{" "}
973
+ </span>
974
+ <span className={style_default.TypeBrace}>{"} "}</span>
975
+ </span>;
976
+ }
977
+ function TypeName$5({ type }) {
978
+ const Lang = useLanguageComponents();
979
+ return ComplexTypes$3[type.kind] ?? <Lang.Type type={type} />;
980
+ }
981
+ function Type$5({ type }) {
982
+ const Lang = useLanguageComponents();
983
+ const { Join: Join$1, SDKReference: SDKReference$1 } = useComponents();
984
+ switch (type.kind) {
985
+ case "TSTypeUnknown":
986
+ case "TSTypeUndefined":
987
+ case "TSTypeNever":
988
+ case "TSTypeVoid":
989
+ case "TSTypeNull":
990
+ case "TSTypeAny":
991
+ case "TSTypeBoolean":
992
+ case "TSTypeNumber": return <span className={style_default.Type}>
993
+ <span className={style_default.TypeKeyword}>{type.kind.slice(6).toLowerCase()}</span>
994
+ </span>;
995
+ case "TSTypeString": return <span className={style_default.Type}>
996
+ <span className={style_default.TypeString}>string</span>
997
+ </span>;
998
+ case "TSTypeLiteral": return <span className={style_default.Type}>
999
+ <span className={constStyle$3[typeof type.literal]}>{JSON.stringify(type.literal)}</span>
1000
+ </span>;
1001
+ case "TSTypeArray": return <span className={style_default.Type}>
1002
+ <span className={style_default.TypeArray}>{"Array<"}</span>
1003
+ <Lang.Type type={type.elementType} />
1004
+ <span className={style_default.TypeArray}>{">"}</span>
1005
+ </span>;
1006
+ case "TSTypeReference": {
1007
+ const name = type.ident.split(".").at(-1);
1008
+ const params = type.typeParameters?.map((param, key) => <Lang.Type key={key} type={param} />);
1009
+ return <span className={style_default.Type}>
1010
+ <SDKReference$1 stainlessPath={type.$ref}>{name}</SDKReference$1>
1011
+ {params && params.length > 0 && <>
1012
+ <span className={style_default.TypeBracket}>{"<"}</span>
1013
+ <Join$1 items={params} limit={3}>
1014
+ <span className={style_default.TextOperator}>, </span>
1015
+ </Join$1>
1016
+ <span className={style_default.TypeBracket}>{">"}</span>
1017
+ </>}
1018
+ <TypePreview$2 path={type.$ref} />
1019
+ </span>;
1020
+ }
1021
+ case "TSTypeIntersection":
1022
+ case "TSTypeUnion": {
1023
+ const items = type.types.map((t, key) => <Lang.Type key={key} type={t} />);
1024
+ const delimiter = type.kind === "TSTypeUnion" ? "|" : "&";
1025
+ return <span className={style_default.Type}>
1026
+ <span className={style_default.TypePreview} data-stldocs-type-preview="union">
1027
+ <span className={style_default.TypePreviewContent}>
1028
+ <Join$1 items={items} limit={3}>
1029
+ <span className={style_default.TextOperator}> {delimiter} </span>
1030
+ </Join$1>
1031
+ </span>
1032
+ </span>
1033
+ </span>;
1034
+ }
1035
+ case "TSTypeObject":
1036
+ case "TSTypeInterface": {
1037
+ const extend = type.kind === "TSTypeObject" ? null : type.extends?.map((ref, key) => <Lang.Type key={key} type={ref} />);
1038
+ const items = type.members.map((prop, key) => <React$1.Fragment key={key}>
1039
+ <span className={style_default.TypePropertyName}>
1040
+ <Identifier$1 name={prop.ident} optional={prop.optional} />
1041
+ </span>
1042
+ <span className={style_default.TextPunctuation}>: </span>
1043
+ <Lang.Type type={prop.type} />
1044
+ </React$1.Fragment>);
1045
+ return <span className={style_default.Type}>
1046
+ {extend?.length && <>
1047
+ <span className={style_default.TypeKeyword}> extends </span>
1048
+ <Join$1 items={extend} limit={3}>
1049
+ <span className={style_default.TextOperator}>, </span>
1050
+ </Join$1>
1051
+ </>}
1052
+ <span className={style_default.TypePreview} data-stldocs-type-preview="properties">
1053
+ <span className={style_default.TypeBrace}>{"{ "}</span>
1054
+ <span className={style_default.TypePreviewContent}>
1055
+ <Join$1 items={items} limit={3}>
1056
+ <span className={style_default.TextOperator}>, </span>
1057
+ </Join$1>
1058
+ </span>
1059
+ <span className={style_default.TypeBrace}>{"} "}</span>
1060
+ </span>
1061
+ </span>;
1062
+ }
1063
+ }
1064
+ }
1065
+ function MethodSignature$5({ decl }) {
1066
+ const Lang = useLanguageComponents();
1067
+ const { Join: Join$1, Tooltip: Tooltip$1 } = useComponents();
1068
+ const params = decl.signature.parameters.map((param, i) => <React$1.Fragment key={i}>
1069
+ <Tooltip$1 content={<Lang.Type type={param.type} />}>
1070
+ <span className={style_default.TextIdentifier}>{param.ident}</span>
1071
+ </Tooltip$1>
1072
+ {param.optional && <span className={style_default.TextPunctuation}>?</span>}
1073
+ </React$1.Fragment>);
1074
+ return <div className={style_default.MethodSignature}>
1075
+ <span className={style_default.SignatureTitle}>
1076
+ {decl.signature.async && <span className={style_default.TextKeyword}>async </span>}
1077
+ <span className={style_default.SignatureQualified}>
1078
+ <span className={style_default.TextIdentifier}>{decl.qualified?.slice(0, -decl.ident.length)}</span>
1079
+ </span>
1080
+ <span className={style_default.SignatureName}>
1081
+ <span className={style_default.TextIdentifier}>{decl.ident}</span>
1082
+ </span>
1083
+ <span className={style_default.MethodSignature}>
1084
+ {decl.signature.typeParameters && <TypeParams params={decl.signature.typeParameters} />}
1085
+ <span className={style_default.SignatureParen}>{"("}</span>
1086
+
1087
+ <span className={style_default.SignatureParams}>
1088
+ <Join$1 items={params}>
1089
+ <span className={style_default.TextOperator}>{", "}</span>
1090
+ </Join$1>
1091
+ </span>
1092
+
1093
+ <span className={style_default.SignatureParen}>{")"}</span>
1094
+ {decl.signature.returns && <>
1095
+ <span className={style_default.TextPunctuation}>: </span>
1096
+ <Lang.Type type={decl.signature.returns} />
1097
+ </>}
1098
+ </span>
1099
+ </span>
1100
+ </div>;
1101
+ }
1102
+ function Property$5({ decl, children }) {
1103
+ const Lang = useLanguageComponents();
1104
+ if (!decl) return;
1105
+ switch (decl.kind) {
1106
+ case "TSDeclProperty": return children({
1107
+ name: decl.key,
1108
+ typeName: <Lang.TypeName type={decl.type} />,
1109
+ type: decl.type.kind in ComplexTypes$3 && <Lang.Type type={decl.type} />
1110
+ });
1111
+ case "TSDeclTypeAlias": return children({
1112
+ name: decl.ident,
1113
+ typeName: "alias",
1114
+ type: <Lang.Type type={decl.type} />
1115
+ });
1116
+ case "TSDeclReference": return children({ type: <Lang.Type type={decl.type} /> });
1117
+ case "TSDeclInterface": return children({ type: <>
1118
+ <span className={style_default.TextIdentifier}>{decl.ident}</span>
1119
+ {decl.typeParameters && <TypeParams params={decl.typeParameters} />}
1120
+ {decl.extends?.flatMap((t, key) => <React$1.Fragment key={`extends:${key}`}>
1121
+ <span className={style_default.TextKeyword}> extends </span>
1122
+ <Lang.Type type={t} />
1123
+ </React$1.Fragment>)}
1124
+ </> });
1125
+ }
1126
+ }
1127
+ function Declaration$5({ decl }) {
1128
+ const Lang = useLanguageComponents();
1129
+ if (!decl) return;
1130
+ switch (decl.kind) {
1131
+ case "TSDeclProperty": return <>
1132
+ {decl.declare && <span className={style_default.TextKeyword}>declare </span>}
1133
+ <span className={style_default.TypePropertyName}>
1134
+ <Identifier$1 name={decl.key} optional={decl.optional} />
1135
+ </span>
1136
+ <span className={style_default.TextPunctuation}>: </span>
1137
+ <Lang.Type type={decl.type} />
1138
+ </>;
1139
+ case "TSDeclFunction": return <Lang.MethodSignature decl={decl} />;
1140
+ case "TSDeclTypeAlias": return <>
1141
+ <Identifier$1 name={decl.ident} />
1142
+ <TypeParams params={decl.typeParameters} />
1143
+ <span className={style_default.TextOperator}> = </span>
1144
+ <Lang.Type type={decl.type} />
1145
+ </>;
1146
+ case "TSDeclReference": return <Lang.Type type={decl.type} />;
1147
+ case "TSDeclInterface": return <>
1148
+ <span className={style_default.TextIdentifier}>{decl.ident}</span>
1149
+ <TypeParams params={decl.typeParameters} />
1150
+ {decl.extends?.map((t, index) => <React$1.Fragment key={index}>
1151
+ <span className={style_default.TextKeyword}> extends </span>
1152
+ <Lang.Type type={t} />
1153
+ </React$1.Fragment>)}
1154
+ <TypePreview$2 path={decl.stainlessPath} />
1155
+ </>;
1156
+ case "TSDeclClass": return <>
1157
+ <span className={style_default.TextKeyword}>class </span>
1158
+ <span className={style_default.TextIdentifier}>{decl.ident}</span>
1159
+ <TypeParams params={decl.typeParameters} />
1160
+ {decl.superClass ? <>
1161
+ <span className={style_default.TextKeyword}> extends </span>
1162
+ <Lang.Type type={decl.superClass} />
1163
+ </> : null}
1164
+ {decl.implements?.map((t, index) => <React$1.Fragment key={index}>
1165
+ <span className={style_default.TextKeyword}> implements </span>
1166
+ <Lang.Type type={t} />
1167
+ </React$1.Fragment>)}
1168
+ </>;
1169
+ }
1170
+ }
1171
+
1172
+ //#endregion
1173
+ //#region src/languages/java.tsx
1174
+ var java_exports = /* @__PURE__ */ __export({
1175
+ Declaration: () => Declaration$4,
1176
+ MethodSignature: () => MethodSignature$4,
1177
+ Property: () => Property$4,
1178
+ Type: () => Type$4,
1179
+ TypeName: () => TypeName$4
1180
+ });
1181
+ function showFullType$1(type) {
1182
+ return type.kind === "JavaTypeReference" && (type.typeName === "List" || type.typeParameters && type.typeParameters.length > 0);
1183
+ }
1184
+ const constStyle$2 = {
1185
+ string: style_default.LiteralString,
1186
+ number: style_default.LiteralNumeric,
1187
+ boolean: style_default.LiteralBoolean
1188
+ };
1189
+ function TypeName$4({ type, optional }) {
1190
+ const Lang = useLanguageComponents();
1191
+ if (type.kind === "JavaTypeReference" && type.typeName === "List") return "List";
1192
+ return <Lang.Type type={type} optional={optional} />;
1193
+ }
1194
+ function Type$4({ type, optional }) {
1195
+ const language = useLanguage();
1196
+ const Lang = useLanguageComponents();
1197
+ const { Join: Join$1, SDKReference: SDKReference$1 } = useComponents();
1198
+ switch (type.kind) {
1199
+ case "JavaTypeReference": {
1200
+ const name = type.typeName.split(".").at(-1);
1201
+ const params = type.typeParameters?.map((param, key) => <Lang.Type key={key} type={param} optional={optional} />);
1202
+ return <span className={style_default.Type}>
1203
+ <SDKReference$1 stainlessPath={type.$ref}>{name}</SDKReference$1>
1204
+ {params && params.length > 0 ? <>
1205
+ <span className={style_default.TypeBracket}>{"<"}</span>
1206
+ <Join$1 items={params} limit={3}>
1207
+ <span className={style_default.TextOperator}>, </span>
1208
+ </Join$1>
1209
+ <span className={style_default.TypeBracket}>{">"}</span>
1210
+ </> : null}
1211
+ </span>;
1212
+ }
1213
+ case "JavaTypeClass":
1214
+ case "JavaTypeUnion": return <span className={style_default.Type}>
1215
+ <span className={style_default.TypeKeyword}>class</span>
1216
+ </span>;
1217
+ case "JavaTypeEnum": return <span className={style_default.Type}>
1218
+ <span className={style_default.TypeKeyword}>{language === "kotlin" ? "enum class" : "enum"}</span>
1219
+ </span>;
1220
+ case "JavaTypeVoid": return <span className={style_default.Type}>
1221
+ <span className={style_default.TypeKeyword}>{language === "kotlin" ? "Nothing?" : "Void"}</span>
1222
+ </span>;
1223
+ case "JavaTypeBoolean": return <span className={style_default.Type}>
1224
+ <span className={style_default.TypeKeyword}>
1225
+ {language === "kotlin" || optional ? "Boolean" : "boolean"}
1226
+ </span>
1227
+ </span>;
1228
+ case "JavaTypeDouble": return <span className={style_default.Type}>
1229
+ <span className={style_default.TypeKeyword}>{language === "kotlin" || optional ? "Double" : "double"}</span>
1230
+ </span>;
1231
+ case "JavaTypeLong": return <span className={style_default.Type}>
1232
+ <span className={style_default.TypeKeyword}>{language === "kotlin" || optional ? "Long" : "long"}</span>
1233
+ </span>;
1234
+ case "JavaTypeString": return <span className={style_default.Type}>
1235
+ <span className={style_default.TypeString}>String</span>
1236
+ </span>;
1237
+ case "JavaTypeConstant": return <span className={style_default.Type}>
1238
+ <span className={style_default.TypeKeyword}>JsonValue</span>;
1239
+ </span>;
1240
+ }
1241
+ }
1242
+ function MethodSignature$4({ decl }) {
1243
+ const Lang = useLanguageComponents();
1244
+ const language = useLanguage();
1245
+ const { Join: Join$1, Tooltip: Tooltip$1 } = useComponents();
1246
+ const params = decl.parameters.map((param, i) => <React$1.Fragment key={i}>
1247
+ <Tooltip$1 content={<Lang.Type type={param.typeAnnotation} />}>
1248
+ <span className={style_default.TextIdentifier}>{param.ident}</span>
1249
+ {param.hasDefault && <>
1250
+ {" "}
1251
+ <span className={style_default.TextOperator}>=</span> <Lang.Type type={param.typeAnnotation} />
1252
+ <span className={style_default.TextOperator}>.</span>
1253
+ <span className={style_default.TextIdentifier}>none</span>
1254
+ <span className={style_default.TextOperator}>()</span>
1255
+ </>}
1256
+ </Tooltip$1>
1257
+ </React$1.Fragment>);
1258
+ return <div className={style_default.MethodSignature}>
1259
+ <span className={style_default.SignatureTitle}>
1260
+ {decl.returnType && language !== "kotlin" && <span className={style_default.SignatureReturns}>
1261
+ <Lang.Type type={decl.returnType} />{" "}
1262
+ </span>}
1263
+ {decl.qualified && <span className={style_default.SignatureQualified}>
1264
+ <span className={style_default.TextIdentifier}>{decl.qualified?.slice(0, -decl.ident.length)}</span>
1265
+ </span>}
1266
+ <span className={style_default.SignatureName}>
1267
+ <span className={style_default.TextIdentifier}>{decl.ident}</span>
1268
+ </span>
1269
+ <span className={style_default.MethodSignature}>
1270
+ <span className={style_default.SignatureParen}>{"("}</span>
1271
+
1272
+ <span className={style_default.SignatureParams}>
1273
+ <Join$1 items={params}>
1274
+ <span className={style_default.TextOperator}>{", "}</span>
1275
+ </Join$1>
1276
+ </span>
1277
+
1278
+ <span className={style_default.SignatureParen}>{")"} </span>
1279
+ {decl.returnType && language === "kotlin" && <>
1280
+ <span className={style_default.TextOperator}>:</span> <Lang.Type type={decl.returnType} />
1281
+ </>}
1282
+ </span>
1283
+ </span>
1284
+ </div>;
1285
+ }
1286
+ function Property$4({ decl, children }) {
1287
+ const Docs = useComponents();
1288
+ const Lang = useLanguageComponents();
1289
+ const language = useLanguage();
1290
+ if (!decl) return null;
1291
+ switch (decl.kind) {
1292
+ case "JavaDeclProperty": {
1293
+ const typeRaw = <Lang.Type type={decl.type} optional={decl.optional} />;
1294
+ const typeWrapped = decl.optional ? <>
1295
+ <span className={style_default.TypeKeyword}>Optional</span>
1296
+ <span className={style_default.TypeBracket}>{"<"}</span>
1297
+ {typeRaw}
1298
+ <span className={style_default.TypeBracket}>{">"}</span>
1299
+ </> : typeRaw;
1300
+ const badges = <>
1301
+ {decl.type.kind === "JavaTypeConstant" && <Docs.Tooltip content={<span className={style_default.TextIdentifier}>{decl.type.value}</span>}>
1302
+ <span className={style_default.TextIdentifier}>constant</span>
1303
+ </Docs.Tooltip>}
1304
+ </>;
1305
+ return children({
1306
+ name: decl.ident,
1307
+ typeName: <Lang.TypeName type={decl.type} optional={decl.optional} />,
1308
+ type: showFullType$1(decl.type) && typeWrapped,
1309
+ badges
1310
+ });
1311
+ }
1312
+ case "JavaDeclConst": return children({
1313
+ name: decl.ident,
1314
+ typeName: "const",
1315
+ type: <span className={constStyle$2[typeof decl.value]}>{JSON.stringify(decl.value)}</span>
1316
+ });
1317
+ case "JavaDeclType": {
1318
+ const typeName$1 = decl.type.kind === "JavaTypeUnion" ? "union" : decl.type.kind === "JavaTypeEnum" ? language === "kotlin" ? "enum class" : "enum" : "class";
1319
+ return children({
1320
+ name: decl.ident,
1321
+ typeName: typeName$1
1322
+ });
1323
+ }
1324
+ case "JavaDeclReference": return children({ type: <Lang.Type type={decl.type} /> });
1325
+ }
1326
+ }
1327
+ function Declaration$4({ decl }) {
1328
+ const Docs = useComponents();
1329
+ const Lang = useLanguageComponents();
1330
+ const language = useLanguage();
1331
+ if (!decl) return null;
1332
+ switch (decl.kind) {
1333
+ case "JavaDeclConst": return <>
1334
+ <span className={style_default.TextIdentifier}>{decl.ident}</span>
1335
+ <span className={style_default.TextPunctuation}>{"("}</span>
1336
+ {JSON.stringify(decl.value)}
1337
+ <span className={style_default.TextPunctuation}>{")"}</span>
1338
+ </>;
1339
+ case "JavaDeclType": {
1340
+ const keyword = decl.type.kind === "JavaTypeEnum" ? language === "kotlin" ? "enum class" : "enum" : "class";
1341
+ return <>
1342
+ <span className={style_default.TextKeyword}>{keyword}</span>{" "}
1343
+ <span className={style_default.TextIdentifier}>{decl.ident}</span>
1344
+ <span className={style_default.TextPunctuation}>:</span>
1345
+ {decl.type.kind === "JavaTypeUnion" && <>
1346
+ {" "}
1347
+ <Docs.Tooltip content="A class that can be one of several variants.">
1348
+ <Docs.Badge id="java-union">union</Docs.Badge>
1349
+ </Docs.Tooltip>{" "}
1350
+ </>}
1351
+ </>;
1352
+ }
1353
+ case "JavaDeclProperty": {
1354
+ const inlineType = <Lang.Type type={decl.type} optional={decl.optional} />;
1355
+ const ident = <span className={style_default.TypePropertyName}>
1356
+ <span className={style_default.TextIdentifier}>{decl.ident}</span>
1357
+ </span>;
1358
+ const suffix = decl.type.kind === "JavaTypeConstant" ? <>
1359
+ {" "}
1360
+ <Docs.Tooltip content={<span className={style_default.TextIdentifier}>{decl.type.value}</span>}>
1361
+ <Docs.Badge id="java-constant">constant</Docs.Badge>
1362
+ </Docs.Tooltip>
1363
+ </> : null;
1364
+ if (language === "kotlin") return <>
1365
+ {ident}
1366
+ <span className={style_default.TextPunctuation}>:</span>{" "}
1367
+ {decl.optional ? <>
1368
+ <span className={style_default.TypeReference}>Optional</span>
1369
+ <span className={style_default.TypeBracket}>{"<"}</span>
1370
+ {inlineType}
1371
+ <span className={style_default.TypeBracket}>{">"}</span>
1372
+ </> : inlineType}
1373
+ {suffix}
1374
+ </>;
1375
+ return <>
1376
+ {decl.optional ? <>
1377
+ <span className={style_default.TypeReference}>Optional</span>
1378
+ <span className={style_default.TypeBracket}>{"<"}</span>
1379
+ {inlineType}
1380
+ <span className={style_default.TypeBracket}>{">"}</span>
1381
+ </> : inlineType}{" "}
1382
+ {ident}
1383
+ {suffix}
1384
+ </>;
1385
+ }
1386
+ case "JavaDeclReference": return <Lang.Type type={decl.type} />;
1387
+ }
1388
+ }
1389
+
1390
+ //#endregion
1391
+ //#region src/languages/go.tsx
1392
+ var go_exports = /* @__PURE__ */ __export({
1393
+ Declaration: () => Declaration$3,
1394
+ MethodSignature: () => MethodSignature$3,
1395
+ Property: () => Property$3,
1396
+ Type: () => Type$3,
1397
+ TypeName: () => TypeName$3
1398
+ });
1399
+ const ComplexTypes$2 = {
1400
+ GoTypeMap: "map",
1401
+ GoTypeArray: "array"
1402
+ };
1403
+ const Keywords$1 = {
1404
+ GoTypeAny: "any",
1405
+ GoTypeUnknown: "unknown",
1406
+ GoTypeInt: "int64",
1407
+ GoTypeFloat: "float64",
1408
+ GoTypeBool: "bool",
1409
+ GoTypeError: "error"
1410
+ };
1411
+ function isField(type) {
1412
+ return type.kind === "GoTypeReference" && type.typeName === "param.Field";
1413
+ }
1414
+ function TypeName$3({ type }) {
1415
+ const Lang = useLanguageComponents();
1416
+ return isField(type) ? "field" : ComplexTypes$2[type.kind] ?? <Lang.Type type={type} />;
1417
+ }
1418
+ function Type$3({ type }) {
1419
+ const Lang = useLanguageComponents();
1420
+ const { Join: Join$1, SDKReference: SDKReference$1 } = useComponents();
1421
+ switch (type.kind) {
1422
+ case "GoTypeReference": {
1423
+ const params = type.typeParameters?.map((param, key) => <Lang.Type key={key} type={param} />);
1424
+ return <span className={style_default.Type}>
1425
+ {type.$ref ? <SDKReference$1 stainlessPath={type.$ref}>{type.typeName}</SDKReference$1> : type.typeName}
1426
+ {params && params.length > 0 ? <>
1427
+ <span className={style_default.TypeBracket}>{"["}</span>
1428
+ <Join$1 items={params} limit={3}>
1429
+ <span className={style_default.TextOperator}>, </span>
1430
+ </Join$1>
1431
+ <span className={style_default.TypeBracket}>{"]"}</span>
1432
+ </> : null}
1433
+ </span>;
1434
+ }
1435
+ case "GoTypeAny":
1436
+ case "GoTypeUnknown":
1437
+ case "GoTypeInt":
1438
+ case "GoTypeFloat":
1439
+ case "GoTypeBool":
1440
+ case "GoTypeError": return <span className={style_default.Type}>
1441
+ <span className={style_default.TypeKeyword}>{Keywords$1[type.kind]}</span>
1442
+ </span>;
1443
+ case "GoTypeString": return <span className={style_default.Type}>
1444
+ <span className={style_default.TypeString}>string</span>
1445
+ </span>;
1446
+ case "GoTypeArray": return <span className={style_default.Type}>
1447
+ <span className={style_default.TextOperator}>[]</span>
1448
+ <Lang.Type type={type.elementType} />
1449
+ </span>;
1450
+ case "GoTypeStruct": return <span className={style_default.Type}>
1451
+ <span className={style_default.TypeKeyword}>{"struct{…}"}</span>
1452
+ </span>;
1453
+ case "GoTypeInterface": return <span className={style_default.Type}>
1454
+ <span className={style_default.TypeKeyword}>{"interface{…}"}</span>
1455
+ </span>;
1456
+ case "GoTypeMap": return <span className={style_default.Type}>
1457
+ <span className={style_default.TypeKeyword}>map</span>
1458
+ <span className={style_default.TypeBracket}>[</span>
1459
+ <Lang.Type type={type.indexType} />
1460
+ <span className={style_default.TextPunctuation}>,</span> <Lang.Type type={type.itemType} />
1461
+ <span className={style_default.TypeBracket}>]</span>
1462
+ </span>;
1463
+ case "GoTypePointer": return <span className={style_default.Type}>
1464
+ <span className={style_default.TextOperator}>*</span>
1465
+ <Lang.Type type={type.inner} />
1466
+ </span>;
1467
+ }
1468
+ }
1469
+ function MethodSignature$3({ decl }) {
1470
+ const Lang = useLanguageComponents();
1471
+ const { Join: Join$1 } = useComponents();
1472
+ const params = decl.parameters.map((param, i) => <React$1.Fragment key={i}>
1473
+ <span className={style_default.TextIdentifier}>{param.ident}</span>
1474
+ {param.optional && <span className={style_default.TextPunctuation}>?</span>}
1475
+ </React$1.Fragment>);
1476
+ const returns = decl.returnType.map((t, key) => <Lang.Type key={key} type={t} />);
1477
+ return <div className={style_default.MethodSignature}>
1478
+ <span className={style_default.SignatureTitle}>
1479
+ {decl.async && <span className={style_default.TextKeyword}>async </span>}
1480
+ {decl.qualified && <span className={style_default.SignatureQualified}>
1481
+ <span className={style_default.TextIdentifier}>{decl.qualified?.slice(0, -decl.ident.length)}</span>
1482
+ </span>}
1483
+ {decl.kind === "GoDeclFunction" && <span className={style_default.SignatureName}>
1484
+ <span className={style_default.TextIdentifier}>{decl.ident}</span>
1485
+ </span>}
1486
+ <span className={style_default.MethodSignature}>
1487
+ <span className={style_default.SignatureParen}>{"("}</span>
1488
+
1489
+ <span className={style_default.SignatureParams}>
1490
+ <Join$1 items={params}>
1491
+ <span className={style_default.TextOperator}>{", "}</span>
1492
+ </Join$1>
1493
+ </span>
1494
+
1495
+ <span className={style_default.SignatureParen}>{")"} </span>
1496
+ {decl.returnType.length === 1 ? returns : <>
1497
+ <span className={style_default.SignatureParen}>{"("}</span>
1498
+ <Join$1 items={returns}>
1499
+ <span className={style_default.TextOperator}>, </span>
1500
+ </Join$1>
1501
+ <span className={style_default.SignatureParen}>{")"}</span>
1502
+ </>}
1503
+ </span>
1504
+ </span>
1505
+ </div>;
1506
+ }
1507
+ function Property$3({ decl, children }) {
1508
+ const Docs = useComponents();
1509
+ const Lang = useLanguageComponents();
1510
+ if (!decl) return null;
1511
+ switch (decl.kind) {
1512
+ case "GoDeclProperty": return children({
1513
+ name: decl.ident,
1514
+ typeName: <Lang.TypeName type={decl.type} />,
1515
+ badges: decl.optional && <Docs.Badge id="optional" />,
1516
+ type: (isField(decl.type) || decl.type.kind in ComplexTypes$2) && <Lang.Type type={decl.type} />
1517
+ });
1518
+ case "GoDeclConst": return children({
1519
+ name: decl.ident,
1520
+ typeName: "const",
1521
+ type: <Lang.Type type={decl.type} />
1522
+ });
1523
+ case "GoDeclReference": return children({ type: <Lang.Type type={decl.type} /> });
1524
+ case "GoDeclType":
1525
+ case "GoDeclTypeAlias": {
1526
+ const typeName$1 = decl.type.kind === "GoTypeStruct" ? "struct" : decl.type.kind === "GoTypeInterface" ? "interface" : decl.kind === "GoDeclTypeAlias" ? "alias" : "type";
1527
+ return children({
1528
+ name: decl.ident,
1529
+ typeName: typeName$1,
1530
+ type: ["GoTypeStruct", "GoTypeInterface"].includes(decl.type.kind) || <Lang.Type type={decl.type} />
1531
+ });
1532
+ }
1533
+ }
1534
+ }
1535
+ function Declaration$3({ decl }) {
1536
+ const Lang = useLanguageComponents();
1537
+ if (!decl) return;
1538
+ switch (decl.kind) {
1539
+ case "GoDeclType": return <>
1540
+ <span className={style_default.TextKeyword}>type </span>
1541
+ <span className={style_default.TextIdentifier}>{decl.ident} </span>
1542
+ <Lang.Type type={decl.type} />
1543
+ </>;
1544
+ case "GoDeclTypeAlias": return <>
1545
+ <span className={style_default.TextKeyword}>type </span>
1546
+ <span className={style_default.TextIdentifier}>{decl.ident} </span>
1547
+ <span className={style_default.TextOperator}>= </span>
1548
+ <Lang.Type type={decl.type} />
1549
+ </>;
1550
+ case "GoDeclProperty": return <>
1551
+ <span className={style_default.TypePropertyName}>
1552
+ <span className={style_default.TextIdentifier}>{decl.ident} </span>
1553
+ </span>
1554
+ <Lang.Type type={decl.type} />
1555
+ </>;
1556
+ case "GoDeclReference": return <Lang.Type type={decl.type} />;
1557
+ case "GoDeclConst": return <>
1558
+ <span className={style_default.TextKeyword}>const </span>
1559
+ <span className={style_default.TextIdentifier}>{decl.ident} </span>
1560
+ <Lang.Type type={decl.type} />
1561
+ <span className={style_default.TextOperator}> = </span>
1562
+ {JSON.stringify(decl.value)}
1563
+ </>;
1564
+ }
1565
+ }
1566
+
1567
+ //#endregion
1568
+ //#region src/languages/python.tsx
1569
+ var python_exports = /* @__PURE__ */ __export({
1570
+ Declaration: () => Declaration$2,
1571
+ MethodSignature: () => MethodSignature$2,
1572
+ Property: () => Property$2,
1573
+ Type: () => Type$2,
1574
+ TypeName: () => TypeName$2
1575
+ });
1576
+ const constStyle$1 = {
1577
+ string: style_default.LiteralString,
1578
+ number: style_default.LiteralNumeric,
1579
+ boolean: style_default.LiteralBoolean
1580
+ };
1581
+ function showFullType(type) {
1582
+ if (type.kind !== "PythonTypeReference") return false;
1583
+ return type.typeName === "Optional" ? showFullType(type.typeParameters[0]) : type.typeParameters.length > 0;
1584
+ }
1585
+ function TypeName$2({ type }) {
1586
+ const Lang = useLanguageComponents();
1587
+ if (type.kind === "PythonTypeReference") switch (type.typeName) {
1588
+ case "Optional": return <Lang.TypeName type={type.typeParameters[0]} />;
1589
+ case "List":
1590
+ case "Iterable":
1591
+ case "Literal":
1592
+ case "Union": return type.typeName.toLowerCase();
1593
+ }
1594
+ return <Lang.Type type={type} />;
1595
+ }
1596
+ function Type$2({ type }) {
1597
+ const Lang = useLanguageComponents();
1598
+ const { Join: Join$1, SDKReference: SDKReference$1 } = useComponents();
1599
+ switch (type.kind) {
1600
+ case "PythonTypeAny":
1601
+ case "PythonTypeUnknown":
1602
+ case "PythonTypeInt":
1603
+ case "PythonTypeFloat":
1604
+ case "PythonTypeBool": return <span className={style_default.Type}>
1605
+ <span className={style_default.TypeKeyword}>{type.kind.slice(10).toLowerCase()}</span>
1606
+ </span>;
1607
+ case "PythonTypeString": return <span className={style_default.Type}>
1608
+ <span className={style_default.TypeString}>str</span>
1609
+ </span>;
1610
+ case "PythonTypeLiteral": return <span className={style_default.Type}>
1611
+ <span className={constStyle$1[typeof type.literal.value]}>{JSON.stringify(type.literal.value)}</span>
1612
+ </span>;
1613
+ case "PythonTypeArray": return <span className={style_default.Type}>
1614
+ <span className={style_default.TypeArray}>{"Array<"}</span>
1615
+ <Lang.Type type={type.elementType} />
1616
+ <span className={style_default.TypeArray}>{">"}</span>
1617
+ </span>;
1618
+ case "PythonTypeClass": return <span className={style_default.Type}>
1619
+ <span className={style_default.TypeKeyword}>class</span>
1620
+ </span>;
1621
+ case "PythonTypeMap": return <span className={style_default.Type}>
1622
+ <span className={style_default.TypeKeyword}>Dict</span>
1623
+ </span>;
1624
+ case "PythonTypeReference": {
1625
+ const params = type.typeParameters?.map((param, key) => <Lang.Type key={key} type={param} />);
1626
+ return <span className={style_default.Type}>
1627
+ <span className={type.typeName === "Optional" ? style_default.TypeArray : ""}>
1628
+ <SDKReference$1 stainlessPath={type.$ref}>{type.typeName}</SDKReference$1>
1629
+ </span>
1630
+ {params && params.length > 0 && <>
1631
+ <span className={style_default.TypeBracket}>{"["}</span>
1632
+ <Join$1 items={params} limit={3}>
1633
+ <span className={style_default.TextOperator}>, </span>
1634
+ </Join$1>
1635
+ <span className={style_default.TypeBracket}>{"]"}</span>
1636
+ </>}
1637
+ </span>;
1638
+ }
1639
+ }
1640
+ }
1641
+ function MethodSignature$2({ decl }) {
1642
+ const Lang = useLanguageComponents();
1643
+ const { Join: Join$1, Tooltip: Tooltip$1 } = useComponents();
1644
+ const params = decl.parameters.map((param, i) => <React$1.Fragment key={i}>
1645
+ <Tooltip$1 content={<Lang.Type type={param.type} />}>
1646
+ <span className={style_default.TextIdentifier}>{param.ident}</span>
1647
+ </Tooltip$1>
1648
+ </React$1.Fragment>);
1649
+ return <div className={style_default.MethodSignature}>
1650
+ <span className={style_default.SignatureTitle}>
1651
+ {decl.async && <span className={style_default.TextKeyword}>async </span>}
1652
+ {decl.qualified && <span className={style_default.SignatureQualified}>
1653
+ <span className={style_default.TextIdentifier}>{decl.qualified?.slice(0, -decl.ident.length)}</span>
1654
+ </span>}
1655
+ <span className={style_default.SignatureName}>
1656
+ <span className={style_default.TextIdentifier}>{decl.ident}</span>
1657
+ </span>
1658
+ <span className={style_default.MethodSignature}>
1659
+ <span className={style_default.SignatureParen}>{"("}</span>
1660
+
1661
+ <span className={style_default.SignatureParams}>
1662
+ <Join$1 items={params}>
1663
+ <span className={style_default.TextOperator}>{", "}</span>
1664
+ </Join$1>
1665
+ </span>
1666
+
1667
+ <span className={style_default.SignatureParen}>{")"} </span>
1668
+ {decl.returns && <>
1669
+ <span className={style_default.TextOperator}>{" -> "}</span>
1670
+ <Lang.Type type={decl.returns} />
1671
+ </>}
1672
+ </span>
1673
+ </span>
1674
+ </div>;
1675
+ }
1676
+ function Property$2({ decl, children }) {
1677
+ const Lang = useLanguageComponents();
1678
+ if (!decl) return;
1679
+ switch (decl.kind) {
1680
+ case "PythonDeclProperty": return children({
1681
+ name: decl.ident,
1682
+ typeName: <Lang.TypeName type={decl.type} />,
1683
+ type: showFullType(decl.type) && <Lang.Type type={decl.type} />
1684
+ });
1685
+ case "PythonDeclClass": return children({
1686
+ name: decl.ident,
1687
+ typeName: "class"
1688
+ });
1689
+ case "PythonDeclType": return children({
1690
+ name: decl.ident,
1691
+ typeName: "type",
1692
+ type: <Lang.Type type={decl.type} />
1693
+ });
1694
+ case "PythonDeclReference": return children({ type: <Lang.Type type={decl.type} /> });
1695
+ }
1696
+ }
1697
+ function Declaration$2({ decl }) {
1698
+ const Lang = useLanguageComponents();
1699
+ if (!decl) return;
1700
+ switch (decl.kind) {
1701
+ case "PythonDeclProperty": {
1702
+ const nullable = decl.type.kind === "PythonTypeReference" && decl.type.typeName === "Optional" && (decl.type.typeParameters ?? []).length > 0;
1703
+ return <>
1704
+ <span className={style_default.TypePropertyName}>
1705
+ <span className={style_default.TextIdentifier}>{decl.ident}</span>
1706
+ </span>
1707
+ <span className={style_default.TextPunctuation}>: </span>
1708
+ {decl.optional && !nullable ? <>
1709
+ <span className={style_default.TypePlain}>Optional</span>
1710
+ <span className={style_default.TypeBracket}>{"["}</span>
1711
+ <Lang.Type type={decl.type} />
1712
+ <span className={style_default.TypeBrace}>{"]"}</span>
1713
+ </> : <Lang.Type type={decl.type} />}
1714
+ </>;
1715
+ }
1716
+ case "PythonDeclClass": return <>
1717
+ <span className={style_default.TextKeyword}>class </span>
1718
+ <span className={style_default.TextIdentifier}>{decl.ident}</span>
1719
+ <span className={style_default.TextPunctuation}>: </span>
1720
+ <span className={`${style_default.TypePreviewContent} ${style_default.TextPunctuation}`}>…</span>
1721
+ </>;
1722
+ case "PythonDeclType": return <>
1723
+ <span className={style_default.TextIdentifier}>{decl.ident}</span>
1724
+ <span className={style_default.TextOperator}> = </span>
1725
+ <Lang.Type type={decl.type} />
1726
+ </>;
1727
+ case "PythonDeclReference": return <Lang.Type type={decl.type} />;
1728
+ }
1729
+ }
1730
+
1731
+ //#endregion
1732
+ //#region src/languages/ruby.tsx
1733
+ var ruby_exports = /* @__PURE__ */ __export({
1734
+ Declaration: () => Declaration$1,
1735
+ MethodSignature: () => MethodSignature$1,
1736
+ Property: () => Property$1,
1737
+ Type: () => Type$1,
1738
+ TypeName: () => TypeName$1
1739
+ });
1740
+ const ComplexTypes$1 = {
1741
+ RubyTypeObject: "object",
1742
+ RubyTypeUnion: "union",
1743
+ RubyTypeIntersection: "intersection",
1744
+ RubyTypeArray: "array",
1745
+ RubyTypeMap: "hash"
1746
+ };
1747
+ const Keywords = {
1748
+ RubyTypeBinary: "StringIO",
1749
+ RubyTypeUnknown: "untyped",
1750
+ RubyTypeNull: "nil",
1751
+ RubyTypeInteger: "Integer",
1752
+ RubyTypeFloat: "Float",
1753
+ RubyTypeBoolean: "bool"
1754
+ };
1755
+ function TypeName$1({ type }) {
1756
+ const Lang = useLanguageComponents();
1757
+ return ComplexTypes$1[type.kind] ?? <Lang.Type type={type} />;
1758
+ }
1759
+ const VALID_IDENTIFIER = /^[_A-Za-z][_A-Za-z0-9]*$/;
1760
+ function TypePreview$1({ path }) {
1761
+ const spec = useSpec();
1762
+ const language = useLanguage();
1763
+ const decl = useDeclaration(path, false);
1764
+ const { Join: Join$1 } = useComponents();
1765
+ if (!(decl && "children" in decl && decl.children && decl.children.length > 0) || "type" in decl && decl["type"] && "kind" in decl["type"] && decl["type"]?.["kind"] === "RubyTypeUnion") return;
1766
+ const items = decl.children.map((prop, key) => {
1767
+ const p = spec?.decls?.[language]?.[prop];
1768
+ return <span key={key} className={style_default.TypePropertyName}>
1769
+ <span className={style_default.TextIdentifier}>{p && "ident" in p ? p["ident"] : null}</span>
1770
+ </span>;
1771
+ });
1772
+ return <span className={style_default.TypePreview} data-stldocs-type-preview="properties">
1773
+ <span className={style_default.TypeBrace}>{" {"}</span>
1774
+ <span className={style_default.TypePreviewContent}>
1775
+ {" "}
1776
+ <Join$1 items={items} limit={3}>
1777
+ <span className={style_default.TextOperator}>, </span>
1778
+ </Join$1>{" "}
1779
+ </span>
1780
+ <span className={style_default.TypeBrace}>{"} "}</span>
1781
+ </span>;
1782
+ }
1783
+ function Type$1({ type }) {
1784
+ const Lang = useLanguageComponents();
1785
+ const { SDKReference: SDKReference$1, Join: Join$1 } = useComponents();
1786
+ switch (type.kind) {
1787
+ case "RubyTypeBinary":
1788
+ case "RubyTypeUnknown":
1789
+ case "RubyTypeNull":
1790
+ case "RubyTypeInteger":
1791
+ case "RubyTypeFloat":
1792
+ case "RubyTypeBoolean": return <span className={style_default.Type}>
1793
+ <span className={style_default.TypeKeyword}>{Keywords[type.kind]}</span>
1794
+ </span>;
1795
+ case "RubyTypeString": return <span className={style_default.Type}>
1796
+ <span className={style_default.TypeString}>String</span>
1797
+ </span>;
1798
+ case "RubyTypeLiteral":
1799
+ switch (typeof type.literal) {
1800
+ case "string": return <span className={style_default.Type}>
1801
+ <span className={style_default.LiteralString}>
1802
+ {":"}
1803
+ {type.literal.match(VALID_IDENTIFIER) ? type.literal : JSON.stringify(type.literal)}
1804
+ </span>
1805
+ </span>;
1806
+ case "number": return <span className={style_default.Type}>
1807
+ <span className={style_default.LiteralNumeric}>{JSON.stringify(type.literal)}</span>
1808
+ </span>;
1809
+ case "boolean": return <span className={style_default.Type}>
1810
+ <span className={style_default.LiteralBoolean}>{JSON.stringify(type.literal)}</span>
1811
+ </span>;
1812
+ }
1813
+ break;
1814
+ case "RubyTypeArray": return <span className={style_default.Type}>
1815
+ <span className={style_default.TypeArray}>{"Array["}</span>
1816
+ <Lang.Type type={type.elementType} />
1817
+ <span className={style_default.TypeArray}>{"]"}</span>
1818
+ </span>;
1819
+ case "RubyTypeMap": return <span className={style_default.Type}>
1820
+ <span className={style_default.TypeArray}>{"Hash["}</span>
1821
+ {type.indexType.kind === "RubyTypeString" ? <span className={style_default.TypeString}>Symbol</span> : <Lang.Type type={type.indexType} />}
1822
+ , <Lang.Type type={type.itemType} />
1823
+ <span className={style_default.TypeArray}>{"]"}</span>
1824
+ </span>;
1825
+ case "RubyTypeReference": {
1826
+ const name = type.ident.split(".").at(-1);
1827
+ if (!type.typeParameters || type.typeParameters.length === 0) return <span className={style_default.Type}>
1828
+ <SDKReference$1 stainlessPath={type.$ref}>{name}</SDKReference$1>
1829
+ <TypePreview$1 path={type.$ref} />
1830
+ </span>;
1831
+ const typeParameters = type.typeParameters.map((t, i) => <Lang.Type key={i} type={t} />);
1832
+ return <span className={style_default.Type}>
1833
+ <SDKReference$1 stainlessPath={type.$ref}>{name}</SDKReference$1>
1834
+ <span className={style_default.TypeBracket}>{"<"}</span>
1835
+ <Join$1 items={typeParameters}>
1836
+ <span className={style_default.TextOperator}>, </span>
1837
+ </Join$1>
1838
+ <span className={style_default.TypeBracket}>{">"}</span>
1839
+ <TypePreview$1 path={type.$ref} />
1840
+ </span>;
1841
+ }
1842
+ case "RubyTypeIntersection":
1843
+ case "RubyTypeUnion": {
1844
+ const items = type.types.map((t, key) => <Lang.Type key={key} type={t} />);
1845
+ const delimiter = type.kind === "RubyTypeUnion" ? "|" : "&";
1846
+ return <span className={style_default.Type}>
1847
+ <span className={style_default.TypePreview} data-stldocs-type-preview="union">
1848
+ <span className={style_default.TypePreviewContent}>
1849
+ <Join$1 items={items} limit={3}>
1850
+ <span className={style_default.TextOperator}> {delimiter} </span>
1851
+ </Join$1>
1852
+ </span>
1853
+ </span>
1854
+ </span>;
1855
+ }
1856
+ case "RubyTypeBuiltinClass": return <span className={style_default.TypeReference}>{type.className}</span>;
1857
+ case "RubyTypeObject": {
1858
+ const items = type.members.map((prop, key) => <span key={key} className={style_default.TextIdentifier}>
1859
+ {prop.ident}
1860
+ </span>);
1861
+ return <span className={style_default.Type}>
1862
+ <span className={style_default.TypePreview} data-stldocs-type-preview="properties">
1863
+ <span className={style_default.TypePreviewContent}>
1864
+ <span className={style_default.TypeBrace}>{"{ "}</span>
1865
+ <Join$1 items={items} limit={3}>
1866
+ <span className={style_default.TextOperator}>, </span>
1867
+ </Join$1>
1868
+ <span className={style_default.TypeBrace}>{"}"}</span>
1869
+ </span>
1870
+ </span>
1871
+ </span>;
1872
+ }
1873
+ }
1874
+ }
1875
+ function MethodSignature$1({ decl }) {
1876
+ const Lang = useLanguageComponents();
1877
+ const { Join: Join$1 } = useComponents();
1878
+ const params = decl.args.map((param, i) => <React$1.Fragment key={i}>
1879
+ <span className={style_default.TextIdentifier}>{param.ident}</span>
1880
+ </React$1.Fragment>);
1881
+ return <div className={style_default.MethodSignature}>
1882
+ <span className={style_default.SignatureTitle}>
1883
+ <span className={style_default.SignatureQualified}>
1884
+ <span className={style_default.TextIdentifier}>{decl.qualified?.slice(0, -decl.ident.length)}</span>
1885
+ </span>
1886
+ <span className={style_default.SignatureName}>
1887
+ <span className={style_default.TextIdentifier}>{decl.ident}</span>
1888
+ </span>
1889
+ <span className={style_default.MethodSignature}>
1890
+ <span className={style_default.SignatureParen}>{"("}</span>
1891
+
1892
+ <span className={style_default.SignatureParams}>
1893
+ <Join$1 items={params}>
1894
+ <span className={style_default.TextOperator}>{", "}</span>
1895
+ </Join$1>
1896
+ </span>
1897
+
1898
+ <span className={style_default.SignatureParen}>{")"}</span>
1899
+ {" -> "}
1900
+ {decl.returns ? <Lang.Type type={decl.returns} /> : "void"}
1901
+ </span>
1902
+ </span>
1903
+ </div>;
1904
+ }
1905
+ function Property$1({ decl, children }) {
1906
+ const Lang = useLanguageComponents();
1907
+ switch (decl.kind) {
1908
+ case "RubyDeclProperty": return children({
1909
+ name: decl.ident,
1910
+ typeName: <Lang.TypeName type={decl.type} />,
1911
+ type: decl.type.kind in ComplexTypes$1 && <Lang.Type type={decl.type} />
1912
+ });
1913
+ case "RubyDeclTypeAlias": return children({
1914
+ name: decl.ident,
1915
+ typeName: "alias",
1916
+ type: <Lang.Type type={decl.type} />
1917
+ });
1918
+ case "RubyDeclReference": return children({ type: <Lang.Type type={decl.type} /> });
1919
+ case "RubyDeclClass": return children({
1920
+ name: decl.ident,
1921
+ typeName: "class"
1922
+ });
1923
+ }
1924
+ }
1925
+ function Declaration$1({ decl }) {
1926
+ const Lang = useLanguageComponents();
1927
+ if (!decl) return;
1928
+ switch (decl.kind) {
1929
+ case "RubyDeclProperty": return <>
1930
+ <span className={style_default.TypePropertyName}>
1931
+ <span className={style_default.TextIdentifier}>{decl.ident}</span>
1932
+ </span>
1933
+ <span className={style_default.TextPunctuation}>: </span>
1934
+ <Lang.Type type={decl.type} />
1935
+ </>;
1936
+ case "RubyDeclTypeAlias": return <>
1937
+ <span className={style_default.TextIdentifier}>{decl.ident}</span>
1938
+ <span className={style_default.TextOperator}> = </span>
1939
+ <Lang.Type type={decl.type} />
1940
+ </>;
1941
+ case "RubyDeclClass": return <>
1942
+ <span className={style_default.TextKeyword}>class </span>
1943
+ <span className={style_default.TextIdentifier}>{decl.ident}</span>
1944
+ <TypePreview$1 path={decl.stainlessPath} />
1945
+ </>;
1946
+ case "RubyDeclReference": return <Lang.Type type={decl.type} />;
1947
+ }
1948
+ }
1949
+
1950
+ //#endregion
1951
+ //#region src/languages/http.tsx
1952
+ var http_exports = /* @__PURE__ */ __export({
1953
+ Declaration: () => Declaration,
1954
+ MethodInfo: () => MethodInfo,
1955
+ MethodSignature: () => MethodSignature,
1956
+ Property: () => Property,
1957
+ Type: () => Type,
1958
+ TypeName: () => TypeName
1959
+ });
1960
+ const ComplexTypes = {
1961
+ HttpTypeUnion: "union",
1962
+ HttpTypeIntersection: "intersection"
1963
+ };
1964
+ const constStyle = {
1965
+ string: style_default.LiteralString,
1966
+ number: style_default.LiteralNumeric,
1967
+ boolean: style_default.LiteralBoolean
1968
+ };
1969
+ function Identifier({ name }) {
1970
+ return <>
1971
+ <span className={style_default.TextIdentifier}>
1972
+ {/^[_a-zA-Z][_a-zA-Z0-9]*$/.test(name) ? name : JSON.stringify(name)}
1973
+ </span>
1974
+ </>;
1975
+ }
1976
+ function TypePreview({ path }) {
1977
+ const spec = useSpec();
1978
+ const language = useLanguage();
1979
+ const decl = useDeclaration(path, false);
1980
+ const { Join: Join$1 } = useComponents();
1981
+ if (!(decl && "children" in decl && decl.children && decl.children.length > 0) || "type" in decl && decl["type"] && "kind" in decl["type"] && decl["type"]["kind"] === "HttpTypeUnion") return;
1982
+ const items = decl.children.map((prop, key) => {
1983
+ const decl$1 = spec?.decls?.[language]?.[prop];
1984
+ return <span key={key} className={style_default.TypePropertyName}>
1985
+ <span className={style_default.TextIdentifier}>{decl$1 && "key" in decl$1 ? decl$1?.["key"] : null}</span>
1986
+ </span>;
1987
+ });
1988
+ return <span className={style_default.TypePreview} data-stldocs-type-preview="properties">
1989
+ <span className={style_default.TypeBrace}>{" { "}</span>
1990
+ <span className={style_default.TypePreviewContent}>
1991
+ <Join$1 items={items} limit={3}>
1992
+ <span className={style_default.TextOperator}>, </span>
1993
+ </Join$1>
1994
+ </span>
1995
+ <span className={style_default.TypeBrace}>{" } "}</span>
1996
+ </span>;
1997
+ }
1998
+ function TypeName({ type }) {
1999
+ const Lang = useLanguageComponents();
2000
+ if (type.kind === "HttpTypeArray") return <>array of {<Lang.TypeName type={type.elementType} />}</>;
2001
+ if (type.kind === "HttpTypeUnion" && type.types.every((t) => t.kind === "HttpTypeLiteral")) return "enum";
2002
+ if (type.kind === "HttpTypeReference" && type.ident.split(".").at(-1) === "Record") return "map";
2003
+ return ComplexTypes[type.kind] ?? <Lang.Type type={type} />;
2004
+ }
2005
+ function Type({ type }) {
2006
+ const Lang = useLanguageComponents();
2007
+ const { Join: Join$1, SDKReference: SDKReference$1 } = useComponents();
2008
+ switch (type.kind) {
2009
+ case "HttpTypeUnknown":
2010
+ case "HttpTypeUndefined":
2011
+ case "HttpTypeNull":
2012
+ case "HttpTypeBoolean":
2013
+ case "HttpTypeNumber": return <span className={style_default.Type}>
2014
+ <span className={style_default.TypePlain}>{type.kind.slice(8).toLowerCase()}</span>
2015
+ </span>;
2016
+ case "HttpTypeString": return <span className={style_default.Type}>
2017
+ <span className={style_default.TypePlain}>string</span>
2018
+ </span>;
2019
+ case "HttpTypeLiteral": return <span className={style_default.Type}>
2020
+ <span className={constStyle[typeof type.literal]}>{JSON.stringify(type.literal)}</span>
2021
+ </span>;
2022
+ case "HttpTypeArray": return <span className={style_default.Type}>
2023
+ <span className={style_default.TypeArray}>{"array of "}</span>
2024
+ <Lang.Type type={type.elementType} />
2025
+ </span>;
2026
+ case "HttpTypeIntersection":
2027
+ case "HttpTypeUnion": {
2028
+ const items = type.types.map((t, key) => <Lang.Type key={key} type={t} />);
2029
+ const delimiter = type.kind === "HttpTypeUnion" ? "or" : "and";
2030
+ return <span className={style_default.Type}>
2031
+ <span className={style_default.TypePreview} data-stldocs-type-preview="union">
2032
+ <span className={style_default.TypePreviewContent}>
2033
+ <Join$1 items={items} limit={3}>
2034
+ <span className={style_default.TextOperator}> {delimiter} </span>
2035
+ </Join$1>
2036
+ </span>
2037
+ </span>
2038
+ </span>;
2039
+ }
2040
+ case "HttpTypeReference": {
2041
+ const name = type.ident.split(".").at(-1);
2042
+ const params = type.typeParameters?.map((param, key) => <Lang.Type key={key} type={param} />);
2043
+ if (name === "Record" && type.typeParameters?.length === 2 && type.typeParameters?.at(0).kind === "HttpTypeString") return <>
2044
+ <span className={style_default.TypeArray}>map</span>[{params?.[1]}]
2045
+ </>;
2046
+ return <span className={style_default.Type}>
2047
+ <SDKReference$1 stainlessPath={type.$ref}>{name}</SDKReference$1>
2048
+ {params && params.length > 0 && <>
2049
+ <span className={style_default.TypeBracket}>{"<"}</span>
2050
+ <Join$1 items={params} limit={3}>
2051
+ <span className={style_default.TextOperator}>, </span>
2052
+ </Join$1>
2053
+ <span className={style_default.TypeBracket}>{">"}</span>
2054
+ </>}
2055
+ <TypePreview path={type.$ref} />
2056
+ </span>;
2057
+ }
2058
+ case "HttpTypeObject": {
2059
+ const items = type.members.map(({ ident }) => <span className={style_default.TypePropertyName} key={ident}>
2060
+ <Identifier name={ident} />
2061
+ </span>);
2062
+ return <span className={style_default.Type}>
2063
+ <span className={style_default.TypePlain}>object</span>
2064
+ <span className={style_default.TypePreview} data-stldocs-type-preview="properties">
2065
+ <span className={style_default.TypeBrace}>{" {"}</span>
2066
+ <span className={style_default.TypePreviewContent}>
2067
+ {" "}
2068
+ <Join$1 items={items} limit={3}>
2069
+ <span className={style_default.TextOperator}>, </span>
2070
+ </Join$1>{" "}
2071
+ </span>
2072
+ <span className={style_default.TypeBrace}>{"} "}</span>
2073
+ </span>
2074
+ </span>;
2075
+ }
2076
+ }
2077
+ }
2078
+ function MethodSignature({ decl }) {
2079
+ return null;
2080
+ }
2081
+ function MethodInfo({ decl, children }) {
2082
+ const Docs = useComponents();
2083
+ const params = Object.entries(decl.paramsChildren).filter(([, value]) => value.length).map(([location, value]) => <React.Fragment key={location}>
2084
+ <div className={style_default.MethodParameters} data-stldocs-property-group={location.at(0)}>
2085
+ <h5>
2086
+ {location.at(0).toUpperCase()}
2087
+ {location.slice(1)} Parameters
2088
+ <PropertyToggle target={location.at(0)} />
2089
+ </h5>
2090
+ <Docs.SDKChildren paths={value} />
2091
+ </div>
2092
+ </React.Fragment>);
2093
+ if ((decl.bodyParamsChildren?.["application/json"]?.length ?? 0) > 0) params.push(<div className={style_default.MethodInfoSection}>
2094
+ <h5>
2095
+ Body Parameters
2096
+ <PropertyToggle target="body" />
2097
+ </h5>
2098
+ <div className={style_default.MethodParameters} data-stldocs-property-group="body">
2099
+ <Docs.SDKChildren paths={decl.bodyParamsChildren?.["application/json"] ?? []} />
2100
+ </div>
2101
+ </div>);
2102
+ return <div className={style_default.MethodInfo}>
2103
+ {children && <div className={style_default.MethodContent}>{children}</div>}
2104
+ {params.length > 0 && params}
2105
+ {(decl.responseChildren?.length ?? 0) > 0 && <div className={style_default.MethodInfoSection}>
2106
+ <h5>
2107
+ Returns
2108
+ <PropertyToggle target="returns" />
2109
+ </h5>
2110
+ <div className={style_default.MethodReturns} data-stldocs-property-group="returns">
2111
+ <Docs.SDKChildren paths={decl.responseChildren ?? []} />
2112
+ </div>
2113
+ </div>}
2114
+ </div>;
2115
+ }
2116
+ function renderVariantInfo(type) {
2117
+ if (type.kind === "HttpTypeUnion" && type.types.every((t) => t.kind === "HttpTypeObject" || t.kind === "HttpTypeReference")) return <>One of the following {type.types.length} object variants:</>;
2118
+ }
2119
+ function Property({ decl, children }) {
2120
+ const Lang = useLanguageComponents();
2121
+ if (!decl) return;
2122
+ switch (decl.kind) {
2123
+ case "HttpDeclProperty": {
2124
+ const variants = renderVariantInfo(decl.type);
2125
+ return children({
2126
+ name: decl.key,
2127
+ typeName: <Lang.TypeName type={decl.type} />,
2128
+ type: decl.type.kind in ComplexTypes && !variants && <Lang.Type type={decl.type} />
2129
+ });
2130
+ }
2131
+ case "HttpDeclTypeAlias": return children({
2132
+ name: decl.ident,
2133
+ typeName: <Lang.TypeName type={decl.type} />
2134
+ });
2135
+ case "HttpDeclReference": return children({ type: <Lang.Type type={decl.type} /> });
2136
+ }
2137
+ }
2138
+ function Declaration({ decl }) {
2139
+ const Lang = useLanguageComponents();
2140
+ if (!decl) return;
2141
+ switch (decl.kind) {
2142
+ case "HttpDeclProperty": return <>
2143
+ <span className={style_default.TypePropertyName}>
2144
+ <Identifier name={decl.key} />
2145
+ </span>
2146
+ <span className={style_default.TextPunctuation}>: </span>
2147
+ {decl.optional && <span className={style_default.TextPunctuation}>optional </span>}
2148
+ <Lang.Type type={decl.type} />
2149
+ </>;
2150
+ case "HttpDeclTypeAlias": return <>
2151
+ <Identifier name={decl.ident} />
2152
+ <span className={style_default.TextOperator}> = </span>
2153
+ <Lang.Type type={decl.type} />
2154
+ </>;
2155
+ case "HttpDeclReference": return <Lang.Type type={decl.type} />;
2156
+ }
2157
+ }
2158
+
2159
+ //#endregion
2160
+ //#region src/languages/index.ts
2161
+ var languages_exports = /* @__PURE__ */ __export({
2162
+ go: () => go_exports,
2163
+ http: () => http_exports,
2164
+ java: () => java_exports,
2165
+ kotlin: () => kotlin,
2166
+ node: () => node,
2167
+ python: () => python_exports,
2168
+ ruby: () => ruby_exports,
2169
+ typescript: () => typescript_exports
2170
+ });
2171
+ const node = typescript_exports;
2172
+ const kotlin = java_exports;
2173
+
2174
+ //#endregion
2175
+ //#region src/contexts/component.tsx
2176
+ const defaultContextValue = {
2177
+ components: components_exports,
2178
+ language: languages_exports
2179
+ };
2180
+ function ComponentProvider({ components, language, children }) {
2181
+ const value = React.useMemo(() => customizeComponents(defaultContextValue, {
2182
+ components,
2183
+ language
2184
+ }), [components, language]);
2185
+ return <ComponentProvider$1 value={value}>{children}</ComponentProvider$1>;
2186
+ }
2187
+
2188
+ //#endregion
2189
+ //#region src/search/printer.tsx
2190
+ function Providers({ language, children }) {
2191
+ return <DocsProvider spec={null} language={language}>
2192
+ <ComponentProvider components={{ SDKReference({ stainlessPath, children: children$1 }) {
2193
+ if (!stainlessPath) return children$1;
2194
+ return <span className={style_default.TypeReference}>{children$1}</span>;
2195
+ } }}>
2196
+ {children}
2197
+ </ComponentProvider>
2198
+ </DocsProvider>;
2199
+ }
2200
+ function RenderType({ type, full }) {
2201
+ const { Type: Type$6, TypeName: TypeName$6 } = useLanguageComponents();
2202
+ return full ? <Type$6 type={type} /> : <TypeName$6 type={type} />;
2203
+ }
2204
+ function typeName(language, type) {
2205
+ return renderToStaticMarkup(<Providers language={language}>
2206
+ <RenderType type={type} />
2207
+ </Providers>);
2208
+ }
2209
+ function RenderDeclaration({ decl }) {
2210
+ const { Declaration: Declaration$6 } = useLanguageComponents();
2211
+ return <Declaration$6 decl={decl} />;
2212
+ }
2213
+ function declaration$1(language, decl) {
2214
+ return renderToStaticMarkup(<Providers language={language}>
2215
+ <RenderDeclaration decl={decl} />
2216
+ </Providers>);
2217
+ }
2218
+ function RenderMethod({ method }) {
2219
+ const { MethodSignature: MethodSignature$6 } = useLanguageComponents();
2220
+ return <MethodSignature$6 decl={method} />;
2221
+ }
2222
+ function methodSignature(language, decl) {
2223
+ return renderToStaticMarkup(<Providers language={language}>
2224
+ <RenderMethod method={decl} />
2225
+ </Providers>);
2226
+ }
2227
+
2228
+ //#endregion
2229
+ //#region src/markdown/index.ts
2230
+ function declaration(env, decl) {
2231
+ const content = declaration$1(env.language, decl);
2232
+ return paragraph(code(stripMarkup(content)));
2233
+ }
2234
+ function renderChildren(env, children, nesting = []) {
2235
+ return list(...children.map((child) => renderDecl(env, child, nesting)));
2236
+ }
2237
+ function renderDecl(env, path, nesting = []) {
2238
+ const decl = getDecl(env, path);
2239
+ const item$1 = item(declaration(env, decl));
2240
+ const hasChildren = "children" in decl && decl.children && decl.children.length > 0;
2241
+ const showModelProps = !("modelPath" in decl && decl["modelPath"]) || env.options.includeModelProperties;
2242
+ if ("docstring" in decl && decl.docstring) item$1.children.push(...parse(decl.docstring));
2243
+ if (hasChildren && showModelProps && !nesting.includes(path)) item$1.push(renderChildren(env, decl.children ?? [], [...nesting, path]));
2244
+ return item$1;
2245
+ }
2246
+ function renderMethod(env, method) {
2247
+ const decl = getDecl(env, method.stainlessPath);
2248
+ if (!decl) return [paragraph(text("The method "), code(method.name), text(" is not available in this language."))];
2249
+ const signature = methodSignature(env.language, decl);
2250
+ const [httpMethod, endpoint] = method.endpoint.split(" ");
2251
+ const output = [
2252
+ heading(2, method.title),
2253
+ ...env.language === "http" ? [] : [paragraph(code(stripMarkup(signature)))],
2254
+ paragraph(strong(text(httpMethod)), text(" "), code(endpoint))
2255
+ ];
2256
+ if (method.description) output.push(...parse(method.description));
2257
+ if ("paramsChildren" in decl && Array.isArray(decl.paramsChildren) && decl.paramsChildren.length > 0) output.push(heading(3, "Parameters"), renderChildren(env, decl.paramsChildren));
2258
+ if ("responseChildren" in decl && decl.responseChildren && decl.responseChildren.length > 0) output.push(heading(3, "Returns"), renderChildren(env, decl.responseChildren));
2259
+ const snippet = getSnippet(env, method.stainlessPath);
2260
+ if (snippet) output.push(heading(3, "Example"), fence(env.language, snippet));
2261
+ return output;
2262
+ }
2263
+ function renderModel(env, model) {
2264
+ return [heading(3, model.title), list(renderDecl(env, `${model.stainlessPath} > (schema)`))];
2265
+ }
2266
+ function renderResource(env, resource) {
2267
+ const methods = Object.values(resource.methods).filter((method) => getDecl(env, method.stainlessPath)).flatMap((method) => renderMethod(env, method));
2268
+ const models = Object.values(resource.models).filter((model) => getDecl(env, `${model.stainlessPath} > (schema)`)).flatMap((model) => renderModel(env, model));
2269
+ const doc = [heading(1, resource.title), ...methods];
2270
+ if (models.length > 0) doc.push(heading(2, "Domain Types"), ...models);
2271
+ if (!env.options.renderNestedResources) return doc;
2272
+ const children = Object.values(resource.subresources ?? {}).flatMap((resource$1) => renderResource(env, resource$1));
2273
+ return [...doc, ...children];
2274
+ }
2275
+ function render(env, node$1) {
2276
+ switch (node$1.kind) {
2277
+ case "resource": return renderResource(env, node$1);
2278
+ case "http_method": return renderMethod(env, node$1);
2279
+ case "model": return renderModel(env, node$1);
2280
+ }
2281
+ }
2282
+ function renderMarkdown(env, node$1) {
2283
+ const content = render(env, node$1);
2284
+ const doc = new Markdoc.Ast.Node("document", {}, content);
2285
+ return Markdoc.format(doc);
2286
+ }
2287
+
2288
+ //#endregion
2289
+ //#region src/search/indexer.ts
2290
+ function getResourceNames(resourceIds, topResources) {
2291
+ let element = void 0;
2292
+ let resources = topResources;
2293
+ const resourceName = [];
2294
+ for (const resource of resourceIds) {
2295
+ element = resources?.[resource];
2296
+ if (!element) break;
2297
+ resourceName.push(element.title);
2298
+ resources = element?.subresources;
2299
+ }
2300
+ return resourceName;
2301
+ }
2302
+ function chunkByLines(content, maxSize = 6e4) {
2303
+ if (Buffer.byteLength(content, "utf8") < maxSize) return [content];
2304
+ const lines = content.split("\n");
2305
+ const chunks = [];
2306
+ let currentChunk = [];
2307
+ let currentSize = 0;
2308
+ for (const line of lines) {
2309
+ const lineSize = Buffer.byteLength(line + "\n", "utf8");
2310
+ if (currentSize + lineSize > maxSize) {
2311
+ chunks.push(currentChunk.join("\n"));
2312
+ currentChunk = [];
2313
+ currentSize = 0;
2314
+ }
2315
+ currentChunk.push(line);
2316
+ currentSize += lineSize;
2317
+ }
2318
+ if (currentChunk.length > 0) chunks.push(currentChunk.join("\n"));
2319
+ return chunks;
2320
+ }
2321
+ function* generateChatIndex(spec) {
2322
+ for (const [language, readme] of Object.entries(spec.readme)) {
2323
+ const chunks = chunkByLines(readme);
2324
+ for (const chunk of chunks) yield {
2325
+ language,
2326
+ title: "Overview",
2327
+ content: chunk,
2328
+ url: `docs://BASE_PATH/${language}`
2329
+ };
2330
+ }
2331
+ for (const { data } of walkTree(spec)) {
2332
+ if (data.kind !== "http_method") continue;
2333
+ const { title, name, stainlessPath, httpMethod, summary, description } = data;
2334
+ const endpoint = data.endpoint.slice(httpMethod.length).trim();
2335
+ for (const language of Languages) {
2336
+ const decl = spec.decls[language]?.[stainlessPath];
2337
+ if (!decl) continue;
2338
+ const chunks = chunkByLines(renderMarkdown({
2339
+ spec,
2340
+ language,
2341
+ options: { includeModelProperties: true }
2342
+ }, data));
2343
+ for (const chunk of chunks) yield {
2344
+ language,
2345
+ title,
2346
+ name,
2347
+ endpoint,
2348
+ httpMethod,
2349
+ summary,
2350
+ description,
2351
+ stainlessPath,
2352
+ qualified: "qualified" in decl ? decl["qualified"] : void 0,
2353
+ ident: "ident" in decl ? decl["ident"] : void 0,
2354
+ content: chunk,
2355
+ url: generateRoute("docs://BASE_PATH", language, stainlessPath)
2356
+ };
2357
+ }
2358
+ }
2359
+ }
2360
+ function* generateIndex(spec, renderMarkdownFn, includeTypes) {
2361
+ const parentCrumbs = {};
2362
+ for (const { data } of walkTree(spec, true)) {
2363
+ const { kind, name, title, stainlessPath } = data;
2364
+ const common = {
2365
+ name,
2366
+ title,
2367
+ stainlessPath
2368
+ };
2369
+ const crumbs = getResourceNames(parseStainlessPath(stainlessPath).resource, spec.resources);
2370
+ switch (kind) {
2371
+ case "resource":
2372
+ for (const language of Languages) {
2373
+ if (!data[language]) continue;
2374
+ parentCrumbs[stainlessPath] = crumbs;
2375
+ const { Name, QualifiedName } = data[language];
2376
+ yield {
2377
+ kind,
2378
+ crumbs,
2379
+ language,
2380
+ Name,
2381
+ QualifiedName,
2382
+ priority: 0,
2383
+ ...common
2384
+ };
2385
+ }
2386
+ break;
2387
+ case "http_method": {
2388
+ const { summary, endpoint, httpMethod } = data;
2389
+ for (const language of Languages) {
2390
+ const found = spec.decls[language]?.[stainlessPath];
2391
+ if (!found) continue;
2392
+ parentCrumbs[stainlessPath] = [...crumbs, title];
2393
+ const qualified = "qualified" in found ? found["qualified"] : void 0;
2394
+ const ident = qualified?.split(".")?.at(-1);
2395
+ yield {
2396
+ kind,
2397
+ crumbs: [...crumbs, title],
2398
+ ident,
2399
+ qualified,
2400
+ language,
2401
+ description: data.description ? renderMarkdownFn?.(data.description) ?? data.description : void 0,
2402
+ endpoint: endpoint.slice(httpMethod.length).trim(),
2403
+ httpMethod,
2404
+ summary,
2405
+ priority: 0,
2406
+ ...common
2407
+ };
2408
+ }
2409
+ break;
2410
+ }
2411
+ case "model": for (const language of Languages) {
2412
+ if (!spec.decls[language]) continue;
2413
+ parentCrumbs[stainlessPath] = [...crumbs, title];
2414
+ const schema = spec.decls[language]?.[`${stainlessPath} > (schema)`];
2415
+ const children = (schema && "children" in schema ? schema?.["children"] : void 0)?.map((childPath) => {
2416
+ const child = spec.decls?.[language]?.[childPath];
2417
+ return child?.["ident"] ?? child?.["name"] ?? child?.["key"] ?? child?.["type"]?.["literal"]?.["value"] ?? child?.["type"]?.["literal"] ?? child?.["type"]?.["value"];
2418
+ })?.filter((child) => child) ?? [];
2419
+ yield {
2420
+ kind,
2421
+ crumbs: [...crumbs, title],
2422
+ children,
2423
+ language,
2424
+ priority: 2,
2425
+ ident: schema && "ident" in schema ? schema?.["ident"] : void 0,
2426
+ ...common
2427
+ };
2428
+ }
2429
+ }
2430
+ }
2431
+ for (const language of Languages) {
2432
+ const decls = spec.decls?.[language];
2433
+ if (!decls) continue;
2434
+ for (const decl of Object.values(decls)) switch (decl.kind) {
2435
+ case "JavaDeclProperty":
2436
+ case "GoDeclProperty":
2437
+ case "PythonDeclProperty":
2438
+ case "RubyDeclProperty":
2439
+ case "HttpDeclProperty":
2440
+ case "TSDeclProperty":
2441
+ {
2442
+ const parsedPath = parseStainlessPath(decl.stainlessPath);
2443
+ const type = includeTypes === false ? void 0 : typeName(language, decl.type);
2444
+ const name = decl["ident"] ?? decl["name"] ?? decl["key"];
2445
+ const parent = parentCrumbs[parsedPath.routable];
2446
+ if (parent === void 0) continue;
2447
+ const matches = decl.stainlessPath.matchAll(/\((property|params|param)\) ([^\s]+)/g);
2448
+ const props = Array.from(matches).map((p) => p[2]).filter((p) => p !== void 0);
2449
+ yield {
2450
+ kind: "property",
2451
+ name,
2452
+ stainlessPath: decl.stainlessPath,
2453
+ crumbs: [...parent, ...props],
2454
+ docstring: decl.docstring ? renderMarkdownFn?.(decl.docstring) ?? decl.docstring : void 0,
2455
+ type,
2456
+ language,
2457
+ priority: 3
2458
+ };
2459
+ }
2460
+ break;
2461
+ }
2462
+ }
2463
+ }
2464
+
2465
+ //#endregion
2466
+ //#region src/search/providers/algolia.ts
2467
+ async function buildIndex(appId, indexName, writeKey, spec, renderMarkdown$1) {
2468
+ if (!appId || !indexName || !writeKey) return;
2469
+ const objects = Array.from(generateIndex(spec, renderMarkdown$1));
2470
+ const client = searchClient(appId, writeKey);
2471
+ await client.setSettings({
2472
+ indexName,
2473
+ indexSettings: {
2474
+ highlightPreTag: "<mark>",
2475
+ highlightPostTag: "</mark>",
2476
+ customRanking: ["asc(priority)"],
2477
+ attributesForFaceting: ["language", "kind"],
2478
+ searchableAttributes: [...SearchableAttributes]
2479
+ }
2480
+ });
2481
+ await client.replaceAllObjects({
2482
+ indexName,
2483
+ objects
2484
+ });
2485
+ }
2486
+ async function buildChatIndex(appId, indexName, writeKey, spec) {
2487
+ if (!appId || !indexName || !writeKey) return;
2488
+ const objects = Array.from(generateChatIndex(spec));
2489
+ const client = searchClient(appId, writeKey);
2490
+ await client.setSettings({
2491
+ indexName,
2492
+ indexSettings: {
2493
+ attributesForFaceting: ["language"],
2494
+ attributeForDistinct: "stainlessPath",
2495
+ searchableAttributes: SearchableAttributesChat
2496
+ }
2497
+ });
2498
+ await client.replaceAllObjects({
2499
+ indexName,
2500
+ objects
2501
+ });
2502
+ }
2503
+ async function search({ settings: { appId, indexName, searchKey }, params: { query, language, kind } }) {
2504
+ const client = searchClient(appId, searchKey);
2505
+ const filters = language ? `language:${language}` : void 0;
2506
+ const facetFilters = kind ? [`kind:${kind}`] : void 0;
2507
+ const { results } = await client.search({ requests: [{
2508
+ query,
2509
+ indexName,
2510
+ filters,
2511
+ hitsPerPage: 5,
2512
+ facets: ["kind"]
2513
+ }, {
2514
+ query,
2515
+ indexName,
2516
+ filters,
2517
+ facetFilters,
2518
+ facets: ["kind"],
2519
+ hitsPerPage: 50
2520
+ }] });
2521
+ if ("hits" in results[0] && "hits" in results[1]) {
2522
+ const [{ nbHits, facets }, { hits }] = results;
2523
+ return {
2524
+ hits,
2525
+ nbHits: nbHits ?? 0,
2526
+ facets
2527
+ };
2528
+ }
2529
+ }
2530
+
2531
+ //#endregion
2532
+ //#region src/contexts/search.tsx
2533
+ const [Provider, useSearchContext] = createStrictContext("SearchContext");
2534
+ function useSearch() {
2535
+ const { settings } = useSearchContext();
2536
+ return (params) => search({
2537
+ settings,
2538
+ params
2539
+ });
2540
+ }
2541
+ function SearchProvider({ children,...props }) {
2542
+ return <Provider value={props}>{children}</Provider>;
2543
+ }
2544
+
2545
+ //#endregion
2546
+ //#region src/contexts/index.tsx
2547
+ var contexts_exports = /* @__PURE__ */ __export({
2548
+ ComponentProvider: () => ComponentProvider$1,
2549
+ DocsProvider: () => DocsProvider,
2550
+ MarkdownContext: () => MarkdownContext,
2551
+ MarkdownProvider: () => MarkdownProvider,
2552
+ NavigationProvider: () => NavigationProvider,
2553
+ SearchProvider: () => SearchProvider,
2554
+ customizeComponents: () => customizeComponents,
2555
+ useComponentContext: () => useComponentContext,
2556
+ useComponents: () => useComponents$1,
2557
+ useContentPanelLayout: () => useContentPanelLayout,
2558
+ useDeclaration: () => useDeclaration,
2559
+ useDocs: () => useDocs,
2560
+ useHighlight: () => useHighlight,
2561
+ useLanguage: () => useLanguage,
2562
+ useLanguageComponents: () => useLanguageComponents,
2563
+ useMarkdownContext: () => useMarkdownContext,
2564
+ useNavigation: () => useNavigation,
2565
+ useRenderMarkdown: () => useRenderMarkdown,
2566
+ useResource: () => useResource,
2567
+ useSearch: () => useSearch,
2568
+ useSearchContext: () => useSearchContext,
2569
+ useSettings: () => useSettings,
2570
+ useSnippet: () => useSnippet,
2571
+ useSpec: () => useSpec
2572
+ });
2573
+ function useLanguageComponents() {
2574
+ const language = useLanguage();
2575
+ const definition = useComponentContext().language[language];
2576
+ if (!definition) throw new Error(`Language component definition not found for language: ${language}`);
2577
+ return definition;
2578
+ }
2579
+
2580
+ //#endregion
2581
+ export { TypeName$5 as $, PropertyDescription as $t, ruby_exports as A, SDKRequestTitle as At, Type$3 as B, Markdown as Bt, TypeName as C, SDKIcon as Ct, Property$1 as D, SDKMethodInfo as Dt, MethodSignature$1 as E, SDKMethodHeader as Et, TypeName$2 as F, Expander as Ft, Property$4 as G, HttpMethods as Gt, go_exports as H, Tooltip as Ht, python_exports as I, Input as It, java_exports as J, MethodHeader as Jt, Type$4 as K, Method as Kt, Declaration$3 as L, Join as Lt, MethodSignature$2 as M, usePropertyModel as Mt, Property$2 as N, useReferenceNesting as Nt, Type$1 as O, SDKModel as Ot, Type$2 as P, Badge as Pt, Type$5 as Q, Property$6 as Qt, MethodSignature$3 as R, Link as Rt, Type as S, SDKExample as St, Declaration$1 as T, SDKMethod as Tt, Declaration$4 as U, VirtualExpander as Ut, TypeName$3 as V, ToggleButton as Vt, MethodSignature$4 as W, HttpMethodIcons as Wt, MethodSignature$5 as X, MethodInfo$1 as Xt, Declaration$5 as Y, MethodIconBadge as Yt, Property$5 as Z, MethodRoute as Zt, node as _, PropertyModelContext as _t, useSearchContext as a, SidebarResource as at, MethodSignature as b, SDKConstraints as bt, search as c, SDKOverview as ct, render as d, SDKRoot as dt, PropertyToggle as en, typescript_exports as et, renderMarkdown as f, Snippet as ft, languages_exports as g, SnippetResponse as gt, kotlin as h, SnippetRequestContainer as ht, useSearch as i, SidebarMethod as it, Declaration$2 as j, SDKSnippetLanguages as jt, TypeName$1 as k, SDKReference as kt, generateIndex as l, SDKResource as lt, defaultContextValue as m, SnippetContainer as mt, useLanguageComponents as n, Sidebar as nt, buildChatIndex as o, SDKBreadcrumbs as ot, ComponentProvider as p, SnippetCode as pt, TypeName$4 as q, MethodDescription as qt, SearchProvider as r, SidebarExpander as rt, buildIndex as s, SDKMethodSummary as st, contexts_exports as t, components_exports as tt, declaration as u, SDKResourceHeader as ut, Declaration as v, ReferenceNestingContext as vt, http_exports as w, SDKLanguageBlock as wt, Property as x, SDKDeclaration as xt, MethodInfo as y, SDKChildren as yt, Property$3 as z, ListView as zt };