@react-email/editor 0.0.0-experimental.4 → 0.0.0-experimental.40

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 (74) hide show
  1. package/dist/core/index.cjs +9 -0
  2. package/dist/core/index.d.cts +2 -0
  3. package/dist/core/index.d.mts +3 -0
  4. package/dist/core/index.mjs +4 -0
  5. package/dist/create-paste-handler-B8BtjBk3.d.cts +14 -0
  6. package/dist/create-paste-handler-B8BtjBk3.d.cts.map +1 -0
  7. package/dist/create-paste-handler-CGR738bC.d.mts +14 -0
  8. package/dist/create-paste-handler-CGR738bC.d.mts.map +1 -0
  9. package/dist/event-bus-CHEzOS_O.mjs +329 -0
  10. package/dist/event-bus-CHEzOS_O.mjs.map +1 -0
  11. package/dist/event-bus-fb8U7hrl.cjs +450 -0
  12. package/dist/extension-DyY8_bh4.mjs +1110 -0
  13. package/dist/extension-DyY8_bh4.mjs.map +1 -0
  14. package/dist/extension-w5VaUeSw.cjs +1235 -0
  15. package/dist/extensions/index.cjs +51 -0
  16. package/dist/extensions/index.d.cts +399 -0
  17. package/dist/extensions/index.d.cts.map +1 -0
  18. package/dist/extensions/index.d.mts +400 -0
  19. package/dist/extensions/index.d.mts.map +1 -0
  20. package/dist/extensions/index.mjs +5 -0
  21. package/dist/extensions-BvfmaKCn.mjs +2088 -0
  22. package/dist/extensions-BvfmaKCn.mjs.map +1 -0
  23. package/dist/extensions-CkjPj2JO.cjs +2369 -0
  24. package/dist/global-content-D_WYaFgX.mjs +78 -0
  25. package/dist/global-content-D_WYaFgX.mjs.map +1 -0
  26. package/dist/global-content-bJgotqmA.cjs +89 -0
  27. package/dist/index-C4KcMQ0R.d.cts +161 -0
  28. package/dist/index-C4KcMQ0R.d.cts.map +1 -0
  29. package/dist/index-CxX7W63O.d.mts +161 -0
  30. package/dist/index-CxX7W63O.d.mts.map +1 -0
  31. package/dist/index.cjs +74 -0
  32. package/dist/index.css +832 -0
  33. package/dist/index.css.map +1 -0
  34. package/dist/index.d.cts +33 -0
  35. package/dist/index.d.cts.map +1 -0
  36. package/dist/index.d.mts +31 -277
  37. package/dist/index.d.mts.map +1 -1
  38. package/dist/index.mjs +64 -1377
  39. package/dist/index.mjs.map +1 -1
  40. package/dist/plugins/index.cjs +23 -0
  41. package/dist/plugins/index.d.cts +191 -0
  42. package/dist/plugins/index.d.cts.map +1 -0
  43. package/dist/plugins/index.d.mts +191 -0
  44. package/dist/plugins/index.d.mts.map +1 -0
  45. package/dist/plugins/index.mjs +3 -0
  46. package/dist/root-CkYaJZpj.mjs +2316 -0
  47. package/dist/root-CkYaJZpj.mjs.map +1 -0
  48. package/dist/root-Gu08xybW.cjs +2832 -0
  49. package/dist/set-text-alignment-Cv72txmv.cjs +24 -0
  50. package/dist/set-text-alignment-OA8IMWmO.mjs +19 -0
  51. package/dist/set-text-alignment-OA8IMWmO.mjs.map +1 -0
  52. package/dist/styles-C-cCyJCn.cjs +211 -0
  53. package/dist/styles-_TMw3YxC.mjs +194 -0
  54. package/dist/styles-_TMw3YxC.mjs.map +1 -0
  55. package/dist/ui/bubble-menu/bubble-menu.css +285 -0
  56. package/dist/ui/index.cjs +147 -0
  57. package/dist/ui/index.d.cts +939 -0
  58. package/dist/ui/index.d.cts.map +1 -0
  59. package/dist/ui/index.d.mts +939 -0
  60. package/dist/ui/index.d.mts.map +1 -0
  61. package/dist/ui/index.mjs +60 -0
  62. package/dist/ui/index.mjs.map +1 -0
  63. package/dist/ui/slash-command/slash-command.css +44 -0
  64. package/dist/ui/themes/default.css +830 -0
  65. package/dist/utils/index.cjs +3 -0
  66. package/dist/utils/index.d.cts +7 -0
  67. package/dist/utils/index.d.cts.map +1 -0
  68. package/dist/utils/index.d.mts +7 -0
  69. package/dist/utils/index.d.mts.map +1 -0
  70. package/dist/utils/index.mjs +3 -0
  71. package/package.json +109 -21
  72. package/dist/index.d.ts +0 -279
  73. package/dist/index.d.ts.map +0 -1
  74. package/dist/index.js +0 -1436
@@ -0,0 +1,830 @@
1
+ /* Default theme for @react-email/editor bubble menu primitives.
2
+ *
3
+ * Opt-in: import '@react-email/editor/themes/default.css';
4
+ *
5
+ * Override any variable on a parent element:
6
+ * .my-editor { --re-bg: #1a1a1a; --re-border: #333; }
7
+ */
8
+
9
+ /* Layer 0: layout (inlined at build time via postcss-import) */
10
+
11
+ /* Minimal functional styles for BubbleMenu compound components.
12
+ * This file handles layout and positioning only - no visual design.
13
+ * Import this optionally: import '@react-email/editor/styles/bubble-menu.css';
14
+ */
15
+
16
+ [data-re-bubble-menu] {
17
+ display: flex;
18
+ align-items: center;
19
+ gap: 0.125rem;
20
+ }
21
+
22
+ [data-re-bubble-menu-group] {
23
+ display: flex;
24
+ align-items: center;
25
+ gap: 0.125rem;
26
+ padding: 0 0.125rem;
27
+ border: none;
28
+ margin: 0;
29
+ min-width: 0;
30
+ }
31
+
32
+ [data-re-bubble-menu-separator] {
33
+ align-self: stretch;
34
+ width: 1px;
35
+ margin: 0.25rem 0;
36
+ }
37
+
38
+ [data-re-bubble-menu-item] {
39
+ display: inline-flex;
40
+ align-items: center;
41
+ justify-content: center;
42
+ cursor: pointer;
43
+ border: none;
44
+ background: none;
45
+ padding: 0.375rem;
46
+ }
47
+
48
+ [data-re-bubble-menu-item] svg {
49
+ width: 0.875rem;
50
+ height: 0.875rem;
51
+ }
52
+
53
+ [data-re-node-selector] {
54
+ position: relative;
55
+ }
56
+
57
+ [data-re-node-selector-trigger] {
58
+ display: flex;
59
+ align-items: center;
60
+ gap: 0.25rem;
61
+ cursor: pointer;
62
+ border: none;
63
+ background: none;
64
+ white-space: nowrap;
65
+ font-size: 0.8125rem;
66
+ padding: 0.375rem 0.5rem;
67
+ }
68
+
69
+ [data-re-node-selector-trigger] svg {
70
+ width: 0.75rem;
71
+ height: 0.75rem;
72
+ opacity: 0.5;
73
+ }
74
+
75
+ [data-re-node-selector-content] {
76
+ display: flex;
77
+ flex-direction: column;
78
+ min-width: 10rem;
79
+ }
80
+
81
+ [data-re-node-selector-item] {
82
+ display: flex;
83
+ align-items: center;
84
+ gap: 0.5rem;
85
+ cursor: pointer;
86
+ border: none;
87
+ background: none;
88
+ padding: 0.375rem 0.5rem;
89
+ font-size: 0.8125rem;
90
+ width: 100%;
91
+ text-align: left;
92
+ }
93
+
94
+ [data-re-node-selector-item] svg {
95
+ width: 0.875rem;
96
+ height: 0.875rem;
97
+ }
98
+
99
+ [data-re-link-selector] {
100
+ display: flex;
101
+ position: relative;
102
+ }
103
+
104
+ [data-re-link-selector-trigger] {
105
+ display: inline-flex;
106
+ align-items: center;
107
+ justify-content: center;
108
+ cursor: pointer;
109
+ border: none;
110
+ background: none;
111
+ padding: 0.375rem;
112
+ }
113
+
114
+ [data-re-link-selector-trigger] svg {
115
+ width: 0.875rem;
116
+ height: 0.875rem;
117
+ }
118
+
119
+ [data-re-link-selector-form] {
120
+ display: flex;
121
+ align-items: center;
122
+ gap: 0.25rem;
123
+ position: absolute;
124
+ top: 100%;
125
+ left: 0;
126
+ margin-top: 0.25rem;
127
+ width: max-content;
128
+ min-width: 16rem;
129
+ padding: 0.25rem;
130
+ }
131
+
132
+ [data-re-link-selector-input] {
133
+ flex: 1;
134
+ border: none;
135
+ outline: none;
136
+ font-size: 0.8125rem;
137
+ padding: 0.25rem;
138
+ background: transparent;
139
+ }
140
+
141
+ [data-re-link-selector-apply],
142
+ [data-re-link-selector-unlink] {
143
+ display: inline-flex;
144
+ align-items: center;
145
+ justify-content: center;
146
+ cursor: pointer;
147
+ border: none;
148
+ background: none;
149
+ padding: 0.25rem;
150
+ }
151
+
152
+ [data-re-link-selector-apply] svg,
153
+ [data-re-link-selector-unlink] svg {
154
+ width: 0.875rem;
155
+ height: 0.875rem;
156
+ }
157
+
158
+ /* Button bubble menu */
159
+
160
+ [data-re-btn-bm-toolbar] {
161
+ display: flex;
162
+ align-items: center;
163
+ }
164
+
165
+ [data-re-btn-bm-item] {
166
+ display: inline-flex;
167
+ align-items: center;
168
+ justify-content: center;
169
+ cursor: pointer;
170
+ border: none;
171
+ background: none;
172
+ padding: 0.375rem;
173
+ }
174
+
175
+ [data-re-btn-bm-item] svg {
176
+ width: 0.875rem;
177
+ height: 0.875rem;
178
+ }
179
+
180
+ [data-re-btn-bm-form] {
181
+ display: flex;
182
+ align-items: center;
183
+ gap: 0.25rem;
184
+ min-width: 16rem;
185
+ padding: 0.25rem;
186
+ }
187
+
188
+ [data-re-btn-bm-input] {
189
+ flex: 1;
190
+ border: none;
191
+ outline: none;
192
+ font-size: 0.8125rem;
193
+ padding: 0.25rem;
194
+ background: transparent;
195
+ }
196
+
197
+ [data-re-btn-bm-apply],
198
+ [data-re-btn-bm-unlink] {
199
+ display: inline-flex;
200
+ align-items: center;
201
+ justify-content: center;
202
+ cursor: pointer;
203
+ border: none;
204
+ background: none;
205
+ padding: 0.25rem;
206
+ }
207
+
208
+ [data-re-btn-bm-apply] svg,
209
+ [data-re-btn-bm-unlink] svg {
210
+ width: 0.875rem;
211
+ height: 0.875rem;
212
+ }
213
+
214
+ /* Link bubble menu */
215
+
216
+ [data-re-link-bm-toolbar] {
217
+ display: flex;
218
+ align-items: center;
219
+ }
220
+
221
+ [data-re-link-bm-item] {
222
+ display: inline-flex;
223
+ align-items: center;
224
+ justify-content: center;
225
+ cursor: pointer;
226
+ border: none;
227
+ background: none;
228
+ padding: 0.375rem;
229
+ }
230
+
231
+ [data-re-link-bm-item] svg {
232
+ width: 0.875rem;
233
+ height: 0.875rem;
234
+ }
235
+
236
+ a[data-re-link-bm-item] {
237
+ text-decoration: none;
238
+ color: inherit;
239
+ }
240
+
241
+ [data-re-link-bm-form] {
242
+ display: flex;
243
+ align-items: center;
244
+ gap: 0.25rem;
245
+ min-width: 16rem;
246
+ padding: 0.25rem;
247
+ }
248
+
249
+ [data-re-link-bm-input] {
250
+ flex: 1;
251
+ border: none;
252
+ outline: none;
253
+ font-size: 0.8125rem;
254
+ padding: 0.25rem;
255
+ background: transparent;
256
+ }
257
+
258
+ [data-re-link-bm-apply],
259
+ [data-re-link-bm-unlink] {
260
+ display: inline-flex;
261
+ align-items: center;
262
+ justify-content: center;
263
+ cursor: pointer;
264
+ border: none;
265
+ background: none;
266
+ padding: 0.25rem;
267
+ }
268
+
269
+ [data-re-link-bm-apply] svg,
270
+ [data-re-link-bm-unlink] svg {
271
+ width: 0.875rem;
272
+ height: 0.875rem;
273
+ }
274
+
275
+ /* Image bubble menu */
276
+
277
+ [data-re-img-bm-toolbar] {
278
+ display: flex;
279
+ align-items: center;
280
+ }
281
+
282
+ [data-re-img-bm-item] {
283
+ display: inline-flex;
284
+ align-items: center;
285
+ justify-content: center;
286
+ cursor: pointer;
287
+ border: none;
288
+ background: none;
289
+ padding: 0.5rem;
290
+ }
291
+
292
+ [data-re-img-bm-item] svg {
293
+ width: 1rem;
294
+ height: 1rem;
295
+ }
296
+
297
+ /* Minimal functional styles for SlashCommand components.
298
+ * Layout and positioning only - no visual design.
299
+ * Import optionally: import '@react-email/editor/styles/slash-command.css';
300
+ */
301
+
302
+ [data-re-slash-command] {
303
+ max-height: 330px;
304
+ overflow-y: auto;
305
+ width: 256px;
306
+ padding: 0.25rem;
307
+ }
308
+
309
+ [data-re-slash-command-item] {
310
+ display: flex;
311
+ align-items: center;
312
+ gap: 0.5rem;
313
+ width: 100%;
314
+ padding: 0.375rem 0.5rem;
315
+ border: none;
316
+ border-radius: 0.375rem;
317
+ background: none;
318
+ cursor: pointer;
319
+ font-size: 0.875rem;
320
+ line-height: 1.25rem;
321
+ text-align: left;
322
+ }
323
+
324
+ [data-re-slash-command-item] svg {
325
+ flex-shrink: 0;
326
+ }
327
+
328
+ [data-re-slash-command-category] {
329
+ font-size: 0.6875rem;
330
+ font-weight: 600;
331
+ text-transform: uppercase;
332
+ letter-spacing: 0.05em;
333
+ padding: 0.5rem 0.5rem 0.25rem;
334
+ }
335
+
336
+ [data-re-slash-command-empty] {
337
+ padding: 0.75rem 0.5rem;
338
+ font-size: 0.875rem;
339
+ text-align: center;
340
+ }
341
+
342
+ /* ----------------------------------------------------------------
343
+ * CSS custom properties — light defaults
344
+ * ---------------------------------------------------------------- */
345
+
346
+ :root {
347
+ --re-bg: #fff;
348
+ --re-border: #e5e5e5;
349
+ --re-text: #1c1c1c;
350
+ --re-text-muted: #6b6b6b;
351
+ --re-hover: rgba(0, 0, 0, 0.04);
352
+ --re-active: rgba(0, 0, 0, 0.06);
353
+ --re-pressed: rgba(0, 0, 0, 0.06);
354
+ --re-separator: #e5e5e5;
355
+ --re-radius: 0.75rem;
356
+ --re-radius-sm: 0.5rem;
357
+ --re-shadow:
358
+ 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
359
+ --re-danger: #dc2626;
360
+ --re-danger-hover: rgba(220, 38, 38, 0.1);
361
+ }
362
+
363
+ /* ----------------------------------------------------------------
364
+ * Dark mode — prefers-color-scheme
365
+ * ---------------------------------------------------------------- */
366
+
367
+ @media (prefers-color-scheme: dark) {
368
+ :root {
369
+ --re-bg: #1c1c1c;
370
+ --re-border: #2e2e2e;
371
+ --re-text: #ececec;
372
+ --re-text-muted: #a0a0a0;
373
+ --re-hover: rgba(255, 255, 255, 0.06);
374
+ --re-active: rgba(255, 255, 255, 0.09);
375
+ --re-pressed: rgba(255, 255, 255, 0.09);
376
+ --re-separator: #2e2e2e;
377
+ --re-shadow:
378
+ 0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -4px rgba(0, 0, 0, 0.3);
379
+ --re-danger: #f87171;
380
+ --re-danger-hover: rgba(248, 113, 113, 0.15);
381
+ }
382
+ }
383
+
384
+ /* ----------------------------------------------------------------
385
+ * Dark mode — .dark class override
386
+ * ---------------------------------------------------------------- */
387
+
388
+ .dark {
389
+ --re-bg: #1c1c1c;
390
+ --re-border: #2e2e2e;
391
+ --re-text: #ececec;
392
+ --re-text-muted: #a0a0a0;
393
+ --re-hover: rgba(255, 255, 255, 0.06);
394
+ --re-active: rgba(255, 255, 255, 0.09);
395
+ --re-pressed: rgba(255, 255, 255, 0.09);
396
+ --re-separator: #2e2e2e;
397
+ --re-shadow:
398
+ 0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -4px rgba(0, 0, 0, 0.3);
399
+ --re-danger: #f87171;
400
+ --re-danger-hover: rgba(248, 113, 113, 0.15);
401
+ }
402
+
403
+ /* ----------------------------------------------------------------
404
+ * Root containers
405
+ * ---------------------------------------------------------------- */
406
+
407
+ [data-re-bubble-menu] {
408
+ background: var(--re-bg);
409
+ border: 1px solid var(--re-border);
410
+ border-radius: var(--re-radius);
411
+ box-shadow: var(--re-shadow);
412
+ z-index: 50;
413
+ padding: 0.125rem;
414
+ font-family: system-ui, -apple-system, sans-serif;
415
+ font-size: 0.8125rem;
416
+ line-height: 1;
417
+ }
418
+
419
+ /* ----------------------------------------------------------------
420
+ * Toolbars (link, button, image bubble menus)
421
+ * ---------------------------------------------------------------- */
422
+
423
+ [data-re-img-bm-toolbar] > * + * {
424
+ border-left: 1px solid var(--re-border);
425
+ }
426
+
427
+ /* ----------------------------------------------------------------
428
+ * Item buttons (all bubble menus)
429
+ * ---------------------------------------------------------------- */
430
+
431
+ [data-re-bubble-menu-item],
432
+ [data-re-link-bm-item],
433
+ [data-re-btn-bm-item],
434
+ [data-re-img-bm-item] {
435
+ color: var(--re-text-muted);
436
+ border-radius: var(--re-radius-sm);
437
+ transition:
438
+ background-color 0.15s,
439
+ color 0.15s;
440
+ }
441
+
442
+ [data-re-bubble-menu-item]:hover,
443
+ [data-re-link-bm-item]:hover,
444
+ [data-re-btn-bm-item]:hover,
445
+ [data-re-img-bm-item]:hover {
446
+ background: var(--re-hover);
447
+ color: var(--re-text);
448
+ }
449
+
450
+ [data-re-bubble-menu-item]:active,
451
+ [data-re-link-bm-item]:active,
452
+ [data-re-btn-bm-item]:active,
453
+ [data-re-img-bm-item]:active {
454
+ background: var(--re-active);
455
+ }
456
+
457
+ /* Active / pressed state */
458
+
459
+ [data-re-bubble-menu-item][data-active],
460
+ [data-re-bubble-menu-item][aria-pressed="true"] {
461
+ background: var(--re-pressed);
462
+ color: var(--re-text);
463
+ }
464
+
465
+ /* ----------------------------------------------------------------
466
+ * Separator (text bubble menu)
467
+ * ---------------------------------------------------------------- */
468
+
469
+ [data-re-bubble-menu-separator] {
470
+ background: var(--re-separator);
471
+ }
472
+
473
+ /* ----------------------------------------------------------------
474
+ * Node Selector
475
+ * ---------------------------------------------------------------- */
476
+
477
+ [data-re-node-selector-trigger] {
478
+ color: var(--re-text);
479
+ border-radius: var(--re-radius-sm);
480
+ transition: background-color 0.15s;
481
+ font-weight: 500;
482
+ }
483
+
484
+ [data-re-node-selector-trigger]:hover {
485
+ background: var(--re-hover);
486
+ }
487
+
488
+ [data-re-node-selector-trigger]:active {
489
+ background: var(--re-active);
490
+ }
491
+
492
+ [data-re-node-selector-content] {
493
+ background: var(--re-bg);
494
+ border: 1px solid var(--re-border);
495
+ border-radius: var(--re-radius);
496
+ box-shadow: var(--re-shadow);
497
+ padding: 0.25rem;
498
+ margin-top: 0.25rem;
499
+ z-index: 50;
500
+ }
501
+
502
+ [data-re-node-selector-item] {
503
+ color: var(--re-text-muted);
504
+ border-radius: var(--re-radius-sm);
505
+ transition:
506
+ background-color 0.15s,
507
+ color 0.15s;
508
+ }
509
+
510
+ [data-re-node-selector-item]:hover {
511
+ background: var(--re-hover);
512
+ color: var(--re-text);
513
+ }
514
+
515
+ [data-re-node-selector-item][data-active] {
516
+ color: var(--re-text);
517
+ }
518
+
519
+ /* ----------------------------------------------------------------
520
+ * Link Selector (text bubble menu)
521
+ * ---------------------------------------------------------------- */
522
+
523
+ [data-re-link-selector-trigger] {
524
+ color: var(--re-text-muted);
525
+ border-radius: var(--re-radius-sm);
526
+ transition:
527
+ background-color 0.15s,
528
+ color 0.15s;
529
+ }
530
+
531
+ [data-re-link-selector-trigger]:hover {
532
+ background: var(--re-hover);
533
+ color: var(--re-text);
534
+ }
535
+
536
+ [data-re-link-selector-trigger][aria-pressed="true"] {
537
+ background: var(--re-pressed);
538
+ }
539
+
540
+ [data-re-link-selector-form] {
541
+ background: var(--re-bg);
542
+ border: 1px solid var(--re-border);
543
+ border-radius: var(--re-radius);
544
+ box-shadow: var(--re-shadow);
545
+ padding: 0.25rem;
546
+ }
547
+
548
+ [data-re-link-selector-input] {
549
+ color: var(--re-text);
550
+ }
551
+
552
+ [data-re-link-selector-input]::placeholder {
553
+ color: var(--re-text-muted);
554
+ }
555
+
556
+ [data-re-link-selector-apply] {
557
+ color: var(--re-text);
558
+ border-radius: var(--re-radius-sm);
559
+ transition: background-color 0.15s;
560
+ }
561
+
562
+ [data-re-link-selector-apply]:hover {
563
+ background: var(--re-hover);
564
+ }
565
+
566
+ [data-re-link-selector-unlink] {
567
+ color: var(--re-danger);
568
+ border-radius: var(--re-radius-sm);
569
+ transition: background-color 0.15s;
570
+ }
571
+
572
+ [data-re-link-selector-unlink]:hover {
573
+ background: var(--re-danger-hover);
574
+ }
575
+
576
+ /* ----------------------------------------------------------------
577
+ * Link Bubble Menu Form
578
+ * ---------------------------------------------------------------- */
579
+
580
+ [data-re-link-bm-form] {
581
+ background: var(--re-bg);
582
+ padding: 0.25rem;
583
+ }
584
+
585
+ [data-re-link-bm-input] {
586
+ color: var(--re-text);
587
+ }
588
+
589
+ [data-re-link-bm-input]::placeholder {
590
+ color: var(--re-text-muted);
591
+ }
592
+
593
+ [data-re-link-bm-apply] {
594
+ color: var(--re-text);
595
+ border-radius: var(--re-radius-sm);
596
+ transition: background-color 0.15s;
597
+ }
598
+
599
+ [data-re-link-bm-apply]:hover {
600
+ background: var(--re-hover);
601
+ }
602
+
603
+ [data-re-link-bm-unlink] {
604
+ color: var(--re-danger);
605
+ border-radius: var(--re-radius-sm);
606
+ transition: background-color 0.15s;
607
+ }
608
+
609
+ [data-re-link-bm-unlink]:hover {
610
+ background: var(--re-danger-hover);
611
+ }
612
+
613
+ /* ----------------------------------------------------------------
614
+ * Button Bubble Menu Form
615
+ * ---------------------------------------------------------------- */
616
+
617
+ [data-re-btn-bm-form] {
618
+ background: var(--re-bg);
619
+ padding: 0.25rem;
620
+ }
621
+
622
+ [data-re-btn-bm-input] {
623
+ color: var(--re-text);
624
+ }
625
+
626
+ [data-re-btn-bm-input]::placeholder {
627
+ color: var(--re-text-muted);
628
+ }
629
+
630
+ [data-re-btn-bm-apply] {
631
+ color: var(--re-text);
632
+ border-radius: var(--re-radius-sm);
633
+ transition: background-color 0.15s;
634
+ }
635
+
636
+ [data-re-btn-bm-apply]:hover {
637
+ background: var(--re-hover);
638
+ }
639
+
640
+ [data-re-btn-bm-unlink] {
641
+ color: var(--re-danger);
642
+ border-radius: var(--re-radius-sm);
643
+ transition: background-color 0.15s;
644
+ }
645
+
646
+ [data-re-btn-bm-unlink]:hover {
647
+ background: var(--re-danger-hover);
648
+ }
649
+
650
+ /* ----------------------------------------------------------------
651
+ * Slash Command
652
+ * ---------------------------------------------------------------- */
653
+
654
+ [data-re-slash-command] {
655
+ background: var(--re-bg);
656
+ border: 1px solid var(--re-border);
657
+ border-radius: var(--re-radius);
658
+ box-shadow: var(--re-shadow);
659
+ font-family: system-ui, -apple-system, sans-serif;
660
+ }
661
+
662
+ [data-re-slash-command-item] {
663
+ color: var(--re-text);
664
+ border-radius: var(--re-radius-sm);
665
+ transition: background-color 0.15s;
666
+ }
667
+
668
+ [data-re-slash-command-item]:hover {
669
+ background: var(--re-hover);
670
+ }
671
+
672
+ [data-re-slash-command-item][data-selected] {
673
+ background: var(--re-hover);
674
+ }
675
+
676
+ [data-re-slash-command-item]:active {
677
+ background: var(--re-active);
678
+ }
679
+
680
+ [data-re-slash-command-item] svg {
681
+ color: var(--re-text-muted);
682
+ }
683
+
684
+ [data-re-slash-command-category] {
685
+ color: var(--re-text-muted);
686
+ }
687
+
688
+ [data-re-slash-command-empty] {
689
+ color: var(--re-text-muted);
690
+ }
691
+
692
+ /* ----------------------------------------------------------------
693
+ * Editor content — alignment attribute
694
+ * ---------------------------------------------------------------- */
695
+
696
+ .tiptap [alignment="left"] {
697
+ text-align: left;
698
+ }
699
+
700
+ .tiptap [alignment="center"] {
701
+ text-align: center;
702
+ }
703
+
704
+ .tiptap [alignment="right"] {
705
+ text-align: right;
706
+ }
707
+
708
+ .tiptap [alignment="justify"] {
709
+ text-align: justify;
710
+ }
711
+
712
+ /* ----------------------------------------------------------------
713
+ * Editor content — columns
714
+ * ---------------------------------------------------------------- */
715
+
716
+ .tiptap .node-columns {
717
+ display: flex;
718
+ gap: 0.5rem;
719
+ width: 100%;
720
+ }
721
+
722
+ .tiptap .node-column {
723
+ flex: 1;
724
+ min-width: 0;
725
+ }
726
+
727
+ /* ----------------------------------------------------------------
728
+ * Editor content — base typography
729
+ * ---------------------------------------------------------------- */
730
+
731
+ .tiptap {
732
+ outline: none;
733
+ color: var(--re-text);
734
+ }
735
+
736
+ .tiptap p {
737
+ margin: 0.25em 0;
738
+ }
739
+
740
+ .tiptap h1,
741
+ .tiptap h2,
742
+ .tiptap h3 {
743
+ margin: 0.5em 0 0.25em;
744
+ font-weight: 700;
745
+ }
746
+
747
+ .tiptap h1 {
748
+ font-size: 2em;
749
+ }
750
+
751
+ .tiptap h2 {
752
+ font-size: 1.5em;
753
+ }
754
+
755
+ .tiptap h3 {
756
+ font-size: 1.17em;
757
+ }
758
+
759
+ .tiptap a:not(.node-button) {
760
+ color: #2563eb;
761
+ text-decoration: underline;
762
+ text-underline-offset: 2px;
763
+ cursor: text;
764
+ }
765
+
766
+ .tiptap .node-button {
767
+ display: inline-block;
768
+ padding: 0.625em 1.25em;
769
+ background-color: #000;
770
+ color: #fff;
771
+ border-radius: 0.375em;
772
+ font-weight: 500;
773
+ font-size: 0.875em;
774
+ text-decoration: none;
775
+ text-align: center;
776
+ cursor: text;
777
+ }
778
+
779
+ .tiptap blockquote {
780
+ border-left: 3px solid var(--re-border);
781
+ margin: 0.5em 0;
782
+ padding-left: 1em;
783
+ color: var(--re-text-muted);
784
+ }
785
+
786
+ .tiptap hr {
787
+ border: none;
788
+ border-top: 1px solid var(--re-border);
789
+ margin: 1em 0;
790
+ }
791
+
792
+ .tiptap code {
793
+ background: var(--re-hover);
794
+ border-radius: 0.25rem;
795
+ padding: 0.125rem 0.375rem;
796
+ font-size: 0.875em;
797
+ }
798
+
799
+ .tiptap pre {
800
+ background: var(--re-hover);
801
+ border-radius: var(--re-radius-sm);
802
+ padding: 0.75rem 1rem;
803
+ overflow-x: auto;
804
+ }
805
+
806
+ .tiptap pre code {
807
+ background: none;
808
+ padding: 0;
809
+ border-radius: 0;
810
+ }
811
+
812
+ .tiptap ul {
813
+ list-style-type: disc;
814
+ padding-left: 1.5em;
815
+ margin: 0.25em 0;
816
+ }
817
+
818
+ .tiptap ol {
819
+ list-style-type: decimal;
820
+ padding-left: 1.5em;
821
+ margin: 0.25em 0;
822
+ }
823
+
824
+ .tiptap .node-placeholder::before {
825
+ color: var(--re-text-muted);
826
+ content: attr(data-placeholder);
827
+ float: left;
828
+ height: 0;
829
+ pointer-events: none;
830
+ }