@truedat/auth 8.14.0 → 8.14.2

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 (65) hide show
  1. package/package.json +4 -4
  2. package/src/groups/components/EditGroup.js +64 -20
  3. package/src/groups/components/Group.js +39 -41
  4. package/src/groups/components/GroupCard.js +51 -54
  5. package/src/groups/components/GroupCards.js +60 -25
  6. package/src/groups/components/GroupDeleteModal.js +98 -0
  7. package/src/groups/components/GroupDropdown.js +92 -0
  8. package/src/groups/components/GroupForm.js +165 -84
  9. package/src/groups/components/GroupFormModal.js +137 -0
  10. package/src/groups/components/GroupInfoModal.js +114 -0
  11. package/src/groups/components/GroupMemberPicker.js +364 -0
  12. package/src/groups/components/GroupRouteModal.js +46 -0
  13. package/src/groups/components/GroupUsers.js +31 -14
  14. package/src/groups/components/GroupUsersTable.js +136 -83
  15. package/src/groups/components/NewGroup.js +38 -10
  16. package/src/groups/components/__tests__/EditGroup.spec.js +105 -0
  17. package/src/groups/components/__tests__/Group.spec.js +29 -47
  18. package/src/groups/components/__tests__/GroupCard.spec.js +8 -20
  19. package/src/groups/components/__tests__/GroupDropdown.spec.js +27 -0
  20. package/src/groups/components/__tests__/GroupForm.spec.js +32 -5
  21. package/src/groups/components/__tests__/GroupMemberPicker.spec.js +378 -0
  22. package/src/groups/components/__tests__/GroupModals.spec.js +210 -0
  23. package/src/groups/components/__tests__/GroupUsers.spec.js +17 -2
  24. package/src/groups/components/__tests__/GroupUsersTable.spec.js +34 -2
  25. package/src/groups/components/__tests__/__snapshots__/Group.spec.js.snap +1 -0
  26. package/src/groups/components/__tests__/__snapshots__/GroupCard.spec.js.snap +32 -30
  27. package/src/groups/components/__tests__/__snapshots__/GroupCards.spec.js.snap +90 -77
  28. package/src/groups/components/__tests__/__snapshots__/GroupUsers.spec.js.snap +75 -11
  29. package/src/groups/components/__tests__/__snapshots__/GroupUsersTable.spec.js.snap +70 -13
  30. package/src/groups/components/index.js +0 -4
  31. package/src/groups/hooks/__tests__/useGroupOperation.spec.js +167 -0
  32. package/src/groups/hooks/__tests__/useGroups.spec.js +90 -0
  33. package/src/groups/hooks/useGroupOperation.js +83 -0
  34. package/src/groups/hooks/useGroups.js +64 -0
  35. package/src/groups/reducers/index.js +0 -4
  36. package/src/groups/routines.js +0 -7
  37. package/src/groups/sagas/index.js +2 -24
  38. package/src/hooks/useRoles.js +6 -3
  39. package/src/styles/Groups.less +1009 -0
  40. package/src/users/components/AdminUserRoutes.js +1 -14
  41. package/src/users/components/GroupUserCrumbs.js +7 -12
  42. package/src/users/components/UserRoutes.js +12 -35
  43. package/src/users/components/UsersAndGroups.js +3 -6
  44. package/src/users/components/__tests__/GroupUserCrumbs.spec.js +26 -30
  45. package/src/users/components/__tests__/UserRoutes.spec.js +4 -6
  46. package/src/users/components/__tests__/UsersAndGroups.spec.js +5 -7
  47. package/src/users/components/__tests__/__snapshots__/UserRoutes.spec.js.snap +9 -55
  48. package/src/groups/components/GroupLoader.js +0 -27
  49. package/src/groups/components/GroupsLoader.js +0 -30
  50. package/src/groups/components/__tests__/GroupLoader.spec.js +0 -71
  51. package/src/groups/components/__tests__/__snapshots__/GroupLoader.spec.js.snap +0 -11
  52. package/src/groups/reducers/__tests__/groupRedirect.spec.js +0 -51
  53. package/src/groups/reducers/__tests__/groupUsers.spec.js +0 -60
  54. package/src/groups/reducers/group.js +0 -56
  55. package/src/groups/reducers/groupRedirect.js +0 -20
  56. package/src/groups/reducers/groupUsers.js +0 -16
  57. package/src/groups/reducers/groups.js +0 -29
  58. package/src/groups/sagas/__tests__/deleteGroup.spec.js +0 -93
  59. package/src/groups/sagas/__tests__/deleteGroupUser.spec.js +0 -80
  60. package/src/groups/sagas/createGroup.js +0 -27
  61. package/src/groups/sagas/deleteGroup.js +0 -31
  62. package/src/groups/sagas/deleteGroupUser.js +0 -35
  63. package/src/groups/sagas/fetchGroup.js +0 -30
  64. package/src/groups/sagas/fetchGroups.js +0 -26
  65. package/src/groups/sagas/updateGroup.js +0 -28
@@ -0,0 +1,1009 @@
1
+ .groups-toolbar {
2
+ display: flex;
3
+ justify-content: flex-end;
4
+ margin-bottom: 1rem;
5
+ .group-create-button.ui.button {
6
+ display: inline-flex;
7
+ align-items: center;
8
+ gap: 0.65rem;
9
+ .group-create-icon {
10
+ display: inline-flex;
11
+ align-items: center;
12
+ gap: 0.15rem;
13
+ flex-shrink: 0;
14
+ > .icon {
15
+ margin: 0;
16
+ }
17
+ > svg {
18
+ width: 0.85em;
19
+ height: 0.85em;
20
+ }
21
+ }
22
+ }
23
+ }
24
+ .groups-card-list {
25
+ display: grid;
26
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr));
27
+ gap: 1.75em 1rem;
28
+ margin: 0;
29
+ padding-block: 0.875em;
30
+
31
+ > .td-group-card {
32
+ width: 100%;
33
+ max-width: none;
34
+ min-width: 0;
35
+ margin: 0;
36
+ }
37
+ }
38
+ @media (min-width: 1600px) {
39
+ .groups-card-list {
40
+ grid-template-columns: repeat(5, minmax(0, 1fr));
41
+ }
42
+ }
43
+ .td-group-card {
44
+ --card-accent-color: var(--td-card-accent, #002057);
45
+ --card-secondary-color: var(--td-card-secondary, #ed5c17);
46
+ --gc-action-tint: rgba(100, 116, 139, 0.07);
47
+ position: relative;
48
+ height: auto;
49
+ min-height: 160px;
50
+ overflow: hidden;
51
+ min-width: 0;
52
+ background: #fff;
53
+ border: 1px solid #edf2f7;
54
+ border-radius: 1.25rem 0.5rem 1.5rem 0.25rem;
55
+ box-shadow: 0 2px 6px rgba(15, 23, 42, 0.15);
56
+ color: #334155;
57
+ transition:
58
+ transform 300ms cubic-bezier(0.22, 1, 0.36, 1),
59
+ border-color 140ms ease,
60
+ box-shadow 140ms ease;
61
+
62
+ &::before {
63
+ content: "";
64
+ position: absolute;
65
+ inset: 0;
66
+ border-left: 8px solid var(--card-accent-color);
67
+ border-radius: inherit;
68
+ opacity: 0;
69
+ transform: translateX(-8px);
70
+ transition:
71
+ opacity 300ms cubic-bezier(0.22, 1, 0.36, 1),
72
+ transform 300ms cubic-bezier(0.22, 1, 0.36, 1);
73
+ pointer-events: none;
74
+ }
75
+ &::after {
76
+ content: "";
77
+ position: absolute;
78
+ inset: 0;
79
+ border-radius: inherit;
80
+ background: linear-gradient(270deg, var(--gc-action-tint), transparent 75%);
81
+ opacity: 0;
82
+ pointer-events: none;
83
+ transition: opacity 180ms ease;
84
+ }
85
+ &:has(.gc-actions a:hover),
86
+ &:has(.gc-actions a:focus-visible) {
87
+ --gc-action-tint: rgba(37, 99, 235, 0.09);
88
+ border-color: rgba(37, 99, 235, 0.7);
89
+ }
90
+ &:hover,
91
+ &:focus-within {
92
+ transform: translateY(-4px);
93
+ border-color: var(--card-accent-color);
94
+ box-shadow: 0 5px 14px rgba(15, 23, 42, 0.18);
95
+ &::after {
96
+ opacity: 1;
97
+ }
98
+ .gc-avatar {
99
+ background: var(--card-secondary-color);
100
+ color: #fff;
101
+ box-shadow: -0.3rem 0.2rem 0 var(--card-accent-color);
102
+ transform: translate(0.3rem, -0.2rem);
103
+ }
104
+ .gc-content h3 {
105
+ color: var(--card-secondary-color);
106
+ transform: translate(0.3rem, -0.2rem);
107
+ }
108
+ &::before {
109
+ opacity: 1;
110
+ transform: translateX(0);
111
+ }
112
+ .gc-actions {
113
+ opacity: 1;
114
+ transform: translateX(0);
115
+ pointer-events: auto;
116
+ transition-delay: 0ms;
117
+ }
118
+ }
119
+ .gc-content {
120
+ display: grid;
121
+ grid-template-columns: 2.75rem minmax(0, 1fr);
122
+ align-content: start;
123
+ align-items: center;
124
+ column-gap: 0.75rem;
125
+ row-gap: 0.3rem;
126
+ min-height: inherit;
127
+ padding: calc(1.45em - 0.28rem) 2rem 2.25rem calc(1em + 0.35rem);
128
+ border-radius: inherit;
129
+ color: inherit;
130
+ text-align: left;
131
+ cursor: pointer;
132
+ h3 {
133
+ margin: 0;
134
+ grid-column: 2;
135
+ grid-row: 1;
136
+ min-width: 0;
137
+ font-size: 18px;
138
+ font-weight: 800;
139
+ line-height: 1.25;
140
+ color: #1e293b;
141
+ transition:
142
+ color 300ms cubic-bezier(0.22, 1, 0.36, 1),
143
+ transform 300ms cubic-bezier(0.22, 1, 0.36, 1);
144
+ }
145
+ h3,
146
+ .gc-name,
147
+ .gc-description {
148
+ max-width: 100%;
149
+ overflow: hidden;
150
+ overflow-wrap: anywhere;
151
+ display: -webkit-box;
152
+ -webkit-box-orient: vertical;
153
+ -webkit-line-clamp: 2;
154
+ }
155
+ &:focus-visible {
156
+ outline: 2px solid var(--card-accent-color);
157
+ outline-offset: -3px;
158
+ }
159
+ }
160
+ .gc-avatar {
161
+ display: inline-flex;
162
+ align-items: center;
163
+ justify-content: center;
164
+ flex-shrink: 0;
165
+ width: 2.75rem;
166
+ height: 2.75rem;
167
+ grid-column: 1;
168
+ grid-row: 1;
169
+ border-radius: 50%;
170
+ background: rgba(0, 0, 0, 0.08);
171
+ font-size: 1.5rem;
172
+ color: var(--card-accent-color);
173
+ transition:
174
+ background 300ms cubic-bezier(0.22, 1, 0.36, 1),
175
+ color 300ms cubic-bezier(0.22, 1, 0.36, 1),
176
+ box-shadow 300ms cubic-bezier(0.22, 1, 0.36, 1),
177
+ transform 300ms cubic-bezier(0.22, 1, 0.36, 1);
178
+ > .icon {
179
+ margin: 0;
180
+ }
181
+ }
182
+ .gc-name,
183
+ .gc-description {
184
+ grid-column: 1 / -1;
185
+ padding-left: 0.5rem;
186
+ }
187
+ .gc-name {
188
+ font-size: 0.85rem;
189
+ color: #64748b;
190
+ }
191
+ .gc-description {
192
+ margin: 0.75rem 0 0;
193
+ padding-top: 0.75rem;
194
+ border-top: 1px solid #e2e8f0;
195
+ font-size: 13px;
196
+ line-height: 1.2;
197
+ color: #64748b;
198
+ }
199
+ .gc-actions {
200
+ z-index: 1;
201
+ position: absolute;
202
+ top: 0.45rem;
203
+ right: -1px;
204
+ display: flex;
205
+ flex-direction: column;
206
+ align-items: flex-end;
207
+ gap: 0.25rem;
208
+ opacity: 0;
209
+ pointer-events: none;
210
+ transform: translateX(0.45rem);
211
+ transition:
212
+ opacity 420ms cubic-bezier(0.22, 1, 0.36, 1) 160ms,
213
+ transform 420ms cubic-bezier(0.22, 1, 0.36, 1) 160ms;
214
+ a {
215
+ display: flex;
216
+ align-items: center;
217
+ width: auto;
218
+ max-width: 1.75rem;
219
+ height: 1.75rem;
220
+ padding: 0;
221
+ border: 1px solid #64748b;
222
+ border-right: 0;
223
+ border-radius: 0.5rem 0 0 0.5rem;
224
+ background: #fff;
225
+ color: #64748b;
226
+ box-shadow: 0 6px 14px rgba(15, 23, 42, 0.14);
227
+ cursor: pointer;
228
+ overflow: hidden;
229
+ white-space: nowrap;
230
+ transition:
231
+ max-width 420ms cubic-bezier(0.22, 1, 0.36, 1),
232
+ padding 420ms cubic-bezier(0.22, 1, 0.36, 1),
233
+ color 140ms ease,
234
+ background-color 140ms ease,
235
+ border-color 140ms ease;
236
+ i.icon {
237
+ flex: 0 0 1.75rem;
238
+ width: 1.75rem;
239
+ margin: 0;
240
+ font-size: 0.8rem;
241
+ display: inline-flex;
242
+ align-items: center;
243
+ justify-content: center;
244
+ height: 100%;
245
+ line-height: 1;
246
+ }
247
+ &:hover,
248
+ &:focus-visible {
249
+ max-width: 14rem;
250
+ padding: 0 1rem 0 0.08rem;
251
+ color: #1d4ed8;
252
+ background: #e8f1ff;
253
+ border-color: rgba(37, 99, 235, 0.62);
254
+ .gc-action-label {
255
+ max-width: 11rem;
256
+ opacity: 1;
257
+ }
258
+ }
259
+ &:focus-visible {
260
+ outline: 2px solid currentColor;
261
+ outline-offset: -2px;
262
+ }
263
+ }
264
+ }
265
+ .gc-action-label {
266
+ max-width: 0;
267
+ opacity: 0;
268
+ overflow: hidden;
269
+ font-size: 0.8rem;
270
+ font-weight: 800;
271
+ line-height: 1;
272
+ transition:
273
+ max-width 420ms cubic-bezier(0.22, 1, 0.36, 1),
274
+ opacity 420ms ease;
275
+ }
276
+ .gc-count {
277
+ position: absolute;
278
+ right: -1px;
279
+ bottom: -1px;
280
+ display: inline-flex;
281
+ align-items: center;
282
+ justify-content: center;
283
+ gap: 0;
284
+ min-width: 3.8rem;
285
+ min-height: 2rem;
286
+ padding: 0.55em 1.75em;
287
+ border-radius: 18px 0 1.5rem 0;
288
+ background: #eeeeee;
289
+ color: #888888;
290
+ font-size: 12px;
291
+ font-weight: 700;
292
+ line-height: 1;
293
+ white-space: nowrap;
294
+ pointer-events: none;
295
+ transition:
296
+ background-color 300ms cubic-bezier(0.22, 1, 0.36, 1),
297
+ color 300ms cubic-bezier(0.22, 1, 0.36, 1);
298
+ > i.icon {
299
+ margin: 0 0.4em 0 0;
300
+ font-size: 0.9rem;
301
+ line-height: 1;
302
+ }
303
+ }
304
+ .gc-count-empty-marker {
305
+ max-width: 1em;
306
+ overflow: hidden;
307
+ opacity: 1;
308
+ transition:
309
+ max-width 300ms cubic-bezier(0.22, 1, 0.36, 1),
310
+ opacity 300ms ease;
311
+ }
312
+ .gc-count--empty .gc-count-label {
313
+ text-transform: none;
314
+ }
315
+ .gc-count-label {
316
+ max-width: 0;
317
+ margin-left: 0;
318
+ overflow: hidden;
319
+ opacity: 0;
320
+ text-transform: lowercase;
321
+ transition:
322
+ max-width 300ms cubic-bezier(0.22, 1, 0.36, 1),
323
+ margin-left 300ms cubic-bezier(0.22, 1, 0.36, 1),
324
+ opacity 300ms ease;
325
+ }
326
+ &:hover .gc-count,
327
+ &:focus-within .gc-count {
328
+ background: var(--card-accent-color);
329
+ color: #ffffff;
330
+ .gc-count-label {
331
+ max-width: 8rem;
332
+ margin-left: 0.4em;
333
+ opacity: 1;
334
+ }
335
+ &.gc-count--empty {
336
+ .gc-count-empty-marker {
337
+ max-width: 0;
338
+ opacity: 0;
339
+ }
340
+ .gc-count-label {
341
+ margin-left: 0;
342
+ }
343
+ }
344
+ }
345
+ }
346
+ .ui.modal.group-modal {
347
+ --group-modal-gap: clamp(16px, 6vh, 56px);
348
+ --group-modal-gap: clamp(16px, 6dvh, 56px);
349
+ max-height: calc(100vh - 2 * var(--group-modal-gap));
350
+ max-height: calc(100dvh - 2 * var(--group-modal-gap));
351
+ > .true-modal-close {
352
+ min-width: 44px;
353
+ min-height: 44px;
354
+ top: 0.5rem;
355
+ right: 0.5rem;
356
+ }
357
+ .group-form {
358
+ display: flex;
359
+ flex-direction: column;
360
+ min-height: 0;
361
+ }
362
+ .group-form-fields {
363
+ display: grid;
364
+ grid-template-columns: repeat(3, minmax(0, 1fr));
365
+ gap: 0.75rem;
366
+ border: 0;
367
+ padding: 0;
368
+ margin: 0;
369
+ min-width: 0;
370
+ > .field {
371
+ min-width: 0;
372
+ margin: 0;
373
+ }
374
+ > .field:nth-child(n + 3) {
375
+ grid-column: 1 / -1;
376
+ }
377
+ }
378
+ .group-form > .actions {
379
+ display: flex;
380
+ justify-content: flex-end;
381
+ flex-wrap: wrap;
382
+ flex-shrink: 0;
383
+ gap: 0.75rem;
384
+ background: #fff;
385
+ margin-top: 0;
386
+ padding: 0.75rem 0;
387
+ border-top: 1px solid #e2e8f0;
388
+ .button {
389
+ margin: 0;
390
+ }
391
+ }
392
+ .group-members {
393
+ overflow-x: auto;
394
+ margin-top: 1rem;
395
+ }
396
+ .group-members td {
397
+ overflow-wrap: anywhere;
398
+ }
399
+ .negative.button {
400
+ background: #e42135;
401
+ color: #fff;
402
+ }
403
+ .negative.button:hover {
404
+ background: #bb182a;
405
+ }
406
+ .true-modal-close[disabled] {
407
+ opacity: 0.45;
408
+ cursor: not-allowed;
409
+ }
410
+ .selection.dropdown {
411
+ min-width: 0;
412
+ }
413
+ .selection.dropdown .menu {
414
+ position: static;
415
+ max-height: 12rem;
416
+ }
417
+ .disabled,
418
+ [disabled] {
419
+ cursor: not-allowed;
420
+ }
421
+ }
422
+ @media (hover: none), (pointer: coarse) {
423
+ .td-group-card {
424
+ min-height: 12rem;
425
+ }
426
+ .td-group-card .gc-actions {
427
+ opacity: 1;
428
+ transform: none;
429
+ pointer-events: auto;
430
+ a {
431
+ min-width: 2.75rem;
432
+ max-width: 2.75rem;
433
+ justify-content: center;
434
+ height: 2.75rem;
435
+ }
436
+ }
437
+ }
438
+ @media (prefers-reduced-motion: reduce) {
439
+ .td-group-card,
440
+ .td-group-card::before,
441
+ .td-group-card::after,
442
+ .td-group-card .gc-avatar,
443
+ .td-group-card .gc-content h3,
444
+ .td-group-card .gc-actions,
445
+ .td-group-card .gc-actions a,
446
+ .td-group-card .gc-action-label,
447
+ .td-group-card .gc-count,
448
+ .td-group-card .gc-count-empty-marker,
449
+ .td-group-card .gc-count-label {
450
+ transition: none;
451
+ }
452
+ }
453
+
454
+ .ui.modal.group-modal--info {
455
+ > .content {
456
+ display: flex;
457
+ flex-direction: column;
458
+ min-height: 0;
459
+ overflow: hidden;
460
+ padding: 1.25rem 1.5rem;
461
+ }
462
+ h3 {
463
+ margin: 1rem 0 0.5rem;
464
+ font-size: 1rem;
465
+ }
466
+ .group-members {
467
+ min-height: 0;
468
+ overflow: auto;
469
+ margin-top: 0;
470
+ }
471
+ .group-users-table.ui.table {
472
+ border: 0;
473
+ border-radius: 0;
474
+ font-size: 0.85rem;
475
+ thead {
476
+ position: sticky;
477
+ top: 0;
478
+ z-index: 1;
479
+ background: #fff;
480
+ }
481
+ th {
482
+ padding: 0.5rem 0.65rem;
483
+ background: transparent;
484
+ border: 0;
485
+ border-bottom: 1px solid #e2e8f0;
486
+ color: #475569;
487
+ }
488
+ td {
489
+ padding: 0.4rem 0.65rem;
490
+ line-height: 1.3;
491
+ }
492
+ tbody tr:hover {
493
+ background: #f8fafc;
494
+ }
495
+ .ui.button {
496
+ margin: 0;
497
+ }
498
+ a:focus-visible,
499
+ th:focus-visible {
500
+ outline: 2px solid var(--td-card-accent, #002057);
501
+ outline-offset: -2px;
502
+ }
503
+ }
504
+ .group-column-heading {
505
+ display: inline-flex;
506
+ align-items: center;
507
+ gap: 0.65rem;
508
+ flex-wrap: wrap;
509
+ }
510
+ .group-column-heading .ui.input {
511
+ width: 100%;
512
+ min-width: 8rem;
513
+ font-size: 0.85rem;
514
+ }
515
+ .group-column-heading .ui.input input {
516
+ min-width: 0;
517
+ padding: 0.5rem 2rem 0.5rem 0.65rem;
518
+ }
519
+ }
520
+ .ui.modal.group-modal--delete {
521
+ width: min(28rem, calc(100vw - 32px));
522
+ > .header:not(.ui) {
523
+ font-size: 1.75rem;
524
+ line-height: 1.25;
525
+ text-transform: none;
526
+ }
527
+ p {
528
+ overflow-wrap: anywhere;
529
+ }
530
+ > .actions .ui.negative.button {
531
+ background: var(--td-danger, #b91c1c);
532
+ }
533
+ .group-danger-text {
534
+ color: var(--td-danger, #b91c1c);
535
+ font-weight: 600;
536
+ }
537
+ }
538
+
539
+ @media (max-width: 767px) {
540
+ .td-group-card .gc-content h3,
541
+ .td-group-card .gc-name,
542
+ .td-group-card .gc-description {
543
+ -webkit-line-clamp: 1;
544
+ flex-shrink: 0;
545
+ max-width: 100%;
546
+ }
547
+ }
548
+
549
+ .ui.modal.group-modal--info {
550
+ width: min(80rem, calc(100vw - 32px));
551
+ }
552
+ .ui.dimmer.group-info-dimmer {
553
+ padding: 0;
554
+ > .ui.modal.group-modal--info {
555
+ margin: var(--group-modal-gap) auto !important;
556
+ }
557
+ }
558
+ .ui.modal.group-modal--info .group-users-table.ui.table {
559
+ table-layout: auto;
560
+ min-width: 34rem;
561
+ th,
562
+ td {
563
+ width: auto;
564
+ }
565
+ }
566
+ .ui.modal.group-modal--form {
567
+ width: min(64rem, calc(100vw - 32px));
568
+ > .content {
569
+ display: flex;
570
+ overflow: hidden;
571
+ padding: 0 1.5rem;
572
+ }
573
+ .group-form {
574
+ flex: 1 1 auto;
575
+ min-width: 0;
576
+ }
577
+ .group-form-fields {
578
+ flex: 1 1 auto;
579
+ grid-template-columns: minmax(0, 1fr) minmax(0, 2.3fr);
580
+ min-height: 0;
581
+ overflow-y: auto;
582
+ padding: 1rem 0;
583
+ align-content: start;
584
+ }
585
+ .group-form-fields > .field:first-child {
586
+ grid-column: 1 / -1;
587
+ margin-bottom: 1rem;
588
+ }
589
+ .group-form-fields > .field:nth-child(3) {
590
+ grid-column: auto;
591
+ }
592
+ .ui.form .field > label {
593
+ font-size: 0.9rem;
594
+ margin-bottom: 0.35rem;
595
+ color: #334155;
596
+ }
597
+ .ui.form input,
598
+ .ui.form textarea,
599
+ .ui.form select {
600
+ padding: 0.65rem 0.75rem;
601
+ border-radius: 0.5rem;
602
+ font-size: 0.95rem;
603
+ }
604
+ .ui.form textarea {
605
+ min-height: 4.5rem;
606
+ resize: vertical;
607
+ }
608
+ .ui.form .field.group-name-field {
609
+ position: relative;
610
+ > label {
611
+ position: absolute;
612
+ top: 0;
613
+ left: 0;
614
+ margin: 0;
615
+ color: #64748b;
616
+ font-size: 20px;
617
+ line-height: 1.4;
618
+ transform: translateY(1.65rem);
619
+ transform-origin: top left;
620
+ transition:
621
+ transform 180ms ease,
622
+ color 180ms ease;
623
+ cursor: text;
624
+ }
625
+ input {
626
+ min-height: 4.6rem;
627
+ padding: 1.65rem 0 0.65rem;
628
+ border: 0;
629
+ border-bottom: 1px solid #cbd5e1;
630
+ border-radius: 0;
631
+ background: transparent;
632
+ box-shadow: none;
633
+ color: #0f172a;
634
+ font-size: 24px;
635
+ font-weight: 700;
636
+ line-height: 1.4;
637
+ transition: border-color 180ms ease;
638
+ &::placeholder {
639
+ color: transparent;
640
+ opacity: 0;
641
+ }
642
+ &:focus {
643
+ border-bottom-color: var(--td-card-accent, #002057);
644
+ }
645
+ }
646
+ &:focus-within > label,
647
+ &.group-name-field--filled > label {
648
+ color: var(--td-card-accent, #002057);
649
+ transform: translateY(0) scale(0.7);
650
+ }
651
+ &.error {
652
+ > label {
653
+ color: #9f3a38;
654
+ }
655
+ input {
656
+ border-bottom-color: #9f3a38;
657
+ }
658
+ }
659
+ }
660
+ .group-member-picker {
661
+ grid-column: 1 / -1;
662
+ display: grid;
663
+ grid-template-columns: minmax(10rem, 1fr) minmax(0, 3fr);
664
+ gap: 1rem;
665
+ &.group-member-picker--without-filters {
666
+ grid-template-columns: minmax(0, 1fr);
667
+ }
668
+ }
669
+ .group-member-filters {
670
+ padding-right: 1rem;
671
+ border-right: 1px solid #e2e8f0;
672
+ min-width: 0;
673
+ }
674
+ .group-member-selection {
675
+ min-width: 0;
676
+ }
677
+ .group-member-filters .field:last-child {
678
+ margin-bottom: 0;
679
+ }
680
+ .group-member-filters .ui.dropdown {
681
+ width: 100%;
682
+ min-width: 0;
683
+ }
684
+ }
685
+ @media (max-width: 767px) {
686
+ .ui.modal.group-modal--form .group-member-picker {
687
+ grid-template-columns: minmax(0, 1fr);
688
+ }
689
+ .ui.modal.group-modal--form .group-member-filters {
690
+ padding-right: 0;
691
+ border-right: 0;
692
+ }
693
+ }
694
+
695
+ .ui.modal.group-modal--info > .header:not(.ui) {
696
+ min-height: 5.5rem;
697
+ padding: 0 3.5rem 0 0;
698
+ gap: 0;
699
+ font-size: 1.9rem;
700
+ line-height: 1.2;
701
+ > .icon {
702
+ display: inline-flex;
703
+ align-items: center;
704
+ justify-content: center;
705
+ box-sizing: content-box;
706
+ width: 48px;
707
+ height: 48px;
708
+ padding: 20px 24px;
709
+ font-size: 48px;
710
+ line-height: 1;
711
+ }
712
+ .true-modal-heading {
713
+ display: flex;
714
+ flex-direction: column;
715
+ justify-content: center;
716
+ min-height: 4rem;
717
+ padding: 0.75rem 0;
718
+ }
719
+ .true-modal-subtitle {
720
+ font-size: 1rem;
721
+ line-height: 1.4;
722
+ min-height: 1.4em;
723
+ white-space: pre-wrap;
724
+ overflow-wrap: anywhere;
725
+ max-height: 4.2em;
726
+ overflow-y: auto;
727
+ &:empty {
728
+ display: none;
729
+ }
730
+ }
731
+ }
732
+ .ui.modal.group-modal--form {
733
+ .group-member-picker {
734
+ border-top: 1px solid #e2e8f0;
735
+ padding-top: 1rem;
736
+ margin-top: 0.25rem;
737
+ }
738
+ .group-member-selection .ui.selection.dropdown {
739
+ min-height: 2.75rem;
740
+ }
741
+ .group-selected-members {
742
+ border: 1px solid #e2e8f0;
743
+ border-radius: 0.5rem;
744
+ margin-top: 0.75rem;
745
+ h4 {
746
+ font-size: 0.9rem;
747
+ margin: 0;
748
+ padding: 0.65rem 0.75rem;
749
+ background: #f8fafc;
750
+ border-radius: 0.5rem 0.5rem 0 0;
751
+ }
752
+ h4 span,
753
+ small {
754
+ color: #64748b;
755
+ font-weight: 400;
756
+ }
757
+ ul {
758
+ list-style: none;
759
+ padding: 0;
760
+ margin: 0;
761
+ max-height: 14rem;
762
+ overflow-y: auto;
763
+ }
764
+ li {
765
+ display: flex;
766
+ align-items: center;
767
+ justify-content: space-between;
768
+ gap: 0.5rem;
769
+ padding: 0.4rem 0.75rem;
770
+ border-top: 1px solid #e2e8f0;
771
+ }
772
+ li > span {
773
+ min-width: 0;
774
+ overflow-wrap: anywhere;
775
+ }
776
+ strong {
777
+ font-size: 0.9rem;
778
+ }
779
+ small {
780
+ display: block;
781
+ font-size: 0.8rem;
782
+ }
783
+ .ui.button {
784
+ flex-shrink: 0;
785
+ margin: 0;
786
+ min-width: 44px;
787
+ min-height: 44px;
788
+ padding: 0.4rem;
789
+ font-size: 0.75rem;
790
+ }
791
+ p {
792
+ padding: 0.75rem;
793
+ color: #64748b;
794
+ font-size: 0.9rem;
795
+ }
796
+ }
797
+ }
798
+ @media (max-width: 767px) {
799
+ .ui.modal.group-modal--form .group-form-fields {
800
+ grid-template-columns: minmax(0, 1fr);
801
+ }
802
+ }
803
+ @media (prefers-reduced-motion: reduce) {
804
+ .ui.modal.group-modal--form .ui.form .field.group-name-field {
805
+ > label,
806
+ input {
807
+ transition: none;
808
+ }
809
+ }
810
+ }
811
+
812
+ .ui.modal.group-modal--info .group-users-table.ui.sortable.table thead th:hover,
813
+ .ui.modal.group-modal--info
814
+ .group-users-table.ui.sortable.table
815
+ thead
816
+ th.sorted {
817
+ background: transparent;
818
+ border-left: 0;
819
+ border-right: 0;
820
+ border-top: 0;
821
+ }
822
+
823
+ .ui.modal.group-modal--form .group-member-picker {
824
+ .ui.selection.dropdown {
825
+ min-height: 2.75rem;
826
+ padding-right: 2.5rem;
827
+ border-radius: 0.5rem;
828
+ > .dropdown.icon {
829
+ top: 0;
830
+ right: 0;
831
+ width: 2.5rem;
832
+ height: 2.75rem;
833
+ display: flex;
834
+ align-items: center;
835
+ justify-content: center;
836
+ padding: 0;
837
+ margin: 0;
838
+ line-height: 1;
839
+ transform: none;
840
+ }
841
+ > input.search {
842
+ padding-right: 2.5rem;
843
+ }
844
+ &.active {
845
+ z-index: 21;
846
+ }
847
+ }
848
+ .ui.multiple.dropdown > .label {
849
+ max-width: 100%;
850
+ white-space: normal;
851
+ overflow-wrap: anywhere;
852
+ }
853
+ }
854
+
855
+ .ui.modal.group-modal--form .group-dropdown-anchor {
856
+ margin-bottom: 1rem;
857
+ }
858
+ .ui.modal.group-modal--form .group-dropdown-anchor:last-child {
859
+ margin-bottom: 0;
860
+ }
861
+ .ui.dropdown > .menu.group-dropdown-layer {
862
+ overflow-y: auto;
863
+ border: 1px solid #96c8da;
864
+ border-radius: 0.5rem;
865
+ background: #fff;
866
+ box-shadow: 0 6px 14px rgba(15, 23, 42, 0.14);
867
+ }
868
+ .ui.dropdown > .menu.group-dropdown-layer:popover-open {
869
+ display: block;
870
+ }
871
+
872
+ .ui.modal.group-modal--form .group-form > .actions .group-delete-action {
873
+ margin-right: auto;
874
+ color: #e42135;
875
+ background: transparent;
876
+ text-transform: uppercase;
877
+ }
878
+ .ui.modal.group-modal--info .group-members-empty {
879
+ padding: 2rem 1rem;
880
+ text-align: center;
881
+ > .icon {
882
+ color: #64748b;
883
+ font-size: 2rem;
884
+ }
885
+ h3 {
886
+ font-size: 1.15rem;
887
+ color: #334155;
888
+ }
889
+ p {
890
+ color: #64748b;
891
+ margin-bottom: 1.25rem;
892
+ }
893
+ }
894
+ .ui.modal.group-modal--form .group-add-control {
895
+ display: flex;
896
+ align-items: flex-end;
897
+ gap: 0.75rem;
898
+ .group-dropdown-anchor {
899
+ flex: 1 1 auto;
900
+ min-width: 0;
901
+ margin-bottom: 0;
902
+ }
903
+ .group-add-all.ui.button {
904
+ flex: 0 0 auto;
905
+ min-height: 44px;
906
+ margin: 0;
907
+ padding: 0.75rem;
908
+ font-size: 0.85rem;
909
+ color: #334155;
910
+ background: #f1f5f9;
911
+ }
912
+ }
913
+ @keyframes group-member-added {
914
+ from {
915
+ background-color: fade(@secondaryColor, 14%);
916
+ }
917
+ to {
918
+ background-color: transparent;
919
+ }
920
+ }
921
+ .group-selected-members li.group-member-added {
922
+ animation: group-member-added 900ms ease-out;
923
+ }
924
+ @media (prefers-reduced-motion: reduce) {
925
+ .group-selected-members li.group-member-added {
926
+ animation: none;
927
+ background-color: fade(@secondaryColor, 14%);
928
+ }
929
+ }
930
+ @media (max-width: 767px) {
931
+ .ui.modal.group-modal--info > .header:not(.ui) {
932
+ font-size: 1.5rem;
933
+ > .icon {
934
+ width: 32px;
935
+ height: 32px;
936
+ padding: 16px;
937
+ font-size: 32px;
938
+ }
939
+ }
940
+ .ui.modal.group-modal--form .group-add-control {
941
+ flex-direction: column;
942
+ align-items: stretch;
943
+ .group-dropdown-anchor {
944
+ flex-basis: auto;
945
+ }
946
+ }
947
+ .ui.modal.group-modal--form .group-form > .actions .group-delete-action {
948
+ flex-basis: 100%;
949
+ text-align: left;
950
+ }
951
+ }
952
+ @media (max-width: 479px) {
953
+ .ui.modal.group-modal--form .group-form > .actions {
954
+ gap: 0.4rem;
955
+ .ui.button {
956
+ min-width: 0;
957
+ padding: 0.75rem 0.5rem;
958
+ font-size: 0.75rem;
959
+ }
960
+ }
961
+ }
962
+ .ui.modal.group-modal--form .group-selected-members {
963
+ .group-member-identity {
964
+ display: flex;
965
+ align-items: center;
966
+ gap: 0.65rem;
967
+ }
968
+ .group-member-avatar {
969
+ display: inline-flex;
970
+ align-items: center;
971
+ justify-content: center;
972
+ flex: 0 0 2rem;
973
+ width: 2rem;
974
+ height: 2rem;
975
+ border-radius: 50%;
976
+ background: #eef2f6;
977
+ color: #334155;
978
+ font-size: 0.75rem;
979
+ font-weight: 700;
980
+ }
981
+ .group-member-details {
982
+ min-width: 0;
983
+ }
984
+ .group-member-name {
985
+ display: flex;
986
+ align-items: center;
987
+ gap: 0.4rem;
988
+ }
989
+ .group-member-type {
990
+ display: inline-flex;
991
+ flex-shrink: 0;
992
+ color: #64748b;
993
+ cursor: help;
994
+ font-size: 0.75rem;
995
+ border-radius: 0.2rem;
996
+ &:focus-visible {
997
+ outline: 2px solid var(--td-card-accent, #002057);
998
+ outline-offset: 3px;
999
+ }
1000
+ .icon {
1001
+ margin: 0;
1002
+ }
1003
+ }
1004
+ }
1005
+
1006
+ .ui.modal.group-modal--new > .header:not(.ui) {
1007
+ background: @secondaryColor;
1008
+ color: #fff;
1009
+ }