@liveblocks/react-ui 2.7.0-beta1 → 2.7.0-versions

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 (142) hide show
  1. package/_private/README.md +5 -0
  2. package/_private/package.json +4 -0
  3. package/dist/_private/index.d.mts +72 -0
  4. package/dist/_private/index.d.ts +72 -0
  5. package/dist/_private/index.js +46 -0
  6. package/dist/_private/index.js.map +1 -0
  7. package/dist/_private/index.mjs +21 -0
  8. package/dist/_private/index.mjs.map +1 -0
  9. package/dist/components/Comment.js +7 -65
  10. package/dist/components/Comment.js.map +1 -1
  11. package/dist/components/Comment.mjs +9 -66
  12. package/dist/components/Comment.mjs.map +1 -1
  13. package/dist/components/Composer.js +101 -217
  14. package/dist/components/Composer.js.map +1 -1
  15. package/dist/components/Composer.mjs +104 -220
  16. package/dist/components/Composer.mjs.map +1 -1
  17. package/dist/components/HistoryVersionSummary.js +42 -0
  18. package/dist/components/HistoryVersionSummary.js.map +1 -0
  19. package/dist/components/HistoryVersionSummary.mjs +40 -0
  20. package/dist/components/HistoryVersionSummary.mjs.map +1 -0
  21. package/dist/components/HistoryVersionSummaryList.js +22 -0
  22. package/dist/components/HistoryVersionSummaryList.js.map +1 -0
  23. package/dist/components/HistoryVersionSummaryList.mjs +20 -0
  24. package/dist/components/HistoryVersionSummaryList.mjs.map +1 -0
  25. package/dist/components/InboxNotification.js +10 -25
  26. package/dist/components/InboxNotification.js.map +1 -1
  27. package/dist/components/InboxNotification.mjs +10 -25
  28. package/dist/components/InboxNotification.mjs.map +1 -1
  29. package/dist/components/Thread.js +0 -2
  30. package/dist/components/Thread.js.map +1 -1
  31. package/dist/components/Thread.mjs +0 -2
  32. package/dist/components/Thread.mjs.map +1 -1
  33. package/dist/components/internal/Button.js +8 -1
  34. package/dist/components/internal/Button.js.map +1 -1
  35. package/dist/components/internal/Button.mjs +8 -1
  36. package/dist/components/internal/Button.mjs.map +1 -1
  37. package/dist/components/internal/EmojiPicker.js +3 -3
  38. package/dist/components/internal/EmojiPicker.js.map +1 -1
  39. package/dist/components/internal/EmojiPicker.mjs +3 -3
  40. package/dist/components/internal/EmojiPicker.mjs.map +1 -1
  41. package/dist/components/internal/InboxNotificationThread.js +2 -10
  42. package/dist/components/internal/InboxNotificationThread.js.map +1 -1
  43. package/dist/components/internal/InboxNotificationThread.mjs +3 -11
  44. package/dist/components/internal/InboxNotificationThread.mjs.map +1 -1
  45. package/dist/components/internal/User.js +3 -19
  46. package/dist/components/internal/User.js.map +1 -1
  47. package/dist/components/internal/User.mjs +3 -19
  48. package/dist/components/internal/User.mjs.map +1 -1
  49. package/dist/icons/ArrowUp.js +15 -0
  50. package/dist/icons/ArrowUp.js.map +1 -0
  51. package/dist/icons/ArrowUp.mjs +13 -0
  52. package/dist/icons/ArrowUp.mjs.map +1 -0
  53. package/dist/icons/{Warning.js → Missing.js} +3 -3
  54. package/dist/icons/{Warning.js.map → Missing.js.map} +1 -1
  55. package/dist/icons/{Warning.mjs → Missing.mjs} +3 -3
  56. package/dist/icons/{Warning.mjs.map → Missing.mjs.map} +1 -1
  57. package/dist/icons/Restore.js +17 -0
  58. package/dist/icons/Restore.js.map +1 -0
  59. package/dist/icons/Restore.mjs +15 -0
  60. package/dist/icons/Restore.mjs.map +1 -0
  61. package/dist/icons/Spinner.js +9 -3
  62. package/dist/icons/Spinner.js.map +1 -1
  63. package/dist/icons/Spinner.mjs +10 -4
  64. package/dist/icons/Spinner.mjs.map +1 -1
  65. package/dist/index.d.mts +74 -70
  66. package/dist/index.d.ts +74 -70
  67. package/dist/index.js +6 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/index.mjs +3 -0
  70. package/dist/index.mjs.map +1 -1
  71. package/dist/overrides.js +5 -6
  72. package/dist/overrides.js.map +1 -1
  73. package/dist/overrides.mjs +5 -6
  74. package/dist/overrides.mjs.map +1 -1
  75. package/dist/primitives/Composer/contexts.js +3 -17
  76. package/dist/primitives/Composer/contexts.js.map +1 -1
  77. package/dist/primitives/Composer/contexts.mjs +4 -15
  78. package/dist/primitives/Composer/contexts.mjs.map +1 -1
  79. package/dist/primitives/Composer/index.js +26 -185
  80. package/dist/primitives/Composer/index.js.map +1 -1
  81. package/dist/primitives/Composer/index.mjs +31 -188
  82. package/dist/primitives/Composer/index.mjs.map +1 -1
  83. package/dist/primitives/Composer/utils.js +0 -224
  84. package/dist/primitives/Composer/utils.js.map +1 -1
  85. package/dist/primitives/Composer/utils.mjs +1 -222
  86. package/dist/primitives/Composer/utils.mjs.map +1 -1
  87. package/dist/primitives/EmojiPicker/utils.js +2 -2
  88. package/dist/primitives/EmojiPicker/utils.js.map +1 -1
  89. package/dist/primitives/EmojiPicker/utils.mjs +1 -1
  90. package/dist/primitives/EmojiPicker/utils.mjs.map +1 -1
  91. package/dist/primitives/index.d.mts +3 -83
  92. package/dist/primitives/index.d.ts +3 -83
  93. package/dist/primitives/index.js +0 -4
  94. package/dist/primitives/index.js.map +1 -1
  95. package/dist/primitives/index.mjs +0 -2
  96. package/dist/primitives/index.mjs.map +1 -1
  97. package/dist/utils/chunk.js +12 -0
  98. package/dist/utils/chunk.js.map +1 -0
  99. package/dist/utils/chunk.mjs +10 -0
  100. package/dist/utils/chunk.mjs.map +1 -0
  101. package/dist/utils/intl.js +0 -6
  102. package/dist/utils/intl.js.map +1 -1
  103. package/dist/utils/intl.mjs +1 -6
  104. package/dist/utils/intl.mjs.map +1 -1
  105. package/dist/utils/use-initial.js +1 -2
  106. package/dist/utils/use-initial.js.map +1 -1
  107. package/dist/utils/use-initial.mjs +2 -3
  108. package/dist/utils/use-initial.mjs.map +1 -1
  109. package/dist/version.js +1 -1
  110. package/dist/version.js.map +1 -1
  111. package/dist/version.mjs +1 -1
  112. package/dist/version.mjs.map +1 -1
  113. package/package.json +16 -4
  114. package/src/styles/dark/index.css +0 -1
  115. package/src/styles/index.css +219 -325
  116. package/src/styles/utils.css +6 -44
  117. package/styles/dark/attributes.css +1 -1
  118. package/styles/dark/attributes.css.map +1 -1
  119. package/styles/dark/media-query.css +1 -1
  120. package/styles/dark/media-query.css.map +1 -1
  121. package/styles.css +1 -1
  122. package/styles.css.map +1 -1
  123. package/dist/components/internal/Attachment.js +0 -226
  124. package/dist/components/internal/Attachment.js.map +0 -1
  125. package/dist/components/internal/Attachment.mjs +0 -224
  126. package/dist/components/internal/Attachment.mjs.map +0 -1
  127. package/dist/icons/Attachment.js +0 -15
  128. package/dist/icons/Attachment.js.map +0 -1
  129. package/dist/icons/Attachment.mjs +0 -13
  130. package/dist/icons/Attachment.mjs.map +0 -1
  131. package/dist/primitives/FileSize.js +0 -33
  132. package/dist/primitives/FileSize.js.map +0 -1
  133. package/dist/primitives/FileSize.mjs +0 -31
  134. package/dist/primitives/FileSize.mjs.map +0 -1
  135. package/dist/utils/download.js +0 -14
  136. package/dist/utils/download.js.map +0 -1
  137. package/dist/utils/download.mjs +0 -12
  138. package/dist/utils/download.mjs.map +0 -1
  139. package/dist/utils/format-file-size.js +0 -45
  140. package/dist/utils/format-file-size.js.map +0 -1
  141. package/dist/utils/format-file-size.mjs +0 -43
  142. package/dist/utils/format-file-size.mjs.map +0 -1
@@ -23,7 +23,6 @@
23
23
  --lb-button-radius: calc(0.75 * var(--lb-radius));
24
24
  --lb-transition-duration: 0.1s;
25
25
  --lb-transition-easing: cubic-bezier(0.4, 0, 0.2, 1);
26
- --lb-highlight-shadow: inset 0 0 0 1px rgb(0 0 0 / 10%);
27
26
  --lb-elevation-shadow: $lb-elevation-shadow;
28
27
  --lb-tooltip-shadow: $lb-tooltip-shadow;
29
28
  --lb-accent-contrast: 8%;
@@ -121,6 +120,33 @@
121
120
  }
122
121
  }
123
122
 
123
+ /*************************************
124
+ * States *
125
+ *************************************/
126
+
127
+ .lb-loading,
128
+ .lb-empty,
129
+ .lb-error {
130
+ position: absolute;
131
+ inset: 0;
132
+ display: flex;
133
+ justify-content: center;
134
+ align-items: center;
135
+ }
136
+
137
+ .lb-loading {
138
+ color: var(--lb-foreground-moderate);
139
+ }
140
+
141
+ .lb-empty,
142
+ .lb-error {
143
+ padding: var(--lb-spacing);
144
+ color: var(--lb-foreground-tertiary);
145
+ font-size: 0.875em;
146
+ text-align: center;
147
+ text-wrap: balance;
148
+ }
149
+
124
150
  /*************************************
125
151
  * Icon *
126
152
  *************************************/
@@ -137,11 +163,6 @@
137
163
  }
138
164
  }
139
165
 
140
- .lb-icon-spinner {
141
- transform-origin: center;
142
- animation: lb-animation-spin 0.75s linear infinite;
143
- }
144
-
145
166
  /*************************************
146
167
  * Button *
147
168
  *************************************/
@@ -149,15 +170,40 @@
149
170
  .lb-button {
150
171
  --lb-button-background: var(--lb-dynamic-background);
151
172
 
152
- @include button;
153
-
173
+ all: unset;
174
+ position: relative;
154
175
  display: flex;
155
176
  justify-content: center;
156
177
  align-items: center;
178
+ box-sizing: inherit;
157
179
  padding: calc(0.25 * var(--lb-spacing));
158
180
  border-radius: var(--lb-button-radius);
159
181
  background: var(--lb-button-background);
160
182
  color: var(--lb-foreground-moderate);
183
+ outline: none;
184
+ cursor: pointer;
185
+ user-select: none;
186
+ transition-property: background, color, opacity;
187
+ -webkit-tap-highlight-color: transparent;
188
+
189
+ &::after {
190
+ content: "";
191
+ position: absolute;
192
+ inset: 0;
193
+ border-radius: inherit;
194
+ pointer-events: none;
195
+ transition-property: box-shadow;
196
+ }
197
+
198
+ &:where(:focus-visible) {
199
+ z-index: 1;
200
+
201
+ &::after {
202
+ box-shadow:
203
+ var(--lb-dynamic-background) 0 0 0 2px,
204
+ var(--lb-accent) 0 0 0 4px;
205
+ }
206
+ }
161
207
 
162
208
  &:where(.lb-button\:non-disableable:disabled) {
163
209
  cursor: default;
@@ -213,12 +259,30 @@
213
259
  box-shadow: inset 0 0 0 1px var(--lb-foreground-subtle);
214
260
  transition-property: background, color, opacity, box-shadow;
215
261
  }
262
+
263
+ &:where(:has(.lb-button-label)) {
264
+ gap: calc(0.25 * var(--lb-spacing));
265
+ padding-inline: calc(0.5 * var(--lb-spacing));
266
+ }
267
+
268
+ &:where([data-size="large"]) {
269
+ padding: calc(0.5 * var(--lb-spacing));
270
+
271
+ &:where(:has(.lb-button-label)) {
272
+ gap: calc(0.35 * var(--lb-spacing));
273
+ padding-inline: calc(0.7 * var(--lb-spacing));
274
+ }
275
+ }
216
276
  }
217
277
 
218
278
  .lb-button-icon {
219
279
  --lb-icon-background: var(--lb-button-background);
220
280
  }
221
281
 
282
+ .lb-button-label {
283
+ font-weight: 500;
284
+ }
285
+
222
286
  /*************************************
223
287
  * Dropdown *
224
288
  *************************************/
@@ -277,6 +341,18 @@
277
341
 
278
342
  .lb-list {
279
343
  display: contents;
344
+
345
+ :where(:first-child) {
346
+ @include capitalize;
347
+ }
348
+ }
349
+
350
+ /*************************************
351
+ * Date *
352
+ *************************************/
353
+
354
+ .lb-date {
355
+ @include capitalize;
280
356
  }
281
357
 
282
358
  /*************************************
@@ -351,29 +427,6 @@
351
427
  flex: 1;
352
428
  }
353
429
 
354
- .lb-emoji-picker-loading,
355
- .lb-emoji-picker-empty,
356
- .lb-emoji-picker-error {
357
- position: absolute;
358
- inset: 0;
359
- display: flex;
360
- justify-content: center;
361
- align-items: center;
362
- }
363
-
364
- .lb-emoji-picker-loading {
365
- color: var(--lb-foreground-moderate);
366
- }
367
-
368
- .lb-emoji-picker-empty,
369
- .lb-emoji-picker-error {
370
- padding: var(--lb-spacing);
371
- color: var(--lb-foreground-tertiary);
372
- font-size: 0.875em;
373
- text-align: center;
374
- text-wrap: balance;
375
- }
376
-
377
430
  .lb-emoji-picker-category-header {
378
431
  padding: var(--lb-emoji-picker-padding) var(--lb-emoji-picker-offset-padding);
379
432
  background: var(--lb-dynamic-background);
@@ -428,7 +481,6 @@
428
481
  position: relative;
429
482
  display: flex;
430
483
  align-items: center;
431
- max-inline-size: 300px;
432
484
  min-block-size: calc(
433
485
  $lb-tooltip-shortcut-height + 2 * $lb-tooltip-additional-padding
434
486
  );
@@ -439,7 +491,6 @@
439
491
  box-shadow: var(--lb-tooltip-shadow);
440
492
  font-size: 0.75rem;
441
493
  line-height: 1;
442
- overflow-wrap: anywhere;
443
494
  pointer-events: none;
444
495
 
445
496
  &::after {
@@ -615,7 +666,6 @@
615
666
  *************************************/
616
667
 
617
668
  .lb-composer {
618
- position: relative;
619
669
  background: var(--lb-dynamic-background);
620
670
  color: var(--lb-foreground);
621
671
  transition-property: background;
@@ -625,16 +675,37 @@
625
675
  margin: 0;
626
676
  }
627
677
 
628
- .lb-composer:where(:has(.lb-composer-editor:not(:focus-visible))) {
629
- :where(.lb-button[data-variant="primary"]) {
630
- --lb-button-background: var(--lb-foreground-subtle);
678
+ /**
679
+ * Progressive enhancement: Use :has instead of :focus-within to target the editor specifically
680
+ */
681
+ @supports selector(:has(*)) {
682
+ .lb-composer:where(:has(.lb-composer-editor:not(:focus-visible))) {
683
+ :where(.lb-button[data-variant="primary"]) {
684
+ --lb-button-background: var(--lb-foreground-subtle);
631
685
 
632
- color: var(--lb-foreground-tertiary);
686
+ color: var(--lb-foreground-tertiary);
633
687
 
634
- &:where(:enabled:hover, :enabled:focus-visible) {
635
- --lb-button-background: var(--lb-accent);
688
+ &:where(:enabled:hover, :enabled:focus-visible) {
689
+ --lb-button-background: var(--lb-accent);
636
690
 
637
- color: var(--lb-accent-foreground);
691
+ color: var(--lb-accent-foreground);
692
+ }
693
+ }
694
+ }
695
+ }
696
+
697
+ @supports not selector(:has(*)) {
698
+ .lb-composer:where(:not(:focus-within)) {
699
+ :where(.lb-button[data-variant="primary"]) {
700
+ --lb-button-background: var(--lb-foreground-subtle);
701
+
702
+ color: var(--lb-foreground-tertiary);
703
+
704
+ &:where(:enabled:hover, :enabled:focus-visible) {
705
+ --lb-button-background: var(--lb-accent);
706
+
707
+ color: var(--lb-accent-foreground);
708
+ }
638
709
  }
639
710
  }
640
711
  }
@@ -662,7 +733,6 @@
662
733
  gap: calc(0.75 * var(--lb-spacing));
663
734
  align-items: center;
664
735
  block-size: calc($lb-button-size + var(--lb-spacing));
665
- margin-block-start: calc(-0.125 * var(--lb-spacing));
666
736
  padding: 0 var(--lb-spacing) var(--lb-spacing);
667
737
  }
668
738
 
@@ -691,61 +761,12 @@
691
761
  }
692
762
  }
693
763
 
694
- .lb-composer-editor:where(:has(+ .lb-composer-attachments)) {
695
- padding-block-end: calc(0.25 * var(--lb-spacing));
696
- }
697
-
698
- .lb-composer-attachments {
699
- padding-inline: var(--lb-spacing);
700
- padding-block-start: calc(0.75 * var(--lb-spacing));
701
- padding-block-end: var(--lb-spacing);
702
- }
703
-
704
- .lb-composer-editor-container:where([data-drop]) * {
705
- pointer-events: none;
706
- }
707
-
708
- .lb-composer-attachments-drop-area {
709
- position: absolute;
710
- inset: 0;
711
- display: flex;
712
- place-content: center;
713
- place-items: center;
714
- color: var(--lb-accent);
715
-
716
- &::before,
717
- &::after {
718
- content: "";
719
- position: absolute;
720
- inset: calc(0.5 * var(--lb-spacing));
721
- z-index: 0;
722
- border-radius: calc(0.75 * var(--lb-radius));
723
- }
724
-
725
- &::before {
726
- background: currentcolor;
727
- opacity: calc(1 * var(--lb-accent-contrast));
728
- }
729
-
730
- &::after {
731
- border: 2px dashed currentcolor;
732
- opacity: calc(2 * var(--lb-accent-contrast));
764
+ .lb-composer:where(:not([data-collapsed])) {
765
+ :where(.lb-composer-editor) {
766
+ padding-block-end: calc(0.875 * var(--lb-spacing));
733
767
  }
734
768
  }
735
769
 
736
- .lb-composer-attachments-drop-area-label {
737
- position: relative;
738
- display: flex;
739
- gap: calc(0.25 * var(--lb-spacing));
740
- place-items: center;
741
- padding: calc(0.375 * var(--lb-spacing)) calc(0.5 * var(--lb-spacing));
742
- border-radius: calc(0.75 * var(--lb-radius));
743
- background: var(--lb-accent);
744
- color: var(--lb-accent-foreground);
745
- font-weight: 500;
746
- pointer-events: none;
747
- }
748
-
749
770
  /*************************************
750
771
  * Comment *
751
772
  *************************************/
@@ -815,15 +836,17 @@
815
836
  min-inline-size: 0;
816
837
  }
817
838
 
818
- .lb-comment-author {
839
+ .lb-comment-author,
840
+ .lb-comment-date {
819
841
  @include truncate;
842
+ @include capitalize;
843
+ }
820
844
 
845
+ .lb-comment-author {
821
846
  font-weight: 500;
822
847
  }
823
848
 
824
849
  .lb-comment-date {
825
- @include truncate;
826
-
827
850
  color: var(--lb-foreground-tertiary);
828
851
  font-size: 0.875em;
829
852
  }
@@ -854,10 +877,6 @@
854
877
  }
855
878
  }
856
879
 
857
- .lb-comment-attachments {
858
- margin-block-start: calc(0.75 * var(--lb-spacing));
859
- }
860
-
861
880
  .lb-comment-reactions {
862
881
  display: flex;
863
882
  flex-wrap: wrap;
@@ -963,7 +982,7 @@
963
982
  min-block-size: calc(var(--lb-comment-avatar-size) + var(--lb-spacing));
964
983
  }
965
984
 
966
- &:where(:first-of-type, [data-editing]) {
985
+ &:where(:first-of-type) {
967
986
  padding-block-start: var(--lb-spacing);
968
987
 
969
988
  &:where(.lb-comment\:indent-content) {
@@ -973,7 +992,7 @@
973
992
  }
974
993
  }
975
994
 
976
- &:where(:last-of-type, [data-editing]) {
995
+ &:where(:last-of-type) {
977
996
  padding-block-end: var(--lb-spacing);
978
997
 
979
998
  &:where(.lb-comment\:indent-content) {
@@ -1036,212 +1055,6 @@
1036
1055
  }
1037
1056
  }
1038
1057
 
1039
- /*************************************
1040
- * Attachments *
1041
- *************************************/
1042
-
1043
- .lb-comment-attachments,
1044
- .lb-composer-attachments {
1045
- display: grid;
1046
- grid-template-columns: repeat(auto-fill, minmax(min(100%, 200px), 1fr));
1047
- gap: calc(0.75 * var(--lb-spacing));
1048
- }
1049
-
1050
- .lb-attachment,
1051
- .lb-attachment-delete {
1052
- @include button;
1053
- }
1054
-
1055
- .lb-attachment {
1056
- position: relative;
1057
- inline-size: 100%;
1058
- min-inline-size: 0;
1059
- border-radius: var(--lb-radius);
1060
- background: var(--lb-dynamic-background);
1061
- box-shadow: inset 0 0 0 1px var(--lb-foreground-subtle);
1062
-
1063
- &:where([tabindex="-1"]) {
1064
- cursor: default;
1065
- }
1066
-
1067
- &:where(:not([tabindex="-1"])) {
1068
- &:where(:hover, :focus-visible) {
1069
- background: var(--lb-foreground-subtle);
1070
- }
1071
- }
1072
- }
1073
-
1074
- .lb-attachment-delete {
1075
- position: absolute;
1076
- inset-inline-end: -0.35rem;
1077
- inset-block-start: -0.35rem;
1078
- z-index: 2;
1079
- display: flex;
1080
- justify-content: center;
1081
- align-items: center;
1082
- inline-size: 1.1rem;
1083
- block-size: 1.1rem;
1084
- border-radius: 50%;
1085
- background: var(--lb-foreground-subtle);
1086
- color: var(--lb-foreground-secondary);
1087
- box-shadow: 0 0 0 2px var(--lb-dynamic-background);
1088
- opacity: 0;
1089
-
1090
- /* Invisibly increase the button's hit target size */
1091
- &::before {
1092
- content: "";
1093
- position: absolute;
1094
- inset: -4px;
1095
- z-index: -1;
1096
- border-radius: inherit;
1097
- }
1098
-
1099
- &:where(:hover, :focus-visible) {
1100
- background: var(--lb-foreground-secondary);
1101
- color: var(--lb-dynamic-background);
1102
- }
1103
-
1104
- :where(.lb-attachment:focus-within, .lb-attachment:hover) & {
1105
- opacity: 1;
1106
- }
1107
-
1108
- :where(.lb-icon) {
1109
- inline-size: 0.75rem;
1110
- }
1111
- }
1112
-
1113
- .lb-attachment-name {
1114
- display: flex;
1115
- }
1116
-
1117
- .lb-attachment-name-base,
1118
- .lb-attachment-description {
1119
- @include truncate;
1120
- }
1121
-
1122
- .lb-attachment-preview {
1123
- position: relative;
1124
- }
1125
-
1126
- .lb-attachment-preview-image {
1127
- border-radius: inherit;
1128
- transition-property: opacity;
1129
-
1130
- &,
1131
- &::after,
1132
- img {
1133
- position: absolute;
1134
- inset: 0;
1135
- inline-size: 100%;
1136
- block-size: 100%;
1137
- }
1138
-
1139
- img {
1140
- object-fit: cover;
1141
- }
1142
-
1143
- &::after {
1144
- content: "";
1145
- border-radius: inherit;
1146
- box-shadow: var(--lb-highlight-shadow);
1147
- pointer-events: none;
1148
- }
1149
-
1150
- &:where([data-hidden]) {
1151
- opacity: 0;
1152
- }
1153
- }
1154
-
1155
- .lb-attachment-icon {
1156
- flex: none;
1157
- overflow: visible;
1158
- color: var(--lb-foreground);
1159
- }
1160
-
1161
- .lb-attachment-icon-glyph {
1162
- fill: var(--lb-foreground-moderate);
1163
- }
1164
-
1165
- .lb-attachment-icon-background {
1166
- fill: var(--lb-background);
1167
- }
1168
-
1169
- .lb-attachment-icon-fold {
1170
- fill-opacity: calc(0.75 * var(--lb-foreground-contrast));
1171
- }
1172
-
1173
- .lb-attachment-icon-shadow {
1174
- filter: blur(6px);
1175
- fill-opacity: var(--lb-foreground-contrast);
1176
- }
1177
-
1178
- .lb-file-attachment {
1179
- display: flex;
1180
- gap: calc(0.5 * var(--lb-spacing));
1181
- padding: calc(0.5 * var(--lb-spacing));
1182
- padding-inline-end: calc(0.65 * var(--lb-spacing));
1183
-
1184
- :where(.lb-attachment-preview) {
1185
- display: flex;
1186
- flex: none;
1187
- justify-content: center;
1188
- align-items: center;
1189
- overflow: hidden;
1190
- aspect-ratio: 1;
1191
- inline-size: 2.5rem;
1192
- border-radius: calc(0.5 * var(--lb-radius));
1193
- background: color-mix(
1194
- in srgb,
1195
- transparent,
1196
- var(--lb-foreground) var(--lb-foreground-contrast)
1197
- );
1198
- color: var(--lb-foreground-tertiary);
1199
- transition-property: background, color;
1200
- }
1201
-
1202
- &:where([data-error]) {
1203
- :where(.lb-attachment-preview) {
1204
- background: var(--lb-destructive);
1205
- color: var(--lb-destructive-foreground);
1206
- }
1207
- }
1208
-
1209
- :where(.lb-attachment-details) {
1210
- display: flex;
1211
- flex-direction: column;
1212
- gap: calc(0.25 * var(--lb-spacing));
1213
- justify-content: center;
1214
- min-inline-size: 0;
1215
- font-size: 0.875em;
1216
- }
1217
-
1218
- :where(.lb-attachment-name),
1219
- :where(.lb-attachment-description) {
1220
- transition-property: color;
1221
- }
1222
-
1223
- :where(.lb-attachment-name) {
1224
- color: var(--lb-foreground-secondary);
1225
- font-weight: 500;
1226
- }
1227
-
1228
- :where(.lb-attachment-description) {
1229
- color: var(--lb-foreground-tertiary);
1230
- }
1231
-
1232
- :where(:not([tabindex="-1"])) {
1233
- &:where(:hover, :focus-visible) {
1234
- :where(.lb-attachment-name) {
1235
- color: var(--lb-foreground);
1236
- }
1237
-
1238
- :where(.lb-attachment-description) {
1239
- color: var(--lb-foreground-secondary);
1240
- }
1241
- }
1242
- }
1243
- }
1244
-
1245
1058
  /*************************************
1246
1059
  * Inbox Notification *
1247
1060
  *************************************/
@@ -1360,6 +1173,8 @@
1360
1173
  }
1361
1174
 
1362
1175
  .lb-inbox-notification-title {
1176
+ @include capitalize;
1177
+
1363
1178
  min-block-size: $lb-button-size;
1364
1179
 
1365
1180
  :where(strong, .lb-list, .lb-name) {
@@ -1408,8 +1223,7 @@
1408
1223
  font-size: 0.875rem;
1409
1224
  }
1410
1225
 
1411
- :where(.lb-comment-reaction),
1412
- :where(.lb-comment-attachment) {
1226
+ :where(.lb-comment-reaction) {
1413
1227
  pointer-events: none;
1414
1228
  }
1415
1229
  }
@@ -1429,16 +1243,106 @@
1429
1243
  }
1430
1244
 
1431
1245
  /*************************************
1432
- * Inbox Notification List *
1246
+ * History Version Summary *
1247
+ *************************************/
1248
+
1249
+ .lb-history-version-summary {
1250
+ position: relative;
1251
+ display: flex;
1252
+ flex-direction: column;
1253
+ gap: calc(0.25 * var(--lb-spacing));
1254
+ justify-content: center;
1255
+ inline-size: 100%;
1256
+ min-inline-size: 0;
1257
+ padding: var(--lb-spacing);
1258
+ background: var(--lb-dynamic-background);
1259
+ transition-property: background;
1260
+
1261
+ &:where(:hover, :focus-visible, :focus-within, [data-selected]) {
1262
+ --lb-dynamic-background: var(--lb-background-foreground-faint);
1263
+ }
1264
+ }
1265
+
1266
+ .lb-history-version-summary-date,
1267
+ .lb-history-version-summary-authors {
1268
+ @include truncate;
1269
+ @include capitalize;
1270
+
1271
+ min-inline-size: 0;
1272
+ max-inline-size: 100%;
1273
+ }
1274
+
1275
+ .lb-history-version-summary-date {
1276
+ color: var(--lb-foreground-secondary);
1277
+ font-weight: 500;
1278
+ }
1279
+
1280
+ .lb-history-version-summary-authors {
1281
+ color: var(--lb-foreground-tertiary);
1282
+ }
1283
+
1284
+ /*************************************
1285
+ * History Version Previe *
1433
1286
  *************************************/
1434
1287
 
1435
- .lb-inbox-notification-list {
1288
+ .lb-history-version-preview {
1289
+ position: relative;
1290
+ display: flex;
1291
+ flex-direction: column;
1292
+ background: var(--lb-dynamic-background);
1293
+
1294
+ /* overflow-block: auto; doesn't work as expected */
1295
+ /* stylelint-disable-next-line plugin/use-logical-properties-and-values */
1296
+ overflow-y: auto;
1297
+ }
1298
+
1299
+ .lb-history-version-preview-content {
1300
+ flex: 1 0 auto;
1301
+ padding: var(--lb-spacing);
1302
+ }
1303
+
1304
+ .lb-history-version-preview-footer {
1305
+ position: sticky;
1306
+ inset-block-end: 0;
1307
+ display: flex;
1308
+ flex: none;
1309
+ gap: var(--lb-spacing);
1310
+ align-items: center;
1311
+ margin-block-start: auto;
1312
+ padding: var(--lb-spacing);
1313
+ border-block-start: 1px solid var(--lb-foreground-subtle);
1314
+ background: var(--lb-dynamic-background);
1315
+ }
1316
+
1317
+ .lb-history-version-preview-authors {
1318
+ @include truncate;
1319
+
1320
+ flex: 1 1 auto;
1321
+ min-inline-size: 0;
1322
+ color: var(--lb-foreground-tertiary);
1323
+ }
1324
+
1325
+ .lb-history-version-preview-actions {
1326
+ display: flex;
1327
+ flex: none;
1328
+ gap: calc(0.35 * var(--lb-spacing));
1329
+ align-items: center;
1330
+ margin-inline-start: auto;
1331
+ }
1332
+
1333
+ /*************************************
1334
+ * Lists *
1335
+ *************************************/
1336
+
1337
+ .lb-inbox-notification-list,
1338
+ .lb-history-version-summary-list {
1436
1339
  margin: 0;
1437
1340
  padding: 0;
1438
1341
  list-style: none;
1439
1342
  }
1440
1343
 
1441
- .lb-inbox-notification-list-item {
1344
+ .lb-inbox-notification-list-item,
1345
+ .lb-history-version-summary-list-item {
1442
1346
  &:where(:not(:last-of-type)) {
1443
1347
  border-block-end: 1px solid var(--lb-foreground-subtle);
1444
1348
  }
@@ -1459,7 +1363,7 @@
1459
1363
  }
1460
1364
 
1461
1365
  /**
1462
- * Merge adjacent inline code elements
1366
+ * Progressive enhancement: Merge adjacent inline code elements
1463
1367
  */
1464
1368
  :where(span:has(code) + span code) {
1465
1369
  padding-inline-start: 0;
@@ -1658,13 +1562,3 @@
1658
1562
  mask-position: -200% 0;
1659
1563
  }
1660
1564
  }
1661
-
1662
- @keyframes lb-animation-spin {
1663
- from {
1664
- transform: rotate(0deg);
1665
- }
1666
-
1667
- to {
1668
- transform: rotate(360deg);
1669
- }
1670
- }