@vertebr/react 0.10.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/components/admin/AddonEditor.d.ts.map +1 -1
  2. package/dist/components/admin/AddonEditor.js +10 -8
  3. package/dist/components/admin/AdminContent.d.ts.map +1 -1
  4. package/dist/components/admin/AdminContent.js +62 -17
  5. package/dist/components/admin/AdminSaveBar.d.ts.map +1 -1
  6. package/dist/components/admin/AdminSaveBar.js +6 -1
  7. package/dist/components/admin/AdminSyncPage.d.ts.map +1 -1
  8. package/dist/components/admin/AdminSyncPage.js +50 -6
  9. package/dist/components/admin/PagePreviewPane.d.ts +3 -1
  10. package/dist/components/admin/PagePreviewPane.d.ts.map +1 -1
  11. package/dist/components/admin/PagePreviewPane.js +41 -9
  12. package/dist/components/admin/SyncPreviewFrame.d.ts +22 -0
  13. package/dist/components/admin/SyncPreviewFrame.d.ts.map +1 -0
  14. package/dist/components/admin/SyncPreviewFrame.js +135 -0
  15. package/dist/components/admin/VertebrAdmin.d.ts.map +1 -1
  16. package/dist/components/admin/VertebrAdmin.js +6 -4
  17. package/dist/components/config/DatetimeInput.d.ts +15 -0
  18. package/dist/components/config/DatetimeInput.d.ts.map +1 -0
  19. package/dist/components/config/DatetimeInput.js +287 -0
  20. package/dist/components/config/EnumInput.d.ts.map +1 -1
  21. package/dist/components/config/EnumInput.js +4 -4
  22. package/dist/components/config/EnumListInput.d.ts.map +1 -1
  23. package/dist/components/config/EnumListInput.js +13 -3
  24. package/dist/components/config/ImagePickerModal.d.ts +9 -1
  25. package/dist/components/config/ImagePickerModal.d.ts.map +1 -1
  26. package/dist/components/config/ImagePickerModal.js +14 -7
  27. package/dist/components/config/RevisionHistory.d.ts +4 -0
  28. package/dist/components/config/RevisionHistory.d.ts.map +1 -1
  29. package/dist/components/config/RevisionHistory.js +63 -8
  30. package/dist/components/config/form/ConfigField.d.ts.map +1 -1
  31. package/dist/components/config/form/ConfigField.js +41 -16
  32. package/dist/components/config/form/ConfigForm.d.ts +1 -1
  33. package/dist/components/config/form/ConfigForm.d.ts.map +1 -1
  34. package/dist/components/config/form/ConfigForm.js +54 -9
  35. package/dist/components/config/form/RecordConfigForm.d.ts.map +1 -1
  36. package/dist/components/config/form/RecordConfigForm.js +24 -10
  37. package/dist/components/config/form/types.d.ts +9 -0
  38. package/dist/components/config/form/types.d.ts.map +1 -1
  39. package/dist/components/fonts/FontLibraryBoard.d.ts.map +1 -1
  40. package/dist/components/fonts/FontLibraryBoard.js +1 -1
  41. package/dist/components/resources/ImageUploadControl.d.ts +3 -1
  42. package/dist/components/resources/ImageUploadControl.d.ts.map +1 -1
  43. package/dist/components/resources/ImageUploadControl.js +5 -3
  44. package/dist/hooks/useSaveBar.d.ts +6 -0
  45. package/dist/hooks/useSaveBar.d.ts.map +1 -1
  46. package/dist/styles/form.css +465 -17
  47. package/dist/styles/modal.css +2 -1
  48. package/dist/styles/page-preview.css +84 -0
  49. package/dist/styles/select.css +23 -0
  50. package/dist/styles/sync.css +388 -4
  51. package/dist/themes/light.css +27 -0
  52. package/package.json +3 -1
@@ -428,6 +428,372 @@
428
428
  background 140ms ease;
429
429
  }
430
430
 
431
+ .vertebr-datetime {
432
+ display: flex;
433
+ flex-direction: column;
434
+ gap: 0.45rem;
435
+ width: 100%;
436
+ }
437
+
438
+ .vertebr-datetime-shell {
439
+ display: flex;
440
+ align-items: stretch;
441
+ width: 100%;
442
+ min-height: 3.15rem;
443
+ border: 1px solid var(--vb-border);
444
+ border-radius: var(--vb-radius-sm);
445
+ background: var(--vb-bg);
446
+ overflow: hidden;
447
+ transition:
448
+ border-color 140ms ease,
449
+ box-shadow 140ms ease;
450
+ }
451
+
452
+ .vertebr-datetime-shell:focus-within,
453
+ .vertebr-datetime-shell:has([data-state="open"]) {
454
+ border-color: color-mix(in srgb, var(--vb-accent) 55%, var(--vb-border));
455
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--vb-accent) 18%, transparent);
456
+ }
457
+
458
+ .vertebr-datetime-cell {
459
+ appearance: none;
460
+ flex: 1 1 auto;
461
+ min-width: 0;
462
+ display: flex;
463
+ align-items: stretch;
464
+ gap: 0;
465
+ margin: 0;
466
+ padding: 0;
467
+ border: 0;
468
+ background: transparent;
469
+ color: inherit;
470
+ font: inherit;
471
+ text-align: left;
472
+ cursor: pointer;
473
+ user-select: none;
474
+ }
475
+
476
+ .vertebr-datetime-cell:disabled {
477
+ cursor: default;
478
+ opacity: 0.7;
479
+ }
480
+
481
+ .vertebr-datetime-cell:hover:not(:disabled) .vertebr-datetime-cell-inner {
482
+ background: color-mix(in srgb, var(--vb-surface-tint) 70%, transparent);
483
+ }
484
+
485
+ .vertebr-datetime-cell-inner {
486
+ display: flex;
487
+ align-items: center;
488
+ gap: 0.55rem;
489
+ flex: 1 1 0;
490
+ min-width: 0;
491
+ padding: 0.45rem 0.7rem;
492
+ }
493
+
494
+ .vertebr-datetime-icon {
495
+ flex: none;
496
+ color: var(--vb-text-muted);
497
+ }
498
+
499
+ .vertebr-datetime-cell-copy {
500
+ display: flex;
501
+ flex-direction: column;
502
+ gap: 0.08rem;
503
+ min-width: 0;
504
+ flex: 1 1 auto;
505
+ }
506
+
507
+ .vertebr-datetime-cell-label {
508
+ font-size: 0.68rem;
509
+ font-weight: 600;
510
+ letter-spacing: 0.06em;
511
+ text-transform: uppercase;
512
+ color: var(--vb-text-subtle);
513
+ line-height: 1;
514
+ }
515
+
516
+ .vertebr-datetime-value {
517
+ min-width: 0;
518
+ overflow: hidden;
519
+ text-overflow: ellipsis;
520
+ white-space: nowrap;
521
+ color: var(--vb-text);
522
+ font-size: 0.9rem;
523
+ font-variant-numeric: tabular-nums;
524
+ line-height: 1.35rem;
525
+ }
526
+
527
+ .vertebr-datetime-value[data-empty="true"] {
528
+ color: var(--vb-text-subtle);
529
+ }
530
+
531
+ .vertebr-datetime-divider {
532
+ flex: none;
533
+ width: 1px;
534
+ align-self: stretch;
535
+ margin: 0.55rem 0;
536
+ background: var(--vb-border);
537
+ }
538
+
539
+ .vertebr-datetime-clear {
540
+ appearance: none;
541
+ flex: none;
542
+ align-self: stretch;
543
+ margin: 0;
544
+ padding: 0 0.85rem;
545
+ border: 0;
546
+ border-left: 1px solid var(--vb-border);
547
+ background: color-mix(in srgb, var(--vb-surface-tint) 55%, transparent);
548
+ color: var(--vb-text-muted);
549
+ font: inherit;
550
+ font-size: 0.78rem;
551
+ font-weight: 500;
552
+ cursor: pointer;
553
+ }
554
+
555
+ .vertebr-datetime-clear:hover {
556
+ color: var(--vb-text);
557
+ background: var(--vb-surface-tint);
558
+ }
559
+
560
+ .vertebr-datetime-summary {
561
+ margin: 0;
562
+ font-size: 0.8rem;
563
+ color: var(--vb-text-muted);
564
+ font-variant-numeric: tabular-nums;
565
+ }
566
+
567
+ .vertebr-datetime-summary-empty {
568
+ color: var(--vb-text-subtle);
569
+ }
570
+
571
+ .vertebr-datetime-popover {
572
+ z-index: 70;
573
+ box-sizing: border-box;
574
+ width: min(20.5rem, calc(100vw - 1.5rem));
575
+ padding: 0.75rem;
576
+ border: 1px solid var(--vb-border-strong);
577
+ border-radius: var(--vb-radius);
578
+ background: var(--vb-bg-elevated);
579
+ color: var(--vb-text);
580
+ font-family: var(--vb-font);
581
+ box-shadow: var(--vb-shadow);
582
+ animation: vertebr-pop 120ms ease-out;
583
+ }
584
+
585
+ .vertebr-day-picker {
586
+ position: relative;
587
+ width: 100%;
588
+ }
589
+
590
+ .vertebr-day-picker-months,
591
+ .vertebr-day-picker-month {
592
+ position: relative;
593
+ width: 100%;
594
+ }
595
+
596
+ .vertebr-day-picker-caption {
597
+ display: flex;
598
+ align-items: center;
599
+ justify-content: center;
600
+ min-height: 2.25rem;
601
+ margin: 0 2.1rem 0.45rem;
602
+ }
603
+
604
+ .vertebr-day-picker-caption-label {
605
+ font-size: 0.9rem;
606
+ font-weight: 600;
607
+ }
608
+
609
+ .vertebr-day-picker-nav {
610
+ position: absolute;
611
+ inset: 0 0 auto;
612
+ height: 2.25rem;
613
+ pointer-events: none;
614
+ }
615
+
616
+ .vertebr-day-picker-nav-btn {
617
+ appearance: none;
618
+ position: absolute;
619
+ top: 0;
620
+ pointer-events: auto;
621
+ display: inline-flex;
622
+ align-items: center;
623
+ justify-content: center;
624
+ width: 1.85rem;
625
+ height: 1.85rem;
626
+ margin: 0;
627
+ padding: 0;
628
+ border: 1px solid var(--vb-border);
629
+ border-radius: var(--vb-radius-sm);
630
+ background: var(--vb-bg);
631
+ color: var(--vb-text-muted);
632
+ cursor: pointer;
633
+ }
634
+
635
+ .vertebr-day-picker-nav-btn:first-of-type {
636
+ left: 0;
637
+ }
638
+
639
+ .vertebr-day-picker-nav-btn:last-of-type {
640
+ right: 0;
641
+ }
642
+
643
+ .vertebr-day-picker-nav-btn:hover {
644
+ color: var(--vb-text);
645
+ background: var(--vb-bg-muted);
646
+ }
647
+
648
+ .vertebr-day-picker-grid {
649
+ width: 100%;
650
+ border-collapse: collapse;
651
+ table-layout: fixed;
652
+ }
653
+
654
+ .vertebr-day-picker-weekday {
655
+ padding: 0.35rem 0;
656
+ font-size: 0.68rem;
657
+ font-weight: 600;
658
+ letter-spacing: 0.04em;
659
+ text-transform: uppercase;
660
+ text-align: center;
661
+ color: var(--vb-text-subtle);
662
+ }
663
+
664
+ .vertebr-day-picker-day {
665
+ width: 14.28%;
666
+ height: 2.35rem;
667
+ padding: 0;
668
+ text-align: center;
669
+ vertical-align: middle;
670
+ }
671
+
672
+ .vertebr-day-picker-day-btn {
673
+ appearance: none;
674
+ display: inline-flex;
675
+ align-items: center;
676
+ justify-content: center;
677
+ width: 2.15rem;
678
+ height: 2.15rem;
679
+ margin: 0;
680
+ padding: 0;
681
+ border: 0;
682
+ border-radius: 999px;
683
+ background: transparent;
684
+ color: var(--vb-text);
685
+ font: inherit;
686
+ font-size: 0.85rem;
687
+ font-variant-numeric: tabular-nums;
688
+ cursor: pointer;
689
+ }
690
+
691
+ .vertebr-day-picker-day-btn:hover {
692
+ background: var(--vb-bg-hover);
693
+ }
694
+
695
+ .vertebr-day-picker-today .vertebr-day-picker-day-btn {
696
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--vb-accent) 45%, transparent);
697
+ }
698
+
699
+ .vertebr-day-picker-selected .vertebr-day-picker-day-btn,
700
+ .vertebr-day-picker-selected .vertebr-day-picker-day-btn:hover {
701
+ background: var(--vb-accent);
702
+ color: var(--vb-accent-contrast);
703
+ box-shadow: none;
704
+ }
705
+
706
+ .vertebr-day-picker-outside .vertebr-day-picker-day-btn {
707
+ color: var(--vb-text-subtle);
708
+ opacity: 0.55;
709
+ }
710
+
711
+ .vertebr-day-picker-disabled .vertebr-day-picker-day-btn,
712
+ .vertebr-day-picker-hidden .vertebr-day-picker-day-btn {
713
+ opacity: 0.35;
714
+ pointer-events: none;
715
+ }
716
+
717
+ .vertebr-datetime-time-row {
718
+ display: flex;
719
+ align-items: end;
720
+ gap: 0.45rem;
721
+ margin-top: 0.75rem;
722
+ padding-top: 0.75rem;
723
+ border-top: 1px solid var(--vb-border);
724
+ }
725
+
726
+ .vertebr-datetime-time-field {
727
+ display: flex;
728
+ flex-direction: column;
729
+ gap: 0.3rem;
730
+ flex: 1 1 0;
731
+ min-width: 0;
732
+ font-size: 0.68rem;
733
+ font-weight: 600;
734
+ letter-spacing: 0.06em;
735
+ text-transform: uppercase;
736
+ color: var(--vb-text-subtle);
737
+ }
738
+
739
+ .vertebr-datetime-time-field-meridiem {
740
+ flex: 0 0 4.5rem;
741
+ }
742
+
743
+ .vertebr-datetime-timezone {
744
+ margin-top: 0.55rem;
745
+ }
746
+
747
+ .vertebr-datetime-time-select {
748
+ appearance: none;
749
+ box-sizing: border-box;
750
+ width: 100%;
751
+ min-height: 2.35rem;
752
+ padding: 0.45rem 0.65rem;
753
+ border: 1px solid var(--vb-border);
754
+ border-radius: var(--vb-radius-sm);
755
+ background: var(--vb-bg);
756
+ color: var(--vb-text);
757
+ font: inherit;
758
+ font-size: 0.9rem;
759
+ font-variant-numeric: tabular-nums;
760
+ text-transform: none;
761
+ letter-spacing: normal;
762
+ font-weight: 500;
763
+ cursor: pointer;
764
+ }
765
+
766
+ .vertebr-datetime-time-select:focus-visible {
767
+ outline: none;
768
+ border-color: var(--vb-accent-dim);
769
+ box-shadow: 0 0 0 3px var(--vb-accent-soft);
770
+ }
771
+
772
+ .vertebr-datetime-time-sep {
773
+ flex: none;
774
+ padding-bottom: 0.55rem;
775
+ color: var(--vb-text-muted);
776
+ font-size: 1.1rem;
777
+ font-weight: 600;
778
+ }
779
+
780
+ @media (max-width: 520px) {
781
+ .vertebr-datetime-shell {
782
+ flex-wrap: wrap;
783
+ }
784
+
785
+ .vertebr-datetime-cell {
786
+ flex: 1 1 auto;
787
+ }
788
+
789
+ .vertebr-datetime-clear {
790
+ flex: 1 1 100%;
791
+ min-height: 2.2rem;
792
+ border-left: 0;
793
+ border-top: 1px solid var(--vb-border);
794
+ }
795
+ }
796
+
431
797
  .vertebr-field textarea {
432
798
  resize: vertical;
433
799
  min-height: 4.5rem;
@@ -745,6 +1111,12 @@
745
1111
  color: var(--vb-text-subtle);
746
1112
  }
747
1113
 
1114
+ .vertebr-field-media-actions {
1115
+ display: flex;
1116
+ flex-direction: column;
1117
+ gap: 0.55rem;
1118
+ }
1119
+
748
1120
  .vertebr-field[data-kind="image"] {
749
1121
  grid-column: 1 / -1;
750
1122
  }
@@ -784,15 +1156,22 @@
784
1156
  }
785
1157
 
786
1158
  .vertebr-switch {
787
- width: 40px;
788
- height: 22px;
1159
+ box-sizing: border-box;
1160
+ width: 2.5rem;
1161
+ height: 1.375rem;
789
1162
  background: var(--vb-bg-muted);
790
1163
  border-radius: 999px;
791
1164
  position: relative;
792
1165
  border: 1px solid var(--vb-border);
793
1166
  cursor: pointer;
794
1167
  flex: none;
795
- transition: background 140ms ease, border-color 140ms ease;
1168
+ display: inline-flex;
1169
+ align-items: center;
1170
+ justify-content: flex-start;
1171
+ padding: 0;
1172
+ transition:
1173
+ background 140ms ease,
1174
+ border-color 140ms ease;
796
1175
  }
797
1176
 
798
1177
  .vertebr-switch[data-state="checked"] {
@@ -802,17 +1181,22 @@
802
1181
 
803
1182
  .vertebr-switch-thumb {
804
1183
  display: block;
805
- width: 16px;
806
- height: 16px;
1184
+ box-sizing: border-box;
1185
+ width: 1rem;
1186
+ height: 1rem;
807
1187
  background: var(--vb-text);
808
1188
  border-radius: 999px;
809
- transform: translateX(2px);
810
- transition: transform 140ms ease, background 140ms ease;
811
- margin-top: 2px;
1189
+ position: absolute;
1190
+ top: 50%;
1191
+ left: 2px;
1192
+ transform: translateY(-50%);
1193
+ transition:
1194
+ left 140ms ease,
1195
+ background 140ms ease;
812
1196
  }
813
1197
 
814
1198
  .vertebr-switch[data-state="checked"] .vertebr-switch-thumb {
815
- transform: translateX(18px);
1199
+ left: calc(100% - 1rem - 2px);
816
1200
  background: var(--vb-accent);
817
1201
  }
818
1202
 
@@ -916,6 +1300,13 @@
916
1300
  line-height: 1.35;
917
1301
  }
918
1302
 
1303
+ .vertebr-upload-hint {
1304
+ margin: 0;
1305
+ font-size: 0.72rem;
1306
+ color: var(--vb-text-faint, var(--vb-text-muted));
1307
+ line-height: 1.35;
1308
+ }
1309
+
919
1310
  .vertebr-upload-error {
920
1311
  margin: 0;
921
1312
  font-size: 0.78rem;
@@ -1075,14 +1466,49 @@
1075
1466
 
1076
1467
  /* ── Revision history ────────────────────────────────── */
1077
1468
 
1078
- .vertebr-revisions {
1079
- margin-top: 1.25rem;
1080
- padding-top: 1rem;
1081
- border-top: 1px solid var(--vb-border);
1469
+ .vertebr-revisions-trigger {
1470
+ appearance: none;
1471
+ display: inline-flex;
1472
+ align-items: center;
1473
+ gap: 0.4rem;
1474
+ height: 2rem;
1475
+ padding: 0 0.7rem;
1476
+ border: 1px solid var(--vb-border);
1477
+ border-radius: var(--vb-radius-sm, 8px);
1478
+ background: var(--vb-bg-elevated);
1479
+ color: var(--vb-text-secondary);
1480
+ font: inherit;
1481
+ font-size: var(--vb-font-size-100, 0.88rem);
1482
+ font-weight: var(--vb-font-weight-medium, 500);
1483
+ cursor: pointer;
1484
+ white-space: nowrap;
1485
+ transition:
1486
+ background 0.15s ease,
1487
+ color 0.15s ease,
1488
+ border-color 0.15s ease;
1489
+ }
1490
+
1491
+ .vertebr-revisions-trigger:hover {
1492
+ background: var(--vb-bg-hover);
1493
+ color: var(--vb-text);
1494
+ border-color: var(--vb-border-strong, var(--vb-border));
1082
1495
  }
1083
1496
 
1084
- .vertebr-revisions .vertebr-panel-head {
1085
- margin-bottom: 0.65rem;
1497
+ .vertebr-revisions-trigger-count {
1498
+ display: inline-grid;
1499
+ place-items: center;
1500
+ min-width: 1.25rem;
1501
+ height: 1.25rem;
1502
+ padding: 0 0.3rem;
1503
+ border-radius: 999px;
1504
+ background: var(--vb-bg-muted);
1505
+ color: var(--vb-text-muted);
1506
+ font-family: var(--vb-mono);
1507
+ font-size: 0.68rem;
1508
+ }
1509
+
1510
+ .vertebr-revisions-modal .vertebr-modal-body {
1511
+ gap: 0.75rem;
1086
1512
  }
1087
1513
 
1088
1514
  .vertebr-revisions-empty {
@@ -1108,17 +1534,24 @@
1108
1534
  padding: 0.55rem 0.65rem;
1109
1535
  border: 1px solid var(--vb-border);
1110
1536
  border-radius: 8px;
1111
- background: var(--vb-bg-elevated);
1537
+ background: var(--vb-bg-muted);
1112
1538
  }
1113
1539
 
1114
1540
  .vertebr-revisions-meta {
1115
1541
  display: flex;
1116
1542
  flex-wrap: wrap;
1117
1543
  align-items: baseline;
1118
- gap: 0.4rem 0.65rem;
1544
+ gap: 0.35rem 0.55rem;
1119
1545
  min-width: 0;
1120
1546
  }
1121
1547
 
1548
+ .vertebr-revisions-meta strong {
1549
+ overflow: hidden;
1550
+ text-overflow: ellipsis;
1551
+ white-space: nowrap;
1552
+ max-width: 16rem;
1553
+ }
1554
+
1122
1555
  .vertebr-revisions-meta [data-status] {
1123
1556
  font-family: var(--vb-mono);
1124
1557
  font-size: 0.68rem;
@@ -1135,7 +1568,22 @@
1135
1568
  color: var(--vb-warn, #9a6b2f);
1136
1569
  }
1137
1570
 
1571
+ .vertebr-revisions-meta [data-status="current"] {
1572
+ color: var(--vb-text);
1573
+ background: var(--vb-bg-elevated);
1574
+ border: 1px solid var(--vb-border);
1575
+ border-radius: 999px;
1576
+ padding: 0.05rem 0.4rem;
1577
+ letter-spacing: 0.04em;
1578
+ }
1579
+
1580
+ .vertebr-revisions-item[data-active="true"] {
1581
+ border-color: color-mix(in srgb, var(--vb-text) 22%, var(--vb-border));
1582
+ background: var(--vb-bg-elevated);
1583
+ }
1584
+
1138
1585
  .vertebr-revisions-when {
1586
+ flex-basis: 100%;
1139
1587
  font-size: 0.78rem;
1140
1588
  color: var(--vb-text-subtle);
1141
1589
  }
@@ -3,7 +3,8 @@
3
3
  .vertebr-modal-backdrop {
4
4
  position: fixed;
5
5
  inset: 0;
6
- z-index: 80;
6
+ /* Above shell chrome, toasts (100), and command palette (90). */
7
+ z-index: 200;
7
8
  display: grid;
8
9
  place-items: center;
9
10
  padding: 1.25rem;
@@ -15,6 +15,71 @@
15
15
  min-height: 0;
16
16
  }
17
17
 
18
+ .vertebr-page-related-addons {
19
+ display: flex;
20
+ flex-wrap: wrap;
21
+ align-items: center;
22
+ gap: 0.45rem 0.75rem;
23
+ padding: 0.55rem 1.15rem;
24
+ border-bottom: 1px solid var(--vb-border-subdued);
25
+ background: var(--vb-surface-tint);
26
+ }
27
+
28
+ .vertebr-page-related-addons-label {
29
+ font-family: var(--vb-mono);
30
+ font-size: 0.66rem;
31
+ letter-spacing: 0.1em;
32
+ text-transform: uppercase;
33
+ color: var(--vb-text-subtle);
34
+ }
35
+
36
+ .vertebr-page-related-addons-list {
37
+ display: flex;
38
+ flex-wrap: wrap;
39
+ gap: 0.35rem;
40
+ }
41
+
42
+ .vertebr-page-related-addon {
43
+ appearance: none;
44
+ display: inline-flex;
45
+ align-items: center;
46
+ gap: 0.35rem;
47
+ margin: 0;
48
+ padding: 0.25rem 0.55rem;
49
+ border: 1px solid var(--vb-border);
50
+ border-radius: 999px;
51
+ background: var(--vb-bg-elevated);
52
+ color: var(--vb-text-muted);
53
+ font: inherit;
54
+ font-size: 0.75rem;
55
+ font-weight: var(--vb-font-weight-medium);
56
+ cursor: pointer;
57
+ }
58
+
59
+ .vertebr-page-related-addon:hover {
60
+ border-color: var(--vb-border-strong);
61
+ color: var(--vb-text);
62
+ }
63
+
64
+ .vertebr-page-related-addon em {
65
+ font-style: normal;
66
+ font-family: var(--vb-mono);
67
+ font-size: 0.62rem;
68
+ letter-spacing: 0.06em;
69
+ text-transform: uppercase;
70
+ color: var(--vb-text-subtle);
71
+ }
72
+
73
+ .vertebr-page-related-addon[data-enabled="true"] {
74
+ border-color: color-mix(in srgb, var(--vb-accent) 40%, var(--vb-border));
75
+ background: var(--vb-accent-soft);
76
+ color: var(--vb-accent-dim);
77
+ }
78
+
79
+ .vertebr-page-related-addon[data-enabled="true"] em {
80
+ color: var(--vb-accent);
81
+ }
82
+
18
83
  .vertebr-page-editor {
19
84
  flex: 1 1 0%;
20
85
  min-width: 0;
@@ -94,6 +159,25 @@
94
159
  background: var(--vb-bg);
95
160
  }
96
161
 
162
+ .vertebr-page-preview-back {
163
+ appearance: none;
164
+ margin: 0;
165
+ border: 1px solid var(--vb-border);
166
+ border-radius: 999px;
167
+ padding: 0.28rem 0.75rem;
168
+ font: inherit;
169
+ font-size: 0.74rem;
170
+ font-weight: 520;
171
+ color: var(--vb-text);
172
+ background: var(--vb-bg-elevated);
173
+ cursor: pointer;
174
+ }
175
+
176
+ .vertebr-page-preview-back:hover {
177
+ border-color: var(--vb-border-strong);
178
+ background: var(--vb-bg-muted);
179
+ }
180
+
97
181
  .vertebr-page-preview-viewports button {
98
182
  appearance: none;
99
183
  margin: 0;
@@ -1,7 +1,10 @@
1
1
  /* ── Select ──────────────────────────────────────────── */
2
2
 
3
3
  .vertebr-select-trigger {
4
+ box-sizing: border-box;
4
5
  width: 100%;
6
+ max-width: 100%;
7
+ min-width: 0;
5
8
  display: flex;
6
9
  align-items: center;
7
10
  justify-content: space-between;
@@ -17,6 +20,7 @@
17
20
  font-weight: 500;
18
21
  line-height: 1.2;
19
22
  cursor: pointer;
23
+ overflow: hidden;
20
24
  transition:
21
25
  border-color 140ms ease,
22
26
  background 140ms ease,
@@ -50,8 +54,17 @@
50
54
  display: flex;
51
55
  align-items: center;
52
56
  gap: 0.5rem;
57
+ flex: 1 1 auto;
53
58
  min-width: 0;
54
59
  overflow: hidden;
60
+ }
61
+
62
+ /* Radix Select.Value / label text — ellipsis needs a non-flex box. */
63
+ .vertebr-select-value > span:not(.vertebr-select-dot),
64
+ .vertebr-select-label {
65
+ min-width: 0;
66
+ flex: 1 1 auto;
67
+ overflow: hidden;
55
68
  text-overflow: ellipsis;
56
69
  white-space: nowrap;
57
70
  }
@@ -78,6 +91,7 @@
78
91
 
79
92
  .vertebr-select-icon {
80
93
  display: flex;
94
+ flex: none;
81
95
  color: var(--vb-text-muted);
82
96
  transition: transform 140ms ease;
83
97
  }
@@ -127,6 +141,15 @@
127
141
  cursor: pointer;
128
142
  user-select: none;
129
143
  outline: none;
144
+ min-width: 0;
145
+ }
146
+
147
+ .vertebr-select-item > span:first-of-type {
148
+ min-width: 0;
149
+ flex: 1 1 auto;
150
+ overflow: hidden;
151
+ text-overflow: ellipsis;
152
+ white-space: nowrap;
130
153
  }
131
154
 
132
155
  .vertebr-select-item[data-highlighted] {