turbo_chat 0.2.0 → 0.3.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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -1
  3. data/README.md +178 -190
  4. data/app/assets/config/turbo_chat_manifest.js +3 -0
  5. data/app/assets/javascripts/turbo_chat/application.js +3 -0
  6. data/app/assets/javascripts/turbo_chat/invite_picker.js +19 -392
  7. data/app/assets/javascripts/turbo_chat/member_sync.js +426 -0
  8. data/app/assets/javascripts/turbo_chat/mentions.js +366 -0
  9. data/app/assets/javascripts/turbo_chat/messages.js +18 -370
  10. data/app/assets/javascripts/turbo_chat/realtime.js +3 -10
  11. data/app/assets/javascripts/turbo_chat/scroll_proxy.js +379 -0
  12. data/app/assets/javascripts/turbo_chat/shared.js +7 -383
  13. data/app/assets/stylesheets/turbo_chat/application.css +9 -1646
  14. data/app/assets/stylesheets/turbo_chat/base.css +84 -0
  15. data/app/assets/stylesheets/turbo_chat/components.css +193 -0
  16. data/app/assets/stylesheets/turbo_chat/composer.css +241 -0
  17. data/app/assets/stylesheets/turbo_chat/layout.css +307 -0
  18. data/app/assets/stylesheets/turbo_chat/members.css +264 -0
  19. data/app/assets/stylesheets/turbo_chat/menus.css +172 -0
  20. data/app/assets/stylesheets/turbo_chat/messages.css +430 -0
  21. data/app/controllers/turbo_chat/application_controller.rb +3 -7
  22. data/app/controllers/turbo_chat/chat_memberships_controller.rb +35 -1
  23. data/app/controllers/turbo_chat/chat_messages_controller.rb +4 -8
  24. data/app/controllers/turbo_chat/chats_controller.rb +10 -12
  25. data/app/helpers/turbo_chat/application_helper/config_support.rb +42 -32
  26. data/app/helpers/turbo_chat/application_helper/mention_support.rb +3 -3
  27. data/app/helpers/turbo_chat/application_helper/message_rendering.rb +24 -13
  28. data/app/models/turbo_chat/chat.rb +43 -20
  29. data/app/models/turbo_chat/chat_membership.rb +1 -1
  30. data/app/models/turbo_chat/chat_message/blocked_words_moderation.rb +9 -25
  31. data/app/models/turbo_chat/chat_message/body_length_validation.rb +1 -1
  32. data/app/models/turbo_chat/chat_message/broadcasting.rb +2 -6
  33. data/app/models/turbo_chat/chat_message/formatting.rb +3 -7
  34. data/app/models/turbo_chat/chat_message/mention_validation.rb +1 -1
  35. data/app/models/turbo_chat/chat_message/signals.rb +1 -1
  36. data/app/models/turbo_chat/chat_message.rb +3 -8
  37. data/app/views/turbo_chat/chat_messages/_form.html.erb +9 -9
  38. data/app/views/turbo_chat/chat_messages/_message.html.erb +2 -2
  39. data/app/views/turbo_chat/chat_messages/_signals.html.erb +11 -13
  40. data/app/views/turbo_chat/chat_messages/_system.html.erb +1 -1
  41. data/app/views/turbo_chat/chats/_invite_form.html.erb +1 -1
  42. data/app/views/turbo_chat/chats/_member_entries.html.erb +15 -1
  43. data/app/views/turbo_chat/chats/index.html.erb +1 -1
  44. data/app/views/turbo_chat/chats/new.html.erb +4 -7
  45. data/app/views/turbo_chat/chats/show.html.erb +29 -27
  46. data/config/routes.rb +6 -1
  47. data/db/migrate/20260325000016_add_chat_mode_to_turbo_chat_chats.rb +6 -0
  48. data/lib/generators/turbo_chat/install/templates/turbo_chat.rb +8 -0
  49. data/lib/turbo_chat/configuration/defaults.rb +21 -0
  50. data/lib/turbo_chat/configuration.rb +105 -0
  51. data/lib/turbo_chat/moderation/chat_actions.rb +2 -2
  52. data/lib/turbo_chat/moderation/member_actions.rb +2 -1
  53. data/lib/turbo_chat/moderation/support.rb +5 -9
  54. data/lib/turbo_chat/permission/support.rb +6 -2
  55. data/lib/turbo_chat/permission.rb +1 -5
  56. data/lib/turbo_chat/signals.rb +1 -1
  57. data/lib/turbo_chat/version.rb +1 -1
  58. metadata +13 -2
@@ -1,1646 +1,9 @@
1
- :root {
2
- --chat-text: #12263f;
3
- --chat-muted: #5f738a;
4
- --chat-border: #c9d5e3;
5
- --chat-border-strong: #b9c8d9;
6
- --chat-surface: #ffffff;
7
- --chat-surface-soft: #f6f9fd;
8
- --chat-primary: #1f6edc;
9
- --chat-primary-dark: #1452ac;
10
- --chat-primary-soft: #e7f1ff;
11
- --chat-mention-highlight-color: #b42318;
12
- --chat-mention-mark-background: #b4231838;
13
- --chat-danger: #b42318;
14
- --chat-danger-soft: #fff1f3;
15
- --chat-success: #1f7a40;
16
- --chat-success-soft: #ecfdf3;
17
- --chat-shadow: 0 20px 48px rgba(16, 36, 58, 0.12);
18
- }
19
-
20
- html,
21
- body {
22
- width: 100%;
23
- max-width: 100%;
24
- min-height: 100%;
25
- overflow-x: hidden;
26
- }
27
-
28
- html.chat-page-scroll-locked,
29
- body.chat-page-scroll-locked {
30
- overflow: hidden;
31
- overscroll-behavior: none;
32
- }
33
-
34
- .chat-global-scrollbar {
35
- position: fixed;
36
- top: 0;
37
- right: 0;
38
- bottom: 0;
39
- width: 14px;
40
- overflow-y: auto;
41
- overflow-x: hidden;
42
- z-index: 40;
43
- background: transparent;
44
- overscroll-behavior: none;
45
- scrollbar-width: thin;
46
- scrollbar-color: rgba(61, 94, 133, 0.42) transparent;
47
- }
48
-
49
- .chat-global-scrollbar::-webkit-scrollbar {
50
- width: 12px;
51
- }
52
-
53
- .chat-global-scrollbar::-webkit-scrollbar-track {
54
- background: transparent;
55
- }
56
-
57
- .chat-global-scrollbar::-webkit-scrollbar-thumb {
58
- border-radius: 999px;
59
- background: rgba(61, 94, 133, 0.42);
60
- border: 3px solid transparent;
61
- background-clip: content-box;
62
- }
63
-
64
- .chat-global-scrollbar-spacer {
65
- width: 1px;
66
- min-height: 100%;
67
- }
68
-
69
- .chat-global-scrollbar--hidden {
70
- opacity: 0;
71
- pointer-events: none;
72
- }
73
-
74
- body {
75
- margin: 0;
76
- min-height: 100dvh;
77
- min-height: 100svh;
78
- color: var(--chat-text);
79
- background:
80
- radial-gradient(960px circle at 0% 0%, #e6f1ff 0%, rgba(230, 241, 255, 0) 52%),
81
- radial-gradient(920px circle at 100% 0%, #fff3e8 0%, rgba(255, 243, 232, 0) 48%),
82
- linear-gradient(180deg, #f9fbff 0%, #f2f5fa 100%);
83
- font-family: "Space Grotesk", "Avenir Next", "Trebuchet MS", sans-serif;
84
- }
85
-
86
- .chat-shell {
87
- box-sizing: border-box;
88
- width: min(1080px, calc(100% - 28px));
89
- margin: 24px auto 36px;
90
- padding: clamp(16px, 2.5vw, 28px);
91
- border: 1px solid rgba(201, 213, 227, 0.85);
92
- border-radius: 24px;
93
- background: rgba(255, 255, 255, 0.82);
94
- box-shadow: var(--chat-shadow);
95
- backdrop-filter: blur(4px);
96
- }
97
-
98
- .chat-shell--closed {
99
- border-color: rgba(191, 203, 217, 0.9);
100
- }
101
-
102
- .chat-shell--style-unbounded {
103
- --chat-unbounded-side-padding: clamp(12px, 4vw, 56px);
104
- --chat-unbounded-inline-start: calc(var(--chat-unbounded-side-padding) + env(safe-area-inset-left));
105
- --chat-unbounded-inline-end: calc(var(--chat-unbounded-side-padding) + env(safe-area-inset-right));
106
- --chat-floating-composer-clearance: clamp(84px, 11vh, 120px);
107
- width: 100%;
108
- max-width: none;
109
- height: 100vh;
110
- height: 100dvh;
111
- max-height: 100vh;
112
- max-height: 100dvh;
113
- display: flex;
114
- flex-direction: column;
115
- min-height: 100vh;
116
- min-height: 100svh;
117
- min-height: 100dvh;
118
- margin: 0;
119
- padding-top: clamp(14px, 2.5vw, 28px);
120
- padding-right: var(--chat-unbounded-inline-end);
121
- padding-bottom: calc(12px + env(safe-area-inset-bottom));
122
- padding-left: var(--chat-unbounded-inline-start);
123
- border: none;
124
- border-radius: 0;
125
- background: transparent;
126
- box-shadow: none;
127
- backdrop-filter: none;
128
- overflow: hidden;
129
- }
130
-
131
- .chat-shell--style-unbounded .chat-header,
132
- .chat-shell--style-unbounded .chat-members,
133
- .chat-shell--style-unbounded .chat-invite,
134
- .chat-shell--style-unbounded .chat-banner {
135
- width: 100%;
136
- max-width: 980px;
137
- margin-left: auto;
138
- margin-right: auto;
139
- }
140
-
141
- .chat-shell--style-unbounded .chat-window {
142
- --chat-window-padding: 0px;
143
- display: flex;
144
- flex-direction: column;
145
- min-height: 0;
146
- border: none;
147
- border-radius: 0;
148
- padding: 0;
149
- background: transparent;
150
- box-shadow: none;
151
- overflow: hidden;
152
- flex: 1 1 auto;
153
- }
154
-
155
- .chat-shell--style-unbounded .chat-window::before {
156
- display: none;
157
- }
158
-
159
- .chat-shell--style-unbounded .chat-messages {
160
- min-height: 0;
161
- width: 100%;
162
- max-width: 980px;
163
- min-width: 0;
164
- flex: 1 1 auto;
165
- margin: 0 auto;
166
- max-height: calc(100dvh - var(--chat-floating-composer-clearance));
167
- padding: 6px 2px calc(8px + var(--chat-signal-offset) + var(--chat-floating-composer-clearance));
168
- scroll-padding-bottom: calc(var(--chat-floating-composer-clearance) + 12px);
169
- scrollbar-width: none;
170
- -ms-overflow-style: none;
171
- -webkit-mask-image: linear-gradient(180deg, transparent 0px, rgba(0, 0, 0, 0.55) 28px, #000 72px, #000 100%);
172
- mask-image: linear-gradient(180deg, transparent 0px, rgba(0, 0, 0, 0.55) 28px, #000 72px, #000 100%);
173
- -webkit-mask-size: 100% 100%;
174
- mask-size: 100% 100%;
175
- -webkit-mask-repeat: no-repeat;
176
- mask-repeat: no-repeat;
177
- }
178
-
179
- .chat-shell--style-unbounded .chat-messages::-webkit-scrollbar {
180
- width: 0;
181
- height: 0;
182
- }
183
-
184
- .chat-shell--style-unbounded .chat-signals {
185
- left: 50%;
186
- right: auto;
187
- width: 100%;
188
- max-width: 980px;
189
- bottom: calc(var(--chat-floating-composer-clearance) + 4px);
190
- transform: translate(-50%, 6px);
191
- }
192
-
193
- .chat-shell--style-unbounded .chat-signals--active {
194
- transform: translate(-50%, 0);
195
- }
196
-
197
- .chat-shell--style-unbounded .chat-composer {
198
- box-sizing: border-box;
199
- position: fixed;
200
- left: var(--chat-unbounded-inline-start);
201
- right: var(--chat-unbounded-inline-end);
202
- width: auto;
203
- bottom: max(12px, env(safe-area-inset-bottom), env(keyboard-inset-bottom, 0px));
204
- z-index: 20;
205
- margin: 0;
206
- background: transparent;
207
- }
208
-
209
- .chat-shell--style-unbounded .chat-composer .chat-form {
210
- width: 100%;
211
- max-width: 980px;
212
- margin-left: auto;
213
- margin-right: auto;
214
- background: transparent;
215
- }
216
-
217
- .chat-shell--style-unbounded .chat-composer-shell {
218
- border-radius: 22px;
219
- background: #ffffff;
220
- border-color: #b6cbe6;
221
- box-shadow: 0 14px 34px rgba(17, 40, 70, 0.2);
222
- backdrop-filter: blur(7px);
223
- }
224
-
225
- .chat-shell--style-unbounded .chat-composer-shell:focus-within {
226
- box-shadow: 0 0 0 3px rgba(31, 110, 220, 0.16), 0 14px 34px rgba(17, 40, 70, 0.22);
227
- }
228
-
229
- .chat-header {
230
- display: flex;
231
- justify-content: space-between;
232
- align-items: flex-start;
233
- gap: 18px;
234
- margin-bottom: 16px;
235
- }
236
-
237
- .chat-header-copy {
238
- display: flex;
239
- flex-direction: column;
240
- gap: 8px;
241
- }
242
-
243
- .chat-header-kicker {
244
- margin: 0;
245
- font-size: 11px;
246
- letter-spacing: 0.08em;
247
- text-transform: uppercase;
248
- font-weight: 700;
249
- color: var(--chat-muted);
250
- }
251
-
252
- .chat-header-title-row {
253
- display: inline-flex;
254
- align-items: center;
255
- gap: 12px;
256
- flex-wrap: wrap;
257
- }
258
-
259
- .chat-header h1 {
260
- margin: 0;
261
- font-size: clamp(30px, 3vw, 44px);
262
- line-height: 1.04;
263
- letter-spacing: -0.02em;
264
- overflow-wrap: anywhere;
265
- }
266
-
267
- .chat-status {
268
- display: inline-flex;
269
- align-items: center;
270
- border-radius: 999px;
271
- font-size: 12px;
272
- font-weight: 700;
273
- letter-spacing: 0.04em;
274
- text-transform: uppercase;
275
- padding: 5px 11px;
276
- }
277
-
278
- .chat-status--open {
279
- color: #0f6632;
280
- background: #e8f7ef;
281
- border: 1px solid #a6dfbb;
282
- }
283
-
284
- .chat-status--closed {
285
- color: #995f00;
286
- background: #fff4dd;
287
- border: 1px solid #f0cf90;
288
- }
289
-
290
- .chat-header-actions {
291
- display: inline-flex;
292
- align-items: center;
293
- justify-content: flex-end;
294
- gap: 8px;
295
- flex-wrap: wrap;
296
- }
297
-
298
- .chat-inline-form {
299
- margin: 0;
300
- }
301
-
302
- .chat-invite {
303
- margin: 0 0 14px;
304
- padding: 10px 12px;
305
- border-radius: 14px;
306
- border: 1px dashed var(--chat-border-strong);
307
- background: rgba(247, 251, 255, 0.72);
308
- }
309
-
310
- .chat-members {
311
- --chat-members-expanded-max-height: 420px;
312
- margin: 0 0 14px;
313
- padding: 10px 12px;
314
- border-radius: 14px;
315
- border: 1px solid var(--chat-border);
316
- background: rgba(247, 251, 255, 0.72);
317
- }
318
-
319
- .chat-members-panel {
320
- margin: 0;
321
- }
322
-
323
- .chat-members-summary {
324
- list-style: none;
325
- margin: 0;
326
- padding: 2px 4px;
327
- font-size: 14px;
328
- font-weight: 700;
329
- display: flex;
330
- align-items: center;
331
- justify-content: space-between;
332
- cursor: pointer;
333
- color: #1c3a5f;
334
- }
335
-
336
- .chat-members-summary::-webkit-details-marker {
337
- display: none;
338
- }
339
-
340
- .chat-members-summary::after {
341
- content: "";
342
- width: 7px;
343
- height: 7px;
344
- border-right: 2px solid #4a678a;
345
- border-bottom: 2px solid #4a678a;
346
- transform: rotate(45deg);
347
- transition: transform 120ms ease;
348
- }
349
-
350
- .chat-members-panel[open] .chat-members-summary::after {
351
- transform: rotate(225deg);
352
- }
353
-
354
- .chat-members-content {
355
- display: block;
356
- margin-top: 8px;
357
- overflow: hidden;
358
- max-height: 0;
359
- opacity: 0;
360
- transform: translateY(-3px);
361
- visibility: hidden;
362
- transition:
363
- max-height 240ms ease,
364
- opacity 180ms ease,
365
- transform 180ms ease,
366
- visibility 0s linear 240ms;
367
- }
368
-
369
- .chat-members-panel:not([open]) > .chat-members-content {
370
- display: block;
371
- }
372
-
373
- .chat-members-panel[open] > .chat-members-content {
374
- max-height: var(--chat-members-expanded-max-height);
375
- opacity: 1;
376
- transform: translateY(0);
377
- visibility: visible;
378
- transition:
379
- max-height 280ms ease,
380
- opacity 220ms ease,
381
- transform 220ms ease,
382
- visibility 0s linear 0s;
383
- }
384
-
385
- .chat-members-invite {
386
- display: flex;
387
- align-items: center;
388
- margin: 0 0 7px;
389
- padding: 7px 10px;
390
- min-height: 42px;
391
- border-radius: 10px;
392
- border: 1px solid #d9e5f2;
393
- background: #ffffff;
394
- }
395
-
396
- .chat-members-invite--hint {
397
- display: flex;
398
- align-items: center;
399
- }
400
-
401
- .chat-members-list {
402
- list-style: none;
403
- margin: 0;
404
- padding: 0;
405
- display: grid;
406
- gap: 7px;
407
- }
408
-
409
- .chat-members-list-shell {
410
- max-height: 216px;
411
- overflow-y: auto;
412
- padding-right: 2px;
413
- }
414
-
415
- .chat-members-item {
416
- display: flex;
417
- align-items: center;
418
- justify-content: space-between;
419
- gap: 10px;
420
- padding: 7px 10px;
421
- min-height: 42px;
422
- border-radius: 10px;
423
- background: #ffffff;
424
- border: 1px solid #d9e5f2;
425
- }
426
-
427
- .chat-members-item--hint {
428
- justify-content: flex-start;
429
- }
430
-
431
- .chat-members-item-main {
432
- display: inline-flex;
433
- align-items: center;
434
- gap: 8px;
435
- min-width: 0;
436
- }
437
-
438
- .chat-members-name {
439
- font-weight: 700;
440
- overflow-wrap: anywhere;
441
- }
442
-
443
- .chat-members-role {
444
- display: inline-flex;
445
- align-items: center;
446
- border-radius: 999px;
447
- border: 1px solid #d2deed;
448
- background: #edf4ff;
449
- color: #2a4e78;
450
- font-size: 12px;
451
- padding: 2px 8px;
452
- white-space: nowrap;
453
- }
454
-
455
- .chat-member-role-form {
456
- display: inline-flex;
457
- align-items: center;
458
- gap: 6px;
459
- margin: 0;
460
- min-width: 0;
461
- }
462
-
463
- .chat-member-role-form[hidden] {
464
- display: none;
465
- }
466
-
467
- .chat-member-actions {
468
- display: none;
469
- align-items: center;
470
- gap: 6px;
471
- margin-left: auto;
472
- }
473
-
474
- .chat-shell--can-manage-member-permissions .chat-member-actions {
475
- display: inline-flex;
476
- }
477
-
478
- .chat-member-manage-toggle {
479
- appearance: none;
480
- border: 1px solid #d2deed;
481
- border-radius: 8px;
482
- width: 32px;
483
- height: 32px;
484
- background: #ffffff;
485
- color: #32537f;
486
- cursor: pointer;
487
- display: inline-flex;
488
- align-items: center;
489
- justify-content: center;
490
- padding: 0;
491
- transition: background 120ms ease, border-color 120ms ease, color 120ms ease;
492
- }
493
-
494
- .chat-member-manage-toggle:hover,
495
- .chat-member-manage-toggle:focus-visible,
496
- .chat-member-manage-toggle[aria-expanded="true"] {
497
- border-color: #9bb9df;
498
- background: #edf4ff;
499
- }
500
-
501
- .chat-member-manage-toggle:disabled {
502
- cursor: not-allowed;
503
- opacity: 0.55;
504
- }
505
-
506
- @media (prefers-reduced-motion: reduce) {
507
- .chat-members-content,
508
- .chat-members-panel[open] > .chat-members-content,
509
- .chat-members-summary::after {
510
- transition: none;
511
- }
512
- }
513
-
514
- .chat-member-role-select {
515
- min-height: 32px;
516
- border: 1px solid var(--chat-border);
517
- border-radius: 8px;
518
- background: #ffffff;
519
- color: #1b324f;
520
- padding: 5px 8px;
521
- font: inherit;
522
- font-size: 12px;
523
- }
524
-
525
- .chat-member-role-submit.chat-btn--small {
526
- min-height: 32px;
527
- }
528
-
529
- .chat-hint {
530
- margin: 0;
531
- color: var(--chat-muted);
532
- font-size: 14px;
533
- }
534
-
535
- .chat-window {
536
- --chat-window-padding: 14px;
537
- --chat-signal-offset: 0px;
538
- position: relative;
539
- overflow: hidden;
540
- border: 1px solid var(--chat-border);
541
- border-radius: 18px;
542
- padding: var(--chat-window-padding);
543
- background: linear-gradient(180deg, #fbfdff 0%, #f5f9ff 100%);
544
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.95), 0 10px 24px rgba(23, 46, 77, 0.08);
545
- }
546
-
547
- .chat-window::before {
548
- content: "";
549
- position: absolute;
550
- top: 0;
551
- left: 0;
552
- right: 0;
553
- height: 58px;
554
- pointer-events: none;
555
- background: linear-gradient(180deg, rgba(251, 253, 255, 0.96) 0%, rgba(251, 253, 255, 0) 100%);
556
- z-index: 1;
557
- }
558
-
559
- .chat-messages {
560
- position: relative;
561
- z-index: 2;
562
- }
563
-
564
- .chat-messages {
565
- display: flex;
566
- flex-direction: column;
567
- gap: 12px;
568
- min-height: 220px;
569
- max-height: min(58vh, 540px);
570
- overflow-y: auto;
571
- padding: 6px 2px calc(4px + var(--chat-signal-offset));
572
- box-sizing: border-box;
573
- transition: padding-bottom 180ms ease;
574
- }
575
-
576
- .chat-bubble {
577
- min-width: 0;
578
- max-width: min(78%, 680px);
579
- background: var(--chat-bubble-bg, #ffffff);
580
- border-radius: 16px 16px 16px 8px;
581
- padding: 12px 14px 10px;
582
- border: 1px solid var(--chat-bubble-border, #d4deea);
583
- box-shadow: 0 8px 18px rgba(18, 38, 63, 0.08);
584
- }
585
-
586
- .chat-bubble--own {
587
- margin-left: auto;
588
- background: var(--chat-bubble-bg, #e4f1ff);
589
- border-color: var(--chat-bubble-border, #9bc9ff);
590
- border-radius: 16px 16px 8px 16px;
591
- }
592
-
593
- .chat-system-message {
594
- align-self: center;
595
- display: inline-flex;
596
- align-items: center;
597
- gap: 8px;
598
- max-width: min(92%, 720px);
599
- padding: 4px 10px;
600
- border-radius: 999px;
601
- border: 1px solid #d6e0ec;
602
- background: rgba(244, 248, 253, 0.9);
603
- color: #60758d;
604
- font-size: 12px;
605
- line-height: 1.3;
606
- }
607
-
608
- .chat-system-message__body {
609
- margin: 0;
610
- }
611
-
612
- .chat-system-message__timestamp {
613
- font-variant-numeric: tabular-nums;
614
- white-space: nowrap;
615
- }
616
-
617
- .chat-meta {
618
- display: flex;
619
- align-items: center;
620
- gap: 8px;
621
- flex-wrap: wrap;
622
- font-size: 12px;
623
- color: var(--chat-muted);
624
- margin-bottom: 6px;
625
- min-width: 0;
626
- }
627
-
628
- .chat-meta__author {
629
- color: #1b324f;
630
- font-weight: 700;
631
- letter-spacing: 0.01em;
632
- min-width: 0;
633
- overflow-wrap: anywhere;
634
- }
635
-
636
- .chat-meta__role {
637
- display: inline-flex;
638
- align-items: center;
639
- border: 1px solid #a8bad0;
640
- border-radius: 999px;
641
- padding: 1px 7px;
642
- font-size: 10px;
643
- letter-spacing: 0.05em;
644
- text-transform: uppercase;
645
- background: #f4f8fd;
646
- }
647
-
648
- .chat-meta__source {
649
- display: inline-flex;
650
- align-items: center;
651
- border: 1px solid #c6d5e7;
652
- border-radius: 999px;
653
- padding: 1px 7px;
654
- font-size: 10px;
655
- font-weight: 700;
656
- letter-spacing: 0.05em;
657
- text-transform: uppercase;
658
- background: #edf3fb;
659
- color: #35506f;
660
- }
661
-
662
- .chat-meta__timestamp {
663
- margin-left: auto;
664
- font-variant-numeric: tabular-nums;
665
- white-space: nowrap;
666
- }
667
-
668
- .chat-meta__edited {
669
- display: inline-flex;
670
- align-items: center;
671
- padding: 1px 6px;
672
- border-radius: 999px;
673
- border: 1px solid #d6e0ec;
674
- background: #f4f8fd;
675
- color: #60758d;
676
- font-size: 11px;
677
- text-transform: lowercase;
678
- }
679
-
680
- .chat-body {
681
- margin: 0;
682
- font-size: 16px;
683
- line-height: 1.45;
684
- color: #12263f;
685
- word-break: break-word;
686
- overflow-wrap: anywhere;
687
- }
688
-
689
- .chat-body p {
690
- margin: 0 0 8px;
691
- }
692
-
693
- .chat-body p:last-child {
694
- margin-bottom: 0;
695
- }
696
-
697
- .chat-body pre {
698
- max-width: 100%;
699
- overflow-x: auto;
700
- }
701
-
702
- .chat-body img,
703
- .chat-body video,
704
- .chat-body table {
705
- max-width: 100%;
706
- height: auto;
707
- }
708
-
709
- .chat-body table {
710
- display: block;
711
- width: 100%;
712
- overflow-x: auto;
713
- }
714
-
715
- .chat-mention {
716
- color: var(--chat-primary);
717
- font-weight: 700;
718
- }
719
-
720
- .chat-mention--targeted {
721
- background: var(--chat-mention-mark-background);
722
- border-radius: 4px;
723
- padding: 0 3px;
724
- box-decoration-break: clone;
725
- -webkit-box-decoration-break: clone;
726
- }
727
-
728
- .chat-message-actions {
729
- margin-top: 8px;
730
- display: flex;
731
- justify-content: flex-end;
732
- opacity: 0;
733
- transform: translateY(2px);
734
- transition: opacity 150ms ease, transform 150ms ease;
735
- pointer-events: none;
736
- }
737
-
738
- .chat-bubble:hover .chat-message-actions,
739
- .chat-bubble:focus-within .chat-message-actions,
740
- .chat-bubble--editing .chat-message-actions {
741
- opacity: 1;
742
- transform: translateY(0);
743
- pointer-events: auto;
744
- }
745
-
746
- .chat-message-action {
747
- font-size: 11px;
748
- line-height: 1.2;
749
- border: 1px solid #c9d6e6;
750
- background: #f5f9ff;
751
- border-radius: 999px;
752
- padding: 3px 9px;
753
- margin: 0;
754
- color: var(--chat-primary-dark);
755
- text-decoration: none;
756
- cursor: pointer;
757
- }
758
-
759
- .chat-message-action:hover {
760
- background: #e6f0ff;
761
- }
762
-
763
- .chat-message-edit {
764
- margin-top: 10px;
765
- padding-top: 10px;
766
- border-top: 1px dashed #c5d3e3;
767
- }
768
-
769
- .chat-inline-edit-form {
770
- display: flex;
771
- flex-direction: column;
772
- gap: 8px;
773
- }
774
-
775
- .chat-inline-edit-field {
776
- position: relative;
777
- }
778
-
779
- .chat-inline-edit-form textarea {
780
- width: 100%;
781
- min-height: 96px;
782
- resize: vertical;
783
- }
784
-
785
- .chat-inline-edit-actions {
786
- display: flex;
787
- justify-content: flex-end;
788
- gap: 8px;
789
- }
790
-
791
- .chat-inline-edit-error {
792
- margin: 0 0 8px;
793
- color: var(--chat-danger);
794
- font-size: 12px;
795
- }
796
-
797
- .chat-signal-entry {
798
- font-size: 12px;
799
- color: var(--chat-muted);
800
- }
801
-
802
- .chat-signals {
803
- position: absolute;
804
- left: var(--chat-window-padding);
805
- right: var(--chat-window-padding);
806
- bottom: var(--chat-window-padding);
807
- z-index: 3;
808
- max-height: 0;
809
- opacity: 0;
810
- overflow: hidden;
811
- pointer-events: none;
812
- transform: translateY(6px);
813
- transition: max-height 180ms ease, opacity 180ms ease, transform 180ms ease;
814
- }
815
-
816
- .chat-signals--active {
817
- max-height: 120px;
818
- opacity: 1;
819
- transform: translateY(0);
820
- }
821
-
822
- .chat-typing-indicator {
823
- display: inline-flex;
824
- align-items: center;
825
- gap: 9px;
826
- font-size: 12px;
827
- color: var(--chat-muted);
828
- background: #edf3fb;
829
- border: 1px solid #d2deed;
830
- border-radius: 999px;
831
- padding: 6px 12px;
832
- overflow: hidden;
833
- max-height: 34px;
834
- opacity: 1;
835
- transform: translateY(0);
836
- transition: max-height 180ms ease, opacity 180ms ease, transform 180ms ease, padding 180ms ease;
837
- }
838
-
839
- .chat-typing-indicator--leaving {
840
- max-height: 0;
841
- opacity: 0;
842
- padding: 0;
843
- transform: translateY(-4px);
844
- }
845
-
846
- .chat-dots {
847
- display: inline-flex;
848
- gap: 3px;
849
- }
850
-
851
- .chat-signal-text {
852
- display: inline-block;
853
- max-width: 320px;
854
- overflow: hidden;
855
- text-overflow: ellipsis;
856
- white-space: nowrap;
857
- }
858
-
859
- .chat-signal-text--sheen {
860
- display: inline-flex;
861
- align-items: center;
862
- min-width: 0;
863
- color: #4b6683;
864
- font-weight: 600;
865
- }
866
-
867
- .chat-signal-text--sheen::before,
868
- .chat-signal-text--sheen::after {
869
- color: #5f738a;
870
- font-weight: 600;
871
- }
872
-
873
- .chat-signal-text--sheen::before {
874
- content: "[";
875
- }
876
-
877
- .chat-signal-text--sheen::after {
878
- content: "]";
879
- }
880
-
881
- .chat-signal-text-sheen {
882
- display: inline-block;
883
- max-width: 100%;
884
- padding: 1px 2px;
885
- border-radius: 4px;
886
- background: linear-gradient(
887
- 100deg,
888
- rgba(181, 204, 230, 0.28) 0%,
889
- rgba(232, 243, 255, 0.75) 45%,
890
- rgba(181, 204, 230, 0.28) 100%
891
- );
892
- background-size: 220% 100%;
893
- animation: chat-signal-sheen 2.4s linear infinite;
894
- }
895
-
896
- @keyframes chat-signal-sheen {
897
- 0% {
898
- background-position: 210% 0;
899
- }
900
- 100% {
901
- background-position: -10% 0;
902
- }
903
- }
904
-
905
- @media (prefers-reduced-motion: reduce) {
906
- .chat-signal-text-sheen {
907
- animation: none;
908
- }
909
- }
910
-
911
- .chat-dots i {
912
- width: 6px;
913
- height: 6px;
914
- border-radius: 999px;
915
- background: var(--chat-muted);
916
- animation: chat-bounce 1.1s infinite ease-in-out;
917
- }
918
-
919
- .chat-dots i:nth-child(2) {
920
- animation-delay: 0.15s;
921
- }
922
-
923
- .chat-dots i:nth-child(3) {
924
- animation-delay: 0.3s;
925
- }
926
-
927
- @keyframes chat-bounce {
928
- 0%,
929
- 80%,
930
- 100% {
931
- transform: translateY(0);
932
- opacity: 0.45;
933
- }
934
- 40% {
935
- transform: translateY(-4px);
936
- opacity: 1;
937
- }
938
- }
939
-
940
- .chat-composer {
941
- margin-top: 14px;
942
- position: relative;
943
- }
944
-
945
- .chat-form {
946
- display: flex;
947
- gap: 9px;
948
- }
949
-
950
- .chat-form textarea,
951
- .chat-form select,
952
- .chat-form input[type="search"],
953
- .chat-field input,
954
- .chat-inline-edit-form textarea {
955
- width: 100%;
956
- border: 1px solid var(--chat-border);
957
- border-radius: 12px;
958
- padding: 10px 12px;
959
- font: inherit;
960
- color: var(--chat-text);
961
- background: #ffffff;
962
- box-sizing: border-box;
963
- }
964
-
965
- .chat-form textarea:focus,
966
- .chat-form select:focus,
967
- .chat-form input[type="search"]:focus,
968
- .chat-field input:focus,
969
- .chat-inline-edit-form textarea:focus {
970
- border-color: #87b6f7;
971
- outline: none;
972
- box-shadow: 0 0 0 3px rgba(31, 110, 220, 0.16);
973
- }
974
-
975
- .chat-composer .chat-form {
976
- align-items: stretch;
977
- gap: 0;
978
- }
979
-
980
- .chat-composer-shell {
981
- flex: 1 1 auto;
982
- display: flex;
983
- align-items: flex-end;
984
- gap: 10px;
985
- border: 1px solid #c8d8ea;
986
- border-radius: 28px;
987
- background: #ffffff;
988
- padding: 8px 10px;
989
- box-shadow: 0 10px 26px rgba(20, 52, 92, 0.1);
990
- transition: border-color 120ms ease, box-shadow 120ms ease;
991
- }
992
-
993
- .chat-composer-shell:focus-within {
994
- border-color: #7daee7;
995
- box-shadow: 0 0 0 3px rgba(31, 110, 220, 0.12), 0 10px 26px rgba(20, 52, 92, 0.12);
996
- }
997
-
998
- .chat-composer .chat-composer-input {
999
- flex: 1 1 auto;
1000
- min-width: 0;
1001
- width: 100%;
1002
- min-height: 24px;
1003
- max-height: 210px;
1004
- border: none;
1005
- border-radius: 0;
1006
- box-shadow: none;
1007
- resize: none;
1008
- padding: 6px 2px;
1009
- margin: 0;
1010
- background: transparent;
1011
- overflow-y: hidden;
1012
- line-height: 1.35;
1013
- }
1014
-
1015
- .chat-composer-shell--no-leading-tool .chat-composer-input {
1016
- padding-left: 10px;
1017
- padding-top: 5px;
1018
- padding-bottom: 7px;
1019
- }
1020
-
1021
- .chat-composer .chat-composer-input:focus {
1022
- border: none;
1023
- outline: none;
1024
- box-shadow: none;
1025
- }
1026
-
1027
- .chat-composer-tool {
1028
- appearance: none;
1029
- display: inline-flex;
1030
- align-items: center;
1031
- justify-content: center;
1032
- flex: 0 0 auto;
1033
- width: 38px;
1034
- height: 38px;
1035
- border-radius: 999px;
1036
- border: 1px solid #d2deed;
1037
- background: #ffffff;
1038
- color: #254569;
1039
- font: inherit;
1040
- font-size: 34px;
1041
- line-height: 1;
1042
- padding: 0;
1043
- cursor: pointer;
1044
- }
1045
-
1046
- .chat-composer-tool:hover {
1047
- background: #f3f8ff;
1048
- border-color: #b8cae1;
1049
- }
1050
-
1051
- .chat-composer-tool:focus-visible {
1052
- outline: none;
1053
- box-shadow: 0 0 0 3px rgba(31, 110, 220, 0.18);
1054
- }
1055
-
1056
- .chat-composer-tool:disabled {
1057
- cursor: not-allowed;
1058
- opacity: 0.52;
1059
- }
1060
-
1061
- .chat-composer-tool:disabled:hover {
1062
- background: #ffffff;
1063
- border-color: #d2deed;
1064
- }
1065
-
1066
- .chat-composer-tool--add {
1067
- transform: translateY(1px);
1068
- }
1069
-
1070
- .chat-composer-tool--voice {
1071
- font-size: 0;
1072
- }
1073
-
1074
- .chat-composer-mic {
1075
- position: relative;
1076
- width: 11px;
1077
- height: 14px;
1078
- border: 2px solid currentColor;
1079
- border-radius: 999px;
1080
- box-sizing: border-box;
1081
- }
1082
-
1083
- .chat-composer-mic::before {
1084
- content: "";
1085
- position: absolute;
1086
- left: 50%;
1087
- transform: translateX(-50%);
1088
- bottom: -6px;
1089
- width: 2px;
1090
- height: 4px;
1091
- background: currentColor;
1092
- }
1093
-
1094
- .chat-composer-mic::after {
1095
- content: "";
1096
- position: absolute;
1097
- left: 50%;
1098
- transform: translateX(-50%);
1099
- bottom: -8px;
1100
- width: 10px;
1101
- height: 5px;
1102
- border: 2px solid currentColor;
1103
- border-top: none;
1104
- border-bottom-left-radius: 6px;
1105
- border-bottom-right-radius: 6px;
1106
- box-sizing: border-box;
1107
- }
1108
-
1109
- .chat-composer-submit {
1110
- min-width: 38px;
1111
- width: 38px;
1112
- height: 38px;
1113
- padding: 0;
1114
- border-radius: 999px;
1115
- }
1116
-
1117
- .chat-composer-send-icon {
1118
- width: 18px;
1119
- height: 18px;
1120
- display: block;
1121
- }
1122
-
1123
- .chat-composer-send-icon path {
1124
- fill: none;
1125
- stroke: currentColor;
1126
- stroke-width: 2.2;
1127
- stroke-linecap: round;
1128
- stroke-linejoin: round;
1129
- }
1130
-
1131
- .chat-visually-hidden {
1132
- position: absolute;
1133
- width: 1px;
1134
- height: 1px;
1135
- padding: 0;
1136
- margin: -1px;
1137
- overflow: hidden;
1138
- clip: rect(0, 0, 0, 0);
1139
- white-space: nowrap;
1140
- border: 0;
1141
- }
1142
-
1143
- .chat-form--invite {
1144
- align-items: center;
1145
- width: 100%;
1146
- gap: 10px;
1147
- flex-wrap: nowrap;
1148
- }
1149
-
1150
- .chat-form--invite .chat-btn--small {
1151
- align-self: center;
1152
- min-height: 42px;
1153
- padding-top: 0;
1154
- padding-bottom: 0;
1155
- }
1156
-
1157
- .chat-invite-picker {
1158
- flex: 1 1 auto;
1159
- min-width: 0;
1160
- position: relative;
1161
- }
1162
-
1163
- .chat-invite-search {
1164
- width: 100%;
1165
- }
1166
-
1167
- .chat-invite-menu {
1168
- position: absolute;
1169
- left: 0;
1170
- right: 0;
1171
- top: calc(100% + 8px);
1172
- z-index: 8;
1173
- border: 1px solid var(--chat-border);
1174
- border-radius: 12px;
1175
- background: #ffffff;
1176
- box-shadow: 0 12px 26px rgba(31, 35, 40, 0.15);
1177
- overflow: hidden;
1178
- max-height: 240px;
1179
- overflow-y: auto;
1180
- }
1181
-
1182
- .chat-invite-item {
1183
- width: 100%;
1184
- text-align: left;
1185
- border: none;
1186
- background: #ffffff;
1187
- color: #233a55;
1188
- cursor: pointer;
1189
- display: block;
1190
- padding: 10px 12px;
1191
- font: inherit;
1192
- }
1193
-
1194
- .chat-invite-item:hover,
1195
- .chat-invite-item--active {
1196
- background: #edf4ff;
1197
- }
1198
-
1199
- .chat-hint--invite-search {
1200
- margin-top: 6px;
1201
- font-size: 12px;
1202
- }
1203
-
1204
- .chat-members-invite .chat-form--invite {
1205
- display: grid;
1206
- grid-template-columns: minmax(0, 1fr) auto;
1207
- align-items: center;
1208
- gap: 8px;
1209
- width: 100%;
1210
- margin: 0;
1211
- }
1212
-
1213
- .chat-members-invite:focus-within {
1214
- border-color: #7daee7;
1215
- box-shadow: 0 0 0 3px rgba(31, 110, 220, 0.12);
1216
- }
1217
-
1218
- .chat-members-invite .chat-invite-picker {
1219
- display: flex;
1220
- align-items: center;
1221
- min-height: 34px;
1222
- }
1223
-
1224
- .chat-members-invite .chat-form input.chat-invite-search[type="search"] {
1225
- border: none;
1226
- border-radius: 0;
1227
- height: 34px;
1228
- min-height: 34px;
1229
- padding: 0;
1230
- box-sizing: border-box;
1231
- display: block;
1232
- line-height: 34px;
1233
- font-weight: 700;
1234
- background: transparent;
1235
- box-shadow: none;
1236
- }
1237
-
1238
- .chat-members-invite .chat-form input.chat-invite-search[type="search"]::placeholder {
1239
- color: var(--chat-muted);
1240
- font-weight: 500;
1241
- }
1242
-
1243
- .chat-members-invite .chat-form input.chat-invite-search[type="search"]:focus {
1244
- border: none;
1245
- outline: none;
1246
- box-shadow: none;
1247
- }
1248
-
1249
- .chat-members-invite .chat-btn {
1250
- box-shadow: none;
1251
- }
1252
-
1253
- .chat-members-invite .chat-btn--small {
1254
- height: 34px;
1255
- min-height: 34px;
1256
- padding-top: 0;
1257
- padding-bottom: 0;
1258
- }
1259
-
1260
- .chat-members-invite .chat-btn:hover,
1261
- .chat-members-invite .chat-btn:focus-visible {
1262
- transform: none;
1263
- box-shadow: none;
1264
- }
1265
-
1266
- .chat-form--hidden {
1267
- display: none;
1268
- }
1269
-
1270
- .chat-mentions-menu {
1271
- position: absolute;
1272
- left: 0;
1273
- right: 0;
1274
- bottom: calc(100% + 8px);
1275
- z-index: 6;
1276
- border: 1px solid var(--chat-border);
1277
- border-radius: 12px;
1278
- background: #ffffff;
1279
- box-shadow: 0 12px 26px rgba(31, 35, 40, 0.15);
1280
- overflow: hidden;
1281
- }
1282
-
1283
- .chat-mentions-menu--inline-edit {
1284
- z-index: 5;
1285
- }
1286
-
1287
- .chat-mentions-item {
1288
- width: 100%;
1289
- text-align: left;
1290
- border: none;
1291
- background: #ffffff;
1292
- color: #233a55;
1293
- cursor: pointer;
1294
- display: flex;
1295
- align-items: center;
1296
- gap: 10px;
1297
- padding: 9px 11px;
1298
- }
1299
-
1300
- .chat-mentions-item:hover,
1301
- .chat-mentions-item--active {
1302
- background: #edf4ff;
1303
- }
1304
-
1305
- .chat-mentions-item__token {
1306
- font-family: "IBM Plex Mono", "Fira Mono", "Menlo", monospace;
1307
- font-weight: 700;
1308
- color: var(--chat-primary-dark);
1309
- }
1310
-
1311
- .chat-mentions-item__label {
1312
- color: var(--chat-muted);
1313
- font-size: 12px;
1314
- }
1315
-
1316
- .chat-btn {
1317
- appearance: none;
1318
- border: 1px solid transparent;
1319
- border-radius: 12px;
1320
- padding: 9px 16px;
1321
- background: linear-gradient(135deg, var(--chat-primary) 0%, var(--chat-primary-dark) 100%);
1322
- color: #ffffff;
1323
- font: inherit;
1324
- font-weight: 700;
1325
- line-height: 1.2;
1326
- text-decoration: none;
1327
- cursor: pointer;
1328
- display: inline-flex;
1329
- align-items: center;
1330
- justify-content: center;
1331
- transition: transform 140ms ease, box-shadow 140ms ease, background 140ms ease, border-color 140ms ease, color 140ms ease;
1332
- box-shadow: 0 8px 16px rgba(20, 82, 172, 0.3);
1333
- }
1334
-
1335
- .chat-btn:hover {
1336
- transform: translateY(-1px);
1337
- box-shadow: 0 10px 18px rgba(20, 82, 172, 0.34);
1338
- }
1339
-
1340
- .chat-btn:active {
1341
- transform: translateY(0);
1342
- }
1343
-
1344
- .chat-btn:focus-visible {
1345
- outline: none;
1346
- box-shadow: 0 0 0 3px rgba(31, 110, 220, 0.23), 0 8px 16px rgba(20, 82, 172, 0.3);
1347
- }
1348
-
1349
- .chat-btn:disabled {
1350
- opacity: 0.56;
1351
- cursor: not-allowed;
1352
- transform: none;
1353
- }
1354
-
1355
- .chat-btn--small {
1356
- border-radius: 10px;
1357
- padding: 7px 11px;
1358
- font-size: 13px;
1359
- }
1360
-
1361
- .chat-btn--ghost {
1362
- background: #ffffff;
1363
- border-color: var(--chat-border);
1364
- color: var(--chat-text);
1365
- box-shadow: none;
1366
- }
1367
-
1368
- .chat-btn--ghost:hover {
1369
- background: #f5f8fc;
1370
- border-color: #b7c8dd;
1371
- box-shadow: none;
1372
- }
1373
-
1374
- .chat-btn--danger {
1375
- background: var(--chat-danger-soft);
1376
- border-color: #f0bcc3;
1377
- color: var(--chat-danger);
1378
- box-shadow: none;
1379
- }
1380
-
1381
- .chat-btn--danger:hover {
1382
- background: #ffe6ea;
1383
- border-color: #e7a4ad;
1384
- color: #9f1d12;
1385
- box-shadow: none;
1386
- }
1387
-
1388
- .chat-btn--success {
1389
- background: var(--chat-success-soft);
1390
- border-color: #a8dfbc;
1391
- color: var(--chat-success);
1392
- box-shadow: none;
1393
- }
1394
-
1395
- .chat-btn--success:hover {
1396
- background: #ddf9e7;
1397
- border-color: #8fd2a8;
1398
- color: #1a6535;
1399
- box-shadow: none;
1400
- }
1401
-
1402
- .chat-btn--send {
1403
- min-width: 38px;
1404
- min-height: 38px;
1405
- padding: 0;
1406
- border-radius: 999px;
1407
- box-shadow: 0 6px 16px rgba(20, 82, 172, 0.26);
1408
- }
1409
-
1410
- .chat-banner {
1411
- margin: 14px 0 0;
1412
- padding: 11px 12px;
1413
- border-radius: 12px;
1414
- font-size: 14px;
1415
- }
1416
-
1417
- .chat-banner--muted {
1418
- color: #7b5a00;
1419
- border: 1px solid #efd08f;
1420
- background: #fff8e6;
1421
- }
1422
-
1423
- .chat-list {
1424
- list-style: none;
1425
- margin: 0;
1426
- padding: 0;
1427
- }
1428
-
1429
- .chat-invitations {
1430
- margin: 0 0 16px;
1431
- }
1432
-
1433
- .chat-invitations h2,
1434
- .chat-joined h2 {
1435
- margin: 0 0 9px;
1436
- font-size: 16px;
1437
- }
1438
-
1439
- .chat-list-item--invitation {
1440
- display: flex;
1441
- align-items: center;
1442
- justify-content: space-between;
1443
- gap: 10px;
1444
- padding: 11px 13px;
1445
- border: 1px solid var(--chat-border);
1446
- border-radius: 12px;
1447
- margin-bottom: 8px;
1448
- background: #ffffff;
1449
- }
1450
-
1451
- .chat-list-item--chat {
1452
- margin-bottom: 8px;
1453
- }
1454
-
1455
- .chat-list-title {
1456
- font-weight: 700;
1457
- }
1458
-
1459
- .chat-list-actions {
1460
- display: inline-flex;
1461
- align-items: center;
1462
- gap: 8px;
1463
- flex-wrap: wrap;
1464
- }
1465
-
1466
- .chat-list-link {
1467
- display: flex;
1468
- align-items: center;
1469
- justify-content: space-between;
1470
- gap: 12px;
1471
- padding: 11px 13px;
1472
- border: 1px solid var(--chat-border);
1473
- border-radius: 12px;
1474
- text-decoration: none;
1475
- color: var(--chat-text);
1476
- background: #ffffff;
1477
- transition: border-color 120ms ease, box-shadow 120ms ease, transform 120ms ease;
1478
- }
1479
-
1480
- .chat-list-meta {
1481
- color: var(--chat-muted);
1482
- font-size: 13px;
1483
- white-space: nowrap;
1484
- }
1485
-
1486
- .chat-list-link:hover {
1487
- border-color: #a8bfdc;
1488
- box-shadow: 0 8px 18px rgba(22, 55, 95, 0.08);
1489
- transform: translateY(-1px);
1490
- }
1491
-
1492
- @media (max-width: 900px) {
1493
- .chat-shell {
1494
- width: min(1080px, calc(100% - 16px));
1495
- margin: 12px auto 22px;
1496
- border-radius: 18px;
1497
- }
1498
-
1499
- .chat-shell--style-unbounded {
1500
- width: 100%;
1501
- margin: 0;
1502
- border-radius: 0;
1503
- }
1504
-
1505
- .chat-header {
1506
- flex-direction: column;
1507
- }
1508
-
1509
- .chat-header-actions {
1510
- width: 100%;
1511
- justify-content: flex-start;
1512
- }
1513
-
1514
- .chat-messages {
1515
- min-height: 190px;
1516
- }
1517
-
1518
- .chat-bubble {
1519
- max-width: 90%;
1520
- }
1521
- }
1522
-
1523
- @media (max-width: 640px) {
1524
- .chat-shell {
1525
- padding: 14px;
1526
- }
1527
-
1528
- .chat-shell--style-unbounded {
1529
- --chat-unbounded-side-padding: 10px;
1530
- --chat-floating-composer-clearance: clamp(74px, 10vh, 108px);
1531
- padding-top: 12px;
1532
- padding-right: var(--chat-unbounded-inline-end);
1533
- padding-bottom: calc(8px + env(safe-area-inset-bottom));
1534
- padding-left: var(--chat-unbounded-inline-start);
1535
- height: 100vh;
1536
- height: 100svh;
1537
- height: 100dvh;
1538
- max-height: 100vh;
1539
- max-height: 100svh;
1540
- max-height: 100dvh;
1541
- overflow: hidden;
1542
- }
1543
-
1544
- .chat-members-list-shell {
1545
- max-height: 188px;
1546
- }
1547
-
1548
- .chat-shell--can-manage-member-permissions .chat-members-item {
1549
- align-items: flex-start;
1550
- flex-direction: column;
1551
- }
1552
-
1553
- .chat-shell--can-manage-member-permissions .chat-member-actions {
1554
- width: 100%;
1555
- }
1556
-
1557
- .chat-shell--can-manage-member-permissions .chat-member-role-form {
1558
- width: 100%;
1559
- }
1560
-
1561
- .chat-shell--can-manage-member-permissions .chat-member-role-select {
1562
- flex: 1 1 auto;
1563
- min-width: 0;
1564
- }
1565
-
1566
- .chat-window {
1567
- --chat-window-padding: 11px;
1568
- padding: var(--chat-window-padding);
1569
- }
1570
-
1571
- .chat-shell--style-unbounded .chat-window {
1572
- --chat-window-padding: 0px;
1573
- display: flex;
1574
- flex-direction: column;
1575
- padding: 0;
1576
- min-height: 0;
1577
- }
1578
-
1579
- .chat-shell--style-unbounded .chat-messages {
1580
- min-height: 0;
1581
- max-height: calc(100dvh - var(--chat-floating-composer-clearance));
1582
- }
1583
-
1584
- .chat-bubble {
1585
- max-width: 100%;
1586
- }
1587
-
1588
- .chat-meta__timestamp {
1589
- margin-left: 0;
1590
- width: 100%;
1591
- }
1592
-
1593
- .chat-composer-shell {
1594
- border-radius: 22px;
1595
- gap: 8px;
1596
- padding: 7px 8px;
1597
- }
1598
-
1599
- .chat-shell--style-unbounded .chat-composer {
1600
- bottom: max(8px, env(safe-area-inset-bottom), env(keyboard-inset-bottom, 0px));
1601
- }
1602
-
1603
- .chat-shell--style-unbounded .chat-composer-shell {
1604
- border-radius: 18px;
1605
- }
1606
-
1607
- .chat-composer .chat-composer-input {
1608
- min-height: 22px;
1609
- padding-top: 5px;
1610
- padding-bottom: 5px;
1611
- }
1612
-
1613
- .chat-composer-tool {
1614
- width: 34px;
1615
- height: 34px;
1616
- font-size: 30px;
1617
- }
1618
-
1619
- .chat-composer-mic {
1620
- width: 10px;
1621
- height: 13px;
1622
- }
1623
-
1624
- .chat-composer-submit {
1625
- min-width: 34px;
1626
- width: 34px;
1627
- height: 34px;
1628
- }
1629
-
1630
- .chat-composer-send-icon {
1631
- width: 16px;
1632
- height: 16px;
1633
- }
1634
-
1635
- .chat-list-item--invitation {
1636
- flex-wrap: wrap;
1637
- }
1638
-
1639
- .chat-inline-edit-actions {
1640
- justify-content: stretch;
1641
- }
1642
-
1643
- .chat-inline-edit-actions .chat-btn {
1644
- flex: 1 1 0;
1645
- }
1646
- }
1
+ /*
2
+ *= require turbo_chat/base
3
+ *= require turbo_chat/layout
4
+ *= require turbo_chat/members
5
+ *= require turbo_chat/messages
6
+ *= require turbo_chat/composer
7
+ *= require turbo_chat/menus
8
+ *= require turbo_chat/components
9
+ */