@roadlittledawn/docs-design-system-react 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.
Files changed (43) hide show
  1. package/README.md +136 -0
  2. package/dist/components/Button.d.ts +17 -0
  3. package/dist/components/Button.js +28 -0
  4. package/dist/components/Button.stories.d.ts +45 -0
  5. package/dist/components/Button.stories.js +98 -0
  6. package/dist/components/Callout.d.ts +17 -0
  7. package/dist/components/Callout.js +19 -0
  8. package/dist/components/Callout.stories.d.ts +36 -0
  9. package/dist/components/Callout.stories.js +80 -0
  10. package/dist/components/Card.d.ts +23 -0
  11. package/dist/components/Card.js +21 -0
  12. package/dist/components/Card.stories.d.ts +32 -0
  13. package/dist/components/Card.stories.js +68 -0
  14. package/dist/components/CardGrid.d.ts +14 -0
  15. package/dist/components/CardGrid.js +6 -0
  16. package/dist/components/CardGrid.stories.d.ts +24 -0
  17. package/dist/components/CardGrid.stories.js +55 -0
  18. package/dist/components/CodeBlock.d.ts +43 -0
  19. package/dist/components/CodeBlock.js +240 -0
  20. package/dist/components/CodeBlock.stories.d.ts +45 -0
  21. package/dist/components/CodeBlock.stories.js +154 -0
  22. package/dist/components/Collapser.d.ts +18 -0
  23. package/dist/components/Collapser.js +25 -0
  24. package/dist/components/Collapser.stories.d.ts +28 -0
  25. package/dist/components/Collapser.stories.js +62 -0
  26. package/dist/components/Heading.d.ts +11 -0
  27. package/dist/components/Heading.js +7 -0
  28. package/dist/components/Heading.stories.d.ts +32 -0
  29. package/dist/components/Heading.stories.js +66 -0
  30. package/dist/components/Link.d.ts +11 -0
  31. package/dist/components/Link.js +10 -0
  32. package/dist/components/Link.stories.d.ts +32 -0
  33. package/dist/components/Link.stories.js +63 -0
  34. package/dist/components/Typography.d.ts +14 -0
  35. package/dist/components/Typography.js +9 -0
  36. package/dist/components/Typography.stories.d.ts +36 -0
  37. package/dist/components/Typography.stories.js +78 -0
  38. package/dist/hooks/useKeyPress.d.ts +5 -0
  39. package/dist/hooks/useKeyPress.js +60 -0
  40. package/dist/index.d.ts +10 -0
  41. package/dist/index.js +12 -0
  42. package/dist/styles.css +857 -0
  43. package/package.json +44 -0
@@ -0,0 +1,857 @@
1
+ /* Import design tokens */
2
+ :root {
3
+ /* Colors - Heading */
4
+ --dds-heading-color: #111827; /* gray-900 */
5
+
6
+ /* Colors - Button */
7
+ --dds-button-primary-bg: #2563eb; /* blue-600 */
8
+ --dds-button-primary-bg-hover: #1d4ed8; /* blue-700 */
9
+ --dds-button-primary-text: #ffffff;
10
+ --dds-button-primary-focus-ring: #3b82f6; /* blue-500 */
11
+
12
+ --dds-button-secondary-bg: #e5e7eb; /* gray-200 */
13
+ --dds-button-secondary-bg-hover: #d1d5db; /* gray-300 */
14
+ --dds-button-secondary-text: #111827; /* gray-900 */
15
+ --dds-button-secondary-focus-ring: #6b7280; /* gray-500 */
16
+
17
+ --dds-button-outline-bg: #ffffff;
18
+ --dds-button-outline-bg-hover: #f9fafb; /* gray-50 */
19
+ --dds-button-outline-border: #d1d5db; /* gray-300 */
20
+ --dds-button-outline-text: #374151; /* gray-700 */
21
+ --dds-button-outline-focus-ring: #6b7280; /* gray-500 */
22
+
23
+ /* Colors - Card */
24
+ --dds-card-bg-blue: #eff6ff; /* blue-50 */
25
+ --dds-card-bg-green: #f0fdf4; /* green-50 */
26
+ --dds-card-bg-purple: #faf5ff; /* purple-50 */
27
+ --dds-card-bg-red: #fef2f2; /* red-50 */
28
+ --dds-card-bg-yellow: #fefce8; /* yellow-50 */
29
+ --dds-card-bg-gray: #f9fafb; /* gray-50 */
30
+ --dds-card-bg-white: #ffffff;
31
+ --dds-card-border: #e5e7eb; /* gray-200 */
32
+
33
+ --dds-card-title-blue: #1e3a8a; /* blue-900 */
34
+ --dds-card-title-green: #14532d; /* green-900 */
35
+ --dds-card-title-purple: #581c87; /* purple-900 */
36
+ --dds-card-title-red: #7f1d1d; /* red-900 */
37
+ --dds-card-title-yellow: #713f12; /* yellow-900 */
38
+ --dds-card-title-gray: #111827; /* gray-900 */
39
+
40
+ --dds-card-text-blue: #1e40af; /* blue-800 */
41
+ --dds-card-text-green: #166534; /* green-800 */
42
+ --dds-card-text-purple: #6b21a8; /* purple-800 */
43
+ --dds-card-text-red: #991b1b; /* red-800 */
44
+ --dds-card-text-yellow: #854d0e; /* yellow-800 */
45
+ --dds-card-text-gray: #374151; /* gray-700 */
46
+
47
+ /* Typography - Font Sizes */
48
+ --dds-heading-1-size: 2.25rem; /* text-4xl */
49
+ --dds-heading-2-size: 1.875rem; /* text-3xl */
50
+ --dds-heading-3-size: 1.5rem; /* text-2xl */
51
+ --dds-heading-4-size: 1.25rem; /* text-xl */
52
+ --dds-text-base-size: 1rem;
53
+ --dds-text-sm-size: 0.875rem;
54
+ --dds-text-lg-size: 1.125rem;
55
+
56
+ /* Typography - Font Weights */
57
+ --dds-font-bold: 700;
58
+ --dds-font-semibold: 600;
59
+ --dds-font-medium: 500;
60
+
61
+ /* Typography - Line Heights */
62
+ --dds-line-height-tight: 1.25;
63
+ --dds-line-height-relaxed: 1.625;
64
+
65
+ /* Spacing - Margins */
66
+ --dds-heading-1-margin-top: 2rem; /* mt-8 */
67
+ --dds-heading-1-margin-bottom: 1.5rem; /* mb-6 */
68
+ --dds-heading-2-margin-top: 1.75rem; /* mt-7 */
69
+ --dds-heading-2-margin-bottom: 1.25rem; /* mb-5 */
70
+ --dds-heading-3-margin-top: 1.5rem; /* mt-6 */
71
+ --dds-heading-3-margin-bottom: 1rem; /* mb-4 */
72
+ --dds-heading-4-margin-top: 1.25rem; /* mt-5 */
73
+ --dds-heading-4-margin-bottom: 0.75rem; /* mb-3 */
74
+
75
+ /* Spacing - Padding */
76
+ --dds-card-padding: 1.5rem; /* p-6 */
77
+ --dds-card-title-margin-bottom: 1rem; /* mb-4 */
78
+
79
+ --dds-button-sm-padding-x: 0.75rem; /* px-3 */
80
+ --dds-button-sm-padding-y: 0.375rem; /* py-1.5 */
81
+ --dds-button-md-padding-x: 1rem; /* px-4 */
82
+ --dds-button-md-padding-y: 0.5rem; /* py-2 */
83
+ --dds-button-lg-padding-x: 1.5rem; /* px-6 */
84
+ --dds-button-lg-padding-y: 0.75rem; /* py-3 */
85
+
86
+ /* Border Radius */
87
+ --dds-button-radius: 0.375rem; /* rounded-md */
88
+ --dds-card-radius: 0.5rem; /* rounded-lg */
89
+
90
+ /* Shadows */
91
+ --dds-card-shadow-hover:
92
+ 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
93
+ --dds-focus-ring-offset: 2px;
94
+
95
+ /* Transitions */
96
+ --dds-transition-colors:
97
+ color 150ms ease-in-out, background-color 150ms ease-in-out,
98
+ border-color 150ms ease-in-out;
99
+ --dds-transition-shadow: box-shadow 150ms ease-in-out;
100
+
101
+ /* Link Colors */
102
+ --dds-link-color: #2563eb; /* blue-600 */
103
+ --dds-link-color-hover: #1e40af; /* blue-800 */
104
+ --dds-link-decoration: #93c5fd; /* blue-300 */
105
+ --dds-link-decoration-hover: #60a5fa; /* blue-500 */
106
+
107
+ /* Callout Colors and Styles */
108
+ --dds-callout-text: #374151; /* gray-700 */
109
+ --dds-callout-padding: 1.25rem; /* p-5 */
110
+ --dds-callout-radius: 0.25rem; /* rounded */
111
+ --dds-callout-title-size: 0.75rem; /* text-xs */
112
+ --dds-callout-title-margin-bottom: 0.5rem; /* mb-2 */
113
+
114
+ /* Callout - Caution (red) */
115
+ --dds-callout-caution-border: #dc2626; /* red-600 */
116
+ --dds-callout-caution-bg: #fef2f2; /* red-50 */
117
+ --dds-callout-caution-title: #991b1b; /* red-800 */
118
+
119
+ /* Callout - Important (orange/yellow) */
120
+ --dds-callout-important-border: #f59e0b; /* amber-500 */
121
+ --dds-callout-important-bg: #fffbeb; /* amber-50 */
122
+ --dds-callout-important-title: #92400e; /* amber-800 */
123
+
124
+ /* Callout - Tip (blue) */
125
+ --dds-callout-tip-border: #2563eb; /* blue-600 */
126
+ --dds-callout-tip-bg: #eff6ff; /* blue-50 */
127
+ --dds-callout-tip-title: #1e40af; /* blue-800 */
128
+
129
+ /* Callout - Course (green) */
130
+ --dds-callout-course-border: #059669; /* emerald-600 */
131
+ --dds-callout-course-bg: #f0fdf4; /* green-50 */
132
+ --dds-callout-course-title: #065f46; /* emerald-800 */
133
+
134
+ /* Collapser Colors and Styles */
135
+ --dds-collapser-radius: 0.375rem; /* rounded-md */
136
+ --dds-collapser-border: #e5e7eb; /* gray-200 */
137
+ --dds-collapser-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
138
+ --dds-collapser-button-padding: 0.75rem; /* p-3 */
139
+ --dds-collapser-button-hover-bg: #f9fafb; /* gray-50 */
140
+ --dds-collapser-icon-color: #6b7280; /* gray-500 */
141
+ --dds-collapser-content-padding: 1rem; /* p-4 */
142
+ }
143
+ /* Import PrismJS theme */
144
+ /**
145
+ * prism.js default theme for JavaScript, CSS and HTML
146
+ * Based on dabblet (http://dabblet.com)
147
+ * @author Lea Verou
148
+ */
149
+ code[class*="language-"],
150
+ pre[class*="language-"] {
151
+ color: black;
152
+ background: none;
153
+ text-shadow: 0 1px white;
154
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
155
+ font-size: 1em;
156
+ text-align: left;
157
+ white-space: pre;
158
+ word-spacing: normal;
159
+ word-break: normal;
160
+ word-wrap: normal;
161
+ line-height: 1.5;
162
+
163
+ -moz-tab-size: 4;
164
+ -o-tab-size: 4;
165
+ tab-size: 4;
166
+
167
+ -webkit-hyphens: none;
168
+ -moz-hyphens: none;
169
+ -ms-hyphens: none;
170
+ hyphens: none;
171
+ }
172
+ pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
173
+ code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
174
+ text-shadow: none;
175
+ background: #b3d4fc;
176
+ }
177
+ pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
178
+ code[class*="language-"]::selection, code[class*="language-"] ::selection {
179
+ text-shadow: none;
180
+ background: #b3d4fc;
181
+ }
182
+ @media print {
183
+ code[class*="language-"],
184
+ pre[class*="language-"] {
185
+ text-shadow: none;
186
+ }
187
+ }
188
+ /* Code blocks */
189
+ pre[class*="language-"] {
190
+ padding: 1em;
191
+ margin: .5em 0;
192
+ overflow: auto;
193
+ }
194
+ :not(pre) > code[class*="language-"],
195
+ pre[class*="language-"] {
196
+ background: #f5f2f0;
197
+ }
198
+ /* Inline code */
199
+ :not(pre) > code[class*="language-"] {
200
+ padding: .1em;
201
+ border-radius: .3em;
202
+ white-space: normal;
203
+ }
204
+ .token.comment,
205
+ .token.prolog,
206
+ .token.doctype,
207
+ .token.cdata {
208
+ color: slategray;
209
+ }
210
+ .token.punctuation {
211
+ color: #999;
212
+ }
213
+ .token.namespace {
214
+ opacity: .7;
215
+ }
216
+ .token.property,
217
+ .token.tag,
218
+ .token.boolean,
219
+ .token.number,
220
+ .token.constant,
221
+ .token.symbol,
222
+ .token.deleted {
223
+ color: #905;
224
+ }
225
+ .token.selector,
226
+ .token.attr-name,
227
+ .token.string,
228
+ .token.char,
229
+ .token.builtin,
230
+ .token.inserted {
231
+ color: #690;
232
+ }
233
+ .token.operator,
234
+ .token.entity,
235
+ .token.url,
236
+ .language-css .token.string,
237
+ .style .token.string {
238
+ color: #9a6e3a;
239
+ /* This background color was intended by the author of this theme. */
240
+ background: hsla(0, 0%, 100%, .5);
241
+ }
242
+ .token.atrule,
243
+ .token.attr-value,
244
+ .token.keyword {
245
+ color: #07a;
246
+ }
247
+ .token.function,
248
+ .token.class-name {
249
+ color: #DD4A68;
250
+ }
251
+ .token.regex,
252
+ .token.important,
253
+ .token.variable {
254
+ color: #e90;
255
+ }
256
+ .token.important,
257
+ .token.bold {
258
+ font-weight: bold;
259
+ }
260
+ .token.italic {
261
+ font-style: italic;
262
+ }
263
+ .token.entity {
264
+ cursor: help;
265
+ }
266
+ /* Import component styles */
267
+ .dds-heading {
268
+ font-weight: var(--dds-font-bold);
269
+ color: var(--dds-heading-color);
270
+ }
271
+ .dds-heading-1 {
272
+ font-size: var(--dds-heading-1-size);
273
+ margin-top: var(--dds-heading-1-margin-top);
274
+ margin-bottom: var(--dds-heading-1-margin-bottom);
275
+ }
276
+ .dds-heading-2 {
277
+ font-size: var(--dds-heading-2-size);
278
+ margin-top: var(--dds-heading-2-margin-top);
279
+ margin-bottom: var(--dds-heading-2-margin-bottom);
280
+ }
281
+ .dds-heading-3 {
282
+ font-size: var(--dds-heading-3-size);
283
+ margin-top: var(--dds-heading-3-margin-top);
284
+ margin-bottom: var(--dds-heading-3-margin-bottom);
285
+ }
286
+ .dds-heading-4 {
287
+ font-size: var(--dds-heading-4-size);
288
+ margin-top: var(--dds-heading-4-margin-top);
289
+ margin-bottom: var(--dds-heading-4-margin-bottom);
290
+ }
291
+ .dds-button {
292
+ display: inline-flex;
293
+ align-items: center;
294
+ justify-content: center;
295
+ border-radius: var(--dds-button-radius);
296
+ font-weight: var(--dds-font-medium);
297
+ transition: var(--dds-transition-colors);
298
+ outline: none;
299
+ }
300
+ /* Variants */
301
+ .dds-button-primary {
302
+ background-color: var(--dds-button-primary-bg);
303
+ color: var(--dds-button-primary-text);
304
+ }
305
+ .dds-button-primary:hover {
306
+ background-color: var(--dds-button-primary-bg-hover);
307
+ }
308
+ .dds-button-primary:focus {
309
+ box-shadow: 0 0 0 var(--dds-focus-ring-offset) #ffffff, 0 0 0 calc(var(--dds-focus-ring-offset) + 2px) var(--dds-button-primary-focus-ring);
310
+ }
311
+ .dds-button-secondary {
312
+ background-color: var(--dds-button-secondary-bg);
313
+ color: var(--dds-button-secondary-text);
314
+ }
315
+ .dds-button-secondary:hover {
316
+ background-color: var(--dds-button-secondary-bg-hover);
317
+ }
318
+ .dds-button-secondary:focus {
319
+ box-shadow: 0 0 0 var(--dds-focus-ring-offset) #ffffff, 0 0 0 calc(var(--dds-focus-ring-offset) + 2px) var(--dds-button-secondary-focus-ring);
320
+ }
321
+ .dds-button-outline {
322
+ border: 1px solid var(--dds-button-outline-border);
323
+ background-color: var(--dds-button-outline-bg);
324
+ color: var(--dds-button-outline-text);
325
+ }
326
+ .dds-button-outline:hover {
327
+ background-color: var(--dds-button-outline-bg-hover);
328
+ }
329
+ .dds-button-outline:focus {
330
+ box-shadow: 0 0 0 var(--dds-focus-ring-offset) #ffffff, 0 0 0 calc(var(--dds-focus-ring-offset) + 2px) var(--dds-button-outline-focus-ring);
331
+ }
332
+ /* Sizes */
333
+ .dds-button-sm {
334
+ padding: var(--dds-button-sm-padding-y) var(--dds-button-sm-padding-x);
335
+ font-size: var(--dds-text-sm-size);
336
+ }
337
+ .dds-button-md {
338
+ padding: var(--dds-button-md-padding-y) var(--dds-button-md-padding-x);
339
+ font-size: var(--dds-text-base-size);
340
+ }
341
+ .dds-button-lg {
342
+ padding: var(--dds-button-lg-padding-y) var(--dds-button-lg-padding-x);
343
+ font-size: var(--dds-text-lg-size);
344
+ }
345
+ .dds-callout {
346
+ padding: var(--dds-callout-padding);
347
+ border-radius: var(--dds-callout-radius);
348
+ border: 1px solid;
349
+ border-left-width: 6px;
350
+ color: var(--dds-callout-text);
351
+ }
352
+ .dds-callout-title {
353
+ font-size: var(--dds-callout-title-size);
354
+ text-transform: uppercase;
355
+ margin-top: 0;
356
+ margin-bottom: var(--dds-callout-title-margin-bottom);
357
+ font-weight: var(--dds-font-semibold);
358
+ }
359
+ /* Caution variant - red */
360
+ .dds-callout-caution {
361
+ border-color: var(--dds-callout-caution-border);
362
+ background-color: var(--dds-callout-caution-bg);
363
+ }
364
+ .dds-callout-title-caution {
365
+ color: var(--dds-callout-caution-title);
366
+ }
367
+ /* Important variant - yellow/orange */
368
+ .dds-callout-important {
369
+ border-color: var(--dds-callout-important-border);
370
+ background-color: var(--dds-callout-important-bg);
371
+ }
372
+ .dds-callout-title-important {
373
+ color: var(--dds-callout-important-title);
374
+ }
375
+ /* Tip variant - blue */
376
+ .dds-callout-tip {
377
+ border-color: var(--dds-callout-tip-border);
378
+ background-color: var(--dds-callout-tip-bg);
379
+ }
380
+ .dds-callout-title-tip {
381
+ color: var(--dds-callout-tip-title);
382
+ }
383
+ /* Course variant - green */
384
+ .dds-callout-course {
385
+ border-color: var(--dds-callout-course-border);
386
+ background-color: var(--dds-callout-course-bg);
387
+ }
388
+ .dds-callout-title-course {
389
+ color: var(--dds-callout-course-title);
390
+ }
391
+ a.no-text-decoration {
392
+ text-decoration: none;
393
+ }
394
+ .dds-card {
395
+ padding: var(--dds-card-padding);
396
+ border-radius: var(--dds-card-radius);
397
+ }
398
+ .dds-card-clickable {
399
+ cursor: pointer;
400
+ transition: var(--dds-transition-shadow);
401
+ }
402
+ .dds-card-clickable:hover {
403
+ box-shadow: var(--dds-card-shadow-hover);
404
+ }
405
+ .dds-card-clickable > * {
406
+ text-decoration: none;
407
+ }
408
+ /* Background variants */
409
+ .dds-card-bg-blue {
410
+ background-color: var(--dds-card-bg-blue);
411
+ }
412
+ .dds-card-bg-green {
413
+ background-color: var(--dds-card-bg-green);
414
+ }
415
+ .dds-card-bg-purple {
416
+ background-color: var(--dds-card-bg-purple);
417
+ }
418
+ .dds-card-bg-red {
419
+ background-color: var(--dds-card-bg-red);
420
+ }
421
+ .dds-card-bg-yellow {
422
+ background-color: var(--dds-card-bg-yellow);
423
+ }
424
+ .dds-card-bg-gray {
425
+ background-color: var(--dds-card-bg-gray);
426
+ }
427
+ .dds-card-bg-white {
428
+ background-color: var(--dds-card-bg-white);
429
+ border: 1px solid var(--dds-card-border);
430
+ }
431
+ /* Title color variants */
432
+ .dds-card-title {
433
+ margin-bottom: var(--dds-card-title-margin-bottom);
434
+ font-size: var(--dds-text-lg-size);
435
+ font-weight: var(--dds-font-semibold);
436
+ }
437
+ .dds-card-title-blue {
438
+ color: var(--dds-card-title-blue);
439
+ }
440
+ .dds-card-title-green {
441
+ color: var(--dds-card-title-green);
442
+ }
443
+ .dds-card-title-purple {
444
+ color: var(--dds-card-title-purple);
445
+ }
446
+ .dds-card-title-red {
447
+ color: var(--dds-card-title-red);
448
+ }
449
+ .dds-card-title-yellow {
450
+ color: var(--dds-card-title-yellow);
451
+ }
452
+ .dds-card-title-gray {
453
+ color: var(--dds-card-title-gray);
454
+ }
455
+ /* Text color variants */
456
+ .dds-card-text-blue {
457
+ color: var(--dds-card-text-blue);
458
+ }
459
+ .dds-card-text-green {
460
+ color: var(--dds-card-text-green);
461
+ }
462
+ .dds-card-text-purple {
463
+ color: var(--dds-card-text-purple);
464
+ }
465
+ .dds-card-text-red {
466
+ color: var(--dds-card-text-red);
467
+ }
468
+ .dds-card-text-yellow {
469
+ color: var(--dds-card-text-yellow);
470
+ }
471
+ .dds-card-text-gray {
472
+ color: var(--dds-card-text-gray);
473
+ }
474
+ .dds-card-grid {
475
+ display: grid;
476
+ gap: 1.5rem; /* gap-6 */
477
+ }
478
+ .dds-card-grid-2 {
479
+ grid-template-columns: 1fr;
480
+ }
481
+ @media (min-width: 768px) {
482
+ .dds-card-grid-2 {
483
+ grid-template-columns: repeat(2, 1fr);
484
+ }
485
+ }
486
+ .dds-card-grid-3 {
487
+ grid-template-columns: 1fr;
488
+ }
489
+ @media (min-width: 768px) {
490
+ .dds-card-grid-3 {
491
+ grid-template-columns: repeat(2, 1fr);
492
+ }
493
+ }
494
+ @media (min-width: 1024px) {
495
+ .dds-card-grid-3 {
496
+ grid-template-columns: repeat(3, 1fr);
497
+ }
498
+ }
499
+ .dds-card-grid-4 {
500
+ grid-template-columns: 1fr;
501
+ }
502
+ @media (min-width: 768px) {
503
+ .dds-card-grid-4 {
504
+ grid-template-columns: repeat(2, 1fr);
505
+ }
506
+ }
507
+ @media (min-width: 1024px) {
508
+ .dds-card-grid-4 {
509
+ grid-template-columns: repeat(4, 1fr);
510
+ }
511
+ }
512
+ .dds-collapser {
513
+ display: flex;
514
+ flex-direction: column;
515
+ margin: 1rem 0;
516
+ border-radius: var(--dds-collapser-radius);
517
+ border: 1px solid var(--dds-collapser-border);
518
+ box-shadow: var(--dds-collapser-shadow);
519
+ }
520
+ .dds-collapser-button {
521
+ cursor: pointer;
522
+ padding: var(--dds-collapser-button-padding);
523
+ display: flex;
524
+ align-items: center;
525
+ transition: var(--dds-transition-colors);
526
+ border: none;
527
+ background: transparent;
528
+ width: 100%;
529
+ text-align: left;
530
+ }
531
+ .dds-collapser-button:hover,
532
+ .dds-collapser-button:focus {
533
+ background-color: var(--dds-collapser-button-hover-bg);
534
+ outline: none;
535
+ }
536
+ .dds-collapser-title {
537
+ display: flex;
538
+ align-items: center;
539
+ flex: 1;
540
+ font-size: var(--dds-text-base-size);
541
+ margin: 0;
542
+ font-weight: bold;
543
+ color: var(--dds-heading-color);
544
+ }
545
+ .dds-collapser-icon {
546
+ margin-left: auto;
547
+ transition: transform 0.3s ease;
548
+ color: var(--dds-collapser-icon-color);
549
+ flex-shrink: 0;
550
+ }
551
+ .dds-collapser-icon-open {
552
+ transform: rotate(180deg);
553
+ }
554
+ .dds-collapser-content-wrapper {
555
+ overflow: hidden;
556
+ transition: height 0.3s ease;
557
+ }
558
+ .dds-collapser-content {
559
+ border-top: 1px solid var(--dds-collapser-border);
560
+ padding: var(--dds-collapser-content-padding);
561
+ }
562
+ .dds-code-block {
563
+ border: 1px solid var(--dds-code-block-border, #e5e7eb);
564
+ border-radius: var(--dds-code-block-radius, 8px);
565
+ background-color: var(--dds-code-block-bg, #ffffff);
566
+ overflow: hidden;
567
+ margin: var(--dds-code-block-margin, 1rem 0);
568
+ }
569
+ .dds-code-block-header {
570
+ display: flex;
571
+ justify-content: space-between;
572
+ align-items: flex-end;
573
+ padding: 0;
574
+ background-color: var(--dds-code-block-header-bg, #ffffff);
575
+ border-bottom: 1px solid var(--dds-code-block-border, #e5e7eb);
576
+ min-height: 2.75rem;
577
+ overflow: hidden;
578
+ }
579
+ .dds-code-block-header-left {
580
+ display: flex;
581
+ align-items: flex-end;
582
+ flex: 1;
583
+ min-width: 0;
584
+ }
585
+ .dds-code-block-header-right {
586
+ display: flex;
587
+ align-items: center;
588
+ gap: var(--dds-code-block-header-gap, 0.75rem);
589
+ margin-left: auto;
590
+ padding: var(--dds-code-block-header-padding, 0.75rem 1rem);
591
+ padding-left: 0.5rem;
592
+ }
593
+ .dds-code-block-tabs {
594
+ display: flex;
595
+ gap: 0;
596
+ overflow-x: auto;
597
+ overflow-y: hidden;
598
+ -webkit-overflow-scrolling: touch;
599
+ align-items: flex-end;
600
+ /* Hide scrollbar but keep functionality */
601
+ scrollbar-width: none; /* Firefox */
602
+ -ms-overflow-style: none; /* IE and Edge */
603
+ }
604
+ .dds-code-block-tabs::-webkit-scrollbar {
605
+ display: none; /* Chrome, Safari, Opera */
606
+ }
607
+ .dds-code-block-tab {
608
+ padding: var(--dds-code-block-tab-padding, 0.5rem 1rem);
609
+ background-color: var(--dds-code-block-tab-bg, #f3f4f6);
610
+ border: 1px solid var(--dds-code-block-border, #e5e7eb);
611
+ border-bottom: none;
612
+ border-top-left-radius: var(--dds-code-block-tab-radius, 6px);
613
+ border-top-right-radius: var(--dds-code-block-tab-radius, 6px);
614
+ color: var(--dds-code-block-tab-text, #6b7280);
615
+ font-size: var(--dds-code-block-tab-size, 0.875rem);
616
+ font-weight: var(--dds-font-medium);
617
+ cursor: pointer;
618
+ white-space: nowrap;
619
+ transition: var(--dds-transition-colors);
620
+ margin-right: 2px;
621
+ position: relative;
622
+ }
623
+ .dds-code-block-tab:hover {
624
+ color: var(--dds-code-block-tab-text-hover, #374151);
625
+ background-color: var(--dds-code-block-tab-bg-hover, #e5e7eb);
626
+ }
627
+ .dds-code-block-tab-active {
628
+ color: var(--dds-code-block-tab-text-active, #111827);
629
+ background-color: var(--dds-code-block-tab-bg-active, #ffffff);
630
+ border-color: var(--dds-code-block-border, #e5e7eb);
631
+ z-index: 1;
632
+ /* Connect to content area */
633
+ margin-bottom: -1px;
634
+ padding-bottom: calc(var(--dds-code-block-tab-padding, 0.5rem) + 1px);
635
+ }
636
+ .dds-code-block-tab-active:hover {
637
+ background-color: var(--dds-code-block-tab-bg-active, #ffffff);
638
+ }
639
+ .dds-code-block-language-select {
640
+ padding: var(--dds-code-block-select-padding, 0.375rem 0.75rem);
641
+ border: 1px solid var(--dds-code-block-select-border, #d1d5db);
642
+ border-radius: var(--dds-code-block-select-radius, 4px);
643
+ background-color: var(--dds-code-block-select-bg, #ffffff);
644
+ color: var(--dds-code-block-select-text, #374151);
645
+ font-size: var(--dds-code-block-select-size, 0.875rem);
646
+ cursor: pointer;
647
+ transition: var(--dds-transition-colors);
648
+ }
649
+ .dds-code-block-language-select:hover {
650
+ border-color: var(--dds-code-block-select-border-hover, #9ca3af);
651
+ }
652
+ .dds-code-block-language-select:focus {
653
+ outline: none;
654
+ border-color: var(--dds-code-block-select-border-focus, #3b82f6);
655
+ box-shadow: 0 0 0 3px var(--dds-code-block-select-focus-ring, rgba(59, 130, 246, 0.1));
656
+ }
657
+ .dds-code-block-language-label {
658
+ font-size: var(--dds-code-block-label-size, 0.875rem);
659
+ color: var(--dds-code-block-label-text, #6b7280);
660
+ font-weight: var(--dds-font-medium);
661
+ text-transform: uppercase;
662
+ letter-spacing: 0.05em;
663
+ }
664
+ .dds-code-block-copy-button {
665
+ padding: var(--dds-code-block-copy-padding, 0.375rem 0.75rem);
666
+ background-color: var(--dds-code-block-copy-bg, #ffffff);
667
+ border: 1px solid var(--dds-code-block-copy-border, #d1d5db);
668
+ border-radius: var(--dds-code-block-copy-radius, 4px);
669
+ color: var(--dds-code-block-copy-text, #374151);
670
+ font-size: var(--dds-code-block-copy-size, 0.875rem);
671
+ font-weight: var(--dds-font-medium);
672
+ cursor: pointer;
673
+ transition: var(--dds-transition-colors);
674
+ white-space: nowrap;
675
+ }
676
+ .dds-code-block-copy-button:hover {
677
+ background-color: var(--dds-code-block-copy-bg-hover, #f9fafb);
678
+ border-color: var(--dds-code-block-copy-border-hover, #9ca3af);
679
+ }
680
+ .dds-code-block-copy-button:active {
681
+ background-color: var(--dds-code-block-copy-bg-active, #f3f4f6);
682
+ }
683
+ .dds-code-block-content {
684
+ position: relative;
685
+ overflow-x: auto;
686
+ overflow-y: hidden;
687
+ background-color: var(--dds-code-block-content-bg, #f9fafb);
688
+ }
689
+ .dds-code-block-content pre {
690
+ margin: 0;
691
+ padding: var(--dds-code-block-pre-padding, 1rem);
692
+ overflow: visible;
693
+ font-family: var(--dds-code-block-font-family, 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace);
694
+ font-size: var(--dds-code-block-font-size, 0.875rem);
695
+ line-height: var(--dds-code-block-line-height, 1.5);
696
+ color: var(--dds-code-block-text, #111827);
697
+ background-color: transparent;
698
+ -webkit-font-smoothing: antialiased;
699
+ -moz-osx-font-smoothing: grayscale;
700
+ text-rendering: optimizeLegibility;
701
+ font-feature-settings: "liga" 0;
702
+ }
703
+ .dds-code-block-content code {
704
+ font-family: inherit;
705
+ font-size: inherit;
706
+ color: inherit;
707
+ background-color: transparent !important;
708
+ padding: 0;
709
+ border-radius: 0;
710
+ -webkit-font-smoothing: antialiased;
711
+ -moz-osx-font-smoothing: grayscale;
712
+ text-rendering: optimizeLegibility;
713
+ display: block;
714
+ white-space: pre;
715
+ }
716
+ /* Ensure no double rendering from nested elements */
717
+ .dds-code-block-content pre code {
718
+ display: block;
719
+ width: 100%;
720
+ }
721
+ .dds-code-block-line-highlights {
722
+ position: absolute;
723
+ top: 0;
724
+ left: 0;
725
+ right: 0;
726
+ bottom: 0;
727
+ pointer-events: none;
728
+ }
729
+ .dds-code-block-line-highlight {
730
+ position: absolute;
731
+ left: 0;
732
+ right: 0;
733
+ height: 1.5em;
734
+ background-color: var(--dds-code-block-highlight-bg, rgba(59, 130, 246, 0.2));
735
+ border-left: 3px solid var(--dds-code-block-highlight-border, #3b82f6);
736
+ }
737
+ .dds-code-block-loading,
738
+ .dds-code-block-error {
739
+ padding: var(--dds-code-block-message-padding, 1rem);
740
+ text-align: center;
741
+ border: 1px solid var(--dds-code-block-border, #e5e7eb);
742
+ border-radius: var(--dds-code-block-radius, 8px);
743
+ }
744
+ .dds-code-block-loading-text {
745
+ color: var(--dds-code-block-loading-text, #6b7280);
746
+ font-size: var(--dds-code-block-message-size, 0.875rem);
747
+ }
748
+ .dds-code-block-error-text {
749
+ color: var(--dds-code-block-error-text, #dc2626);
750
+ font-size: var(--dds-code-block-message-size, 0.875rem);
751
+ }
752
+ /* Prism theme overrides for light mode */
753
+ .dds-code-block-content .token.comment,
754
+ .dds-code-block-content .token.prolog,
755
+ .dds-code-block-content .token.doctype,
756
+ .dds-code-block-content .token.cdata {
757
+ color: #6b7280;
758
+ font-style: italic;
759
+ }
760
+ .dds-code-block-content .token.punctuation {
761
+ color: #374151;
762
+ }
763
+ .dds-code-block-content .token.property,
764
+ .dds-code-block-content .token.tag,
765
+ .dds-code-block-content .token.boolean,
766
+ .dds-code-block-content .token.number,
767
+ .dds-code-block-content .token.constant,
768
+ .dds-code-block-content .token.symbol,
769
+ .dds-code-block-content .token.deleted {
770
+ color: #dc2626;
771
+ }
772
+ .dds-code-block-content .token.selector,
773
+ .dds-code-block-content .token.attr-name,
774
+ .dds-code-block-content .token.string,
775
+ .dds-code-block-content .token.char,
776
+ .dds-code-block-content .token.builtin,
777
+ .dds-code-block-content .token.inserted {
778
+ color: #059669;
779
+ }
780
+ .dds-code-block-content .token.operator,
781
+ .dds-code-block-content .token.entity,
782
+ .dds-code-block-content .token.url,
783
+ .dds-code-block-content .language-css .token.string,
784
+ .dds-code-block-content .style .token.string {
785
+ color: #d97706;
786
+ background-color: transparent !important;
787
+ background: none !important;
788
+ }
789
+ /* Override any Prism theme backgrounds */
790
+ .dds-code-block-content .token.operator * {
791
+ background-color: transparent !important;
792
+ background: none !important;
793
+ }
794
+ .dds-code-block-content .token.atrule,
795
+ .dds-code-block-content .token.attr-value,
796
+ .dds-code-block-content .token.keyword {
797
+ color: #2563eb;
798
+ }
799
+ .dds-code-block-content .token.function,
800
+ .dds-code-block-content .token.class-name {
801
+ color: #7c3aed;
802
+ }
803
+ .dds-code-block-content .token.regex,
804
+ .dds-code-block-content .token.important,
805
+ .dds-code-block-content .token.variable {
806
+ color: #ea580c;
807
+ }
808
+ .dds-typography {
809
+ color: var(--dds-heading-color);
810
+ }
811
+ .dds-typography-h1 {
812
+ font-size: var(--dds-heading-1-size);
813
+ font-weight: var(--dds-font-bold);
814
+ line-height: var(--dds-line-height-tight);
815
+ }
816
+ .dds-typography-h2 {
817
+ font-size: var(--dds-heading-2-size);
818
+ font-weight: var(--dds-font-semibold);
819
+ line-height: var(--dds-line-height-tight);
820
+ }
821
+ .dds-typography-h3 {
822
+ font-size: var(--dds-heading-3-size);
823
+ font-weight: var(--dds-font-medium);
824
+ line-height: var(--dds-line-height-tight);
825
+ }
826
+ .dds-typography-h4 {
827
+ font-size: var(--dds-heading-4-size);
828
+ font-weight: var(--dds-font-medium);
829
+ line-height: var(--dds-line-height-tight);
830
+ }
831
+ .dds-typography-p {
832
+ font-size: var(--dds-text-base-size);
833
+ line-height: var(--dds-line-height-relaxed);
834
+ }
835
+ .dds-typography-caption {
836
+ font-size: var(--dds-text-sm-size);
837
+ color: #4b5563; /* gray-600 */
838
+ }
839
+ .dds-link {
840
+ color: var(--dds-link-color);
841
+ text-decoration: underline;
842
+ text-decoration-color: var(--dds-link-decoration);
843
+ transition: var(--dds-transition-colors);
844
+ }
845
+ .dds-link:hover {
846
+ color: var(--dds-link-color-hover);
847
+ text-decoration-color: var(--dds-link-decoration-hover);
848
+ }
849
+ .dds-link-icon {
850
+ display: inline-block;
851
+ width: 1rem; /* w-4 */
852
+ height: 1rem; /* h-4 */
853
+ margin-left: 0.25rem; /* ml-1 */
854
+ margin-bottom: 0.25rem; /* mb-1 */
855
+ vertical-align: middle;
856
+ }
857
+