@adatechnology/conversations-ui 0.1.0-rc.8 → 0.1.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 (132) hide show
  1. package/dist/ConversationSimulatorPanel--5fIzXWY.d.ts +804 -0
  2. package/dist/chunk-BJNRLLDO.js +2708 -0
  3. package/dist/chunk-DKPXKQGC.js +110 -0
  4. package/dist/{chunk-OGRRHQQW.js → chunk-WCBDXZ3X.js} +68 -4
  5. package/dist/flows/index.d.ts +422 -5
  6. package/dist/flows/index.js +2502 -678
  7. package/dist/index.d.ts +921 -17
  8. package/dist/index.js +3677 -678
  9. package/dist/preview/index.d.ts +62 -105
  10. package/dist/preview/index.js +162 -284
  11. package/dist/styles.css +893 -0
  12. package/package.json +9 -8
  13. package/src/AudioPlayer.tsx +8 -0
  14. package/src/AudioRecorderButton.test.tsx +30 -0
  15. package/src/AudioRecorderButton.tsx +248 -0
  16. package/src/AudioTranscription.test.tsx +115 -0
  17. package/src/AudioTranscription.tsx +252 -0
  18. package/src/Avatar.tsx +1 -1
  19. package/src/ConversationContextPanel.tsx +218 -44
  20. package/src/ConversationDocumentsPanel.tsx +11 -6
  21. package/src/ConversationHeader.test.tsx +66 -0
  22. package/src/ConversationHeader.tsx +147 -47
  23. package/src/ConversationListItem.tsx +8 -6
  24. package/src/ConversationLocalesProvider.tsx +28 -0
  25. package/src/ConversationRow.tsx +53 -7
  26. package/src/DarkModeToggle.test.tsx +76 -0
  27. package/src/DarkModeToggle.tsx +92 -0
  28. package/src/DocumentsLibrary.tsx +67 -7
  29. package/src/EmojiPicker.tsx +2 -1
  30. package/src/InteractiveMessage.tsx +3 -0
  31. package/src/Lightbox.tsx +1 -1
  32. package/src/MediaRenderer.tsx +88 -15
  33. package/src/MessageBubble.test.tsx +41 -0
  34. package/src/MessageBubble.tsx +47 -5
  35. package/src/MessageComposer.test.tsx +35 -0
  36. package/src/MessageComposer.tsx +122 -17
  37. package/src/MessageText.tsx +2 -1
  38. package/src/MessageTimestamp.tsx +2 -1
  39. package/src/RichMessageComposer.test.tsx +113 -0
  40. package/src/RichMessageComposer.tsx +551 -0
  41. package/src/SimpleEmojiPicker.tsx +5 -3
  42. package/src/StatusTicks.tsx +1 -1
  43. package/src/Toast.tsx +4 -0
  44. package/src/Tooltip.test.ts +42 -0
  45. package/src/Tooltip.tsx +167 -0
  46. package/src/Wallpaper.test.tsx +21 -0
  47. package/src/Wallpaper.tsx +67 -7
  48. package/src/WhatsAppMessageEditor.tsx +10 -7
  49. package/src/WindowExpiredNotice.tsx +12 -4
  50. package/src/{preview/audioRecorderFormat.test.ts → audioRecorderFormat.test.ts} +1 -1
  51. package/src/buildOutput.test.ts +79 -0
  52. package/src/composer.constant.ts +33 -0
  53. package/src/conversationTranscript.test.ts +57 -0
  54. package/src/conversationTranscript.ts +29 -4
  55. package/src/conversationWindow.ts +7 -5
  56. package/src/documentTypeLabel.test.ts +57 -0
  57. package/src/documents/DocumentsWorkspace.tsx +550 -0
  58. package/src/documents/index.ts +8 -0
  59. package/src/documents/labels.ts +92 -0
  60. package/src/flows/FlowConnectionEdge.tsx +104 -0
  61. package/src/flows/FlowGroupHeader.tsx +12 -2
  62. package/src/flows/FlowLegend.tsx +125 -0
  63. package/src/flows/FlowMapCanvas.tsx +15 -12
  64. package/src/flows/FlowMapNode.tsx +4 -1
  65. package/src/flows/FlowNodeCard.tsx +219 -34
  66. package/src/flows/FlowNodePanel.tsx +153 -39
  67. package/src/flows/FlowPalette.tsx +156 -70
  68. package/src/flows/FlowPortalNode.tsx +1 -1
  69. package/src/flows/FlowWhatsAppPreview.tsx +14 -3
  70. package/src/flows/FlowsWorkspace.tsx +1255 -0
  71. package/src/flows/flowCanvasModel.test.ts +456 -0
  72. package/src/flows/flowCanvasModel.ts +378 -0
  73. package/src/flows/flowEditorOps.test.ts +276 -0
  74. package/src/flows/flowEditorOps.ts +202 -0
  75. package/src/flows/flowGraph.ts +78 -53
  76. package/src/flows/flowMenuPlacement.test.ts +130 -0
  77. package/src/flows/flowMenuPlacement.ts +86 -0
  78. package/src/flows/index.ts +51 -2
  79. package/src/flows/labels.ts +180 -0
  80. package/src/flows/workspaceContract.test.ts +126 -0
  81. package/src/hooks/useContainerWidth.ts +35 -0
  82. package/src/hooks/useConversationRealtime.ts +10 -8
  83. package/src/hooks/useScrollToLatestMessage.ts +127 -0
  84. package/src/hooks/useUrlFilterState.ts +107 -0
  85. package/src/icon.constant.ts +12 -0
  86. package/src/index.ts +100 -0
  87. package/src/lib/composer-formatting.test.ts +78 -0
  88. package/src/lib/composer-formatting.ts +145 -0
  89. package/src/lib/whatsapp-formatting.test.tsx +37 -0
  90. package/src/lib/whatsapp-formatting.tsx +28 -3
  91. package/src/listing/index.tsx +202 -0
  92. package/src/pagination.constant.ts +10 -0
  93. package/src/preview/ConversationPreview.tsx +84 -45
  94. package/src/preview/ConversationSimulatorClient.ts +143 -0
  95. package/src/preview/ConversationSimulatorPanel.test.tsx +55 -0
  96. package/src/preview/ConversationSimulatorPanel.tsx +131 -0
  97. package/src/preview/createPreviewBridgeClient.test.ts +92 -0
  98. package/src/preview/createPreviewBridgeClient.ts +124 -0
  99. package/src/preview/createPreviewMediaUploader.ts +82 -0
  100. package/src/preview/createPreviewWebhookClient.test.ts +96 -0
  101. package/src/preview/createPreviewWebhookClient.ts +99 -3
  102. package/src/preview/index.ts +36 -2
  103. package/src/preview/previewMediaUploader.test.ts +61 -0
  104. package/src/providers/ConversationsProvider.tsx +8 -6
  105. package/src/providers/types.ts +59 -2
  106. package/src/quickReply.test.ts +58 -0
  107. package/src/replyLatency.test.ts +71 -0
  108. package/src/replyLatency.ts +57 -0
  109. package/src/settings/MessagesWorkspace.tsx +571 -0
  110. package/src/settings/TopicsForm.tsx +2 -0
  111. package/src/settings/TranscriptionSettingsForm.test.tsx +81 -0
  112. package/src/settings/TranscriptionSettingsForm.tsx +190 -0
  113. package/src/settings/WelcomeFarewellForm.tsx +1 -0
  114. package/src/settings/WhatsAppCreateTemplateForm.tsx +1 -0
  115. package/src/settings/WhatsAppTemplateSettingsForm.tsx +5 -2
  116. package/src/settings/WhatsAppTemplatesSettings.test.tsx +61 -0
  117. package/src/settings/WhatsAppTemplatesSettings.tsx +22 -2
  118. package/src/styles.css +858 -0
  119. package/src/theme.ts +13 -0
  120. package/src/types.ts +26 -0
  121. package/src/workspace/BulkTemplateModal.tsx +132 -0
  122. package/src/workspace/ConversationPane.tsx +432 -0
  123. package/src/workspace/ConversationsInboxList.tsx +194 -0
  124. package/src/workspace/ConversationsWorkspace.tsx +423 -0
  125. package/src/workspace/index.ts +17 -0
  126. package/src/workspace/labels.test.ts +17 -0
  127. package/src/workspace/labels.ts +85 -0
  128. package/src/workspace/useConversationsInbox.ts +332 -0
  129. package/dist/chunk-73MW5HNT.js +0 -1717
  130. package/dist/chunk-NV2RZ5KT.js +0 -56
  131. package/dist/types-B5C1DLu1.d.ts +0 -365
  132. package/src/preview/AudioRecorderButton.tsx +0 -117
package/dist/styles.css CHANGED
@@ -10,6 +10,9 @@
10
10
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100' height='100' viewBox='0 0 100 100'%3E%3Cg fill='none' stroke='%2319232a' stroke-width='1.2' opacity='0.9'%3E%3Ccircle cx='15' cy='15' r='3'/%3E%3Cpath d='M40 10 q5 8 0 16 q-5 -8 0 -16z'/%3E%3Ccircle cx='70' cy='28' r='2'/%3E%3Cpath d='M18 55 l6 6 m-6 0 l6 -6'/%3E%3Ccircle cx='55' cy='68' r='2.5'/%3E%3Cpath d='M85 58 q6 6 0 12 q-6 -6 0 -12z'/%3E%3Ccircle cx='8' cy='85' r='2'/%3E%3Cpath d='M65 90 l5 5 m-5 0 l5 -5'/%3E%3C/g%3E%3C/svg%3E");
11
11
  }
12
12
  .cv-header-action {
13
+ display: inline-flex;
14
+ align-items: center;
15
+ gap: 0.375rem;
13
16
  border: 1px solid rgb(203 213 225);
14
17
  border-radius: 0.375rem;
15
18
  padding: 0.375rem 0.75rem;
@@ -26,6 +29,9 @@
26
29
  color: rgb(226 232 240);
27
30
  }
28
31
  .cv-header-icon {
32
+ display: inline-flex;
33
+ align-items: center;
34
+ justify-content: center;
29
35
  border: 1px solid rgb(203 213 225);
30
36
  border-radius: 0.5rem;
31
37
  padding: 0.375rem 0.5rem;
@@ -128,6 +134,9 @@
128
134
  background: rgb(30 41 59);
129
135
  }
130
136
  .cv-back {
137
+ display: inline-flex;
138
+ align-items: center;
139
+ justify-content: center;
131
140
  border: 1px solid rgb(203 213 225);
132
141
  border-radius: 0.5rem;
133
142
  padding: 0.25rem 0.5rem;
@@ -144,6 +153,11 @@
144
153
  border-color: rgb(71 85 105);
145
154
  color: rgb(226 232 240);
146
155
  }
156
+ .cv-stat {
157
+ display: inline-flex;
158
+ align-items: center;
159
+ gap: 0.25rem;
160
+ }
147
161
  .cv-only-wide {
148
162
  display: none;
149
163
  }
@@ -207,3 +221,882 @@
207
221
  max-width: calc(100vw - 1.5rem);
208
222
  }
209
223
  }
224
+ .cv-scrollbar-thin {
225
+ scrollbar-width: thin;
226
+ scrollbar-color: rgba(0, 0, 0, 0.15) transparent;
227
+ }
228
+ .cv-scrollbar-thin::-webkit-scrollbar {
229
+ width: 4px;
230
+ height: 4px;
231
+ }
232
+ .cv-scrollbar-thin::-webkit-scrollbar-track {
233
+ background: transparent;
234
+ }
235
+ .cv-scrollbar-thin::-webkit-scrollbar-thumb {
236
+ background: rgba(0, 0, 0, 0.15);
237
+ border-radius: 2px;
238
+ }
239
+ .cv-scrollbar-thin::-webkit-scrollbar-thumb:hover {
240
+ background: rgba(0, 0, 0, 0.3);
241
+ }
242
+ .dark .cv-scrollbar-thin {
243
+ scrollbar-color: rgba(255, 255, 255, 0.15) transparent;
244
+ }
245
+ .dark .cv-scrollbar-thin::-webkit-scrollbar-thumb {
246
+ background: rgba(255, 255, 255, 0.15);
247
+ }
248
+ .dark .cv-scrollbar-thin::-webkit-scrollbar-thumb:hover {
249
+ background: rgba(255, 255, 255, 0.3);
250
+ }
251
+ :where(button:not(:disabled), [role=button]:not(:disabled), summary) {
252
+ cursor: pointer;
253
+ }
254
+ .cv-simulator-panel {
255
+ display: flex;
256
+ flex-direction: column;
257
+ width: 24rem;
258
+ flex-shrink: 0;
259
+ border-left: 1px solid rgb(229 231 235);
260
+ background: #fff;
261
+ }
262
+ .cv-simulator-panel__header {
263
+ display: flex;
264
+ align-items: center;
265
+ justify-content: space-between;
266
+ gap: 0.5rem;
267
+ padding: 0.75rem 1rem;
268
+ border-bottom: 1px solid rgb(229 231 235);
269
+ }
270
+ .cv-simulator-panel__heading {
271
+ min-width: 0;
272
+ }
273
+ .cv-simulator-panel__title {
274
+ font-size: 0.875rem;
275
+ font-weight: 600;
276
+ color: rgb(17 24 39);
277
+ overflow: hidden;
278
+ text-overflow: ellipsis;
279
+ white-space: nowrap;
280
+ }
281
+ .cv-simulator-panel__subtitle {
282
+ font-size: 0.75rem;
283
+ color: rgb(156 163 175);
284
+ overflow: hidden;
285
+ text-overflow: ellipsis;
286
+ white-space: nowrap;
287
+ }
288
+ .cv-simulator-panel__actions {
289
+ display: flex;
290
+ align-items: center;
291
+ gap: 0.25rem;
292
+ }
293
+ .cv-simulator-panel__close {
294
+ display: inline-flex;
295
+ padding: 0.375rem;
296
+ border: 0;
297
+ border-radius: 0.5rem;
298
+ background: transparent;
299
+ color: rgb(156 163 175);
300
+ transition: color 150ms, background-color 150ms;
301
+ }
302
+ .cv-simulator-panel__close:hover {
303
+ color: rgb(55 65 81);
304
+ background: rgb(243 244 246);
305
+ }
306
+ .cv-simulator-panel__body {
307
+ flex: 1;
308
+ min-height: 0;
309
+ }
310
+ .dark .cv-simulator-panel {
311
+ border-left-color: rgb(31 41 55);
312
+ background: rgb(17 24 39);
313
+ }
314
+ .dark .cv-simulator-panel__header {
315
+ border-bottom-color: rgb(31 41 55);
316
+ }
317
+ .dark .cv-simulator-panel__title {
318
+ color: rgb(243 244 246);
319
+ }
320
+ .dark .cv-simulator-panel__subtitle {
321
+ color: rgb(107 114 128);
322
+ }
323
+ .dark .cv-simulator-panel__close:hover {
324
+ color: rgb(229 231 235);
325
+ background: rgb(31 41 55);
326
+ }
327
+ @media (max-width: 1023px) {
328
+ .cv-simulator-panel {
329
+ position: fixed;
330
+ inset: 0;
331
+ width: 100%;
332
+ z-index: 40;
333
+ border-left: 0;
334
+ }
335
+ }
336
+ .cv-workspace {
337
+ display: flex;
338
+ flex-direction: column;
339
+ height: 100%;
340
+ min-height: 0;
341
+ }
342
+ .cv-workspace-header {
343
+ display: flex;
344
+ align-items: center;
345
+ justify-content: space-between;
346
+ gap: 0.5rem;
347
+ padding: 0.75rem 1rem;
348
+ border-bottom: 1px solid rgb(229 231 235);
349
+ }
350
+ .dark .cv-workspace-header {
351
+ border-color: rgb(51 65 85);
352
+ }
353
+ .cv-workspace-header__titles {
354
+ min-width: 0;
355
+ }
356
+ .cv-workspace-header__titles h1 {
357
+ font-size: 1.125rem;
358
+ font-weight: 600;
359
+ overflow: hidden;
360
+ text-overflow: ellipsis;
361
+ white-space: nowrap;
362
+ }
363
+ .cv-workspace-header__titles p {
364
+ display: flex;
365
+ flex-wrap: wrap;
366
+ gap: 0.25rem 0.75rem;
367
+ font-size: 0.875rem;
368
+ color: rgb(107 114 128);
369
+ }
370
+ .cv-workspace-header__waiting {
371
+ color: rgb(217 119 6);
372
+ }
373
+ .dark .cv-workspace-header__waiting {
374
+ color: rgb(251 191 36);
375
+ }
376
+ .cv-workspace-header__actions {
377
+ display: flex;
378
+ flex-shrink: 0;
379
+ align-items: center;
380
+ gap: 0.5rem;
381
+ }
382
+ .cv-workspace-toggle {
383
+ display: inline-flex;
384
+ align-items: center;
385
+ gap: 0.375rem;
386
+ border: 1px solid rgb(229 231 235);
387
+ border-radius: 0.375rem;
388
+ padding: 0.5rem 0.75rem;
389
+ font-size: 0.875rem;
390
+ min-height: 2.75rem;
391
+ }
392
+ .cv-workspace-toggle:disabled {
393
+ opacity: 0.5;
394
+ }
395
+ .cv-workspace-toggle--on {
396
+ background: rgb(37 99 235);
397
+ color: #fff;
398
+ border-color: rgb(37 99 235);
399
+ }
400
+ .dark .cv-workspace-toggle {
401
+ border-color: rgb(71 85 105);
402
+ color: rgb(226 232 240);
403
+ }
404
+ .cv-workspace-failure {
405
+ border-bottom: 1px solid rgb(253 230 138);
406
+ background: rgb(255 251 235);
407
+ padding: 0.5rem 1rem;
408
+ font-size: 0.875rem;
409
+ color: rgb(146 64 14);
410
+ }
411
+ .dark .cv-workspace-failure {
412
+ background: rgb(69 26 3);
413
+ color: rgb(253 230 138);
414
+ border-color: rgb(120 53 15);
415
+ }
416
+ .cv-workspace-grid {
417
+ display: grid;
418
+ flex: 1;
419
+ min-height: 0;
420
+ grid-template-columns: minmax(0, 1fr);
421
+ gap: 0.75rem;
422
+ padding: 0.75rem;
423
+ background: rgb(243 244 246);
424
+ }
425
+ .dark .cv-workspace-grid {
426
+ background: rgb(17 24 39);
427
+ }
428
+ .cv-workspace-list,
429
+ .cv-workspace-detail,
430
+ .cv-workspace-simulator {
431
+ display: flex;
432
+ flex-direction: column;
433
+ min-height: 0;
434
+ min-width: 0;
435
+ overflow: hidden;
436
+ border: 1px solid rgb(229 231 235);
437
+ border-radius: 0.75rem;
438
+ background: #fff;
439
+ }
440
+ .dark .cv-workspace-list,
441
+ .dark .cv-workspace-detail,
442
+ .dark .cv-workspace-simulator {
443
+ background: rgb(31 41 55);
444
+ border-color: rgb(51 65 85);
445
+ }
446
+ .cv-workspace-simulator {
447
+ flex-direction: row;
448
+ }
449
+ @media (max-width: 1023px) {
450
+ .cv-workspace-grid[data-detail=open] .cv-workspace-list {
451
+ display: none;
452
+ }
453
+ .cv-workspace-grid[data-detail=closed] .cv-workspace-detail {
454
+ display: none;
455
+ }
456
+ }
457
+ @media (min-width: 1024px) {
458
+ .cv-workspace-grid {
459
+ grid-template-columns: 360px minmax(0, 1fr);
460
+ }
461
+ .cv-workspace-grid--with-simulator {
462
+ grid-template-columns: minmax(0, 1fr) 24rem;
463
+ }
464
+ .cv-workspace-grid--with-simulator .cv-workspace-list {
465
+ display: none;
466
+ }
467
+ }
468
+ @media (min-width: 1280px) {
469
+ .cv-workspace-grid--with-simulator {
470
+ grid-template-columns: 320px minmax(0, 1fr) 24rem;
471
+ }
472
+ .cv-workspace-grid--with-simulator .cv-workspace-list {
473
+ display: flex;
474
+ }
475
+ }
476
+ .cv-workspace-pane {
477
+ display: flex;
478
+ flex-direction: column;
479
+ height: 100%;
480
+ min-height: 0;
481
+ }
482
+ .cv-workspace-transcript {
483
+ position: relative;
484
+ flex: 1;
485
+ min-height: 0;
486
+ overflow-y: auto;
487
+ padding: 0.75rem 1rem;
488
+ }
489
+ .cv-workspace-failure__link {
490
+ text-decoration: underline;
491
+ }
492
+ .cv-workspace-selection {
493
+ display: flex;
494
+ align-items: center;
495
+ justify-content: space-between;
496
+ gap: 0.5rem;
497
+ border-top: 1px solid #bfdbfe;
498
+ background: #eff6ff;
499
+ padding: 0.5rem 0.75rem;
500
+ font-size: 0.8125rem;
501
+ color: #1d4ed8;
502
+ }
503
+ .cv-workspace-selection__actions {
504
+ display: flex;
505
+ gap: 0.5rem;
506
+ }
507
+ .cv-workspace-selection__actions button {
508
+ min-height: 2.75rem;
509
+ border-radius: 0.375rem;
510
+ border: 1px solid #bfdbfe;
511
+ padding: 0 0.625rem;
512
+ }
513
+ .dark .cv-workspace-selection {
514
+ border-color: #1e40af;
515
+ background: rgb(23 37 84 / 40%);
516
+ color: #93c5fd;
517
+ }
518
+ .dark .cv-workspace-selection__actions button {
519
+ border-color: #1e40af;
520
+ }
521
+ .cv-workspace-notice {
522
+ border-top: 1px solid var(--cv-border, #e5e7eb);
523
+ background: #f3f4f6;
524
+ padding: 0.75rem 1rem;
525
+ text-align: center;
526
+ font-size: 0.875rem;
527
+ color: #6b7280;
528
+ }
529
+ .dark .cv-workspace-notice {
530
+ border-top-color: #374151;
531
+ background: #1f2937;
532
+ color: #9ca3af;
533
+ }
534
+ .cv-workspace-alert {
535
+ border-top: 1px solid rgb(254 202 202);
536
+ background: rgb(254 242 242);
537
+ padding: 0.5rem 1rem;
538
+ font-size: 0.875rem;
539
+ color: rgb(185 28 28);
540
+ }
541
+ .dark .cv-workspace-alert {
542
+ background: rgb(69 10 10);
543
+ color: rgb(252 165 165);
544
+ border-color: rgb(127 29 29);
545
+ }
546
+ .cv-workspace-filters {
547
+ display: flex;
548
+ flex-direction: column;
549
+ gap: 0.5rem;
550
+ padding: 0.75rem;
551
+ border-bottom: 1px solid rgb(229 231 235);
552
+ }
553
+ .dark .cv-workspace-filters {
554
+ border-color: rgb(51 65 85);
555
+ }
556
+ .cv-workspace-search {
557
+ width: 100%;
558
+ border: 1px solid rgb(229 231 235);
559
+ border-radius: 0.375rem;
560
+ padding: 0.5rem 0.75rem;
561
+ font-size: 0.875rem;
562
+ background: transparent;
563
+ }
564
+ .dark .cv-workspace-search {
565
+ border-color: rgb(71 85 105);
566
+ color: rgb(226 232 240);
567
+ }
568
+ .cv-workspace-chips {
569
+ display: flex;
570
+ flex-wrap: nowrap;
571
+ align-items: center;
572
+ gap: 0.375rem;
573
+ font-size: 0.75rem;
574
+ overflow-x: auto;
575
+ scrollbar-width: none;
576
+ }
577
+ .cv-workspace-chips::-webkit-scrollbar {
578
+ display: none;
579
+ }
580
+ .cv-workspace-chips__legend {
581
+ color: rgb(107 114 128);
582
+ flex-shrink: 0;
583
+ }
584
+ .cv-workspace-chip {
585
+ display: flex;
586
+ flex-shrink: 0;
587
+ align-items: center;
588
+ gap: 0.25rem;
589
+ white-space: nowrap;
590
+ border-radius: 0.375rem;
591
+ padding: 0.25rem 0.5rem;
592
+ }
593
+ .cv-workspace-chip--on {
594
+ background: rgb(229 231 235);
595
+ }
596
+ .dark .cv-workspace-chip--on {
597
+ background: rgb(51 65 85);
598
+ }
599
+ .cv-workspace-chip--fresh {
600
+ color: rgb(22 163 74);
601
+ }
602
+ .cv-workspace-chip--warning {
603
+ color: rgb(202 138 4);
604
+ }
605
+ .cv-workspace-chip--critical {
606
+ color: rgb(220 38 38);
607
+ }
608
+ .cv-workspace-chip--expired {
609
+ color: rgb(107 114 128);
610
+ }
611
+ .cv-workspace-chip--fresh.cv-workspace-chip--on {
612
+ background: rgb(220 252 231);
613
+ }
614
+ .cv-workspace-chip--warning.cv-workspace-chip--on {
615
+ background: rgb(254 249 195);
616
+ }
617
+ .cv-workspace-chip--critical.cv-workspace-chip--on {
618
+ background: rgb(254 226 226);
619
+ }
620
+ .cv-workspace-chip--expired.cv-workspace-chip--on {
621
+ background: rgb(229 231 235);
622
+ }
623
+ .dark .cv-workspace-chip--fresh {
624
+ color: rgb(74 222 128);
625
+ }
626
+ .dark .cv-workspace-chip--warning {
627
+ color: rgb(250 204 21);
628
+ }
629
+ .dark .cv-workspace-chip--critical {
630
+ color: rgb(248 113 113);
631
+ }
632
+ .dark .cv-workspace-chip--expired {
633
+ color: rgb(148 163 184);
634
+ }
635
+ .dark .cv-workspace-chip--fresh.cv-workspace-chip--on {
636
+ background: rgb(20 83 45);
637
+ }
638
+ .dark .cv-workspace-chip--warning.cv-workspace-chip--on {
639
+ background: rgb(113 63 18);
640
+ }
641
+ .dark .cv-workspace-chip--critical.cv-workspace-chip--on {
642
+ background: rgb(127 29 29);
643
+ }
644
+ .dark .cv-workspace-chip--expired.cv-workspace-chip--on {
645
+ background: rgb(51 65 85);
646
+ }
647
+ .cv-workspace-selectall {
648
+ display: flex;
649
+ align-items: center;
650
+ gap: 0.5rem;
651
+ font-size: 0.75rem;
652
+ }
653
+ .cv-workspace-rows {
654
+ flex: 1;
655
+ min-height: 0;
656
+ overflow-y: auto;
657
+ }
658
+ .cv-workspace-empty {
659
+ padding: 1rem;
660
+ font-size: 0.875rem;
661
+ color: rgb(107 114 128);
662
+ }
663
+ .cv-workspace-bulk {
664
+ display: flex;
665
+ flex-wrap: wrap;
666
+ align-items: center;
667
+ justify-content: space-between;
668
+ gap: 0.5rem;
669
+ padding: 0.5rem 0.75rem;
670
+ border-bottom: 1px solid rgb(191 219 254);
671
+ background: rgb(239 246 255);
672
+ font-size: 0.75rem;
673
+ }
674
+ .dark .cv-workspace-bulk {
675
+ background: rgb(23 37 84);
676
+ border-color: rgb(30 58 138);
677
+ }
678
+ .cv-workspace-bulk__count {
679
+ font-weight: 500;
680
+ color: rgb(29 78 216);
681
+ }
682
+ .dark .cv-workspace-bulk__count {
683
+ color: rgb(147 197 253);
684
+ }
685
+ .cv-workspace-bulk__actions {
686
+ display: flex;
687
+ flex-wrap: wrap;
688
+ gap: 0.5rem;
689
+ }
690
+ .cv-workspace-bulk__actions button {
691
+ border: 1px solid rgb(191 219 254);
692
+ border-radius: 0.375rem;
693
+ padding: 0.25rem 0.5rem;
694
+ }
695
+ .cv-workspace-bulk__actions button:disabled {
696
+ opacity: 0.5;
697
+ }
698
+ .cv-workspace-pager {
699
+ display: flex;
700
+ align-items: center;
701
+ justify-content: space-between;
702
+ gap: 0.5rem;
703
+ border-top: 1px solid rgb(229 231 235);
704
+ padding: 0.5rem 0.75rem;
705
+ font-size: 0.75rem;
706
+ color: rgb(107 114 128);
707
+ }
708
+ .dark .cv-workspace-pager {
709
+ border-color: rgb(51 65 85);
710
+ }
711
+ .cv-workspace-pager__buttons {
712
+ display: flex;
713
+ align-items: center;
714
+ gap: 0.25rem;
715
+ }
716
+ .cv-workspace-pager__buttons button {
717
+ padding: 0 0.5rem;
718
+ }
719
+ .cv-workspace-pager__buttons button:disabled {
720
+ opacity: 0.4;
721
+ }
722
+ .cv-workspace-modal {
723
+ position: fixed;
724
+ inset: 0;
725
+ z-index: 50;
726
+ display: flex;
727
+ align-items: center;
728
+ justify-content: center;
729
+ padding: 1rem;
730
+ background: rgb(0 0 0 / 50%);
731
+ }
732
+ .cv-workspace-modal__box {
733
+ display: flex;
734
+ width: 100%;
735
+ max-width: 28rem;
736
+ max-height: 80vh;
737
+ flex-direction: column;
738
+ overflow: hidden;
739
+ border-radius: 0.75rem;
740
+ border: 1px solid #e5e7eb;
741
+ background: #fff;
742
+ box-shadow: 0 20px 25px -5px rgb(0 0 0 / 25%);
743
+ }
744
+ .cv-workspace-modal__header {
745
+ display: flex;
746
+ align-items: flex-start;
747
+ justify-content: space-between;
748
+ gap: 0.75rem;
749
+ border-bottom: 1px solid #e5e7eb;
750
+ padding: 1rem 1.25rem;
751
+ }
752
+ .cv-workspace-modal__header h3 {
753
+ font-weight: 600;
754
+ }
755
+ .cv-workspace-modal__header p {
756
+ margin-top: 0.125rem;
757
+ font-size: 0.75rem;
758
+ color: #6b7280;
759
+ }
760
+ .cv-workspace-modal__search {
761
+ border-bottom: 1px solid #f3f4f6;
762
+ padding: 0.75rem 1rem;
763
+ }
764
+ .cv-workspace-modal__search input {
765
+ width: 100%;
766
+ border-radius: 0.5rem;
767
+ border: 1px solid #e5e7eb;
768
+ padding: 0.5rem 0.75rem;
769
+ font-size: 0.875rem;
770
+ }
771
+ .cv-workspace-modal__list {
772
+ flex: 1;
773
+ overflow-y: auto;
774
+ padding: 0.5rem;
775
+ }
776
+ .cv-workspace-modal__item {
777
+ display: flex;
778
+ width: 100%;
779
+ flex-direction: column;
780
+ gap: 0.125rem;
781
+ border: 1px solid transparent;
782
+ border-radius: 0.5rem;
783
+ padding: 0.625rem 0.75rem;
784
+ text-align: left;
785
+ font-size: 0.875rem;
786
+ }
787
+ .cv-workspace-modal__item:hover {
788
+ background: #f9fafb;
789
+ }
790
+ .cv-workspace-modal__item--on {
791
+ border-color: #bfdbfe;
792
+ background: #eff6ff;
793
+ color: #1d4ed8;
794
+ }
795
+ .cv-workspace-modal__item-name {
796
+ overflow: hidden;
797
+ text-overflow: ellipsis;
798
+ white-space: nowrap;
799
+ font-weight: 500;
800
+ }
801
+ .cv-workspace-modal__item-meta {
802
+ font-size: 0.75rem;
803
+ color: #9ca3af;
804
+ }
805
+ .cv-workspace-modal__warning {
806
+ border-top: 1px solid #fde68a;
807
+ background: #fffbeb;
808
+ padding: 0.5rem 1rem;
809
+ font-size: 0.75rem;
810
+ color: #b45309;
811
+ }
812
+ .cv-workspace-modal__footer {
813
+ display: flex;
814
+ justify-content: flex-end;
815
+ gap: 0.5rem;
816
+ border-top: 1px solid #e5e7eb;
817
+ padding: 0.75rem 1rem;
818
+ }
819
+ .cv-workspace-modal__footer button {
820
+ min-height: 2.75rem;
821
+ border-radius: 0.5rem;
822
+ border: 1px solid #e5e7eb;
823
+ padding: 0 0.875rem;
824
+ font-size: 0.875rem;
825
+ }
826
+ .cv-workspace-modal__footer button:last-child {
827
+ border-color: transparent;
828
+ background: #2563eb;
829
+ color: #fff;
830
+ }
831
+ .cv-workspace-modal__footer button:disabled {
832
+ opacity: 0.5;
833
+ }
834
+ .dark .cv-workspace-modal__box {
835
+ border-color: #374151;
836
+ background: #1f2937;
837
+ }
838
+ .dark .cv-workspace-modal__header,
839
+ .dark .cv-workspace-modal__footer {
840
+ border-color: #374151;
841
+ }
842
+ .dark .cv-workspace-modal__search {
843
+ border-color: #374151;
844
+ }
845
+ .dark .cv-workspace-modal__search input {
846
+ border-color: #4b5563;
847
+ background: #374151;
848
+ color: #f3f4f6;
849
+ }
850
+ .dark .cv-workspace-modal__item:hover {
851
+ background: rgb(55 65 81 / 50%);
852
+ }
853
+ .dark .cv-workspace-modal__item--on {
854
+ border-color: #1e40af;
855
+ background: rgb(23 37 84 / 40%);
856
+ color: #93c5fd;
857
+ }
858
+ .dark .cv-workspace-modal__warning {
859
+ border-color: #92400e;
860
+ background: rgb(69 26 3 / 40%);
861
+ color: #fbbf24;
862
+ }
863
+ .dark .cv-workspace-modal__footer button {
864
+ border-color: #4b5563;
865
+ color: #f3f4f6;
866
+ }
867
+ .cv-workspace-attachments {
868
+ display: flex;
869
+ flex-wrap: wrap;
870
+ gap: 0.5rem;
871
+ margin: 0 0 0.5rem;
872
+ padding: 0;
873
+ list-style: none;
874
+ }
875
+ .cv-workspace-attachments li {
876
+ display: flex;
877
+ align-items: center;
878
+ gap: 0.5rem;
879
+ max-width: 14rem;
880
+ padding: 0.25rem 0.5rem;
881
+ border: 1px solid rgb(226 232 240);
882
+ border-radius: 0.5rem;
883
+ font-size: 0.75rem;
884
+ }
885
+ .cv-workspace-attachments li span {
886
+ overflow: hidden;
887
+ text-overflow: ellipsis;
888
+ white-space: nowrap;
889
+ }
890
+ .cv-workspace-attachments li button {
891
+ flex: none;
892
+ min-width: 1.5rem;
893
+ min-height: 1.5rem;
894
+ cursor: pointer;
895
+ background: none;
896
+ border: 0;
897
+ color: inherit;
898
+ }
899
+ .dark .cv-workspace-attachments li {
900
+ border-color: rgb(51 65 85);
901
+ }
902
+ .cv-filter-count {
903
+ display: inline-flex;
904
+ align-items: center;
905
+ justify-content: center;
906
+ min-width: 1rem;
907
+ height: 1rem;
908
+ padding: 0 0.25rem;
909
+ border-radius: 9999px;
910
+ background: rgb(37 99 235);
911
+ color: white;
912
+ font-size: 0.625rem;
913
+ font-weight: 600;
914
+ }
915
+ .cv-filter-menu {
916
+ position: absolute;
917
+ top: 100%;
918
+ left: 0;
919
+ z-index: 20;
920
+ margin-top: 0.25rem;
921
+ min-width: 12rem;
922
+ padding: 0.5rem;
923
+ border: 1px solid rgb(226 232 240);
924
+ border-radius: 0.5rem;
925
+ background: white;
926
+ box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1);
927
+ }
928
+ .dark .cv-filter-menu {
929
+ background: rgb(30 41 59);
930
+ border-color: rgb(71 85 105);
931
+ }
932
+ .cv-filter-option {
933
+ display: flex;
934
+ align-items: center;
935
+ gap: 0.5rem;
936
+ padding: 0.375rem 0.5rem;
937
+ border-radius: 0.375rem;
938
+ font-size: 0.75rem;
939
+ cursor: pointer;
940
+ }
941
+ .cv-filter-option:hover {
942
+ background: rgb(241 245 249);
943
+ }
944
+ .dark .cv-filter-option:hover {
945
+ background: rgb(51 65 85);
946
+ }
947
+ .cv-bulk-bar {
948
+ display: flex;
949
+ flex-wrap: wrap;
950
+ align-items: center;
951
+ gap: 0.5rem;
952
+ padding: 0.5rem 0.75rem;
953
+ border: 1px solid rgb(191 219 254);
954
+ border-radius: 0.5rem;
955
+ background: rgb(239 246 255);
956
+ }
957
+ .dark .cv-bulk-bar {
958
+ background: rgb(30 58 138 / 0.25);
959
+ border-color: rgb(30 64 175);
960
+ }
961
+ .cv-listing-pagination {
962
+ display: flex;
963
+ flex-wrap: wrap;
964
+ align-items: center;
965
+ justify-content: space-between;
966
+ gap: 0.5rem;
967
+ padding-top: 0.5rem;
968
+ border-top: 1px solid rgb(241 245 249);
969
+ }
970
+ .dark .cv-listing-pagination {
971
+ border-color: rgb(30 41 59);
972
+ }
973
+ .cv-listing-perpage {
974
+ height: 2rem;
975
+ padding: 0 0.5rem;
976
+ border: 1px solid rgb(226 232 240);
977
+ border-radius: 0.375rem;
978
+ background: transparent;
979
+ font-size: 0.75rem;
980
+ }
981
+ .dark .cv-listing-perpage {
982
+ border-color: rgb(71 85 105);
983
+ }
984
+ :root {
985
+ --cv-border-color: rgb(229 231 235);
986
+ }
987
+ .dark {
988
+ --cv-border-color: rgb(51 65 85);
989
+ }
990
+ :where(*, ::before, ::after, ::backdrop, ::file-selector-button) {
991
+ border-color: var(--cv-border-color);
992
+ }
993
+ .cv-table-card {
994
+ overflow-x: auto;
995
+ border: 1px solid rgb(229 231 235);
996
+ border-radius: 0.75rem;
997
+ background: #fff;
998
+ }
999
+ .dark .cv-table-card {
1000
+ border-color: rgb(51 65 85);
1001
+ background: rgb(17 24 39);
1002
+ }
1003
+ .cv-table {
1004
+ width: 100%;
1005
+ border-collapse: collapse;
1006
+ font-size: 0.875rem;
1007
+ }
1008
+ .cv-table thead {
1009
+ background: rgb(248 250 252);
1010
+ color: rgb(100 116 139);
1011
+ }
1012
+ .dark .cv-table thead {
1013
+ background: rgb(30 41 59 / 60%);
1014
+ color: rgb(148 163 184);
1015
+ }
1016
+ .cv-table thead th {
1017
+ border-bottom: 1px solid rgb(226 232 240);
1018
+ white-space: nowrap;
1019
+ }
1020
+ .dark .cv-table thead th {
1021
+ border-bottom-color: rgb(51 65 85);
1022
+ }
1023
+ .cv-table tbody tr {
1024
+ border-bottom: 1px solid rgb(241 245 249);
1025
+ }
1026
+ .dark .cv-table tbody tr {
1027
+ border-bottom-color: rgb(30 41 59);
1028
+ }
1029
+ .cv-table tbody tr:last-child {
1030
+ border-bottom: 0;
1031
+ }
1032
+ .cv-table tbody tr:nth-child(even) {
1033
+ background: rgb(248 250 252 / 70%);
1034
+ }
1035
+ .dark .cv-table tbody tr:nth-child(even) {
1036
+ background: rgb(30 41 59 / 35%);
1037
+ }
1038
+ .cv-table tbody tr:hover {
1039
+ background: rgb(239 246 255);
1040
+ }
1041
+ .dark .cv-table tbody tr:hover {
1042
+ background: rgb(30 58 138 / 25%);
1043
+ }
1044
+ .cv-type-tag {
1045
+ display: inline-block;
1046
+ border-radius: 0.25rem;
1047
+ background: rgb(241 245 249);
1048
+ padding: 0.125rem 0.375rem;
1049
+ font-size: 0.6875rem;
1050
+ font-weight: 600;
1051
+ letter-spacing: 0.02em;
1052
+ color: rgb(71 85 105);
1053
+ }
1054
+ .dark .cv-type-tag {
1055
+ background: rgb(51 65 85);
1056
+ color: rgb(203 213 225);
1057
+ }
1058
+ .cv-tooltip {
1059
+ position: fixed;
1060
+ z-index: 9999;
1061
+ max-width: min(16rem, 90vw);
1062
+ transform: translate(-50%, -100%);
1063
+ border-radius: 0.375rem;
1064
+ background: rgb(17 24 39 / 95%);
1065
+ padding: 0.3125rem 0.5rem;
1066
+ font-size: 0.75rem;
1067
+ line-height: 1.2;
1068
+ color: #fff;
1069
+ text-align: center;
1070
+ box-shadow: 0 4px 12px rgb(0 0 0 / 18%);
1071
+ pointer-events: none;
1072
+ animation: cv-tooltip-in 90ms ease-out;
1073
+ }
1074
+ .cv-tooltip--bottom {
1075
+ transform: translate(-50%, 0);
1076
+ }
1077
+ .dark .cv-tooltip {
1078
+ background: rgb(243 244 246 / 96%);
1079
+ color: rgb(17 24 39);
1080
+ }
1081
+ @keyframes cv-tooltip-in {
1082
+ from {
1083
+ opacity: 0;
1084
+ }
1085
+ to {
1086
+ opacity: 1;
1087
+ }
1088
+ }
1089
+ @media (prefers-reduced-motion: reduce) {
1090
+ .cv-tooltip {
1091
+ animation: none;
1092
+ }
1093
+ }
1094
+ .cv-composer-bar {
1095
+ border-top: 1px solid rgb(229 231 235);
1096
+ background: rgb(240 242 245);
1097
+ padding: 0.625rem 0.75rem;
1098
+ }
1099
+ .dark .cv-composer-bar {
1100
+ border-top-color: rgb(51 65 85);
1101
+ background: rgb(17 24 39);
1102
+ }