rclnodejs 1.8.3 → 1.9.0-alpha.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 (85) hide show
  1. package/README.md +46 -37
  2. package/index.js +29 -0
  3. package/lib/action/client.js +61 -3
  4. package/lib/message_info.js +94 -0
  5. package/lib/node.js +53 -3
  6. package/lib/parameter_event_handler.js +468 -0
  7. package/lib/parameter_watcher.js +12 -12
  8. package/lib/subscription.js +38 -5
  9. package/lib/timer.js +2 -1
  10. package/lib/wait_for_message.js +111 -0
  11. package/package.json +6 -3
  12. package/prebuilds/linux-arm64/humble-jammy-arm64-rclnodejs.node +0 -0
  13. package/prebuilds/linux-arm64/jazzy-noble-arm64-rclnodejs.node +0 -0
  14. package/prebuilds/linux-arm64/kilted-noble-arm64-rclnodejs.node +0 -0
  15. package/prebuilds/linux-x64/humble-jammy-x64-rclnodejs.node +0 -0
  16. package/prebuilds/linux-x64/jazzy-noble-x64-rclnodejs.node +0 -0
  17. package/prebuilds/linux-x64/kilted-noble-x64-rclnodejs.node +0 -0
  18. package/scripts/run_asan_test.sh +118 -0
  19. package/src/executor.cpp +36 -2
  20. package/src/executor.h +11 -0
  21. package/src/rcl_action_client_bindings.cpp +70 -1
  22. package/src/rcl_context_bindings.cpp +3 -3
  23. package/src/rcl_graph_bindings.cpp +2 -2
  24. package/src/rcl_subscription_bindings.cpp +70 -2
  25. package/src/rcl_utilities.cpp +2 -2
  26. package/tools/jsdoc/Makefile +5 -0
  27. package/tools/jsdoc/README.md +96 -0
  28. package/tools/jsdoc/build-index.js +610 -0
  29. package/tools/jsdoc/publish.js +854 -0
  30. package/tools/jsdoc/regenerate-published-docs.js +605 -0
  31. package/tools/jsdoc/static/fonts/OpenSans-Bold-webfont.eot +0 -0
  32. package/tools/jsdoc/static/fonts/OpenSans-Bold-webfont.svg +1830 -0
  33. package/tools/jsdoc/static/fonts/OpenSans-Bold-webfont.woff +0 -0
  34. package/tools/jsdoc/static/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  35. package/tools/jsdoc/static/fonts/OpenSans-BoldItalic-webfont.svg +1830 -0
  36. package/tools/jsdoc/static/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  37. package/tools/jsdoc/static/fonts/OpenSans-Italic-webfont.eot +0 -0
  38. package/tools/jsdoc/static/fonts/OpenSans-Italic-webfont.svg +1830 -0
  39. package/tools/jsdoc/static/fonts/OpenSans-Italic-webfont.woff +0 -0
  40. package/tools/jsdoc/static/fonts/OpenSans-Light-webfont.eot +0 -0
  41. package/tools/jsdoc/static/fonts/OpenSans-Light-webfont.svg +1831 -0
  42. package/tools/jsdoc/static/fonts/OpenSans-Light-webfont.woff +0 -0
  43. package/tools/jsdoc/static/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  44. package/tools/jsdoc/static/fonts/OpenSans-LightItalic-webfont.svg +1835 -0
  45. package/tools/jsdoc/static/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  46. package/tools/jsdoc/static/fonts/OpenSans-Regular-webfont.eot +0 -0
  47. package/tools/jsdoc/static/fonts/OpenSans-Regular-webfont.svg +1831 -0
  48. package/tools/jsdoc/static/fonts/OpenSans-Regular-webfont.woff +0 -0
  49. package/tools/jsdoc/static/scripts/linenumber.js +25 -0
  50. package/tools/jsdoc/static/scripts/prettify/Apache-License-2.0.txt +202 -0
  51. package/tools/jsdoc/static/scripts/prettify/lang-css.js +36 -0
  52. package/tools/jsdoc/static/scripts/prettify/prettify.js +738 -0
  53. package/tools/jsdoc/static/styles/jsdoc-default.css +1012 -0
  54. package/tools/jsdoc/static/styles/prettify-jsdoc.css +111 -0
  55. package/tools/jsdoc/static/styles/prettify-tomorrow.css +132 -0
  56. package/tools/jsdoc/tmpl/augments.tmpl +10 -0
  57. package/tools/jsdoc/tmpl/container.tmpl +193 -0
  58. package/tools/jsdoc/tmpl/details.tmpl +143 -0
  59. package/tools/jsdoc/tmpl/example.tmpl +2 -0
  60. package/tools/jsdoc/tmpl/examples.tmpl +13 -0
  61. package/tools/jsdoc/tmpl/exceptions.tmpl +17 -0
  62. package/tools/jsdoc/tmpl/layout.tmpl +83 -0
  63. package/tools/jsdoc/tmpl/mainpage.tmpl +163 -0
  64. package/tools/jsdoc/tmpl/members.tmpl +43 -0
  65. package/tools/jsdoc/tmpl/method.tmpl +124 -0
  66. package/tools/jsdoc/tmpl/params.tmpl +133 -0
  67. package/tools/jsdoc/tmpl/properties.tmpl +110 -0
  68. package/tools/jsdoc/tmpl/returns.tmpl +12 -0
  69. package/tools/jsdoc/tmpl/source.tmpl +8 -0
  70. package/tools/jsdoc/tmpl/tutorial.tmpl +19 -0
  71. package/tools/jsdoc/tmpl/type.tmpl +7 -0
  72. package/types/action_client.d.ts +8 -0
  73. package/types/index.d.ts +34 -0
  74. package/types/message_info.d.ts +72 -0
  75. package/types/node.d.ts +21 -0
  76. package/types/parameter_event_handler.d.ts +139 -0
  77. package/types/subscription.d.ts +14 -2
  78. package/test_data_integrity.js +0 -108
  79. package/test_repro_exact.js +0 -57
  80. package/test_repro_hz.js +0 -86
  81. package/test_repro_pub.js +0 -36
  82. package/test_repro_stress.js +0 -83
  83. package/test_repro_sub.js +0 -64
  84. package/test_xproc_data.js +0 -64
  85. package/types/interfaces.d.ts +0 -8895
@@ -0,0 +1,1012 @@
1
+ :root {
2
+ --bg: #f3f7fb;
3
+ --bg-deep: #dfeaf4;
4
+ --surface: rgba(255, 255, 255, 0.82);
5
+ --surface-strong: rgba(255, 255, 255, 0.96);
6
+ --surface-muted: rgba(233, 241, 248, 0.8);
7
+ --border: rgba(28, 53, 77, 0.12);
8
+ --border-strong: rgba(28, 53, 77, 0.2);
9
+ --text: #12263a;
10
+ --text-soft: #486277;
11
+ --text-muted: #667f92;
12
+ --accent: #0b84c9;
13
+ --accent-strong: #08679b;
14
+ --accent-soft: rgba(11, 132, 201, 0.12);
15
+ --success-soft: rgba(0, 128, 106, 0.12);
16
+ --shadow-lg: 0 24px 60px rgba(14, 31, 53, 0.14);
17
+ --shadow-md: 0 12px 30px rgba(14, 31, 53, 0.1);
18
+ --radius-xl: 28px;
19
+ --radius-lg: 20px;
20
+ --radius-md: 14px;
21
+ --sidebar-width: 320px;
22
+ }
23
+
24
+ @font-face {
25
+ font-family: 'Open Sans';
26
+ font-weight: 400;
27
+ font-style: normal;
28
+ src: url('../fonts/OpenSans-Regular-webfont.eot');
29
+ src:
30
+ local('Open Sans'),
31
+ local('OpenSans'),
32
+ url('../fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'),
33
+ url('../fonts/OpenSans-Regular-webfont.woff') format('woff'),
34
+ url('../fonts/OpenSans-Regular-webfont.svg#open_sansregular') format('svg');
35
+ }
36
+
37
+ @font-face {
38
+ font-family: 'Open Sans';
39
+ font-weight: 700;
40
+ font-style: normal;
41
+ src: url('../fonts/OpenSans-Bold-webfont.eot');
42
+ src:
43
+ local('Open Sans Bold'),
44
+ local('OpenSans-Bold'),
45
+ url('../fonts/OpenSans-Bold-webfont.eot?#iefix') format('embedded-opentype'),
46
+ url('../fonts/OpenSans-Bold-webfont.woff') format('woff'),
47
+ url('../fonts/OpenSans-Bold-webfont.svg#open_sansbold') format('svg');
48
+ }
49
+
50
+ @font-face {
51
+ font-family: 'Open Sans Light';
52
+ font-weight: 300;
53
+ font-style: normal;
54
+ src: url('../fonts/OpenSans-Light-webfont.eot');
55
+ src:
56
+ local('Open Sans Light'),
57
+ local('OpenSans Light'),
58
+ url('../fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'),
59
+ url('../fonts/OpenSans-Light-webfont.woff') format('woff'),
60
+ url('../fonts/OpenSans-Light-webfont.svg#open_sanslight') format('svg');
61
+ }
62
+
63
+ html {
64
+ overflow-y: auto;
65
+ background: linear-gradient(180deg, #eff5fa 0%, #f7fbff 100%);
66
+ font-size: 15px;
67
+ scroll-behavior: smooth;
68
+ }
69
+
70
+ body {
71
+ margin: 0;
72
+ font-family: 'Open Sans', 'Segoe UI', sans-serif;
73
+ line-height: 1.65;
74
+ color: var(--text);
75
+ background: transparent;
76
+ }
77
+
78
+ a,
79
+ a:visited,
80
+ a:active {
81
+ color: var(--accent-strong);
82
+ text-decoration: none;
83
+ }
84
+
85
+ a:hover {
86
+ color: var(--accent);
87
+ }
88
+
89
+ tt,
90
+ code,
91
+ kbd,
92
+ samp,
93
+ .name,
94
+ .signature {
95
+ font-family: 'SFMono-Regular', 'Cascadia Code', 'Fira Code', Consolas, monospace;
96
+ }
97
+
98
+ .site-backdrop {
99
+ position: fixed;
100
+ inset: 0;
101
+ background:
102
+ radial-gradient(circle at top left, rgba(11, 132, 201, 0.18), transparent 32%),
103
+ radial-gradient(circle at right 10%, rgba(0, 128, 106, 0.12), transparent 24%),
104
+ linear-gradient(180deg, rgba(255, 255, 255, 0.6), rgba(243, 247, 251, 0.95));
105
+ pointer-events: none;
106
+ z-index: -2;
107
+ }
108
+
109
+ .site-grid {
110
+ position: fixed;
111
+ inset: 0;
112
+ background-image:
113
+ linear-gradient(rgba(18, 38, 58, 0.03) 1px, transparent 1px),
114
+ linear-gradient(90deg, rgba(18, 38, 58, 0.03) 1px, transparent 1px);
115
+ background-size: 32px 32px;
116
+ mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.28), transparent 75%);
117
+ pointer-events: none;
118
+ z-index: -1;
119
+ }
120
+
121
+ .app-shell {
122
+ display: grid;
123
+ grid-template-columns: minmax(260px, var(--sidebar-width)) minmax(0, 1fr);
124
+ gap: 28px;
125
+ max-width: 1680px;
126
+ margin: 0 auto;
127
+ padding: 24px;
128
+ box-sizing: border-box;
129
+ }
130
+
131
+ .site-sidebar {
132
+ position: sticky;
133
+ top: 24px;
134
+ height: calc(100vh - 48px);
135
+ display: flex;
136
+ flex-direction: column;
137
+ gap: 18px;
138
+ }
139
+
140
+ .brand-card,
141
+ .site-nav,
142
+ .site-header,
143
+ .doc-section,
144
+ .hero-card,
145
+ .prose-card,
146
+ .symbol-card,
147
+ .site-footer {
148
+ backdrop-filter: blur(18px);
149
+ -webkit-backdrop-filter: blur(18px);
150
+ }
151
+
152
+ .brand-card,
153
+ .site-nav {
154
+ background: var(--surface);
155
+ border: 1px solid var(--border);
156
+ border-radius: var(--radius-xl);
157
+ box-shadow: var(--shadow-md);
158
+ }
159
+
160
+ .brand-card {
161
+ padding: 24px;
162
+ }
163
+
164
+ .brand-link {
165
+ display: flex;
166
+ flex-direction: column;
167
+ gap: 6px;
168
+ color: var(--text);
169
+ }
170
+
171
+ .brand-kicker,
172
+ .page-eyebrow,
173
+ .hero-kicker,
174
+ .section-kicker,
175
+ .doc-kind-label,
176
+ .symbol-kind {
177
+ text-transform: uppercase;
178
+ letter-spacing: 0.18em;
179
+ font-size: 0.74rem;
180
+ font-weight: 700;
181
+ }
182
+
183
+ .brand-kicker,
184
+ .page-eyebrow,
185
+ .hero-kicker,
186
+ .section-kicker,
187
+ .doc-kind-label {
188
+ color: var(--accent-strong);
189
+ }
190
+
191
+ .brand-title {
192
+ font-family: 'Open Sans Light', 'Open Sans', sans-serif;
193
+ font-size: 2rem;
194
+ line-height: 1;
195
+ letter-spacing: -0.06em;
196
+ }
197
+
198
+ .brand-version {
199
+ width: fit-content;
200
+ padding: 0.35rem 0.7rem;
201
+ border-radius: 999px;
202
+ background: var(--accent-soft);
203
+ color: var(--accent-strong);
204
+ font-size: 0.82rem;
205
+ font-weight: 700;
206
+ }
207
+
208
+ .brand-description,
209
+ .page-subtitle {
210
+ margin: 0;
211
+ color: var(--text-soft);
212
+ }
213
+
214
+ .nav-toggle {
215
+ display: none;
216
+ border: 0;
217
+ border-radius: 14px;
218
+ padding: 0.95rem 1rem;
219
+ background: var(--text);
220
+ color: #fff;
221
+ font: inherit;
222
+ font-weight: 700;
223
+ box-shadow: var(--shadow-md);
224
+ }
225
+
226
+ .site-nav {
227
+ flex: 1;
228
+ overflow: auto;
229
+ padding: 18px;
230
+ }
231
+
232
+ .nav-home {
233
+ margin-bottom: 16px;
234
+ }
235
+
236
+ .nav-home a {
237
+ display: block;
238
+ padding: 0.95rem 1rem;
239
+ border-radius: 16px;
240
+ background: linear-gradient(135deg, rgba(11, 132, 201, 0.12), rgba(0, 128, 106, 0.08));
241
+ color: var(--text);
242
+ font-weight: 700;
243
+ }
244
+
245
+ .nav-section + .nav-section {
246
+ margin-top: 18px;
247
+ }
248
+
249
+ .nav-section h3 {
250
+ margin: 0 0 0.7rem;
251
+ color: var(--text-muted);
252
+ font-size: 0.8rem;
253
+ letter-spacing: 0.12em;
254
+ text-transform: uppercase;
255
+ }
256
+
257
+ .nav-list,
258
+ .site-nav ul {
259
+ list-style: none;
260
+ margin: 0;
261
+ padding: 0;
262
+ }
263
+
264
+ .site-nav li + li {
265
+ margin-top: 0.35rem;
266
+ }
267
+
268
+ .site-nav li a {
269
+ display: block;
270
+ padding: 0.55rem 0.75rem;
271
+ border-radius: 12px;
272
+ color: var(--text-soft);
273
+ transition: background-color 160ms ease, color 160ms ease, transform 160ms ease;
274
+ }
275
+
276
+ .site-nav li a:hover {
277
+ background: rgba(11, 132, 201, 0.08);
278
+ color: var(--text);
279
+ transform: translateX(2px);
280
+ }
281
+
282
+ .site-main {
283
+ min-width: 0;
284
+ display: flex;
285
+ flex-direction: column;
286
+ gap: 24px;
287
+ }
288
+
289
+ .site-header {
290
+ background: linear-gradient(135deg, rgba(255, 255, 255, 0.88), rgba(239, 247, 252, 0.72));
291
+ border: 1px solid var(--border);
292
+ border-radius: var(--radius-xl);
293
+ padding: 30px 34px;
294
+ box-shadow: var(--shadow-md);
295
+ }
296
+
297
+ .page-title {
298
+ margin: 0;
299
+ font-family: 'Open Sans Light', 'Open Sans', sans-serif;
300
+ font-size: clamp(2.8rem, 4vw, 4.8rem);
301
+ line-height: 0.95;
302
+ letter-spacing: -0.07em;
303
+ }
304
+
305
+ #main {
306
+ display: flex;
307
+ flex-direction: column;
308
+ gap: 22px;
309
+ }
310
+
311
+ .doc-section,
312
+ .hero-card,
313
+ .prose-card,
314
+ .site-footer {
315
+ background: var(--surface-strong);
316
+ border: 1px solid var(--border);
317
+ border-radius: var(--radius-xl);
318
+ box-shadow: var(--shadow-lg);
319
+ }
320
+
321
+ .doc-section,
322
+ .hero-card,
323
+ .prose-card {
324
+ padding: 30px 34px;
325
+ }
326
+
327
+ .doc-page-header {
328
+ margin-bottom: 1.5rem;
329
+ }
330
+
331
+ .doc-heading-meta {
332
+ margin-bottom: 0.75rem;
333
+ }
334
+
335
+ .doc-heading {
336
+ margin: 0;
337
+ font-size: clamp(1.9rem, 2.4vw, 2.8rem);
338
+ line-height: 1.06;
339
+ letter-spacing: -0.05em;
340
+ }
341
+
342
+ .class-description,
343
+ .description,
344
+ .summary,
345
+ .hero-description,
346
+ .param-desc {
347
+ color: var(--text-soft);
348
+ }
349
+
350
+ .class-description,
351
+ .description,
352
+ .summary {
353
+ margin: 1rem 0 0;
354
+ }
355
+
356
+ .doc-article > .subsection-title:first-of-type {
357
+ margin-top: 2rem;
358
+ }
359
+
360
+ h2,
361
+ h3,
362
+ h4,
363
+ h5,
364
+ h6 {
365
+ margin: 0;
366
+ color: var(--text);
367
+ }
368
+
369
+ h3.subsection-title {
370
+ margin: 2rem 0 1rem;
371
+ font-size: 1.2rem;
372
+ letter-spacing: -0.03em;
373
+ }
374
+
375
+ h5,
376
+ .container-overview .subsection-title {
377
+ margin: 1.4rem 0 0.8rem;
378
+ font-size: 0.98rem;
379
+ letter-spacing: 0.02em;
380
+ }
381
+
382
+ h6 {
383
+ margin: 1rem 0 0.5rem;
384
+ font-size: 0.9rem;
385
+ color: var(--text-soft);
386
+ }
387
+
388
+ .hero-card {
389
+ position: relative;
390
+ overflow: hidden;
391
+ background:
392
+ linear-gradient(135deg, rgba(255, 255, 255, 0.96), rgba(231, 243, 250, 0.9)),
393
+ linear-gradient(120deg, rgba(11, 132, 201, 0.16), transparent 42%);
394
+ }
395
+
396
+ .hero-card::after {
397
+ content: '';
398
+ position: absolute;
399
+ top: -50px;
400
+ right: -50px;
401
+ width: 180px;
402
+ height: 180px;
403
+ border-radius: 50%;
404
+ background: radial-gradient(circle, rgba(11, 132, 201, 0.16), transparent 68%);
405
+ pointer-events: none;
406
+ }
407
+
408
+ .hero-copy {
409
+ position: relative;
410
+ z-index: 1;
411
+ }
412
+
413
+ .hero-layout {
414
+ display: grid;
415
+ grid-template-columns: minmax(0, 1.45fr) minmax(280px, 0.8fr);
416
+ gap: 22px;
417
+ align-items: stretch;
418
+ }
419
+
420
+ .hero-copy h2 {
421
+ font-size: clamp(2.2rem, 3vw, 3.4rem);
422
+ letter-spacing: -0.06em;
423
+ }
424
+
425
+ .hero-copy h2 span {
426
+ color: var(--text-muted);
427
+ font-size: 0.65em;
428
+ }
429
+
430
+ .hero-tags {
431
+ display: flex;
432
+ flex-wrap: wrap;
433
+ gap: 0.65rem;
434
+ margin-top: 1.25rem;
435
+ }
436
+
437
+ .hero-lead {
438
+ max-width: 52rem;
439
+ margin: 1rem 0 0;
440
+ color: var(--text-soft);
441
+ font-size: 1.02rem;
442
+ }
443
+
444
+ .hero-actions {
445
+ display: flex;
446
+ flex-wrap: wrap;
447
+ gap: 0.8rem;
448
+ margin-top: 1.35rem;
449
+ }
450
+
451
+ .hero-action {
452
+ display: inline-flex;
453
+ align-items: center;
454
+ justify-content: center;
455
+ min-height: 46px;
456
+ padding: 0 1rem;
457
+ border: 1px solid var(--border-strong);
458
+ border-radius: 14px;
459
+ background: rgba(255, 255, 255, 0.72);
460
+ color: var(--text);
461
+ font-weight: 700;
462
+ transition: transform 160ms ease, background-color 160ms ease, border-color 160ms ease;
463
+ }
464
+
465
+ .hero-action:hover {
466
+ transform: translateY(-1px);
467
+ background: rgba(255, 255, 255, 0.94);
468
+ border-color: rgba(11, 132, 201, 0.22);
469
+ }
470
+
471
+ .hero-action.primary {
472
+ background: linear-gradient(135deg, var(--accent), var(--accent-strong));
473
+ border-color: transparent;
474
+ color: #fff;
475
+ }
476
+
477
+ .hero-panel {
478
+ position: relative;
479
+ z-index: 1;
480
+ padding: 1.25rem;
481
+ border: 1px solid rgba(18, 38, 58, 0.1);
482
+ border-radius: 22px;
483
+ background: rgba(248, 252, 255, 0.82);
484
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8);
485
+ }
486
+
487
+ .hero-panel-title {
488
+ margin: 0 0 0.8rem;
489
+ color: var(--text);
490
+ font-size: 0.92rem;
491
+ font-weight: 700;
492
+ text-transform: uppercase;
493
+ letter-spacing: 0.12em;
494
+ }
495
+
496
+ .hero-snippet {
497
+ margin: 0;
498
+ background: #eff6fb;
499
+ }
500
+
501
+ .hero-points {
502
+ margin: 1rem 0 0;
503
+ padding-left: 1rem;
504
+ color: var(--text-soft);
505
+ }
506
+
507
+ .hero-points li + li {
508
+ margin-top: 0.5rem;
509
+ }
510
+
511
+ .hero-tags span,
512
+ .returns-type span,
513
+ .symbol-kind,
514
+ .doc-kind-label {
515
+ display: inline-flex;
516
+ align-items: center;
517
+ gap: 0.4rem;
518
+ width: fit-content;
519
+ padding: 0.35rem 0.75rem;
520
+ border-radius: 999px;
521
+ background: var(--accent-soft);
522
+ }
523
+
524
+ .hero-tags span {
525
+ color: var(--accent-strong);
526
+ font-size: 0.82rem;
527
+ font-weight: 700;
528
+ }
529
+
530
+ .prose-card > :first-child,
531
+ .description > :first-child,
532
+ .param-desc > :first-child {
533
+ margin-top: 0;
534
+ }
535
+
536
+ .prose-card > :last-child,
537
+ .description > :last-child,
538
+ .param-desc > :last-child {
539
+ margin-bottom: 0;
540
+ }
541
+
542
+ .homepage-strip,
543
+ .homepage-grid {
544
+ display: grid;
545
+ gap: 18px;
546
+ }
547
+
548
+ .stats-strip {
549
+ grid-template-columns: repeat(3, minmax(0, 1fr));
550
+ }
551
+
552
+ .stats-card,
553
+ .homepage-card {
554
+ background: var(--surface-strong);
555
+ border: 1px solid var(--border);
556
+ border-radius: var(--radius-lg);
557
+ box-shadow: var(--shadow-md);
558
+ }
559
+
560
+ .stats-card {
561
+ padding: 20px 22px;
562
+ }
563
+
564
+ .stats-card strong {
565
+ display: block;
566
+ font-family: 'Open Sans Light', 'Open Sans', sans-serif;
567
+ font-size: 2.2rem;
568
+ letter-spacing: -0.06em;
569
+ }
570
+
571
+ .stats-card span {
572
+ display: block;
573
+ margin-top: 0.35rem;
574
+ font-weight: 700;
575
+ color: var(--text);
576
+ }
577
+
578
+ .stats-card p,
579
+ .homepage-card p {
580
+ margin: 0.65rem 0 0;
581
+ color: var(--text-soft);
582
+ }
583
+
584
+ .homepage-grid {
585
+ grid-template-columns: repeat(3, minmax(0, 1fr));
586
+ }
587
+
588
+ .homepage-card {
589
+ padding: 22px 24px;
590
+ }
591
+
592
+ .homepage-card-wide {
593
+ grid-column: span 2;
594
+ }
595
+
596
+ .homepage-card h3 {
597
+ margin-top: 0.2rem;
598
+ font-size: 1.22rem;
599
+ line-height: 1.2;
600
+ }
601
+
602
+ .homepage-card a,
603
+ .guide-card a {
604
+ position: relative;
605
+ z-index: 1;
606
+ }
607
+
608
+ .compact-header {
609
+ margin-bottom: 1.2rem;
610
+ }
611
+
612
+ .compact-header h3 {
613
+ font-size: 1.35rem;
614
+ }
615
+
616
+ .homepage-guides {
617
+ display: flex;
618
+ flex-direction: column;
619
+ gap: 18px;
620
+ }
621
+
622
+ .guide-grid {
623
+ display: grid;
624
+ gap: 18px;
625
+ grid-template-columns: repeat(3, minmax(0, 1fr));
626
+ }
627
+
628
+ .guide-grid-secondary {
629
+ grid-template-columns: minmax(0, 2fr) minmax(280px, 1fr);
630
+ }
631
+
632
+ .guide-card {
633
+ padding: 24px 26px;
634
+ background: var(--surface-strong);
635
+ border: 1px solid var(--border);
636
+ border-radius: var(--radius-lg);
637
+ box-shadow: var(--shadow-md);
638
+ scroll-margin-top: 120px;
639
+ }
640
+
641
+ .guide-card h3 {
642
+ margin-top: 0.2rem;
643
+ font-size: 1.22rem;
644
+ line-height: 1.2;
645
+ }
646
+
647
+ .guide-card p {
648
+ margin: 0.75rem 0 0;
649
+ color: var(--text-soft);
650
+ }
651
+
652
+ .guide-card pre {
653
+ margin: 1rem 0 0;
654
+ }
655
+
656
+ .guide-list {
657
+ margin: 1rem 0 0;
658
+ padding-left: 1.1rem;
659
+ color: var(--text-soft);
660
+ }
661
+
662
+ .guide-list li + li {
663
+ margin-top: 0.5rem;
664
+ }
665
+
666
+ .guide-list-tight {
667
+ margin-top: 0.85rem;
668
+ }
669
+
670
+ .symbol-list {
671
+ display: grid;
672
+ gap: 18px;
673
+ }
674
+
675
+ .symbol-card {
676
+ padding: 22px 24px;
677
+ border: 1px solid var(--border);
678
+ border-radius: var(--radius-lg);
679
+ background: linear-gradient(180deg, rgba(250, 252, 255, 0.98), rgba(243, 248, 251, 0.9));
680
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.85);
681
+ }
682
+
683
+ .symbol-heading {
684
+ display: flex;
685
+ flex-wrap: wrap;
686
+ align-items: center;
687
+ gap: 0.8rem;
688
+ }
689
+
690
+ .symbol-kind {
691
+ color: var(--accent-strong);
692
+ }
693
+
694
+ .name {
695
+ display: inline-block;
696
+ margin: 0;
697
+ padding: 0.18rem 0.5rem;
698
+ border-radius: 10px;
699
+ background: rgba(11, 132, 201, 0.08);
700
+ color: var(--text);
701
+ font-size: 1.05rem;
702
+ word-break: break-word;
703
+ }
704
+
705
+ .variation {
706
+ display: none;
707
+ }
708
+
709
+ .signature-attributes,
710
+ .type-signature,
711
+ .ancestors,
712
+ .attribs {
713
+ color: var(--text-muted);
714
+ }
715
+
716
+ .ancestors a,
717
+ .attribs a {
718
+ color: inherit !important;
719
+ }
720
+
721
+ .details {
722
+ display: grid;
723
+ grid-template-columns: minmax(120px, 180px) minmax(0, 1fr);
724
+ gap: 0.8rem 1rem;
725
+ margin: 1.3rem 0 0;
726
+ padding: 1rem 1.1rem;
727
+ border: 1px solid rgba(18, 38, 58, 0.08);
728
+ border-radius: var(--radius-md);
729
+ background: var(--surface-muted);
730
+ }
731
+
732
+ .details dt {
733
+ margin: 0;
734
+ font-weight: 700;
735
+ color: var(--text);
736
+ }
737
+
738
+ .details dd {
739
+ margin: 0;
740
+ color: var(--text-soft);
741
+ }
742
+
743
+ .details ul,
744
+ .details li,
745
+ .tutorial-children,
746
+ .symbol-index {
747
+ margin: 0;
748
+ padding: 0;
749
+ list-style: none;
750
+ }
751
+
752
+ .details li + li,
753
+ .tutorial-children li + li {
754
+ margin-top: 0.35rem;
755
+ }
756
+
757
+ .table-wrap {
758
+ margin-top: 1rem;
759
+ overflow-x: auto;
760
+ border: 1px solid var(--border);
761
+ border-radius: var(--radius-md);
762
+ }
763
+
764
+ table {
765
+ width: 100%;
766
+ border-collapse: collapse;
767
+ background: rgba(255, 255, 255, 0.84);
768
+ }
769
+
770
+ thead tr {
771
+ background: rgba(11, 132, 201, 0.08);
772
+ }
773
+
774
+ th,
775
+ td {
776
+ padding: 0.85rem 0.9rem;
777
+ border-bottom: 1px solid rgba(18, 38, 58, 0.08);
778
+ text-align: left;
779
+ vertical-align: top;
780
+ }
781
+
782
+ th {
783
+ font-size: 0.82rem;
784
+ text-transform: uppercase;
785
+ letter-spacing: 0.08em;
786
+ color: var(--text-soft);
787
+ }
788
+
789
+ tbody tr:last-child td {
790
+ border-bottom: 0;
791
+ }
792
+
793
+ .params .name,
794
+ .props .name,
795
+ .name code {
796
+ color: var(--text);
797
+ font-size: 0.94rem;
798
+ }
799
+
800
+ .params td.description > p:first-child,
801
+ .props td.description > p:first-child {
802
+ margin-top: 0;
803
+ }
804
+
805
+ .params td.description > p:last-child,
806
+ .props td.description > p:last-child {
807
+ margin-bottom: 0;
808
+ }
809
+
810
+ .code-caption {
811
+ margin: 1rem 0 0.45rem;
812
+ color: var(--text-muted);
813
+ font-size: 0.9rem;
814
+ font-style: italic;
815
+ }
816
+
817
+ .prettyprint {
818
+ width: 100%;
819
+ overflow: auto;
820
+ border: 1px solid rgba(18, 38, 58, 0.1);
821
+ border-radius: 16px;
822
+ background: #f5f9fc;
823
+ }
824
+
825
+ .prettyprint.source {
826
+ width: 100%;
827
+ }
828
+
829
+ .prettyprint code {
830
+ display: block;
831
+ margin: 0;
832
+ padding: 1rem 1.15rem;
833
+ background: transparent;
834
+ color: var(--text);
835
+ font-size: 0.94rem;
836
+ line-height: 1.7;
837
+ }
838
+
839
+ .prettyprint code span.line {
840
+ display: inline-block;
841
+ }
842
+
843
+ .prettyprint.linenums {
844
+ padding-left: 0;
845
+ user-select: none;
846
+ }
847
+
848
+ .prettyprint.linenums ol {
849
+ margin: 0;
850
+ padding-left: 3.8rem;
851
+ }
852
+
853
+ .prettyprint.linenums li {
854
+ border-left: 1px solid rgba(18, 38, 58, 0.08);
855
+ padding-left: 1rem;
856
+ }
857
+
858
+ .prettyprint.linenums li.selected,
859
+ .prettyprint.linenums li.selected * {
860
+ background-color: rgba(255, 236, 153, 0.44);
861
+ }
862
+
863
+ .prettyprint.linenums li * {
864
+ user-select: text;
865
+ }
866
+
867
+ .returns-type,
868
+ .exception-block {
869
+ margin-top: 0.85rem;
870
+ }
871
+
872
+ .returns-type {
873
+ display: flex;
874
+ flex-wrap: wrap;
875
+ align-items: center;
876
+ gap: 0.55rem;
877
+ color: var(--text-soft);
878
+ }
879
+
880
+ .returns-type span {
881
+ color: var(--accent-strong);
882
+ }
883
+
884
+ .symbol-index {
885
+ display: grid;
886
+ gap: 0.55rem 1rem;
887
+ grid-template-columns: minmax(180px, 260px) minmax(0, 1fr);
888
+ }
889
+
890
+ .symbol-index dt,
891
+ .symbol-index dd {
892
+ margin: 0;
893
+ }
894
+
895
+ .tutorial-children {
896
+ display: flex;
897
+ flex-wrap: wrap;
898
+ gap: 0.6rem;
899
+ margin-bottom: 1rem;
900
+ }
901
+
902
+ .tutorial-children a {
903
+ display: inline-block;
904
+ padding: 0.45rem 0.8rem;
905
+ border-radius: 999px;
906
+ background: rgba(11, 132, 201, 0.08);
907
+ }
908
+
909
+ article img {
910
+ max-width: 100%;
911
+ border-radius: 16px;
912
+ }
913
+
914
+ .site-footer {
915
+ padding: 18px 22px;
916
+ color: var(--text-muted);
917
+ font-size: 0.9rem;
918
+ }
919
+
920
+ .important {
921
+ color: #a34800;
922
+ }
923
+
924
+ .yes-def {
925
+ text-indent: -9999px;
926
+ }
927
+
928
+ .disabled {
929
+ color: #454545;
930
+ }
931
+
932
+ @media (max-width: 1100px) {
933
+ .app-shell {
934
+ grid-template-columns: 1fr;
935
+ }
936
+
937
+ .site-sidebar {
938
+ position: static;
939
+ height: auto;
940
+ }
941
+
942
+ .nav-toggle {
943
+ display: block;
944
+ }
945
+
946
+ .site-nav {
947
+ display: none;
948
+ max-height: 60vh;
949
+ }
950
+
951
+ .app-shell.nav-open .site-nav {
952
+ display: block;
953
+ }
954
+
955
+ .hero-layout,
956
+ .stats-strip,
957
+ .homepage-grid,
958
+ .guide-grid,
959
+ .guide-grid-secondary {
960
+ grid-template-columns: 1fr 1fr;
961
+ }
962
+
963
+ .homepage-card-wide {
964
+ grid-column: span 2;
965
+ }
966
+ }
967
+
968
+ @media (max-width: 720px) {
969
+ .app-shell {
970
+ padding: 14px;
971
+ gap: 16px;
972
+ }
973
+
974
+ .site-header,
975
+ .doc-section,
976
+ .hero-card,
977
+ .prose-card,
978
+ .site-footer,
979
+ .brand-card,
980
+ .site-nav {
981
+ padding: 22px 20px;
982
+ border-radius: 22px;
983
+ }
984
+
985
+ .page-title {
986
+ font-size: 2.6rem;
987
+ }
988
+
989
+ .hero-layout,
990
+ .stats-strip,
991
+ .homepage-grid,
992
+ .guide-grid,
993
+ .guide-grid-secondary {
994
+ grid-template-columns: 1fr;
995
+ }
996
+
997
+ .homepage-card-wide {
998
+ grid-column: span 1;
999
+ }
1000
+
1001
+ .details {
1002
+ grid-template-columns: 1fr;
1003
+ }
1004
+
1005
+ .symbol-index {
1006
+ grid-template-columns: 1fr;
1007
+ }
1008
+
1009
+ .symbol-heading {
1010
+ align-items: flex-start;
1011
+ }
1012
+ }