@carbon/grid 10.40.0 → 10.42.0-rc.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.
package/index.scss CHANGED
@@ -7,6 +7,8 @@
7
7
 
8
8
  @forward 'scss/modules/config' with (
9
9
  $prefix: 'bx' !default,
10
+ $flex-grid-columns: 16 !default,
10
11
  );
11
12
  @forward 'scss/modules/breakpoint';
12
13
  @forward 'scss/modules/css-grid';
14
+ @forward 'scss/modules/flex-grid';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@carbon/grid",
3
3
  "description": "Grid for digital and software products using the Carbon Design System",
4
- "version": "10.40.0",
4
+ "version": "10.42.0-rc.0",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",
@@ -32,11 +32,11 @@
32
32
  "clean": "rimraf scss/_inlined scss/vendor"
33
33
  },
34
34
  "dependencies": {
35
- "@carbon/import-once": "^10.6.0",
36
- "@carbon/layout": "^10.35.0"
35
+ "@carbon/import-once": "^10.7.0-rc.0",
36
+ "@carbon/layout": "^10.37.0-rc.0"
37
37
  },
38
38
  "devDependencies": {
39
- "@carbon/cli": "^10.32.0",
39
+ "@carbon/cli": "^10.34.0-rc.0",
40
40
  "rimraf": "^3.0.0"
41
41
  },
42
42
  "eyeglass": {
@@ -45,5 +45,5 @@
45
45
  "sassDir": "scss",
46
46
  "needs": "^1.3.0"
47
47
  },
48
- "gitHead": "ac4b4bf03cf93cb8463916231619fbfdc72f0be5"
48
+ "gitHead": "e41618f5aaa9a10ce93edd844f1a280dc29eaf50"
49
49
  }
@@ -25,8 +25,8 @@
25
25
 
26
26
  @use 'sass:meta';
27
27
  @use 'sass:math';
28
- @import '../vendor/@carbon/layout/breakpoint'; /* stylelint-disable-line no-invalid-position-at-import-rule */
29
- @import 'prefix'; /* stylelint-disable-line no-invalid-position-at-import-rule */
28
+ @import '../vendor/@carbon/layout/breakpoint';
29
+ @import 'prefix';
30
30
 
31
31
  // -----------------------------------------------------------------------------
32
32
  // Columns
@@ -25,8 +25,8 @@
25
25
 
26
26
  @use 'sass:meta';
27
27
  @use 'sass:math';
28
- @import '@carbon/layout/scss/breakpoint'; /* stylelint-disable-line no-invalid-position-at-import-rule */
29
- @import 'prefix'; /* stylelint-disable-line no-invalid-position-at-import-rule */
28
+ @import '@carbon/layout/scss/breakpoint';
29
+ @import 'prefix';
30
30
 
31
31
  // -----------------------------------------------------------------------------
32
32
  // Columns
@@ -20,7 +20,7 @@
20
20
  /// @group @carbon/layout
21
21
  @function map-deep-get($map, $keys...) {
22
22
  @each $key in $keys {
23
- $map: map-get($map, $key);
23
+ $map: map.get($map, $key);
24
24
  }
25
25
  @return $map;
26
26
  }
@@ -32,7 +32,7 @@
32
32
  /// @return {String} Desired value
33
33
  /// @group @carbon/layout
34
34
  @function key-by-index($map, $index) {
35
- $keys: map-keys($map);
35
+ $keys: map.keys($map);
36
36
  @return nth($keys, $index);
37
37
  }
38
38
 
@@ -42,7 +42,7 @@
42
42
  /// @return {*} Desired value
43
43
  /// @group @carbon/layout
44
44
  @function last-map-item($map) {
45
- $total-length: length($map);
45
+ $total-length: list.length($map);
46
46
  @return map-get($map, key-by-index($map, $total-length));
47
47
  }
48
48
 
@@ -10,3 +10,9 @@
10
10
  /// @access public
11
11
  /// @group @carbon/grid
12
12
  $prefix: 'bx' !default;
13
+
14
+ /// Total columns used in the flex grid
15
+ /// @type Number
16
+ /// @access public
17
+ /// @group @carbon/grid
18
+ $flex-grid-columns: 16 !default;
@@ -5,10 +5,10 @@
5
5
  // LICENSE file in the root directory of this source tree.
6
6
  //
7
7
 
8
- @use 'sass:meta';
9
- @use "sass:math";
10
-
8
+ @use 'sass:list';
11
9
  @use 'sass:map';
10
+ @use "sass:math";
11
+ @use 'sass:meta';
12
12
  @use 'config' as *;
13
13
  @use 'breakpoint' as *;
14
14
 
@@ -77,38 +77,6 @@
77
77
  display: grid;
78
78
  }
79
79
 
80
- // -----------------------------------------------------------------------------
81
- // Narrow
82
- // -----------------------------------------------------------------------------
83
- .#{$prefix}--css-grid--narrow {
84
- --cds-grid-margin: 1rem;
85
-
86
- padding-right: var(--cds-grid-margin);
87
- padding-left: var(--cds-grid-margin);
88
-
89
- @include breakpoint(md) {
90
- padding-right: calc(var(--cds-grid-margin) + var(--cds-grid-gutter) / 2);
91
- padding-left: calc(var(--cds-grid-margin) + var(--cds-grid-gutter) / 2);
92
- }
93
- }
94
-
95
- .#{$prefix}--css-grid--narrow > [class*='col'] {
96
- margin-left: calc(var(--cds-grid-gutter) / 2 * -1);
97
- }
98
-
99
- // Narrow subgrid inside wide
100
- .#{$prefix}--css-grid:not(.#{$prefix}--css-grid--condensed)
101
- .#{$prefix}--subgrid.#{$prefix}--css-grid--narrow {
102
- padding: 0;
103
- }
104
-
105
- // Narrow subgrid column inside wide
106
- .#{$prefix}--css-grid
107
- .#{$prefix}--subgrid.#{$prefix}--css-grid--narrow
108
- > [class*='col'] {
109
- margin-left: calc(var(--cds-grid-gutter) / 2 * -1);
110
- }
111
-
112
80
  // -----------------------------------------------------------------------------
113
81
  // Condensed
114
82
  // -----------------------------------------------------------------------------
@@ -120,8 +88,7 @@
120
88
  }
121
89
 
122
90
  // condensed subgrid inside wide
123
- .#{$prefix}--css-grid:not(.#{$prefix}--css-grid--narrow)
124
- .bx--subgrid.#{$prefix}--css-grid--condensed {
91
+ .#{$prefix}--css-grid .bx--subgrid.#{$prefix}--css-grid--condensed {
125
92
  margin-right: calc((var(--cds-grid-gutter-wide) / 2) * -1);
126
93
  margin-left: calc((var(--cds-grid-gutter-wide) / 2) * -1);
127
94
  }
@@ -174,26 +141,6 @@
174
141
  grid-column: 1 / -1;
175
142
  }
176
143
 
177
- @each $name, $value in $grid-breakpoints {
178
- $columns: map.get($value, columns);
179
-
180
- @include breakpoint($name) {
181
- @for $i from 0 through $columns {
182
- .#{$prefix}--#{$name}\:col-span-#{$i} {
183
- @include -column-span($i);
184
- }
185
- }
186
-
187
- .#{$prefix}--#{$name}\:col-span-auto {
188
- grid-column: auto;
189
- }
190
-
191
- .#{$prefix}--#{$name}\:col-span-100 {
192
- grid-column: 1 / -1;
193
- }
194
- }
195
- }
196
-
197
144
  .#{$prefix}--col-span-25 {
198
145
  --cds-grid-columns: 1;
199
146
 
@@ -248,13 +195,59 @@
248
195
  }
249
196
  }
250
197
 
198
+ @each $name, $value in $grid-breakpoints {
199
+ $columns: map.get($value, columns);
200
+
201
+ @include breakpoint($name) {
202
+ @for $i from 0 through $columns {
203
+ .#{$prefix}--#{$name}\:col-span-#{$i} {
204
+ @include -column-span($i);
205
+ }
206
+ }
207
+
208
+ .#{$prefix}--#{$name}\:col-span-auto {
209
+ grid-column: auto;
210
+ }
211
+
212
+ .#{$prefix}--#{$name}\:col-span-100 {
213
+ grid-column: 1 / -1;
214
+ }
215
+
216
+ $quarterGridColumns: math.div($columns, 4);
217
+
218
+ .#{$prefix}--#{$name}\:col-span-75 {
219
+ $calc: $quarterGridColumns * 3;
220
+ --cds-grid-columns: #{$calc};
221
+
222
+ grid-column: span $calc / span $calc;
223
+ }
224
+
225
+ .#{$prefix}--#{$name}\:col-span-50 {
226
+ $calc: $quarterGridColumns * 2;
227
+ --cds-grid-columns: #{$calc};
228
+
229
+ grid-column: span $calc / span $calc;
230
+ }
231
+
232
+ .#{$prefix}--#{$name}\:col-span-25 {
233
+ --cds-grid-columns: #{$quarterGridColumns};
234
+
235
+ grid-column: span $quarterGridColumns / span $quarterGridColumns;
236
+ }
237
+ }
238
+ }
239
+
251
240
  // -----------------------------------------------------------------------------
252
241
  // Column offset
253
242
  // -----------------------------------------------------------------------------
254
- @for $i from 1 through 16 {
243
+ @for $i from 1 through 17 {
255
244
  .#{$prefix}--col-start-#{$i} {
256
245
  grid-column-start: $i;
257
246
  }
247
+
248
+ .#{$prefix}--col-end-#{$i} {
249
+ grid-column-start: $i;
250
+ }
258
251
  }
259
252
 
260
253
  .#{$prefix}--col-start-auto {
@@ -276,6 +269,10 @@
276
269
  .#{$prefix}--#{$name}\:col-start-#{$i} {
277
270
  grid-column-start: $i;
278
271
  }
272
+
273
+ .#{$prefix}--#{$name}\:col-end-#{$i} {
274
+ grid-column-end: $i;
275
+ }
279
276
  }
280
277
 
281
278
  .#{$prefix}--#{$name}\:col-start-auto {
@@ -348,71 +345,3 @@
348
345
  .#{$prefix}--align-items-center {
349
346
  align-items: center;
350
347
  }
351
-
352
- // -----------------------------------------------------------------------------
353
- // Aspect ratio -- TODO: in v11 should this move to a new file to live alongside the AspectRatio component?
354
- // -----------------------------------------------------------------------------
355
-
356
- /// The aspect ratios that are used to generate corresponding aspect ratio
357
- /// classes in code
358
- /// @type List
359
- /// @access public
360
- /// @group @carbon/grid
361
- $carbon--aspect-ratios: (
362
- (16, 9),
363
- (9, 16),
364
- (2, 1),
365
- (1, 2),
366
- (4, 3),
367
- (3, 4),
368
- (3, 2),
369
- (2, 3),
370
- (1, 1)
371
- );
372
-
373
- /// Generates the CSS classname utilities for the aspect ratios
374
- ///
375
- /// CSS Tricks article on aspect ratios and all the different ways it can be done.
376
- /// https://css-tricks.com/aspect-ratio-boxes/#article-header-id-6
377
- ///
378
- /// That article references an earlier article on the topic.
379
- /// https://keithjgrant.com/posts/2017/03/aspect-ratios/
380
- ///
381
- /// @param {Number} $width width from an aspect ratio
382
- /// @param {Number} $height height from an aspect ratio
383
- /// @access private
384
- /// @group @carbon/grid
385
- @mixin carbon--aspect-ratio($aspect-ratios: $carbon--aspect-ratios) {
386
- .#{$prefix}--aspect-ratio {
387
- position: relative;
388
- }
389
-
390
- .#{$prefix}--aspect-ratio::before {
391
- width: 1px;
392
- height: 0;
393
- margin-left: -1px;
394
- content: '';
395
- float: left;
396
- }
397
-
398
- .#{$prefix}--aspect-ratio::after {
399
- display: table;
400
- clear: both;
401
- content: '';
402
- }
403
-
404
- @each $aspect-ratio in $aspect-ratios {
405
- $width: nth($aspect-ratio, 1);
406
- $height: nth($aspect-ratio, 2);
407
-
408
- .#{$prefix}--aspect-ratio--#{$width}x#{$height}::before {
409
- @if meta.function-exists('div', 'math') {
410
- padding-top: percentage(math.div($height, $width));
411
- } @else {
412
- padding-top: percentage(($height / $width));
413
- }
414
- }
415
- }
416
- }
417
-
418
- @include carbon--aspect-ratio();
@@ -0,0 +1,374 @@
1
+ //
2
+ // Copyright IBM Corp. 2018, 2018
3
+ //
4
+ // This source code is licensed under the Apache-2.0 license found in the
5
+ // LICENSE file in the root directory of this source tree.
6
+ //
7
+
8
+ // Helpers for defining columns, rows, and containers are heavily inspired by,
9
+ // and often derived from, bootstrap:
10
+ // https://github.com/twbs/bootstrap/blob/v4-dev/scss/mixins/_grid.scss
11
+
12
+ @use 'sass:meta';
13
+ @use 'sass:math';
14
+ @use 'sass:map';
15
+
16
+ @use 'config' as *;
17
+ @use 'breakpoint' as *;
18
+
19
+ // -----------------------------------------------------------------------------
20
+ // Columns
21
+ // -----------------------------------------------------------------------------
22
+
23
+ /// Used to initialize the default properties for a column class, most notably
24
+ /// for setting width and default gutters when a column's breakpoint has not been
25
+ /// hit yet.
26
+ /// @param {Number} $gutter [$grid-gutter] - The gutter for the grid system
27
+ /// @param {Number} $collapsed-gutter [$grid-gutter--condensed] - The condensed mode gutter
28
+ /// @access private
29
+ /// @group @carbon/grid
30
+ @mixin -make-col-ready(
31
+ $gutter: $grid-gutter,
32
+ $condensed-gutter: $grid-gutter--condensed
33
+ ) {
34
+ // Prevent columns from becoming too narrow when at smaller grid tiers by
35
+ // always setting `width: 100%;`. This works because we use `flex` values
36
+ // later on to override this initial width.
37
+ width: 100%;
38
+ padding-right: $gutter * 0.5;
39
+ padding-left: $gutter * 0.5;
40
+
41
+ // For our condensed use-case, our gutters collapse to 2px solid, 1px on each
42
+ // side.
43
+ .#{$prefix}--row--condensed &,
44
+ .#{$prefix}--grid--condensed & {
45
+ padding-right: $condensed-gutter * 0.5;
46
+ padding-left: $condensed-gutter * 0.5;
47
+ }
48
+
49
+ // For our narrow use-case, our container hangs 16px into the gutter
50
+ .#{$prefix}--row--narrow &,
51
+ .#{$prefix}--grid--narrow & {
52
+ padding-right: $gutter * 0.5;
53
+ padding-left: 0;
54
+ }
55
+ }
56
+
57
+ /// Define the width of the column for a given span and column count.
58
+ /// A width of 0 will hide the column entirely.
59
+ /// @param {Number} $span - The number of columns covered
60
+ /// @param {Number} $columns - The total number of columns available
61
+ /// @access private
62
+ /// @group @carbon/grid
63
+ @mixin -make-col($span, $columns) {
64
+ @if $span == 0 {
65
+ display: none;
66
+ } @else {
67
+ // Explicitly include `display: block` to override
68
+ display: block;
69
+ // Add a `max-width` to ensure content within each column does not blow out
70
+ // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari
71
+ // do not appear to require this.
72
+ @if meta.function-exists('div', 'math') {
73
+ max-width: math.percentage(math.div($span, $columns));
74
+ flex: 0 0 math.percentage(math.div($span, $columns));
75
+ } @else {
76
+ max-width: math.percentage(($span / $columns));
77
+ flex: 0 0 math.percentage(($span / $columns));
78
+ }
79
+ }
80
+ }
81
+
82
+ /// Create a column offset for a given span and column count.
83
+ /// @param {Number} $span - The number of columns the offset should cover
84
+ /// @param {Number} $columns - The total number of columns available
85
+ /// @access private
86
+ /// @group @carbon/grid
87
+ @mixin -make-col-offset($span, $columns) {
88
+ $offset: 0;
89
+ @if meta.function-exists('div', 'math') {
90
+ $offset: math.div($span, $columns);
91
+ } @else {
92
+ $offset: ($span / $columns);
93
+ }
94
+ @if $offset == 0 {
95
+ margin-left: 0;
96
+ } @else {
97
+ margin-left: math.percentage($offset);
98
+ }
99
+ }
100
+
101
+ /// Output the CSS required for all the columns in a given grid system.
102
+ /// @param {Map} $breakpoints [$grid-breakpoints] - The breakpoints in the grid system
103
+ /// @param {Number} $gutter [$grid-gutter] - The gutter for the grid system
104
+ /// @access private
105
+ /// @group @carbon/grid
106
+ @mixin -make-grid-columns(
107
+ $breakpoints: $grid-breakpoints,
108
+ $gutter: $grid-gutter
109
+ ) {
110
+ .#{$prefix}--col {
111
+ @include -make-col-ready($gutter);
112
+ }
113
+
114
+ @each $breakpoint in map-keys($breakpoints) {
115
+ $infix: breakpoint-infix($breakpoint);
116
+ $columns: map.get(map.get($breakpoints, $breakpoint), columns);
117
+
118
+ // Allow columns to stretch full width below their breakpoints
119
+ @for $i from 0 through $columns {
120
+ .#{$prefix}--col#{$infix}-#{$i} {
121
+ @include -make-col-ready($gutter);
122
+ }
123
+ }
124
+
125
+ .#{$prefix}--col#{$infix},
126
+ .#{$prefix}--col#{$infix}--auto {
127
+ @include -make-col-ready($gutter);
128
+ }
129
+
130
+ @include breakpoint($breakpoint, $breakpoints) {
131
+ // Provide basic `.col-{bp}` classes for equal-width flexbox columns
132
+ .#{$prefix}--col,
133
+ .#{$prefix}--col#{$infix} {
134
+ max-width: 100%;
135
+ flex-basis: 0;
136
+ flex-grow: 1;
137
+ }
138
+
139
+ .#{$prefix}--col--auto,
140
+ .#{$prefix}--col#{$infix}--auto {
141
+ width: auto;
142
+ // Reset earlier grid tiers
143
+ max-width: 100%;
144
+ flex: 1 0 0%;
145
+ }
146
+
147
+ @for $i from 0 through $columns {
148
+ .#{$prefix}--col#{$infix}-#{$i} {
149
+ @include -make-col($i, $columns);
150
+ }
151
+ }
152
+
153
+ @for $i from 0 through ($columns - 1) {
154
+ @if not($infix == '') {
155
+ .#{$prefix}--offset#{$infix}-#{$i} {
156
+ @include -make-col-offset($i, $columns);
157
+ }
158
+ }
159
+ }
160
+ }
161
+ }
162
+ }
163
+
164
+ // -----------------------------------------------------------------------------
165
+ // Rows
166
+ // -----------------------------------------------------------------------------
167
+
168
+ /// Define the properties for a selector assigned to a row in the grid system.
169
+ /// @param {Number} $gutter [$grid-gutter] - The gutter in the grid system
170
+ /// @access private
171
+ /// @group @carbon/grid
172
+ @mixin -make-row($gutter: $grid-gutter) {
173
+ display: flex;
174
+ flex-wrap: wrap;
175
+ margin-right: -1 * $gutter * 0.5;
176
+ margin-left: -1 * $gutter * 0.5;
177
+ }
178
+
179
+ // -----------------------------------------------------------------------------
180
+ // No gutter
181
+ // -----------------------------------------------------------------------------
182
+
183
+ /// Add `no-gutter` and `no-gutter--{start,end}` classes to the output CSS. These
184
+ /// classes are useful for dropping the gutter in fluid situations.
185
+ /// @access private
186
+ /// @group @carbon/grid
187
+ @mixin -no-gutter {
188
+ .#{$prefix}--no-gutter,
189
+ .#{$prefix}--row.#{$prefix}--no-gutter [class*='#{$prefix}--col'] {
190
+ padding-right: 0;
191
+ padding-left: 0;
192
+ }
193
+
194
+ .#{$prefix}--no-gutter--start,
195
+ .#{$prefix}--row.#{$prefix}--no-gutter--start [class*='#{$prefix}--col'] {
196
+ padding-left: 0;
197
+ }
198
+
199
+ .#{$prefix}--no-gutter--end,
200
+ .#{$prefix}--row.#{$prefix}--no-gutter--end [class*='#{$prefix}--col'] {
201
+ padding-right: 0;
202
+ }
203
+
204
+ // Deprecated ☠️
205
+ .#{$prefix}--no-gutter--left,
206
+ .#{$prefix}--row.#{$prefix}--no-gutter--left [class*='#{$prefix}--col'] {
207
+ padding-left: 0;
208
+ }
209
+
210
+ .#{$prefix}--no-gutter--right,
211
+ .#{$prefix}--row.#{$prefix}--no-gutter--right [class*='#{$prefix}--col'] {
212
+ padding-right: 0;
213
+ }
214
+ }
215
+
216
+ // -----------------------------------------------------------------------------
217
+ // Hang
218
+ // -----------------------------------------------------------------------------
219
+
220
+ /// Add `hang--start` and `hang--end` classes for a given gutter. These classes are
221
+ /// used alongside `no-gutter--start` and `no-gutter--end` to "hang" type.
222
+ /// @param {Number} $gutter [$grid-gutter] - The gutter in the grid system
223
+ /// @access private
224
+ /// @group @carbon/grid
225
+ @mixin -hang($gutter: $grid-gutter) {
226
+ .#{$prefix}--hang--start {
227
+ padding-left: $gutter * 0.5;
228
+ }
229
+
230
+ .#{$prefix}--hang--end {
231
+ padding-right: $gutter * 0.5;
232
+ }
233
+
234
+ // Deprecated ☠️
235
+ .#{$prefix}--hang--left {
236
+ padding-left: $gutter * 0.5;
237
+ }
238
+
239
+ .#{$prefix}--hang--right {
240
+ padding-right: $gutter * 0.5;
241
+ }
242
+ }
243
+
244
+ // -----------------------------------------------------------------------------
245
+ // Grid
246
+ // -----------------------------------------------------------------------------
247
+
248
+ /// Create the container for a grid. Will cause full-bleed for the grid unless
249
+ /// max-width properties are added with `make-container-max-widths`
250
+ /// @param {Map} $breakpoints [$grid-breakpoints] - A map of breakpoints where the key is the name
251
+ /// @access private
252
+ /// @group @carbon/grid
253
+ @mixin -make-container($breakpoints: $grid-breakpoints) {
254
+ margin-right: auto;
255
+ margin-left: auto;
256
+
257
+ @include -set-largest-breakpoint();
258
+
259
+ @each $name, $value in $breakpoints {
260
+ $prev-breakpoint: map.get($breakpoints, breakpoint-prev($name));
261
+ $margin: map.get($value, margin);
262
+
263
+ @if $prev-breakpoint {
264
+ $prev-margin: map.get($prev-breakpoint, margin);
265
+ @if $prev-margin != $margin {
266
+ @include breakpoint($name) {
267
+ padding-right: #{($grid-gutter * 0.5) + $margin};
268
+ padding-left: #{($grid-gutter * 0.5) + $margin};
269
+ }
270
+ }
271
+ } @else {
272
+ @include breakpoint($name) {
273
+ padding-right: #{($grid-gutter * 0.5) + $margin};
274
+ padding-left: #{($grid-gutter * 0.5) + $margin};
275
+ }
276
+ }
277
+ }
278
+ }
279
+
280
+ /// Get the last breakpoint width and set max-width to its value
281
+ /// @param {Map} $breakpoints [$grid-breakpoints] - A map of breakpoints where the key is the name
282
+ /// @access private
283
+ /// @group @carbon/grid
284
+ @mixin -set-largest-breakpoint($breakpoints: $grid-breakpoints) {
285
+ $largest-breakpoint: last-map-item($breakpoints);
286
+
287
+ max-width: map.get($largest-breakpoint, 'width');
288
+ }
289
+
290
+ /// Add in the max-widths for each breakpoint to the container
291
+ /// @param {Map} $breakpoints [$grid-breakpoints] - A map of breakpoints where the key is the name
292
+ /// @access private
293
+ /// @group @carbon/grid
294
+ @mixin -make-container-max-widths($breakpoints: $grid-breakpoints) {
295
+ @each $name, $value in $breakpoints {
296
+ @include breakpoint($name) {
297
+ max-width: map.get($value, width);
298
+ }
299
+ }
300
+ }
301
+
302
+ /// Generate the CSS for a grid for the given breakpoints and gutters
303
+ /// @param {Map} $breakpoints [$grid-breakpoints] - The default breakpoints
304
+ /// @param {Number} $grid-gutter [$grid-gutter] - The default gutters
305
+ /// @param {Number} $condensed-gutter [$grid-gutter--condensed] - The condensed mode gutter
306
+ /// @access public
307
+ /// @group @carbon/grid
308
+ @mixin flex-grid(
309
+ $breakpoints: $grid-breakpoints,
310
+ $grid-gutter: $grid-gutter,
311
+ $condensed-gutter: $grid-gutter--condensed
312
+ ) {
313
+ .#{$prefix}--grid {
314
+ @include -make-container($breakpoints);
315
+ }
316
+
317
+ @include largest-breakpoint($breakpoints) {
318
+ .#{$prefix}--grid--full-width {
319
+ max-width: 100%;
320
+ }
321
+ }
322
+
323
+ .#{$prefix}--row {
324
+ @include -make-row();
325
+ }
326
+
327
+ .#{$prefix}--row-padding [class*='#{$prefix}--col'],
328
+ .#{$prefix}--col-padding {
329
+ padding-top: $grid-gutter * 0.5;
330
+ padding-bottom: $grid-gutter * 0.5;
331
+ }
332
+
333
+ .#{$prefix}--grid--condensed [class*='#{$prefix}--col'] {
334
+ padding-top: $condensed-gutter * 0.5;
335
+ padding-bottom: $condensed-gutter * 0.5;
336
+ }
337
+
338
+ @include -make-grid-columns($breakpoints, $grid-gutter);
339
+ @include -no-gutter();
340
+ @include -hang($grid-gutter);
341
+ }
342
+
343
+ @if $flex-grid-columns == 12 {
344
+ $flex-12-column-grid: map.merge(
345
+ $grid-breakpoints,
346
+ (
347
+ lg:
348
+ map.merge(
349
+ map.get($grid-breakpoints, lg),
350
+ (
351
+ columns: 12,
352
+ )
353
+ ),
354
+ xlg:
355
+ map.merge(
356
+ map.get($grid-breakpoints, xlg),
357
+ (
358
+ columns: 12,
359
+ )
360
+ ),
361
+ max:
362
+ map.merge(
363
+ map.get($grid-breakpoints, max),
364
+ (
365
+ columns: 12,
366
+ )
367
+ ),
368
+ )
369
+ );
370
+
371
+ @include flex-grid($breakpoints: $flex-12-column-grid);
372
+ } @else {
373
+ @include flex-grid();
374
+ }
@@ -65,11 +65,11 @@
65
65
  // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari
66
66
  // do not appear to require this.
67
67
  @if meta.function-exists('div', 'math') {
68
- max-width: percentage(math.div($span, $columns));
69
- flex: 0 0 percentage(math.div($span, $columns));
68
+ max-width: math.percentage(math.div($span, $columns));
69
+ flex: 0 0 math.percentage(math.div($span, $columns));
70
70
  } @else {
71
- max-width: percentage(($span / $columns));
72
- flex: 0 0 percentage(($span / $columns));
71
+ max-width: math.percentage(($span / $columns));
72
+ flex: 0 0 math.percentage(($span / $columns));
73
73
  }
74
74
  }
75
75
  }
@@ -89,7 +89,7 @@
89
89
  @if $offset == 0 {
90
90
  margin-left: 0;
91
91
  } @else {
92
- margin-left: percentage($offset);
92
+ margin-left: math.percentage($offset);
93
93
  }
94
94
  }
95
95
 
@@ -108,7 +108,7 @@
108
108
 
109
109
  @each $breakpoint in map-keys($breakpoints) {
110
110
  $infix: breakpoint-infix($breakpoint);
111
- $columns: map-get(map-get($breakpoints, $breakpoint), columns);
111
+ $columns: map.get(map.get($breakpoints, $breakpoint), columns);
112
112
 
113
113
  // Allow columns to stretch full width below their breakpoints
114
114
  @for $i from 0 through $columns {
@@ -252,11 +252,11 @@
252
252
  @include -set-largest-breakpoint();
253
253
 
254
254
  @each $name, $value in $breakpoints {
255
- $prev-breakpoint: map-get($breakpoints, breakpoint-prev($name));
256
- $margin: map-get($value, margin);
255
+ $prev-breakpoint: map.get($breakpoints, breakpoint-prev($name));
256
+ $margin: map.get($value, margin);
257
257
 
258
258
  @if $prev-breakpoint {
259
- $prev-margin: map-get($prev-breakpoint, margin);
259
+ $prev-margin: map.get($prev-breakpoint, margin);
260
260
  @if $prev-margin != $margin {
261
261
  @include breakpoint($name) {
262
262
  padding-right: #{($grid-gutter * 0.5) + $margin};
@@ -279,7 +279,7 @@
279
279
  @mixin -set-largest-breakpoint($breakpoints: $grid-breakpoints) {
280
280
  $largest-breakpoint: last-map-item($breakpoints);
281
281
 
282
- max-width: map-get($largest-breakpoint, 'width');
282
+ max-width: map.get($largest-breakpoint, 'width');
283
283
  }
284
284
 
285
285
  /// Add in the max-widths for each breakpoint to the container
@@ -289,7 +289,7 @@
289
289
  @mixin -make-container-max-widths($breakpoints: $grid-breakpoints) {
290
290
  @each $name, $value in $breakpoints {
291
291
  @include breakpoint($name) {
292
- max-width: map-get($value, width);
292
+ max-width: map.get($value, width);
293
293
  }
294
294
  }
295
295
  }
@@ -18,7 +18,7 @@ $imported-modules: () !default;
18
18
  /// @content Declaration blocks to be imported
19
19
  /// @group @carbon/import-once
20
20
  @mixin exports($name, $warn: false) {
21
- @if (index($imported-modules, $name) == null) {
21
+ @if not(index($imported-modules, $name)) {
22
22
  $imported-modules: append($imported-modules, $name) !global;
23
23
  @content;
24
24
  } @else if $warn == true {
@@ -21,8 +21,8 @@
21
21
 
22
22
  @use 'sass:meta';
23
23
  @use "sass:math";
24
- @import 'breakpoint'; /* stylelint-disable-line no-invalid-position-at-import-rule */
25
- @import 'utilities'; /* stylelint-disable-line no-invalid-position-at-import-rule */
24
+ @import 'breakpoint';
25
+ @import 'utilities';
26
26
 
27
27
  /// Get the column width for a given breakpoint
28
28
  /// @param {String} $breakpoint
@@ -14,7 +14,7 @@
14
14
  /// @group @carbon/layout
15
15
  @function map-deep-get($map, $keys...) {
16
16
  @each $key in $keys {
17
- $map: map-get($map, $key);
17
+ $map: map.get($map, $key);
18
18
  }
19
19
  @return $map;
20
20
  }
@@ -26,7 +26,7 @@
26
26
  /// @return {String} Desired value
27
27
  /// @group @carbon/layout
28
28
  @function key-by-index($map, $index) {
29
- $keys: map-keys($map);
29
+ $keys: map.keys($map);
30
30
  @return nth($keys, $index);
31
31
  }
32
32
 
@@ -36,6 +36,6 @@
36
36
  /// @return {*} Desired value
37
37
  /// @group @carbon/layout
38
38
  @function last-map-item($map) {
39
- $total-length: length($map);
39
+ $total-length: list.length($map);
40
40
  @return map-get($map, carbon--key-by-index($map, $total-length));
41
41
  }
@@ -1,232 +0,0 @@
1
- //
2
- // Copyright IBM Corp. 2018, 2018
3
- //
4
- // This source code is licensed under the Apache-2.0 license found in the
5
- // LICENSE file in the root directory of this source tree.
6
- //
7
-
8
- // https://github.com/twbs/bootstrap/blob/v4-dev/scss/mixins/_breakpoints.scss
9
- @use 'sass:list';
10
- @use 'sass:map';
11
- @use 'sass:meta';
12
- @use 'convert';
13
- @use 'utilities';
14
-
15
- /// Carbon gutter size in rem
16
- /// @type Number
17
- /// @access public
18
- /// @group @carbon/layout
19
- $grid-gutter: convert.rem(32px);
20
-
21
- /// Carbon condensed gutter size in rem
22
- /// @type Number
23
- /// @access public
24
- /// @group @carbon/layout
25
- $grid-gutter--condensed: convert.rem(1px);
26
-
27
- // Initial map of our breakpoints and their values
28
- /// @type Map
29
- /// @access public
30
- /// @group @carbon/layout
31
- $grid-breakpoints: (
32
- sm: (
33
- columns: 4,
34
- margin: 0,
35
- width: convert.rem(320px),
36
- ),
37
- md: (
38
- columns: 8,
39
- margin: convert.rem(16px),
40
- width: convert.rem(672px),
41
- ),
42
- lg: (
43
- columns: 16,
44
- margin: convert.rem(16px),
45
- width: convert.rem(1056px),
46
- ),
47
- xlg: (
48
- columns: 16,
49
- margin: convert.rem(16px),
50
- width: convert.rem(1312px),
51
- ),
52
- max: (
53
- columns: 16,
54
- margin: convert.rem(24px),
55
- width: convert.rem(1584px),
56
- ),
57
- ) !default;
58
-
59
- /// Get the value of the next breakpoint, or null for the last breakpoint
60
- /// @param {String} $name - The name of the breakpoint
61
- /// @param {Map} $breakpoints [$grid-breakpoints] - A map of breakpoints where the key is the name of the breakpoint and the value is the values for the breakpoint
62
- /// @param {List} $breakpoint-names [map-keys($breakpoints)] - A list of names from the `$breakpoints` map
63
- /// @return {String}
64
- /// @access public
65
- /// @group @carbon/layout
66
- @function breakpoint-next(
67
- $name,
68
- $breakpoints: $grid-breakpoints,
69
- $breakpoint-names: map.keys($breakpoints)
70
- ) {
71
- $n: list.index($breakpoint-names, $name);
72
- @if $n != null and $n < list.length($breakpoint-names) {
73
- @return list.nth($breakpoint-names, $n + 1);
74
- }
75
- @return null;
76
- }
77
-
78
- /// Get the value of the previous breakpoint, or null for the first breakpoint
79
- /// @param {String} $name - The name of the breakpoint
80
- /// @param {Map} $breakpoints [$grid-breakpoints] - A map of breakpoints where the key is the name of the breakpoint and the value is the values for the breakpoint
81
- /// @param {List} $breakpoint-names [map-keys($breakpoints)] - A list of names from the `$breakpoints` map
82
- /// @return {String}
83
- /// @access public
84
- /// @group @carbon/layout
85
- @function breakpoint-prev(
86
- $name,
87
- $breakpoints: $grid-breakpoints,
88
- $breakpoint-names: map.keys($breakpoints)
89
- ) {
90
- $n: list.index($breakpoint-names, $name);
91
- @if $n != null and $n > 1 {
92
- @return list.nth($breakpoint-names, $n - 1);
93
- }
94
- @return null;
95
- }
96
-
97
- /// Check to see if the given breakpoint name
98
- /// @param {String} $name - The name of the breakpoint
99
- /// @param {Map} $breakpoints [$grid-breakpoints] - A map of breakpoints where the key is the name of the breakpoint and the value is the values for the breakpoint
100
- /// @return {Bool}
101
- /// @access public
102
- /// @group @carbon/layout
103
- @function is-smallest-breakpoint($name, $breakpoints: $grid-breakpoints) {
104
- @return list.index(map.keys($breakpoints), $name) == 1;
105
- }
106
-
107
- /// Returns the largest breakpoint name
108
- /// @param {Map} $breakpoints [$grid-breakpoints] - A map of breakpoints where the key is the name
109
- /// @return {String}
110
- /// @access public
111
- /// @group @carbon/layout
112
- @function largest-breakpoint-name($breakpoints: $grid-breakpoints) {
113
- $total-breakpoints: list.length($breakpoints);
114
- @return key-by-index($breakpoints, $total-breakpoints);
115
- }
116
-
117
- /// Get the infix for a given breakpoint in a list of breakpoints. Useful for generating the size part in a selector, for example: `.prefix--col-sm-2`.
118
- /// @param {String} $name - The name of the breakpoint
119
- /// @return {String}
120
- /// @access public
121
- /// @group @carbon/layout
122
- @function breakpoint-infix($name) {
123
- @return '-#{$name}';
124
- }
125
-
126
- /// Generate a media query from the width of the given breakpoint to infinity
127
- /// @param {String | Number} $name
128
- /// @param {Map} $breakpoints [$grid-breakpoints] - A map of breakpoints where the key is the name
129
- /// @content
130
- /// @access public
131
- /// @group @carbon/layout
132
- @mixin breakpoint-up($name, $breakpoints: $grid-breakpoints) {
133
- @if meta.type-of($name) == 'number' {
134
- @media (min-width: $name) {
135
- @content;
136
- }
137
- } @else if map.has-key($breakpoints, $name) {
138
- $breakpoint: map.get($breakpoints, $name);
139
- $width: map.get($breakpoint, width);
140
- @if is-smallest-breakpoint($name, $breakpoints) {
141
- @content;
142
- } @else {
143
- @media (min-width: $width) {
144
- @content;
145
- }
146
- }
147
- } @else {
148
- @error 'Unable to find a breakpoint with name `#{$name}`. Expected one of: (#{map.keys($breakpoints)})';
149
- }
150
- }
151
-
152
- /// Generate a media query for the maximum width of the given styles
153
- /// @param {String | Number} $name
154
- /// @param {Map} $breakpoints [$grid-breakpoints] - A map of breakpoints where the key is the name
155
- /// @content
156
- /// @access public
157
- /// @group @carbon/layout
158
- @mixin breakpoint-down($name, $breakpoints: $grid-breakpoints) {
159
- @if meta.type-of($name) == 'number' {
160
- @media (max-width: $name) {
161
- @content;
162
- }
163
- } @else if map.has-key($breakpoints, $name) {
164
- // We borrow this logic from bootstrap for specifying the value of the
165
- // max-width. The maximum width is calculated by finding the breakpoint and
166
- // subtracting .02 from its value. This value is used instead of .01 to
167
- // avoid rounding issues in Safari
168
- // https://github.com/twbs/bootstrap/blob/c5b1919deaf5393fcca9e9b9d7ce9c338160d99d/scss/mixins/_breakpoints.scss#L34-L46
169
- $breakpoint: map.get($breakpoints, $name);
170
- $width: map.get($breakpoint, width) - 0.02;
171
- @media (max-width: $width) {
172
- @content;
173
- }
174
- } @else {
175
- @error 'Unable to find a breakpoint with name `#{$name}`. Expected one of: (#{map.keys($breakpoints)})';
176
- }
177
- }
178
-
179
- /// Generate a media query for the range between the lower and upper breakpoints
180
- /// @param {String | Number} $lower
181
- /// @param {String | Number} $upper
182
- /// @param {Map} $breakpoints [$grid-breakpoints] - A map of breakpoints where the key is the name
183
- /// @content
184
- /// @access public
185
- /// @group @carbon/layout
186
- @mixin breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {
187
- $is-number-lower: meta.type-of($lower) == 'number';
188
- $is-number-upper: meta.type-of($upper) == 'number';
189
- $min: if($is-number-lower, $lower, map.get($breakpoints, $lower));
190
- $max: if($is-number-upper, $upper, map.get($breakpoints, $upper));
191
-
192
- @if $min and $max {
193
- $min-width: if(not $is-number-lower and $min, map.get($min, width), $min);
194
- $max-width: if(not $is-number-upper and $max, map.get($max, width), $max);
195
- @media (min-width: $min-width) and (max-width: $max-width) {
196
- @content;
197
- }
198
- } @else if $min != null and $max == null {
199
- @include breakpoint-up($lower) {
200
- @content;
201
- }
202
- } @else if $min == null and $max != null {
203
- @include breakpoint-down($upper) {
204
- @content;
205
- }
206
- } @else {
207
- @error 'Unable to find a breakpoint to satisfy: (#{$lower},#{$upper}). Expected both to be one of (#{map.keys($breakpoints)}).';
208
- }
209
- }
210
-
211
- /// Generate media query for the largest breakpoint
212
- /// @param {Map} $breakpoints [$grid-breakpoints] - A map of breakpoints where the key is the name
213
- /// @content
214
- /// @access public
215
- /// @group @carbon/layout
216
- @mixin largest-breakpoint($breakpoints: $grid-breakpoints) {
217
- @include breakpoint(largest-breakpoint-name()) {
218
- @content;
219
- }
220
- }
221
-
222
- /// Generate a media query for a given breakpoint
223
- /// @param {String | Number} $name
224
- /// @param {Map} $breakpoints [$grid-breakpoints] - A map of breakpoints where the key is the name
225
- /// @content
226
- /// @access public
227
- /// @group @carbon/layout
228
- @mixin breakpoint($name, $breakpoints: $grid-breakpoints) {
229
- @include breakpoint-up($name, $breakpoints) {
230
- @content;
231
- }
232
- }