trance-richtext-editor 0.2.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/dist/index.css ADDED
@@ -0,0 +1,854 @@
1
+ /* src/styles/variables.css */
2
+ :root,
3
+ [data-trance-theme=light] {
4
+ --trance-bg: #ffffff;
5
+ --trance-bg-secondary: #f9fafb;
6
+ --trance-surface: #f3f4f6;
7
+ --trance-surface-hover: #e5e7eb;
8
+ --trance-surface-active: #d1d5db;
9
+ --trance-text: #111827;
10
+ --trance-text-secondary: #4b5563;
11
+ --trance-text-muted: #9ca3af;
12
+ --trance-text-inverse: #ffffff;
13
+ --trance-accent: #6366f1;
14
+ --trance-accent-hover: #4f46e5;
15
+ --trance-accent-light: #e0e7ff;
16
+ --trance-accent-text: #ffffff;
17
+ --trance-border: #e5e7eb;
18
+ --trance-border-strong: #d1d5db;
19
+ --trance-border-focus: #6366f1;
20
+ --trance-toolbar-bg: #ffffff;
21
+ --trance-toolbar-border: #e5e7eb;
22
+ --trance-toolbar-btn-hover: #f3f4f6;
23
+ --trance-toolbar-btn-active: #e0e7ff;
24
+ --trance-toolbar-btn-active-text: #4338ca;
25
+ --trance-toolbar-separator: #e5e7eb;
26
+ --trance-editor-bg: #ffffff;
27
+ --trance-editor-placeholder: #9ca3af;
28
+ --trance-editor-selection: #dbeafe;
29
+ --trance-editor-highlight: #fef08a;
30
+ --trance-code-bg: #f3f4f6;
31
+ --trance-code-text: #e11d48;
32
+ --trance-code-block-bg: #1e1e2e;
33
+ --trance-code-block-text: #cdd6f4;
34
+ --trance-table-border: #e5e7eb;
35
+ --trance-table-header-bg: #f9fafb;
36
+ --trance-table-stripe-bg: #f9fafb;
37
+ --trance-table-hover-bg: #f3f4f6;
38
+ --trance-blockquote-border: #6366f1;
39
+ --trance-blockquote-bg: #f5f3ff;
40
+ --trance-blockquote-text: #4b5563;
41
+ --trance-link-color: #6366f1;
42
+ --trance-link-hover: #4f46e5;
43
+ --trance-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
44
+ --trance-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);
45
+ --trance-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.06);
46
+ --trance-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05);
47
+ --trance-shadow-float: 0 8px 30px rgba(0, 0, 0, 0.12);
48
+ --trance-radius-sm: 4px;
49
+ --trance-radius: 6px;
50
+ --trance-radius-md: 8px;
51
+ --trance-radius-lg: 12px;
52
+ --trance-radius-full: 9999px;
53
+ --trance-spacing-xs: 4px;
54
+ --trance-spacing-sm: 8px;
55
+ --trance-spacing-md: 12px;
56
+ --trance-spacing-lg: 16px;
57
+ --trance-spacing-xl: 24px;
58
+ --trance-font-sans:
59
+ "Inter",
60
+ ui-sans-serif,
61
+ system-ui,
62
+ -apple-system,
63
+ BlinkMacSystemFont,
64
+ "Segoe UI",
65
+ Roboto,
66
+ "Helvetica Neue",
67
+ Arial,
68
+ sans-serif;
69
+ --trance-font-mono:
70
+ "JetBrains Mono",
71
+ "Fira Code",
72
+ "Cascadia Code",
73
+ ui-monospace,
74
+ SFMono-Regular,
75
+ "SF Mono",
76
+ Menlo,
77
+ Consolas,
78
+ monospace;
79
+ --trance-font-size-xs: 0.75rem;
80
+ --trance-font-size-sm: 0.875rem;
81
+ --trance-font-size-base: 1rem;
82
+ --trance-font-size-lg: 1.125rem;
83
+ --trance-font-size-xl: 1.25rem;
84
+ --trance-font-size-2xl: 1.5rem;
85
+ --trance-font-size-3xl: 1.875rem;
86
+ --trance-font-size-4xl: 2.25rem;
87
+ --trance-line-height: 1.7;
88
+ --trance-line-height-tight: 1.3;
89
+ --trance-transition-fast: 100ms ease;
90
+ --trance-transition: 150ms ease;
91
+ --trance-transition-slow: 250ms ease;
92
+ }
93
+ [data-trance-theme=dark] {
94
+ --trance-bg: #0a0a0a;
95
+ --trance-bg-secondary: #0f0f0f;
96
+ --trance-surface: #141414;
97
+ --trance-surface-hover: #1a1a1a;
98
+ --trance-surface-active: #262626;
99
+ --trance-text: #fafafa;
100
+ --trance-text-secondary: #a3a3a3;
101
+ --trance-text-muted: #737373;
102
+ --trance-text-inverse: #0a0a0a;
103
+ --trance-accent: #818cf8;
104
+ --trance-accent-hover: #a5b4fc;
105
+ --trance-accent-light: #1c1c2e;
106
+ --trance-accent-text: #0a0a0a;
107
+ --trance-border: #262626;
108
+ --trance-border-strong: #333333;
109
+ --trance-border-focus: #818cf8;
110
+ --trance-toolbar-bg: #141414;
111
+ --trance-toolbar-border: #262626;
112
+ --trance-toolbar-btn-hover: #1a1a1a;
113
+ --trance-toolbar-btn-active: #1c1c2e;
114
+ --trance-toolbar-btn-active-text: #a5b4fc;
115
+ --trance-toolbar-separator: #262626;
116
+ --trance-editor-bg: #0a0a0a;
117
+ --trance-editor-placeholder: #525252;
118
+ --trance-editor-selection: #333333;
119
+ --trance-editor-highlight: #665500;
120
+ --trance-code-bg: #141414;
121
+ --trance-code-text: #f472b6;
122
+ --trance-code-block-bg: #050505;
123
+ --trance-code-block-text: #e5e5e5;
124
+ --trance-table-border: #262626;
125
+ --trance-table-header-bg: #0f0f0f;
126
+ --trance-table-stripe-bg: #0a0a0a;
127
+ --trance-table-hover-bg: #141414;
128
+ --trance-blockquote-border: #333333;
129
+ --trance-blockquote-bg: #0f0f0f;
130
+ --trance-blockquote-text: #a3a3a3;
131
+ --trance-link-color: #818cf8;
132
+ --trance-link-hover: #a5b4fc;
133
+ --trance-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
134
+ --trance-shadow: 0 1px 3px rgba(0, 0, 0, 0.5), 0 1px 2px rgba(0, 0, 0, 0.4);
135
+ --trance-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.45), 0 2px 4px rgba(0, 0, 0, 0.4);
136
+ --trance-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.5), 0 4px 6px rgba(0, 0, 0, 0.4);
137
+ --trance-shadow-float: 0 8px 30px rgba(0, 0, 0, 0.6);
138
+ }
139
+ @media (prefers-color-scheme: dark) {
140
+ [data-trance-theme=auto] {
141
+ --trance-bg: #0a0a0a;
142
+ --trance-bg-secondary: #0f0f0f;
143
+ --trance-surface: #141414;
144
+ --trance-surface-hover: #1a1a1a;
145
+ --trance-surface-active: #262626;
146
+ --trance-text: #fafafa;
147
+ --trance-text-secondary: #a3a3a3;
148
+ --trance-text-muted: #737373;
149
+ --trance-text-inverse: #0a0a0a;
150
+ --trance-accent: #818cf8;
151
+ --trance-accent-hover: #a5b4fc;
152
+ --trance-accent-light: #1c1c2e;
153
+ --trance-accent-text: #0a0a0a;
154
+ --trance-border: #262626;
155
+ --trance-border-strong: #333333;
156
+ --trance-border-focus: #818cf8;
157
+ --trance-toolbar-bg: #141414;
158
+ --trance-toolbar-border: #262626;
159
+ --trance-toolbar-btn-hover: #1a1a1a;
160
+ --trance-toolbar-btn-active: #1c1c2e;
161
+ --trance-toolbar-btn-active-text: #a5b4fc;
162
+ --trance-toolbar-separator: #262626;
163
+ --trance-editor-bg: #0a0a0a;
164
+ --trance-editor-placeholder: #525252;
165
+ --trance-editor-selection: #333333;
166
+ --trance-editor-highlight: #665500;
167
+ --trance-code-bg: #141414;
168
+ --trance-code-text: #f472b6;
169
+ --trance-code-block-bg: #050505;
170
+ --trance-code-block-text: #e5e5e5;
171
+ --trance-table-border: #262626;
172
+ --trance-table-header-bg: #0f0f0f;
173
+ --trance-table-stripe-bg: #0a0a0a;
174
+ --trance-table-hover-bg: #141414;
175
+ --trance-blockquote-border: #333333;
176
+ --trance-blockquote-bg: #0f0f0f;
177
+ --trance-blockquote-text: #a3a3a3;
178
+ --trance-link-color: #818cf8;
179
+ --trance-link-hover: #a5b4fc;
180
+ --trance-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
181
+ --trance-shadow: 0 1px 3px rgba(0, 0, 0, 0.5), 0 1px 2px rgba(0, 0, 0, 0.4);
182
+ --trance-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.45), 0 2px 4px rgba(0, 0, 0, 0.4);
183
+ --trance-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.5), 0 4px 6px rgba(0, 0, 0, 0.4);
184
+ --trance-shadow-float: 0 8px 30px rgba(0, 0, 0, 0.6);
185
+ }
186
+ }
187
+
188
+ /* src/styles/editor.css */
189
+ .trance-editor-wrapper {
190
+ position: relative;
191
+ display: flex;
192
+ flex-direction: column;
193
+ border: 1px solid var(--trance-border);
194
+ border-radius: var(--trance-radius-md);
195
+ background: var(--trance-editor-bg);
196
+ box-shadow: var(--trance-shadow-sm);
197
+ overflow: visible;
198
+ font-family: var(--trance-font-sans);
199
+ transition: border-color var(--trance-transition), box-shadow var(--trance-transition);
200
+ }
201
+ .trance-editor-wrapper > .trance-toolbar {
202
+ flex-shrink: 0;
203
+ }
204
+ .trance-editor-wrapper:focus-within {
205
+ border-color: var(--trance-border-focus);
206
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15);
207
+ }
208
+ .trance-editor-content {
209
+ position: relative;
210
+ flex: 1 1 auto;
211
+ min-height: 200px;
212
+ padding: var(--trance-spacing-lg) var(--trance-spacing-xl);
213
+ color: var(--trance-text);
214
+ font-size: var(--trance-font-size-base);
215
+ line-height: var(--trance-line-height);
216
+ outline: none;
217
+ caret-color: var(--trance-accent);
218
+ -webkit-font-smoothing: antialiased;
219
+ -moz-osx-font-smoothing: grayscale;
220
+ isolation: isolate;
221
+ }
222
+ .trance-editor-background-layer {
223
+ position: absolute;
224
+ inset: 0;
225
+ z-index: 0;
226
+ pointer-events: none;
227
+ overflow: hidden;
228
+ border-radius: var(--trance-radius-md);
229
+ }
230
+ .trance-image-background-img {
231
+ position: absolute;
232
+ top: 0;
233
+ left: 0;
234
+ width: 100%;
235
+ height: 100%;
236
+ object-fit: cover;
237
+ display: block;
238
+ pointer-events: none;
239
+ user-select: none;
240
+ }
241
+ .trance-content-editable {
242
+ position: relative;
243
+ z-index: 1;
244
+ }
245
+ .trance-editor-content [data-lexical-editor] {
246
+ outline: none;
247
+ }
248
+ .trance-editor-placeholder {
249
+ position: absolute;
250
+ top: 0;
251
+ left: 0;
252
+ padding: var(--trance-spacing-lg) var(--trance-spacing-xl);
253
+ color: var(--trance-editor-placeholder);
254
+ font-size: var(--trance-font-size-base);
255
+ line-height: var(--trance-line-height);
256
+ pointer-events: none;
257
+ user-select: none;
258
+ overflow: hidden;
259
+ text-overflow: ellipsis;
260
+ }
261
+ .trance-paragraph {
262
+ margin: 0 0 var(--trance-spacing-sm) 0;
263
+ }
264
+ .trance-paragraph:last-child {
265
+ margin-bottom: 0;
266
+ }
267
+ .trance-h1 {
268
+ font-size: var(--trance-font-size-4xl);
269
+ font-weight: 800;
270
+ line-height: var(--trance-line-height-tight);
271
+ margin: var(--trance-spacing-xl) 0 var(--trance-spacing-md) 0;
272
+ color: var(--trance-text);
273
+ letter-spacing: -0.025em;
274
+ }
275
+ .trance-h2 {
276
+ font-size: var(--trance-font-size-3xl);
277
+ font-weight: 700;
278
+ line-height: var(--trance-line-height-tight);
279
+ margin: var(--trance-spacing-xl) 0 var(--trance-spacing-sm) 0;
280
+ color: var(--trance-text);
281
+ letter-spacing: -0.02em;
282
+ }
283
+ .trance-h3 {
284
+ font-size: var(--trance-font-size-2xl);
285
+ font-weight: 600;
286
+ line-height: var(--trance-line-height-tight);
287
+ margin: var(--trance-spacing-lg) 0 var(--trance-spacing-sm) 0;
288
+ color: var(--trance-text);
289
+ }
290
+ .trance-h4 {
291
+ font-size: var(--trance-font-size-xl);
292
+ font-weight: 600;
293
+ line-height: var(--trance-line-height-tight);
294
+ margin: var(--trance-spacing-lg) 0 var(--trance-spacing-xs) 0;
295
+ color: var(--trance-text);
296
+ }
297
+ .trance-h5 {
298
+ font-size: var(--trance-font-size-lg);
299
+ font-weight: 600;
300
+ line-height: var(--trance-line-height-tight);
301
+ margin: var(--trance-spacing-md) 0 var(--trance-spacing-xs) 0;
302
+ color: var(--trance-text);
303
+ }
304
+ .trance-h6 {
305
+ font-size: var(--trance-font-size-base);
306
+ font-weight: 600;
307
+ line-height: var(--trance-line-height-tight);
308
+ margin: var(--trance-spacing-md) 0 var(--trance-spacing-xs) 0;
309
+ color: var(--trance-text-secondary);
310
+ text-transform: uppercase;
311
+ letter-spacing: 0.05em;
312
+ }
313
+ .trance-bold {
314
+ font-weight: 700;
315
+ }
316
+ .trance-italic {
317
+ font-style: italic;
318
+ }
319
+ .trance-underline {
320
+ text-decoration: underline;
321
+ text-underline-offset: 2px;
322
+ }
323
+ .trance-strikethrough {
324
+ text-decoration: line-through;
325
+ }
326
+ .trance-underline.trance-strikethrough {
327
+ text-decoration: underline line-through;
328
+ }
329
+ .trance-subscript {
330
+ font-size: 0.75em;
331
+ vertical-align: sub;
332
+ }
333
+ .trance-superscript {
334
+ font-size: 0.75em;
335
+ vertical-align: super;
336
+ }
337
+ .trance-highlight {
338
+ background-color: var(--trance-editor-highlight);
339
+ padding: 1px 3px;
340
+ border-radius: 2px;
341
+ }
342
+ .trance-inline-code {
343
+ font-family: var(--trance-font-mono);
344
+ font-size: 0.9em;
345
+ background: var(--trance-code-bg);
346
+ color: var(--trance-code-text);
347
+ padding: 2px 6px;
348
+ border-radius: var(--trance-radius-sm);
349
+ font-weight: 500;
350
+ }
351
+ .trance-link {
352
+ color: var(--trance-link-color);
353
+ text-decoration: underline;
354
+ text-underline-offset: 2px;
355
+ text-decoration-thickness: 1px;
356
+ cursor: pointer;
357
+ transition: color var(--trance-transition-fast);
358
+ }
359
+ .trance-link:hover {
360
+ color: var(--trance-link-hover);
361
+ text-decoration-thickness: 2px;
362
+ }
363
+ .trance-ul {
364
+ list-style-type: disc;
365
+ padding-left: 1.5em;
366
+ margin: var(--trance-spacing-sm) 0;
367
+ }
368
+ .trance-ol {
369
+ list-style-type: decimal;
370
+ padding-left: 1.5em;
371
+ margin: var(--trance-spacing-sm) 0;
372
+ }
373
+ .trance-li {
374
+ margin: var(--trance-spacing-xs) 0;
375
+ }
376
+ .trance-li-checked,
377
+ .trance-li-unchecked {
378
+ list-style-type: none;
379
+ position: relative;
380
+ padding-left: 1.5em;
381
+ margin-left: -1.5em;
382
+ }
383
+ .trance-li-checked::before,
384
+ .trance-li-unchecked::before {
385
+ content: "";
386
+ position: absolute;
387
+ left: 0;
388
+ top: 0.35em;
389
+ width: 16px;
390
+ height: 16px;
391
+ border: 2px solid var(--trance-border-strong);
392
+ border-radius: var(--trance-radius-sm);
393
+ cursor: pointer;
394
+ transition: all var(--trance-transition-fast);
395
+ }
396
+ .trance-li-checked::before {
397
+ background: var(--trance-accent);
398
+ border-color: var(--trance-accent);
399
+ }
400
+ .trance-li-checked::after {
401
+ content: "";
402
+ position: absolute;
403
+ left: 5px;
404
+ top: 0.4em;
405
+ width: 6px;
406
+ height: 10px;
407
+ border: solid var(--trance-accent-text);
408
+ border-width: 0 2px 2px 0;
409
+ transform: rotate(45deg);
410
+ }
411
+ .trance-li-checked {
412
+ text-decoration: line-through;
413
+ color: var(--trance-text-muted);
414
+ }
415
+ .trance-ul .trance-ul {
416
+ list-style-type: circle;
417
+ }
418
+ .trance-ul .trance-ul .trance-ul {
419
+ list-style-type: square;
420
+ }
421
+ .trance-quote {
422
+ border-left: 4px solid var(--trance-blockquote-border);
423
+ background: var(--trance-blockquote-bg);
424
+ color: var(--trance-blockquote-text);
425
+ margin: var(--trance-spacing-md) 0;
426
+ padding: var(--trance-spacing-md) var(--trance-spacing-lg);
427
+ border-radius: 0 var(--trance-radius) var(--trance-radius) 0;
428
+ font-style: italic;
429
+ }
430
+ .trance-code-block {
431
+ font-family: var(--trance-font-mono);
432
+ font-size: var(--trance-font-size-sm);
433
+ background: var(--trance-code-block-bg);
434
+ color: var(--trance-code-block-text);
435
+ padding: var(--trance-spacing-lg);
436
+ margin: var(--trance-spacing-md) 0;
437
+ border-radius: var(--trance-radius-md);
438
+ overflow-x: auto;
439
+ line-height: 1.6;
440
+ tab-size: 2;
441
+ white-space: pre;
442
+ }
443
+ .trance-table {
444
+ width: 100%;
445
+ border-collapse: collapse;
446
+ margin: var(--trance-spacing-md) 0;
447
+ font-size: var(--trance-font-size-sm);
448
+ overflow: hidden;
449
+ border-radius: var(--trance-radius);
450
+ border: 1px solid var(--trance-table-border);
451
+ }
452
+ .trance-table-cell-header {
453
+ background: var(--trance-table-header-bg);
454
+ font-weight: 600;
455
+ text-align: left;
456
+ padding: var(--trance-spacing-sm) var(--trance-spacing-md);
457
+ border: 1px solid var(--trance-table-border);
458
+ }
459
+ .trance-table-cell {
460
+ padding: var(--trance-spacing-sm) var(--trance-spacing-md);
461
+ border: 1px solid var(--trance-table-border);
462
+ vertical-align: top;
463
+ }
464
+ .trance-table-row-striped {
465
+ background: var(--trance-table-stripe-bg);
466
+ }
467
+ .trance-hr {
468
+ border: none;
469
+ height: 2px;
470
+ background:
471
+ linear-gradient(
472
+ 90deg,
473
+ transparent,
474
+ var(--trance-border-strong),
475
+ transparent);
476
+ margin: var(--trance-spacing-xl) 0;
477
+ }
478
+ .trance-image-wrapper {
479
+ display: block;
480
+ position: relative;
481
+ width: fit-content;
482
+ max-width: 100%;
483
+ margin: var(--trance-spacing-md) 0;
484
+ border-radius: var(--trance-radius-md);
485
+ cursor: default;
486
+ user-select: none;
487
+ }
488
+ .trance-image-inner {
489
+ position: relative;
490
+ display: inline-block;
491
+ max-width: 100%;
492
+ }
493
+ .trance-image-inner figure {
494
+ margin: 0;
495
+ }
496
+ .trance-image-inner img {
497
+ display: block;
498
+ max-width: 100%;
499
+ height: auto;
500
+ border-radius: var(--trance-radius-md);
501
+ }
502
+ .trance-image-inner.selected img {
503
+ outline: 2px solid var(--trance-accent);
504
+ outline-offset: 2px;
505
+ }
506
+ .trance-image-background-placeholder {
507
+ display: inline-flex;
508
+ align-items: center;
509
+ gap: 6px;
510
+ padding: 4px 10px;
511
+ background: var(--trance-toolbar-bg);
512
+ border: 1px dashed var(--trance-border);
513
+ border-radius: var(--trance-radius);
514
+ font-size: var(--trance-font-size-sm);
515
+ color: var(--trance-text-secondary);
516
+ cursor: pointer;
517
+ user-select: none;
518
+ }
519
+ .trance-image-inner.selected .trance-image-background-placeholder {
520
+ border-color: var(--trance-accent);
521
+ color: var(--trance-accent);
522
+ }
523
+ .trance-image-wrapper.align-left {
524
+ margin-right: auto;
525
+ margin-left: 0;
526
+ }
527
+ .trance-image-wrapper.align-center {
528
+ margin-left: auto;
529
+ margin-right: auto;
530
+ }
531
+ .trance-image-wrapper.align-right {
532
+ margin-left: auto;
533
+ margin-right: 0;
534
+ }
535
+ .trance-image-toolbar {
536
+ position: absolute;
537
+ top: -36px;
538
+ left: 50%;
539
+ transform: translateX(-50%);
540
+ display: flex;
541
+ align-items: center;
542
+ gap: 2px;
543
+ padding: 2px;
544
+ background: var(--trance-toolbar-bg);
545
+ border: 1px solid var(--trance-border);
546
+ border-radius: var(--trance-radius-md);
547
+ box-shadow: var(--trance-shadow-float);
548
+ z-index: 100;
549
+ animation: trance-image-toolbar-in 150ms ease;
550
+ }
551
+ @keyframes trance-image-toolbar-in {
552
+ from {
553
+ opacity: 0;
554
+ transform: translateX(-50%) translateY(4px);
555
+ }
556
+ to {
557
+ opacity: 1;
558
+ transform: translateX(-50%) translateY(0);
559
+ }
560
+ }
561
+ .trance-image-toolbar button {
562
+ display: inline-flex;
563
+ align-items: center;
564
+ justify-content: center;
565
+ width: 28px;
566
+ height: 28px;
567
+ padding: 0;
568
+ border: none;
569
+ border-radius: var(--trance-radius);
570
+ background: transparent;
571
+ color: var(--trance-text-secondary);
572
+ cursor: pointer;
573
+ transition: all var(--trance-transition-fast);
574
+ }
575
+ .trance-image-toolbar button:hover {
576
+ background: var(--trance-toolbar-btn-hover);
577
+ color: var(--trance-text);
578
+ }
579
+ .trance-image-toolbar button.active {
580
+ background: var(--trance-toolbar-btn-active);
581
+ color: var(--trance-toolbar-btn-active-text);
582
+ }
583
+ .trance-image-toolbar button svg {
584
+ width: 14px;
585
+ height: 14px;
586
+ }
587
+ .trance-image-toolbar-divider {
588
+ width: 1px;
589
+ height: 18px;
590
+ background: var(--trance-border);
591
+ margin: 0 2px;
592
+ }
593
+ .trance-image-resize-handle {
594
+ position: absolute;
595
+ bottom: 4px;
596
+ right: 4px;
597
+ width: 12px;
598
+ height: 12px;
599
+ background: var(--trance-accent);
600
+ border: 2px solid var(--trance-bg);
601
+ border-radius: var(--trance-radius-sm);
602
+ cursor: nwse-resize;
603
+ z-index: 10;
604
+ box-shadow: var(--trance-shadow);
605
+ }
606
+ .trance-image-resize-handle:hover {
607
+ background: var(--trance-accent-hover);
608
+ transform: scale(1.1);
609
+ }
610
+ .trance-image-caption {
611
+ text-align: center;
612
+ font-size: var(--trance-font-size-sm);
613
+ color: var(--trance-text-muted);
614
+ margin-top: var(--trance-spacing-xs);
615
+ font-style: italic;
616
+ }
617
+ .trance-text-left {
618
+ text-align: left;
619
+ }
620
+ .trance-text-center {
621
+ text-align: center;
622
+ }
623
+ .trance-text-right {
624
+ text-align: right;
625
+ }
626
+ .trance-text-justify {
627
+ text-align: justify;
628
+ }
629
+ .trance-indent {
630
+ --lexical-indent-base-value: 40px;
631
+ }
632
+
633
+ /* src/styles/toolbar.css */
634
+ .trance-toolbar {
635
+ position: relative;
636
+ z-index: 10;
637
+ display: flex;
638
+ flex-wrap: nowrap;
639
+ align-items: center;
640
+ gap: 2px;
641
+ padding: var(--trance-spacing-xs) var(--trance-spacing-sm);
642
+ background: var(--trance-toolbar-bg);
643
+ border-bottom: 1px solid var(--trance-toolbar-border);
644
+ user-select: none;
645
+ overflow-x: auto;
646
+ scrollbar-width: thin;
647
+ scrollbar-color: var(--trance-border-strong) transparent;
648
+ }
649
+ .trance-toolbar::-webkit-scrollbar {
650
+ height: 6px;
651
+ }
652
+ .trance-toolbar::-webkit-scrollbar-track {
653
+ background: transparent;
654
+ }
655
+ .trance-toolbar::-webkit-scrollbar-thumb {
656
+ background: var(--trance-border-strong);
657
+ border-radius: var(--trance-radius-full);
658
+ }
659
+ .trance-toolbar-btn {
660
+ display: inline-flex;
661
+ align-items: center;
662
+ justify-content: center;
663
+ width: 32px;
664
+ height: 32px;
665
+ padding: 0;
666
+ border: none;
667
+ border-radius: var(--trance-radius);
668
+ background: transparent;
669
+ color: var(--trance-text-secondary);
670
+ cursor: pointer;
671
+ transition: all var(--trance-transition-fast);
672
+ flex-shrink: 0;
673
+ position: relative;
674
+ }
675
+ .trance-toolbar-btn:hover {
676
+ background: var(--trance-toolbar-btn-hover);
677
+ color: var(--trance-text);
678
+ }
679
+ .trance-toolbar-btn:active {
680
+ transform: scale(0.94);
681
+ }
682
+ .trance-toolbar-btn.active {
683
+ background: var(--trance-toolbar-btn-active);
684
+ color: var(--trance-toolbar-btn-active-text);
685
+ }
686
+ .trance-toolbar-btn:disabled {
687
+ opacity: 0.4;
688
+ cursor: not-allowed;
689
+ }
690
+ .trance-toolbar-btn:disabled:hover {
691
+ background: transparent;
692
+ transform: none;
693
+ }
694
+ .trance-toolbar-btn svg {
695
+ width: 16px;
696
+ height: 16px;
697
+ flex-shrink: 0;
698
+ }
699
+ .trance-toolbar-separator {
700
+ width: 1px;
701
+ height: 20px;
702
+ background: var(--trance-toolbar-separator);
703
+ margin: 0 var(--trance-spacing-xs);
704
+ flex-shrink: 0;
705
+ }
706
+ .trance-block-dropdown-wrapper {
707
+ position: relative;
708
+ }
709
+ .trance-block-dropdown-trigger {
710
+ display: inline-flex;
711
+ align-items: center;
712
+ gap: var(--trance-spacing-xs);
713
+ height: 32px;
714
+ padding: 0 var(--trance-spacing-sm);
715
+ border: none;
716
+ border-radius: var(--trance-radius);
717
+ background: transparent;
718
+ color: var(--trance-text-secondary);
719
+ font-family: var(--trance-font-sans);
720
+ font-size: var(--trance-font-size-sm);
721
+ font-weight: 500;
722
+ cursor: pointer;
723
+ transition: all var(--trance-transition-fast);
724
+ white-space: nowrap;
725
+ min-width: 100px;
726
+ }
727
+ .trance-block-dropdown-trigger:hover {
728
+ background: var(--trance-toolbar-btn-hover);
729
+ color: var(--trance-text);
730
+ }
731
+ .trance-block-dropdown-trigger svg.chevron {
732
+ width: 12px;
733
+ height: 12px;
734
+ transition: transform var(--trance-transition);
735
+ }
736
+ .trance-block-dropdown-trigger[aria-expanded=true] svg.chevron {
737
+ transform: rotate(180deg);
738
+ }
739
+ .trance-block-dropdown-menu {
740
+ position: fixed;
741
+ z-index: 100;
742
+ min-width: 160px;
743
+ padding: var(--trance-spacing-xs);
744
+ background: var(--trance-toolbar-bg);
745
+ border: 1px solid var(--trance-border);
746
+ border-radius: var(--trance-radius-md);
747
+ box-shadow: var(--trance-shadow-lg);
748
+ animation: trance-dropdown-in 150ms ease;
749
+ }
750
+ @keyframes trance-dropdown-in {
751
+ from {
752
+ opacity: 0;
753
+ transform: translateY(-4px) scale(0.97);
754
+ }
755
+ to {
756
+ opacity: 1;
757
+ transform: translateY(0) scale(1);
758
+ }
759
+ }
760
+ .trance-block-dropdown-item {
761
+ display: flex;
762
+ align-items: center;
763
+ gap: var(--trance-spacing-sm);
764
+ width: 100%;
765
+ padding: var(--trance-spacing-sm) var(--trance-spacing-md);
766
+ border: none;
767
+ border-radius: var(--trance-radius);
768
+ background: transparent;
769
+ color: var(--trance-text);
770
+ font-family: var(--trance-font-sans);
771
+ font-size: var(--trance-font-size-sm);
772
+ cursor: pointer;
773
+ transition: background var(--trance-transition-fast);
774
+ text-align: left;
775
+ }
776
+ .trance-block-dropdown-item:hover {
777
+ background: var(--trance-toolbar-btn-hover);
778
+ }
779
+ .trance-block-dropdown-item.active {
780
+ background: var(--trance-toolbar-btn-active);
781
+ color: var(--trance-toolbar-btn-active-text);
782
+ }
783
+ .trance-block-dropdown-item svg {
784
+ width: 16px;
785
+ height: 16px;
786
+ flex-shrink: 0;
787
+ opacity: 0.7;
788
+ }
789
+ .trance-table-dropdown-wrapper {
790
+ position: relative;
791
+ }
792
+ .trance-table-size-picker {
793
+ position: fixed;
794
+ z-index: 100;
795
+ padding: var(--trance-spacing-sm);
796
+ background: var(--trance-toolbar-bg);
797
+ border: 1px solid var(--trance-border);
798
+ border-radius: var(--trance-radius-md);
799
+ box-shadow: var(--trance-shadow-lg);
800
+ animation: trance-dropdown-in 150ms ease;
801
+ }
802
+ .trance-table-size-picker-label {
803
+ font-size: var(--trance-font-size-sm);
804
+ font-weight: 500;
805
+ color: var(--trance-text);
806
+ margin-bottom: var(--trance-spacing-sm);
807
+ text-align: center;
808
+ min-width: 120px;
809
+ }
810
+ .trance-table-size-picker-grid {
811
+ display: flex;
812
+ flex-direction: column;
813
+ gap: 3px;
814
+ }
815
+ .trance-table-size-picker-row {
816
+ display: flex;
817
+ gap: 3px;
818
+ }
819
+ .trance-table-size-picker-cell {
820
+ width: 18px;
821
+ height: 18px;
822
+ padding: 0;
823
+ border: 1px solid var(--trance-border);
824
+ border-radius: var(--trance-radius-sm);
825
+ background: var(--trance-surface);
826
+ cursor: pointer;
827
+ transition: all var(--trance-transition-fast);
828
+ }
829
+ .trance-table-size-picker-cell:hover,
830
+ .trance-table-size-picker-cell.active {
831
+ background: var(--trance-accent);
832
+ border-color: var(--trance-accent);
833
+ }
834
+ .trance-tooltip {
835
+ position: absolute;
836
+ bottom: calc(100% + 6px);
837
+ left: 50%;
838
+ transform: translateX(-50%);
839
+ padding: 4px 8px;
840
+ background: var(--trance-text);
841
+ color: var(--trance-text-inverse);
842
+ font-size: var(--trance-font-size-xs);
843
+ font-weight: 500;
844
+ border-radius: var(--trance-radius-sm);
845
+ white-space: nowrap;
846
+ pointer-events: none;
847
+ opacity: 0;
848
+ transition: opacity var(--trance-transition);
849
+ z-index: 1002;
850
+ }
851
+ .trance-toolbar-btn:hover .trance-tooltip {
852
+ opacity: 1;
853
+ }
854
+ /*# sourceMappingURL=index.css.map */