cmx-sdk 0.2.13 → 0.2.15

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.
@@ -0,0 +1,686 @@
1
+ /*
2
+ * CMX MDX Components — Default Stylesheet
3
+ *
4
+ * CSS variables with sensible defaults.
5
+ * Override :root variables to customize all MDX component styles.
6
+ * Styles are in @layer cmx-mdx so user CSS always takes precedence.
7
+ */
8
+
9
+ :root {
10
+ /* ─── Global Tokens ─── */
11
+ --cmx-mdx-fg: #111827;
12
+ --cmx-mdx-muted-fg: #6b7280;
13
+ --cmx-mdx-light-fg: #9ca3af;
14
+ --cmx-mdx-accent: #2563eb;
15
+ --cmx-mdx-accent-hover: #1d4ed8;
16
+ --cmx-mdx-link: #2563eb;
17
+ --cmx-mdx-link-hover: rgba(37, 99, 235, 0.8);
18
+ --cmx-mdx-border: #e5e7eb;
19
+ --cmx-mdx-border-light: #f3f4f6;
20
+ --cmx-mdx-radius: 0.5rem;
21
+ --cmx-mdx-radius-sm: 0.25rem;
22
+ --cmx-mdx-radius-xl: 0.75rem;
23
+ --cmx-mdx-spacing: 1rem;
24
+ --cmx-mdx-spacing-sm: 0.5rem;
25
+ --cmx-mdx-font-size-sm: 0.875rem;
26
+ --cmx-mdx-font-size-xs: 0.75rem;
27
+ --cmx-mdx-font-size-lg: 1.125rem;
28
+
29
+ /* ─── Card Tokens (Twitter, Audio, Details, FileDownload, ToC etc.) ─── */
30
+ --cmx-mdx-card-bg: #f9fafb;
31
+ --cmx-mdx-card-border: #e5e7eb;
32
+ --cmx-mdx-card-radius: var(--cmx-mdx-radius);
33
+ --cmx-mdx-card-padding: 1rem;
34
+
35
+ /* ─── Callout Tokens ─── */
36
+ --cmx-mdx-callout-info-bg: #eff6ff;
37
+ --cmx-mdx-callout-info-border: #bfdbfe;
38
+ --cmx-mdx-callout-info-fg: #1e40af;
39
+ --cmx-mdx-callout-info-icon: #3b82f6;
40
+ --cmx-mdx-callout-warning-bg: #fefce8;
41
+ --cmx-mdx-callout-warning-border: #fde68a;
42
+ --cmx-mdx-callout-warning-fg: #854d0e;
43
+ --cmx-mdx-callout-warning-icon: #eab308;
44
+ --cmx-mdx-callout-error-bg: #fef2f2;
45
+ --cmx-mdx-callout-error-border: #fecaca;
46
+ --cmx-mdx-callout-error-fg: #991b1b;
47
+ --cmx-mdx-callout-error-icon: #ef4444;
48
+ --cmx-mdx-callout-success-bg: #f0fdf4;
49
+ --cmx-mdx-callout-success-border: #bbf7d0;
50
+ --cmx-mdx-callout-success-fg: #166534;
51
+ --cmx-mdx-callout-success-icon: #22c55e;
52
+ --cmx-mdx-callout-tip-bg: #faf5ff;
53
+ --cmx-mdx-callout-tip-border: #e9d5ff;
54
+ --cmx-mdx-callout-tip-fg: #6b21a8;
55
+ --cmx-mdx-callout-tip-icon: #a855f7;
56
+
57
+ /* ─── Button Tokens ─── */
58
+ --cmx-mdx-button-primary-bg: #2563eb;
59
+ --cmx-mdx-button-primary-fg: #ffffff;
60
+ --cmx-mdx-button-primary-hover: #1d4ed8;
61
+ --cmx-mdx-button-secondary-bg: #4b5563;
62
+ --cmx-mdx-button-secondary-fg: #ffffff;
63
+ --cmx-mdx-button-secondary-hover: #374151;
64
+ --cmx-mdx-button-outline-bg: transparent;
65
+ --cmx-mdx-button-outline-fg: #374151;
66
+ --cmx-mdx-button-outline-border: #d1d5db;
67
+ --cmx-mdx-button-outline-hover: #f9fafb;
68
+
69
+ /* ─── Tabs Tokens ─── */
70
+ --cmx-mdx-tabs-border: #e5e7eb;
71
+ --cmx-mdx-tabs-header-bg: #f9fafb;
72
+ --cmx-mdx-tabs-active-fg: #2563eb;
73
+ --cmx-mdx-tabs-active-border: #2563eb;
74
+ --cmx-mdx-tabs-active-bg: #ffffff;
75
+ --cmx-mdx-tabs-inactive-fg: #6b7280;
76
+ --cmx-mdx-tabs-inactive-hover: #374151;
77
+
78
+ /* ─── Code Block Tokens ─── */
79
+ --cmx-mdx-pre-bg: #0f172a;
80
+ --cmx-mdx-pre-fg: #e2e8f0;
81
+ --cmx-mdx-code-bg: hsl(210 40% 96.1%);
82
+ --cmx-mdx-code-fg: inherit;
83
+
84
+ /* ─── BlogCard Tokens ─── */
85
+ --cmx-mdx-blogcard-border: #e5e7eb;
86
+ --cmx-mdx-blogcard-hover-border: #60a5fa;
87
+ --cmx-mdx-blogcard-title-fg: #111827;
88
+ --cmx-mdx-blogcard-excerpt-fg: #4b5563;
89
+ --cmx-mdx-blogcard-unresolved-border: #d1d5db;
90
+
91
+ /* ─── Social Link Colors ─── */
92
+ --cmx-mdx-twitter-link: #3b82f6;
93
+ --cmx-mdx-instagram-link: #ec4899;
94
+ --cmx-mdx-bluesky-link: #3b82f6;
95
+ --cmx-mdx-tiktok-link: #374151;
96
+ --cmx-mdx-filedownload-link: #2563eb;
97
+
98
+ /* ─── Markdown Element Tokens ─── */
99
+ --cmx-mdx-heading-font-weight: 700;
100
+ --cmx-mdx-h1-size: 2.25rem;
101
+ --cmx-mdx-h2-size: 1.875rem;
102
+ --cmx-mdx-h3-size: 1.5rem;
103
+ --cmx-mdx-h4-size: 1.25rem;
104
+ --cmx-mdx-h5-size: 1.125rem;
105
+ --cmx-mdx-h6-size: 1rem;
106
+ --cmx-mdx-table-header-bg: hsl(210 40% 96.1%);
107
+ --cmx-mdx-table-border: var(--cmx-mdx-border);
108
+ }
109
+
110
+ @layer cmx-mdx {
111
+ /* ================================================================
112
+ * Card-like components (shared pattern)
113
+ * Twitter, Instagram, Bluesky, Audio, TableOfContents, FileDownload
114
+ * ================================================================ */
115
+ .cmx-mdx__twitter,
116
+ .cmx-mdx__instagram,
117
+ .cmx-mdx__bluesky,
118
+ .cmx-mdx__audio,
119
+ .cmx-mdx__toc,
120
+ .cmx-mdx__details,
121
+ .cmx-mdx__filedownload {
122
+ margin-block: var(--cmx-mdx-spacing);
123
+ border: 1px solid var(--cmx-mdx-card-border);
124
+ border-radius: var(--cmx-mdx-card-radius);
125
+ padding: var(--cmx-mdx-card-padding);
126
+ background: var(--cmx-mdx-card-bg);
127
+ }
128
+
129
+ /* ─── Twitter ─── */
130
+ .cmx-mdx__twitter-label {
131
+ font-size: var(--cmx-mdx-font-size-sm);
132
+ color: var(--cmx-mdx-muted-fg);
133
+ margin-bottom: 0.25rem;
134
+ }
135
+ .cmx-mdx__twitter-link {
136
+ font-size: var(--cmx-mdx-font-size-sm);
137
+ color: var(--cmx-mdx-twitter-link);
138
+ }
139
+ .cmx-mdx__twitter-link:hover {
140
+ text-decoration: underline;
141
+ }
142
+
143
+ /* ─── Instagram ─── */
144
+ .cmx-mdx__instagram-label {
145
+ font-size: var(--cmx-mdx-font-size-sm);
146
+ color: var(--cmx-mdx-muted-fg);
147
+ margin-bottom: 0.25rem;
148
+ }
149
+ .cmx-mdx__instagram-link {
150
+ font-size: var(--cmx-mdx-font-size-sm);
151
+ color: var(--cmx-mdx-instagram-link);
152
+ }
153
+ .cmx-mdx__instagram-link:hover {
154
+ text-decoration: underline;
155
+ }
156
+
157
+ /* ─── Bluesky ─── */
158
+ .cmx-mdx__bluesky-label {
159
+ font-size: var(--cmx-mdx-font-size-sm);
160
+ color: var(--cmx-mdx-muted-fg);
161
+ margin-bottom: 0.25rem;
162
+ }
163
+ .cmx-mdx__bluesky-link {
164
+ font-size: var(--cmx-mdx-font-size-sm);
165
+ color: var(--cmx-mdx-bluesky-link);
166
+ }
167
+ .cmx-mdx__bluesky-link:hover {
168
+ text-decoration: underline;
169
+ }
170
+
171
+ /* ─── TikTok ─── */
172
+ .cmx-mdx__tiktok {
173
+ margin-block: var(--cmx-mdx-spacing);
174
+ }
175
+ .cmx-mdx__tiktok--error {
176
+ border: 1px solid var(--cmx-mdx-card-border);
177
+ border-radius: var(--cmx-mdx-card-radius);
178
+ padding: var(--cmx-mdx-card-padding);
179
+ background: var(--cmx-mdx-card-bg);
180
+ }
181
+ .cmx-mdx__tiktok-label {
182
+ font-size: var(--cmx-mdx-font-size-sm);
183
+ color: var(--cmx-mdx-muted-fg);
184
+ margin-bottom: 0.25rem;
185
+ }
186
+ .cmx-mdx__tiktok-link {
187
+ font-size: var(--cmx-mdx-font-size-sm);
188
+ color: var(--cmx-mdx-tiktok-link);
189
+ }
190
+ .cmx-mdx__tiktok-link:hover {
191
+ text-decoration: underline;
192
+ }
193
+ .cmx-mdx__tiktok-iframe {
194
+ border-radius: var(--cmx-mdx-radius);
195
+ }
196
+
197
+ /* ─── Audio ─── */
198
+ .cmx-mdx__audio-title {
199
+ font-size: var(--cmx-mdx-font-size-sm);
200
+ font-weight: 500;
201
+ color: var(--cmx-mdx-fg);
202
+ margin-bottom: var(--cmx-mdx-spacing-sm);
203
+ }
204
+
205
+ /* ─── Video ─── */
206
+ .cmx-mdx__video {
207
+ margin-block: var(--cmx-mdx-spacing);
208
+ }
209
+ .cmx-mdx__video-title {
210
+ font-size: var(--cmx-mdx-font-size-sm);
211
+ font-weight: 500;
212
+ color: var(--cmx-mdx-fg);
213
+ margin-bottom: var(--cmx-mdx-spacing-sm);
214
+ }
215
+ .cmx-mdx__video-player {
216
+ border-radius: var(--cmx-mdx-radius);
217
+ }
218
+
219
+ /* ─── Details ─── */
220
+ .cmx-mdx__details-summary {
221
+ padding: 0.75rem var(--cmx-mdx-card-padding);
222
+ font-weight: 500;
223
+ color: var(--cmx-mdx-fg);
224
+ border-radius: var(--cmx-mdx-card-radius);
225
+ }
226
+ .cmx-mdx__details-summary:hover {
227
+ background: var(--cmx-mdx-card-bg);
228
+ }
229
+ .cmx-mdx__details-content {
230
+ padding: 0.5rem var(--cmx-mdx-card-padding) var(--cmx-mdx-card-padding);
231
+ font-size: var(--cmx-mdx-font-size-sm);
232
+ color: var(--cmx-mdx-fg);
233
+ border-top: 1px solid var(--cmx-mdx-border-light);
234
+ }
235
+
236
+ /* ─── TableOfContents ─── */
237
+ .cmx-mdx__toc-title {
238
+ font-size: var(--cmx-mdx-font-size-sm);
239
+ font-weight: 600;
240
+ color: var(--cmx-mdx-fg);
241
+ margin-bottom: var(--cmx-mdx-spacing-sm);
242
+ }
243
+ .cmx-mdx__toc-placeholder {
244
+ font-size: var(--cmx-mdx-font-size-xs);
245
+ color: var(--cmx-mdx-light-fg);
246
+ }
247
+
248
+ /* ─── FileDownload ─── */
249
+ .cmx-mdx__filedownload-icon {
250
+ width: 1.25rem;
251
+ height: 1.25rem;
252
+ color: var(--cmx-mdx-light-fg);
253
+ }
254
+ .cmx-mdx__filedownload-link {
255
+ font-size: var(--cmx-mdx-font-size-sm);
256
+ font-weight: 500;
257
+ color: var(--cmx-mdx-filedownload-link);
258
+ }
259
+ .cmx-mdx__filedownload-link:hover {
260
+ text-decoration: underline;
261
+ }
262
+ .cmx-mdx__filedownload-size {
263
+ font-size: var(--cmx-mdx-font-size-xs);
264
+ color: var(--cmx-mdx-light-fg);
265
+ margin-top: 0.125rem;
266
+ }
267
+
268
+ /* ================================================================
269
+ * Embed / iframe components
270
+ * YouTube, Vimeo, Spotify, Gist, CodePen, CodeSandbox, GoogleMap, Embed
271
+ * ================================================================ */
272
+ .cmx-mdx__youtube,
273
+ .cmx-mdx__vimeo,
274
+ .cmx-mdx__spotify,
275
+ .cmx-mdx__gist,
276
+ .cmx-mdx__codepen,
277
+ .cmx-mdx__codesandbox,
278
+ .cmx-mdx__googlemap,
279
+ .cmx-mdx__embed {
280
+ margin-block: var(--cmx-mdx-spacing);
281
+ }
282
+
283
+ /* Error state for embed components */
284
+ .cmx-mdx__youtube--error,
285
+ .cmx-mdx__vimeo--error,
286
+ .cmx-mdx__spotify--error,
287
+ .cmx-mdx__tiktok--error,
288
+ .cmx-mdx__gist--error,
289
+ .cmx-mdx__codepen--error,
290
+ .cmx-mdx__codesandbox--error {
291
+ border: 1px solid var(--cmx-mdx-card-border);
292
+ border-radius: var(--cmx-mdx-card-radius);
293
+ padding: var(--cmx-mdx-card-padding);
294
+ background: var(--cmx-mdx-card-bg);
295
+ }
296
+ .cmx-mdx__error-text {
297
+ font-size: var(--cmx-mdx-font-size-sm);
298
+ color: var(--cmx-mdx-muted-fg);
299
+ }
300
+
301
+ /* iframes */
302
+ .cmx-mdx__youtube-iframe,
303
+ .cmx-mdx__vimeo-iframe,
304
+ .cmx-mdx__embed-iframe {
305
+ border-radius: var(--cmx-mdx-radius);
306
+ }
307
+ .cmx-mdx__spotify-iframe {
308
+ border-radius: var(--cmx-mdx-radius-xl);
309
+ }
310
+ .cmx-mdx__gist-iframe,
311
+ .cmx-mdx__codepen-iframe,
312
+ .cmx-mdx__codesandbox-iframe {
313
+ border-radius: var(--cmx-mdx-radius);
314
+ border: 1px solid var(--cmx-mdx-card-border);
315
+ }
316
+ .cmx-mdx__googlemap-iframe {
317
+ border-radius: var(--cmx-mdx-radius);
318
+ border: 1px solid var(--cmx-mdx-card-border);
319
+ }
320
+
321
+ /* ================================================================
322
+ * Callout
323
+ * ================================================================ */
324
+ .cmx-mdx__callout {
325
+ margin-block: var(--cmx-mdx-spacing);
326
+ padding: var(--cmx-mdx-card-padding);
327
+ border: 1px solid;
328
+ border-radius: var(--cmx-mdx-radius);
329
+ }
330
+ .cmx-mdx__callout--info {
331
+ background: var(--cmx-mdx-callout-info-bg);
332
+ border-color: var(--cmx-mdx-callout-info-border);
333
+ color: var(--cmx-mdx-callout-info-fg);
334
+ }
335
+ .cmx-mdx__callout--warning {
336
+ background: var(--cmx-mdx-callout-warning-bg);
337
+ border-color: var(--cmx-mdx-callout-warning-border);
338
+ color: var(--cmx-mdx-callout-warning-fg);
339
+ }
340
+ .cmx-mdx__callout--error {
341
+ background: var(--cmx-mdx-callout-error-bg);
342
+ border-color: var(--cmx-mdx-callout-error-border);
343
+ color: var(--cmx-mdx-callout-error-fg);
344
+ }
345
+ .cmx-mdx__callout--success {
346
+ background: var(--cmx-mdx-callout-success-bg);
347
+ border-color: var(--cmx-mdx-callout-success-border);
348
+ color: var(--cmx-mdx-callout-success-fg);
349
+ }
350
+ .cmx-mdx__callout--tip {
351
+ background: var(--cmx-mdx-callout-tip-bg);
352
+ border-color: var(--cmx-mdx-callout-tip-border);
353
+ color: var(--cmx-mdx-callout-tip-fg);
354
+ }
355
+ .cmx-mdx__callout-icon {
356
+ width: 1.25rem;
357
+ height: 1.25rem;
358
+ margin-top: 0.125rem;
359
+ }
360
+ .cmx-mdx__callout--info .cmx-mdx__callout-icon { color: var(--cmx-mdx-callout-info-icon); }
361
+ .cmx-mdx__callout--warning .cmx-mdx__callout-icon { color: var(--cmx-mdx-callout-warning-icon); }
362
+ .cmx-mdx__callout--error .cmx-mdx__callout-icon { color: var(--cmx-mdx-callout-error-icon); }
363
+ .cmx-mdx__callout--success .cmx-mdx__callout-icon { color: var(--cmx-mdx-callout-success-icon); }
364
+ .cmx-mdx__callout--tip .cmx-mdx__callout-icon { color: var(--cmx-mdx-callout-tip-icon); }
365
+ .cmx-mdx__callout-title {
366
+ font-weight: 600;
367
+ margin-bottom: 0.25rem;
368
+ }
369
+ .cmx-mdx__callout-text {
370
+ font-size: var(--cmx-mdx-font-size-sm);
371
+ }
372
+
373
+ /* ================================================================
374
+ * Button
375
+ * ================================================================ */
376
+ .cmx-mdx__button {
377
+ display: inline-block;
378
+ padding: 0.5rem 1rem;
379
+ border-radius: var(--cmx-mdx-radius);
380
+ font-weight: 500;
381
+ transition: background-color 0.15s, color 0.15s, border-color 0.15s;
382
+ text-decoration: none;
383
+ }
384
+ .cmx-mdx__button--primary {
385
+ background: var(--cmx-mdx-button-primary-bg);
386
+ color: var(--cmx-mdx-button-primary-fg);
387
+ }
388
+ .cmx-mdx__button--primary:hover {
389
+ background: var(--cmx-mdx-button-primary-hover);
390
+ }
391
+ .cmx-mdx__button--secondary {
392
+ background: var(--cmx-mdx-button-secondary-bg);
393
+ color: var(--cmx-mdx-button-secondary-fg);
394
+ }
395
+ .cmx-mdx__button--secondary:hover {
396
+ background: var(--cmx-mdx-button-secondary-hover);
397
+ }
398
+ .cmx-mdx__button--outline {
399
+ background: var(--cmx-mdx-button-outline-bg);
400
+ color: var(--cmx-mdx-button-outline-fg);
401
+ border: 1px solid var(--cmx-mdx-button-outline-border);
402
+ }
403
+ .cmx-mdx__button--outline:hover {
404
+ background: var(--cmx-mdx-button-outline-hover);
405
+ }
406
+
407
+ /* ================================================================
408
+ * Tabs
409
+ * ================================================================ */
410
+ .cmx-mdx__tabs {
411
+ margin-block: var(--cmx-mdx-spacing);
412
+ border: 1px solid var(--cmx-mdx-tabs-border);
413
+ border-radius: var(--cmx-mdx-radius);
414
+ }
415
+ .cmx-mdx__tabs-header {
416
+ border-bottom: 1px solid var(--cmx-mdx-tabs-border);
417
+ background: var(--cmx-mdx-tabs-header-bg);
418
+ }
419
+ .cmx-mdx__tabs-button {
420
+ padding: 0.5rem 1rem;
421
+ font-size: var(--cmx-mdx-font-size-sm);
422
+ font-weight: 500;
423
+ transition: color 0.15s, border-color 0.15s, background-color 0.15s;
424
+ color: var(--cmx-mdx-tabs-inactive-fg);
425
+ }
426
+ .cmx-mdx__tabs-button:hover {
427
+ color: var(--cmx-mdx-tabs-inactive-hover);
428
+ }
429
+ .cmx-mdx__tabs-button--active {
430
+ color: var(--cmx-mdx-tabs-active-fg);
431
+ border-bottom: 2px solid var(--cmx-mdx-tabs-active-border);
432
+ background: var(--cmx-mdx-tabs-active-bg);
433
+ margin-bottom: -1px;
434
+ }
435
+ .cmx-mdx__tabs-content {
436
+ padding: var(--cmx-mdx-card-padding);
437
+ }
438
+
439
+ /* ================================================================
440
+ * Columns
441
+ * ================================================================ */
442
+ .cmx-mdx__columns {
443
+ margin-block: var(--cmx-mdx-spacing);
444
+ }
445
+
446
+ /* ================================================================
447
+ * Gallery
448
+ * ================================================================ */
449
+ .cmx-mdx__gallery {
450
+ margin-block: var(--cmx-mdx-spacing);
451
+ }
452
+ .cmx-mdx__gallery-item {
453
+ border-radius: var(--cmx-mdx-radius);
454
+ background: var(--cmx-mdx-border-light);
455
+ }
456
+ .cmx-mdx__gallery-placeholder {
457
+ color: var(--cmx-mdx-light-fg);
458
+ font-size: var(--cmx-mdx-font-size-xs);
459
+ }
460
+ .cmx-mdx__gallery-caption {
461
+ font-size: var(--cmx-mdx-font-size-sm);
462
+ color: var(--cmx-mdx-muted-fg);
463
+ text-align: center;
464
+ margin-top: var(--cmx-mdx-spacing-sm);
465
+ }
466
+
467
+ /* ================================================================
468
+ * BlogCard
469
+ * ================================================================ */
470
+ .cmx-mdx__blogcard {
471
+ margin-block: var(--cmx-mdx-spacing);
472
+ }
473
+ .cmx-mdx__blogcard--unresolved {
474
+ border: 1px dashed var(--cmx-mdx-blogcard-unresolved-border);
475
+ border-radius: var(--cmx-mdx-card-radius);
476
+ padding: var(--cmx-mdx-card-padding);
477
+ background: var(--cmx-mdx-card-bg);
478
+ }
479
+ .cmx-mdx__blogcard--unresolved .cmx-mdx__blogcard-text {
480
+ font-size: var(--cmx-mdx-font-size-sm);
481
+ color: var(--cmx-mdx-muted-fg);
482
+ }
483
+ .cmx-mdx__blogcard-link {
484
+ display: block;
485
+ border: 1px solid var(--cmx-mdx-blogcard-border);
486
+ border-radius: var(--cmx-mdx-card-radius);
487
+ padding: var(--cmx-mdx-card-padding);
488
+ transition: border-color 0.15s, box-shadow 0.15s;
489
+ text-decoration: none;
490
+ }
491
+ .cmx-mdx__blogcard-link:hover {
492
+ border-color: var(--cmx-mdx-blogcard-hover-border);
493
+ box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1);
494
+ }
495
+ .cmx-mdx__blogcard-title {
496
+ font-size: var(--cmx-mdx-font-size-lg);
497
+ font-weight: 600;
498
+ color: var(--cmx-mdx-blogcard-title-fg);
499
+ margin-bottom: var(--cmx-mdx-spacing-sm);
500
+ }
501
+ .cmx-mdx__blogcard-excerpt {
502
+ font-size: var(--cmx-mdx-font-size-sm);
503
+ color: var(--cmx-mdx-blogcard-excerpt-fg);
504
+ }
505
+
506
+ /* ================================================================
507
+ * Image
508
+ * ================================================================ */
509
+ .cmx-mdx__image {
510
+ margin-block: var(--cmx-mdx-spacing);
511
+ }
512
+ .cmx-mdx__image--unresolved {
513
+ border: 1px dashed var(--cmx-mdx-blogcard-unresolved-border);
514
+ border-radius: var(--cmx-mdx-card-radius);
515
+ padding: 2rem;
516
+ background: var(--cmx-mdx-card-bg);
517
+ text-align: center;
518
+ }
519
+ .cmx-mdx__image--unresolved .cmx-mdx__image-id {
520
+ font-size: var(--cmx-mdx-font-size-sm);
521
+ color: var(--cmx-mdx-muted-fg);
522
+ }
523
+ .cmx-mdx__image--unresolved .cmx-mdx__image-size {
524
+ font-size: var(--cmx-mdx-font-size-xs);
525
+ color: var(--cmx-mdx-light-fg);
526
+ }
527
+ .cmx-mdx__image-img {
528
+ border-radius: var(--cmx-mdx-radius);
529
+ }
530
+ .cmx-mdx__image-caption {
531
+ margin-top: var(--cmx-mdx-spacing-sm);
532
+ font-size: var(--cmx-mdx-font-size-sm);
533
+ color: var(--cmx-mdx-muted-fg);
534
+ text-align: center;
535
+ }
536
+
537
+ /* ================================================================
538
+ * Markdown Elements
539
+ * ================================================================ */
540
+
541
+ /* Headings */
542
+ .cmx-mdx__h1 {
543
+ font-size: var(--cmx-mdx-h1-size);
544
+ font-weight: var(--cmx-mdx-heading-font-weight);
545
+ margin-top: 2rem;
546
+ margin-bottom: 1rem;
547
+ }
548
+ .cmx-mdx__h2 {
549
+ font-size: var(--cmx-mdx-h2-size);
550
+ font-weight: var(--cmx-mdx-heading-font-weight);
551
+ margin-top: 1.5rem;
552
+ margin-bottom: 0.75rem;
553
+ }
554
+ .cmx-mdx__h3 {
555
+ font-size: var(--cmx-mdx-h3-size);
556
+ font-weight: 600;
557
+ margin-top: 1rem;
558
+ margin-bottom: 0.5rem;
559
+ }
560
+ .cmx-mdx__h4 {
561
+ font-size: var(--cmx-mdx-h4-size);
562
+ font-weight: 600;
563
+ margin-top: 0.75rem;
564
+ margin-bottom: 0.5rem;
565
+ }
566
+ .cmx-mdx__h5 {
567
+ font-size: var(--cmx-mdx-h5-size);
568
+ font-weight: 500;
569
+ margin-top: 0.5rem;
570
+ margin-bottom: 0.25rem;
571
+ }
572
+ .cmx-mdx__h6 {
573
+ font-size: var(--cmx-mdx-h6-size);
574
+ font-weight: 500;
575
+ margin-top: 0.5rem;
576
+ margin-bottom: 0.25rem;
577
+ }
578
+
579
+ /* Paragraph */
580
+ .cmx-mdx__p {
581
+ margin-block: var(--cmx-mdx-spacing);
582
+ line-height: 1.75;
583
+ }
584
+
585
+ /* Lists */
586
+ .cmx-mdx__ul {
587
+ margin-block: var(--cmx-mdx-spacing);
588
+ padding-left: 1.5rem;
589
+ list-style-type: disc;
590
+ }
591
+ .cmx-mdx__ol {
592
+ margin-block: var(--cmx-mdx-spacing);
593
+ padding-left: 1.5rem;
594
+ list-style-type: decimal;
595
+ }
596
+ .cmx-mdx__li {
597
+ margin-block: 0.25rem;
598
+ }
599
+
600
+ /* Blockquote */
601
+ .cmx-mdx__blockquote {
602
+ border-left: 4px solid var(--cmx-mdx-accent);
603
+ padding-left: 1rem;
604
+ font-style: italic;
605
+ margin-block: var(--cmx-mdx-spacing);
606
+ }
607
+
608
+ /* Code */
609
+ .cmx-mdx__pre {
610
+ overflow-x: auto;
611
+ border-radius: var(--cmx-mdx-radius);
612
+ background: var(--cmx-mdx-pre-bg);
613
+ color: var(--cmx-mdx-pre-fg);
614
+ padding: var(--cmx-mdx-card-padding);
615
+ font-size: var(--cmx-mdx-font-size-sm);
616
+ margin-block: var(--cmx-mdx-spacing);
617
+ }
618
+ .cmx-mdx__code {
619
+ background: var(--cmx-mdx-code-bg);
620
+ color: var(--cmx-mdx-code-fg);
621
+ padding: 0.125rem 0.375rem;
622
+ border-radius: var(--cmx-mdx-radius-sm);
623
+ font-size: var(--cmx-mdx-font-size-sm);
624
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
625
+ }
626
+
627
+ /* Horizontal Rule */
628
+ .cmx-mdx__hr {
629
+ margin-block: 2rem;
630
+ border: none;
631
+ border-top: 1px solid var(--cmx-mdx-border);
632
+ }
633
+
634
+ /* Link */
635
+ .cmx-mdx__a {
636
+ color: var(--cmx-mdx-link);
637
+ text-decoration: underline;
638
+ text-underline-offset: 4px;
639
+ }
640
+ .cmx-mdx__a:hover {
641
+ color: var(--cmx-mdx-link-hover);
642
+ }
643
+
644
+ /* Image (markdown) */
645
+ .cmx-mdx__img {
646
+ max-width: 100%;
647
+ height: auto;
648
+ border-radius: var(--cmx-mdx-radius);
649
+ margin-block: var(--cmx-mdx-spacing);
650
+ }
651
+
652
+ /* Strong / Em */
653
+ .cmx-mdx__strong {
654
+ font-weight: var(--cmx-mdx-heading-font-weight);
655
+ }
656
+ .cmx-mdx__em {
657
+ font-style: italic;
658
+ }
659
+
660
+ /* Table */
661
+ .cmx-mdx__table-wrapper {
662
+ margin-block: var(--cmx-mdx-spacing);
663
+ overflow-x: auto;
664
+ }
665
+ .cmx-mdx__table {
666
+ min-width: 100%;
667
+ border-collapse: collapse;
668
+ border: 1px solid var(--cmx-mdx-table-border);
669
+ }
670
+ .cmx-mdx__thead {
671
+ background: var(--cmx-mdx-table-header-bg);
672
+ }
673
+ .cmx-mdx__tr {
674
+ border-bottom: 1px solid var(--cmx-mdx-table-border);
675
+ }
676
+ .cmx-mdx__th {
677
+ padding: 0.5rem 1rem;
678
+ text-align: left;
679
+ font-weight: 600;
680
+ border: 1px solid var(--cmx-mdx-table-border);
681
+ }
682
+ .cmx-mdx__td {
683
+ padding: 0.5rem 1rem;
684
+ border: 1px solid var(--cmx-mdx-table-border);
685
+ }
686
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cmx-sdk",
3
- "version": "0.2.13",
3
+ "version": "0.2.15",
4
4
  "description": "CMX SDK - Official SDK for building content-driven websites with CMX",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -32,7 +32,8 @@
32
32
  ".": {
33
33
  "types": "./dist/index.d.ts",
34
34
  "import": "./dist/index.js"
35
- }
35
+ },
36
+ "./styles/cmx-mdx.css": "./dist/styles/cmx-mdx.css"
36
37
  },
37
38
  "dependencies": {
38
39
  "@inquirer/prompts": "^8.2.1",
@@ -41,6 +42,7 @@
41
42
  "commander": "^12.1.0",
42
43
  "dotenv": "^16.6.1",
43
44
  "lucide-react": "^0.468.0",
45
+ "remark-gfm": "^4.0.1",
44
46
  "strip-json-comments": "^5.0.3",
45
47
  "tar": "^7.5.9",
46
48
  "zod": "^4.3.6"
@@ -66,6 +68,7 @@
66
68
  "test:contracts": "tsx scripts/check-cli-contracts.ts",
67
69
  "verify:release": "pnpm run check:sdk-command-api-usage && pnpm run check:generated-sync && pnpm run test:contracts",
68
70
  "build": "tsup",
71
+ "postbuild": "rm -rf dist/styles && cp -r src/mdx/styles dist/styles",
69
72
  "dev": "tsup --watch",
70
73
  "typecheck": "tsc --noEmit"
71
74
  }