@stackoverflow/stacks 0.70.0 → 0.73.1

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 (45) hide show
  1. package/README.md +1 -1
  2. package/dist/css/stacks.css +1742 -681
  3. package/dist/css/stacks.min.css +1 -1
  4. package/dist/js/stacks.js +167 -92
  5. package/dist/js/stacks.min.js +1 -1
  6. package/lib/css/atomic/_stacks-borders.less +18 -0
  7. package/lib/css/atomic/_stacks-flex.less +2 -7
  8. package/lib/css/atomic/_stacks-grid.less +2 -0
  9. package/lib/css/atomic/_stacks-misc.less +6 -2
  10. package/lib/css/atomic/_stacks-typography.less +23 -8
  11. package/lib/css/base/_stacks-configuration-dynamic.less +5 -15
  12. package/lib/css/components/_stacks-activity-indicator.less +26 -2
  13. package/lib/css/components/_stacks-avatars.less +9 -0
  14. package/lib/css/components/_stacks-badges.less +18 -6
  15. package/lib/css/components/_stacks-breadcrumbs.less +2 -0
  16. package/lib/css/components/_stacks-button-groups.less +11 -0
  17. package/lib/css/components/_stacks-buttons.less +111 -10
  18. package/lib/css/components/_stacks-cards.less +9 -13
  19. package/lib/css/components/_stacks-code-blocks.less +1 -1
  20. package/lib/css/components/_stacks-inputs.less +78 -9
  21. package/lib/css/components/_stacks-link-previews.less +7 -3
  22. package/lib/css/components/_stacks-links.less +25 -2
  23. package/lib/css/components/_stacks-menu.less +4 -4
  24. package/lib/css/components/_stacks-modals.less +1 -1
  25. package/lib/css/components/_stacks-navigation.less +18 -0
  26. package/lib/css/components/_stacks-notices.less +40 -3
  27. package/lib/css/components/_stacks-page-titles.less +1 -1
  28. package/lib/css/components/_stacks-pagination.less +4 -2
  29. package/lib/css/components/_stacks-popovers.less +22 -2
  30. package/lib/css/components/_stacks-post-summary.less +134 -3
  31. package/lib/css/components/_stacks-progress-bars.less +29 -6
  32. package/lib/css/components/_stacks-prose.less +16 -2
  33. package/lib/css/components/_stacks-tables.less +10 -6
  34. package/lib/css/components/_stacks-tags.less +22 -19
  35. package/lib/css/components/_stacks-toggle-switches.less +12 -0
  36. package/lib/css/components/_stacks-topbar.less +440 -0
  37. package/lib/css/components/_stacks-uploader.less +22 -0
  38. package/lib/css/components/_stacks-widget-static.less +15 -3
  39. package/lib/css/exports/_stacks-constants-colors.less +443 -35
  40. package/lib/css/exports/_stacks-constants-helpers.less +1 -2
  41. package/lib/css/exports/_stacks-mixins.less +26 -0
  42. package/lib/css/stacks-dynamic.less +0 -1
  43. package/lib/css/stacks-static.less +15 -0
  44. package/lib/ts/controllers/s-tooltip.ts +4 -0
  45. package/package.json +15 -12
@@ -50,7 +50,7 @@
50
50
  width: 100%;
51
51
  margin: 0; // A guard against Core's default margins
52
52
  padding: @input-padding;
53
- border: 1px solid var(--black-200);
53
+ border: 1px solid var(--bc-darker);
54
54
  border-radius: @br-sm;
55
55
  background-color: var(--white);
56
56
  color: var(--fc-dark);
@@ -73,11 +73,19 @@
73
73
  // ------------------------------------------------------------------------
74
74
  &::-webkit-input-placeholder {
75
75
  color: var(--black-200);
76
+
77
+ .highcontrast-mode({
78
+ color: var(--black-400);
79
+ });
76
80
  }
77
81
 
78
82
  &::placeholder {
79
83
  color: var(--black-200);
80
84
  opacity: 1;
85
+
86
+ .highcontrast-mode({
87
+ color: var(--black-400);
88
+ });
81
89
  }
82
90
 
83
91
  // -- STYLE SCROLLBARS
@@ -108,6 +116,33 @@ fieldset {
108
116
  min-width: 0;
109
117
  padding: 0;
110
118
  border: 0;
119
+
120
+ &[disabled] {
121
+ a,
122
+ .s-btn,
123
+ .s-link {
124
+ box-shadow: none !important;
125
+ opacity: 0.5;
126
+ pointer-events: none;
127
+ }
128
+
129
+ .s-checkbox,
130
+ .s-input-message,
131
+ .s-label,
132
+ .s-radio,
133
+ .s-toggle-switch,
134
+ .s-toggle-switch label {
135
+ cursor: not-allowed;
136
+ opacity: 0.5;
137
+ }
138
+
139
+ .s-input,
140
+ .s-textarea,
141
+ .s-select > select {
142
+ cursor: not-allowed;
143
+ opacity: 0.5;
144
+ }
145
+ }
111
146
  }
112
147
 
113
148
  // ============================================================================
@@ -139,6 +174,10 @@ fieldset {
139
174
  font-weight: 400;
140
175
  vertical-align: text-bottom;
141
176
 
177
+ .highcontrast-mode({
178
+ border: 1px solid currentColor;
179
+ });
180
+
142
181
  &.s-label--status__required {
143
182
  background-color: var(--red-100);
144
183
  color: var(--red-600);
@@ -179,7 +218,7 @@ fieldset {
179
218
  // ----------------------------------------------------------------------------
180
219
  .s-input-fill {
181
220
  padding: @input-padding;
182
- border: 1px solid var(--black-200);
221
+ border: 1px solid var(--bc-darker);
183
222
  border-right-width: 0;
184
223
  border-left-width: 0;
185
224
  background-color: var(--black-050);
@@ -255,7 +294,7 @@ fieldset {
255
294
  height: 100%; // Fill the height of its parent
256
295
  padding: @input-padding;
257
296
  padding-right: @su32;
258
- border: 1px solid var(--black-200);
297
+ border: 1px solid var(--bc-darker);
259
298
  border-radius: @br-sm;
260
299
  background-color: var(--white);
261
300
  outline: 0;
@@ -310,7 +349,7 @@ fieldset {
310
349
  margin: 0; // A guard against Core's default margins
311
350
  width: 1em;
312
351
  height: 1em;
313
- border: 1px solid var(--black-200);
352
+ border: 1px solid var(--bc-darker);
314
353
  background-color: var(--white);
315
354
  outline: 0;
316
355
  font-size: inherit;
@@ -339,6 +378,11 @@ fieldset {
339
378
  background-color: var(--theme-secondary-400);
340
379
  background-image: url("data:image/svg+xml,%3Csvg width='11' height='11' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10 3.41L8.59 2 4 6.59 2.41 5 1 6.41l3 3z' fill='%23fff'/%3E%3C/svg%3E");
341
380
 
381
+ .highcontrast-dark-mode({
382
+ border-color: var(--blue-700) !important;
383
+ background-color: var(--blue-300);
384
+ });
385
+
342
386
  &:focus {
343
387
  border-color: var(--theme-secondary-400);
344
388
  }
@@ -361,6 +405,11 @@ fieldset {
361
405
  border-color: var(--theme-secondary-400);
362
406
  border-width: 0.30769231em;
363
407
  background-color: @white; // This should always be white regardless of dark mode
408
+
409
+ .highcontrast-dark-mode({
410
+ border-color: var(--blue-300);
411
+ outline: 1px solid var(--black);
412
+ });
364
413
  }
365
414
 
366
415
  &:focus {
@@ -380,6 +429,10 @@ fieldset {
380
429
  box-shadow: 0 0 0 @su4 var(--focus-ring);
381
430
  color: var(--black);
382
431
  outline: 0;
432
+
433
+ .highcontrast-mode({
434
+ border-color: var(--black);
435
+ })
383
436
  }
384
437
 
385
438
  .s-input:focus,
@@ -402,18 +455,21 @@ fieldset {
402
455
  // Disabled, Read-only
403
456
  &[disabled],
404
457
  &[read-only] {
405
- border-color: var(--black-075);
406
- background-color: var(--black-050);
407
- color: var(--black-200);
458
+ cursor: not-allowed;
459
+ opacity: 0.5;
460
+
461
+ .highcontrast-mode({
462
+ opacity: 0.5;
463
+ });
408
464
  }
409
465
 
410
466
  // Disabled
411
467
  &[disabled] {
412
468
  cursor: not-allowed;
469
+ opacity: 0.5;
413
470
  }
414
471
  }
415
472
 
416
-
417
473
  // ============================================================================
418
474
  // $ VALIDATION STATES
419
475
  // Classes are applied at the wrapping container level.
@@ -543,7 +599,7 @@ fieldset {
543
599
  .is-disabled {
544
600
  .s-select:before,
545
601
  .s-select:after {
546
- border-color: var(--black-200) transparent;
602
+ border-color: var(--bc-darker) transparent;
547
603
  }
548
604
 
549
605
  .s-label,
@@ -557,6 +613,10 @@ fieldset {
557
613
 
558
614
  .s-input-icon {
559
615
  color: var(--black-200);
616
+
617
+ .highcontrast-mode({
618
+ color: var(--black-400);
619
+ });
560
620
  }
561
621
 
562
622
  .s-label {
@@ -578,6 +638,10 @@ fieldset {
578
638
  right: auto;
579
639
  left: 0.7em;
580
640
  color: var(--black-200);
641
+
642
+ .highcontrast-mode({
643
+ color: var(--black-400);
644
+ });
581
645
  }
582
646
  }
583
647
 
@@ -626,6 +690,11 @@ fieldset {
626
690
  border-radius: @br-sm + 1;
627
691
  }
628
692
 
693
+ .s-textarea__md {
694
+ padding-top: 0.72em;
695
+ padding-bottom: 0.72em;
696
+ }
697
+
629
698
  .s-input__lg,
630
699
  .s-textarea__lg,
631
700
  .s-select__lg > select {
@@ -10,7 +10,7 @@
10
10
  // $ BASE STYLE
11
11
  // ----------------------------------------------------------------------------
12
12
  .s-link-preview {
13
- border: 1px solid var(--black-100);
13
+ border: 1px solid var(--bc-medium);
14
14
  border-radius: @br-sm;
15
15
  text-align: left;
16
16
  box-shadow: var(--bs-sm);
@@ -21,7 +21,7 @@
21
21
  background: var(--black-025);
22
22
  border-top-left-radius: @br-sm;
23
23
  border-top-right-radius: @br-sm;
24
- border-bottom: 1px solid var(--black-100);
24
+ border-bottom: 1px solid var(--bc-medium);
25
25
  padding: @su12 @su8;
26
26
  }
27
27
 
@@ -44,6 +44,8 @@ a.s-link-preview--title {
44
44
  &.s-link__visited:visited {
45
45
  color: var(--theme-link-color);
46
46
  text-decoration: none;
47
+
48
+ .highcontrast-mode({ text-decoration: underline; });
47
49
  }
48
50
 
49
51
  &:hover,
@@ -52,6 +54,8 @@ a.s-link-preview--title {
52
54
  &.s-link__visited:active {
53
55
  color: var(--theme-link-color-hover);
54
56
  text-decoration: none;
57
+
58
+ .highcontrast-mode({ text-decoration: underline; });
55
59
  }
56
60
  }
57
61
 
@@ -88,7 +92,7 @@ a.s-link-preview--title {
88
92
  background: var(--black-025);
89
93
  border-bottom-left-radius: @br-sm;
90
94
  border-bottom-right-radius: @br-sm;
91
- border-top: 1px solid var(--black-100);
95
+ border-top: 1px solid var(--bc-medium);
92
96
  padding: @su12;
93
97
  font-size: @fs-caption;
94
98
 
@@ -21,9 +21,12 @@ a,
21
21
  cursor: pointer;
22
22
  user-select: auto;
23
23
 
24
+ .highcontrast-mode({
25
+ text-decoration: underline;
26
+ });
27
+
24
28
  &.s-link__visited:visited {
25
29
  color: var(--theme-link-color-visited);
26
- text-decoration: none;
27
30
  }
28
31
 
29
32
  &:hover,
@@ -31,7 +34,6 @@ a,
31
34
  &:active,
32
35
  &.s-link__visited:active {
33
36
  color: var(--theme-link-color-hover);
34
- text-decoration: none;
35
37
  }
36
38
 
37
39
  &.s-link__grayscale {
@@ -92,6 +94,25 @@ a,
92
94
  &.s-link__underlined {
93
95
  text-decoration: underline !important;
94
96
  }
97
+
98
+ &.s-link__dropdown {
99
+ position: relative;
100
+ padding-right: 0.9em;
101
+
102
+ &:after {
103
+ content: "";
104
+ position: absolute;
105
+ z-index: @zi-active;
106
+ top: calc(50% - 2px);
107
+ right: 0;
108
+ border-style: solid;
109
+ border-width: @su4;
110
+ border-top-width: @su4;
111
+ border-bottom-width: 0;
112
+ border-color: currentColor transparent;
113
+ pointer-events: none;
114
+ }
115
+ }
95
116
  }
96
117
 
97
118
  button.s-link {
@@ -102,6 +123,7 @@ button.s-link {
102
123
  padding: 0;
103
124
  line-height: inherit;
104
125
  user-select: auto;
126
+ font-family: inherit;
105
127
 
106
128
  &:focus {
107
129
  outline: none;
@@ -158,6 +180,7 @@ button.s-link {
158
180
  border-radius: 0;
159
181
  text-align: left;
160
182
  line-height: inherit;
183
+ font-family: inherit;
161
184
 
162
185
  &:hover,
163
186
  &:active {
@@ -24,20 +24,20 @@
24
24
  .s-menu--divider {
25
25
  margin: @su8 0;
26
26
  height: 1px;
27
- background-color: var(--black-075);
27
+ background-color: var(--bc-light);
28
28
 
29
29
  .dark-mode({
30
- background-color: var(--black-025);
30
+ background-color: var(--bc-lightest);
31
31
  });
32
32
  }
33
33
 
34
34
  .s-menu--label {
35
35
  cursor: pointer;
36
36
  padding: @su12;
37
- border-top: 1px solid var(--black-075);
37
+ border-top: 1px solid var(--bc-light);
38
38
 
39
39
  .dark-mode({
40
- border-top-color: var(--black-025);
40
+ border-top-color: var(--bc-lightest);
41
41
  });
42
42
 
43
43
  &.is-disabled {
@@ -51,7 +51,7 @@
51
51
  padding: @su24;
52
52
  border-radius: @br-lg;
53
53
  background-color: var(--white);
54
- box-shadow: @bs-lg;
54
+ box-shadow: var(--bs-lg);
55
55
  opacity: 0;
56
56
  backface-visibility: hidden;
57
57
  transform: translate3d(0, 30%, 0) scale3d(0.6, 0.6, 0.6);
@@ -44,6 +44,11 @@
44
44
  &:active {
45
45
  background: var(--black-075);
46
46
  color: var(--black-600);
47
+
48
+ .highcontrast-mode({
49
+ background: var(--black-600);
50
+ color: var(--black-100);
51
+ });
47
52
  }
48
53
 
49
54
  @focus-styles();
@@ -51,6 +56,14 @@
51
56
  &.is-selected {
52
57
  background: var(--theme-primary-color);
53
58
  color: var(--white);
59
+
60
+ &:hover,
61
+ &:active {
62
+ background: var(--theme-primary-600);
63
+ color: var(--white);
64
+ }
65
+
66
+ .highcontrast-mode({ text-decoration: none; });
54
67
  }
55
68
 
56
69
  &.s-navigation--item__dropdown {
@@ -109,6 +122,11 @@
109
122
  &.is-selected {
110
123
  background: var(--black-050);
111
124
  color: var(--black-800);
125
+
126
+ .highcontrast-mode({
127
+ background: var(--black-800);
128
+ color: var(--black-050);
129
+ });
112
130
  }
113
131
  }
114
132
 
@@ -75,10 +75,23 @@
75
75
  border-color: var(--green-200);
76
76
  background-color: var(--green-050);
77
77
 
78
+ // Bump up the border contrast in high contrast mode
79
+ .highcontrast-mode({
80
+ background-color: var(--green-200);
81
+ border-color: var(--green-400);
82
+ });
83
+
78
84
  &.s-notice__important,
79
85
  &.s-banner__important {
80
86
  background-color: var(--green-400);
81
87
  color: var(--black-900);
88
+
89
+ // Bump up the text in high contrast
90
+ .highcontrast-mode({
91
+ background-color: var(--green-500);
92
+ color: var(--white);
93
+ border-color: transparent;
94
+ });
82
95
  }
83
96
 
84
97
  // Improve the presentation of buttons
@@ -101,10 +114,23 @@
101
114
  border-color: var(--yellow-300);
102
115
  background-color: var(--yellow-050);
103
116
 
117
+ // Bump up the border contrast in high contrast mode
118
+ .highcontrast-mode({
119
+ background-color: var(--yellow-200);
120
+ border-color: var(--yellow-700);
121
+ });
122
+
104
123
  &.s-notice__important,
105
124
  &.s-banner__important {
106
125
  background-color: var(--yellow-400);
107
126
  color: var(--black-900);
127
+
128
+ // Bump up the text in high contrast
129
+ .highcontrast-mode({
130
+ background-color: var(--yellow-500);
131
+ color: var(--white);
132
+ border-color: transparent;
133
+ });
108
134
  }
109
135
 
110
136
  // Improve the presentation of buttons
@@ -131,6 +157,17 @@
131
157
  border-color: var(--red-200);
132
158
  background-color: var(--red-050);
133
159
 
160
+ // Bump up the border contrast in high contrast mode
161
+ .highcontrast-mode({
162
+ background-color: var(--red-200);
163
+ border-color: var(--red-500);
164
+
165
+ &.s-notice__important,
166
+ &.s-banner__important {
167
+ background-color: var(--red-500);
168
+ }
169
+ });
170
+
134
171
  &.s-notice__important,
135
172
  &.s-banner__important {
136
173
  background-color: var(--red-400);
@@ -161,9 +198,9 @@
161
198
  .s-notice__success,
162
199
  .s-notice__warning,
163
200
  .s-notice__danger {
164
- .dark-mode({
165
- border-color: transparent;
166
- });
201
+ .dark-mode({ border-color: transparent; });
202
+ .highcontrast-mode({ border-color: currentColor; });
203
+
167
204
  }
168
205
 
169
206
  // ============================================================================
@@ -17,7 +17,7 @@
17
17
  align-items: flex-end;
18
18
  width: 100%;
19
19
  padding-bottom: @su16;
20
- border-bottom: 1px solid var(--black-100);
20
+ border-bottom: 1px solid var(--bc-medium);
21
21
 
22
22
  #stacks-internals #screen-md({
23
23
  flex-direction: column;
@@ -25,13 +25,15 @@
25
25
  padding: 0 @su8;
26
26
  background-color: transparent;
27
27
  border-radius: @br-sm;
28
- border: 1px solid var(--black-100);
28
+ border: 1px solid var(--bc-medium);
29
29
  font-size: @fs-body1;
30
30
  line-height: @lh-xl;
31
31
  color: var(--fc-medium);
32
32
 
33
+ .highcontrast-mode({ text-decoration: none; });
34
+
33
35
  &:hover {
34
- border-color: var(--black-200);
36
+ border-color: var(--bc-darker);
35
37
  background-color: var(--black-100);
36
38
  color: var(--fc-dark);
37
39
  }
@@ -22,7 +22,7 @@
22
22
  padding: @su12;
23
23
  z-index: @zi-popovers;
24
24
  border-radius: @br-md;
25
- border: 1px solid var(--black-100);
25
+ border: 1px solid var(--bc-medium);
26
26
  background-color: var(--white);
27
27
  box-shadow: var(--bs-md);
28
28
  color: var(--fc-dark);
@@ -30,9 +30,13 @@
30
30
  min-width: 12rem;
31
31
  width: 100%;
32
32
 
33
+ // Guard against popovers being in a container with white-space: nowrap
34
+ // Without this, the content pops *out* of the popover.
35
+ white-space: normal;
36
+
33
37
  .dark-mode({
34
38
  background-color: var(--black-075);
35
- border-color: transparent;
39
+ border-color: var(--bc-light);
36
40
  box-shadow: var(--bs-lg);
37
41
  });
38
42
 
@@ -54,6 +58,10 @@
54
58
  &:after {
55
59
  bottom: 1px;
56
60
  box-shadow: 2px 2px 5px 0 hsla(0, 0, 0, 0.07), 2px 2px 2px -1px hsla(0, 0, 0, 0.1);
61
+
62
+ .highcontrast-mode({
63
+ box-shadow: 1px 1px 0 0 var(--bc-medium);
64
+ });
57
65
  }
58
66
  }
59
67
 
@@ -66,6 +74,10 @@
66
74
  &:after {
67
75
  top: 1px;
68
76
  box-shadow: -1px -1px 1px 0 hsla(0, 0, 0, 0.12);
77
+
78
+ .highcontrast-mode({
79
+ box-shadow: -1px -1px 0 0 var(--bc-medium);
80
+ });
69
81
  }
70
82
  }
71
83
 
@@ -78,6 +90,10 @@
78
90
  &:after {
79
91
  right: 1px;
80
92
  box-shadow: 2px -2px 5px 0 hsla(0, 0, 0, 0.07), 2px -2px 2px -1px hsla(0, 0, 0, 0.1);
93
+
94
+ .highcontrast-mode({
95
+ box-shadow: 1px -1px 0 0 var(--bc-medium);
96
+ });
81
97
  }
82
98
  }
83
99
 
@@ -90,6 +106,10 @@
90
106
  &:after {
91
107
  left: 1px;
92
108
  box-shadow: -2px 2px 5px 0 hsla(0, 0, 0, 0.07), -2px 2px 2px -1px hsla(0, 0, 0, 0.1);
109
+
110
+ .highcontrast-mode({
111
+ box-shadow: -1px 1px 0 0 var(--bc-medium);
112
+ });
93
113
  }
94
114
  }
95
115