@oat-sa/tao-core-ui 3.23.0 → 3.24.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 (31) hide show
  1. package/dist/figure/FigureStateActive.js +64 -32
  2. package/dist/image/ImgStateActive/initHelper.js +64 -32
  3. package/dist/image/ImgStateActive.js +64 -32
  4. package/dist/previewer.js +1 -1
  5. package/dist/resourcemgr/assetSearch.js +793 -0
  6. package/dist/resourcemgr/assetSearchContract.js +477 -0
  7. package/dist/resourcemgr/css/resourcemgr.css +1137 -97
  8. package/dist/resourcemgr/css/resourcemgr.css.map +1 -1
  9. package/dist/resourcemgr/fileBrowser.js +456 -79
  10. package/dist/resourcemgr/filePreview.js +40 -4
  11. package/dist/resourcemgr/fileSelector.js +362 -92
  12. package/dist/resourcemgr.js +309 -57
  13. package/dist/searchModal/advancedSearch.js +233 -31
  14. package/package.json +15 -6
  15. package/src/image/ImgStateActive/initHelper.js +69 -31
  16. package/src/previewer.js +1 -1
  17. package/src/resourcemgr/assetSearch.js +847 -0
  18. package/src/resourcemgr/assetSearchContract.js +489 -0
  19. package/src/resourcemgr/css/resourcemgr.css +1137 -97
  20. package/src/resourcemgr/css/resourcemgr.css.map +1 -1
  21. package/src/resourcemgr/fileBrowser.js +470 -91
  22. package/src/resourcemgr/filePreview.js +46 -4
  23. package/src/resourcemgr/fileSelector.js +338 -46
  24. package/src/resourcemgr/scss/resourcemgr.scss +1351 -88
  25. package/src/resourcemgr/tpl/advanced-search.tpl +10 -0
  26. package/src/resourcemgr/tpl/fileSelect.tpl +25 -28
  27. package/src/resourcemgr/tpl/folder.tpl +4 -1
  28. package/src/resourcemgr/tpl/layout.tpl +113 -54
  29. package/src/resourcemgr/tpl/rootFolder.tpl +3 -1
  30. package/src/resourcemgr.js +289 -47
  31. package/src/searchModal/advancedSearch.js +242 -31
@@ -2,73 +2,189 @@
2
2
 
3
3
  /* tooltip */
4
4
  .resourcemgr {
5
+ // Figma Resource Manager palette (Insert Media modal)
6
+ $rmDark: #222222;
7
+ $rmLight: #ffffff;
8
+ $rmMidGray: #dddfe2;
9
+ // Figma heading fill #F6F7F7; nearest global token $uiReviewPanelBg (#f2f2f2)
10
+ $rmHeaderBg: #f6f7f7;
11
+ $rmActive: #286d9c;
12
+ $rmDarkBar: #333333;
5
13
 
6
- $activeColor: whiten($uiClickableHoverBg, 0.9);
7
- $rmBrowserWidth: 260;
8
- $rmPreviewWidth: 300;
14
+ // Local palette aliases ($rm*) — do not shadow global theme token names
15
+ $rmText: $rmDark;
16
+ $rmSurface: $rmLight;
17
+ $rmBorder: $rmMidGray;
18
+ $rmChromeBg: $rmHeaderBg;
19
+ $rmClickableBg: $rmLight;
20
+ $rmInfo: $rmActive;
21
+ $rmClickableHover: $rmActive;
22
+ $rmClickableActive: $rmActive;
23
+ $rmActiveRow: mix($rmLight, $rmActive, 90%);
24
+ $rmSidePanelWidth: 300;
25
+ $rmBrowserWidth: $rmSidePanelWidth;
26
+ $rmPreviewWidth: $rmSidePanelWidth;
9
27
  $rmMaxContainerWidth: 1400;
10
28
  $rmSideMargin: 40;
11
29
 
30
+ $rmHeaderRadius: 4px;
31
+ // Top chrome row (Search | Assets | Preview): pad + small btn (25px) → shared bar height.
32
+ $rmPanelChromePadY: 8px;
33
+ $rmPanelChromePadX: 10px;
34
+ $rmPanelChromeMinHeight: 41px;
35
+ $rmControlRadius: 4px;
36
+
12
37
  width: 90%;
13
38
  height: 100%;
14
39
  max-width: $rmMaxContainerWidth * 1px;
40
+ color: $rmText;
41
+ background-color: $rmSurface;
42
+ border-color: $rmBorder;
15
43
 
44
+ // jQuery UI modal sets inline `top` — !important keeps RM vertically centered in viewport
16
45
  #mediaManager &.modal {
17
46
  max-height: 700px;
18
47
  top: 40px !important;
19
48
  bottom: 40px;
20
49
  padding: 0;
50
+ border: 1px solid $rmBorder;
51
+ background-color: $rmSurface;
52
+ border-radius: 0;
21
53
  }
22
54
 
23
55
  & > h2 {
24
56
  @include font-size(15);
25
57
  margin: 20px 40px 10px;
26
58
  height: 40px;
59
+ color: $rmText;
60
+ }
61
+
62
+ // Align global btn-info with Figma active blue inside RM
63
+ .btn-info {
64
+ color: $rmLight;
65
+ background-color: $rmActive;
66
+ border: 1px solid $rmActive;
67
+ text-shadow: none;
68
+ box-shadow: none;
69
+
70
+ &:hover,
71
+ &:focus,
72
+ &:active {
73
+ color: $rmLight;
74
+ background-color: $rmActive;
75
+ border-color: $rmActive;
76
+ text-shadow: none;
77
+ box-shadow: none;
78
+ opacity: 0.9;
79
+ }
80
+
81
+ &.btn-secondary,
82
+ &.btn-transparent {
83
+ color: $rmActive;
84
+ background-color: $rmLight;
85
+ border: 1px solid $rmActive;
86
+ text-shadow: none;
87
+ box-shadow: none;
88
+
89
+ &:hover,
90
+ &:focus,
91
+ &:active {
92
+ color: $rmActive;
93
+ background-color: $rmLight;
94
+ border-color: $rmActive;
95
+ text-shadow: none;
96
+ box-shadow: none;
97
+ opacity: 0.9;
98
+ }
99
+ }
100
+ }
101
+
102
+ .btn-success {
103
+ text-shadow: none;
104
+ box-shadow: none;
27
105
  }
28
106
 
29
107
  .file-wrapper {
30
108
  overflow-y: auto;
31
109
  margin: 0 #{$rmSideMargin * 1px};
110
+ // Keep in sync with .asset-search max-height chrome compensation below.
32
111
  height: calc(100% - 40px - 40px - 40px); // full height - h2.padding - h2.height - modal.bottom-padding
33
- @include flex-container();
112
+ display: flex;
113
+ flex-direction: column;
114
+ min-height: 0;
115
+ }
116
+
117
+ .file-panels {
118
+ @include flex-container;
119
+
120
+ flex: 1 1 auto;
121
+ min-height: 0;
122
+ height: 100%;
123
+ gap: 0;
34
124
  }
35
125
 
36
126
  .file-browser {
37
127
  @include simple-flex-box($rmBrowserWidth * 1px);
128
+ width: $rmBrowserWidth * 1px;
129
+ max-width: $rmBrowserWidth * 1px;
130
+ min-width: 0;
131
+
132
+ // Keep select2 criteria dropdown usable (appended near control / body)
133
+ overflow: visible;
38
134
  }
39
135
 
40
136
  .file-preview {
41
137
  @include simple-flex-box($rmPreviewWidth * 1px);
138
+ width: $rmPreviewWidth * 1px;
139
+ max-width: $rmPreviewWidth * 1px;
140
+ min-width: 0;
42
141
  }
43
142
 
44
143
  .file-selector {
45
144
  @include simple-flex-box(auto);
46
- max-width: calc(100% - #{($rmBrowserWidth + $rmPreviewWidth) *1px});
145
+ max-width: calc(100% - #{($rmBrowserWidth + $rmPreviewWidth) *1px} - 20px);
146
+ // margin - border - padding: side separators only (no top border)
147
+ margin: 0 10px;
148
+ border: 0;
149
+ border-left: 1px solid $rmBorder;
150
+ border-right: 1px solid $rmBorder;
151
+ padding: 0 10px;
152
+ box-sizing: border-box;
47
153
  }
48
154
 
49
- .file-browser, .file-selector, .file-preview {
155
+ .file-panels .file-browser,
156
+ .file-panels .file-selector,
157
+ .file-panels .file-preview {
50
158
  position: relative;
51
159
  vertical-align: top;
52
- height: 100% !important;
53
- color: $textColor;
160
+ height: 100%;
161
+ min-height: 0;
162
+ color: $rmText;
163
+ border-radius: 0;
54
164
 
55
165
  h1 {
56
166
  @include font-size(16);
57
167
  line-height: 1.6;
58
168
 
59
- color: $textColor;
60
- margin-top: 1px;
61
- padding: 5px;
169
+ display: flex;
170
+ align-items: center;
171
+ box-sizing: border-box;
172
+ min-height: $rmPanelChromeMinHeight;
173
+ color: $rmText;
174
+ margin: 0;
175
+ padding: $rmPanelChromePadY $rmPanelChromePadX;
176
+ border-radius: $rmHeaderRadius $rmHeaderRadius 0 0;
62
177
  }
63
178
  h2 {
64
179
  @include font-size(13);
65
180
  line-height: 1.3;
66
- background-color: $uiHeaderBg;
67
- color: $textColor;
68
- margin-top: 1px;
181
+ background-color: $rmChromeBg;
182
+ color: $rmText;
183
+ margin: 0;
69
184
  padding: 6px;
70
185
  position: relative;
71
186
  clear: both;
187
+ border-radius: $rmHeaderRadius $rmHeaderRadius 0 0;
72
188
 
73
189
  &.toggler{
74
190
  cursor: pointer;
@@ -82,14 +198,741 @@
82
198
  }
83
199
 
84
200
  .file-browser{
85
- background-color: $uiClickableDefaultBg;
86
- & > h1 {
87
- background-color: $uiHeaderBg;
201
+ background-color: $rmClickableBg;
202
+ display: flex;
203
+ flex-direction: column;
204
+ min-height: 0;
205
+
206
+ & > h1.resources-title {
207
+ background-color: $rmChromeBg;
208
+ flex: 0 0 auto;
209
+ border-radius: $rmHeaderRadius $rmHeaderRadius 0 0;
210
+ }
211
+
212
+ .asset-search {
213
+ // Grow with filters; do not shrink under tree flex pressure until max-height.
214
+ flex: 0 0 auto;
215
+ min-width: 0;
216
+ max-width: 100%;
217
+ // Cap at 70% of the whole modal height (not the left column alone).
218
+ // file-browser height ≈ modal − 120px chrome → 0.7×modal = 70% + 84px of this parent.
219
+ max-height: calc(70% + 84px);
220
+ display: flex;
221
+ flex-direction: column;
222
+ min-height: 0;
223
+ color: $rmText;
224
+ padding: 0;
225
+ margin: 0 0 16px;
226
+ border: 0;
227
+ background-color: $rmChromeBg;
228
+ overflow: hidden;
229
+ position: relative;
230
+ z-index: 2;
231
+ border-radius: $rmHeaderRadius;
232
+
233
+ &.hidden,
234
+ &[hidden] {
235
+ display: none;
236
+ }
237
+
238
+ &.is-collapsed {
239
+ max-height: none;
240
+ overflow: visible;
241
+ margin-bottom: 16px;
242
+
243
+ .asset-search-body {
244
+ display: none;
245
+ }
246
+
247
+ .asset-search-header {
248
+ border-radius: $rmHeaderRadius;
249
+ outline: none;
250
+ }
251
+
252
+ .asset-search-toggle:focus:not(:focus-visible) {
253
+ outline: none;
254
+ }
255
+
256
+ .asset-search-toggle:focus-visible {
257
+ outline: 1px dotted $rmDarkBar;
258
+ }
259
+ }
260
+ }
261
+
262
+ .asset-search-header {
263
+ flex: 0 0 auto;
264
+ min-width: 0;
265
+ max-width: 100%;
266
+ background-color: $rmChromeBg;
267
+ padding: 0;
268
+ border-radius: $rmHeaderRadius $rmHeaderRadius 0 0;
269
+ overflow: hidden;
270
+ }
271
+
272
+ .asset-search-toggle {
273
+ display: flex;
274
+ // Search is the lead; scope/count/chevron share its baseline (bottom of glyphs).
275
+ align-items: baseline;
276
+ flex-wrap: nowrap;
277
+ gap: 8px;
278
+ width: 100%;
279
+ margin: 0;
280
+ padding: $rmPanelChromePadY $rmPanelChromePadX;
281
+ border: 0;
282
+ border-radius: 0;
283
+ background: transparent;
284
+ color: $rmText;
285
+ cursor: pointer;
286
+ text-align: left;
287
+ text-shadow: none;
288
+ box-shadow: none;
289
+ min-width: 0;
290
+ min-height: $rmPanelChromeMinHeight;
291
+ box-sizing: border-box;
292
+ font: inherit;
293
+ font-weight: normal;
294
+ line-height: 1.6;
295
+
296
+ &:hover,
297
+ &:active {
298
+ background: transparent;
299
+ color: $rmText;
300
+ opacity: 1;
301
+ text-shadow: none;
302
+ box-shadow: none;
303
+ }
304
+
305
+ &:focus {
306
+ outline: 1px dotted $rmDarkBar;
307
+ }
308
+ }
309
+
310
+ .asset-search-title {
311
+ @include font-size(16);
312
+
313
+ display: inline-block;
314
+ margin: 0;
315
+ padding: 0;
316
+ background: transparent;
317
+ color: $rmText;
318
+ line-height: 1.6;
319
+ flex: 0 0 auto;
320
+ white-space: nowrap;
321
+ font-weight: normal;
322
+ }
323
+
324
+ .asset-search-chevron {
325
+ @include font-size(12);
326
+
327
+ flex: 0 0 auto;
328
+ align-self: baseline;
329
+ margin-left: auto;
330
+ line-height: 1;
331
+ }
332
+
333
+ .asset-search-applied-count {
334
+ @include font-size(12);
335
+
336
+ display: inline-block;
337
+ margin: 0;
338
+ color: lighten($rmText, 25%);
339
+ font-weight: normal;
340
+ // Do not grow — keep count + chevron on the same line as Search.
341
+ flex: 0 1 auto;
342
+ min-width: 0;
343
+ white-space: nowrap;
344
+ overflow: hidden;
345
+ text-overflow: ellipsis;
346
+ line-height: 1.6;
347
+
348
+ &.hidden,
349
+ &[hidden] {
350
+ display: none;
351
+ }
352
+ }
353
+
354
+ .asset-search-scope {
355
+ @include font-size(12);
356
+
357
+ display: inline-flex;
358
+ align-items: baseline;
359
+ gap: 0.25em;
360
+ margin: 0;
361
+ min-width: 0;
362
+ max-width: 100%;
363
+ // Content width when the line fits; shrink (ellipsis on name) when it does not.
364
+ flex: 0 1 auto;
365
+ overflow: hidden;
366
+ color: lighten($rmText, 25%);
367
+ line-height: 1.6;
368
+ font-weight: normal;
369
+
370
+ &.hidden,
371
+ &[hidden] {
372
+ display: none;
373
+ }
374
+ }
375
+
376
+ .asset-search-scope-prefix {
377
+ flex: 0 0 auto;
378
+ white-space: nowrap;
379
+ }
380
+
381
+ .asset-search-scope-name {
382
+ flex: 0 1 auto;
383
+ min-width: 0;
384
+ overflow: hidden;
385
+ text-overflow: ellipsis;
386
+ white-space: nowrap;
387
+ color: $rmText;
388
+ font-weight: bold;
389
+ }
390
+
391
+ .asset-search-scope-subfolders {
392
+ flex: 0 0 auto;
393
+ white-space: nowrap;
394
+
395
+ &.hidden,
396
+ &[hidden] {
397
+ display: none;
398
+ }
399
+ }
400
+
401
+ .asset-search-body {
402
+ // Fill capped .asset-search so filters can scroll after max-height is hit.
403
+ flex: 1 1 auto;
404
+ min-height: 0;
405
+ display: flex;
406
+ flex-direction: column;
407
+ padding: 14px 12px 16px;
408
+ overflow: hidden;
409
+ background-color: $rmChromeBg;
410
+ }
411
+
412
+ .asset-search-field {
413
+ position: relative;
414
+ display: flex;
415
+ align-items: center;
416
+ flex: 0 0 auto;
417
+ padding: 0;
418
+ }
419
+
420
+ .asset-search-field .icon-find {
421
+ position: absolute;
422
+ left: 10px;
423
+ color: lighten($rmText, 40%);
424
+ pointer-events: none;
425
+
426
+ @include font-size(14);
427
+ }
428
+
429
+ .asset-search-input {
430
+ width: 100%;
431
+ height: 32px;
432
+ padding: 6px 10px 6px 30px;
433
+ border: 1px solid $rmBorder;
434
+ border-radius: $rmControlRadius;
435
+ background-color: $rmSurface;
436
+ box-sizing: border-box;
437
+
438
+ &:focus {
439
+ border-color: $rmInfo;
440
+ outline: none;
441
+ }
442
+ }
443
+
444
+ .asset-search-label {
445
+ @include visuallyHidden;
446
+ }
447
+
448
+ .asset-search-filters {
449
+ // Grow with filter chips; scroll only after .asset-search hits its modal-relative max-height.
450
+ flex: 1 1 auto;
451
+ min-height: 48px;
452
+ margin-top: 8px;
453
+ overflow-x: hidden;
454
+ overflow-y: auto;
455
+ position: relative;
456
+ z-index: 3;
457
+ }
458
+
459
+ .asset-search .advanced-search-container {
460
+ padding: 0;
461
+ }
462
+
463
+ .asset-search .add-criteria-container {
464
+ display: flex;
465
+ flex-wrap: wrap;
466
+ align-items: center;
467
+ position: relative;
468
+ padding: 0;
469
+ margin: 8px 0 0;
470
+ min-height: 24px;
471
+
472
+ // Must beat this block's `display: flex` (higher specificity than
473
+ // `.advanced-search-container .add-criteria-container.disabled`).
474
+ // Otherwise the global `.disabled, button[disabled]` chrome paints a
475
+ // gray non-working Add filter instead of hiding it.
476
+ &.disabled {
477
+ display: none;
478
+ }
479
+ }
480
+
481
+ .asset-search .add-criteria-container a.toggle-modal-button {
482
+ display: inline-flex;
483
+ align-items: center;
484
+ gap: 4px;
485
+ margin: 0;
486
+ padding: 0;
487
+ color: $rmInfo;
488
+ text-decoration: none;
489
+ font-weight: normal;
490
+ line-height: 1;
491
+ vertical-align: middle;
492
+
493
+ @include font-size(13);
494
+
495
+ &:hover {
496
+ text-decoration: underline;
497
+ }
498
+ }
499
+
500
+ .asset-search .add-criteria-container .icon-plus,
501
+ .asset-search .add-criteria-container .icon-add {
502
+ display: inline-flex;
503
+ align-items: center;
504
+ justify-content: center;
505
+ line-height: 1;
506
+ flex: 0 0 auto;
507
+ margin: 0;
508
+
509
+ @include font-size(12);
510
+
511
+ &:before {
512
+ line-height: 1;
513
+ vertical-align: middle;
514
+ }
515
+ }
516
+
517
+ .asset-search .applied-filters-summary {
518
+ border: 0;
519
+ border-radius: 0;
520
+ background: transparent;
521
+ height: auto;
522
+ padding: 0;
523
+ margin: 0;
524
+ color: lighten($rmText, 40%);
525
+ cursor: pointer;
526
+ font-weight: normal;
527
+ line-height: 1;
528
+ text-shadow: none;
529
+ box-shadow: none;
530
+
531
+ @include font-size(12);
532
+
533
+ &:not(.hidden)::before {
534
+ content: '\00b7';
535
+ display: inline-block;
536
+ margin: 0 6px;
537
+ color: lighten($rmText, 55%);
538
+ }
539
+
540
+ &.hidden {
541
+ display: none;
542
+ }
543
+
544
+ &:hover,
545
+ &:active {
546
+ color: $rmText;
547
+ text-decoration: underline;
548
+ background: transparent;
549
+ text-shadow: none;
550
+ box-shadow: none;
551
+ }
552
+
553
+ &:focus {
554
+ outline: 1px dotted $rmDarkBar;
555
+ }
556
+ }
557
+
558
+ .asset-search .criteria-select2 {
559
+ visibility: hidden;
560
+ position: absolute;
561
+ left: 0;
562
+ top: 0;
563
+ width: calc(100% - 8px);
564
+ }
565
+
566
+ .asset-search .advanced-criteria-container {
567
+ padding-right: 0;
568
+ max-height: none;
569
+ display: flex;
570
+ flex-direction: column;
571
+ gap: 8px;
572
+ }
573
+
574
+ .asset-search .filter-container {
575
+ margin-bottom: 0;
576
+ position: relative;
577
+ }
578
+
579
+ .asset-search .filter-spoiler-wrapper {
580
+ padding: 0;
581
+ border: 0;
582
+ background: transparent;
583
+ }
584
+
585
+ .asset-search .filter-spoiler {
586
+ border: 1px solid $rmBorder;
587
+ border-radius: $rmControlRadius;
588
+ background: $rmSurface;
589
+ overflow: hidden;
590
+ }
591
+
592
+ .asset-search .filter-spoiler.is-open .filter-spoiler-body {
593
+ display: block;
594
+ }
595
+
596
+ .asset-search .filter-spoiler.is-open .filter-spoiler-header {
597
+ border-bottom: 1px solid $rmBorder;
598
+ }
599
+
600
+ .asset-search .filter-spoiler:not(.is-open) .filter-spoiler-body {
601
+ display: none;
602
+ }
603
+
604
+ .asset-search .filter-spoiler:not(.is-open) .filter-spoiler-header {
605
+ border-bottom: 0;
606
+ }
607
+
608
+ .asset-search .filter-spoiler-header {
609
+ display: flex;
610
+ align-items: center;
611
+ gap: 8px;
612
+ padding: 10px;
613
+ background-color: $rmSurface;
614
+ outline: none;
615
+ box-shadow: none;
616
+
617
+ &:hover,
618
+ &:focus,
619
+ &:focus-within {
620
+ background-color: $rmSurface;
621
+ outline: none;
622
+ box-shadow: none;
623
+ }
624
+ }
625
+
626
+ .asset-search .filter-spoiler-toggle {
627
+ display: flex;
628
+ align-items: center;
629
+ justify-content: flex-start;
630
+ flex: 1 1 auto;
631
+ min-width: 0;
632
+ height: auto;
633
+ padding: 0;
634
+ border: 0;
635
+ border-radius: 0;
636
+ background: transparent;
637
+ color: $rmText;
638
+ font-weight: bold;
639
+ line-height: 1.3;
640
+ text-align: left;
641
+ text-shadow: none;
642
+ box-shadow: none;
643
+ cursor: pointer;
644
+
645
+ &:focus {
646
+ outline: none;
647
+ }
648
+
649
+ &:focus-visible {
650
+ outline: 1px dotted $rmDarkBar;
651
+ }
652
+
653
+ &:hover,
654
+ &:active {
655
+ background: transparent;
656
+ text-shadow: none;
657
+ box-shadow: none;
658
+ }
659
+ }
660
+
661
+ .asset-search .filter-spoiler-title {
662
+ @include font-size(13);
663
+
664
+ overflow: hidden;
665
+ text-overflow: ellipsis;
666
+ white-space: nowrap;
667
+ text-shadow: none;
668
+ }
669
+
670
+ .asset-search .filter-spoiler-icon {
671
+ display: none;
672
+ }
673
+
674
+ .asset-search .filter-spoiler-delete {
675
+ flex: 0 0 16px;
676
+ width: 16px;
677
+ height: 16px;
678
+ padding: 0;
679
+ border: 0;
680
+ border-radius: 0;
681
+ background: transparent;
682
+ color: lighten($rmText, 40%);
683
+ cursor: pointer;
684
+ line-height: 1;
685
+ text-shadow: none;
686
+ box-shadow: none;
687
+ visibility: hidden;
688
+
689
+ @include font-size(14);
690
+
691
+ &:hover,
692
+ &:active {
693
+ color: $rmText;
694
+ background: transparent;
695
+ text-shadow: none;
696
+ box-shadow: none;
697
+ }
698
+
699
+ &:focus {
700
+ outline: none;
701
+ }
702
+
703
+ &:focus-visible {
704
+ outline: 1px dotted $rmDarkBar;
705
+ visibility: visible;
706
+ }
707
+ }
708
+
709
+ .asset-search .filter-spoiler.is-open .filter-spoiler-delete,
710
+ .asset-search .filter-spoiler-header:hover .filter-spoiler-delete {
711
+ visibility: visible;
712
+ }
713
+
714
+ .asset-search .filter-spoiler-body {
715
+ padding: 10px;
716
+ box-sizing: border-box;
717
+
718
+ > label,
719
+ > .criterion-container,
720
+ > fieldset {
721
+ display: block;
722
+ width: 100%;
723
+ min-width: 0;
724
+ box-sizing: border-box;
725
+ margin: 0;
726
+ }
727
+ }
728
+
729
+ .asset-search .filter-spoiler-body > label > .filter-label-text,
730
+ .asset-search .filter-spoiler-body > .criterion-container > .filter-label-text,
731
+ .asset-search .filter-spoiler-body > fieldset > legend {
732
+ @include visuallyHidden;
733
+ }
734
+
735
+ .asset-search .filter-spoiler-body .criteria-alias,
736
+ .asset-search .filter-spoiler-body .class-path {
737
+ display: none;
738
+ }
739
+
740
+ // RM metadata search is AND-only; logic radios are backoffice-only noise here.
741
+ // advancedSearch.css loads after resourcemgr.css and sets display:flex on this block.
742
+ .asset-search .logic-radio-group {
743
+ display: none !important;
744
+ }
745
+
746
+ // select2 sets inline width on init — only !important overrides it
747
+ .asset-search .filter-spoiler-body .select2-container {
748
+ width: 100% !important;
749
+ }
750
+
751
+ .asset-search .filter-spoiler-body .select2-choices {
752
+ min-height: 30px;
753
+ border-radius: $rmControlRadius;
754
+ }
755
+
756
+ // Replace select2 PNG sprite close (hover background-position flicker / stray pixels).
757
+ .asset-search .filter-spoiler-body .select2-container-multi .select2-choices .select2-search-choice {
758
+ overflow: hidden;
759
+ padding: 4px 24px 4px 8px;
760
+ line-height: 1.3;
761
+
762
+ &.select2-search-choice-focus {
763
+ background-color: blacken($uiClickableDefaultBg, 0.1);
764
+ }
765
+
766
+ .select2-search-choice-close {
767
+ background-image: none !important;
768
+ left: auto;
769
+ right: 4px;
770
+ top: 50%;
771
+ width: 14px;
772
+ height: 14px;
773
+ margin-top: -7px;
774
+ font-size: 0;
775
+ line-height: 1;
776
+ color: lighten($rmText, 40%);
777
+ text-indent: 0;
778
+
779
+ &:hover,
780
+ &:focus,
781
+ &:active {
782
+ background-image: none !important;
783
+ background-position: 0 0;
784
+ color: $rmText;
785
+ }
786
+
787
+ &:before {
788
+ @include tao-icon-setup;
789
+ @include icon-close;
790
+ @include font-size(12);
791
+
792
+ display: block;
793
+ line-height: 14px;
794
+ text-align: center;
795
+ }
796
+ }
797
+ }
798
+
799
+ .asset-search .filter-spoiler-body input[type='text'],
800
+ .asset-search .filter-spoiler-body textarea {
801
+ display: block;
802
+ width: 100%;
803
+ max-width: 100%;
804
+ box-sizing: border-box;
805
+ border-radius: $rmControlRadius;
806
+ }
807
+
808
+ .asset-search-actions {
809
+ display: flex;
810
+ justify-content: flex-start;
811
+ align-items: center;
812
+ flex: 0 0 auto;
813
+ flex-wrap: nowrap;
814
+ gap: 8px;
815
+ margin-top: 16px;
816
+ }
817
+
818
+ .asset-search-actions .asset-search-clear {
819
+ margin: 0;
820
+ padding: 0;
821
+ border: 0;
822
+ border-radius: 0;
823
+ background: transparent;
824
+ color: $rmInfo;
825
+ cursor: pointer;
826
+ font-weight: normal;
827
+ line-height: 1.4;
828
+ text-decoration: none;
829
+ text-shadow: none;
830
+ box-shadow: none;
831
+ flex: 0 0 auto;
832
+
833
+ @include font-size(13);
834
+
835
+ &.hidden,
836
+ &[hidden] {
837
+ display: none;
838
+ }
839
+
840
+ &:hover,
841
+ &:focus,
842
+ &:active {
843
+ color: $rmInfo;
844
+ background: transparent;
845
+ text-decoration: underline;
846
+ text-shadow: none;
847
+ box-shadow: none;
848
+ }
849
+
850
+ &:focus {
851
+ outline: 1px dotted $rmDarkBar;
852
+ }
853
+ }
854
+
855
+ .asset-search-actions .asset-search-submit {
856
+ margin: 0 0 0 auto;
857
+ min-width: 88px;
858
+ flex: 0 0 auto;
859
+ display: inline-flex;
860
+ align-items: center;
861
+ justify-content: center;
862
+ gap: 6px;
863
+
864
+ .asset-search-submit-spinner {
865
+ display: none;
866
+ line-height: 1;
867
+
868
+ @include font-size(14);
869
+
870
+ &.hidden,
871
+ &[hidden] {
872
+ display: none;
873
+ }
874
+ }
875
+
876
+ &.is-searching .asset-search-submit-spinner:not(.hidden):not([hidden]) {
877
+ display: inline-block;
878
+ animation: rm-search-button-spin 1.4s linear infinite;
879
+ }
880
+
881
+ &:disabled,
882
+ &[disabled] {
883
+ color: $rmLight;
884
+ background-color: lighten($rmText, 55%);
885
+ border-color: lighten($rmText, 55%);
886
+ cursor: not-allowed;
887
+ opacity: 1;
888
+ text-shadow: none;
889
+ box-shadow: none;
890
+
891
+ &:hover,
892
+ &:focus,
893
+ &:active {
894
+ color: $rmLight;
895
+ background-color: lighten($rmText, 55%);
896
+ border-color: lighten($rmText, 55%);
897
+ opacity: 1;
898
+ }
899
+ }
900
+
901
+ &.is-searching,
902
+ &.is-searching:disabled,
903
+ &.is-searching[disabled] {
904
+ color: $rmLight;
905
+ background-color: $rmActive;
906
+ border-color: $rmActive;
907
+ cursor: wait;
908
+ opacity: 1;
909
+
910
+ &:hover,
911
+ &:focus,
912
+ &:active {
913
+ color: $rmLight;
914
+ background-color: $rmActive;
915
+ border-color: $rmActive;
916
+ opacity: 1;
917
+ }
918
+ }
919
+ }
920
+
921
+ @keyframes rm-search-button-spin {
922
+ from {
923
+ transform: rotate(0deg);
924
+ }
925
+
926
+ to {
927
+ transform: rotate(360deg);
928
+ }
88
929
  }
89
930
 
90
931
  & .file-browser-wrapper {
91
932
  overflow: auto;
92
- height: calc(100% - 50px);
933
+ flex: 1 1 auto;
934
+ min-height: 0;
935
+ padding: 8px 4px 12px;
93
936
  }
94
937
 
95
938
  ul {
@@ -100,37 +943,107 @@
100
943
  }
101
944
  li {
102
945
  a {
103
- color: $textColor;
946
+ color: $rmText;
104
947
  white-space: nowrap;
105
- &:before {
106
- @include tao-icon-setup;
107
- @include icon-folder;
108
- margin: 0 3px;
948
+ display: flex;
949
+ align-items: center;
950
+ gap: 4px;
951
+ box-sizing: border-box;
952
+ width: 100%;
953
+ padding: 3px 4px;
954
+ line-height: 1.5;
955
+ text-decoration: none;
956
+ border: 0;
957
+ outline: none;
958
+ box-shadow: none;
959
+
960
+ &:hover,
961
+ &:focus,
962
+ &:focus-visible,
963
+ &:active {
964
+ text-decoration: none;
965
+ color: $rmText;
966
+ outline: none;
967
+ box-shadow: none;
968
+ }
969
+
970
+ > .tree-toggle,
971
+ > .tree-folder {
972
+ flex: 0 0 auto;
973
+ line-height: 1;
974
+
975
+ @include font-size(12);
976
+ }
977
+
978
+ > .tree-toggle {
979
+ width: 1em;
980
+ color: lighten($rmText, 25%);
981
+
982
+ &.is-leaf:before,
983
+ &:not(.icon-right):not(.icon-down):before {
984
+ content: none;
985
+ }
986
+ }
987
+
988
+ > .tree-folder {
989
+ @include font-size(14);
990
+ }
991
+
992
+ &.opened > .tree-toggle:before {
993
+ @include icon-down;
994
+ }
995
+
996
+ &.opened > .tree-folder:before {
997
+ @include icon-folder-open;
109
998
  }
110
999
  }
111
1000
 
112
- a.opened:before {
113
- font-style: italic;
114
- @include tao-icon-setup;
1001
+ &.active > a > .tree-folder:before {
115
1002
  @include icon-folder-open;
116
1003
  }
117
1004
 
118
1005
  &.active > a {
119
- background-color: $activeColor;
120
-
1006
+ background-color: $rmActiveRow;
1007
+ border: 0;
1008
+ outline: none;
1009
+ box-shadow: none;
121
1010
  }
122
1011
  }
123
1012
  }
124
1013
  }
125
1014
 
126
1015
  .file-preview{
127
- background-color: $uiClickableDefaultBg;
1016
+ background-color: $rmClickableBg;
128
1017
  & > h1 {
129
- background-color: $uiHeaderBg;
1018
+ background-color: $rmChromeBg;
1019
+ border-radius: $rmHeaderRadius $rmHeaderRadius 0 0;
130
1020
  }
131
1021
 
132
1022
  .file-properties{
133
- padding: 0 5px;
1023
+ padding: 12px 14px;
1024
+
1025
+ .grid-row {
1026
+ margin-bottom: 10px;
1027
+ }
1028
+
1029
+ .prop-url .actions {
1030
+ text-align: left;
1031
+ margin: 8px 0 0;
1032
+
1033
+ a.download {
1034
+ text-decoration: none;
1035
+ color: $rmInfo;
1036
+
1037
+ .icon-download {
1038
+ margin-right: 4px;
1039
+ }
1040
+
1041
+ &:hover {
1042
+ text-decoration: underline;
1043
+ color: $rmInfo;
1044
+ }
1045
+ }
1046
+ }
134
1047
  }
135
1048
 
136
1049
  .previewer {
@@ -138,117 +1051,467 @@
138
1051
  overflow: hidden;
139
1052
  }
140
1053
 
141
- .actions {
1054
+ .actions.select-actions {
142
1055
  text-align: center;
143
- margin-bottom: 10px;
1056
+ margin: 12px 0 16px;
144
1057
  }
145
1058
  }
146
1059
 
147
1060
  .file-selector{
148
1061
  position: relative;
149
- border: solid 1px #fff;
150
- border-top: none;
151
- border-bottom: none;
152
1062
  display: flex;
153
1063
  flex-direction: column;
154
1064
 
155
- background-color: $uiGeneralContentBg;
1065
+ background-color: $rmSurface;
156
1066
  & > h1 {
157
1067
  position: relative;
158
- background-color: $uiClickableDefaultBg;
1068
+ background-color: $rmChromeBg;
1069
+ border-radius: $rmHeaderRadius $rmHeaderRadius 0 0;
1070
+ // Flex (shared h1) replaces .lft/.rgt floats so "Assets" shares baseline with Search/Preview.
1071
+ justify-content: space-between;
1072
+ gap: 10px;
159
1073
 
160
1074
  .title {
161
- margin-right: 10px;
1075
+ float: none;
1076
+ margin-right: 0;
162
1077
  }
163
1078
 
164
1079
  .upload-switcher {
1080
+ float: none;
1081
+ flex: 0 0 auto;
1082
+
165
1083
  a {
166
1084
  display: inline-block;
167
1085
  }
168
1086
  .listing {
169
1087
  display:none;
170
1088
  }
1089
+
1090
+ a.btn-info {
1091
+ color: $rmText;
1092
+ background-color: $rmSurface;
1093
+ border: 1px solid $rmBorder;
1094
+
1095
+ &:hover,
1096
+ &:focus,
1097
+ &:active {
1098
+ color: $rmText;
1099
+ background-color: $rmSurface;
1100
+ border-color: $rmBorder;
1101
+ opacity: 1;
1102
+ }
1103
+ }
171
1104
  }
172
1105
  }
173
1106
 
174
1107
  .empty {
175
- color: #666;
1108
+ display: none;
1109
+ color: lighten($rmText, 25%);
176
1110
  font-style: italic;
177
1111
  @include font-size(18);
1112
+
1113
+ text-align: center;
1114
+ padding: 24px 10px;
1115
+ }
1116
+
1117
+ .asset-search-error {
1118
+ padding: 10px 5px;
178
1119
  text-align: center;
1120
+ @include font-size(14);
1121
+
1122
+ &.hidden,
1123
+ &[hidden] {
1124
+ display: none;
1125
+ }
179
1126
  }
180
1127
 
181
- ul.files {
1128
+ .asset-search-error {
1129
+ color: $error;
1130
+ }
1131
+
1132
+ &.search-mode {
1133
+ .upload-switcher {
1134
+ display: none;
1135
+ }
1136
+ }
1137
+
1138
+ &.upload-mode {
1139
+ .pagination-bottom {
1140
+ display: none;
1141
+ }
1142
+ }
1143
+
1144
+ .files-wrapper {
182
1145
  position: relative;
183
- margin-bottom: 0;
184
- padding: 0;
185
- list-style-type: none;
186
1146
  flex-grow: 1;
187
1147
  overflow-y: auto;
188
- li {
189
- height: 35px;
190
- line-height: 35px;
191
- margin-bottom: 0;
192
- padding: 0 0 0 5px;
193
- position: relative;
1148
+ min-height: 0;
1149
+ }
194
1150
 
195
- &:before {
196
- @include tao-icon-setup;
197
- @include icon-document;
198
- @include font-size(16);
199
- vertical-align: top;
200
- line-height: 2.2;
201
- position: absolute;
202
- left: 8px;
1151
+ table.files {
1152
+ width: 100%;
1153
+ border-collapse: collapse;
1154
+ margin: 0;
1155
+ table-layout: fixed;
1156
+
1157
+ thead th {
1158
+ text-align: left;
1159
+ font-weight: bold;
1160
+ padding: 12px 12px 10px;
1161
+ border-bottom: 1px solid mix($rmLight, $rmMidGray, 40%);
1162
+ background-color: transparent;
1163
+ color: $rmText;
1164
+ white-space: nowrap;
1165
+ user-select: none;
1166
+
1167
+ &.sortable {
1168
+ cursor: pointer;
1169
+
1170
+ .sort-label {
1171
+ display: inline-flex;
1172
+ align-items: center;
1173
+ gap: 6px;
1174
+
1175
+ // Sort glyph sits beside the label text (not at the column edge).
1176
+ &:after {
1177
+ content: '';
1178
+ flex: 0 0 auto;
1179
+ width: 11px;
1180
+ height: 12px;
1181
+ opacity: 0.55;
1182
+ background-color: $rmText;
1183
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 14'%3E%3Cpath fill='black' d='M0 1h12v1.5H0zm0 3.5h9v1.5H0zm0 3.5h6v1.5H0z'/%3E%3Cpath fill='black' d='M9.5 8.5L12 12H7z'/%3E%3C/svg%3E")
1184
+ center / contain no-repeat;
1185
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 14'%3E%3Cpath fill='black' d='M0 1h12v1.5H0zm0 3.5h9v1.5H0zm0 3.5h6v1.5H0z'/%3E%3Cpath fill='black' d='M9.5 8.5L12 12H7z'/%3E%3C/svg%3E")
1186
+ center / contain no-repeat;
1187
+ }
1188
+ }
1189
+
1190
+ &:hover,
1191
+ &:focus {
1192
+ .sort-label:after {
1193
+ background-color: $rmText;
1194
+ opacity: 1;
1195
+ }
1196
+ }
203
1197
  }
204
- &[data-type='image']:before{
205
- @include icon-image;
1198
+
1199
+ &.sorted.sorted_asc .sort-label:after {
1200
+ opacity: 1;
1201
+ transform: scaleY(-1);
206
1202
  }
207
- &[data-type='audio']:before{
208
- @include icon-media;
1203
+
1204
+ &.sorted.sorted_desc .sort-label:after {
1205
+ opacity: 1;
1206
+ transform: none;
209
1207
  }
210
- &[data-type='video']:before{
211
- @include icon-video;
1208
+ }
1209
+
1210
+ tbody tr {
1211
+ cursor: pointer;
1212
+
1213
+ &.active,
1214
+ &:hover {
1215
+ background-color: $rmActiveRow;
212
1216
  }
213
1217
 
214
- &.active, &:hover {
215
- background-color: $activeColor;
216
- cursor: pointer;
1218
+ td {
1219
+ padding: 10px 12px;
1220
+ border-bottom: 0;
1221
+ vertical-align: middle;
1222
+ overflow: hidden;
1223
+ text-overflow: ellipsis;
1224
+ white-space: nowrap;
1225
+ max-width: 0;
1226
+
1227
+ .truncate,
1228
+ .desc,
1229
+ .meta {
1230
+ display: block;
1231
+ overflow: hidden;
1232
+ text-overflow: ellipsis;
1233
+ white-space: nowrap;
1234
+ max-width: 100%;
1235
+ }
1236
+ }
1237
+ }
1238
+
1239
+ .files-label {
1240
+ width: 44%;
1241
+
1242
+ // Flex lives on an inner wrapper — display:flex on td + max-width:0 collapses the column.
1243
+ .files-label-inner {
1244
+ display: flex;
1245
+ align-items: center;
1246
+ gap: 6px;
1247
+ min-width: 0;
1248
+ max-width: 100%;
1249
+ }
1250
+
1251
+ .file-icon {
1252
+ display: inline-flex;
1253
+ align-items: center;
1254
+ justify-content: center;
1255
+ width: 18px;
1256
+ flex-shrink: 0;
1257
+ line-height: 1;
1258
+
1259
+ &:before {
1260
+ @include tao-icon-setup;
1261
+ @include icon-document;
1262
+ @include font-size(16);
1263
+ }
217
1264
  }
218
1265
 
219
1266
  .desc {
220
- display: inline-block;
221
- max-width: calc(100% - 130px);// 130 = icon left + toolbar right + some air
222
- margin-left: 25px;
1267
+ display: block;
1268
+ flex: 1 1 auto;
1269
+ min-width: 0;
1270
+ overflow: hidden;
1271
+ text-overflow: ellipsis;
1272
+ white-space: nowrap;
223
1273
  }
1274
+ }
224
1275
 
225
- .actions {
226
- top: 0;
227
- right: 0;
228
- position: absolute;
229
- height: 35px;
230
- width: 100px;
231
- .tlb {
232
- display: inline-block;
233
- background: none;
234
- @include font-size(14);
235
- .tlb-top {
236
- background: none !important;
237
- border-width: 0 !important;
238
- @include box-shadow(0, 0, 0);
239
- }
1276
+ tr[data-type='image'] .file-icon:before {
1277
+ @include icon-image;
1278
+ }
1279
+ tr[data-type='audio'] .file-icon:before {
1280
+ @include icon-media;
1281
+ }
1282
+ tr[data-type='video'] .file-icon:before {
1283
+ @include icon-video;
1284
+ }
1285
+
1286
+ .files-location {
1287
+ width: 30%;
1288
+ }
1289
+
1290
+ .files-updated {
1291
+ // Date + delete slot; keep enough for "Last modified on" header, less empty gap.
1292
+ width: 26%;
1293
+ }
1294
+
1295
+ .files-updated-inner {
1296
+ display: flex;
1297
+ align-items: center;
1298
+ gap: 8px;
1299
+ min-width: 0;
1300
+ max-width: 100%;
1301
+
1302
+ .meta.updated {
1303
+ flex: 1 1 auto;
1304
+ min-width: 0;
1305
+ }
1306
+ }
1307
+
1308
+ .meta {
1309
+ @include font-size(12);
1310
+
1311
+ color: lighten($rmText, 25%);
1312
+ }
1313
+
1314
+ .row-actions {
1315
+ display: inline-flex;
1316
+ align-items: center;
1317
+ justify-content: center;
1318
+ flex: 0 0 18px;
1319
+ width: 18px;
1320
+ opacity: 0;
1321
+ pointer-events: none;
1322
+
1323
+ // Plain bin icon (same idea as filter-spoiler-delete) — no tlb chrome/border.
1324
+ a.delete {
1325
+ display: inline-flex;
1326
+ align-items: center;
1327
+ justify-content: center;
1328
+ padding: 0;
1329
+ border: 0;
1330
+ border-radius: 0;
1331
+ background: transparent;
1332
+ color: lighten($rmText, 40%);
1333
+ text-decoration: none;
1334
+ text-shadow: none;
1335
+ box-shadow: none;
1336
+ line-height: 1;
1337
+ cursor: pointer;
1338
+
1339
+ @include font-size(14);
1340
+
1341
+ &:hover,
1342
+ &:active {
1343
+ color: $rmText;
1344
+ background: transparent;
1345
+ text-shadow: none;
1346
+ box-shadow: none;
1347
+ }
1348
+
1349
+ &:focus {
1350
+ outline: 1px dotted $rmDarkBar;
1351
+ color: $rmText;
240
1352
  }
241
1353
  }
242
1354
  }
1355
+
1356
+ tbody tr:hover .row-actions,
1357
+ tbody tr:focus-within .row-actions {
1358
+ opacity: 1;
1359
+ pointer-events: auto;
1360
+ }
243
1361
  }
1362
+ // Uploader wraps .file-upload-container in form.uploaderContainer (sibling of Assets h1).
1363
+ > .uploaderContainer {
1364
+ margin-top: 12px;
1365
+ }
1366
+
244
1367
  .file-upload-container {
245
1368
  display: none;
246
1369
  padding: 0 5px;
247
1370
  }
248
- .pagination-bottom {
249
- align-self: flex-end;
1371
+ .pagination-bottom {
1372
+ align-self: stretch;
250
1373
  width: 100%;
251
- padding: 5px 10px 0;
1374
+ padding: 10px 2px 8px;
1375
+ box-sizing: border-box;
1376
+
1377
+ .pagination {
1378
+ display: flex;
1379
+ align-items: center;
1380
+ justify-content: space-between;
1381
+ gap: 16px;
1382
+ width: 100%;
1383
+ margin: 0;
1384
+ padding: 0;
1385
+ float: none;
1386
+ clear: none;
1387
+
1388
+ &::before,
1389
+ &::after {
1390
+ display: none;
1391
+ }
1392
+
1393
+ > .col-6 {
1394
+ float: none;
1395
+ width: auto;
1396
+ margin: 0;
1397
+ padding: 0;
1398
+ box-sizing: border-box;
1399
+ }
1400
+
1401
+ > .col-6:first-child {
1402
+ @include font-size(13);
1403
+
1404
+ flex: 0 1 auto;
1405
+ color: $rmText;
1406
+ font-weight: bold;
1407
+ line-height: 1.4;
1408
+ white-space: nowrap;
1409
+
1410
+ strong,
1411
+ .page,
1412
+ .total {
1413
+ font-weight: bold;
1414
+ }
1415
+ }
1416
+
1417
+ > .col-6.txt-rgt {
1418
+ display: flex;
1419
+ align-items: center;
1420
+ justify-content: flex-end;
1421
+ flex: 0 0 auto;
1422
+ gap: 16px;
1423
+ text-align: right;
1424
+ }
1425
+ }
1426
+
1427
+ // Text-link chrome for Previous/Next (scoped under .file-selector .pagination-bottom)
1428
+ .pagination .txt-rgt > button.btn-info,
1429
+ .pagination .pages > li > a,
1430
+ .pagination .pages > li > button {
1431
+ margin: 0;
1432
+ min-height: 0;
1433
+ padding: 0;
1434
+ border: 0;
1435
+ border-color: transparent;
1436
+ background: transparent;
1437
+ background-color: transparent;
1438
+ background-image: none;
1439
+ color: $rmInfo;
1440
+ font-weight: normal;
1441
+ line-height: 1.4;
1442
+ text-shadow: none;
1443
+ box-shadow: none;
1444
+ opacity: 1;
1445
+
1446
+ @include font-size(13);
1447
+
1448
+ .icon-backward,
1449
+ .icon-forward {
1450
+ display: none;
1451
+ }
1452
+
1453
+ &:hover,
1454
+ &:focus,
1455
+ &:active {
1456
+ color: $rmInfo;
1457
+ text-decoration: underline;
1458
+ background: transparent;
1459
+ background-color: transparent;
1460
+ background-image: none;
1461
+ border-color: transparent;
1462
+ opacity: 1;
1463
+ }
1464
+ }
1465
+
1466
+ // Simple provider: "< Previous" / "Next >" text links
1467
+ .pagination .txt-rgt > button:first-child::before {
1468
+ content: '< ';
1469
+ }
1470
+
1471
+ .pagination .txt-rgt > button:last-child::after {
1472
+ content: ' >';
1473
+ }
1474
+
1475
+ .pagination .txt-rgt > button.btn-info[disabled],
1476
+ .pagination .pages > .disabled > a,
1477
+ .pagination .pages > .disabled > span,
1478
+ .pagination .pages > .disabled > button {
1479
+ color: lighten($rmText, 45%);
1480
+ cursor: not-allowed;
1481
+ text-decoration: none;
1482
+ pointer-events: none;
1483
+
1484
+ &:hover,
1485
+ &:focus,
1486
+ &:active {
1487
+ color: lighten($rmText, 45%);
1488
+ text-decoration: none;
1489
+ background: transparent;
1490
+ background-color: transparent;
1491
+ }
1492
+
1493
+ // _buttons.scss `.disabled, button[disabled]` uses !important — override only there
1494
+ &,
1495
+ &:hover,
1496
+ &:focus,
1497
+ &:active {
1498
+ background-color: transparent !important;
1499
+ border: none !important;
1500
+ color: lighten($rmText, 45%) !important;
1501
+ cursor: not-allowed !important;
1502
+ opacity: 1 !important;
1503
+ text-shadow: none !important;
1504
+ }
1505
+ }
252
1506
  }
253
1507
  }
254
1508
  }
1509
+
1510
+ // select2 dropdown/mask are appended to body; item creator modal uses z-index 105002
1511
+ .criteria-dropdown-select2 {
1512
+ z-index: 105100 !important;
1513
+ }
1514
+
1515
+ #select2-drop-mask {
1516
+ z-index: 105090 !important;
1517
+ }