@gitlab/ui 94.7.0 → 94.9.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.
@@ -33,28 +33,51 @@
33
33
  ) {
34
34
  color: $color;
35
35
  background-color: $background-color;
36
- @include gl-button-border($border-color);
36
+ @if $feature-button-border {
37
+ border-color: $border-color;
38
+ } @else {
39
+ @include gl-button-border($border-color);
40
+ }
37
41
 
38
42
  &:hover {
39
43
  color: $hover-color;
40
44
  background-color: $hover-background-color;
41
- @include gl-button-hover-border($hover-border-color);
45
+ @if $feature-button-border {
46
+ border-color: $hover-border-color;
47
+ } @else {
48
+ @include gl-button-hover-border($hover-border-color);
49
+ }
42
50
  }
43
51
 
44
52
  &:focus {
45
53
  color: $focus-color;
46
54
  background-color: $focus-background-color;
47
- @include gl-focus($color: $focus-border-color);
55
+ @if $feature-button-border {
56
+ border-color: $focus-border-color;
57
+ } @else {
58
+ @include gl-focus($color: $focus-border-color);
59
+ }
48
60
  }
49
61
 
50
62
  &:active,
51
63
  &.active {
52
64
  color: $active-color;
53
65
  background-color: $active-background-color;
54
- @include gl-focus($color: $active-border-color);
66
+ @if $feature-button-border {
67
+ border-color: $active-border-color;
68
+ } @else {
69
+ @include gl-focus($color: $focus-border-color);
70
+ }
55
71
 
56
- &:focus {
57
- @include gl-focus($color: $active-border-color);
72
+ @if $feature-button-border {
73
+ :focus,
74
+ &:focus:active {
75
+ @include gl-focus;
76
+ }
77
+ } @else {
78
+ &:focus {
79
+ @include gl-focus($color: $active-border-color);
80
+ }
58
81
  }
59
82
  }
60
83
  }
@@ -72,23 +95,43 @@
72
95
  }
73
96
  }
74
97
 
75
- // double specificity to override bootstrap and reboot styling
76
98
  .gl-button.gl-button {
77
- @apply gl-border-0;
78
99
  @apply gl-rounded-base;
79
- @apply gl-py-3;
80
100
  @apply gl-px-4;
81
101
  background-color: var(--gl-button-default-primary-background-color-default);
82
102
  @apply gl-leading-normal;
83
103
  color: var(--gl-button-default-primary-foreground-color-default);
84
104
  @include gl-fill-current-color;
85
- @include gl-button-border(var(--gl-button-default-primary-border-color-default));
86
105
  @apply gl-justify-center;
87
106
  @apply gl-items-center;
88
107
  @apply gl-text-base;
89
108
 
90
- @media (forced-colors: active) {
91
- border: 1px solid;
109
+ @if $feature-button-border {
110
+ @apply gl-py-0;
111
+ border: $gl-border-size-1 solid var(--gl-button-default-primary-border-color-default);
112
+ min-height: $gl-button-medium-size;
113
+ min-width: $gl-button-medium-size;
114
+ @include gl-prefers-reduced-motion-transition;
115
+ transition: color $gl-transition-duration-medium $gl-easing-out-cubic,
116
+ background-color $gl-transition-duration-medium $gl-easing-out-cubic,
117
+ border-color $gl-transition-duration-medium $gl-easing-out-cubic,
118
+ box-shadow $gl-transition-duration-medium $gl-easing-out-cubic,
119
+ text-decoration-color $gl-transition-duration-medium $gl-easing-out-cubic;
120
+ } @else {
121
+ @apply gl-border-0;
122
+ @apply gl-py-3;
123
+ @include gl-button-border(var(--gl-button-default-primary-border-color-default));
124
+ }
125
+
126
+ @if $feature-button-border {
127
+ &:focus,
128
+ &:focus:active {
129
+ @include gl-focus;
130
+ }
131
+ } @else {
132
+ @media (forced-colors: active) {
133
+ border: 1px solid;
134
+ }
92
135
  }
93
136
 
94
137
  .gl-button-text {
@@ -136,28 +179,45 @@
136
179
  &.selected {
137
180
  color: var(--gl-button-selected-foreground-color-default);
138
181
  background-color: var(--gl-button-selected-background-color-default);
139
- @include gl-button-selected-border(var(--gl-button-selected-border-color-default));
182
+ @if $feature-button-border {
183
+ border-width: $gl-border-size-2;
184
+ border-color: var(--gl-button-selected-border-color-default);
185
+ } @else {
186
+ @include gl-button-selected-border(var(--gl-button-selected-border-color-default));
187
+ }
140
188
 
141
189
  &:hover {
142
190
  color: var(--gl-button-selected-foreground-color-hover);
143
191
  background-color: var(--gl-button-selected-background-color-hover);
144
- @include gl-button-selected-border(var(--gl-button-selected-border-color-hover));
192
+ @if $feature-button-border {
193
+ border-color: var(--gl-button-selected-border-color-hover);
194
+ } @else {
195
+ @include gl-button-selected-border(var(--gl-button-selected-border-color-hover));
196
+ }
145
197
  }
146
198
 
147
199
  &:focus {
148
200
  color: var(--gl-button-selected-foreground-color-focus);
149
201
  background-color: var(--gl-button-selected-background-color-focus);
150
- @include gl-button-selected-border(var(--gl-button-selected-border-color-focus), $focus-ring);
202
+ @if $feature-button-border {
203
+ border-color: var(--gl-button-selected-border-color-focus);
204
+ } @else {
205
+ @include gl-button-selected-border(var(--gl-button-selected-border-color-focus), $focus-ring);
206
+ }
151
207
  }
152
208
 
153
209
  &:active,
154
210
  &.active {
155
211
  color: var(--gl-button-selected-foreground-color-active);
156
212
  background-color: var(--gl-button-selected-background-color-active);
157
- @include gl-button-selected-border(var(--gl-button-selected-border-color-active), $focus-ring);
158
-
159
- &:focus {
213
+ @if $feature-button-border {
214
+ border-color: var(--gl-button-selected-border-color-active);
215
+ } @else {
160
216
  @include gl-button-selected-border(var(--gl-button-selected-border-color-active), $focus-ring);
217
+
218
+ &:focus {
219
+ @include gl-button-selected-border(var(--gl-button-selected-border-color-active), $focus-ring);
220
+ }
161
221
  }
162
222
  }
163
223
  }
@@ -307,7 +367,9 @@
307
367
  &.btn-success,
308
368
  &.btn-danger {
309
369
  &-tertiary {
310
- @apply gl-shadow-none;
370
+ @if not $feature-button-border {
371
+ @apply gl-shadow-none;
372
+ }
311
373
 
312
374
  @media (forced-colors: active) {
313
375
  color: LinkText; // stylelint-disable-line scale-unlimited/declaration-strict-value
@@ -315,14 +377,16 @@
315
377
  border: 0;
316
378
  }
317
379
 
318
- &:hover {
319
- @apply gl-shadow-none;
320
- }
380
+ @if not $feature-button-border {
381
+ &:hover {
382
+ @apply gl-shadow-none;
383
+ }
321
384
 
322
- &:active,
323
- &:focus,
324
- &:focus:active {
325
- @apply gl-focus;
385
+ &:active,
386
+ &:focus,
387
+ &:focus:active {
388
+ @apply gl-focus;
389
+ }
326
390
  }
327
391
  }
328
392
  }
@@ -339,25 +403,44 @@
339
403
  &.btn-success {
340
404
  color: var(--gl-color-neutral-0); // The text is white in light and dark mode
341
405
  @apply gl-bg-green-500;
342
- @include gl-inset-border-1-green-600;
406
+ @if $feature-button-border {
407
+ border-color: $green-600;
408
+ } @else {
409
+ @include gl-inset-border-1-green-600;
410
+ }
343
411
 
344
412
  &:hover {
345
- @include gl-button-hover-border($green-800);
346
- background-color: $green-600;
413
+ @if $feature-button-border {
414
+ border-color: $green-800;
415
+ background-color: $green-600;
416
+ } @else {
417
+ @include gl-button-hover-border($green-800);
418
+ background-color: $green-600;
419
+ }
347
420
  }
348
421
 
349
422
  &:focus {
350
- @include gl-focus($color: $green-800);
351
- @apply gl-bg-green-600;
423
+ @if $feature-button-border {
424
+ border-color: $green-800;
425
+ background-color: $green-600;
426
+ } @else {
427
+ @include gl-focus($color: $green-800);
428
+ @apply gl-bg-green-600;
429
+ }
352
430
  }
353
431
 
354
432
  &:active,
355
433
  &.active {
356
- @include gl-focus($color: $green-900);
357
434
  @apply gl-bg-green-700;
358
435
 
359
- &:focus {
436
+ @if $feature-button-border {
437
+ border-color: $green-900;
438
+ } @else {
360
439
  @include gl-focus($color: $green-900);
440
+
441
+ &:focus {
442
+ @include gl-focus($color: $green-900);
443
+ }
361
444
  }
362
445
  }
363
446
  }
@@ -371,37 +454,61 @@
371
454
  @apply gl-bg-transparent;
372
455
  @apply gl-text-green-500;
373
456
  @apply gl-font-normal;
374
- @include gl-inset-border-1-green-500;
457
+ @if $feature-button-border {
458
+ border-color: $green-500;
459
+ } @else {
460
+ @include gl-inset-border-1-green-500;
461
+ }
375
462
 
376
463
  &:hover {
377
- @apply gl-text-green-700;
378
- @include gl-button-hover-border($green-700);
379
- background-color: $green-50;
464
+ @if $feature-button-border {
465
+ @include gl-text-green-700;
466
+ border-color: $green-700;
467
+ background-color: $green-50;
468
+ } @else {
469
+ @apply gl-text-green-700;
470
+ @include gl-button-hover-border($green-700);
471
+ background-color: $green-50;
472
+ }
380
473
  }
381
474
 
382
475
  &:focus {
383
476
  @apply gl-text-green-700;
384
- @include gl-focus($color: $green-700);
385
- @apply gl-bg-green-50;
477
+ @if $feature-button-border {
478
+ border-color: $green-700;
479
+ background-color: $green-50;
480
+ } @else {
481
+ @include gl-focus($color: $green-700);
482
+ @apply gl-bg-green-50;
483
+ }
386
484
  }
387
485
 
388
486
  &:active,
389
487
  &.active {
390
488
  @apply gl-text-green-900;
391
- @include gl-focus($color: $green-900);
392
489
  @apply gl-bg-green-100;
393
-
394
- &:focus {
490
+ @if $feature-button-border {
491
+ border-color: $green-900;
492
+ } @else {
395
493
  @include gl-focus($color: $green-900);
494
+
495
+ &:focus {
496
+ @include gl-focus($color: $green-900);
497
+ }
396
498
  }
397
499
  }
398
500
  }
399
501
 
400
502
  &.btn-sm {
401
- @apply gl-py-2;
402
503
  @apply gl-px-3;
403
504
  @apply gl-leading-normal;
404
505
  @apply gl-text-base;
506
+ @if $feature-button-border {
507
+ min-height: $gl-button-small-size;
508
+ min-width: $gl-button-small-size;
509
+ } @else {
510
+ @apply gl-py-2;
511
+ }
405
512
 
406
513
  gl-emoji {
407
514
  @apply gl-text-sm;
@@ -410,53 +517,81 @@
410
517
 
411
518
  &.btn-dashed,
412
519
  &.btn-dashed-tertiary {
413
- @include gl-button-border(var(--gl-button-dashed-border-color-default));
414
- outline: 3px dotted var(--gl-background-color-default);
415
- outline-offset: (-$gl-border-size-1);
416
-
417
- &:hover {
418
- @include gl-button-border($color: var(--gl-button-dashed-border-color-hover));
520
+ @if $feature-button-border {
521
+ border-style: dashed;
522
+ border-color: var(--gl-button-dashed-border-color-default);
523
+ } @else {
524
+ @include gl-button-border(var(--gl-button-dashed-border-color-default));
419
525
  outline: 3px dotted var(--gl-background-color-default);
420
526
  outline-offset: (-$gl-border-size-1);
421
527
  }
422
528
 
529
+ &:hover {
530
+ @if $feature-button-border {
531
+ border-color: var(--gl-button-dashed-border-color-hover);
532
+ } @else {
533
+ @include gl-button-border($color: var(--gl-button-dashed-border-color-hover));
534
+ outline: 3px dotted var(--gl-background-color-default);
535
+ outline-offset: (-$gl-border-size-1);
536
+ }
537
+ }
538
+
423
539
  &:focus {
424
- @include gl-focus($color: var(--gl-button-dashed-border-color-focus));
425
- outline: 3px dotted var(--gl-background-color-default);
426
- outline-offset: (-$gl-border-size-1);
540
+ @if $feature-button-border {
541
+ border-color: var(--gl-button-dashed-border-color-focus);
542
+ } @else {
543
+ @include gl-focus($color: var(--gl-button-dashed-border-color-focus));
544
+ outline: 3px dotted var(--gl-background-color-default);
545
+ outline-offset: (-$gl-border-size-1);
546
+ }
427
547
  }
428
548
 
429
549
  &:active,
430
550
  &.active {
431
- @include gl-focus($color: var(--gl-button-dashed-border-color-active));
432
- outline: 3px dotted var(--gl-background-color-default);
433
- outline-offset: (-$gl-border-size-1);
434
-
435
- &:focus {
551
+ @if $feature-button-border {
552
+ border-color: var(--gl-button-dashed-border-color-active);
553
+ } @else {
436
554
  @include gl-focus($color: var(--gl-button-dashed-border-color-active));
437
555
  outline: 3px dotted var(--gl-background-color-default);
438
556
  outline-offset: (-$gl-border-size-1);
557
+
558
+ &:focus {
559
+ @include gl-focus($color: var(--gl-button-dashed-border-color-active));
560
+ outline: 3px dotted var(--gl-background-color-default);
561
+ outline-offset: (-$gl-border-size-1);
562
+ }
439
563
  }
440
564
  }
441
565
  }
442
566
 
443
567
  &.btn-icon {
444
- @apply gl-p-3;
445
568
  @apply gl-leading-normal;
569
+ @if $feature-button-border {
570
+ @apply gl-p-0;
571
+ } @else {
572
+ @apply gl-p-3;
573
+ }
446
574
 
447
575
  .gl-button-icon {
448
576
  @apply gl-mr-0;
449
577
  }
450
578
 
451
- &.btn-sm {
452
- @apply gl-p-2;
579
+ @if not $feature-button-border {
580
+ &.btn-sm {
581
+ @apply gl-p-2;
582
+ }
453
583
  }
454
584
  }
455
585
 
456
586
  &.button-ellipsis-horizontal,
457
587
  &.button-ellipsis-horizontal.btn-sm {
458
- @apply gl-py-0;
459
588
  @apply gl-px-2;
589
+ @if $feature-button-border {
590
+ min-height: auto;
591
+ min-width: auto;
592
+ } @else {
593
+ @apply gl-py-0;
594
+ }
460
595
 
461
596
  svg {
462
597
  @apply gl-h-5;
@@ -480,25 +615,43 @@
480
615
  @apply gl-text-base;
481
616
  @apply gl-leading-normal;
482
617
  color: var(--gl-button-link-text-color-default);
483
- @apply gl-py-0;
484
- @apply gl-px-0;
485
- @apply gl-shadow-none;
618
+ @if $feature-button-border {
619
+ @include gl-px-0;
620
+ min-height: auto;
621
+ min-width: auto;
622
+ text-decoration-thickness: auto;
623
+ text-decoration-style: solid;
624
+ text-decoration-color: transparent;
625
+ } @else {
626
+ @apply gl-py-0;
627
+ @apply gl-px-0;
628
+ @apply gl-shadow-none;
629
+ }
486
630
 
487
631
  &:hover {
488
632
  @apply gl-bg-transparent;
489
633
  color: var(--gl-button-link-text-color-hover);
634
+ @if $feature-button-border {
635
+ text-decoration-color: var(--gl-button-link-text-color-hover);
636
+ }
490
637
  }
491
638
 
492
639
  &:active {
493
640
  color: var(--gl-button-link-text-color-active);
494
- @apply gl-underline;
641
+ @if $feature-button-border {
642
+ text-decoration-color: var(--gl-button-link-text-color-active);
643
+ } @else {
644
+ @apply gl-underline;
645
+ }
495
646
  }
496
647
 
497
648
  &:active,
498
649
  &:focus,
499
650
  &:focus:active {
500
651
  @apply gl-bg-transparent;
501
- @apply gl-focus;
652
+ @if not $feature-button-border {
653
+ @apply gl-focus;
654
+ }
502
655
  }
503
656
 
504
657
  &.disabled,
@@ -529,9 +682,13 @@
529
682
  &[disabled].selected {
530
683
  background-color: var(--gl-button-disabled-background-color);
531
684
  color: var(--gl-button-disabled-foreground-color);
532
- @include gl-button-border(var(--gl-button-disabled-border-color));
533
685
  opacity: 1;
534
686
  cursor: not-allowed !important;
687
+ @if $feature-button-border {
688
+ border-color: var(--gl-button-disabled-border-color);
689
+ } @else {
690
+ @include gl-button-border(var(--gl-button-disabled-border-color));
691
+ }
535
692
  }
536
693
 
537
694
  &.disabled[class*='-tertiary'],
@@ -109,11 +109,21 @@
109
109
  margin-left: -1px;
110
110
  }
111
111
 
112
- &.gl-button {
113
- @apply gl-px-3;
112
+ @if $feature-button-border {
113
+ &.gl-button {
114
+ @apply gl-px-0;
114
115
 
115
- &.btn-sm {
116
- @apply gl-px-2;
116
+ &.btn-sm {
117
+ @apply gl-px-0;
118
+ }
119
+ }
120
+ } @else {
121
+ &.gl-button {
122
+ @apply gl-px-3;
123
+
124
+ &.btn-sm {
125
+ @apply gl-px-2;
126
+ }
117
127
  }
118
128
  }
119
129
  }
@@ -170,6 +180,12 @@
170
180
  }
171
181
 
172
182
  .dropdown-icon-only {
183
+ @if $feature-button-border {
184
+ &.dropdown-toggle-no-caret {
185
+ padding: 0 !important;
186
+ }
187
+ }
188
+
173
189
  .dropdown-icon,
174
190
  .gl-button-icon.gl-button-icon {
175
191
  @apply gl-mr-0;
@@ -74,6 +74,11 @@ $label-padding-horizontal-half: 0.375 * $grid-size;
74
74
  @apply gl-rounded-full;
75
75
  @apply gl-shadow-none;
76
76
 
77
+ @if $feature-button-border {
78
+ min-height: auto !important;
79
+ min-width: auto !important;
80
+ }
81
+
77
82
  &:focus,
78
83
  &:active {
79
84
  @apply gl-focus;
@@ -174,6 +174,9 @@ export default {
174
174
  isIconOnly() {
175
175
  return Boolean(this.icon && this.hasNoVisibleToggleText);
176
176
  },
177
+ isEllipsisButton() {
178
+ return this.isIconOnly && this.icon === 'ellipsis_h';
179
+ },
177
180
  isCaretOnly() {
178
181
  return !this.noCaret && !this.icon && this.hasNoVisibleToggleText;
179
182
  },
@@ -190,9 +193,10 @@ export default {
190
193
  this.toggleClass,
191
194
  {
192
195
  'gl-new-dropdown-toggle': true,
193
- 'gl-new-dropdown-icon-only btn-icon': this.isIconOnly,
196
+ 'button-ellipsis-horizontal': this.isEllipsisButton,
197
+ 'gl-new-dropdown-icon-only btn-icon': this.isIconOnly && !this.isEllipsisButton,
194
198
  'gl-new-dropdown-toggle-no-caret': this.noCaret,
195
- 'gl-new-dropdown-caret-only': this.isCaretOnly,
199
+ 'gl-new-dropdown-caret-only btn-icon': this.isCaretOnly,
196
200
  },
197
201
  ];
198
202
  },
@@ -51,7 +51,7 @@
51
51
 
52
52
  .gl-new-dropdown-toggle {
53
53
  // optically align the caret
54
- &.gl-button:not(.gl-new-dropdown-toggle-no-caret) {
54
+ &.gl-button:not(.gl-new-dropdown-toggle-no-caret, .btn-icon) {
55
55
  @apply gl-pr-3;
56
56
 
57
57
  &.btn-sm {
@@ -67,6 +67,10 @@
67
67
  .gl-new-dropdown-toggle {
68
68
  .gl-button-text {
69
69
  @apply gl-inline-flex;
70
+
71
+ &:has(.gl-sr-only) {
72
+ width: auto;
73
+ }
70
74
  }
71
75
  }
72
76
 
@@ -85,7 +89,7 @@
85
89
  }
86
90
  }
87
91
 
88
- .gl-button .gl-button-icon.gl-new-dropdown-chevron {
92
+ .gl-button:not(.gl-new-dropdown-caret-only) .gl-button-icon.gl-new-dropdown-chevron {
89
93
  @apply gl-ml-2;
90
94
  @apply gl-mr-0;
91
95
  }
@@ -94,6 +98,7 @@
94
98
  // optically align the caret
95
99
  &.gl-button:not(.gl-new-dropdown-toggle-no-caret) {
96
100
  @apply gl-pr-2;
101
+ @apply gl-pl-3;
97
102
 
98
103
  &.btn-sm {
99
104
  @apply gl-pr-0;
@@ -793,7 +793,8 @@ export default {
793
793
  <gl-button
794
794
  v-if="showResetButton"
795
795
  category="tertiary"
796
- class="!gl-m-0 !gl-w-auto gl-max-w-1/2 gl-shrink-0 gl-text-ellipsis !gl-px-2 !gl-py-2 !gl-text-sm focus:!gl-shadow-inner-2-blue-400"
796
+ class="!gl-m-0 !gl-w-auto gl-max-w-1/2 gl-flex-shrink-0 gl-text-ellipsis !gl-px-2 !gl-text-sm focus:!gl-shadow-inner-2-blue-400"
797
+ size="small"
797
798
  data-testid="listbox-reset-button"
798
799
  @click="onResetButtonClicked"
799
800
  >
@@ -802,7 +803,8 @@ export default {
802
803
  <gl-button
803
804
  v-if="showSelectAllButton"
804
805
  category="tertiary"
805
- class="!gl-m-0 !gl-w-auto gl-max-w-1/2 gl-shrink-0 gl-text-ellipsis !gl-px-2 !gl-py-2 !gl-text-sm focus:!gl-shadow-inner-2-blue-400"
806
+ class="!gl-m-0 !gl-w-auto gl-max-w-1/2 gl-flex-shrink-0 gl-text-ellipsis !gl-px-2 !gl-text-sm focus:!gl-shadow-inner-2-blue-400"
807
+ size="small"
806
808
  data-testid="listbox-select-all-button"
807
809
  @click="onSelectAllButtonClicked"
808
810
  >
@@ -4,14 +4,23 @@
4
4
  .gl-search-box-by-click-history > .gl-button {
5
5
  padding-left: $gl-spacing-scale-4 !important;
6
6
  padding-right: $gl-spacing-scale-3 !important;
7
- @apply gl-border-none;
8
7
  border-top-right-radius: 0;
9
8
  border-bottom-right-radius: 0;
10
- @apply gl-shadow-inner-1-gray-400;
9
+
10
+ @if $feature-button-border {
11
+ border-color: var(--gl-border-color-strong);
12
+ } @else {
13
+ @apply gl-border-none;
14
+ @include gl-inset-border-1-gray-400;
15
+ }
11
16
  }
12
17
 
13
18
  .gl-search-box-by-click-search-button.gl-button:not(:disabled) {
14
- @apply gl-shadow-inner-1-gray-400;
19
+ @if $feature-button-border {
20
+ border-color: var(--gl-border-color-strong);
21
+ } @else {
22
+ @include gl-inset-border-1-gray-400;
23
+ }
15
24
  }
16
25
 
17
26
  .gl-search-box-by-click-input {