@stackoverflow/stacks 1.4.1 → 1.5.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.
@@ -54,6 +54,8 @@
54
54
  #stacks-internals #flex-builder-helpers .create-flex-count-cols(@num, (@count + 1));
55
55
  }
56
56
 
57
+ // DEPRECATED - START
58
+ //
57
59
  // -- FLEX GUTTERS
58
60
  // ============================================================================
59
61
  // We need two mixins to properly generate flex gutters:
@@ -151,6 +153,38 @@
151
153
  // widths for the new gutters.
152
154
  #stacks-internals #flex-builder-helpers .flex-fixed-item-spacing(@spacing, @flex-cols);
153
155
  }
156
+ //
157
+ // DEPRECATED - END
158
+
159
+ // -- FLEX GAP
160
+ // ------------------------------------------------------------------------
161
+ // [1] FIXED WIDTH ITEMS
162
+ // This makes the fixed width items to account for gaps.
163
+ //
164
+ // [2] UNIFORM CHILD FLEX ITEMS
165
+ // This class allows you to uniformly state the width of `.flex--item`
166
+ // divs within a `.d-flex` element. In particular we adjust the flex-basis
167
+ // and max-width here to account for gaps.
168
+ // ------------------------------------------------------------------------
169
+ .flex-fixed-item-spacing-gap(@spacing, @num, @count: 1) when (@count =< @num) {
170
+ @itemWidth: (@count * 100% / @num);
171
+ @gapRatio: ((@num - @count) / @num);
172
+
173
+ > .flex--item@{count}, // [1]
174
+ &.flex__allitems@{count} > .d-flex, // [2]
175
+ &.flex__allitems@{count} > .flex--item { // [2]
176
+ flex-basis: calc(~"@{itemWidth} - (@{spacing} * @{gapRatio})");
177
+ }
178
+
179
+ #stacks-internals #flex-builder-helpers .flex-fixed-item-spacing-gap(@spacing, @num, (@count + 1));
180
+ }
181
+
182
+
183
+ .gap-spacing(@spacing) {
184
+ #stacks-internals #flex-builder-settings();
185
+
186
+ #stacks-internals #flex-builder-helpers .flex-fixed-item-spacing-gap(@spacing, @flex-cols);
187
+ }
154
188
  }
155
189
  }
156
190
 
@@ -194,9 +228,24 @@
194
228
  }
195
229
  // ============================================================================
196
230
  // $ FLEX SPACING
197
- // Insert spaces or gutters in between flex items
231
+ // Insert spaces or gaps in between flex items
198
232
  // ----------------------------------------------------------------------------
199
- // TODO: Make this play nice with spacing units… or yeet this in the age of gap
233
+ .g0, .gx0, .gy0 { #stacks-internals #flex-builder-helpers .gap-spacing(var(--su0)); }
234
+ .g1, .gx1, .gy1 { #stacks-internals #flex-builder-helpers .gap-spacing(var(--su1)); }
235
+ .g2, .gx2, .gy2 { #stacks-internals #flex-builder-helpers .gap-spacing(var(--su2)); }
236
+ .g4, .gx4, .gy4 { #stacks-internals #flex-builder-helpers .gap-spacing(var(--su4)); }
237
+ .g6, .gx6, .gy6 { #stacks-internals #flex-builder-helpers .gap-spacing(var(--su6)); }
238
+ .g8, .gx8, .gy8 { #stacks-internals #flex-builder-helpers .gap-spacing(var(--su8)); }
239
+ .g12, .gx12, .gy12 { #stacks-internals #flex-builder-helpers .gap-spacing(var(--su12)); }
240
+ .g16, .gx16, .gy16 { #stacks-internals #flex-builder-helpers .gap-spacing(var(--su16)); }
241
+ .g24, .gx24, .gy24 { #stacks-internals #flex-builder-helpers .gap-spacing(var(--su24)); }
242
+ .g32, .gx32, .gy32 { #stacks-internals #flex-builder-helpers .gap-spacing(var(--su32)); }
243
+ .g48, .gx48, .gy48 { #stacks-internals #flex-builder-helpers .gap-spacing(var(--su48)); }
244
+ .g64, .gx64, .gy64 { #stacks-internals #flex-builder-helpers .gap-spacing(var(--su64)); }
245
+
246
+
247
+ // DEPRECATED - START
248
+ //
200
249
  .gs2 { #stacks-internals #flex-builder-helpers .gutter-spacing(var(--su2)); }
201
250
  .gs4 { #stacks-internals #flex-builder-helpers .gutter-spacing(var(--su4)); }
202
251
  .gs6 { #stacks-internals #flex-builder-helpers .gutter-spacing(var(--su6)); }
@@ -227,6 +276,8 @@
227
276
  margin-left: 0;
228
277
  }
229
278
  }
279
+ //
280
+ // DEPRECATED - END
230
281
 
231
282
 
232
283
  // ============================================================================
@@ -1,15 +1,15 @@
1
- #stacks-internals #responsify('.g0', { --_gap-x: 0; --_gap-y: 0; });
2
- #stacks-internals #responsify('.g1', { --_gap-x: var(--su1); --_gap-y: var(--su1); });
3
- #stacks-internals #responsify('.g2', { --_gap-x: var(--su2); --_gap-y: var(--su2); });
4
- #stacks-internals #responsify('.g4', { --_gap-x: var(--su4); --_gap-y: var(--su4); });
5
- #stacks-internals #responsify('.g6', { --_gap-x: var(--su6); --_gap-y: var(--su6); });
6
- #stacks-internals #responsify('.g8', { --_gap-x: var(--su8); --_gap-y: var(--su8); });
7
- #stacks-internals #responsify('.g12', { --_gap-x: var(--su12); --_gap-y: var(--su12); });
8
- #stacks-internals #responsify('.g16', { --_gap-x: var(--su16); --_gap-y: var(--su16); });
9
- #stacks-internals #responsify('.g24', { --_gap-x: var(--su24); --_gap-y: var(--su24); });
10
- #stacks-internals #responsify('.g32', { --_gap-x: var(--su32); --_gap-y: var(--su32); });
11
- #stacks-internals #responsify('.g48', { --_gap-x: var(--su48); --_gap-y: var(--su48); });
12
- #stacks-internals #responsify('.g64', { --_gap-x: var(--su64); --_gap-y: var(--su64); });
1
+ #stacks-internals #responsify('.g0', { --_gap-y: 0; --_gap-x: 0; });
2
+ #stacks-internals #responsify('.g1', { --_gap-y: var(--su1); --_gap-x: var(--su1); });
3
+ #stacks-internals #responsify('.g2', { --_gap-y: var(--su2); --_gap-x: var(--su2); });
4
+ #stacks-internals #responsify('.g4', { --_gap-y: var(--su4); --_gap-x: var(--su4); });
5
+ #stacks-internals #responsify('.g6', { --_gap-y: var(--su6); --_gap-x: var(--su6); });
6
+ #stacks-internals #responsify('.g8', { --_gap-y: var(--su8); --_gap-x: var(--su8); });
7
+ #stacks-internals #responsify('.g12', { --_gap-y: var(--su12); --_gap-x: var(--su12); });
8
+ #stacks-internals #responsify('.g16', { --_gap-y: var(--su16); --_gap-x: var(--su16); });
9
+ #stacks-internals #responsify('.g24', { --_gap-y: var(--su24); --_gap-x: var(--su24); });
10
+ #stacks-internals #responsify('.g32', { --_gap-y: var(--su32); --_gap-x: var(--su32); });
11
+ #stacks-internals #responsify('.g48', { --_gap-y: var(--su48); --_gap-x: var(--su48); });
12
+ #stacks-internals #responsify('.g64', { --_gap-y: var(--su64); --_gap-x: var(--su64); });
13
13
 
14
14
  #stacks-internals #responsify('.gx0', { --_gap-x: 0; });
15
15
  #stacks-internals #responsify('.gx1', { --_gap-x: var(--su1); });
@@ -40,5 +40,5 @@
40
40
  .gx0, .gx1, .gx2, .gx4, .gx6, .gx8, .gx12, .gx16, .gx24, .gx32, .gx48, .gx64,
41
41
  .gy0, .gy1, .gy2, .gy4, .gy6, .gy8, .gy12, .gy16, .gy24, .gy32, .gy48, .gy64,
42
42
  .g0, .g1, .g2, .g4, .g6, .g8, .g12, .g16, .g24, .g32, .g48, .g64 {
43
- gap: var(--_gap-x, 0) var(--_gap-y, 0);
43
+ gap: var(--_gap-y, 0) var(--_gap-x, 0);
44
44
  }
@@ -26,6 +26,12 @@
26
26
  --_cn-bg: transparent;
27
27
  }
28
28
 
29
+ // STATES
30
+ // These are generally classes prefixed with `.is-` or `.has-`
31
+ &.is-selected {
32
+ --_cn-bg: var(--orange-200);
33
+ }
34
+
29
35
  // MODIFIERS
30
36
  // Modifiers are considered to be classes that can be combined with other modifiers outside of their respective groupings without collisions
31
37
  // Sizes
@@ -51,14 +57,11 @@
51
57
  }
52
58
 
53
59
  // CHILD ELEMENTS
54
- &--image {
60
+ & &--image {
55
61
  background-color: var(--_cn-image-bg);
56
62
  }
57
63
 
58
64
  // INTERACTION
59
- .is-selected {
60
- --_cn-bg: var(--orange-200);
61
- }
62
65
  &:hover {
63
66
  --_cn-bg: var(--_black-050);
64
67
  }
@@ -3,19 +3,20 @@
3
3
  --_ai-bg: var(--theme-secondary-400);
4
4
  --_ai-fc: @white;
5
5
 
6
+ // CONTEXTUAL STYLES
6
7
  .highcontrast-mode({ --_ai-fc: var(--white); });
7
8
 
8
9
  // VARIANTS
9
10
  &&__success {
10
- --_ai-bg-color: var(--green-500);
11
+ --_ai-bg: var(--green-500);
11
12
  --_ai-focus-ring: var(--focus-ring-success);
12
13
  }
13
14
  &&__warning {
14
- --_ai-bg-color: var(--yellow-600);
15
+ --_ai-bg: var(--yellow-600);
15
16
  --_ai-focus-ring: var(--focus-ring-warning);
16
17
  }
17
18
  &&__danger {
18
- --_ai-bg-color: var(--red-500);
19
+ --_ai-bg: var(--red-500);
19
20
  --_ai-focus-ring: var(--focus-ring-error);
20
21
  }
21
22
 
@@ -5,6 +5,7 @@
5
5
  --_av-fs-letter: calc(var(--su-static12) - var(--su-static1));
6
6
  --_av-scale-badge: 1;
7
7
 
8
+ // CONTEXTUAL STYLES
8
9
  .highcontrast-mode({
9
10
  background-color: var(--black);
10
11
  box-shadow: 0 0 0 1px var(--black);
@@ -15,7 +16,7 @@
15
16
  }
16
17
  });
17
18
 
18
- // VARIANTS
19
+ // MODIFIERS
19
20
  // Sizes
20
21
  &&__32,
21
22
  &&__48 {
@@ -10,19 +10,20 @@
10
10
  --_ba-py: 0;
11
11
  --_ba-wmn: 0;
12
12
 
13
+ // CONTEXTUAL STYLES
13
14
  .highcontrast-mode({
14
15
  // Badge counts
15
- &__gold,
16
- &__silver,
17
- &__bronze,
16
+ &&__gold,
17
+ &&__silver,
18
+ &&__bronze,
18
19
  // Number counts
19
- &__rep,
20
- &__rep-down,
21
- &__votes,
20
+ &&__rep,
21
+ &&__rep-down,
22
+ &&__votes,
22
23
  // Users
23
- &__admin,
24
- &__moderator,
25
- &__staff {
24
+ &&__admin,
25
+ &&__moderator,
26
+ &&__staff {
26
27
  --_ba-bc: currentColor;
27
28
  }
28
29
  });
@@ -193,6 +194,7 @@
193
194
  }
194
195
  }
195
196
 
197
+ // CHILD ELEMENTS
196
198
  & &--image {
197
199
  display: inline-flex;
198
200
  align-self: center;
@@ -200,6 +202,7 @@
200
202
  margin-left: calc((var(--su4) + var(--su1)) * -1);
201
203
  }
202
204
 
205
+ // INTERACTION
203
206
  a&:hover {
204
207
  text-decoration: none;
205
208
  }
@@ -1,9 +1,12 @@
1
1
  .s-card {
2
2
  --_ca-bc: var(--bc-medium);
3
3
 
4
+ // CONTEXTUAL STYLES
4
5
  a& {
5
6
  text-decoration: none !important;
6
7
  }
8
+
9
+ // VARIANTS
7
10
  &&__muted {
8
11
  --_ca-bc: var(--bc-light);
9
12
 
@@ -18,7 +21,7 @@
18
21
  margin-bottom: 0;
19
22
  }
20
23
 
21
- border: 1px solid var(--_ca-bc);
24
+ border: var(--su-static1) solid var(--_ca-bc);
22
25
 
23
26
  background-color: var(--white);
24
27
  border-radius: var(--br-sm);
@@ -1,9 +1,5 @@
1
1
  .s-empty-state {
2
- color: var(--fc-light);
3
- text-align: center;
4
- margin-left: auto;
5
- margin-right: auto;
6
-
2
+ // CHILD ELEMENTS
7
3
  p {
8
4
  font-size: var(--fs-body1);
9
5
  margin-bottom: var(--su12);
@@ -12,4 +8,9 @@
12
8
  color: var(--fc-dark);
13
9
  }
14
10
  }
11
+
12
+ color: var(--fc-light);
13
+ text-align: center;
14
+ margin-left: auto;
15
+ margin-right: auto;
15
16
  }
@@ -29,76 +29,86 @@
29
29
  // (no longer visible) element itself to remain at the top, thereby forcing the excess pixels to be added
30
30
  // above the top, not below the bottom. And because extending content above the document top will not do
31
31
  // anything to the document height, there is no jumping during the transition.
32
-
33
- @stacks-internals-s-expandable-transition-duration: 100ms;
32
+ // see custom property "--_ex-transition-duration"
34
33
 
35
34
  // Per the answer referenced above, the component can only guarantee smooth transitions if above a minimum
36
35
  // height and can only guarantee the element will be hidden is below a maximimum height.
37
36
  // The minimum height has been set at 10px because that's below the height of a single line of text in an s-description.
38
- @stacks-internal-s-expandable-min-expected-height: 10px;
39
- @stacks-internal-s-expandable-max-expected-height: 1500px;
37
+ // see custom properties "--_ex-min-expected-height" and "--_ex-content-mb"
40
38
 
41
39
  .s-expandable {
42
- display: flex;
43
- -webkit-clip-path: polygon(-1000000px -1000000px, 1000000px -1000000px, 1000000px 1000000px, -1000000px 1000000px);
44
- clip-path: polygon(-1000000px -1000000px, 1000000px -1000000px, 1000000px 1000000px, -1000000px 1000000px);
45
- align-items: flex-start; // see comment above
46
- transition: clip-path 0s @stacks-internals-s-expandable-transition-duration, -webkit-clip-path 0s @stacks-internals-s-expandable-transition-duration;
40
+ // CONSTANTS
41
+ --_ex-clip-path: polygon(-1000000px -1000000px, 1000000px -1000000px, 1000000px 1000000px, -1000000px 1000000px);
42
+ --_ex-min-expected-height: 10px;
43
+ --_ex-transition-duration: 100ms;
44
+ // VARIABLES
45
+ --_ex-after-h: 10px;
46
+ --_ex-after-hmx: 0;
47
+ --_ex-after-transition:
48
+ height var(--_ex-transition-duration) linear,
49
+ max-height 0s var(--_ex-transition-duration) linear;
50
+ --_ex-content-hmx: 1000000px;
51
+ --_ex-content-mb: 0;
52
+ --_ex-content-o: unset;
53
+ --_ex-content-transform: unset;
54
+ --_ex-content-transition:
55
+ margin-bottom var(--_ex-transition-duration) cubic-bezier(0, 0, 0, 1),
56
+ transform var(--_ex-transition-duration) cubic-bezier(1, 0, 1, 1),
57
+ opacity var(--_ex-transition-duration) cubic-bezier(1, 0, 1, 1);
47
58
 
59
+ &:not(.is-expanded) {
60
+ --_ex-after-h: 0;
61
+ --_ex-after-hmx: var(--_ex-min-expected-height);
62
+ --_ex-after-transition: height var(--_ex-min-expected-height) linear;
63
+ --_ex-content-hmx: 0;
64
+ --_ex-content-mb: -1500px;
65
+ --_ex-content-o: 0;
66
+ --_ex-content-transform: scaleY(0);
67
+ --_ex-content-transition:
68
+ margin-bottom var(--_ex-transition-duration) cubic-bezier(1, 0, 1, 1),
69
+ visibility 0s var(--_ex-transition-duration),
70
+ max-height 0s var(--_ex-transition-duration),
71
+ transform var(--_ex-transition-duration) cubic-bezier(0, 1, 1, 1),
72
+ opacity var(--_ex-transition-duration) cubic-bezier(0, 1, 1, 1);
73
+
74
+ & .s-expandable--content {
75
+ @supports ((-webkit-clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)) or (clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%))) {
76
+ --_ex-content-o: 1;
77
+ --_ex-content-transform: none;
78
+ }
79
+ }
80
+
81
+ -webkit-clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
82
+ clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
83
+ overflow: hidden;
84
+ transition: none;
85
+ }
48
86
  &:after {
49
- content: '';
87
+ height: var(--_ex-after-h);
88
+ max-height: var(--_ex-after-hmx);
89
+ transition: var(--_ex-after-transition);
90
+
50
91
  -ms-flex-preferred-size: 0;
92
+ content: '';
51
93
  flex-basis: 0;
52
- height: @stacks-internal-s-expandable-min-expected-height;
53
- max-height: 0;
54
- transition:
55
- height @stacks-internals-s-expandable-transition-duration linear,
56
- max-height 0s @stacks-internals-s-expandable-transition-duration linear;
57
94
  }
58
- }
59
-
60
- .s-expandable--content {
61
- -ms-flex-preferred-size: 100%;
62
- flex-basis: 100%;
63
- max-height: 1000000px;
64
- margin-bottom: 0;
65
- -webkit-transform-origin: 0 0;
66
- transform-origin: 0 0;
67
- transition:
68
- margin-bottom @stacks-internals-s-expandable-transition-duration cubic-bezier(0, 0, 0, 1),
69
- transform @stacks-internals-s-expandable-transition-duration cubic-bezier(1, 0, 1, 1),
70
- opacity @stacks-internals-s-expandable-transition-duration cubic-bezier(1, 0, 1, 1);
71
- }
95
+ & &--content {
96
+ max-height: var(--_ex-content-hmx);
97
+ margin-bottom: var(--_ex-content-mb);
98
+ opacity: var(--_ex-content-o);
99
+ -webkit-transform: var(--_ex-content-transform);
100
+ transform: var(--_ex-content-transform);
72
101
 
73
- .s-expandable:not(.is-expanded) {
74
- overflow: hidden;
75
- -webkit-clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
76
- clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
77
- transition: none;
78
-
79
- .s-expandable--content {
80
- visibility: hidden;
81
- max-height: 0;
82
- margin-bottom: -@stacks-internal-s-expandable-max-expected-height;
83
- opacity: 0;
84
- -webkit-transform: scaleY(0);
85
- transform: scaleY(0);
86
- transition:
87
- margin-bottom @stacks-internals-s-expandable-transition-duration cubic-bezier(1, 0, 1, 1),
88
- visibility 0s @stacks-internals-s-expandable-transition-duration,
89
- max-height 0s @stacks-internals-s-expandable-transition-duration,
90
- transform @stacks-internals-s-expandable-transition-duration cubic-bezier(0, 1, 1, 1),
91
- opacity @stacks-internals-s-expandable-transition-duration cubic-bezier(0, 1, 1, 1);
92
- @supports ((-webkit-clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)) or (clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%))) {
93
- opacity: 1;
94
- -webkit-transform: none;
95
- transform: none;
96
- }
102
+ -ms-flex-preferred-size: 100%;
103
+ flex-basis: 100%;
104
+ -webkit-transform-origin: 0 0;
105
+ transform-origin: 0 0;
106
+ transition: var(--_ex-content-transition);
97
107
  }
98
108
 
99
- &:after {
100
- height: 0;
101
- max-height: @stacks-internal-s-expandable-min-expected-height;
102
- transition: height @stacks-internals-s-expandable-transition-duration linear;
103
- }
104
- }
109
+ align-items: flex-start; // see comment above
110
+ display: flex;
111
+ -webkit-clip-path: var(--_ex-clip-path);
112
+ clip-path: var(--_ex-clip-path);
113
+ transition: clip-path 0s var(--_ex-transition-duration), -webkit-clip-path 0s var(--_ex-transition-duration);
114
+ }
@@ -18,7 +18,7 @@
18
18
  cursor: not-allowed;
19
19
  }
20
20
 
21
- // VARIANTS
21
+ // MODIFIERS
22
22
  // Sizes
23
23
  &&__sm {
24
24
  --_la-fs: var(--fs-caption);
@@ -3,11 +3,13 @@
3
3
  --_me-label-btc: var(--bc-light);
4
4
  --_me-label-cursor: pointer;
5
5
 
6
+ // CONTEXTUAL STYLES
6
7
  .dark-mode({
7
8
  --_me-divider-bg: var(--bc-lightest);
8
9
  --_me-label-btc: var(--bc-lightest);
9
10
  });
10
11
 
12
+ // CHILD ELEMENTS
11
13
  & &--divider {
12
14
  background-color: var(--_me-divider-bg);
13
15
  height: var(--su-static1);