@zuilib/text-editor 0.5.0 → 0.7.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/CHANGELOG.md +71 -0
- package/DRAWING_FORMAT.md +11 -5
- package/README.md +122 -26
- package/dist/index.d.ts +108 -24
- package/dist/index.js +302 -181
- package/dist/styles.css +190 -163
- package/package.json +1 -1
package/dist/styles.css
CHANGED
|
@@ -11,21 +11,62 @@
|
|
|
11
11
|
min-height: 100%;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
+
/*
|
|
15
|
+
* Text measure (opt in). `--zui-text-editor-measure` — a CSS length, unset
|
|
16
|
+
* by default — caps the text column. The pane's gutter grows from the base
|
|
17
|
+
* 2rem to centre that column, and `--zui-text-editor-bleed` is how far a
|
|
18
|
+
* full-width block extends past the column on each side. With the measure
|
|
19
|
+
* unset both resolve to the previous layout (2rem gutter, no bleed).
|
|
20
|
+
*
|
|
21
|
+
* The pane is a container so `cqw` measures *its* width in every
|
|
22
|
+
* descendant, whatever the descendant's own width; the outline sidebar is
|
|
23
|
+
* a sibling, so full-width blocks stop short of it.
|
|
24
|
+
*/
|
|
14
25
|
.zui-text-editor-main {
|
|
15
26
|
position: relative;
|
|
16
27
|
display: flex;
|
|
17
28
|
flex-direction: column;
|
|
18
29
|
flex: 1;
|
|
19
30
|
min-width: 0;
|
|
31
|
+
container-type: inline-size;
|
|
32
|
+
--zui-text-editor-gutter: max(
|
|
33
|
+
2rem,
|
|
34
|
+
calc((100cqw - var(--zui-text-editor-measure, 100cqw)) / 2)
|
|
35
|
+
);
|
|
36
|
+
--zui-text-editor-bleed: calc(var(--zui-text-editor-gutter) - 2rem);
|
|
20
37
|
}
|
|
21
38
|
|
|
22
39
|
.zui-text-editor-content {
|
|
23
40
|
flex: 1;
|
|
24
41
|
min-height: 100%;
|
|
25
|
-
padding: 1.5rem 2rem;
|
|
42
|
+
padding: 1.5rem var(--zui-text-editor-gutter, 2rem);
|
|
26
43
|
outline: none;
|
|
27
44
|
}
|
|
28
45
|
|
|
46
|
+
/*
|
|
47
|
+
* Block width. Every top-level block sits in the text column and may bleed
|
|
48
|
+
* past it by `--zui-text-editor-block-bleed` (0 unless set). Tables and
|
|
49
|
+
* drawings default it to the pane's bleed (`full`); their `text` and
|
|
50
|
+
* `content` settings pin it to 0 — as an inline style on the table (see
|
|
51
|
+
* tableSettings.ts) and a class on the drawing canvas. Zero-specificity
|
|
52
|
+
* selectors, so one class rule overrides any block kind, e.g.
|
|
53
|
+
* `.zui-code { --zui-text-editor-block-bleed: var(--zui-text-editor-bleed) }`.
|
|
54
|
+
*/
|
|
55
|
+
:where(.zui-text-editor-content > *) {
|
|
56
|
+
margin-inline: calc(-1 * var(--zui-text-editor-block-bleed, 0px));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
:where(.zui-table, .zui-drawing) {
|
|
60
|
+
--zui-text-editor-block-bleed: var(--zui-text-editor-bleed, 0px);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
:where(
|
|
64
|
+
.zui-drawing:has(> .is-text-width),
|
|
65
|
+
.zui-drawing:has(> .is-content-width)
|
|
66
|
+
) {
|
|
67
|
+
--zui-text-editor-block-bleed: 0px;
|
|
68
|
+
}
|
|
69
|
+
|
|
29
70
|
/* Outline (table of contents) sidebar */
|
|
30
71
|
.zui-text-editor-outline {
|
|
31
72
|
position: sticky;
|
|
@@ -115,7 +156,8 @@
|
|
|
115
156
|
|
|
116
157
|
.zui-text-editor-fold {
|
|
117
158
|
position: absolute;
|
|
118
|
-
left
|
|
159
|
+
/* Just left of the text column; 0.45rem with the default gutter */
|
|
160
|
+
left: calc(var(--zui-text-editor-gutter, 2rem) - 1.55rem);
|
|
119
161
|
display: inline-flex;
|
|
120
162
|
align-items: center;
|
|
121
163
|
justify-content: center;
|
|
@@ -155,7 +197,7 @@
|
|
|
155
197
|
.zui-text-editor-placeholder {
|
|
156
198
|
position: absolute;
|
|
157
199
|
top: 1.5rem;
|
|
158
|
-
left: 2rem;
|
|
200
|
+
left: var(--zui-text-editor-gutter, 2rem);
|
|
159
201
|
pointer-events: none;
|
|
160
202
|
user-select: none;
|
|
161
203
|
}
|
|
@@ -209,7 +251,7 @@
|
|
|
209
251
|
.zui-frontmatter {
|
|
210
252
|
display: block;
|
|
211
253
|
white-space: pre-wrap;
|
|
212
|
-
margin: 0
|
|
254
|
+
margin-block: 0 1rem;
|
|
213
255
|
padding: 0.75rem 1rem;
|
|
214
256
|
border: 1px solid currentColor;
|
|
215
257
|
border-radius: 0.375rem;
|
|
@@ -272,11 +314,15 @@
|
|
|
272
314
|
background: color-mix(in srgb, currentColor 15%, transparent);
|
|
273
315
|
}
|
|
274
316
|
|
|
275
|
-
/*
|
|
317
|
+
/*
|
|
318
|
+
* Tables — artifact-style: rounded outer border, subtle header, tight rules.
|
|
319
|
+
* Width follows the block bleed above (inline margins come from the shared
|
|
320
|
+
* block rule); a `content` table sets `width: auto` inline instead.
|
|
321
|
+
*/
|
|
276
322
|
.zui-table {
|
|
277
|
-
width: 100
|
|
278
|
-
max-width: 100
|
|
279
|
-
margin: 1rem
|
|
323
|
+
width: calc(100% + 2 * var(--zui-text-editor-block-bleed, 0px));
|
|
324
|
+
max-width: calc(100% + 2 * var(--zui-text-editor-block-bleed, 0px));
|
|
325
|
+
margin-block: 1rem;
|
|
280
326
|
border-collapse: separate;
|
|
281
327
|
border-spacing: 0;
|
|
282
328
|
border: 1px solid color-mix(in srgb, currentColor 15%, transparent);
|
|
@@ -316,7 +362,7 @@
|
|
|
316
362
|
.zui-table-selected,
|
|
317
363
|
.zui-table-cell.zui-table-selected {
|
|
318
364
|
outline: none;
|
|
319
|
-
background: color-mix(in srgb, #6965db 14%, transparent);
|
|
365
|
+
background: color-mix(in srgb, var(--primary, #6965db) 14%, transparent);
|
|
320
366
|
}
|
|
321
367
|
|
|
322
368
|
/*
|
|
@@ -345,24 +391,57 @@
|
|
|
345
391
|
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
|
346
392
|
}
|
|
347
393
|
|
|
348
|
-
/*
|
|
394
|
+
/*
|
|
395
|
+
* Drawing canvas.
|
|
396
|
+
*
|
|
397
|
+
* Every color, radius and shadow of the canvas chrome comes from a
|
|
398
|
+
* `--zui-drawing-*` custom property. They default to the ZUI core theme
|
|
399
|
+
* tokens (`--primary`, `--foreground`, `--border`, …) so the canvas follows
|
|
400
|
+
* the host theme, light and dark, and consumers override them on
|
|
401
|
+
* `.zui-drawing-canvas` (or any ancestor) to restyle without touching
|
|
402
|
+
* selectors. `--zui-drawing-surface` and `--zui-drawing-grid` are the
|
|
403
|
+
* pre-filter colors of the drawing area: in dark mode the whole area is
|
|
404
|
+
* passed through `--zui-drawing-dark-filter` so stored shape colors stay
|
|
405
|
+
* theme-agnostic (set the filter to `none` to opt out).
|
|
406
|
+
*/
|
|
349
407
|
.zui-drawing {
|
|
350
|
-
margin: 1rem
|
|
408
|
+
margin-block: 1rem;
|
|
351
409
|
}
|
|
352
410
|
|
|
353
411
|
.zui-drawing-canvas {
|
|
354
|
-
--zui-drawing-accent: #
|
|
412
|
+
--zui-drawing-accent: var(--primary, #3b82f6);
|
|
413
|
+
--zui-drawing-foreground: var(--foreground, #0a0a0a);
|
|
414
|
+
--zui-drawing-muted-foreground: var(--muted-foreground, #71717a);
|
|
415
|
+
--zui-drawing-border: var(--border, #e4e4e7);
|
|
416
|
+
--zui-drawing-chrome: var(--background, #ffffff);
|
|
417
|
+
--zui-drawing-popover: var(--popover, #ffffff);
|
|
418
|
+
--zui-drawing-popover-foreground: var(--popover-foreground, var(--zui-drawing-foreground));
|
|
419
|
+
--zui-drawing-danger: var(--destructive, #ef4444);
|
|
420
|
+
--zui-drawing-success: var(--success, #22c55e);
|
|
421
|
+
--zui-drawing-radius: var(--radius-lg, 0.75rem);
|
|
422
|
+
--zui-drawing-control-radius: var(--radius, 0.375rem);
|
|
423
|
+
--zui-drawing-shadow: var(--shadow-medium, 0 4px 6px -1px rgba(0, 0, 0, 0.1));
|
|
424
|
+
--zui-drawing-font: ui-sans-serif, system-ui, sans-serif;
|
|
425
|
+
--zui-drawing-surface: #ffffff;
|
|
426
|
+
--zui-drawing-grid: rgba(0, 0, 0, 0.09);
|
|
427
|
+
--zui-drawing-grid-size: 20px;
|
|
428
|
+
--zui-drawing-dark-filter: invert(93%) hue-rotate(180deg);
|
|
429
|
+
--zui-drawing-hover: color-mix(in srgb, currentColor 8%, transparent);
|
|
430
|
+
--zui-drawing-active: color-mix(in srgb, currentColor 12%, transparent);
|
|
431
|
+
|
|
355
432
|
position: relative;
|
|
356
|
-
border: 1px solid
|
|
357
|
-
border-radius:
|
|
358
|
-
background:
|
|
433
|
+
border: 1px solid var(--zui-drawing-border);
|
|
434
|
+
border-radius: var(--zui-drawing-radius);
|
|
435
|
+
background: var(--zui-drawing-chrome);
|
|
436
|
+
color: var(--zui-drawing-foreground);
|
|
437
|
+
font-family: var(--zui-drawing-font);
|
|
359
438
|
outline: none;
|
|
360
439
|
overflow: hidden;
|
|
361
|
-
transition: box-shadow 0.
|
|
440
|
+
transition: box-shadow 0.15s ease, border-color 0.15s ease;
|
|
362
441
|
}
|
|
363
442
|
|
|
364
443
|
.zui-drawing-canvas.is-editable:focus-within {
|
|
365
|
-
border-color: color-mix(in srgb, var(--zui-drawing-accent)
|
|
444
|
+
border-color: color-mix(in srgb, var(--zui-drawing-accent) 50%, var(--zui-drawing-border));
|
|
366
445
|
box-shadow: 0 0 0 3px color-mix(in srgb, var(--zui-drawing-accent) 12%, transparent);
|
|
367
446
|
}
|
|
368
447
|
|
|
@@ -371,25 +450,30 @@
|
|
|
371
450
|
max-width: 100%;
|
|
372
451
|
}
|
|
373
452
|
|
|
453
|
+
.zui-drawing-stage {
|
|
454
|
+
position: relative;
|
|
455
|
+
}
|
|
456
|
+
|
|
374
457
|
.zui-drawing-surface {
|
|
375
458
|
display: block;
|
|
376
459
|
width: 100%;
|
|
377
460
|
max-width: 100%;
|
|
378
461
|
touch-action: none;
|
|
379
|
-
|
|
380
|
-
background-
|
|
381
|
-
background-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
.zui-drawing-shape {
|
|
385
|
-
transition: filter 0.12s ease;
|
|
462
|
+
font-family: var(--zui-drawing-font);
|
|
463
|
+
background-color: var(--zui-drawing-surface);
|
|
464
|
+
background-image: radial-gradient(circle, var(--zui-drawing-grid) 1px, transparent 1px);
|
|
465
|
+
background-size: var(--zui-drawing-grid-size) var(--zui-drawing-grid-size);
|
|
386
466
|
}
|
|
387
467
|
|
|
388
|
-
|
|
389
|
-
|
|
468
|
+
/* Selection chrome inside the SVG: everything is drawn in `currentColor` */
|
|
469
|
+
.zui-drawing-selection,
|
|
470
|
+
.zui-drawing-bind-target {
|
|
471
|
+
color: var(--zui-drawing-accent);
|
|
390
472
|
}
|
|
391
473
|
|
|
392
474
|
.zui-drawing-handle {
|
|
475
|
+
fill: var(--zui-drawing-surface);
|
|
476
|
+
stroke: currentColor;
|
|
393
477
|
filter: drop-shadow(0 1px 1.5px rgba(0, 0, 0, 0.25));
|
|
394
478
|
}
|
|
395
479
|
|
|
@@ -402,6 +486,18 @@
|
|
|
402
486
|
opacity: 1;
|
|
403
487
|
}
|
|
404
488
|
|
|
489
|
+
.zui-drawing-label-plate {
|
|
490
|
+
fill: var(--zui-drawing-surface);
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
.zui-drawing-shape {
|
|
494
|
+
transition: filter 0.12s ease;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
.zui-drawing-canvas.is-editable .zui-drawing-shape:hover:not(.is-selected) {
|
|
498
|
+
filter: drop-shadow(0 0 2.5px color-mix(in srgb, var(--zui-drawing-accent) 55%, transparent));
|
|
499
|
+
}
|
|
500
|
+
|
|
405
501
|
.zui-drawing-bind-target {
|
|
406
502
|
animation: zui-drawing-pulse 0.9s ease-in-out infinite alternate;
|
|
407
503
|
}
|
|
@@ -418,43 +514,29 @@
|
|
|
418
514
|
@keyframes zui-drawing-pop {
|
|
419
515
|
from {
|
|
420
516
|
opacity: 0;
|
|
421
|
-
transform: translateY(
|
|
517
|
+
transform: translateY(-3px);
|
|
422
518
|
}
|
|
423
519
|
to {
|
|
424
520
|
opacity: 1;
|
|
425
|
-
transform: translateY(0)
|
|
521
|
+
transform: translateY(0);
|
|
426
522
|
}
|
|
427
523
|
}
|
|
428
524
|
|
|
429
|
-
/*
|
|
525
|
+
/* Header: tools row (+ contextual properties row), same idiom as the editor toolbar */
|
|
430
526
|
.zui-drawing-toolbar {
|
|
431
|
-
position: absolute;
|
|
432
|
-
top: 0.625rem;
|
|
433
|
-
left: 0.625rem;
|
|
434
|
-
right: 0.625rem;
|
|
435
|
-
z-index: 5;
|
|
436
527
|
display: flex;
|
|
437
528
|
flex-wrap: wrap;
|
|
438
|
-
align-items:
|
|
439
|
-
gap: 0.5rem;
|
|
440
|
-
|
|
529
|
+
align-items: center;
|
|
530
|
+
gap: 0.125rem 0.5rem;
|
|
531
|
+
padding: 0.375rem 0.625rem;
|
|
532
|
+
border-bottom: 1px solid var(--zui-drawing-border);
|
|
533
|
+
background: var(--zui-drawing-chrome);
|
|
441
534
|
}
|
|
442
535
|
|
|
443
|
-
.zui-drawing-toolbar-group
|
|
444
|
-
.zui-drawing-props {
|
|
536
|
+
.zui-drawing-toolbar-group {
|
|
445
537
|
display: flex;
|
|
446
538
|
align-items: center;
|
|
447
539
|
gap: 0.125rem;
|
|
448
|
-
padding: 0.25rem;
|
|
449
|
-
border: 1px solid rgba(0, 0, 0, 0.07);
|
|
450
|
-
border-radius: 0.625rem;
|
|
451
|
-
background: rgba(255, 255, 255, 0.88);
|
|
452
|
-
backdrop-filter: blur(10px);
|
|
453
|
-
-webkit-backdrop-filter: blur(10px);
|
|
454
|
-
box-shadow:
|
|
455
|
-
0 1px 2px rgba(0, 0, 0, 0.05),
|
|
456
|
-
0 6px 20px -8px rgba(0, 0, 0, 0.18);
|
|
457
|
-
pointer-events: auto;
|
|
458
540
|
}
|
|
459
541
|
|
|
460
542
|
.zui-drawing-toolbar-group-end {
|
|
@@ -464,8 +546,8 @@
|
|
|
464
546
|
.zui-drawing-toolbar-divider {
|
|
465
547
|
width: 1px;
|
|
466
548
|
height: 1.125rem;
|
|
467
|
-
margin: 0 0.
|
|
468
|
-
background:
|
|
549
|
+
margin: 0 0.375rem;
|
|
550
|
+
background: color-mix(in srgb, currentColor 15%, transparent);
|
|
469
551
|
}
|
|
470
552
|
|
|
471
553
|
.zui-drawing-tool {
|
|
@@ -473,57 +555,56 @@
|
|
|
473
555
|
display: inline-flex;
|
|
474
556
|
align-items: center;
|
|
475
557
|
justify-content: center;
|
|
476
|
-
width: 1.
|
|
477
|
-
height: 1.
|
|
558
|
+
width: 1.75rem;
|
|
559
|
+
height: 1.75rem;
|
|
478
560
|
border: none;
|
|
479
|
-
border-radius:
|
|
561
|
+
border-radius: var(--zui-drawing-control-radius);
|
|
480
562
|
background: transparent;
|
|
481
|
-
color:
|
|
563
|
+
color: inherit;
|
|
564
|
+
opacity: 0.65;
|
|
482
565
|
cursor: pointer;
|
|
483
566
|
transition:
|
|
484
567
|
background-color 0.12s ease,
|
|
485
|
-
|
|
486
|
-
transform 0.12s ease;
|
|
568
|
+
opacity 0.12s ease;
|
|
487
569
|
}
|
|
488
570
|
|
|
489
571
|
.zui-drawing-tool:hover {
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
.zui-drawing-tool:active {
|
|
494
|
-
transform: scale(0.94);
|
|
572
|
+
opacity: 1;
|
|
573
|
+
background: var(--zui-drawing-hover);
|
|
495
574
|
}
|
|
496
575
|
|
|
497
576
|
.zui-drawing-tool.is-active {
|
|
498
|
-
|
|
499
|
-
color:
|
|
577
|
+
opacity: 1;
|
|
578
|
+
color: var(--zui-drawing-accent);
|
|
579
|
+
background: color-mix(in srgb, var(--zui-drawing-accent) 14%, transparent);
|
|
500
580
|
}
|
|
501
581
|
|
|
502
582
|
.zui-drawing-tool.is-success {
|
|
503
|
-
|
|
583
|
+
opacity: 1;
|
|
584
|
+
color: var(--zui-drawing-success);
|
|
504
585
|
}
|
|
505
586
|
|
|
506
587
|
.zui-drawing-tool-danger {
|
|
507
|
-
color:
|
|
588
|
+
color: var(--zui-drawing-danger);
|
|
508
589
|
}
|
|
509
590
|
|
|
510
591
|
.zui-drawing-tool-danger:hover {
|
|
511
|
-
background:
|
|
592
|
+
background: color-mix(in srgb, var(--zui-drawing-danger) 12%, transparent);
|
|
512
593
|
}
|
|
513
594
|
|
|
514
595
|
.zui-drawing-tool-more {
|
|
515
|
-
width: 2.
|
|
596
|
+
width: 2.25rem;
|
|
516
597
|
}
|
|
517
598
|
|
|
518
599
|
.zui-drawing-caret {
|
|
519
600
|
position: absolute;
|
|
520
|
-
right: 0.
|
|
521
|
-
bottom: 0.
|
|
601
|
+
right: 0.25rem;
|
|
602
|
+
bottom: 0.25rem;
|
|
522
603
|
width: 0;
|
|
523
604
|
height: 0;
|
|
524
605
|
border-left: 4px solid transparent;
|
|
525
606
|
border-top: 4px solid currentColor;
|
|
526
|
-
opacity: 0.
|
|
607
|
+
opacity: 0.7;
|
|
527
608
|
}
|
|
528
609
|
|
|
529
610
|
.zui-drawing-more {
|
|
@@ -532,7 +613,7 @@
|
|
|
532
613
|
|
|
533
614
|
.zui-drawing-popover {
|
|
534
615
|
position: absolute;
|
|
535
|
-
top: calc(100% + 0.
|
|
616
|
+
top: calc(100% + 0.25rem);
|
|
536
617
|
left: 0;
|
|
537
618
|
z-index: 7;
|
|
538
619
|
display: flex;
|
|
@@ -540,14 +621,12 @@
|
|
|
540
621
|
gap: 0.125rem;
|
|
541
622
|
min-width: 9.5rem;
|
|
542
623
|
padding: 0.25rem;
|
|
543
|
-
border: 1px solid
|
|
544
|
-
border-radius:
|
|
545
|
-
background:
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
animation: zui-drawing-pop 0.14s ease-out;
|
|
550
|
-
transform-origin: top left;
|
|
624
|
+
border: 1px solid var(--zui-drawing-border);
|
|
625
|
+
border-radius: var(--zui-drawing-control-radius);
|
|
626
|
+
background: var(--zui-drawing-popover);
|
|
627
|
+
color: var(--zui-drawing-popover-foreground);
|
|
628
|
+
box-shadow: var(--zui-drawing-shadow);
|
|
629
|
+
animation: zui-drawing-pop 0.12s ease-out;
|
|
551
630
|
}
|
|
552
631
|
|
|
553
632
|
.zui-drawing-popover-item {
|
|
@@ -556,9 +635,9 @@
|
|
|
556
635
|
gap: 0.5rem;
|
|
557
636
|
padding: 0.375rem 0.5rem;
|
|
558
637
|
border: none;
|
|
559
|
-
border-radius:
|
|
638
|
+
border-radius: var(--zui-drawing-control-radius);
|
|
560
639
|
background: transparent;
|
|
561
|
-
color:
|
|
640
|
+
color: inherit;
|
|
562
641
|
font-size: 0.8125rem;
|
|
563
642
|
text-align: left;
|
|
564
643
|
cursor: pointer;
|
|
@@ -566,36 +645,39 @@
|
|
|
566
645
|
}
|
|
567
646
|
|
|
568
647
|
.zui-drawing-popover-item:hover {
|
|
569
|
-
background:
|
|
648
|
+
background: var(--zui-drawing-hover);
|
|
570
649
|
}
|
|
571
650
|
|
|
572
651
|
.zui-drawing-popover-item.is-active {
|
|
573
|
-
|
|
574
|
-
|
|
652
|
+
color: var(--zui-drawing-accent);
|
|
653
|
+
background: color-mix(in srgb, var(--zui-drawing-accent) 14%, transparent);
|
|
575
654
|
}
|
|
576
655
|
|
|
577
|
-
/* Contextual
|
|
656
|
+
/* Contextual properties: a second row that expands under the tools */
|
|
578
657
|
.zui-drawing-props-host {
|
|
579
658
|
flex-basis: 100%;
|
|
580
659
|
display: flex;
|
|
660
|
+
max-height: 0;
|
|
661
|
+
overflow: hidden;
|
|
581
662
|
opacity: 0;
|
|
582
|
-
transform: translateY(-4px);
|
|
583
663
|
pointer-events: none;
|
|
584
664
|
transition:
|
|
585
|
-
|
|
586
|
-
|
|
665
|
+
max-height 0.18s ease,
|
|
666
|
+
opacity 0.18s ease;
|
|
587
667
|
}
|
|
588
668
|
|
|
589
669
|
.zui-drawing-props-host.is-visible {
|
|
670
|
+
max-height: 6rem;
|
|
590
671
|
opacity: 1;
|
|
591
|
-
transform: translateY(0);
|
|
592
672
|
pointer-events: auto;
|
|
593
673
|
}
|
|
594
674
|
|
|
595
675
|
.zui-drawing-props {
|
|
676
|
+
display: flex;
|
|
596
677
|
flex-wrap: wrap;
|
|
678
|
+
align-items: center;
|
|
597
679
|
gap: 0.25rem;
|
|
598
|
-
padding: 0.25rem 0.
|
|
680
|
+
padding: 0.25rem 0 0.125rem;
|
|
599
681
|
}
|
|
600
682
|
|
|
601
683
|
.zui-drawing-props-group {
|
|
@@ -605,24 +687,24 @@
|
|
|
605
687
|
}
|
|
606
688
|
|
|
607
689
|
.zui-drawing-props-group + .zui-drawing-props-group {
|
|
608
|
-
padding-left: 0.
|
|
609
|
-
border-left: 1px solid
|
|
690
|
+
padding-left: 0.5rem;
|
|
691
|
+
border-left: 1px solid color-mix(in srgb, currentColor 15%, transparent);
|
|
610
692
|
}
|
|
611
693
|
|
|
612
694
|
.zui-drawing-swatch-label {
|
|
613
695
|
margin: 0 0.25rem 0 0.125rem;
|
|
614
696
|
font-size: 0.6875rem;
|
|
615
697
|
letter-spacing: 0.02em;
|
|
616
|
-
color:
|
|
698
|
+
color: var(--zui-drawing-muted-foreground);
|
|
617
699
|
user-select: none;
|
|
618
700
|
}
|
|
619
701
|
|
|
620
702
|
.zui-drawing-swatch {
|
|
621
|
-
width:
|
|
622
|
-
height:
|
|
703
|
+
width: 1rem;
|
|
704
|
+
height: 1rem;
|
|
623
705
|
margin: 0 0.125rem;
|
|
624
706
|
padding: 0;
|
|
625
|
-
border: 1px solid rgba(0, 0, 0, 0.
|
|
707
|
+
border: 1px solid rgba(0, 0, 0, 0.18);
|
|
626
708
|
border-radius: 999px;
|
|
627
709
|
cursor: pointer;
|
|
628
710
|
transition:
|
|
@@ -636,7 +718,7 @@
|
|
|
636
718
|
|
|
637
719
|
.zui-drawing-swatch.is-active {
|
|
638
720
|
box-shadow:
|
|
639
|
-
0 0 0 2px
|
|
721
|
+
0 0 0 2px var(--zui-drawing-chrome),
|
|
640
722
|
0 0 0 3.5px var(--zui-drawing-accent);
|
|
641
723
|
}
|
|
642
724
|
|
|
@@ -657,9 +739,8 @@
|
|
|
657
739
|
display: flex;
|
|
658
740
|
align-items: center;
|
|
659
741
|
justify-content: center;
|
|
660
|
-
padding-top: 2rem;
|
|
661
742
|
font-size: 0.8125rem;
|
|
662
|
-
color:
|
|
743
|
+
color: var(--zui-drawing-muted-foreground);
|
|
663
744
|
pointer-events: none;
|
|
664
745
|
user-select: none;
|
|
665
746
|
}
|
|
@@ -682,10 +763,11 @@
|
|
|
682
763
|
padding: 0;
|
|
683
764
|
border: 0;
|
|
684
765
|
border-radius: 3px;
|
|
685
|
-
outline: 1.5px dashed var(--zui-drawing-accent
|
|
766
|
+
outline: 1.5px dashed var(--zui-drawing-accent);
|
|
686
767
|
outline-offset: 3px;
|
|
687
|
-
background:
|
|
768
|
+
background: color-mix(in srgb, var(--zui-drawing-surface) 85%, transparent);
|
|
688
769
|
color: inherit;
|
|
770
|
+
font-family: var(--zui-drawing-font);
|
|
689
771
|
resize: none;
|
|
690
772
|
overflow: hidden;
|
|
691
773
|
box-sizing: content-box;
|
|
@@ -707,7 +789,7 @@
|
|
|
707
789
|
justify-content: center;
|
|
708
790
|
width: 1.375rem;
|
|
709
791
|
height: 1.375rem;
|
|
710
|
-
border-radius:
|
|
792
|
+
border-radius: var(--zui-drawing-control-radius);
|
|
711
793
|
color: #1e1e1e;
|
|
712
794
|
opacity: 0.35;
|
|
713
795
|
cursor: ns-resize;
|
|
@@ -723,70 +805,15 @@
|
|
|
723
805
|
}
|
|
724
806
|
|
|
725
807
|
/*
|
|
726
|
-
* Dark mode (zui `.dark` class convention). The
|
|
727
|
-
*
|
|
728
|
-
*
|
|
729
|
-
* near-black stroke renders light on the dark canvas, and the swatches
|
|
730
|
-
* preview exactly what will be drawn.
|
|
808
|
+
* Dark mode (zui `.dark` class convention). The chrome follows the theme
|
|
809
|
+
* tokens on its own; the drawing area, the swatches and the inline text
|
|
810
|
+
* input are inverted so stored shape colors stay theme-agnostic.
|
|
731
811
|
*/
|
|
732
|
-
.dark .zui-drawing-canvas {
|
|
733
|
-
background: #18181b;
|
|
734
|
-
border-color: rgba(255, 255, 255, 0.1);
|
|
735
|
-
}
|
|
736
|
-
|
|
737
812
|
.dark .zui-drawing-surface,
|
|
738
813
|
.dark .zui-drawing-swatch,
|
|
739
|
-
.dark .zui-drawing-text-input
|
|
740
|
-
filter: invert(93%) hue-rotate(180deg);
|
|
741
|
-
}
|
|
742
|
-
|
|
743
|
-
.dark .zui-drawing-toolbar-group,
|
|
744
|
-
.dark .zui-drawing-props,
|
|
745
|
-
.dark .zui-drawing-popover {
|
|
746
|
-
background: rgba(35, 35, 41, 0.9);
|
|
747
|
-
border-color: rgba(255, 255, 255, 0.1);
|
|
748
|
-
box-shadow:
|
|
749
|
-
0 1px 2px rgba(0, 0, 0, 0.3),
|
|
750
|
-
0 8px 24px -8px rgba(0, 0, 0, 0.6);
|
|
751
|
-
}
|
|
752
|
-
|
|
753
|
-
.dark .zui-drawing-tool,
|
|
754
|
-
.dark .zui-drawing-popover-item,
|
|
814
|
+
.dark .zui-drawing-text-input,
|
|
755
815
|
.dark .zui-drawing-resize {
|
|
756
|
-
|
|
757
|
-
}
|
|
758
|
-
|
|
759
|
-
.dark .zui-drawing-tool:hover,
|
|
760
|
-
.dark .zui-drawing-popover-item:hover,
|
|
761
|
-
.dark .zui-drawing-resize:hover {
|
|
762
|
-
background: rgba(255, 255, 255, 0.08);
|
|
763
|
-
}
|
|
764
|
-
|
|
765
|
-
.dark .zui-drawing-tool.is-active,
|
|
766
|
-
.dark .zui-drawing-popover-item.is-active {
|
|
767
|
-
background: #45437a;
|
|
768
|
-
color: #dcdaff;
|
|
769
|
-
}
|
|
770
|
-
|
|
771
|
-
.dark .zui-drawing-toolbar-divider,
|
|
772
|
-
.dark .zui-drawing-props-group + .zui-drawing-props-group {
|
|
773
|
-
border-color: rgba(255, 255, 255, 0.12);
|
|
774
|
-
background-color: rgba(255, 255, 255, 0.12);
|
|
775
|
-
}
|
|
776
|
-
|
|
777
|
-
.dark .zui-drawing-props-group + .zui-drawing-props-group {
|
|
778
|
-
background-color: transparent;
|
|
779
|
-
}
|
|
780
|
-
|
|
781
|
-
.dark .zui-drawing-swatch-label,
|
|
782
|
-
.dark .zui-drawing-empty {
|
|
783
|
-
color: rgba(255, 255, 255, 0.55);
|
|
784
|
-
}
|
|
785
|
-
|
|
786
|
-
.dark .zui-drawing-swatch.is-active {
|
|
787
|
-
box-shadow:
|
|
788
|
-
0 0 0 2px #232329,
|
|
789
|
-
0 0 0 3.5px #8f8bff;
|
|
816
|
+
filter: var(--zui-drawing-dark-filter);
|
|
790
817
|
}
|
|
791
818
|
|
|
792
819
|
.zui-text-editor-textarea {
|