@tldraw/commenting 0.0.0-bootstrap → 5.3.0-internal.c5c7f1d817d0

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 (125) hide show
  1. package/commenting.css +131 -131
  2. package/dist-cjs/canvas/comment-body.js +1 -1
  3. package/dist-cjs/canvas/comment-body.js.map +2 -2
  4. package/dist-cjs/canvas/comments-filter-menu.js +1 -1
  5. package/dist-cjs/canvas/comments-filter-menu.js.map +1 -1
  6. package/dist-cjs/canvas/comments-overflow-menu.js +3 -3
  7. package/dist-cjs/canvas/comments-overflow-menu.js.map +2 -2
  8. package/dist-cjs/canvas/comments-overlay.js +65 -50
  9. package/dist-cjs/canvas/comments-overlay.js.map +2 -2
  10. package/dist-cjs/canvas/comments-sidebar.js +2 -2
  11. package/dist-cjs/canvas/comments-sidebar.js.map +2 -2
  12. package/dist-cjs/clustering/runtime.js +119 -7
  13. package/dist-cjs/clustering/runtime.js.map +2 -2
  14. package/dist-cjs/index.d.ts +28 -8
  15. package/dist-cjs/index.js +1 -1
  16. package/dist-cjs/ui/avatar.js +10 -2
  17. package/dist-cjs/ui/avatar.js.map +2 -2
  18. package/dist-cjs/ui/byline.js +4 -4
  19. package/dist-cjs/ui/byline.js.map +2 -2
  20. package/dist-cjs/ui/comment-card.js +3 -3
  21. package/dist-cjs/ui/comment-card.js.map +2 -2
  22. package/dist-cjs/ui/comment-composer.js +30 -24
  23. package/dist-cjs/ui/comment-composer.js.map +2 -2
  24. package/dist-cjs/ui/comment-mention.js +1 -1
  25. package/dist-cjs/ui/comment-mention.js.map +2 -2
  26. package/dist-cjs/ui/comment-pin.js +5 -1
  27. package/dist-cjs/ui/comment-pin.js.map +2 -2
  28. package/dist-cjs/ui/comment-text.js +1 -1
  29. package/dist-cjs/ui/comment-text.js.map +2 -2
  30. package/dist-cjs/ui/comment-thread.js +6 -6
  31. package/dist-cjs/ui/comment-thread.js.map +2 -2
  32. package/dist-cjs/ui/comments-list.js +11 -11
  33. package/dist-cjs/ui/comments-list.js.map +2 -2
  34. package/dist-cjs/ui/count-badge.js +1 -1
  35. package/dist-cjs/ui/count-badge.js.map +2 -2
  36. package/dist-cjs/ui/empty-state.js +3 -3
  37. package/dist-cjs/ui/empty-state.js.map +2 -2
  38. package/dist-cjs/ui/mention-list.js +7 -7
  39. package/dist-cjs/ui/mention-list.js.map +2 -2
  40. package/dist-cjs/ui/mention-suggestion.js +3 -3
  41. package/dist-cjs/ui/mention-suggestion.js.map +2 -2
  42. package/dist-cjs/ui/mention.js +1 -1
  43. package/dist-cjs/ui/mention.js.map +2 -2
  44. package/dist-cjs/ui/reaction.js +11 -4
  45. package/dist-cjs/ui/reaction.js.map +2 -2
  46. package/dist-cjs/ui/reactions.js +10 -2
  47. package/dist-cjs/ui/reactions.js.map +2 -2
  48. package/dist-cjs/ui/send-button.js +1 -1
  49. package/dist-cjs/ui/send-button.js.map +2 -2
  50. package/dist-esm/canvas/comment-body.mjs +1 -1
  51. package/dist-esm/canvas/comment-body.mjs.map +2 -2
  52. package/dist-esm/canvas/comments-filter-menu.mjs +1 -1
  53. package/dist-esm/canvas/comments-filter-menu.mjs.map +1 -1
  54. package/dist-esm/canvas/comments-overflow-menu.mjs +3 -3
  55. package/dist-esm/canvas/comments-overflow-menu.mjs.map +2 -2
  56. package/dist-esm/canvas/comments-overlay.mjs +65 -50
  57. package/dist-esm/canvas/comments-overlay.mjs.map +2 -2
  58. package/dist-esm/canvas/comments-sidebar.mjs +2 -2
  59. package/dist-esm/canvas/comments-sidebar.mjs.map +2 -2
  60. package/dist-esm/clustering/runtime.mjs +119 -7
  61. package/dist-esm/clustering/runtime.mjs.map +2 -2
  62. package/dist-esm/index.d.mts +28 -8
  63. package/dist-esm/index.mjs +1 -1
  64. package/dist-esm/ui/avatar.mjs +10 -2
  65. package/dist-esm/ui/avatar.mjs.map +2 -2
  66. package/dist-esm/ui/byline.mjs +4 -4
  67. package/dist-esm/ui/byline.mjs.map +2 -2
  68. package/dist-esm/ui/comment-card.mjs +3 -3
  69. package/dist-esm/ui/comment-card.mjs.map +2 -2
  70. package/dist-esm/ui/comment-composer.mjs +30 -24
  71. package/dist-esm/ui/comment-composer.mjs.map +2 -2
  72. package/dist-esm/ui/comment-mention.mjs +1 -1
  73. package/dist-esm/ui/comment-mention.mjs.map +2 -2
  74. package/dist-esm/ui/comment-pin.mjs +5 -1
  75. package/dist-esm/ui/comment-pin.mjs.map +2 -2
  76. package/dist-esm/ui/comment-text.mjs +1 -1
  77. package/dist-esm/ui/comment-text.mjs.map +2 -2
  78. package/dist-esm/ui/comment-thread.mjs +6 -6
  79. package/dist-esm/ui/comment-thread.mjs.map +2 -2
  80. package/dist-esm/ui/comments-list.mjs +11 -11
  81. package/dist-esm/ui/comments-list.mjs.map +2 -2
  82. package/dist-esm/ui/count-badge.mjs +1 -1
  83. package/dist-esm/ui/count-badge.mjs.map +2 -2
  84. package/dist-esm/ui/empty-state.mjs +3 -3
  85. package/dist-esm/ui/empty-state.mjs.map +2 -2
  86. package/dist-esm/ui/mention-list.mjs +7 -7
  87. package/dist-esm/ui/mention-list.mjs.map +2 -2
  88. package/dist-esm/ui/mention-suggestion.mjs +3 -3
  89. package/dist-esm/ui/mention-suggestion.mjs.map +2 -2
  90. package/dist-esm/ui/mention.mjs +1 -1
  91. package/dist-esm/ui/mention.mjs.map +2 -2
  92. package/dist-esm/ui/reaction.mjs +11 -4
  93. package/dist-esm/ui/reaction.mjs.map +2 -2
  94. package/dist-esm/ui/reactions.mjs +10 -2
  95. package/dist-esm/ui/reactions.mjs.map +2 -2
  96. package/dist-esm/ui/send-button.mjs +1 -1
  97. package/dist-esm/ui/send-button.mjs.map +2 -2
  98. package/package.json +3 -3
  99. package/src/canvas/canvas.css +25 -25
  100. package/src/canvas/comment-body.tsx +1 -1
  101. package/src/canvas/comment-render.test.ts +1 -1
  102. package/src/canvas/comments-filter-menu.tsx +1 -1
  103. package/src/canvas/comments-overflow-menu.tsx +3 -3
  104. package/src/canvas/comments-overlay.tsx +109 -76
  105. package/src/canvas/comments-sidebar.tsx +2 -2
  106. package/src/clustering/runtime.test.ts +183 -7
  107. package/src/clustering/runtime.ts +164 -15
  108. package/src/ui/avatar.tsx +9 -2
  109. package/src/ui/byline.tsx +4 -4
  110. package/src/ui/comment-card.tsx +3 -3
  111. package/src/ui/comment-composer.tsx +49 -30
  112. package/src/ui/comment-mention.ts +2 -2
  113. package/src/ui/comment-pin.tsx +5 -1
  114. package/src/ui/comment-text.tsx +1 -1
  115. package/src/ui/comment-thread.tsx +8 -6
  116. package/src/ui/comments-list.tsx +16 -12
  117. package/src/ui/comments.css +106 -106
  118. package/src/ui/count-badge.tsx +1 -1
  119. package/src/ui/empty-state.tsx +3 -3
  120. package/src/ui/mention-list.tsx +8 -8
  121. package/src/ui/mention-suggestion.tsx +3 -3
  122. package/src/ui/mention.tsx +1 -1
  123. package/src/ui/reaction.tsx +6 -3
  124. package/src/ui/reactions.tsx +6 -2
  125. package/src/ui/send-button.tsx +1 -1
package/commenting.css CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  /* Real comment UI components. Co-located so styles travel to any view (studio,
6
6
  canvas), and themed via tldraw's --tl-color tokens so they follow light/dark. */
7
- .cmt-card {
7
+ .tlui-cmt-card {
8
8
  position: relative;
9
9
  display: flex;
10
10
  gap: 10px;
@@ -16,7 +16,7 @@
16
16
  }
17
17
 
18
18
  /* hover-revealed controls (edit…) at the card's top-right */
19
- .cmt-card__actions {
19
+ .tlui-cmt-card__actions {
20
20
  position: absolute;
21
21
  top: 6px;
22
22
  right: 6px;
@@ -24,65 +24,65 @@
24
24
  gap: 2px;
25
25
  opacity: 0;
26
26
  }
27
- .cmt-card:hover .cmt-card__actions,
28
- .cmt-card:focus-within .cmt-card__actions {
27
+ .tlui-cmt-card:hover .tlui-cmt-card__actions,
28
+ .tlui-cmt-card:focus-within .tlui-cmt-card__actions {
29
29
  opacity: 1;
30
30
  }
31
31
 
32
- .cmt-body {
32
+ .tlui-cmt-body {
33
33
  flex: 1;
34
34
  min-width: 0;
35
35
  }
36
36
 
37
- .cmt-head {
37
+ .tlui-cmt-head {
38
38
  display: flex;
39
39
  align-items: baseline;
40
40
  gap: 6px;
41
41
  }
42
42
 
43
- .cmt-author {
43
+ .tlui-cmt-author {
44
44
  font-weight: 600;
45
45
  font-size: 13px;
46
46
  color: var(--tl-color-text-1);
47
47
  }
48
48
 
49
- .cmt-time {
49
+ .tlui-cmt-time {
50
50
  font-size: 11px;
51
51
  color: var(--tl-color-text-3);
52
52
  }
53
53
 
54
- .cmt-text {
54
+ .tlui-cmt-text {
55
55
  margin: 3px 0 0;
56
56
  font-size: 13px;
57
57
  line-height: 1.4;
58
58
  color: var(--tl-color-text-1);
59
59
  }
60
60
 
61
- .cmt-edited {
61
+ .tlui-cmt-edited {
62
62
  font-style: italic;
63
63
  }
64
64
 
65
65
  /* rendered rich text inside a comment body — bare tags emitted by the comment renderer
66
66
  (paragraphs, lists, code, highlight, links), matching the limited comment extension set. */
67
- .cmt-text p {
67
+ .tlui-cmt-text p {
68
68
  margin: 0;
69
69
  }
70
70
 
71
- .cmt-text p + p,
72
- .cmt-text p + ul,
73
- .cmt-text p + ol,
74
- .cmt-text ul + p,
75
- .cmt-text ol + p {
71
+ .tlui-cmt-text p + p,
72
+ .tlui-cmt-text p + ul,
73
+ .tlui-cmt-text p + ol,
74
+ .tlui-cmt-text ul + p,
75
+ .tlui-cmt-text ol + p {
76
76
  margin-top: 6px;
77
77
  }
78
78
 
79
- .cmt-text ul,
80
- .cmt-text ol {
79
+ .tlui-cmt-text ul,
80
+ .tlui-cmt-text ol {
81
81
  margin: 0;
82
82
  padding-left: 18px;
83
83
  }
84
84
 
85
- .cmt-text code {
85
+ .tlui-cmt-text code {
86
86
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
87
87
  font-size: 0.92em;
88
88
  background: var(--tl-color-muted-2);
@@ -90,18 +90,18 @@
90
90
  padding: 0 3px;
91
91
  }
92
92
 
93
- .cmt-text mark {
93
+ .tlui-cmt-text mark {
94
94
  background: color-mix(in srgb, #ffeb3b 60%, transparent);
95
95
  color: inherit;
96
96
  border-radius: 2px;
97
97
  }
98
98
 
99
- .cmt-text a {
99
+ .tlui-cmt-text a {
100
100
  color: var(--tl-color-selected);
101
101
  text-decoration: underline;
102
102
  }
103
103
 
104
- .cmt-avatar {
104
+ .tlui-cmt-avatar {
105
105
  width: 28px;
106
106
  height: 28px;
107
107
  border-radius: 50%;
@@ -115,7 +115,7 @@
115
115
  flex-shrink: 0;
116
116
  }
117
117
 
118
- .cmt-avatar--image {
118
+ .tlui-cmt-avatar--image {
119
119
  object-fit: cover;
120
120
  background: none;
121
121
  }
@@ -123,14 +123,14 @@
123
123
  /* composer — an avatar beside a rounded-rect field holding the rich-text input and the send button.
124
124
  Formatting is applied via markdown and keyboard shortcuts (no toolbar). The avatar aligns to the
125
125
  top so it stays put as the field grows to multiple lines. */
126
- .cmt-composer {
126
+ .tlui-cmt-composer {
127
127
  display: flex;
128
128
  align-items: flex-start;
129
129
  gap: 10px;
130
130
  padding: 4px 0 8px 4px;
131
131
  }
132
132
 
133
- .cmt-composer__field {
133
+ .tlui-cmt-composer__field {
134
134
  flex: 1;
135
135
  min-width: 0;
136
136
  display: flex;
@@ -142,19 +142,19 @@
142
142
  border-radius: var(--tl-radius-3);
143
143
  }
144
144
 
145
- .cmt-composer__field:focus-within {
145
+ .tlui-cmt-composer__field:focus-within {
146
146
  border-color: var(--tl-color-selected);
147
147
  }
148
148
 
149
149
  /* the editable area, with the placeholder overlaid while it's empty */
150
- .cmt-composer__input-wrap {
150
+ .tlui-cmt-composer__input-wrap {
151
151
  position: relative;
152
152
  flex: 1;
153
153
  min-width: 0;
154
154
  padding: 3px 0;
155
155
  }
156
156
 
157
- .cmt-input {
157
+ .tlui-cmt-input {
158
158
  font: inherit;
159
159
  font-size: 13px;
160
160
  line-height: 1.4;
@@ -167,23 +167,23 @@
167
167
  word-break: break-word;
168
168
  }
169
169
 
170
- .cmt-input p {
170
+ .tlui-cmt-input p {
171
171
  margin: 0;
172
172
  }
173
173
 
174
- .cmt-input p + p,
175
- .cmt-input p + ul,
176
- .cmt-input p + ol {
174
+ .tlui-cmt-input p + p,
175
+ .tlui-cmt-input p + ul,
176
+ .tlui-cmt-input p + ol {
177
177
  margin-top: 4px;
178
178
  }
179
179
 
180
- .cmt-input ul,
181
- .cmt-input ol {
180
+ .tlui-cmt-input ul,
181
+ .tlui-cmt-input ol {
182
182
  margin: 0;
183
183
  padding-left: 18px;
184
184
  }
185
185
 
186
- .cmt-input__placeholder {
186
+ .tlui-cmt-input__placeholder {
187
187
  position: absolute;
188
188
  top: 3px;
189
189
  left: 0;
@@ -193,7 +193,7 @@
193
193
  pointer-events: none;
194
194
  }
195
195
 
196
- .cmt-send {
196
+ .tlui-cmt-send {
197
197
  border: 0;
198
198
  border-radius: var(--tl-radius-2);
199
199
  background: var(--tl-color-selected);
@@ -206,29 +206,29 @@
206
206
  align-self: flex-end;
207
207
  }
208
208
 
209
- .cmt-send:hover,
210
- .pseudo-hover .cmt-send {
209
+ .tlui-cmt-send:hover,
210
+ .pseudo-hover .tlui-cmt-send {
211
211
  background: color-mix(in srgb, var(--tl-color-selected) 88%, black);
212
212
  }
213
213
 
214
- .cmt-send:active,
215
- .pseudo-active .cmt-send {
214
+ .tlui-cmt-send:active,
215
+ .pseudo-active .tlui-cmt-send {
216
216
  background: color-mix(in srgb, var(--tl-color-selected) 78%, black);
217
217
  }
218
218
 
219
- .cmt-send:focus-visible,
220
- .pseudo-focus-visible .cmt-send {
219
+ .tlui-cmt-send:focus-visible,
220
+ .pseudo-focus-visible .tlui-cmt-send {
221
221
  outline: 2px solid var(--tl-color-selected);
222
222
  outline-offset: 2px;
223
223
  }
224
224
 
225
- .cmt-send:disabled {
225
+ .tlui-cmt-send:disabled {
226
226
  opacity: 0.45;
227
227
  cursor: not-allowed;
228
228
  }
229
229
 
230
230
  /* pin */
231
- .cmt-pin {
231
+ .tlui-cmt-pin {
232
232
  width: 34px;
233
233
  height: 34px;
234
234
  border-radius: 50% 50% 50% 3px;
@@ -246,14 +246,14 @@
246
246
  box-shadow 0.08s ease;
247
247
  }
248
248
 
249
- .cmt-pin:hover,
250
- .pseudo-hover .cmt-pin {
249
+ .tlui-cmt-pin:hover,
250
+ .pseudo-hover .tlui-cmt-pin {
251
251
  transform: scale(1.08);
252
252
  box-shadow: 0 3px 10px rgba(0, 0, 0, 0.32);
253
253
  }
254
254
 
255
255
  /* open: the thread is showing — a selection ring marks the active pin */
256
- .cmt-pin--open {
256
+ .tlui-cmt-pin--open {
257
257
  box-shadow:
258
258
  0 0 0 3px var(--tl-color-panel),
259
259
  0 0 0 5px var(--tl-color-selected),
@@ -262,17 +262,17 @@
262
262
 
263
263
  /* resolved: a solid, muted grey (the default --tl-color-muted-1 is 10% black, so it goes
264
264
  translucent over the canvas). Dark mode gets its own grey — the token's dark value is near-black. */
265
- .cmt-pin--resolved {
265
+ .tlui-cmt-pin--resolved {
266
266
  background: #dfe0e1;
267
267
  color: hsl(214, 8%, 42%);
268
268
  }
269
- .tl-theme__dark .cmt-pin--resolved {
269
+ .tl-theme__dark .tlui-cmt-pin--resolved {
270
270
  background: hsl(240, 5%, 30%);
271
271
  color: hsl(0, 0%, 72%);
272
272
  }
273
273
 
274
274
  /* count badge */
275
- .cmt-count-badge {
275
+ .tlui-cmt-count-badge {
276
276
  width: 34px;
277
277
  height: 34px;
278
278
  border-radius: 50%;
@@ -288,14 +288,14 @@
288
288
  }
289
289
 
290
290
  /* thread */
291
- .cmt-thread {
291
+ .tlui-cmt-thread {
292
292
  display: flex;
293
293
  flex-direction: column;
294
294
  gap: 8px;
295
295
  width: 300px;
296
296
  }
297
297
 
298
- .cmt-thread__head {
298
+ .tlui-cmt-thread__head {
299
299
  display: flex;
300
300
  align-items: center;
301
301
  gap: 8px;
@@ -306,7 +306,7 @@
306
306
  letter-spacing: 0.04em;
307
307
  }
308
308
 
309
- .cmt-badge {
309
+ .tlui-cmt-badge {
310
310
  font-size: 10px;
311
311
  font-weight: 600;
312
312
  text-transform: none;
@@ -318,12 +318,12 @@
318
318
  }
319
319
 
320
320
  /* reactions */
321
- .cmt-reactions {
321
+ .tlui-cmt-reactions {
322
322
  display: flex;
323
323
  gap: 6px;
324
324
  }
325
325
 
326
- .cmt-reaction {
326
+ .tlui-cmt-reaction {
327
327
  display: inline-flex;
328
328
  align-items: center;
329
329
  gap: 5px;
@@ -337,27 +337,27 @@
337
337
  cursor: pointer;
338
338
  }
339
339
 
340
- .cmt-reaction:hover,
341
- .pseudo-hover .cmt-reaction {
340
+ .tlui-cmt-reaction:hover,
341
+ .pseudo-hover .tlui-cmt-reaction {
342
342
  border-color: var(--tl-color-selected);
343
343
  }
344
344
 
345
- .cmt-reaction--active {
345
+ .tlui-cmt-reaction--active {
346
346
  border-color: var(--tl-color-selected);
347
347
  background: color-mix(in srgb, var(--tl-color-selected) 12%, var(--tl-color-panel));
348
348
  }
349
349
 
350
- .cmt-reaction__count {
350
+ .tlui-cmt-reaction__count {
351
351
  color: var(--tl-color-text-3);
352
352
  }
353
353
 
354
- .cmt-reaction--add {
354
+ .tlui-cmt-reaction--add {
355
355
  color: var(--tl-color-text-3);
356
356
  font-weight: 600;
357
357
  }
358
358
 
359
359
  /* mention */
360
- .cmt-mention {
360
+ .tlui-cmt-mention {
361
361
  color: var(--tl-color-selected);
362
362
  font-weight: 600;
363
363
  background: color-mix(in srgb, var(--tl-color-selected) 12%, transparent);
@@ -366,7 +366,7 @@
366
366
  }
367
367
 
368
368
  /* mention picker */
369
- .cmt-mention-list {
369
+ .tlui-cmt-mention-list {
370
370
  display: flex;
371
371
  flex-direction: column;
372
372
  gap: 1px;
@@ -382,7 +382,7 @@
382
382
  box-shadow: var(--tl-shadow-2, 0 2px 12px rgba(0, 0, 0, 0.14));
383
383
  }
384
384
 
385
- .cmt-mention-list__item {
385
+ .tlui-cmt-mention-list__item {
386
386
  display: flex;
387
387
  align-items: center;
388
388
  gap: 8px;
@@ -396,19 +396,19 @@
396
396
  font: inherit;
397
397
  }
398
398
 
399
- .cmt-mention-list__item--active,
400
- .cmt-mention-list__item:hover {
399
+ .tlui-cmt-mention-list__item--active,
400
+ .tlui-cmt-mention-list__item:hover {
401
401
  background: var(--tl-color-muted-2, rgba(0, 0, 0, 0.06));
402
402
  }
403
403
 
404
- .cmt-mention-list__text {
404
+ .tlui-cmt-mention-list__text {
405
405
  display: flex;
406
406
  flex-direction: column;
407
407
  min-width: 0;
408
408
  line-height: 1.3;
409
409
  }
410
410
 
411
- .cmt-mention-list__name {
411
+ .tlui-cmt-mention-list__name {
412
412
  font-size: 13px;
413
413
  font-weight: 500;
414
414
  white-space: nowrap;
@@ -416,13 +416,13 @@
416
416
  text-overflow: ellipsis;
417
417
  }
418
418
 
419
- .cmt-mention-list__you {
419
+ .tlui-cmt-mention-list__you {
420
420
  margin-left: 4px;
421
421
  font-weight: 400;
422
422
  color: var(--tl-color-text-3);
423
423
  }
424
424
 
425
- .cmt-mention-list__secondary {
425
+ .tlui-cmt-mention-list__secondary {
426
426
  font-size: 12px;
427
427
  color: var(--tl-color-text-3);
428
428
  white-space: nowrap;
@@ -430,7 +430,7 @@
430
430
  text-overflow: ellipsis;
431
431
  }
432
432
 
433
- .cmt-mention-list--empty {
433
+ .tlui-cmt-mention-list--empty {
434
434
  padding: 8px 10px;
435
435
  width: 100%;
436
436
  box-sizing: border-box;
@@ -439,13 +439,13 @@
439
439
  }
440
440
 
441
441
  /* the @-picker popup — caret-anchored above the page, positioned by the suggestion plugin */
442
- .cmt-mention-popup {
442
+ .tlui-cmt-mention-popup {
443
443
  position: fixed;
444
444
  z-index: var(--tl-layer-menus);
445
445
  }
446
446
 
447
447
  /* empty state */
448
- .cmt-empty {
448
+ .tlui-cmt-empty {
449
449
  display: flex;
450
450
  flex-direction: column;
451
451
  align-items: center;
@@ -455,11 +455,11 @@
455
455
  width: 240px;
456
456
  }
457
457
 
458
- .cmt-empty__icon {
458
+ .tlui-cmt-empty__icon {
459
459
  font-size: 28px;
460
460
  }
461
461
 
462
- .cmt-empty__message {
462
+ .tlui-cmt-empty__message {
463
463
  margin: 0;
464
464
  color: var(--tl-color-text-3);
465
465
  font-size: 13px;
@@ -468,7 +468,7 @@
468
468
 
469
469
  /* a comment thread: an elevated panel — the same surface treatment as the toolbar — holding a
470
470
  header, an optional resolved banner, the comments, and a reply composer */
471
- .cmt-thread {
471
+ .tlui-cmt-thread {
472
472
  display: flex;
473
473
  flex-direction: column;
474
474
  gap: 6px;
@@ -478,22 +478,22 @@
478
478
  border-radius: var(--tl-radius-4);
479
479
  box-shadow: var(--tl-shadow-2);
480
480
  }
481
- .cmt-thread__header {
481
+ .tlui-cmt-thread__header {
482
482
  display: flex;
483
483
  align-items: center;
484
484
  justify-content: space-between;
485
485
  padding: 2px 2px 2px 4px;
486
486
  }
487
- .cmt-thread__title {
487
+ .tlui-cmt-thread__title {
488
488
  font-size: 12px;
489
489
  font-weight: 600;
490
490
  color: var(--tl-color-text-1);
491
491
  }
492
- .cmt-thread__actions {
492
+ .tlui-cmt-thread__actions {
493
493
  display: flex;
494
494
  gap: 2px;
495
495
  }
496
- .cmt-thread__action {
496
+ .tlui-cmt-thread__action {
497
497
  display: flex;
498
498
  align-items: center;
499
499
  justify-content: center;
@@ -508,25 +508,25 @@
508
508
  line-height: 1;
509
509
  cursor: pointer;
510
510
  }
511
- .cmt-thread__action:hover {
511
+ .tlui-cmt-thread__action:hover {
512
512
  background: var(--tl-color-muted-2);
513
513
  color: var(--tl-color-text-1);
514
514
  }
515
- .cmt-thread__resolved {
515
+ .tlui-cmt-thread__resolved {
516
516
  padding: 6px 10px;
517
517
  border-radius: 8px;
518
518
  background: var(--tl-color-muted-2);
519
519
  font-size: 12px;
520
520
  color: var(--tl-color-text-3);
521
521
  }
522
- .cmt-thread__list {
522
+ .tlui-cmt-thread__list {
523
523
  display: flex;
524
524
  flex-direction: column;
525
525
  gap: 6px;
526
526
  }
527
527
  /* inside the panel, comments are plain content — no surrounding box; the composer's field carries
528
528
  its own surface. */
529
- .cmt-thread .cmt-card {
529
+ .tlui-cmt-thread .tlui-cmt-card {
530
530
  width: 100%;
531
531
  padding: 6px 0 6px 4px;
532
532
  background: transparent;
@@ -534,13 +534,13 @@
534
534
  }
535
535
 
536
536
  /* comments list — thread summaries, one per row (used by the canvas sidebar) */
537
- .cmt-list {
537
+ .tlui-cmt-list {
538
538
  display: flex;
539
539
  flex-direction: column;
540
540
  width: 100%;
541
541
  min-height: 0;
542
542
  }
543
- .cmt-list__header {
543
+ .tlui-cmt-list__header {
544
544
  flex-shrink: 0;
545
545
  display: flex;
546
546
  align-items: center;
@@ -549,7 +549,7 @@
549
549
  padding: 6px 6px 6px 14px;
550
550
  border-bottom: 1px solid var(--tl-color-divider);
551
551
  }
552
- .cmt-list__header-title {
552
+ .tlui-cmt-list__header-title {
553
553
  font-size: 11px;
554
554
  font-weight: 600;
555
555
  letter-spacing: 0.06em;
@@ -558,7 +558,7 @@
558
558
  }
559
559
 
560
560
  /* a small square icon button in the sidebar header (filter funnel, overflow …) */
561
- .cmt-header-btn {
561
+ .tlui-cmt-header-btn {
562
562
  display: flex;
563
563
  align-items: center;
564
564
  justify-content: center;
@@ -571,19 +571,19 @@
571
571
  color: var(--tl-color-text-2);
572
572
  cursor: pointer;
573
573
  }
574
- .cmt-header-btn:hover,
575
- .cmt-header-btn[data-state='open'] {
574
+ .tlui-cmt-header-btn:hover,
575
+ .tlui-cmt-header-btn[data-state='open'] {
576
576
  background: var(--tl-color-muted-2);
577
577
  color: var(--tl-color-text-1);
578
578
  }
579
- .cmt-list__header-actions {
579
+ .tlui-cmt-list__header-actions {
580
580
  display: flex;
581
581
  align-items: center;
582
582
  gap: 2px;
583
583
  }
584
584
 
585
585
  /* a menu row with a label and a right-aligned shortcut hint (overflow menu) */
586
- .cmt-menu-item {
586
+ .tlui-cmt-menu-item {
587
587
  display: flex;
588
588
  align-items: center;
589
589
  justify-content: space-between;
@@ -598,24 +598,24 @@
598
598
  color: var(--tl-color-text-1);
599
599
  cursor: pointer;
600
600
  }
601
- .cmt-menu-item:hover {
601
+ .tlui-cmt-menu-item:hover {
602
602
  background: var(--tl-color-muted-2);
603
603
  }
604
- .cmt-menu-item__shortcut {
604
+ .tlui-cmt-menu-item__shortcut {
605
605
  color: var(--tl-color-text-3);
606
606
  font-size: 12px;
607
607
  }
608
- .cmt-list__items {
608
+ .tlui-cmt-list__items {
609
609
  flex: 1;
610
610
  min-height: 0;
611
611
  overflow-y: auto;
612
612
  }
613
- .cmt-list__empty {
613
+ .tlui-cmt-list__empty {
614
614
  padding: 20px 14px;
615
615
  color: var(--tl-color-text-3);
616
616
  font-size: 13px;
617
617
  }
618
- .cmt-list__item {
618
+ .tlui-cmt-list__item {
619
619
  display: flex;
620
620
  gap: 10px;
621
621
  width: 100%;
@@ -627,22 +627,22 @@
627
627
  text-align: left;
628
628
  cursor: pointer;
629
629
  }
630
- .cmt-list__item:hover {
630
+ .tlui-cmt-list__item:hover {
631
631
  background: var(--tl-color-muted-2);
632
632
  }
633
- .cmt-list__item--selected {
633
+ .tlui-cmt-list__item--selected {
634
634
  background: var(--tl-color-muted-1);
635
635
  }
636
636
  /* resolved rows mute their content but keep the "Resolved" marker legible */
637
- .cmt-list__item[data-resolved] .cmt-head,
638
- .cmt-list__item[data-resolved] .cmt-list__item-preview {
637
+ .tlui-cmt-list__item[data-resolved] .tlui-cmt-head,
638
+ .tlui-cmt-list__item[data-resolved] .tlui-cmt-list__item-preview {
639
639
  opacity: 0.55;
640
640
  }
641
- .cmt-list__item-body {
641
+ .tlui-cmt-list__item-body {
642
642
  flex: 1;
643
643
  min-width: 0;
644
644
  }
645
- .cmt-list__item-preview {
645
+ .tlui-cmt-list__item-preview {
646
646
  margin-top: 2px;
647
647
  font-size: 13px;
648
648
  color: var(--tl-color-text-1);
@@ -653,7 +653,7 @@
653
653
  -webkit-box-orient: vertical;
654
654
  }
655
655
  /* meta line under the preview: page label and/or a resolved marker */
656
- .cmt-list__item-meta {
656
+ .tlui-cmt-list__item-meta {
657
657
  display: flex;
658
658
  align-items: center;
659
659
  gap: 8px;
@@ -661,20 +661,20 @@
661
661
  font-size: 11px;
662
662
  color: var(--tl-color-text-3);
663
663
  }
664
- .cmt-list__item-resolved {
664
+ .tlui-cmt-list__item-resolved {
665
665
  display: inline-flex;
666
666
  align-items: center;
667
667
  gap: 3px;
668
668
  font-weight: 600;
669
669
  }
670
- .cmt-list__item-page {
670
+ .tlui-cmt-list__item-page {
671
671
  display: inline-flex;
672
672
  align-items: center;
673
673
  padding: 1px 6px;
674
674
  border-radius: 4px;
675
675
  background: var(--tl-color-muted-2);
676
676
  }
677
- .cmt-list__item-count {
677
+ .tlui-cmt-list__item-count {
678
678
  flex-shrink: 0;
679
679
  align-self: center;
680
680
  font-size: 12px;
@@ -683,70 +683,70 @@
683
683
 
684
684
  /* The comments layer is portaled into the editor container. Pins live in the canvas-in-front layer
685
685
  (beneath the UI panels at z-index 300), so the toolbar and style panel draw over them; the open
686
- thread's popover portals up to the menus layer separately (`.cmt-canvas-popover`) so it isn't
686
+ thread's popover portals up to the menus layer separately (`.tlui-cmt-canvas-popover`) so it isn't
687
687
  clipped. Click-through except on its own children. */
688
- .cmt-canvas-layer {
688
+ .tlui-cmt-canvas-layer {
689
689
  position: absolute;
690
690
  inset: 0;
691
691
  z-index: var(--tl-layer-canvas-in-front);
692
692
  pointer-events: none;
693
693
  }
694
694
 
695
- .cmt-canvas-pin,
696
- .cmt-canvas-cluster,
697
- .cmt-canvas-composer {
695
+ .tlui-cmt-canvas-pin,
696
+ .tlui-cmt-canvas-cluster,
697
+ .tlui-cmt-canvas-composer {
698
698
  position: absolute;
699
699
  }
700
700
 
701
- .cmt-canvas-pin,
702
- .cmt-canvas-composer {
701
+ .tlui-cmt-canvas-pin,
702
+ .tlui-cmt-canvas-composer {
703
703
  pointer-events: auto;
704
704
  }
705
705
 
706
706
  /* Badges are clickable (zoom to the cluster's first split). */
707
- .cmt-canvas-cluster {
707
+ .tlui-cmt-canvas-cluster {
708
708
  transform: translate(-50%, -50%);
709
709
  pointer-events: auto;
710
710
  cursor: pointer;
711
711
  }
712
712
 
713
- .cmt-cluster-fade {
713
+ .tlui-cmt-cluster-fade {
714
714
  opacity: 1;
715
715
  transition: opacity 150ms ease;
716
716
  }
717
717
 
718
- .cmt-cluster-fade--entering {
718
+ .tlui-cmt-cluster-fade--entering {
719
719
  opacity: 0;
720
720
  }
721
721
 
722
- .cmt-cluster-fade--present {
722
+ .tlui-cmt-cluster-fade--present {
723
723
  opacity: 1;
724
724
  }
725
725
 
726
- .cmt-cluster-fade--exiting {
726
+ .tlui-cmt-cluster-fade--exiting {
727
727
  opacity: 0;
728
728
  }
729
729
 
730
- .cmt-cluster-fade--entering *,
731
- .cmt-cluster-fade--exiting * {
730
+ .tlui-cmt-cluster-fade--entering *,
731
+ .tlui-cmt-cluster-fade--exiting * {
732
732
  pointer-events: none !important;
733
733
  }
734
734
 
735
735
  @media (prefers-reduced-motion: reduce) {
736
- .cmt-cluster-fade {
736
+ .tlui-cmt-cluster-fade {
737
737
  transition: none;
738
738
  }
739
739
  }
740
740
 
741
741
  /* The open thread (its pin + popover) sits above the other pins, so nearby markers don't
742
742
  overlap its popover — they tuck behind it. */
743
- .cmt-canvas-pin--open {
743
+ .tlui-cmt-canvas-pin--open {
744
744
  z-index: 1;
745
745
  }
746
746
 
747
747
  /* A region anchor's area: a dashed box under the pins, non-interactive so canvas events pass
748
748
  through. Drawn for the live drag draft and for a region thread while hovered or open. */
749
- .cmt-canvas-region {
749
+ .tlui-cmt-canvas-region {
750
750
  position: absolute;
751
751
  pointer-events: none;
752
752
  border: 2px dashed var(--tl-color-selected);
@@ -756,13 +756,13 @@
756
756
 
757
757
  /* A movable region body (the 'body'/'both' move modes): draggable to translate the whole region.
758
758
  Interactive, so it captures the interior while shown — the tradeoff of dragging the body. */
759
- .cmt-canvas-region--movable {
759
+ .tlui-cmt-canvas-region--movable {
760
760
  pointer-events: auto;
761
761
  cursor: move;
762
762
  }
763
763
 
764
764
  /* Corner resize handles on a region box (three corners; the pin corner is the move handle). */
765
- .cmt-canvas-region-handle {
765
+ .tlui-cmt-canvas-region-handle {
766
766
  position: absolute;
767
767
  width: 9px;
768
768
  height: 9px;
@@ -775,18 +775,18 @@
775
775
  }
776
776
 
777
777
  /* Centre the pin marker on its anchor point. */
778
- .cmt-canvas-pin__marker {
778
+ .tlui-cmt-canvas-pin__marker {
779
779
  width: max-content;
780
780
  transform: translate(-50%, -50%);
781
781
  cursor: grab;
782
782
  touch-action: none;
783
783
  }
784
- .cmt-canvas-pin__marker:active {
784
+ .tlui-cmt-canvas-pin__marker:active {
785
785
  cursor: grabbing;
786
786
  }
787
787
 
788
788
  /* The open thread's popover — portaled to the menus layer (above the UI), positioned at the pin. */
789
- .cmt-canvas-popover {
789
+ .tlui-cmt-canvas-popover {
790
790
  position: absolute;
791
791
  z-index: var(--tl-layer-menus);
792
792
  pointer-events: auto;
@@ -795,7 +795,7 @@
795
795
  /* The placement composer — a distinct floating view (portaled to the menus layer, below the click
796
796
  point): a pencil "draft" avatar beside a pill field that is itself the surface (no wrapping
797
797
  panel). Scoped here so the in-thread reply composer keeps its own squarer look. */
798
- .cmt-canvas-composer {
798
+ .tlui-cmt-canvas-composer {
799
799
  position: absolute;
800
800
  z-index: var(--tl-layer-menus);
801
801
  pointer-events: auto;
@@ -804,7 +804,7 @@
804
804
  placement composer a definite width or it collapses to nothing. */
805
805
  width: 280px;
806
806
  }
807
- .cmt-canvas-composer .cmt-composer__field {
807
+ .tlui-cmt-canvas-composer .tlui-cmt-composer__field {
808
808
  background: var(--tl-color-panel);
809
809
  border-color: transparent;
810
810
  border-radius: var(--tl-radius-4);
@@ -815,7 +815,7 @@
815
815
  the popover layer, so an open thread still draws over it. Sits under the top-right share panel
816
816
  (top offset clears its ~48px height) and sizes to its content, scrolling past max-height rather
817
817
  than stretching the full canvas height. */
818
- .cmt-canvas-sidebar {
818
+ .tlui-cmt-canvas-sidebar {
819
819
  position: absolute;
820
820
  top: 56px;
821
821
  right: 8px;