@stainless-api/docs-ui 0.1.0-beta.22 → 0.1.0-beta.23

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.
@@ -1,84 +1,86 @@
1
- .stldocs-sidebar {
2
- font-family: var(--stldocs-font);
3
- font-size: var(--stldocs-font-size-body);
1
+ @layer docs-ui {
2
+ .stldocs-sidebar {
3
+ font-family: var(--stldocs-font);
4
+ font-size: var(--stldocs-font-size-body);
4
5
 
5
- a {
6
- text-decoration: none;
7
- color: var(--stldocs-color-text-secondary);
8
- }
6
+ a {
7
+ text-decoration: none;
8
+ color: var(--stldocs-color-text-secondary);
9
+ }
9
10
 
10
- .stldocs-sidebar-resource-title {
11
- padding-bottom: 6px;
12
- }
11
+ .stldocs-sidebar-resource-title {
12
+ padding-bottom: 6px;
13
+ }
13
14
 
14
- .stldocs-sidebar-resource,
15
- .stldocs-sidebar-method {
16
- padding: 6px;
17
- display: flex;
18
- gap: 0.5rem;
15
+ .stldocs-sidebar-resource,
16
+ .stldocs-sidebar-method {
17
+ padding: 6px;
18
+ display: flex;
19
+ gap: 0.5rem;
19
20
 
20
- .stldocs-method-route-httpmethod {
21
- margin-bottom: auto;
22
- }
21
+ .stldocs-method-route-httpmethod {
22
+ margin-bottom: auto;
23
+ }
23
24
 
24
- &[data-selected='true'] {
25
- & > a,
26
- & > details > summary > a {
27
- color: var(--stldocs-color-text);
25
+ &[data-selected='true'] {
26
+ & > a,
27
+ & > details > summary > a {
28
+ color: var(--stldocs-color-text);
29
+ }
28
30
  }
29
31
  }
30
- }
31
32
 
32
- .stldocs-sidebar-resource-title {
33
- display: block;
33
+ .stldocs-sidebar-resource-title {
34
+ display: block;
34
35
 
35
- a {
36
- color: var(--stldocs-color-text);
37
- font-weight: 500;
36
+ a {
37
+ color: var(--stldocs-color-text);
38
+ font-weight: 500;
39
+ }
38
40
  }
39
- }
40
41
 
41
- .stldocs-sidebar-expander {
42
- .stldocs-expander-summary {
43
- cursor: pointer;
44
- display: flex;
42
+ .stldocs-sidebar-expander {
43
+ .stldocs-expander-summary {
44
+ cursor: pointer;
45
+ display: flex;
45
46
 
46
- & > .stldocs-expander-summary-icon {
47
- transform: translateX(-0.5px) translateY(-0.5px);
48
- margin-left: 8px;
47
+ & > .stldocs-expander-summary-icon {
48
+ transform: translateX(-0.5px) translateY(-0.5px);
49
+ margin-left: 8px;
49
50
 
50
- & > .stldocs-icon {
51
- vertical-align: middle;
52
- color: var(--stldocs-color-text-tertiary);
53
- }
51
+ & > .stldocs-icon {
52
+ vertical-align: middle;
53
+ color: var(--stldocs-color-text-tertiary);
54
+ }
54
55
 
55
- & > :last-child {
56
- display: none;
56
+ & > :last-child {
57
+ display: none;
58
+ }
57
59
  }
58
60
  }
59
- }
60
61
 
61
- &[open],
62
- &[data-open='true'] {
63
- & > .stldocs-expander-summary {
64
- .stldocs-type-preview-content {
65
- display: none;
66
- }
67
-
68
- & > .stldocs-expander-summary-icon {
69
- & > :first-child {
62
+ &[open],
63
+ &[data-open='true'] {
64
+ & > .stldocs-expander-summary {
65
+ .stldocs-type-preview-content {
70
66
  display: none;
71
67
  }
72
68
 
73
- & > :last-child {
74
- display: inline;
69
+ & > .stldocs-expander-summary-icon {
70
+ & > :first-child {
71
+ display: none;
72
+ }
73
+
74
+ & > :last-child {
75
+ display: inline;
76
+ }
75
77
  }
76
78
  }
77
- }
78
79
 
79
- & > .stldocs-expander-content {
80
- margin-left: 10px;
81
- line-height: 150%;
80
+ & > .stldocs-expander-content {
81
+ margin-left: 10px;
82
+ line-height: 150%;
83
+ }
82
84
  }
83
85
  }
84
86
  }
@@ -1,77 +1,12 @@
1
- .stldocs-root {
2
- .snippet {
3
- color: #d8d8d8;
4
- --orange: 24 76% 51%;
5
- --teal: 208 100% 66%;
6
- --magenta: 324 54% 48.6%;
7
- --purple: 274 41% 47%;
8
- }
9
-
10
- .hljs-comment,
11
- .hljs-quote {
12
- color: #adadad;
13
- }
14
-
15
- .hljs-doctag,
16
- .hljs-keyword,
17
- .hljs-formula {
18
- color: #fb8f44;
19
- }
20
-
21
- .hljs-section,
22
- .hljs-name,
23
- .hljs-selector-tag,
24
- .hljs-deletion,
25
- .hljs-subst {
26
- color: #f7585c;
27
- }
28
-
29
- .hjs-literal,
30
- .hljs-string,
31
- .hljs-regexp,
32
- .hljs-addition,
33
- .hljs-attribute,
34
- .hljs-meta .hljs-string {
35
- color: #54aeff;
36
- }
37
-
38
- .hljs-attr,
39
- .hljs-variable,
40
- .hljs-template-variable,
41
- .hljs-type,
42
- .hljs-selector-class,
43
- .hljs-selector-attr,
44
- .hljs-selector-pseudo,
45
- .hljs-number {
46
- color: #4ac26b;
47
- }
48
-
49
- .hljs-symbol,
50
- .hljs-bullet,
51
- .hljs-link,
52
- .hljs-meta,
53
- .hljs-selector-id,
54
- .hljs-title,
55
- .hljs-built_in,
56
- .hljs-title.class_,
57
- .hljs-class .hljs-title {
58
- color: #b68eff;
59
- }
60
-
61
- .hljs-emphasis {
62
- font-style: italic;
63
- }
64
-
65
- .hljs-strong {
66
- font-weight: bold;
67
- }
68
-
69
- .hljs-link {
70
- text-decoration: underline;
71
- }
72
-
73
- .snippet-json {
74
- color: #a5a5ac;
1
+ @layer docs-ui {
2
+ .stldocs-root {
3
+ .snippet {
4
+ color: #d8d8d8;
5
+ --orange: 24 76% 51%;
6
+ --teal: 208 100% 66%;
7
+ --magenta: 324 54% 48.6%;
8
+ --purple: 274 41% 47%;
9
+ }
75
10
 
76
11
  .hljs-comment,
77
12
  .hljs-quote {
@@ -80,9 +15,8 @@
80
15
 
81
16
  .hljs-doctag,
82
17
  .hljs-keyword,
83
- .hljs-formula,
84
- .hljs-number {
85
- color: var(--stldocs-syntax-color-orange);
18
+ .hljs-formula {
19
+ color: #fb8f44;
86
20
  }
87
21
 
88
22
  .hljs-section,
@@ -90,7 +24,7 @@
90
24
  .hljs-selector-tag,
91
25
  .hljs-deletion,
92
26
  .hljs-subst {
93
- color: var(--stldocs-syntax-color-red);
27
+ color: #f7585c;
94
28
  }
95
29
 
96
30
  .hjs-literal,
@@ -99,7 +33,7 @@
99
33
  .hljs-addition,
100
34
  .hljs-attribute,
101
35
  .hljs-meta .hljs-string {
102
- color: var(--stldocs-syntax-color-green);
36
+ color: #54aeff;
103
37
  }
104
38
 
105
39
  .hljs-attr,
@@ -108,8 +42,9 @@
108
42
  .hljs-type,
109
43
  .hljs-selector-class,
110
44
  .hljs-selector-attr,
111
- .hljs-selector-pseudo {
112
- color: var(--stldocs-color-text);
45
+ .hljs-selector-pseudo,
46
+ .hljs-number {
47
+ color: #4ac26b;
113
48
  }
114
49
 
115
50
  .hljs-symbol,
@@ -117,14 +52,81 @@
117
52
  .hljs-link,
118
53
  .hljs-meta,
119
54
  .hljs-selector-id,
120
- .hljs-title {
121
- color: var(--stldocs-syntax-color-purple);
122
- }
123
-
55
+ .hljs-title,
124
56
  .hljs-built_in,
125
57
  .hljs-title.class_,
126
58
  .hljs-class .hljs-title {
127
- color: var(--stldocs-syntax-color-blue);
59
+ color: #b68eff;
60
+ }
61
+
62
+ .hljs-emphasis {
63
+ font-style: italic;
64
+ }
65
+
66
+ .hljs-strong {
67
+ font-weight: bold;
68
+ }
69
+
70
+ .hljs-link {
71
+ text-decoration: underline;
72
+ }
73
+
74
+ .snippet-json {
75
+ color: #a5a5ac;
76
+
77
+ .hljs-comment,
78
+ .hljs-quote {
79
+ color: #adadad;
80
+ }
81
+
82
+ .hljs-doctag,
83
+ .hljs-keyword,
84
+ .hljs-formula,
85
+ .hljs-number {
86
+ color: var(--stldocs-syntax-color-orange);
87
+ }
88
+
89
+ .hljs-section,
90
+ .hljs-name,
91
+ .hljs-selector-tag,
92
+ .hljs-deletion,
93
+ .hljs-subst {
94
+ color: var(--stldocs-syntax-color-red);
95
+ }
96
+
97
+ .hjs-literal,
98
+ .hljs-string,
99
+ .hljs-regexp,
100
+ .hljs-addition,
101
+ .hljs-attribute,
102
+ .hljs-meta .hljs-string {
103
+ color: var(--stldocs-syntax-color-green);
104
+ }
105
+
106
+ .hljs-attr,
107
+ .hljs-variable,
108
+ .hljs-template-variable,
109
+ .hljs-type,
110
+ .hljs-selector-class,
111
+ .hljs-selector-attr,
112
+ .hljs-selector-pseudo {
113
+ color: var(--stldocs-color-text);
114
+ }
115
+
116
+ .hljs-symbol,
117
+ .hljs-bullet,
118
+ .hljs-link,
119
+ .hljs-meta,
120
+ .hljs-selector-id,
121
+ .hljs-title {
122
+ color: var(--stldocs-syntax-color-purple);
123
+ }
124
+
125
+ .hljs-built_in,
126
+ .hljs-title.class_,
127
+ .hljs-class .hljs-title {
128
+ color: var(--stldocs-syntax-color-blue);
129
+ }
128
130
  }
129
131
  }
130
132
  }
@@ -1,86 +1,90 @@
1
- :root {
2
- --stldocs-font: 'Geist', system-ui, sans-serif;
3
- --stldocs-font-mono: 'Geist Mono', ui-monospace, monospace;
4
-
5
- --stldocs-color-white: #ffffff;
6
- --stldocs-color-gray-1: #eeeeee;
7
- --stldocs-color-gray-2: #c2c2c2;
8
- --stldocs-color-gray-3: #8b8b8b;
9
- --stldocs-color-gray-4: #52525c;
10
- --stldocs-color-gray-5: #303030;
11
- --stldocs-color-gray-6: #272727;
12
- --stldocs-color-gray-7: #181818;
13
- --stldocs-color-gray-8: #161616;
14
-
15
- --stldocs-color-accent-low: #974703;
16
- --stldocs-color-accent-high: #fdc99c;
17
- --stldocs-color-accent: #f6821e;
18
- --stldocs-color-red: #cf222e;
19
- --stldocs-color-red-low: #351313;
20
-
21
- --stldocs-color-text: var(--stldocs-color-gray-1);
22
- --stldocs-color-text-muted: #6d6d6d;
23
- --stldocs-color-text-mid: var(--stldocs-color-gray-3);
24
- --stldocs-color-text-bright: var(--stldocs-color-gray-1);
25
- --stldocs-color-text-accent: var(--stldocs-color-accent);
26
- --stldocs-color-text-invert: var(--stldocs-color-white);
27
- --stldocs-color-text-secondary: #acacac;
28
- --stldocs-color-text-tertiary: #a3a3a3;
29
-
30
- --stldocs-color-bg: var(--stldocs-color-gray-7);
31
- --stldocs-color-bg-nav: var(--stldocs-color-gray-6);
32
- --stldocs-color-selected: var(--stldocs-color-gray-6);
33
-
34
- --stldocs-color-backdrop-overlay: hsla(225, 9%, 36%, 0.66);
35
-
36
- --stldocs-color-bg-inline-code: #1f1f1f;
37
- --stldocs-color-bg-accent: var(--stldocs-color-accent-high);
38
- --stldocs-color-hairline: var(--stldocs-color-gray-5);
39
- --stldocs-color-hairline-shade: var(--stldocs-color-white);
40
- --stldocs-color-hairline-light: var(--stldocs-color-gray-5);
41
-
42
- --stldocs-color-http-get-bg: #102916;
43
- --stldocs-color-http-get: #4ac26b;
44
-
45
- --stldocs-color-http-put-bg: #341e0e;
46
- --stldocs-color-http-put: #fb8f44;
47
-
48
- --stldocs-color-http-post-bg: #142a3d;
49
- --stldocs-color-http-post: #54aeff;
50
-
51
- --stldocs-color-http-delete-bg: #351313;
52
- --stldocs-color-http-delete: #f8595c;
53
-
54
- --stldocs-font-size-h1: 42px;
55
- --stldocs-font-size-h2: 35px;
56
- --stldocs-font-size-h3: 29px;
57
- --stldocs-font-size-h4: 25px;
58
- --stldocs-font-size-h5: 18px;
59
-
60
- --stldocs-font-size-body: 14px;
61
- --stldocs-font-size-body-xs: 12px;
62
- --stldocs-font-size-small: 13px;
63
- --stldocs-font-size-code: 14px;
64
-
65
- --stldocs-content-width: 720px;
66
- --stldocs-content-padding: 16px;
67
-
68
- --stldocs-syntax-color-red: hsl(356 90.8% 66%);
69
- --stldocs-syntax-color-green: hsl(136.5 49.6% 52.5%);
70
- --stldocs-syntax-color-blue: hsl(208.4 100% 66.5%);
71
- --stldocs-syntax-color-orange: hsl(24.6 96% 62.5%);
72
- --stldocs-syntax-color-teal: hsl(203 100% 85.7%);
73
- --stldocs-syntax-color-magenta: hsl(324 75.5% 63.1%);
74
- --stldocs-syntax-color-purple: hsl(261 92.2% 74.7%);
75
-
76
- --stldocs-color-snippet-box-bg: var(--stldocs-color-gray-6);
77
- --stldocs-color-snippet-title-bg: var(--stldocs-color-gray-8);
78
- --stldocs-color-snippet-title-muted: var(--stldocs-color-gray-3);
79
- --stldocs-color-snippet-title-bright: var(--stldocs-color-white);
80
- --stldocs-color-snippet-code-bg: var(--stldocs-color-gray-7);
81
-
82
- --stldocs-color-backdrop-overlay: var(--stldocs-color-gray-8);
83
- --stldocs-expander-margin-shift: 24px;
84
- --stldocs-expander-right-margin: 8px;
85
- --stldocs-title-padding-y: 2.5rem;
86
- }
1
+ @layer docs-ui {
2
+ :root {
3
+ color-scheme: dark;
4
+
5
+ --stldocs-font: 'Geist', system-ui, sans-serif;
6
+ --stldocs-font-mono: 'Geist Mono', ui-monospace, monospace;
7
+
8
+ --stldocs-color-white: #ffffff;
9
+ --stldocs-color-gray-1: #eeeeee;
10
+ --stldocs-color-gray-2: #c2c2c2;
11
+ --stldocs-color-gray-3: #8b8b8b;
12
+ --stldocs-color-gray-4: #52525c;
13
+ --stldocs-color-gray-5: #303030;
14
+ --stldocs-color-gray-6: #272727;
15
+ --stldocs-color-gray-7: #181818;
16
+ --stldocs-color-gray-8: #161616;
17
+
18
+ --stldocs-color-accent-low: #974703;
19
+ --stldocs-color-accent-high: #fdc99c;
20
+ --stldocs-color-accent: #f6821e;
21
+ --stldocs-color-red: #cf222e;
22
+ --stldocs-color-red-low: #351313;
23
+
24
+ --stldocs-color-text: var(--stldocs-color-gray-1);
25
+ --stldocs-color-text-muted: #6d6d6d;
26
+ --stldocs-color-text-mid: var(--stldocs-color-gray-3);
27
+ --stldocs-color-text-bright: var(--stldocs-color-gray-1);
28
+ --stldocs-color-text-accent: var(--stldocs-color-accent);
29
+ --stldocs-color-text-invert: var(--stldocs-color-white);
30
+ --stldocs-color-text-secondary: #acacac;
31
+ --stldocs-color-text-tertiary: #a3a3a3;
32
+
33
+ --stldocs-color-bg: var(--stldocs-color-gray-7);
34
+ --stldocs-color-bg-nav: var(--stldocs-color-gray-6);
35
+ --stldocs-color-selected: var(--stldocs-color-gray-6);
36
+
37
+ --stldocs-color-backdrop-overlay: hsla(225, 9%, 36%, 0.66);
38
+
39
+ --stldocs-color-bg-inline-code: #1f1f1f;
40
+ --stldocs-color-bg-accent: var(--stldocs-color-accent-high);
41
+ --stldocs-color-hairline: var(--stldocs-color-gray-5);
42
+ --stldocs-color-hairline-shade: var(--stldocs-color-white);
43
+ --stldocs-color-hairline-light: var(--stldocs-color-gray-5);
44
+
45
+ --stldocs-color-http-get-bg: #102916;
46
+ --stldocs-color-http-get: #4ac26b;
47
+
48
+ --stldocs-color-http-put-bg: #341e0e;
49
+ --stldocs-color-http-put: #fb8f44;
50
+
51
+ --stldocs-color-http-post-bg: #142a3d;
52
+ --stldocs-color-http-post: #54aeff;
53
+
54
+ --stldocs-color-http-delete-bg: #351313;
55
+ --stldocs-color-http-delete: #f8595c;
56
+
57
+ --stldocs-font-size-h1: 42px;
58
+ --stldocs-font-size-h2: 35px;
59
+ --stldocs-font-size-h3: 29px;
60
+ --stldocs-font-size-h4: 25px;
61
+ --stldocs-font-size-h5: 18px;
62
+
63
+ --stldocs-font-size-body: 14px;
64
+ --stldocs-font-size-body-xs: 12px;
65
+ --stldocs-font-size-small: 13px;
66
+ --stldocs-font-size-code: 14px;
67
+
68
+ --stldocs-content-width: 720px;
69
+ --stldocs-content-padding: 16px;
70
+
71
+ --stldocs-syntax-color-red: hsl(356 90.8% 66%);
72
+ --stldocs-syntax-color-green: hsl(136.5 49.6% 52.5%);
73
+ --stldocs-syntax-color-blue: hsl(208.4 100% 66.5%);
74
+ --stldocs-syntax-color-orange: hsl(24.6 96% 62.5%);
75
+ --stldocs-syntax-color-teal: hsl(203 100% 85.7%);
76
+ --stldocs-syntax-color-magenta: hsl(324 75.5% 63.1%);
77
+ --stldocs-syntax-color-purple: hsl(261 92.2% 74.7%);
78
+
79
+ --stldocs-color-snippet-box-bg: var(--stldocs-color-gray-6);
80
+ --stldocs-color-snippet-title-bg: var(--stldocs-color-gray-8);
81
+ --stldocs-color-snippet-title-muted: var(--stldocs-color-gray-3);
82
+ --stldocs-color-snippet-title-bright: var(--stldocs-color-white);
83
+ --stldocs-color-snippet-code-bg: var(--stldocs-color-gray-7);
84
+
85
+ --stldocs-color-backdrop-overlay: var(--stldocs-color-gray-8);
86
+ --stldocs-expander-margin-shift: 24px;
87
+ --stldocs-expander-right-margin: 8px;
88
+ --stldocs-title-padding-y: 2.5rem;
89
+ }
90
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stainless-api/docs-ui",
3
3
  "private": false,
4
- "version": "0.1.0-beta.22",
4
+ "version": "0.1.0-beta.23",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -36,8 +36,8 @@
36
36
  "react-dom": "^19.2.0",
37
37
  "tsx": "^4.20.3",
38
38
  "typescript": "5.9.3",
39
- "@stainless/eslint-config": "0.1.0-beta.0",
40
- "@stainless/sdk-json": "^0.1.0-beta.0"
39
+ "@stainless/sdk-json": "^0.1.0-beta.0",
40
+ "@stainless/eslint-config": "0.1.0-beta.0"
41
41
  },
42
42
  "scripts": {
43
43
  "build": "node build.js",
package/src/search/mcp.ts CHANGED
@@ -3,9 +3,10 @@ import { renderMarkdown } from '../markdown';
3
3
  import { DocsLanguage, parseStainlessPath } from '../routing';
4
4
  import { getResourceFromSpec } from '../utils';
5
5
  import { buildIndex, search as fuseSearch } from './providers/fuse';
6
+ import { generateIndex } from './indexer';
6
7
  import type { IndexEntry, IndexMethod } from './types';
7
8
  import natural from 'natural';
8
- import type * as SDKJSON from '@stainless/sdk-json';
9
+ import type * as SDKJSON from '~/lib/json-spec-v2/types';
9
10
 
10
11
  type Item = IndexEntry & IndexMethod;
11
12
 
@@ -20,12 +21,12 @@ export function consolidate(results: IndexEntry[]) {
20
21
  const methods = new Set<string>();
21
22
 
22
23
  for (const entry of results) {
23
- const parsed = parseStainlessPath(entry.stainlessPath)!;
24
- if (parsed.method) methods.add(parsed.routable!);
25
- else resources.add(parsed.routable!);
24
+ const parsed = parseStainlessPath(entry.stainlessPath);
25
+ if (parsed.method) methods.add(parsed.routable);
26
+ else resources.add(parsed.routable);
26
27
  }
27
28
 
28
- const filtered = Array.from(methods).filter((path) => !resources.has(path.split(' >').at(0)!));
29
+ const filtered = Array.from(methods).filter((path) => !resources.has(path.split(' >').at(0)));
29
30
  return [...resources, ...filtered];
30
31
  }
31
32
 
@@ -46,9 +47,9 @@ export function render(
46
47
 
47
48
  const paths = consolidate(items);
48
49
  const output = paths.map((entry) => {
49
- const parsed = parseStainlessPath(entry)!;
50
- const resource = getResourceFromSpec(parsed.resource!, spec)!;
51
- const target = parsed.method ? resource.methods[parsed.method]! : resource;
50
+ const parsed = parseStainlessPath(entry);
51
+ const resource = getResourceFromSpec(parsed.resource, spec);
52
+ const target = parsed.method ? resource.methods[parsed.method] : resource;
52
53
  const content = renderMarkdown(env, target);
53
54
  return [entry, content];
54
55
  });
@@ -151,3 +152,5 @@ function stemText(text: string): string {
151
152
 
152
153
  return stemmedWords.join(' ');
153
154
  }
155
+
156
+ export { generateIndex };