ssh-mcp-pro 1.4.3 → 1.6.0

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 (125) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/MIGRATION.md +1 -1
  3. package/README.md +1 -1
  4. package/dist/agent-bin.js +2 -2
  5. package/dist/agent-bin.js.map +1 -1
  6. package/dist/mcp.d.ts +1 -1
  7. package/dist/mcp.js +1 -1
  8. package/dist/remote/action-record-sanitize.d.ts +4 -0
  9. package/dist/remote/action-record-sanitize.d.ts.map +1 -0
  10. package/dist/remote/action-record-sanitize.js +11 -0
  11. package/dist/remote/action-record-sanitize.js.map +1 -0
  12. package/dist/remote/agent-bounded-io.d.ts +30 -0
  13. package/dist/remote/agent-bounded-io.d.ts.map +1 -0
  14. package/dist/remote/agent-bounded-io.js +135 -0
  15. package/dist/remote/agent-bounded-io.js.map +1 -0
  16. package/dist/remote/agent-browser-enrollment.d.ts +16 -0
  17. package/dist/remote/agent-browser-enrollment.d.ts.map +1 -0
  18. package/dist/remote/agent-browser-enrollment.js +190 -0
  19. package/dist/remote/agent-browser-enrollment.js.map +1 -0
  20. package/dist/remote/agent-cli.d.ts +5 -0
  21. package/dist/remote/agent-cli.d.ts.map +1 -1
  22. package/dist/remote/agent-cli.js +91 -14
  23. package/dist/remote/agent-cli.js.map +1 -1
  24. package/dist/remote/agent-content-search.d.ts +20 -0
  25. package/dist/remote/agent-content-search.d.ts.map +1 -0
  26. package/dist/remote/agent-content-search.js +61 -0
  27. package/dist/remote/agent-content-search.js.map +1 -0
  28. package/dist/remote/agent-enrollment.d.ts +12 -0
  29. package/dist/remote/agent-enrollment.d.ts.map +1 -0
  30. package/dist/remote/agent-enrollment.js +87 -0
  31. package/dist/remote/agent-enrollment.js.map +1 -0
  32. package/dist/remote/agent-executor.d.ts +5 -0
  33. package/dist/remote/agent-executor.d.ts.map +1 -1
  34. package/dist/remote/agent-executor.js +96 -107
  35. package/dist/remote/agent-executor.js.map +1 -1
  36. package/dist/remote/agent-file-search.d.ts +22 -0
  37. package/dist/remote/agent-file-search.d.ts.map +1 -0
  38. package/dist/remote/agent-file-search.js +243 -0
  39. package/dist/remote/agent-file-search.js.map +1 -0
  40. package/dist/remote/agent-managed-process.d.ts +43 -0
  41. package/dist/remote/agent-managed-process.d.ts.map +1 -0
  42. package/dist/remote/agent-managed-process.js +291 -0
  43. package/dist/remote/agent-managed-process.js.map +1 -0
  44. package/dist/remote/control-plane.d.ts +3 -2
  45. package/dist/remote/control-plane.d.ts.map +1 -1
  46. package/dist/remote/control-plane.js +24 -80
  47. package/dist/remote/control-plane.js.map +1 -1
  48. package/dist/remote/dashboard-enrollment-commands.d.ts +8 -0
  49. package/dist/remote/dashboard-enrollment-commands.d.ts.map +1 -0
  50. package/dist/remote/dashboard-enrollment-commands.js +23 -0
  51. package/dist/remote/dashboard-enrollment-commands.js.map +1 -0
  52. package/dist/remote/dashboard-enrollment-feedback-script.d.ts +3 -0
  53. package/dist/remote/dashboard-enrollment-feedback-script.d.ts.map +1 -0
  54. package/dist/remote/dashboard-enrollment-feedback-script.js +227 -0
  55. package/dist/remote/dashboard-enrollment-feedback-script.js.map +1 -0
  56. package/dist/remote/mcp-tools.d.ts +1 -0
  57. package/dist/remote/mcp-tools.d.ts.map +1 -1
  58. package/dist/remote/mcp-tools.js +207 -3
  59. package/dist/remote/mcp-tools.js.map +1 -1
  60. package/dist/remote/oauth-handler.d.ts +5 -0
  61. package/dist/remote/oauth-handler.d.ts.map +1 -1
  62. package/dist/remote/oauth-handler.js +110 -65
  63. package/dist/remote/oauth-handler.js.map +1 -1
  64. package/dist/remote/oauth-provider-exchange.d.ts +11 -0
  65. package/dist/remote/oauth-provider-exchange.d.ts.map +1 -0
  66. package/dist/remote/oauth-provider-exchange.js +73 -0
  67. package/dist/remote/oauth-provider-exchange.js.map +1 -0
  68. package/dist/remote/safe-file.d.ts +19 -1
  69. package/dist/remote/safe-file.d.ts.map +1 -1
  70. package/dist/remote/safe-file.js +77 -3
  71. package/dist/remote/safe-file.js.map +1 -1
  72. package/dist/remote/schemas.d.ts +16 -0
  73. package/dist/remote/schemas.d.ts.map +1 -1
  74. package/dist/remote/schemas.js +1 -0
  75. package/dist/remote/schemas.js.map +1 -1
  76. package/dist/remote/store-schema.d.ts +4 -0
  77. package/dist/remote/store-schema.d.ts.map +1 -0
  78. package/dist/remote/store-schema.js +147 -0
  79. package/dist/remote/store-schema.js.map +1 -0
  80. package/dist/remote/store.d.ts +9 -5
  81. package/dist/remote/store.d.ts.map +1 -1
  82. package/dist/remote/store.js +96 -133
  83. package/dist/remote/store.js.map +1 -1
  84. package/dist/remote/types.d.ts +16 -2
  85. package/dist/remote/types.d.ts.map +1 -1
  86. package/dist/remote/types.js +15 -0
  87. package/dist/remote/types.js.map +1 -1
  88. package/dist/remote/web-dashboard-html.d.ts.map +1 -1
  89. package/dist/remote/web-dashboard-html.js +25 -27
  90. package/dist/remote/web-dashboard-html.js.map +1 -1
  91. package/dist/remote/web-dashboard-oauth-users.d.ts.map +1 -1
  92. package/dist/remote/web-dashboard-oauth-users.js +4 -38
  93. package/dist/remote/web-dashboard-oauth-users.js.map +1 -1
  94. package/dist/remote/web-dashboard-styles.d.ts +1 -1
  95. package/dist/remote/web-dashboard-styles.d.ts.map +1 -1
  96. package/dist/remote/web-dashboard-styles.js +2 -0
  97. package/dist/remote/web-dashboard-styles.js.map +1 -1
  98. package/dist/remote/web-dashboard.d.ts +0 -2
  99. package/dist/remote/web-dashboard.d.ts.map +1 -1
  100. package/dist/remote/web-dashboard.js +12 -20
  101. package/dist/remote/web-dashboard.js.map +1 -1
  102. package/dist/session-auth-config.d.ts +8 -0
  103. package/dist/session-auth-config.d.ts.map +1 -0
  104. package/dist/session-auth-config.js +67 -0
  105. package/dist/session-auth-config.js.map +1 -0
  106. package/dist/session.d.ts +0 -12
  107. package/dist/session.d.ts.map +1 -1
  108. package/dist/session.js +3 -64
  109. package/dist/session.js.map +1 -1
  110. package/dist/types.d.ts +1 -1
  111. package/docs/adding-a-device.md +187 -11
  112. package/docs/api-overview.md +67 -0
  113. package/docs/backup-restore-verification.md +45 -0
  114. package/docs/coolify.md +9 -0
  115. package/docs/development/local-setup.md +1 -1
  116. package/docs/reference/compatibility.md +1 -1
  117. package/docs/security/hosted-data-inventory.md +3 -1
  118. package/docs/theme/favicon.svg +12 -0
  119. package/docs/theme/ssh-docs.css +670 -0
  120. package/docs/theme/ssh-docs.js +58 -0
  121. package/docs/tutorials/getting-started.md +1 -1
  122. package/mcp.json +1 -1
  123. package/package.json +12 -12
  124. package/registry/ssh-mcp-pro/mcp.json +1 -1
  125. package/server.json +3 -3
@@ -0,0 +1,670 @@
1
+ /* SSH MCP Pro documentation skin — TypeDoc 0.28 default theme.
2
+ Keep the upstream renderer/search/navigation and adjust presentation only. */
3
+
4
+ :root {
5
+ --light-color-background: #f5f7fb;
6
+ --light-color-background-secondary: #edf1f8;
7
+ --light-color-background-active: #e0eafe;
8
+ --light-color-accent: #dbe3ef;
9
+ --light-color-text: #18243a;
10
+ --light-color-text-aside: #53627b;
11
+ --light-color-link: #235fd0;
12
+ --light-color-focus-outline: #3d78e6;
13
+ --dark-color-background: #0b1222;
14
+ --dark-color-background-secondary: #121e32;
15
+ --dark-color-background-active: #223656;
16
+ --dark-color-accent: #283b57;
17
+ --dark-color-text: #e9f0fc;
18
+ --dark-color-text-aside: #a4b6d1;
19
+ --dark-color-link: #92bbff;
20
+ --dark-color-focus-outline: #96bdff;
21
+ --docs-surface: #ffffff;
22
+ --docs-surface-alt: #f3f6fc;
23
+ --docs-elevated: #ffffff;
24
+ --docs-line: #dce4f1;
25
+ --docs-ink: #16233b;
26
+ --docs-muted: #53647e;
27
+ --docs-brand: #2a64da;
28
+ --docs-brand-strong: #174cba;
29
+ --docs-brand-tint: #e9f1ff;
30
+ --docs-shadow: 0 14px 45px rgb(32 52 94 / 6%);
31
+ --docs-hero-gradient: linear-gradient(125deg, #0d2150 0%, #174bb4 64%, #326fe1 100%);
32
+ }
33
+
34
+ :root[data-theme="dark"] {
35
+ --docs-surface: #121d30;
36
+ --docs-surface-alt: #17243a;
37
+ --docs-elevated: #17253b;
38
+ --docs-line: #2b405d;
39
+ --docs-ink: #eff5ff;
40
+ --docs-muted: #afc0d9;
41
+ --docs-brand: #9bbdff;
42
+ --docs-brand-strong: #bbd2ff;
43
+ --docs-brand-tint: #1d3150;
44
+ --docs-shadow: 0 16px 50px rgb(0 0 0 / 16%);
45
+ --docs-hero-gradient: linear-gradient(125deg, #112b60 0%, #203f83 63%, #214ea2 100%);
46
+ }
47
+
48
+ @media (prefers-color-scheme: dark) {
49
+ :root:not([data-theme="light"], [data-theme="dark"]) {
50
+ --docs-surface: #121d30;
51
+ --docs-surface-alt: #17243a;
52
+ --docs-elevated: #17253b;
53
+ --docs-line: #2b405d;
54
+ --docs-ink: #eff5ff;
55
+ --docs-muted: #afc0d9;
56
+ --docs-brand: #9bbdff;
57
+ --docs-brand-strong: #bbd2ff;
58
+ --docs-brand-tint: #1d3150;
59
+ --docs-shadow: 0 16px 50px rgb(0 0 0 / 16%);
60
+ --docs-hero-gradient: linear-gradient(125deg, #112b60 0%, #203f83 63%, #214ea2 100%);
61
+ }
62
+ }
63
+
64
+ html {
65
+ scroll-padding-top: 6rem;
66
+ }
67
+ body {
68
+ line-height: 1.62;
69
+ -webkit-font-smoothing: antialiased;
70
+ }
71
+ ::selection {
72
+ background: #92b5fa90;
73
+ }
74
+ :focus-visible {
75
+ outline: 3px solid var(--docs-brand) !important;
76
+ outline-offset: 3px;
77
+ }
78
+
79
+ .container {
80
+ max-width: 1780px;
81
+ padding-inline: clamp(18px, 2.25vw, 38px);
82
+ }
83
+
84
+ /* Branded but unobtrusive global navigation. */
85
+ .tsd-page-toolbar {
86
+ position: sticky;
87
+ top: 0;
88
+ z-index: 1050;
89
+ background: color-mix(in srgb, var(--docs-surface) 93%, transparent);
90
+ border-bottom: 1px solid var(--docs-line);
91
+ backdrop-filter: saturate(150%) blur(15px);
92
+ -webkit-backdrop-filter: saturate(150%) blur(15px);
93
+ }
94
+ .tsd-toolbar-contents {
95
+ min-height: 64px;
96
+ gap: 14px;
97
+ }
98
+ .tsd-toolbar-contents .title {
99
+ font-size: 1.04rem;
100
+ font-weight: 750;
101
+ letter-spacing: -0.025em;
102
+ text-decoration: none;
103
+ color: var(--docs-ink);
104
+ min-width: 0;
105
+ }
106
+ .tsd-toolbar-contents .title:hover {
107
+ color: var(--docs-brand-strong);
108
+ }
109
+ #tsd-toolbar-links {
110
+ display: flex;
111
+ gap: 6px;
112
+ margin-left: auto;
113
+ align-items: center;
114
+ }
115
+ #tsd-toolbar-links a {
116
+ font-size: 0.84rem;
117
+ font-weight: 650;
118
+ padding: 8px 11px;
119
+ border-radius: 10px;
120
+ text-decoration: none;
121
+ color: var(--docs-muted);
122
+ white-space: nowrap;
123
+ }
124
+ #tsd-toolbar-links a:hover {
125
+ color: var(--docs-brand-strong);
126
+ background: var(--docs-brand-tint);
127
+ }
128
+ #tsd-search-trigger,
129
+ .docs-theme-switch {
130
+ display: inline-flex;
131
+ align-items: center;
132
+ justify-content: center;
133
+ width: 39px;
134
+ min-width: 39px;
135
+ height: 39px;
136
+ padding: 0;
137
+ border-radius: 11px;
138
+ border: 1px solid var(--docs-line);
139
+ background: var(--docs-surface);
140
+ color: var(--docs-ink);
141
+ cursor: pointer;
142
+ transition:
143
+ background 0.16s ease,
144
+ border-color 0.16s ease,
145
+ transform 0.16s ease;
146
+ }
147
+ #tsd-search-trigger:hover,
148
+ .docs-theme-switch:hover {
149
+ border-color: var(--docs-brand);
150
+ background: var(--docs-brand-tint);
151
+ }
152
+ .docs-theme-switch .docs-theme-icon {
153
+ font-size: 19px;
154
+ line-height: 1;
155
+ }
156
+ .tsd-toolbar-contents .menu {
157
+ border-radius: 10px;
158
+ }
159
+ #tsd-search {
160
+ border-radius: 16px;
161
+ border: 1px solid var(--docs-line);
162
+ box-shadow: var(--docs-shadow);
163
+ }
164
+
165
+ /* A stable three-column grid. The old fractional layout let long tables
166
+ overflow the content track and visually cover the TOC. */
167
+ .container-main {
168
+ min-width: 0;
169
+ margin-block: 30px 64px;
170
+ }
171
+ .col-content {
172
+ min-width: 0;
173
+ max-width: 100%;
174
+ }
175
+ .col-content > * {
176
+ min-width: 0;
177
+ }
178
+ .tsd-page-title {
179
+ padding: 4px 0 15px;
180
+ }
181
+ .tsd-page-title h1 {
182
+ font-size: clamp(1.6rem, 2vw, 2.25rem);
183
+ font-weight: 770;
184
+ letter-spacing: -0.04em;
185
+ overflow-wrap: anywhere;
186
+ }
187
+ .tsd-breadcrumb {
188
+ font-size: 0.87rem;
189
+ }
190
+ .tsd-breadcrumb a {
191
+ text-decoration: none;
192
+ }
193
+ .tsd-breadcrumb a:hover {
194
+ color: var(--docs-brand-strong);
195
+ text-decoration: underline;
196
+ }
197
+
198
+ @media (min-width: 770px) {
199
+ .container-main {
200
+ gap: clamp(16px, 2vw, 30px);
201
+ }
202
+ .col-content {
203
+ padding: 0;
204
+ }
205
+ }
206
+ @media (min-width: 1200px) {
207
+ .container-main {
208
+ grid-template-columns: minmax(215px, 252px) minmax(0, 1fr) minmax(195px, 230px);
209
+ grid-template-areas: "sidebar content toc";
210
+ align-items: start;
211
+ }
212
+ .col-sidebar {
213
+ display: contents;
214
+ }
215
+ .col-content {
216
+ grid-area: content;
217
+ }
218
+ .site-menu {
219
+ grid-area: sidebar;
220
+ }
221
+ .page-menu {
222
+ grid-area: toc;
223
+ padding: 0;
224
+ }
225
+ .page-menu,
226
+ .site-menu {
227
+ top: 82px;
228
+ max-height: calc(100dvh - 102px);
229
+ overflow: auto;
230
+ overscroll-behavior: contain;
231
+ scrollbar-width: thin;
232
+ }
233
+ }
234
+ @media (min-width: 770px) and (max-width: 1199px) {
235
+ .container-main {
236
+ grid-template-columns: minmax(195px, 235px) minmax(0, 1fr);
237
+ }
238
+ .col-sidebar {
239
+ max-height: calc(100dvh - 100px);
240
+ top: 82px;
241
+ overflow: auto;
242
+ overscroll-behavior: contain;
243
+ scrollbar-width: thin;
244
+ }
245
+ }
246
+ @media (min-width: 770px) {
247
+ .site-menu,
248
+ .page-menu {
249
+ background: var(--docs-surface);
250
+ border: 1px solid var(--docs-line);
251
+ border-radius: 16px;
252
+ padding: 14px 10px;
253
+ box-shadow: var(--docs-shadow);
254
+ }
255
+ .site-menu {
256
+ margin-top: 0;
257
+ }
258
+ }
259
+ .tsd-navigation a,
260
+ .tsd-page-navigation a,
261
+ .tsd-navigation .tsd-accordion-summary {
262
+ border-radius: 9px;
263
+ font-size: 0.89rem;
264
+ line-height: 1.4;
265
+ padding: 7px 9px;
266
+ overflow-wrap: anywhere;
267
+ }
268
+ .tsd-navigation a:hover,
269
+ .tsd-page-navigation a:hover {
270
+ background: var(--docs-brand-tint);
271
+ color: var(--docs-brand-strong);
272
+ text-decoration: none;
273
+ }
274
+ .tsd-navigation a.current,
275
+ .tsd-page-navigation a.current {
276
+ background: var(--docs-brand-tint);
277
+ color: var(--docs-brand-strong);
278
+ font-weight: 650;
279
+ }
280
+ .tsd-page-navigation .tsd-accordion-details {
281
+ display: flex;
282
+ flex-direction: column;
283
+ gap: 2px;
284
+ }
285
+ .tsd-navigation h3,
286
+ .tsd-page-navigation h3 {
287
+ font-size: 0.89rem;
288
+ font-weight: 730;
289
+ letter-spacing: -0.015em;
290
+ }
291
+ .tsd-navigation.settings {
292
+ margin-bottom: 8px;
293
+ }
294
+ .tsd-filter-visibility,
295
+ .tsd-theme-toggle {
296
+ font-size: 0.85rem;
297
+ }
298
+
299
+ /* Surfaces and readable API signatures. */
300
+ .tsd-panel,
301
+ .tsd-signature,
302
+ .tsd-index-panel {
303
+ max-width: 100%;
304
+ min-width: 0;
305
+ overflow-wrap: anywhere;
306
+ }
307
+ .tsd-panel.tsd-typography {
308
+ background: var(--docs-surface);
309
+ border: 1px solid var(--docs-line);
310
+ border-radius: 18px;
311
+ box-shadow: var(--docs-shadow);
312
+ padding: clamp(17px, 2.5vw, 34px);
313
+ }
314
+ .tsd-panel.tsd-typography > :first-child {
315
+ margin-top: 0;
316
+ }
317
+ .tsd-panel.tsd-typography > :last-child {
318
+ margin-bottom: 0;
319
+ }
320
+ .tsd-typography {
321
+ font-size: 0.965rem;
322
+ color: var(--docs-ink);
323
+ }
324
+ .tsd-typography p,
325
+ .tsd-typography li {
326
+ line-height: 1.72;
327
+ }
328
+ .tsd-typography h2,
329
+ .tsd-typography h3 {
330
+ letter-spacing: -0.025em;
331
+ }
332
+ .tsd-typography h2 {
333
+ font-size: 1.45rem;
334
+ margin-top: 1.9em;
335
+ }
336
+ .tsd-typography a {
337
+ color: var(--docs-brand-strong);
338
+ text-underline-offset: 3px;
339
+ }
340
+ .tsd-signature {
341
+ white-space: normal;
342
+ overflow-wrap: anywhere;
343
+ }
344
+ .tsd-signatures,
345
+ .tsd-member,
346
+ .tsd-index-panel {
347
+ min-width: 0;
348
+ }
349
+ .tsd-member .tsd-signature {
350
+ line-height: 1.65;
351
+ }
352
+ .tsd-panel-group {
353
+ min-width: 0;
354
+ }
355
+ .tsd-panel-group h2 {
356
+ letter-spacing: -0.035em;
357
+ }
358
+
359
+ /* Long API property/configuration tables never enter the TOC column. */
360
+ .tsd-typography table {
361
+ display: block;
362
+ width: 100%;
363
+ max-width: 100%;
364
+ overflow-x: auto;
365
+ overflow-y: hidden;
366
+ border: 1px solid var(--docs-line);
367
+ border-radius: 12px;
368
+ scrollbar-width: thin;
369
+ background: var(--docs-surface);
370
+ margin: 1.3rem 0 1.6rem;
371
+ }
372
+ .tsd-typography th,
373
+ .tsd-typography td {
374
+ padding: 11px 15px;
375
+ border: 0;
376
+ border-bottom: 1px solid var(--docs-line);
377
+ vertical-align: top;
378
+ min-width: 110px;
379
+ overflow-wrap: anywhere;
380
+ word-break: normal;
381
+ font-size: 0.875rem;
382
+ }
383
+ .tsd-typography th {
384
+ text-align: left;
385
+ font-size: 0.78rem;
386
+ letter-spacing: 0.02em;
387
+ font-weight: 750;
388
+ color: var(--docs-muted);
389
+ }
390
+ .tsd-typography tbody tr:last-child td {
391
+ border-bottom: 0;
392
+ }
393
+ .tsd-typography thead,
394
+ .tsd-typography tbody tr:nth-child(even) {
395
+ background: var(--docs-surface-alt);
396
+ }
397
+ .tsd-typography tbody tr:hover {
398
+ background: var(--docs-brand-tint);
399
+ }
400
+ .tsd-typography table code,
401
+ .tsd-typography td code {
402
+ white-space: normal;
403
+ overflow-wrap: anywhere;
404
+ }
405
+ .tsd-typography pre {
406
+ max-width: 100%;
407
+ overflow-x: auto;
408
+ border-radius: 13px;
409
+ border: 1px solid var(--docs-line);
410
+ background: var(--docs-surface-alt);
411
+ padding: 15px;
412
+ scrollbar-width: thin;
413
+ }
414
+ .tsd-typography code:not(pre code) {
415
+ background: var(--docs-surface-alt);
416
+ border: 1px solid var(--docs-line);
417
+ padding: 0.1em 0.35em;
418
+ border-radius: 6px;
419
+ font-size: 0.87em;
420
+ }
421
+ .tsd-typography pre code {
422
+ overflow-wrap: normal;
423
+ }
424
+ .tsd-typography img {
425
+ max-width: 100%;
426
+ height: auto;
427
+ }
428
+ .tsd-typography blockquote {
429
+ border-left: 3px solid var(--docs-brand);
430
+ background: var(--docs-surface-alt);
431
+ margin-left: 0;
432
+ padding: 13px 18px;
433
+ border-radius: 0 12px 12px 0;
434
+ }
435
+ footer {
436
+ border-top: 1px solid var(--docs-line);
437
+ color: var(--docs-muted);
438
+ font-size: 0.8rem;
439
+ }
440
+
441
+ /* A focused, action-first overview for humans arriving at the API root. */
442
+ .docs-hero {
443
+ position: relative;
444
+ overflow: hidden;
445
+ border-radius: 18px;
446
+ background: var(--docs-hero-gradient);
447
+ padding: clamp(24px, 4vw, 52px);
448
+ color: #fff;
449
+ margin-bottom: 20px;
450
+ }
451
+ .docs-hero::after {
452
+ content: "";
453
+ position: absolute;
454
+ width: 320px;
455
+ height: 320px;
456
+ border-radius: 50%;
457
+ right: -125px;
458
+ top: -200px;
459
+ background: rgb(255 255 255 / 8%);
460
+ pointer-events: none;
461
+ }
462
+ .docs-hero h2 {
463
+ color: #fff;
464
+ font-weight: 790;
465
+ font-size: clamp(2rem, 3.3vw, 3.1rem);
466
+ line-height: 1.12;
467
+ max-width: 17ch;
468
+ margin: 17px 0 16px;
469
+ letter-spacing: -0.055em;
470
+ }
471
+ .docs-hero p {
472
+ font-size: clamp(1rem, 1.3vw, 1.1rem);
473
+ color: #dce8ff;
474
+ max-width: 54ch;
475
+ margin: 0;
476
+ }
477
+ .docs-kicker {
478
+ display: inline-block;
479
+ border: 1px solid rgb(255 255 255 / 25%);
480
+ border-radius: 100px;
481
+ background: rgb(255 255 255 / 11%);
482
+ color: #eaf1ff;
483
+ padding: 6px 12px;
484
+ font-size: 0.72rem;
485
+ letter-spacing: 0.11em;
486
+ text-transform: uppercase;
487
+ font-weight: 760;
488
+ }
489
+ .docs-hero-actions {
490
+ display: flex;
491
+ flex-wrap: wrap;
492
+ align-items: center;
493
+ gap: 12px;
494
+ margin-top: 28px;
495
+ }
496
+ .docs-hero-actions a {
497
+ display: inline-flex;
498
+ align-items: center;
499
+ justify-content: center;
500
+ min-height: 44px;
501
+ border-radius: 11px;
502
+ padding: 10px 18px;
503
+ background: #fff;
504
+ color: #153f93 !important;
505
+ font-weight: 750;
506
+ text-decoration: none;
507
+ font-size: 0.9rem;
508
+ }
509
+ .docs-hero-actions a:hover {
510
+ background: #eaf2ff;
511
+ }
512
+ .docs-hero-actions a.docs-action-quiet {
513
+ background: rgb(255 255 255 / 10%);
514
+ border: 1px solid rgb(255 255 255 / 30%);
515
+ color: #fff !important;
516
+ }
517
+ .docs-hero-actions a.docs-action-quiet:hover {
518
+ background: rgb(255 255 255 / 20%);
519
+ }
520
+ .docs-tiles {
521
+ display: grid;
522
+ grid-template-columns: repeat(2, minmax(0, 1fr));
523
+ gap: 12px;
524
+ margin: 18px 0 26px;
525
+ }
526
+ .docs-tile {
527
+ display: flex;
528
+ flex-direction: column;
529
+ gap: 8px;
530
+ min-width: 0;
531
+ padding: 20px;
532
+ border-radius: 14px;
533
+ border: 1px solid var(--docs-line);
534
+ background: var(--docs-surface);
535
+ text-decoration: none !important;
536
+ transition:
537
+ transform 0.18s ease,
538
+ border-color 0.18s ease,
539
+ box-shadow 0.18s ease;
540
+ }
541
+ .docs-tile:hover {
542
+ border-color: var(--docs-brand);
543
+ box-shadow: var(--docs-shadow);
544
+ transform: translateY(-2px);
545
+ }
546
+ .docs-tile-title {
547
+ color: var(--docs-ink);
548
+ font-weight: 760;
549
+ font-size: 0.99rem;
550
+ line-height: 1.3;
551
+ }
552
+ .docs-tile-desc {
553
+ color: var(--docs-muted);
554
+ font-size: 0.85rem;
555
+ line-height: 1.55;
556
+ }
557
+ .docs-pill {
558
+ display: inline-block;
559
+ background: var(--docs-brand-tint);
560
+ color: var(--docs-brand-strong);
561
+ font-size: 0.68rem;
562
+ font-weight: 760;
563
+ letter-spacing: 0.065em;
564
+ text-transform: uppercase;
565
+ border-radius: 7px;
566
+ padding: 3px 8px;
567
+ width: max-content;
568
+ }
569
+
570
+ @media (max-width: 769px) {
571
+ .container {
572
+ padding-inline: 16px;
573
+ }
574
+ .container-main {
575
+ margin-block: 20px 40px;
576
+ }
577
+ .tsd-toolbar-contents {
578
+ min-height: 58px;
579
+ gap: 7px;
580
+ }
581
+ .tsd-toolbar-contents .title {
582
+ font-size: 0.88rem;
583
+ }
584
+ #tsd-toolbar-links {
585
+ display: none;
586
+ }
587
+ .docs-theme-switch,
588
+ #tsd-search-trigger {
589
+ width: 36px;
590
+ height: 36px;
591
+ min-width: 36px;
592
+ }
593
+ .tsd-page-title {
594
+ padding-top: 10px;
595
+ }
596
+ .tsd-panel.tsd-typography {
597
+ padding: 18px 15px;
598
+ }
599
+ .docs-hero {
600
+ padding: 24px 18px;
601
+ }
602
+ .docs-hero h2 {
603
+ font-size: 2rem;
604
+ }
605
+ .docs-hero-actions a {
606
+ width: 100%;
607
+ box-sizing: border-box;
608
+ }
609
+ .docs-tiles {
610
+ grid-template-columns: minmax(0, 1fr);
611
+ }
612
+ .tsd-typography th,
613
+ .tsd-typography td {
614
+ padding: 8px 11px;
615
+ }
616
+ }
617
+ @media (prefers-reduced-motion: reduce) {
618
+ .docs-tile,
619
+ .docs-theme-switch,
620
+ #tsd-search-trigger {
621
+ transition: none !important;
622
+ }
623
+ }
624
+
625
+ /* Module-level groups need the same visual hierarchy as the overview. */
626
+ .col-content > .tsd-panel-group {
627
+ padding: 14px clamp(16px, 2vw, 26px);
628
+ margin-bottom: 18px;
629
+ border: 1px solid var(--docs-line);
630
+ border-radius: 16px;
631
+ background: var(--docs-surface);
632
+ box-shadow: var(--docs-shadow);
633
+ }
634
+ .col-content > .tsd-panel-group > summary {
635
+ padding: 3px 0;
636
+ }
637
+ .tsd-member-summaries {
638
+ margin-bottom: 0;
639
+ }
640
+ .tsd-member-summary {
641
+ padding: 8px 4px;
642
+ }
643
+ .tsd-member-summary + .tsd-member-summary {
644
+ border-top: 1px solid var(--docs-line);
645
+ }
646
+ .tsd-signature,
647
+ .tsd-signatures {
648
+ overflow-wrap: anywhere;
649
+ }
650
+ @media (max-width: 769px) {
651
+ .col-content > .tsd-panel-group {
652
+ padding: 12px 14px;
653
+ }
654
+ }
655
+
656
+ /* Long TypeScript symbol names must wrap at narrow widths, not widen the viewport. */
657
+ .tsd-member-summary-name {
658
+ display: inline-flex;
659
+ align-items: flex-start;
660
+ max-width: 100%;
661
+ min-width: 0;
662
+ }
663
+ .tsd-member-summary-name a {
664
+ min-width: 0;
665
+ overflow-wrap: anywhere;
666
+ word-break: break-word;
667
+ }
668
+ .tsd-member-summary-name .tsd-kind-icon {
669
+ flex-shrink: 0;
670
+ }
@@ -0,0 +1,58 @@
1
+ /* Small, accessible theme shortcut. TypeDoc owns the actual theme setting. */
2
+ (() => {
3
+ "use strict";
4
+ const THEME_KEY = "tsd-theme";
5
+
6
+ function init() {
7
+ const toolbar = document.querySelector(".tsd-toolbar-contents");
8
+ const existingTheme = document.getElementById("tsd-theme");
9
+ const search = document.getElementById("tsd-search-trigger");
10
+ if (!toolbar || !existingTheme || !search || document.getElementById("docs-theme-switch"))
11
+ return;
12
+
13
+ const button = document.createElement("button");
14
+ button.type = "button";
15
+ button.id = "docs-theme-switch";
16
+ button.className = "docs-theme-switch";
17
+ button.title = "Toggle light and dark theme";
18
+ button.setAttribute("aria-label", "Switch to dark theme");
19
+
20
+ const icon = document.createElement("span");
21
+ icon.className = "docs-theme-icon";
22
+ icon.setAttribute("aria-hidden", "true");
23
+ button.appendChild(icon);
24
+ search.before(button);
25
+
26
+ const prefersDark = window.matchMedia("(prefers-color-scheme: dark)");
27
+ const activeTheme = () => {
28
+ const current = document.documentElement.dataset.theme;
29
+ return current === "dark" || (current !== "light" && prefersDark.matches) ? "dark" : "light";
30
+ };
31
+ const update = () => {
32
+ const dark = activeTheme() === "dark";
33
+ icon.textContent = dark ? "☀" : "☾";
34
+ button.setAttribute("aria-label", dark ? "Switch to light theme" : "Switch to dark theme");
35
+ button.title = dark ? "Use light theme" : "Use dark theme";
36
+ button.setAttribute("aria-pressed", String(dark));
37
+ };
38
+ button.addEventListener("click", () => {
39
+ const next = activeTheme() === "dark" ? "light" : "dark";
40
+ document.documentElement.dataset.theme = next;
41
+ try {
42
+ window.localStorage.setItem(THEME_KEY, next);
43
+ } catch {
44
+ /* Private browsing. */
45
+ }
46
+ existingTheme.value = next;
47
+ existingTheme.dispatchEvent(new Event("change", { bubbles: true }));
48
+ update();
49
+ });
50
+ existingTheme.addEventListener("change", update);
51
+ prefersDark.addEventListener?.("change", update);
52
+ update();
53
+ }
54
+
55
+ if (document.readyState === "loading")
56
+ document.addEventListener("DOMContentLoaded", init, { once: true });
57
+ else init();
58
+ })();