@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
@@ -10,7 +10,7 @@
10
10
  .s-post-summary {
11
11
  position: relative;
12
12
  display: flex;
13
- border-bottom: 1px solid var(--black-075);
13
+ border-bottom: 1px solid var(--bc-light);
14
14
  padding: @su16;
15
15
 
16
16
  &:last-child {
@@ -69,8 +69,20 @@
69
69
  white-space: nowrap;
70
70
  border: 1px solid transparent;
71
71
 
72
+ .svg-icon {
73
+ vertical-align: text-bottom;
74
+ }
75
+
72
76
  &.has-answers,
73
- &.has-bounty {
77
+ &.has-bounty,
78
+ &.is-watched,
79
+ &.is-ignored,
80
+ &.is-deleted,
81
+ &.is-published,
82
+ &.is-draft,
83
+ &.is-review,
84
+ &.is-closed,
85
+ &.is-archived {
74
86
  border-radius: @br-sm;
75
87
  padding: @su2 @su4;
76
88
  }
@@ -82,6 +94,10 @@
82
94
  &.has-accepted-answer {
83
95
  color: @white;
84
96
  background-color: var(--green-500);
97
+
98
+ .highcontrast-mode({
99
+ color: var(--white);
100
+ });
85
101
  }
86
102
  }
87
103
 
@@ -101,6 +117,35 @@
101
117
  &.is-supernova {
102
118
  color: var(--orange-400);
103
119
  }
120
+
121
+ &.is-published {
122
+ color: var(--black-800);
123
+ background-color: var(--black-050);
124
+ }
125
+
126
+ &.is-draft {
127
+ color: var(--blue-900);
128
+ background-color: var(--blue-100);
129
+ border-color: var(--blue-600);
130
+ }
131
+
132
+ &.is-review {
133
+ color: var(--yellow-900);
134
+ background-color: var(--yellow-100);
135
+ border-color: var(--yellow-600);
136
+ }
137
+
138
+ &.is-closed {
139
+ color: var(--red-900);
140
+ background-color: var(--red-100);
141
+ border-color: var(--red-600);
142
+ }
143
+
144
+ &.is-archived {
145
+ color: var(--black-900);
146
+ background-color: var(--black-100);
147
+ border-color: var(--black-600);
148
+ }
104
149
  }
105
150
 
106
151
  #stacks-internals #screen-md({
@@ -116,7 +161,7 @@
116
161
 
117
162
  .s-post-summary--content-title {
118
163
  display: inline-block;
119
- font-size: @fs-subheading;
164
+ font-size: @fs-body3;
120
165
  margin-bottom: @su6;
121
166
  overflow-wrap: break-word;
122
167
  word-wrap: break-word;
@@ -178,3 +223,89 @@
178
223
  margin-left: auto;
179
224
  }
180
225
  }
226
+
227
+ .s-post-summary--answer {
228
+ position: relative;
229
+ margin: @su16 1em 0 1em;
230
+ padding: 0.5em 0 0.5em calc(1em + @su4);
231
+
232
+ + .s-post-summary--answer {
233
+ margin-top: @su16;
234
+ }
235
+
236
+ &:before {
237
+ content: "";
238
+ display: block;
239
+ position: absolute;
240
+ top: 0;
241
+ bottom: 0;
242
+ left: 0;
243
+ width: @su4;
244
+ border-radius: @su8;
245
+ background: var(--black-150);
246
+
247
+ .highcontrast-mode({
248
+ background: var(--black-600);
249
+ });
250
+ }
251
+
252
+ .s-post-summary--stats {
253
+ width: auto;
254
+ flex-direction: row;
255
+ align-items: center;
256
+ margin-bottom: @su4;
257
+ }
258
+
259
+ .s-post-summary--answer-excerpt {
260
+ color: var(--black-600);
261
+ margin-bottom: @su8;
262
+ .v-truncate4;
263
+ }
264
+ }
265
+
266
+ .s-post-summary__watched .is-watched {
267
+ color: var(--white);
268
+ background-color: var(--yellow-600);
269
+ }
270
+
271
+ .s-post-summary__ignored .is-ignored {
272
+ color: var(--white);
273
+ background-color: var(--black-600);
274
+ }
275
+
276
+ .s-post-summary__deleted .is-deleted {
277
+ color: @white;
278
+ background-color: var(--red-500);
279
+ }
280
+
281
+ .s-post-summary__ignored,
282
+ .s-post-summary__deleted {
283
+ .s-post-summary--content {
284
+ opacity: 0.7;
285
+ }
286
+
287
+ .s-post-summary--stats-item:not(.is-ignored):not(.is-deleted) {
288
+ opacity: 0.7;
289
+ filter: grayscale(100%);
290
+ }
291
+
292
+ .s-post-summary--content-title {
293
+ color: var(--black-600);
294
+
295
+ &:hover {
296
+ color: var(--black-500);
297
+ }
298
+
299
+ &:visited {
300
+ color: var(--black-700);
301
+ }
302
+ }
303
+
304
+ .s-post-summary--content-excerpt {
305
+ color: var(--black-500);
306
+ }
307
+
308
+ .s-post-summary--meta {
309
+ filter: grayscale(100%);
310
+ }
311
+ }
@@ -37,7 +37,6 @@
37
37
  background-color: var(--green-400);
38
38
  }
39
39
 
40
-
41
40
  // $$ LABEL
42
41
  // For when there's descriptive, label copy within the progress bar
43
42
  // ----------------------------------------------------------------------------
@@ -53,7 +52,6 @@
53
52
  z-index: @zi-base + 2;
54
53
  }
55
54
 
56
-
57
55
  // ===========================================================================
58
56
  // $ VARIATION PROGRESS BACKGROUNDS
59
57
  // ---------------------------------------------------------------------------
@@ -68,13 +66,20 @@
68
66
  .s-progress__privilege {
69
67
  .s-progress--bar {
70
68
  background-color: var(--green-050);
69
+
70
+ .highcontrast-mode({
71
+ background-color: var(--green-200);
72
+ });
71
73
  }
72
74
  .s-progress--label {
73
75
  border-color: var(--green-400);
76
+ display: flex;
77
+ gap: @su4;
78
+ align-items: center;
79
+ justify-content: center;
74
80
  }
75
81
  }
76
82
 
77
-
78
83
  // ===========================================================================
79
84
  // $ BADGE PROGRESS BARS
80
85
  // ===========================================================================
@@ -91,6 +96,20 @@
91
96
  background-color: transparent;
92
97
  }
93
98
 
99
+ .s-progress__badge {
100
+ .s-progress--label {
101
+ display: flex;
102
+ gap: @su4;
103
+ align-items: center;
104
+ padding-left: 1em;
105
+ padding-right: 1em;
106
+
107
+ .s-badge--label {
108
+ text-align: center;
109
+ flex-grow: 1;
110
+ }
111
+ }
112
+ }
94
113
 
95
114
  // $$ GOLD
96
115
  // ---------------------------------------------------------------------------
@@ -190,7 +209,7 @@
190
209
  border-radius: 0;
191
210
  padding: @su12 @su6 0 @su6;
192
211
  text-align: center;
193
- color: var(--black-200);
212
+ color: var(--black-300);
194
213
  z-index: @zi-base;
195
214
  }
196
215
 
@@ -199,19 +218,23 @@
199
218
  display: flex;
200
219
  align-items: center;
201
220
  justify-content: center;
202
- background: var(--black-200);
221
+ background: var(--black-300);
203
222
  border-radius: 100%;
204
223
  width: @su24;
205
224
  height: @su24;
206
225
  z-index: @zi-selected;
207
226
  color: @white;
227
+
228
+ .highcontrast-mode({
229
+ color: var(--white);
230
+ });
208
231
  }
209
232
 
210
233
  .s-progress--bar {
211
234
  position: absolute;
212
235
  top: 9px;
213
236
  height: @su6;
214
- background: var(--black-200);
237
+ background: var(--black-300);
215
238
  z-index: @zi-base;
216
239
  border-radius: 0;
217
240
 
@@ -46,6 +46,11 @@
46
46
  background-color: var(--black-100);
47
47
  height: 1px;
48
48
  margin-bottom: var(--s-prose-spacing);
49
+
50
+ .highcontrast-mode({
51
+ color: var(--black-500);
52
+ background-color: var(--black-500);
53
+ });
49
54
  }
50
55
 
51
56
  li {
@@ -317,9 +322,13 @@
317
322
  top: 0;
318
323
  bottom: 0;
319
324
  left: 0;
320
- width: 4px;
321
- border-radius: 8px;
325
+ width: @su4;
326
+ border-radius: @su8;
322
327
  background: var(--black-150);
328
+
329
+ .highcontrast-mode({
330
+ background: var(--black-600);
331
+ });
323
332
  }
324
333
 
325
334
  blockquote {
@@ -422,6 +431,11 @@
422
431
  border-radius: @br-sm;
423
432
  }
424
433
 
434
+ // When contained within a link, we want the code to be link-colored
435
+ *:not(.s-code-block) > a code {
436
+ color: var(--theme-link-color);
437
+ }
438
+
425
439
  pre {
426
440
  margin-top: 0;
427
441
  margin-bottom: calc(var(--s-prose-spacing) + 0.4em); // Increase this spacing for better optical alignment
@@ -45,9 +45,9 @@
45
45
  th,
46
46
  td {
47
47
  padding: @su8;
48
- border-top: 1px solid var(--black-100);
49
- border-left: 1px solid var(--black-100);
50
- border-right: 1px solid var(--black-100);
48
+ border-top: 1px solid var(--bc-medium);
49
+ border-left: 1px solid var(--bc-medium);
50
+ border-right: 1px solid var(--bc-medium);
51
51
  vertical-align: middle;
52
52
  color: var(--fc-medium);
53
53
  text-align: left;
@@ -82,12 +82,12 @@
82
82
  // If it's the last row, add a bottom border
83
83
  tr:last-of-type td,
84
84
  tr:last-of-type th {
85
- border-bottom: 1px solid var(--black-100);
85
+ border-bottom: 1px solid var(--bc-medium);
86
86
  }
87
87
 
88
88
  // If two table bodies are next to each other, visually separate them
89
89
  tbody + tbody {
90
- border-top: @su2 solid var(--black-100);
90
+ border-top: @su2 solid var(--bc-medium);
91
91
  }
92
92
  }
93
93
 
@@ -240,7 +240,7 @@
240
240
  }
241
241
  thead th {
242
242
  border-top-color: transparent;
243
- border-bottom-color: var(--black-200);
243
+ border-bottom-color: var(--bc-darker);
244
244
  // Clear Header Styles
245
245
  background-color: transparent;
246
246
  text-transform: initial;
@@ -312,6 +312,10 @@
312
312
  th:not(.is-enabled),
313
313
  td:not(.is-enabled) {
314
314
  opacity: 0.3;
315
+
316
+ .highcontrast-mode({
317
+ opacity: 0.8;
318
+ });
315
319
  }
316
320
  }
317
321
  }
@@ -17,13 +17,21 @@
17
17
  background-color: @background;
18
18
  color: @color;
19
19
 
20
+ .highcontrast-mode({
21
+ border-color: currentColor;
22
+ });
23
+
20
24
  .s-tag--dismiss {
21
25
  color: inherit;
22
26
  background-color: transparent;
23
27
 
24
28
  &:hover {
25
- color: @white; // We want this color to remain fixed regardless of dark mode
29
+ color: @background;
26
30
  background-color: @color;
31
+
32
+ .highcontrast-mode({
33
+ color: var(--white); // We do not want this color to remain fixed
34
+ });
27
35
  }
28
36
  }
29
37
  }
@@ -32,6 +40,10 @@
32
40
  border-color: @border;
33
41
  background-color: @background;
34
42
  color: @color;
43
+
44
+ .highcontrast-mode({
45
+ border-color: currentColor;
46
+ });
35
47
  }
36
48
 
37
49
  .s-tag-hover-styles(@border-hover: transparent, @background-hover: transparent, @color-hover: inherit) {
@@ -41,6 +53,10 @@
41
53
  border-color: @border-hover;
42
54
  background-color: @background-hover;
43
55
  color: @color-hover;
56
+
57
+ .highcontrast-mode({
58
+ border-color: currentColor;
59
+ });
44
60
  }
45
61
  }
46
62
 
@@ -66,10 +82,12 @@
66
82
  vertical-align: middle;
67
83
  white-space: nowrap;
68
84
 
69
- .s-tag-styles(@tags-border, @tags-background, @tags-color);
85
+ .s-tag-styles(var(--theme-tag-border-color), var(--theme-tag-background-color), var(--theme-tag-color));
86
+
87
+ .highcontrast-mode({ text-decoration: none; });
70
88
 
71
89
  &.is-selected {
72
- .s-tag-selected-styles(@tags-selected-border, @tags-selected-background, @tags-selected-color);
90
+ .s-tag-selected-styles(transparent, var(--theme-secondary-200), var(--theme-secondary-900));
73
91
  }
74
92
 
75
93
  // -- SIZES
@@ -100,7 +118,7 @@
100
118
 
101
119
  a.s-tag:not(.is-selected) {
102
120
  #stacks-internals #load-config();
103
- .s-tag-hover-styles(@tags-hover-border, @tags-hover-background, @tags-hover-color);
121
+ .s-tag-hover-styles(var(--theme-tag-hover-border-color), var(--theme-tag-hover-background-color), var(--theme-tag-hover-color));
104
122
  }
105
123
 
106
124
  // $$ DISMISS ICON
@@ -189,18 +207,3 @@ a.s-tag__muted:not(.is-selected) {
189
207
  #stacks-internals #load-config();
190
208
  .s-tag-hover-styles(@tags-muted-hover-border, @tags-muted-hover-background, @tags-muted-hover-color);
191
209
  }
192
-
193
- // $$ Themed Tag
194
- // ---------------------------------------------------------------------------
195
- .s-tag__themed {
196
- #stacks-internals #load-config();
197
- .s-tag-styles(var(--theme-primary-300), var(--theme-primary-050), var(--theme-primary-700));
198
-
199
- &.is-selected {
200
- .s-tag-selected-styles(transparent, var(--theme-primary-200), var(--theme-primary-900));
201
- }
202
- }
203
- a.s-tag__themed:not(.is-selected) {
204
- #stacks-internals #load-config();
205
- .s-tag-hover-styles(var(--theme-primary-400), var(--theme-primary-100), var(--theme-primary-900));
206
- }
@@ -49,6 +49,10 @@
49
49
  border-radius: 50%;
50
50
  background: @white;
51
51
  transition: left 0.1s ease;
52
+
53
+ .highcontrast-mode({
54
+ background: var(--white);
55
+ });
52
56
  }
53
57
 
54
58
  &:before {
@@ -112,12 +116,20 @@
112
116
  &.s-toggle-switch--label-off {
113
117
  background-color: var(--black-300);
114
118
  color: @white;
119
+
120
+ .highcontrast-mode({
121
+ color: var(--white);
122
+ });
115
123
  }
116
124
 
117
125
  // Color activated options green
118
126
  &:not(.s-toggle-switch--label-off) {
119
127
  background-color: var(--green-400);
120
128
  color: @white;
129
+
130
+ .highcontrast-mode({
131
+ color: var(--white);
132
+ });
121
133
  }
122
134
  }
123
135
  }