@hypoth-ui/docs-renderer-next 0.1.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.
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "@hypoth-ui/docs-renderer-next",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "Next.js documentation renderer for the hypoth-ui design system (Alpha)",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/hypoth-ui/hypoth-ui.git",
10
+ "directory": "packages/docs-renderer-next"
11
+ },
12
+ "homepage": "https://github.com/hypoth-ui/hypoth-ui#readme",
13
+ "keywords": [
14
+ "documentation",
15
+ "nextjs",
16
+ "renderer",
17
+ "design-system",
18
+ "hypoth-ui"
19
+ ],
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js"
24
+ },
25
+ "./components/nav-sidebar": {
26
+ "types": "./components/nav-sidebar.tsx",
27
+ "import": "./components/nav-sidebar.tsx"
28
+ },
29
+ "./components/mdx-renderer": {
30
+ "types": "./components/mdx-renderer.tsx",
31
+ "import": "./components/mdx-renderer.tsx"
32
+ },
33
+ "./styles/globals.css": "./styles/globals.css",
34
+ "./package.json": "./package.json"
35
+ },
36
+ "files": [
37
+ "dist",
38
+ "app",
39
+ "components",
40
+ "styles"
41
+ ],
42
+ "dependencies": {
43
+ "next": "^14.0.0",
44
+ "react": "^18.2.0",
45
+ "react-dom": "^18.2.0",
46
+ "@mdx-js/mdx": "^3.0.0",
47
+ "@mdx-js/react": "^3.0.0",
48
+ "@hypoth-ui/docs-core": "0.1.0",
49
+ "@hypoth-ui/docs-content": "0.1.0",
50
+ "@hypoth-ui/wc": "0.1.0",
51
+ "@hypoth-ui/next": "0.1.0",
52
+ "@hypoth-ui/tokens": "0.1.0",
53
+ "@hypoth-ui/css": "0.1.0"
54
+ },
55
+ "devDependencies": {
56
+ "@types/react": "^18.2.0",
57
+ "@types/react-dom": "^18.2.0",
58
+ "typescript": "^5.3.0",
59
+ "tsup": "^8.0.0"
60
+ },
61
+ "scripts": {
62
+ "build": "tsup src/index.ts --format esm --dts",
63
+ "clean": "rm -rf dist",
64
+ "typecheck": "tsc --noEmit"
65
+ }
66
+ }
@@ -0,0 +1,613 @@
1
+ /* Import design system CSS layers */
2
+ @import "@hypoth-ui/css";
3
+
4
+ /* Docs site styles - placed in overrides layer to avoid affecting component demos */
5
+ @layer overrides {
6
+ /* T064: Skip link for keyboard accessibility */
7
+ .skip-link {
8
+ position: absolute;
9
+ top: -40px;
10
+ left: 0;
11
+ background: var(--ds-brand-primary, #0066cc);
12
+ color: white;
13
+ padding: 0.5rem 1rem;
14
+ z-index: 10000;
15
+ font-weight: 600;
16
+ text-decoration: none;
17
+ border-radius: 0 0 var(--ds-radius-sm, 4px) 0;
18
+ transition: top 0.15s ease-in-out;
19
+ }
20
+
21
+ .skip-link:focus {
22
+ top: 0;
23
+ outline: 2px solid var(--ds-color-primary-default, #0066cc);
24
+ outline-offset: 2px;
25
+ }
26
+
27
+ /* Layout */
28
+ .docs-layout {
29
+ display: grid;
30
+ grid-template-columns: 280px 1fr;
31
+ grid-template-rows: auto 1fr;
32
+ min-height: 100vh;
33
+ }
34
+
35
+ .docs-sidebar {
36
+ position: sticky;
37
+ top: 0;
38
+ height: 100vh;
39
+ overflow-y: auto;
40
+ border-right: 1px solid var(--ds-color-border-default, #e5e5e5);
41
+ background: var(--ds-color-background-subtle, #fafafa);
42
+ }
43
+
44
+ .docs-main {
45
+ padding: var(--ds-spacing-xl, 2rem);
46
+ max-width: 80ch;
47
+ }
48
+
49
+ .docs-content {
50
+ line-height: 1.7;
51
+ }
52
+
53
+ /* Header */
54
+ .docs-header {
55
+ grid-column: 1 / -1;
56
+ display: flex;
57
+ align-items: center;
58
+ justify-content: space-between;
59
+ padding: var(--ds-spacing-sm, 0.5rem) var(--ds-spacing-md, 1rem);
60
+ border-bottom: 1px solid var(--ds-color-border-default, #e5e5e5);
61
+ background: var(--ds-color-background-surface, #fff);
62
+ }
63
+
64
+ .docs-header-content {
65
+ display: flex;
66
+ align-items: center;
67
+ justify-content: space-between;
68
+ width: 100%;
69
+ max-width: 100%;
70
+ }
71
+
72
+ .docs-logo {
73
+ font-weight: var(--ds-font-weight-bold, 700);
74
+ font-size: var(--ds-font-size-lg, 1.125rem);
75
+ color: var(--ds-color-foreground-default, #1a1a1a);
76
+ }
77
+
78
+ /* Navigation Sidebar */
79
+ .nav-sidebar {
80
+ padding: var(--ds-spacing-md, 1rem);
81
+ }
82
+
83
+ .nav-sidebar-header {
84
+ padding: var(--ds-spacing-md, 1rem) 0;
85
+ border-bottom: 1px solid var(--ds-color-border-default, #e5e5e5);
86
+ margin-bottom: var(--ds-spacing-md, 1rem);
87
+ }
88
+
89
+ .nav-sidebar-logo {
90
+ font-weight: var(--ds-font-weight-bold, 700);
91
+ font-size: var(--ds-font-size-lg, 1.125rem);
92
+ color: var(--ds-color-foreground-default, #1a1a1a);
93
+ text-decoration: none;
94
+ }
95
+
96
+ .nav-section {
97
+ margin-bottom: var(--ds-spacing-lg, 1.5rem);
98
+ }
99
+
100
+ .nav-section-title {
101
+ font-size: var(--ds-font-size-sm, 0.875rem);
102
+ font-weight: var(--ds-font-weight-bold, 700);
103
+ text-transform: uppercase;
104
+ letter-spacing: 0.05em;
105
+ color: var(--ds-color-foreground-muted, #666);
106
+ margin-bottom: var(--ds-spacing-sm, 0.5rem);
107
+ }
108
+
109
+ .nav-category {
110
+ margin-bottom: var(--ds-spacing-md, 1rem);
111
+ }
112
+
113
+ .nav-category-title {
114
+ font-size: var(--ds-font-size-sm, 0.875rem);
115
+ font-weight: var(--ds-font-weight-medium, 500);
116
+ color: var(--ds-color-foreground-default, #1a1a1a);
117
+ margin-bottom: var(--ds-spacing-xs, 0.25rem);
118
+ }
119
+
120
+ .nav-category-list {
121
+ list-style: none;
122
+ padding: 0;
123
+ margin: 0;
124
+ }
125
+
126
+ .nav-link {
127
+ display: flex;
128
+ align-items: center;
129
+ gap: var(--ds-spacing-sm, 0.5rem);
130
+ padding: var(--ds-spacing-xs, 0.25rem) var(--ds-spacing-sm, 0.5rem);
131
+ border-radius: var(--ds-radius-sm, 4px);
132
+ color: var(--ds-color-foreground-muted, #666);
133
+ text-decoration: none;
134
+ font-size: var(--ds-font-size-sm, 0.875rem);
135
+ transition: background-color 0.15s, color 0.15s;
136
+ }
137
+
138
+ .nav-link:hover {
139
+ background: var(--ds-color-background-default, #fff);
140
+ color: var(--ds-color-foreground-default, #1a1a1a);
141
+ }
142
+
143
+ .nav-link--active {
144
+ background: var(--ds-brand-primary, var(--ds-color-primary-default, #0066cc));
145
+ color: var(--ds-color-primary-foreground, #fff);
146
+ }
147
+
148
+ .nav-link--active:hover {
149
+ background: var(--ds-brand-primary, var(--ds-color-primary-hover, #0052a3));
150
+ filter: brightness(0.9);
151
+ color: var(--ds-color-primary-foreground, #fff);
152
+ }
153
+
154
+ .nav-link-status {
155
+ font-size: 0.625rem;
156
+ padding: 0.125rem 0.375rem;
157
+ border-radius: 9999px;
158
+ text-transform: uppercase;
159
+ font-weight: var(--ds-font-weight-medium, 500);
160
+ }
161
+
162
+ .nav-link-status--stable {
163
+ background: #dcfce7;
164
+ color: #166534;
165
+ }
166
+
167
+ .nav-link-status--beta {
168
+ background: #fef3c7;
169
+ color: #92400e;
170
+ }
171
+
172
+ .nav-link-status--alpha {
173
+ background: #fce7f3;
174
+ color: #9d174d;
175
+ }
176
+
177
+ .nav-link-status--deprecated {
178
+ background: #fee2e2;
179
+ color: #991b1b;
180
+ }
181
+
182
+ /* Component page */
183
+ .component-page {
184
+ max-width: 100%;
185
+ }
186
+
187
+ .component-header {
188
+ margin-bottom: var(--ds-spacing-xl, 2rem);
189
+ padding-bottom: var(--ds-spacing-lg, 1.5rem);
190
+ border-bottom: 1px solid var(--ds-color-border-default, #e5e5e5);
191
+ }
192
+
193
+ .component-status {
194
+ display: inline-block;
195
+ font-size: 0.75rem;
196
+ padding: 0.25rem 0.5rem;
197
+ border-radius: 9999px;
198
+ text-transform: uppercase;
199
+ font-weight: var(--ds-font-weight-medium, 500);
200
+ margin-bottom: var(--ds-spacing-sm, 0.5rem);
201
+ }
202
+
203
+ .component-status[data-status="stable"] {
204
+ background: #dcfce7;
205
+ color: #166534;
206
+ }
207
+
208
+ .component-status[data-status="beta"] {
209
+ background: #fef3c7;
210
+ color: #92400e;
211
+ }
212
+
213
+ .component-status[data-status="alpha"] {
214
+ background: #fce7f3;
215
+ color: #9d174d;
216
+ }
217
+
218
+ .component-status[data-status="deprecated"] {
219
+ background: #fee2e2;
220
+ color: #991b1b;
221
+ }
222
+
223
+ .component-description {
224
+ font-size: var(--ds-font-size-lg, 1.125rem);
225
+ color: var(--ds-color-foreground-muted, #666);
226
+ margin: 0;
227
+ }
228
+
229
+ /* MDX content styling */
230
+ .mdx-content h1 {
231
+ font-size: 2.25rem;
232
+ font-weight: var(--ds-font-weight-bold, 700);
233
+ margin: 0 0 var(--ds-spacing-lg, 1.5rem);
234
+ line-height: 1.2;
235
+ }
236
+
237
+ .mdx-content h2 {
238
+ font-size: 1.5rem;
239
+ font-weight: var(--ds-font-weight-bold, 700);
240
+ margin: var(--ds-spacing-xl, 2rem) 0 var(--ds-spacing-md, 1rem);
241
+ padding-bottom: var(--ds-spacing-sm, 0.5rem);
242
+ border-bottom: 1px solid var(--ds-color-border-default, #e5e5e5);
243
+ }
244
+
245
+ .mdx-content h3 {
246
+ font-size: 1.25rem;
247
+ font-weight: var(--ds-font-weight-medium, 500);
248
+ margin: var(--ds-spacing-lg, 1.5rem) 0 var(--ds-spacing-sm, 0.5rem);
249
+ }
250
+
251
+ .mdx-content p {
252
+ margin: var(--ds-spacing-md, 1rem) 0;
253
+ }
254
+
255
+ .mdx-content ul,
256
+ .mdx-content ol {
257
+ margin: var(--ds-spacing-md, 1rem) 0;
258
+ padding-left: var(--ds-spacing-lg, 1.5rem);
259
+ }
260
+
261
+ .mdx-content li {
262
+ margin: var(--ds-spacing-xs, 0.25rem) 0;
263
+ }
264
+
265
+ /* Code styling */
266
+ .code-block {
267
+ background: var(--ds-color-background-subtle, #f5f5f5);
268
+ border-radius: var(--ds-radius-md, 6px);
269
+ padding: var(--ds-spacing-md, 1rem);
270
+ overflow-x: auto;
271
+ font-family: var(--ds-font-family-mono, monospace);
272
+ font-size: var(--ds-font-size-sm, 0.875rem);
273
+ line-height: 1.6;
274
+ margin: var(--ds-spacing-md, 1rem) 0;
275
+ }
276
+
277
+ .code-inline {
278
+ background: var(--ds-color-background-subtle, #f5f5f5);
279
+ border-radius: var(--ds-radius-sm, 4px);
280
+ padding: 0.125rem 0.375rem;
281
+ font-family: var(--ds-font-family-mono, monospace);
282
+ font-size: 0.875em;
283
+ }
284
+
285
+ /* Tables */
286
+ .table-wrapper {
287
+ overflow-x: auto;
288
+ margin: var(--ds-spacing-md, 1rem) 0;
289
+ }
290
+
291
+ .mdx-content table,
292
+ .props-table,
293
+ .events-table {
294
+ width: 100%;
295
+ border-collapse: collapse;
296
+ font-size: var(--ds-font-size-sm, 0.875rem);
297
+ }
298
+
299
+ .mdx-content th,
300
+ .mdx-content td,
301
+ .props-table th,
302
+ .props-table td,
303
+ .events-table th,
304
+ .events-table td {
305
+ text-align: left;
306
+ padding: var(--ds-spacing-sm, 0.5rem) var(--ds-spacing-md, 1rem);
307
+ border-bottom: 1px solid var(--ds-color-border-default, #e5e5e5);
308
+ }
309
+
310
+ .mdx-content th,
311
+ .props-table th,
312
+ .events-table th {
313
+ font-weight: var(--ds-font-weight-medium, 500);
314
+ background: var(--ds-color-background-subtle, #fafafa);
315
+ }
316
+
317
+ /* Examples - component demos should NOT be affected by docs styles */
318
+ .example {
319
+ margin: var(--ds-spacing-lg, 1.5rem) 0;
320
+ padding: var(--ds-spacing-md, 1rem);
321
+ border: 1px solid var(--ds-color-border-default, #e5e5e5);
322
+ border-radius: var(--ds-radius-md, 6px);
323
+ }
324
+
325
+ .example h3 {
326
+ margin: 0 0 var(--ds-spacing-sm, 0.5rem);
327
+ font-size: var(--ds-font-size-base, 1rem);
328
+ }
329
+
330
+ /* Home page */
331
+ .docs-home {
332
+ max-width: 60ch;
333
+ }
334
+
335
+ .docs-home h1 {
336
+ font-size: 2.5rem;
337
+ margin-bottom: var(--ds-spacing-md, 1rem);
338
+ }
339
+
340
+ .docs-home-nav h2 {
341
+ font-size: 1.25rem;
342
+ margin: var(--ds-spacing-xl, 2rem) 0 var(--ds-spacing-sm, 0.5rem);
343
+ }
344
+
345
+ .docs-home-nav ul {
346
+ list-style: none;
347
+ padding: 0;
348
+ }
349
+
350
+ .docs-home-nav li {
351
+ margin: var(--ds-spacing-xs, 0.25rem) 0;
352
+ }
353
+
354
+ .docs-home-nav a {
355
+ color: var(--ds-brand-primary, var(--ds-color-primary-default, #0066cc));
356
+ text-decoration: none;
357
+ }
358
+
359
+ .docs-home-nav a:hover {
360
+ text-decoration: underline;
361
+ }
362
+
363
+ /* Logo component styles */
364
+ .logo {
365
+ display: inline-flex;
366
+ align-items: center;
367
+ gap: 0.5rem;
368
+ }
369
+
370
+ .logo__image {
371
+ height: 2rem;
372
+ width: auto;
373
+ }
374
+
375
+ .logo--small .logo__image {
376
+ height: 1.5rem;
377
+ }
378
+
379
+ .logo--large .logo__image {
380
+ height: 2.5rem;
381
+ }
382
+
383
+ .logo__initial {
384
+ display: inline-flex;
385
+ align-items: center;
386
+ justify-content: center;
387
+ width: 2rem;
388
+ height: 2rem;
389
+ border-radius: 0.375rem;
390
+ color: white;
391
+ font-weight: 700;
392
+ font-size: 1rem;
393
+ }
394
+
395
+ .logo--small .logo__initial {
396
+ width: 1.5rem;
397
+ height: 1.5rem;
398
+ font-size: 0.75rem;
399
+ }
400
+
401
+ .logo--large .logo__initial {
402
+ width: 2.5rem;
403
+ height: 2.5rem;
404
+ font-size: 1.25rem;
405
+ }
406
+
407
+ .logo__text {
408
+ font-weight: 700;
409
+ font-size: 1.125rem;
410
+ color: var(--ds-color-foreground-default, #1a1a1a);
411
+ }
412
+
413
+ .logo--small .logo__text {
414
+ font-size: 0.875rem;
415
+ }
416
+
417
+ .logo--large .logo__text {
418
+ font-size: 1.375rem;
419
+ }
420
+
421
+ /* Upgrade prompt styles */
422
+ .upgrade-prompt {
423
+ text-align: center;
424
+ }
425
+
426
+ .upgrade-prompt--full-page {
427
+ padding: 2rem;
428
+ }
429
+
430
+ .upgrade-prompt__container {
431
+ max-width: 500px;
432
+ margin: 0 auto;
433
+ padding: 2rem;
434
+ background: var(--ds-color-background-surface, #fff);
435
+ border-radius: 12px;
436
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
437
+ }
438
+
439
+ .upgrade-prompt__icon {
440
+ font-size: 4rem;
441
+ margin-bottom: 1rem;
442
+ }
443
+
444
+ .upgrade-prompt__title {
445
+ font-size: 1.5rem;
446
+ margin: 0 0 1rem;
447
+ }
448
+
449
+ .upgrade-prompt__message {
450
+ color: var(--ds-color-foreground-muted, #666);
451
+ margin: 0 0 1.5rem;
452
+ }
453
+
454
+ .upgrade-prompt__tiers {
455
+ display: flex;
456
+ gap: 1rem;
457
+ align-items: center;
458
+ justify-content: center;
459
+ margin-bottom: 1.5rem;
460
+ }
461
+
462
+ .upgrade-prompt__tier {
463
+ padding: 1rem;
464
+ border-radius: 8px;
465
+ background: var(--ds-color-background-subtle, #f5f5f5);
466
+ }
467
+
468
+ .upgrade-prompt__tier h2 {
469
+ font-size: 0.875rem;
470
+ margin: 0 0 0.25rem;
471
+ }
472
+
473
+ .upgrade-prompt__tier p {
474
+ font-size: 0.75rem;
475
+ margin: 0;
476
+ color: var(--ds-color-foreground-muted, #666);
477
+ }
478
+
479
+ .upgrade-prompt__arrow {
480
+ font-size: 1.5rem;
481
+ color: var(--ds-color-foreground-muted, #666);
482
+ }
483
+
484
+ .upgrade-prompt__cta {
485
+ display: inline-block;
486
+ padding: 0.75rem 1.5rem;
487
+ background: var(--ds-brand-primary, var(--ds-color-primary-default, #0066cc));
488
+ color: white;
489
+ border-radius: 8px;
490
+ font-weight: 600;
491
+ text-decoration: none;
492
+ transition: filter 0.15s;
493
+ }
494
+
495
+ .upgrade-prompt__cta:hover {
496
+ filter: brightness(0.9);
497
+ }
498
+
499
+ /* Card variant */
500
+ .upgrade-prompt--card {
501
+ padding: 1rem;
502
+ border: 1px solid var(--ds-color-border-default, #e5e5e5);
503
+ border-radius: 8px;
504
+ text-align: left;
505
+ }
506
+
507
+ .upgrade-prompt--card .upgrade-prompt__header {
508
+ display: flex;
509
+ align-items: center;
510
+ gap: 0.5rem;
511
+ margin-bottom: 0.75rem;
512
+ }
513
+
514
+ .upgrade-prompt--card .upgrade-prompt__badge {
515
+ font-size: 0.75rem;
516
+ padding: 0.125rem 0.5rem;
517
+ background: var(--ds-brand-primary, var(--ds-color-primary-default, #0066cc));
518
+ color: white;
519
+ border-radius: 9999px;
520
+ }
521
+
522
+ .upgrade-prompt--card .upgrade-prompt__footer {
523
+ display: flex;
524
+ justify-content: space-between;
525
+ align-items: center;
526
+ margin-top: 1rem;
527
+ padding-top: 0.75rem;
528
+ border-top: 1px solid var(--ds-color-border-default, #e5e5e5);
529
+ }
530
+
531
+ .upgrade-prompt--card .upgrade-prompt__current {
532
+ font-size: 0.75rem;
533
+ color: var(--ds-color-foreground-muted, #666);
534
+ }
535
+
536
+ /* Inline variant */
537
+ .upgrade-prompt--inline {
538
+ display: inline-flex;
539
+ align-items: center;
540
+ gap: 0.25rem;
541
+ font-size: 0.875rem;
542
+ }
543
+
544
+ .upgrade-prompt--inline .upgrade-prompt__link {
545
+ color: var(--ds-brand-primary, var(--ds-color-primary-default, #0066cc));
546
+ }
547
+
548
+ /* Accessibility section styles */
549
+ .component-accessibility {
550
+ margin: var(--ds-spacing-lg, 1.5rem) 0;
551
+ padding: var(--ds-spacing-md, 1rem);
552
+ background: var(--ds-color-background-subtle, #fafafa);
553
+ border-radius: var(--ds-radius-md, 6px);
554
+ }
555
+
556
+ .component-accessibility h2 {
557
+ margin: 0 0 var(--ds-spacing-md, 1rem);
558
+ font-size: 1.25rem;
559
+ }
560
+
561
+ .accessibility-details {
562
+ display: grid;
563
+ gap: var(--ds-spacing-md, 1rem);
564
+ }
565
+
566
+ .accessibility-item {
567
+ display: grid;
568
+ gap: var(--ds-spacing-xs, 0.25rem);
569
+ }
570
+
571
+ .accessibility-item dt {
572
+ font-weight: 600;
573
+ font-size: 0.875rem;
574
+ color: var(--ds-color-foreground-muted, #666);
575
+ }
576
+
577
+ .accessibility-item dd {
578
+ margin: 0;
579
+ }
580
+
581
+ .accessibility-item a {
582
+ color: var(--ds-brand-primary, var(--ds-color-primary-default, #0066cc));
583
+ }
584
+
585
+ .accessibility-item ul {
586
+ margin: 0;
587
+ padding-left: 1.25rem;
588
+ }
589
+
590
+ .accessibility-item--warning {
591
+ padding: var(--ds-spacing-sm, 0.5rem);
592
+ background: #fef3c7;
593
+ border-radius: var(--ds-radius-sm, 4px);
594
+ }
595
+
596
+ .keyboard-list,
597
+ .aria-list,
598
+ .limitations-list {
599
+ margin: 0;
600
+ padding-left: 1.25rem;
601
+ }
602
+
603
+ /* Responsive */
604
+ @media (max-width: 768px) {
605
+ .docs-layout {
606
+ grid-template-columns: 1fr;
607
+ }
608
+
609
+ .docs-sidebar {
610
+ display: none;
611
+ }
612
+ }
613
+ }