@carbon/grid 10.42.0 → 11.0.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.
Files changed (45) hide show
  1. package/index.scss +4 -7
  2. package/package.json +4 -5
  3. package/scss/{modules/_breakpoint.scss → _breakpoint.scss} +4 -72
  4. package/scss/_config.scss +94 -0
  5. package/scss/_css-grid.scss +470 -0
  6. package/scss/{modules/_flex-grid.scss → _flex-grid.scss} +28 -59
  7. package/scss/_inlined/_breakpoint.scss +198 -0
  8. package/scss/_inlined/_config.scss +94 -0
  9. package/scss/_inlined/_css-grid.scss +470 -0
  10. package/scss/{modules/_mixins.scss → _inlined/_flex-grid.scss} +45 -38
  11. package/scss/_inlined/_mixins.scss +89 -188
  12. package/scss/_mixins.scss +89 -188
  13. package/scss/vendor/@carbon/layout/_convert.import.scss +2 -4
  14. package/scss/vendor/@carbon/layout/_convert.scss +18 -23
  15. package/scss/vendor/@carbon/layout/_spacing.scss +2 -5
  16. package/scss/vendor/@carbon/layout/_utilities.scss +4 -4
  17. package/scss/vendor/@carbon/layout/generated/_container.scss +13 -43
  18. package/scss/vendor/@carbon/layout/generated/_fluid-spacing.scss +11 -35
  19. package/scss/vendor/@carbon/layout/generated/_icon-size.scss +8 -17
  20. package/scss/vendor/@carbon/layout/generated/_size.scss +1 -1
  21. package/scss/vendor/@carbon/layout/generated/_spacing.scss +29 -107
  22. package/scss/vendor/@carbon/layout/modules/_convert.scss +2 -4
  23. package/scss/12.scss +0 -41
  24. package/scss/_inlined/12.scss +0 -41
  25. package/scss/_inlined/_mixins.import.scss +0 -431
  26. package/scss/_inlined/_prefix.scss +0 -12
  27. package/scss/_mixins.import.scss +0 -431
  28. package/scss/_prefix.scss +0 -12
  29. package/scss/grid.scss +0 -10
  30. package/scss/index.scss +0 -10
  31. package/scss/modules/_config.scss +0 -18
  32. package/scss/modules/_css-grid.scss +0 -347
  33. package/scss/vendor/@carbon/import-once/import-once.scss +0 -27
  34. package/scss/vendor/@carbon/import-once/index.scss +0 -8
  35. package/scss/vendor/@carbon/layout/_breakpoint.scss +0 -246
  36. package/scss/vendor/@carbon/layout/_key-height.import.scss +0 -117
  37. package/scss/vendor/@carbon/layout/_key-height.scss +0 -111
  38. package/scss/vendor/@carbon/layout/_mini-unit.scss +0 -23
  39. package/scss/vendor/@carbon/layout/generated/_layout.scss +0 -97
  40. package/scss/vendor/@carbon/layout/index.scss +0 -8
  41. package/scss/vendor/@carbon/layout/layout.scss +0 -12
  42. package/scss/vendor/@carbon/layout/modules/_spacing.scss +0 -9
  43. package/scss/vendor/@carbon/layout/modules/_utilities.scss +0 -41
  44. package/scss/vendor/@carbon/layout/modules/generated/_fluid-spacing.scss +0 -37
  45. package/scss/vendor/@carbon/layout/modules/generated/_spacing.scss +0 -91
package/index.scss CHANGED
@@ -5,10 +5,7 @@
5
5
  // LICENSE file in the root directory of this source tree.
6
6
  //
7
7
 
8
- @forward 'scss/modules/config' with (
9
- $prefix: 'bx' !default,
10
- $flex-grid-columns: 16 !default,
11
- );
12
- @forward 'scss/modules/breakpoint';
13
- @forward 'scss/modules/css-grid';
14
- @forward 'scss/modules/flex-grid';
8
+ @forward 'scss/config';
9
+ @forward 'scss/breakpoint';
10
+ @forward 'scss/css-grid';
11
+ @forward 'scss/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.42.0",
4
+ "version": "11.0.0-rc.0",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",
@@ -32,11 +32,10 @@
32
32
  "clean": "rimraf scss/_inlined scss/vendor"
33
33
  },
34
34
  "dependencies": {
35
- "@carbon/import-once": "^10.7.0",
36
- "@carbon/layout": "^10.37.0"
35
+ "@carbon/layout": "^11.0.0-rc.0"
37
36
  },
38
37
  "devDependencies": {
39
- "@carbon/cli": "^10.34.0",
38
+ "@carbon/cli": "^11.0.0-rc.0",
40
39
  "rimraf": "^3.0.0"
41
40
  },
42
41
  "eyeglass": {
@@ -45,5 +44,5 @@
45
44
  "sassDir": "scss",
46
45
  "needs": "^1.3.0"
47
46
  },
48
- "gitHead": "aadefba8b1097fad433fe63c9c896b1a3e1b589a"
47
+ "gitHead": "e4894776a4996c10bfc8f9a724532a25966aa622"
49
48
  }
@@ -5,25 +5,11 @@
5
5
  // LICENSE file in the root directory of this source tree.
6
6
  //
7
7
 
8
- // https://github.com/twbs/bootstrap/blob/v4-dev/scss/mixins/_breakpoints.scss
9
8
  @use 'sass:list';
10
9
  @use 'sass:map';
11
10
  @use 'sass:meta';
12
- @use '@carbon/layout/scss/modules/convert';
13
-
14
- /// Map deep get
15
- /// @author Hugo Giraudel
16
- /// @access public
17
- /// @param {Map} $map - Map
18
- /// @param {Arglist} $keys - Key chain
19
- /// @return {*} Desired value
20
- /// @group @carbon/layout
21
- @function map-deep-get($map, $keys...) {
22
- @each $key in $keys {
23
- $map: map.get($map, $key);
24
- }
25
- @return $map;
26
- }
11
+ @use '@carbon/layout/scss/convert';
12
+ @use 'config' as *;
27
13
 
28
14
  /// Provide a map and index, and get back the relevant key value
29
15
  /// @access public
@@ -31,65 +17,11 @@
31
17
  /// @param {Integer} $index - Key chain
32
18
  /// @return {String} Desired value
33
19
  /// @group @carbon/layout
34
- @function key-by-index($map, $index) {
20
+ @function -key-by-index($map, $index) {
35
21
  $keys: map.keys($map);
36
22
  @return nth($keys, $index);
37
23
  }
38
24
 
39
- /// Pass in a map, and get the last one in the list back
40
- /// @access public
41
- /// @param {Map} $map - Map
42
- /// @return {*} Desired value
43
- /// @group @carbon/layout
44
- @function last-map-item($map) {
45
- $total-length: list.length($map);
46
- @return map-get($map, key-by-index($map, $total-length));
47
- }
48
-
49
- /// Carbon gutter size in rem
50
- /// @type Number
51
- /// @access public
52
- /// @group @carbon/layout
53
- $grid-gutter: convert.rem(32px);
54
-
55
- /// Carbon condensed gutter size in rem
56
- /// @type Number
57
- /// @access public
58
- /// @group @carbon/layout
59
- $grid-gutter--condensed: convert.rem(1px);
60
-
61
- // Initial map of our breakpoints and their values
62
- /// @type Map
63
- /// @access public
64
- /// @group @carbon/layout
65
- $grid-breakpoints: (
66
- sm: (
67
- columns: 4,
68
- margin: 0,
69
- width: convert.rem(320px),
70
- ),
71
- md: (
72
- columns: 8,
73
- margin: convert.rem(16px),
74
- width: convert.rem(672px),
75
- ),
76
- lg: (
77
- columns: 16,
78
- margin: convert.rem(16px),
79
- width: convert.rem(1056px),
80
- ),
81
- xlg: (
82
- columns: 16,
83
- margin: convert.rem(16px),
84
- width: convert.rem(1312px),
85
- ),
86
- max: (
87
- columns: 16,
88
- margin: convert.rem(24px),
89
- width: convert.rem(1584px),
90
- ),
91
- ) !default;
92
-
93
25
  /// Get the value of the next breakpoint, or null for the last breakpoint
94
26
  /// @param {String} $name - The name of the breakpoint
95
27
  /// @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
@@ -145,7 +77,7 @@ $grid-breakpoints: (
145
77
  /// @group @carbon/layout
146
78
  @function largest-breakpoint-name($breakpoints: $grid-breakpoints) {
147
79
  $total-breakpoints: list.length($breakpoints);
148
- @return key-by-index($breakpoints, $total-breakpoints);
80
+ @return -key-by-index($breakpoints, $total-breakpoints);
149
81
  }
150
82
 
151
83
  /// 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`.
@@ -0,0 +1,94 @@
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
+ @use 'sass:map';
9
+ @use '@carbon/layout/scss/convert';
10
+
11
+ /// Namespace prefix
12
+ /// @type String
13
+ /// @access public
14
+ /// @group @carbon/grid
15
+ $prefix: 'cds' !default;
16
+
17
+ /// Total columns used in the flex grid
18
+ /// @type Number
19
+ /// @access public
20
+ /// @group @carbon/grid
21
+ $flex-grid-columns: 16 !default;
22
+
23
+ /// Carbon gutter size in rem
24
+ /// @type Number
25
+ /// @access public
26
+ /// @group @carbon/layout
27
+ $grid-gutter: convert.rem(32px) !default;
28
+
29
+ /// Carbon condensed gutter size in rem
30
+ /// @type Number
31
+ /// @access public
32
+ /// @group @carbon/layout
33
+ $grid-gutter-condensed: convert.rem(1px) !default;
34
+
35
+ // Initial map of our breakpoints and their values
36
+ /// @type Map
37
+ /// @access public
38
+ /// @group @carbon/layout
39
+ $grid-breakpoints: (
40
+ sm: (
41
+ columns: 4,
42
+ margin: 0,
43
+ width: convert.rem(320px),
44
+ ),
45
+ md: (
46
+ columns: 8,
47
+ margin: convert.rem(16px),
48
+ width: convert.rem(672px),
49
+ ),
50
+ lg: (
51
+ columns: 16,
52
+ margin: convert.rem(16px),
53
+ width: convert.rem(1056px),
54
+ ),
55
+ xlg: (
56
+ columns: 16,
57
+ margin: convert.rem(16px),
58
+ width: convert.rem(1312px),
59
+ ),
60
+ max: (
61
+ columns: 16,
62
+ margin: convert.rem(24px),
63
+ width: convert.rem(1584px),
64
+ ),
65
+ ) !default;
66
+
67
+ @if $flex-grid-columns == 12 {
68
+ $grid-breakpoints: map.merge(
69
+ $grid-breakpoints,
70
+ (
71
+ lg:
72
+ map.merge(
73
+ map.get($grid-breakpoints, lg),
74
+ (
75
+ columns: 12,
76
+ )
77
+ ),
78
+ xlg:
79
+ map.merge(
80
+ map.get($grid-breakpoints, xlg),
81
+ (
82
+ columns: 12,
83
+ )
84
+ ),
85
+ max:
86
+ map.merge(
87
+ map.get($grid-breakpoints, max),
88
+ (
89
+ columns: 12,
90
+ )
91
+ ),
92
+ )
93
+ );
94
+ }
@@ -0,0 +1,470 @@
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
+ @use 'sass:list';
9
+ @use 'sass:map';
10
+ @use 'sass:math';
11
+ @use 'sass:meta';
12
+ @use 'config' as *;
13
+ @use 'breakpoint' as *;
14
+
15
+ /// Emit all the styles related to the CSS Grid, these include:
16
+ /// - The base grid class
17
+ /// - The various grid modes
18
+ /// - The ability to specifiy column span
19
+ /// - The ability to specifiy column start,end position
20
+ /// - Support for subgrid
21
+ /// - Support for hanging content on a grid column
22
+ /// - Support for controlling grid gutter on a cell basis
23
+ /// - Support for specifying content alignment
24
+ ///
25
+ ///
26
+ /// In general, this mixin is structured in a way to emit the fewest CSS styles
27
+ /// as possible. To do this, we will (as much as possible) not emit a value if
28
+ /// one is already defined at a previous breakpoint.
29
+ ///
30
+ /// In addition, this mixin will break down emitting styles into several stages:
31
+ /// 1. Emit styles for the smallest breakpoint without any breakpoint. By
32
+ /// default, these styles will be on
33
+ /// 2. For every other breakpoint, wrap it in a breakpoint so that it only is
34
+ /// triggered when that breakpoint is applied
35
+ /// 3. In situations where it is appropriate, we also will emit "unconditional"
36
+ /// selectors that will always apply. For example, if you wanted a column to
37
+ /// always span four columns
38
+ @mixin css-grid($breakpoints: $grid-breakpoints) {
39
+ /// The :root selector is responsible for setting several top-level CSS Custom
40
+ /// Properties, including the overall grid gutter, grid column count, and grid
41
+ /// margin
42
+ :root {
43
+ --cds-grid-gutter: #{$grid-gutter};
44
+
45
+ // Iterate through the grid breakpoints and only emit the grid-columns and
46
+ // grid-margin CSS Custom Properties if they've changed from the previous
47
+ // breakpoint. By default, we emit the smallest breakpoint values on the
48
+ // :root selector
49
+ @each $key, $value in $breakpoints {
50
+ @if is-smallest-breakpoint($key, $breakpoints) {
51
+ --cds-grid-columns: #{get-column-count($breakpoints, $key)};
52
+ --cds-grid-margin: #{get-margin($breakpoints, $key)};
53
+ } @else {
54
+ $previous-breakpoint: breakpoint-prev($key, $breakpoints);
55
+ $changes: ();
56
+
57
+ @if get-column-count($breakpoints, $key) !=
58
+ get-column-count($breakpoints, $previous-breakpoint)
59
+ {
60
+ $changes: map.set(
61
+ $changes,
62
+ grid-columns,
63
+ get-column-count($breakpoints, $key)
64
+ );
65
+ }
66
+
67
+ @if get-margin($breakpoints, $key) !=
68
+ get-margin($breakpoints, $previous-breakpoint)
69
+ {
70
+ $changes: map.set(
71
+ $changes,
72
+ grid-margin,
73
+ get-margin($breakpoints, $key)
74
+ );
75
+ }
76
+
77
+ @include breakpoint($key) {
78
+ @each $name, $value in $changes {
79
+ --cds-#{$name}: #{$value};
80
+ }
81
+ }
82
+ }
83
+ }
84
+ }
85
+
86
+ // -----------------------------------------------------------------------------
87
+ // Base CSS Grid
88
+ // -----------------------------------------------------------------------------
89
+ .#{$prefix}--css-grid {
90
+ --cds-grid-gutter-start: calc(var(--cds-grid-gutter) / 2);
91
+ --cds-grid-gutter-end: calc(var(--cds-grid-gutter) / 2);
92
+ // We split out a separate "column hang" since "gutter-start" is set
93
+ // dynamically and could be 0
94
+ --cds-grid-column-hang: calc(var(--cds-grid-gutter) / 2);
95
+
96
+ display: grid;
97
+ max-width: get-grid-width(
98
+ $breakpoints,
99
+ largest-breakpoint-name($breakpoints)
100
+ );
101
+ padding-right: var(--cds-grid-margin);
102
+ padding-left: var(--cds-grid-margin);
103
+ margin-right: auto;
104
+ margin-left: auto;
105
+ grid-template-columns: repeat(var(--cds-grid-columns), minmax(0, 1fr));
106
+ }
107
+
108
+ // -----------------------------------------------------------------------------
109
+ // Full width
110
+ // -----------------------------------------------------------------------------
111
+ .#{$prefix}--css-grid--full-width {
112
+ max-width: 100%;
113
+ }
114
+
115
+ // -----------------------------------------------------------------------------
116
+ // Column
117
+ // -----------------------------------------------------------------------------
118
+
119
+ // Add gutter to columns in a CSS Grid. Unfortunately, we cannot use
120
+ // `grid-gap`, `column-gap`, etc. as we need to conditionally remove leading
121
+ // and trailing gutter from a column.
122
+ .#{$prefix}--css-grid-column {
123
+ // grid-mode-start, grid-mode-end are meant to capture the "grid settings"
124
+ // so that subgrids can correctly fit in parent grids by reverting the
125
+ // grid's outer padding
126
+ --cds-grid-mode-start: var(--cds-grid-gutter-start);
127
+ --cds-grid-mode-end: var(--cds-grid-gutter-end);
128
+
129
+ margin-right: var(--cds-grid-gutter-end);
130
+ margin-left: var(--cds-grid-gutter-start);
131
+
132
+ [dir='rtl'] & {
133
+ margin-right: var(--cds-grid-gutter-start);
134
+ margin-left: var(--cds-grid-gutter-end);
135
+ }
136
+ }
137
+
138
+ // -----------------------------------------------------------------------------
139
+ // Grid modes
140
+ // -----------------------------------------------------------------------------
141
+
142
+ // Narrow
143
+ .#{$prefix}--css-grid--narrow {
144
+ --cds-grid-gutter-start: 0;
145
+ }
146
+
147
+ // Condensed
148
+ .#{$prefix}--css-grid--condensed {
149
+ --cds-grid-gutter: #{$grid-gutter-condensed};
150
+ --cds-grid-column-hang: #{math.div($grid-gutter, 2) -
151
+ math.div($grid-gutter-condensed, 2)};
152
+ }
153
+
154
+ // -----------------------------------------------------------------------------
155
+ // Subgrid
156
+ // -----------------------------------------------------------------------------
157
+ .#{$prefix}--subgrid {
158
+ display: grid;
159
+ margin-right: calc(var(--cds-grid-mode-end) * -1);
160
+ margin-left: calc(var(--cds-grid-mode-start) * -1);
161
+ grid-template-columns: repeat(var(--cds-grid-columns), minmax(0, 1fr));
162
+
163
+ [dir='rtl'] & {
164
+ margin-right: calc(var(--cds-grid-mode-start) * -1);
165
+ margin-left: calc(var(--cds-grid-mode-end) * -1);
166
+ }
167
+ }
168
+
169
+ // Support the grid modes in subgrids
170
+ .#{$prefix}--subgrid--wide {
171
+ --cds-grid-gutter-start: #{math.div($grid-gutter, 2)};
172
+ --cds-grid-gutter-end: #{math.div($grid-gutter, 2)};
173
+ --cds-grid-column-hang: 0;
174
+ }
175
+
176
+ .#{$prefix}--subgrid--narrow {
177
+ --cds-grid-gutter-start: 0;
178
+ --cds-grid-gutter-end: #{math.div($grid-gutter, 2)};
179
+ --cds-grid-column-hang: #{math.div($grid-gutter, 2)};
180
+ }
181
+
182
+ .#{$prefix}--subgrid--condensed {
183
+ --cds-grid-gutter-start: #{math.div($grid-gutter-condensed, 2)};
184
+ --cds-grid-gutter-end: #{math.div($grid-gutter-condensed, 2)};
185
+ --cds-grid-column-hang: #{math.div($grid-gutter, 2) -
186
+ math.div($grid-gutter-condensed, 2)};
187
+ }
188
+
189
+ // -----------------------------------------------------------------------------
190
+ // Column hang
191
+ // -----------------------------------------------------------------------------
192
+
193
+ // Helper class to allow for text alignment in columns where the leading
194
+ // gutter is missing (like narrow) or is reduced (like in condensed).
195
+ .#{$prefix}--grid-column-hang {
196
+ margin-left: var(--cds-grid-column-hang);
197
+
198
+ [dir='rtl'] & {
199
+ margin-right: var(--cds-grid-column-hang);
200
+ margin-left: initial;
201
+ }
202
+ }
203
+
204
+ // -----------------------------------------------------------------------------
205
+ // Column span
206
+ // -----------------------------------------------------------------------------
207
+
208
+ // Generate col-span-{0-16} classes which unconditionally set column span
209
+ // regardless of breakpoint
210
+ @for $i from 0 through get-grid-columns($breakpoints) {
211
+ .#{$prefix}--col-span-#{$i} {
212
+ @include -column-span($i);
213
+ }
214
+ }
215
+
216
+ // Responsive column span
217
+ @each $name, $value in $breakpoints {
218
+ // Column span per breakpoint
219
+ @for $i from 0 through get-column-count($breakpoints, $name) {
220
+ @if is-smallest-breakpoint($name, $breakpoints) {
221
+ .#{$prefix}--#{$name}\:col-span-#{$i} {
222
+ @include -column-span($i);
223
+ }
224
+ } @else {
225
+ @include breakpoint($name) {
226
+ .#{$prefix}--#{$name}\:col-span-#{$i} {
227
+ @include -column-span($i);
228
+ }
229
+ }
230
+ }
231
+ }
232
+
233
+ // Percent column span per breakpoint
234
+ @if is-smallest-breakpoint($name, $breakpoints) {
235
+ .#{$prefix}--#{$name}\:col-span-auto {
236
+ grid-column: auto;
237
+ }
238
+
239
+ .#{$prefix}--#{$name}\:col-span-100 {
240
+ grid-column: 1 / -1;
241
+ }
242
+
243
+ $columns: get-column-count($breakpoints, $name);
244
+
245
+ .#{$prefix}--#{$name}\:col-span-75 {
246
+ $span: $columns * 0.75;
247
+ --cds-grid-columns: #{$span};
248
+
249
+ grid-column: span #{$span} / span #{$span};
250
+ }
251
+
252
+ .#{$prefix}--#{$name}\:col-span-50 {
253
+ $span: $columns * 0.5;
254
+ --cds-grid-columns: #{$span};
255
+
256
+ grid-column: span #{$span} / span #{$span};
257
+ }
258
+
259
+ .#{$prefix}--#{$name}\:col-span-25 {
260
+ $span: $columns * 0.25;
261
+ --cds-grid-columns: #{$span};
262
+
263
+ grid-column: span #{$span} / span #{$span};
264
+ }
265
+ } @else {
266
+ @include breakpoint($name) {
267
+ .#{$prefix}--#{$name}\:col-span-auto {
268
+ grid-column: auto;
269
+ }
270
+
271
+ .#{$prefix}--#{$name}\:col-span-100 {
272
+ grid-column: 1 / -1;
273
+ }
274
+
275
+ $columns: get-column-count($breakpoints, $name);
276
+
277
+ .#{$prefix}--#{$name}\:col-span-75 {
278
+ $span: $columns * 0.75;
279
+ --cds-grid-columns: #{$span};
280
+
281
+ grid-column: span #{$span} / span #{$span};
282
+ }
283
+
284
+ .#{$prefix}--#{$name}\:col-span-50 {
285
+ $span: $columns * 0.5;
286
+ --cds-grid-columns: #{$span};
287
+
288
+ grid-column: span #{$span} / span #{$span};
289
+ }
290
+
291
+ .#{$prefix}--#{$name}\:col-span-25 {
292
+ $span: $columns * 0.25;
293
+ --cds-grid-columns: #{$span};
294
+
295
+ grid-column: span #{$span} / span #{$span};
296
+ }
297
+ }
298
+ }
299
+ }
300
+
301
+ // -----------------------------------------------------------------------------
302
+ // Column percent span
303
+ // -----------------------------------------------------------------------------
304
+ .#{$prefix}--col-span-auto {
305
+ grid-column: auto;
306
+ }
307
+
308
+ .#{$prefix}--col-span-100 {
309
+ grid-column: 1 / -1;
310
+ }
311
+
312
+ .#{$prefix}--col-span-75 {
313
+ @include -percent-column-span($breakpoints, 0.75);
314
+ }
315
+
316
+ .#{$prefix}--col-span-50 {
317
+ @include -percent-column-span($breakpoints, 0.5);
318
+ }
319
+
320
+ .#{$prefix}--col-span-25 {
321
+ @include -percent-column-span($breakpoints, 0.25);
322
+ }
323
+
324
+ // -----------------------------------------------------------------------------
325
+ // Column offset
326
+ // -----------------------------------------------------------------------------
327
+ // Unconditional column start
328
+ // Note: we start at 1 and end at column-count to match grid lines. We do not
329
+ // start at column-count + 1 since starting at the end of the grid would mean
330
+ // a column would have no width available
331
+ @for $i from 1 through get-grid-columns($breakpoints) {
332
+ .#{$prefix}--col-start-#{$i} {
333
+ grid-column-start: $i;
334
+ }
335
+ }
336
+
337
+ // Unconditional column end
338
+ // Note: we start at 2 since a column ending at line 1 would have no width. We
339
+ // end at column-count + 1 since grid lines start at 1
340
+ @for $i from 2 through get-grid-columns($breakpoints) + 1 {
341
+ .#{$prefix}--col-end-#{$i} {
342
+ grid-column-end: $i;
343
+ }
344
+ }
345
+
346
+ .#{$prefix}--col-start-auto {
347
+ grid-column-start: auto;
348
+ }
349
+
350
+ .#{$prefix}--col-end-auto {
351
+ grid-column-end: auto;
352
+ }
353
+
354
+ // Responsive column start, end
355
+ @each $name, $value in $breakpoints {
356
+ @if is-smallest-breakpoint($name, $breakpoints) {
357
+ // Responsive column start
358
+ @for $i from 1 through get-grid-columns($breakpoints) {
359
+ .#{$prefix}--#{$name}\:col-start-#{$i} {
360
+ grid-column-start: $i;
361
+ }
362
+ }
363
+
364
+ // Responsive column end
365
+ @for $i from 2 through get-grid-columns($breakpoints) + 1 {
366
+ .#{$prefix}--#{$name}\:col-end-#{$i} {
367
+ grid-column-end: $i;
368
+ }
369
+ }
370
+
371
+ .#{$prefix}--#{$name}\:col-start-auto {
372
+ grid-column-start: auto;
373
+ }
374
+
375
+ .#{$prefix}--#{$name}\:col-end-auto {
376
+ grid-column-end: auto;
377
+ }
378
+ } @else {
379
+ @include breakpoint($name) {
380
+ // Responsive column start
381
+ @for $i from 1 through get-grid-columns($breakpoints) {
382
+ .#{$prefix}--#{$name}\:col-start-#{$i} {
383
+ grid-column-start: $i;
384
+ }
385
+ }
386
+
387
+ // Responsive column end
388
+ @for $i from 2 through get-grid-columns($breakpoints) + 1 {
389
+ .#{$prefix}--#{$name}\:col-end-#{$i} {
390
+ grid-column-end: $i;
391
+ }
392
+ }
393
+
394
+ .#{$prefix}--#{$name}\:col-start-auto {
395
+ grid-column-start: auto;
396
+ }
397
+
398
+ .#{$prefix}--#{$name}\:col-end-auto {
399
+ grid-column-end: auto;
400
+ }
401
+ }
402
+ }
403
+ }
404
+ }
405
+
406
+ /// Generate the styles for a grid column
407
+ @mixin -column-span($i) {
408
+ @if $i == 0 {
409
+ display: none;
410
+ } @else {
411
+ --cds-grid-columns: #{$i};
412
+
413
+ display: block;
414
+ grid-column: span $i / span $i;
415
+ }
416
+ }
417
+
418
+ /// Generate the styles for an unconditional class that represents a percent
419
+ /// span of a grid
420
+ @mixin -percent-column-span($breakpoints, $percent) {
421
+ @each $key, $value in $breakpoints {
422
+ $columns: get-column-count($breakpoints, $key);
423
+ $span: $columns * $percent;
424
+
425
+ @if is-smallest-breakpoint($key, $breakpoints) {
426
+ --cds-grid-columns: #{$span};
427
+
428
+ grid-column: span #{$span} / span #{$span};
429
+ } @else {
430
+ $previous-breakpoint: breakpoint-prev($key, $breakpoints);
431
+ $previous-column-count: get-column-count(
432
+ $breakpoints,
433
+ $previous-breakpoint
434
+ );
435
+ $previous-span: $previous-column-count * $percent;
436
+
437
+ @if $span != $previous-span {
438
+ @include breakpoint($key) {
439
+ --cds-grid-columns: #{$span};
440
+
441
+ grid-column: span #{$span} / span #{$span};
442
+ }
443
+ }
444
+ }
445
+ }
446
+ }
447
+
448
+ /// Get the grid width for a specific breakpoint name
449
+ @function get-grid-width($breakpoints, $breakpoint) {
450
+ @return map.get(map.get($breakpoints, $breakpoint), width);
451
+ }
452
+
453
+ /// Get the grid column count for a specific breakpoint name
454
+ @function get-column-count($breakpoints, $breakpoint) {
455
+ @return map.get(map.get($breakpoints, $breakpoint), columns);
456
+ }
457
+
458
+ /// Get the grid margin for a specific breakpoint name
459
+ @function get-margin($breakpoints, $breakpoint) {
460
+ $value: map.get(map.get($breakpoints, $breakpoint), margin);
461
+ @if $value == 0 {
462
+ @return 0;
463
+ }
464
+ @return $value;
465
+ }
466
+
467
+ /// Return the largest column count from a set of breakpoints
468
+ @function get-grid-columns($breakpoints) {
469
+ @return get-column-count($breakpoints, largest-breakpoint-name($breakpoints));
470
+ }