@stainless-api/docs 0.1.0-beta.3 → 0.1.0-beta.31

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 (102) hide show
  1. package/CHANGELOG.md +222 -0
  2. package/components/variables.css +1 -27
  3. package/eslint-suppressions.json +47 -0
  4. package/locals.d.ts +14 -0
  5. package/package.json +30 -27
  6. package/plugin/buildAlgoliaIndex.ts +29 -4
  7. package/plugin/cms/server.ts +97 -54
  8. package/plugin/cms/sidebar-builder.ts +6 -25
  9. package/plugin/cms/worker.ts +2 -2
  10. package/plugin/components/SnippetCode.tsx +7 -4
  11. package/plugin/components/search/SearchAlgolia.astro +0 -7
  12. package/plugin/components/search/SearchIsland.tsx +30 -17
  13. package/plugin/generateAPIReferenceLink.ts +1 -1
  14. package/plugin/globalJs/ai-dropdown-options.ts +233 -0
  15. package/plugin/globalJs/navigation.ts +0 -23
  16. package/plugin/helpers/getPageLoadEvent.ts +1 -1
  17. package/plugin/index.ts +48 -18
  18. package/plugin/languages.ts +1 -1
  19. package/plugin/loadPluginConfig.ts +100 -13
  20. package/plugin/react/Routing.tsx +30 -33
  21. package/plugin/referencePlaceholderUtils.ts +1 -1
  22. package/plugin/replaceSidebarPlaceholderMiddleware.ts +4 -0
  23. package/plugin/routes/Docs.astro +59 -85
  24. package/plugin/routes/Overview.astro +9 -15
  25. package/plugin/routes/markdown.ts +3 -3
  26. package/plugin/vendor/preview.worker.docs.js +7566 -6784
  27. package/resolveSrcFile.ts +10 -0
  28. package/shared/getSharedLogger.ts +15 -0
  29. package/shared/terminalUtils.ts +3 -0
  30. package/src/content.config.ts +9 -0
  31. package/stl-docs/components/AIDropdown.tsx +63 -0
  32. package/stl-docs/components/Head.astro +16 -0
  33. package/stl-docs/components/Header.astro +3 -2
  34. package/stl-docs/components/PageTitle.astro +64 -0
  35. package/stl-docs/components/TableOfContents.astro +34 -0
  36. package/stl-docs/components/ThemeSelect.astro +4 -2
  37. package/stl-docs/components/content-panel/ContentPanel.astro +9 -39
  38. package/stl-docs/components/headers/DefaultHeader.astro +1 -1
  39. package/stl-docs/components/headers/HeaderLinks.astro +1 -1
  40. package/stl-docs/components/headers/StackedHeader.astro +29 -24
  41. package/stl-docs/components/icons/chat-gpt.tsx +17 -0
  42. package/stl-docs/components/icons/claude.tsx +10 -0
  43. package/stl-docs/components/icons/cursor.tsx +46 -0
  44. package/stl-docs/components/icons/gemini.tsx +30 -0
  45. package/stl-docs/components/icons/markdown.tsx +10 -0
  46. package/stl-docs/components/index.ts +2 -0
  47. package/stl-docs/components/mintlify-compat/Accordion.astro +7 -38
  48. package/stl-docs/components/mintlify-compat/AccordionGroup.astro +9 -23
  49. package/stl-docs/components/mintlify-compat/Columns.astro +40 -42
  50. package/stl-docs/components/mintlify-compat/Frame.astro +16 -18
  51. package/stl-docs/components/mintlify-compat/Step.astro +30 -32
  52. package/stl-docs/components/mintlify-compat/Steps.astro +8 -10
  53. package/stl-docs/components/mintlify-compat/callouts/Callout.astro +10 -3
  54. package/stl-docs/components/mintlify-compat/callouts/Check.astro +7 -3
  55. package/stl-docs/components/mintlify-compat/callouts/Danger.astro +7 -3
  56. package/stl-docs/components/mintlify-compat/callouts/Info.astro +7 -3
  57. package/stl-docs/components/mintlify-compat/callouts/Note.astro +7 -3
  58. package/stl-docs/components/mintlify-compat/callouts/Tip.astro +7 -3
  59. package/stl-docs/components/mintlify-compat/callouts/Warning.astro +7 -3
  60. package/stl-docs/components/mintlify-compat/card.css +33 -35
  61. package/stl-docs/components/nav-tabs/NavDropdown.astro +1 -1
  62. package/stl-docs/components/nav-tabs/SecondaryNavTabs.astro +15 -7
  63. package/stl-docs/components/nav-tabs/buildNavLinks.ts +4 -3
  64. package/stl-docs/components/pagination/HomeLink.astro +10 -0
  65. package/stl-docs/components/pagination/Pagination.astro +173 -0
  66. package/stl-docs/components/pagination/PaginationLinkEmphasized.astro +22 -0
  67. package/stl-docs/components/pagination/PaginationLinkQuiet.astro +13 -0
  68. package/stl-docs/components/pagination/util.ts +71 -0
  69. package/stl-docs/components/{Sidebar.astro → sidebars/BaseSidebar.astro} +2 -3
  70. package/stl-docs/components/sidebars/SDKSelectSidebar.astro +8 -0
  71. package/stl-docs/disableCalloutSyntax.ts +36 -0
  72. package/stl-docs/index.ts +76 -26
  73. package/stl-docs/loadStlDocsConfig.ts +25 -3
  74. package/stl-docs/proseMarkdown/proseMarkdownIntegration.ts +64 -0
  75. package/stl-docs/proseMarkdown/proseMarkdownMiddleware.ts +34 -0
  76. package/stl-docs/proseMarkdown/toMarkdown.ts +158 -0
  77. package/stl-docs/tabsMiddleware.ts +12 -4
  78. package/styles/code.css +115 -127
  79. package/styles/fonts.css +32 -17
  80. package/styles/links.css +10 -49
  81. package/styles/overrides.css +54 -57
  82. package/styles/page.css +89 -59
  83. package/styles/sdk_select.css +6 -7
  84. package/styles/search.css +65 -67
  85. package/styles/sidebar.css +199 -128
  86. package/styles/toc.css +37 -33
  87. package/theme.css +9 -1
  88. package/tsconfig.json +2 -5
  89. package/virtual-module.d.ts +5 -1
  90. package/plugin/globalJs/ai-dropdown.ts +0 -57
  91. package/stl-docs/components/APIReferenceAIDropdown.tsx +0 -86
  92. package/stl-docs/components/content-panel/ProseAIDropdown.tsx +0 -64
  93. /package/{plugin/assets → assets}/fonts/geist/OFL.txt +0 -0
  94. /package/{plugin/assets → assets}/fonts/geist/geist-italic-latin-ext.woff2 +0 -0
  95. /package/{plugin/assets → assets}/fonts/geist/geist-italic-latin.woff2 +0 -0
  96. /package/{plugin/assets → assets}/fonts/geist/geist-latin-ext.woff2 +0 -0
  97. /package/{plugin/assets → assets}/fonts/geist/geist-latin.woff2 +0 -0
  98. /package/{plugin/assets → assets}/fonts/geist/geist-mono-italic-latin-ext.woff2 +0 -0
  99. /package/{plugin/assets → assets}/fonts/geist/geist-mono-italic-latin.woff2 +0 -0
  100. /package/{plugin/assets → assets}/fonts/geist/geist-mono-latin-ext.woff2 +0 -0
  101. /package/{plugin/assets → assets}/fonts/geist/geist-mono-latin.woff2 +0 -0
  102. /package/stl-docs/components/{content-panel/ContentBreadcrumbs.tsx → ContentBreadcrumbs.tsx} +0 -0
@@ -6,8 +6,8 @@ import remarkGfmAlerts from 'remark-github-alerts';
6
6
 
7
7
  import type { MarkdownHeading } from 'astro';
8
8
  import type { StarlightRouteData } from '@astrojs/starlight/route-data';
9
- import type * as SDKJSON from '~/lib/json-spec-v2/types';
10
- import type { DocsLanguage } from '@stainless-api/docs-ui/src/routing';
9
+ import type * as SDKJSON from '@stainless/sdk-json';
10
+ import { LanguageNames, type DocsLanguage } from '@stainless-api/docs-ui/src/routing';
11
11
 
12
12
  import {
13
13
  generateRouteList,
@@ -48,14 +48,14 @@ import {
48
48
  HIGHLIGHT_THEMES,
49
49
  BREADCRUMB_CONFIG,
50
50
  PROPERTY_SETTINGS,
51
+ ENABLE_CONTEXT_MENU,
51
52
  } from 'virtual:stl-starlight-virtual-module';
52
53
  import style from '@stainless-api/docs-ui/src/style';
53
54
  import { createHighlighter, type BundledLanguage, type BundledTheme, type HighlighterGeneric } from 'shiki';
54
55
  import { SnippetCode, SnippetContainer, SnippetRequestContainer } from '../components/SnippetCode';
55
- import clsx from 'clsx';
56
56
  import type { StlStarlightMiddleware } from '../middlewareBuilder/stainlessMiddleware';
57
57
  import { ComponentProvider } from '@stainless-api/docs-ui/src/contexts/component';
58
- import { APIReferenceAIDropdown } from '../../stl-docs/components/APIReferenceAIDropdown';
58
+ import { AIDropdown } from '../../stl-docs/components/AIDropdown';
59
59
 
60
60
  export function generateDocsRoutes(spec: SDKJSON.Spec) {
61
61
  const paths = generateRouteList({
@@ -120,7 +120,6 @@ export function buildSidebar(
120
120
 
121
121
  const meths: SidebarEntry[] = Object.values(resource.methods ?? [])
122
122
  .filter((method) => spec.decls?.[language]?.[method.stainlessPath])
123
- .toSorted((first, second) => first.name.localeCompare(second.name))
124
123
  .map((method) => ({
125
124
  type: 'link',
126
125
  isCurrent: current === method.stainlessPath,
@@ -179,25 +178,25 @@ export function SDKSelectReactComponent({
179
178
  return (
180
179
  <Dropdown id={id} data-current-value={selected} className={className}>
181
180
  <DropdownTrigger
182
- className="dropdown-toggle stldocs-button-tertiary"
181
+ className="dropdown-toggle"
183
182
  type="button"
184
- id="stldocs-snippet-title-button"
183
+ id="stl-docs-snippet-title-button"
185
184
  aria-expanded="false"
186
185
  withChevron
187
186
  >
188
187
  <SDKIcon language={getLanguageSnippet(selected)} size={16} />
189
- <span className={clsx('stl-snippet-dropdown-button-text', selected)}>{selected}</span>
188
+ <span className="stl-snippet-dropdown-button-text">{LanguageNames[selected]}</span>
190
189
  </DropdownTrigger>
191
190
  <DropdownMenu
192
191
  className="dropdown-menu stl-sdk-select-dropdown-menu"
193
192
  position="below"
194
- aria-labelledby="stldocs-snippet-title-button"
193
+ aria-labelledby="stl-docs-snippet-title-button"
195
194
  >
196
195
  {languages.map((item) => (
197
196
  <DropdownItem key={item} value={item} selected={item === selected}>
198
197
  <div>
199
198
  <SDKIcon language={getLanguageSnippet(item)} size={16} />
200
- <span className={clsx('stl-snippet-dropdown-button-text', item)}>{item}</span>
199
+ <span className="stl-snippet-dropdown-button-text">{LanguageNames[item]}</span>
201
200
  </div>
202
201
  </DropdownItem>
203
202
  ))}
@@ -302,7 +301,10 @@ export function RenderSpec({
302
301
  const parsed = parseStainlessPath(path);
303
302
  const resource = getResourceFromSpec(path, spec);
304
303
 
305
- if (!resource || !parsed) return null;
304
+ if (!resource || !parsed) {
305
+ console.warn(`Could not find resource or parsed path for '${path}'`);
306
+ return null;
307
+ }
306
308
 
307
309
  return (
308
310
  <DocsProvider
@@ -323,7 +325,7 @@ export function RenderSpec({
323
325
  >
324
326
  <NavigationProvider basePath={BASE_PATH} selectedPath={path}>
325
327
  <MarkdownProvider render={renderMarkdown} highlight={highlight}>
326
- {kind === 'http_method' ? (
328
+ {
327
329
  <div className="stldocs-root stl-ui-not-prose">
328
330
  <div className="stl-page-nav-container">
329
331
  <SDKBreadcrumbs
@@ -332,27 +334,18 @@ export function RenderSpec({
332
334
  basePath={BASE_PATH}
333
335
  config={BREADCRUMB_CONFIG}
334
336
  />
335
- <APIReferenceAIDropdown />
337
+ {ENABLE_CONTEXT_MENU && <AIDropdown />}
336
338
  </div>
337
- <SDKMethod
338
- method={resource.methods[parsed.method]}
339
- transformRequestSnippet={transformRequestSnippet}
340
- />
341
- </div>
342
- ) : (
343
- <div className="stldocs-root stl-ui-not-prose">
344
- <div className="stl-page-nav-container">
345
- <SDKBreadcrumbs
346
- spec={spec as SDKJSON.Spec}
347
- currentPath={currentPath}
348
- basePath={BASE_PATH}
349
- config={BREADCRUMB_CONFIG}
339
+ {kind === 'http_method' ? (
340
+ <SDKMethod
341
+ method={resource.methods[parsed.method!]!}
342
+ transformRequestSnippet={transformRequestSnippet}
350
343
  />
351
- <APIReferenceAIDropdown />
352
- </div>
353
- <SDKOverview resource={resource} />
344
+ ) : (
345
+ <SDKOverview resource={resource} />
346
+ )}
354
347
  </div>
355
- )}
348
+ }
356
349
  </MarkdownProvider>
357
350
  </NavigationProvider>
358
351
  </ComponentProvider>
@@ -366,10 +359,14 @@ export function RenderMethod({ path }: { path: string }) {
366
359
 
367
360
  const parsed = parseStainlessPath(path);
368
361
  const resource = getResourceFromSpec(path, spec);
369
- if (!resource || !parsed) return null;
370
362
 
371
- const meth = resource.methods[parsed.method];
372
- return <SDKMethod method={meth} />;
363
+ if (!resource || !parsed) {
364
+ console.warn(`Could not find resource or parsed path for '${path}'`);
365
+ return null;
366
+ }
367
+
368
+ const method = resource.methods[parsed.method!]!;
369
+ return <SDKMethod method={method} />;
373
370
  }
374
371
 
375
372
  export async function getReadmeContent(spec: SDKJSON.Spec, language: DocsLanguage) {
@@ -58,7 +58,7 @@ function recursiveGetPlaceholderItems(
58
58
  items: PlaceholderItemResult[],
59
59
  ): PlaceholderItemResult[] {
60
60
  for (let i = 0; i < sidebar.length; i++) {
61
- const entry = sidebar[i];
61
+ const entry = sidebar[i]!;
62
62
  if ('attrs' in entry && entry.attrs?.about === INTERNAL_REFERENCE_ENTRY_MARKER) {
63
63
  items.push({
64
64
  index: i,
@@ -15,6 +15,10 @@ export const onRequest = defineRouteMiddleware(async (context) => {
15
15
 
16
16
  const slug = `/${context.locals.starlightRoute.id}`; // same as .slug but not deprecated
17
17
 
18
+ context.locals.starlightRoute._stlStarlight = {
19
+ basePath: BASE_PATH,
20
+ };
21
+
18
22
  const apiReferencePlaceholderItems = getAPIReferencePlaceholderItems(context.locals.starlightRoute.sidebar);
19
23
 
20
24
  const spec = await cmsClient.getSpec();
@@ -1,24 +1,15 @@
1
1
  ---
2
- import StarlightPage from "@astrojs/starlight/components/StarlightPage.astro";
3
- import { cmsClient } from "../cms/client";
4
-
5
- import "@stainless-api/docs-ui/src/styles/resets.css";
6
- import "@stainless-api/docs-ui/src/styles/primitives.css";
7
- import "@stainless-api/docs-ui/src/styles/main.css";
8
- import "@stainless-api/docs-ui/src/styles/snippets.css";
9
- // TODO: fix variables.css import
10
- // import "./variables.css";
11
-
2
+ import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro';
3
+ import { cmsClient } from '../cms/client';
12
4
  import {
13
5
  getReadmeContent,
14
6
  generateDocsRoutes,
15
7
  buildPageNavigation,
16
8
  RenderSpec,
17
9
  astroMarkdownRender,
18
- } from "../react/Routing";
19
- import { getResourceFromSpec } from "@stainless-api/docs-ui/src/utils";
20
- import { BASE_PATH, CONTENT_PANEL_LAYOUT,MIDDLEWARE } from "virtual:stl-starlight-virtual-module";
21
-
10
+ } from '../react/Routing';
11
+ import { getResourceFromSpec } from '@stainless-api/docs-ui/src/utils';
12
+ import { BASE_PATH, CONTENT_PANEL_LAYOUT, MIDDLEWARE } from 'virtual:stl-starlight-virtual-module';
22
13
 
23
14
  const spec = await cmsClient.getSpec();
24
15
  const routes = generateDocsRoutes(spec);
@@ -26,23 +17,23 @@ const routes = generateDocsRoutes(spec);
26
17
  const route = routes.find((r) => r.params.slug === Astro.params.slug);
27
18
 
28
19
  if (!route) {
29
- throw new Error("No such route");
20
+ throw new Error(`Could not find a route for slug '${Astro.params.slug}'`);
30
21
  }
31
22
 
23
+ // PageTitle override will skip rendering the default Starlight title
24
+ Astro.locals._stlStarlightPage = {
25
+ skipRenderingStarlightTitle: route.props.kind === 'readme' ? false : true,
26
+ };
27
+
32
28
  const readmeContent = await getReadmeContent(spec, route.props.language);
33
- const readme =
34
- route.props.kind === "readme"
35
- ? await astroMarkdownRender(readmeContent ?? "")
36
- : null;
29
+ const readme = route.props.kind === 'readme' ? await astroMarkdownRender(readmeContent ?? '') : null;
37
30
 
38
- const resource = route.props.stainlessPath
39
- ? getResourceFromSpec(route.props.stainlessPath, spec)
40
- : null;
31
+ const resource = route.props.stainlessPath ? getResourceFromSpec(route.props.stainlessPath, spec) : null;
41
32
 
42
33
  const pageNav =
43
- route.props.kind === "resource" && resource
34
+ route.props.kind === 'resource' && resource
44
35
  ? buildPageNavigation(resource)
45
- : route.props.kind === "readme" && readme?.metadata
36
+ : route.props.kind === 'readme' && readme?.metadata
46
37
  ? readme?.metadata.headings
47
38
  : [];
48
39
 
@@ -50,38 +41,27 @@ const props = route.props;
50
41
 
51
42
  if (readme) {
52
43
  const repo = spec.metadata?.[props.language]?.code_url;
53
- readme.code = readme.code.replace(
54
- /<a href="(?!(?:https?:\/\/|\/\/))([^"]+)"/g,
55
- `<a href="${repo}/$1"`);
56
- props.title = readme.metadata.headings[0].text ?? "Overview";
44
+ readme.code = readme.code.replace(/<a href="(?!(?:https?:\/\/|\/\/))([^"]+)"/g, `<a href="${repo}/$1"`);
45
+ props.title = readme.metadata.headings[0]!.text ?? 'Overview';
57
46
  }
58
-
59
47
  ---
60
48
 
61
-
62
49
  <StarlightPage
63
50
  headings={pageNav}
64
51
  frontmatter={{
65
52
  title: props?.title,
66
53
  head: [
67
54
  {
68
- tag: "link",
55
+ tag: 'link',
69
56
  attrs: {
70
- rel: "alternate",
71
- type: "text/markdown",
72
- href: `${BASE_PATH}/${Astro.params.slug}.md`
73
- }
74
- }
57
+ rel: 'alternate',
58
+ type: 'text/markdown',
59
+ href: `${BASE_PATH}/${Astro.params.slug}.md`,
60
+ },
61
+ },
75
62
  ],
76
63
  pagefind: false,
77
- tableOfContents: ["resource", "readme"].includes(props.kind)
78
- ? { maxHeadingLevel: 6 }
79
- : false,
80
- // @ts-ignore
81
- stainlessStarlight: {
82
- basePath: BASE_PATH,
83
- ...props,
84
- },
64
+ tableOfContents: ['resource', 'readme'].includes(props.kind) ? { maxHeadingLevel: 6 } : false,
85
65
  }}
86
66
  >
87
67
  {
@@ -97,7 +77,9 @@ if (readme) {
97
77
  transformRequestSnippet={MIDDLEWARE.transformRequestSnippet}
98
78
  />
99
79
 
100
- <style is:inline>
80
+ <style
81
+ is:inline
82
+ set:text={`
101
83
  #stldocs-snippet-title {
102
84
  display: flex;
103
85
  gap: 5px;
@@ -105,61 +87,53 @@ if (readme) {
105
87
 
106
88
  .stldocs-snippet-code:not(.stldocs-snippet-response .stldocs-snippet-code) {
107
89
  padding: 0 !important;
108
-
90
+
109
91
  .astro-code {
110
92
  padding: 1rem;
111
93
  }
112
94
  }
113
95
 
114
-
115
96
  [data-has-sidebar]:not([data-has-toc]) .sl-container {
116
97
  max-width: 1428px;
117
98
  }
118
-
119
- .content-panel:nth-of-type(1) {
120
- display: none;
121
- }
122
- .content-panel:nth-of-type(2) .stl-page-nav-container {
123
- display: none;
124
- }
125
-
126
- .content-panel:nth-of-type(2) .stldocs-root .stl-page-nav-container {
127
- display: flex;
128
- }
129
- </style>
99
+ `}
100
+ />
130
101
  </div>
131
102
  ) : (
132
103
  <>
133
104
  <Fragment set:html={readme?.code} />
134
- <style is:inline>
135
- .sl-markdown-content h1:first-of-type {
136
- display: none;
137
- }
105
+ <style
106
+ is:inline
107
+ set:text={`
108
+ .sl-markdown-content h1:first-of-type {
109
+ display: none;
110
+ }
138
111
 
139
- .sl-markdown-content img {
140
- display: inline-block;
141
- vertical-align: text-bottom;
142
- }
112
+ .sl-markdown-content img {
113
+ display: inline-block;
114
+ vertical-align: text-bottom;
115
+ }
143
116
 
144
- .sl-markdown-content .octicon {
145
- margin-right: 0.2rem;
146
- overflow: visible !important;
147
- -webkit-mask: var(--oct-icon) no-repeat;
148
- mask: var(--oct-icon) no-repeat;
149
- -webkit-mask-size: 100% 100%;
150
- mask-size: 100% 100%;
151
- background-color: currentColor;
152
- color: inherit;
153
- display: inline-block;
154
- vertical-align: text-bottom;
155
- width: 1em;
156
- height: 1em;
157
- }
117
+ .sl-markdown-content .octicon {
118
+ margin-right: 0.2rem;
119
+ overflow: visible !important;
120
+ -webkit-mask: var(--oct-icon) no-repeat;
121
+ mask: var(--oct-icon) no-repeat;
122
+ -webkit-mask-size: 100% 100%;
123
+ mask-size: 100% 100%;
124
+ background-color: currentColor;
125
+ color: inherit;
126
+ display: inline-block;
127
+ vertical-align: text-bottom;
128
+ width: 1em;
129
+ height: 1em;
130
+ }
158
131
 
159
- .sl-markdown-content code {
160
- white-space: pre-wrap;
161
- }
162
- </style>
132
+ .sl-markdown-content code {
133
+ white-space: pre-wrap;
134
+ }
135
+ `}
136
+ />
163
137
  </>
164
138
  )
165
139
  }
@@ -1,24 +1,22 @@
1
1
  ---
2
2
  import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro';
3
- import { BASE_PATH, EXCLUDE_LANGUAGES } from 'virtual:stl-starlight-virtual-module';
3
+ import { EXCLUDE_LANGUAGES } from 'virtual:stl-starlight-virtual-module';
4
4
  import { cmsClient } from '../cms/client';
5
5
  import type { DocsLanguage } from '@stainless-api/docs-ui/src/routing';
6
-
7
- import '@stainless-api/docs-ui/src/styles/resets.css';
8
- import '@stainless-api/docs-ui/src/styles/primitives.css';
9
- import '@stainless-api/docs-ui/src/styles/main.css';
10
- import '@stainless-api/docs-ui/src/styles/snippets.css';
11
- // TODO: fix variables.css import
12
- // import '../components/variables.css';
13
6
  import { RenderLibraries, RenderSpecOverview, type SpecMetadata } from '../react/Routing';
14
7
 
15
8
  const spec = await cmsClient.getSpec();
16
9
 
17
10
  const languages: DocsLanguage[] = spec.docs!.languages ?? ['http'];
18
- const metadata = languages
11
+ const metadata: SpecMetadata = languages
19
12
  .filter((language) => !['http', 'terraform'].includes(language) && spec.metadata[language])
20
13
  .filter((language) => !EXCLUDE_LANGUAGES.includes(language))
21
- .map((language) => [language, spec.metadata[language]]) as SpecMetadata;
14
+ .map<SpecMetadata[number]>((language) => [language, spec.metadata[language]!]);
15
+
16
+ // PageTitle override will skip rendering the default Starlight title
17
+ Astro.locals._stlStarlightPage = {
18
+ hasMarkdownRoute: false,
19
+ };
22
20
  ---
23
21
 
24
22
  <StarlightPage
@@ -26,15 +24,11 @@ const metadata = languages
26
24
  title: 'API Reference',
27
25
  pagefind: false,
28
26
  tableOfContents: false,
29
- stainlessStarlight: {
30
- basePath: BASE_PATH,
31
- language: 'http',
32
- },
33
27
  }}
34
28
  >
35
29
  <h3>Libraries</h3>
36
30
 
37
- <div class="stldocs-root language-blocks stl-ui-not-prose">
31
+ <div class="stldocs-root language-blocks stl-ui-not-prose not-content">
38
32
  <RenderLibraries metadata={metadata} />
39
33
  </div>
40
34
 
@@ -26,7 +26,7 @@ export const GET: APIRoute<RouteProps> = async ({ props }) => {
26
26
  if (props.kind === 'readme') {
27
27
  const readmeContent = await getReadmeContent(spec, props.language);
28
28
  return new Response(readmeContent, {
29
- headers: { 'Content-Type': 'text/markdown' },
29
+ headers: { 'Content-Type': 'text/plain' },
30
30
  });
31
31
  }
32
32
 
@@ -47,11 +47,11 @@ export const GET: APIRoute<RouteProps> = async ({ props }) => {
47
47
  },
48
48
  };
49
49
 
50
- const target = props.kind === 'http_method' && parsed?.method ? resource.methods[parsed.method] : resource;
50
+ const target = props.kind === 'http_method' && parsed?.method ? resource.methods[parsed.method]! : resource;
51
51
  const output = renderMarkdown(env, target);
52
52
 
53
53
  return new Response(output, {
54
- headers: { 'Content-Type': 'text/markdown' },
54
+ headers: { 'Content-Type': 'text/plain' },
55
55
  });
56
56
  };
57
57