@central-design-system/components 2.30.0 → 3.0.0-alpha.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 (283) hide show
  1. package/dist/cds.css +1 -111
  2. package/dist/cds.d.ts +31 -0
  3. package/dist/cds.es.js +2159 -0
  4. package/dist/cds.umd.js +1 -0
  5. package/dist/components/CdsBadge/CdsBadge.vue.d.ts +32 -0
  6. package/dist/components/CdsButton/CdsButton.vue.d.ts +140 -0
  7. package/dist/components/CdsDrawer/CdsDrawer.vue.d.ts +179 -0
  8. package/dist/components/CdsGrid/CdsCol.vue.d.ts +73 -0
  9. package/dist/components/CdsGrid/CdsGrid.vue.d.ts +55 -0
  10. package/dist/components/CdsGrid/CdsRow.vue.d.ts +37 -0
  11. package/dist/components/CdsGrid/composable/column.d.ts +84 -0
  12. package/dist/components/CdsGrid/composable/grid.d.ts +24 -0
  13. package/dist/components/CdsGrid/composable/index.d.ts +4 -0
  14. package/dist/components/CdsGrid/composable/subgrid.d.ts +20 -0
  15. package/dist/components/CdsGrid/composable/wide.d.ts +12 -0
  16. package/dist/components/CdsGrid/mode/CSSGrid.d.ts +5 -0
  17. package/dist/components/CdsGrid/mode/FlexGrid.d.ts +5 -0
  18. package/dist/components/CdsGrid/types.d.ts +27 -0
  19. package/dist/components/CdsIcon/CdsIcon.vue.d.ts +44 -0
  20. package/dist/components/CdsIcon/index.d.ts +1 -0
  21. package/dist/components/CdsLink/CdsLink.vue.d.ts +50 -0
  22. package/dist/components/CdsList/CdsList.vue.d.ts +170 -0
  23. package/dist/components/CdsList/CdsListGroup.vue.d.ts +125 -0
  24. package/dist/components/CdsList/CdsListItem.vue.d.ts +172 -0
  25. package/dist/components/CdsList/composable/depth.d.ts +3 -0
  26. package/dist/components/CdsList/composable/index.d.ts +2 -0
  27. package/dist/components/CdsList/composable/list.d.ts +19 -0
  28. package/dist/components/CdsList/index.d.ts +3 -0
  29. package/dist/components/CdsLoader/CdsLoader.vue.d.ts +62 -0
  30. package/dist/components/CdsLoader/index.d.ts +1 -0
  31. package/dist/components/CdsStatus/CdsStatus.vue.d.ts +46 -0
  32. package/dist/components/CdsTag/CdsTag.vue.d.ts +96 -0
  33. package/dist/components/index.d.ts +18 -0
  34. package/dist/composable/appearance.d.ts +24 -0
  35. package/dist/composable/color.d.ts +21 -0
  36. package/dist/composable/dark.d.ts +19 -0
  37. package/dist/composable/disabled.d.ts +19 -0
  38. package/dist/composable/focus.d.ts +12 -0
  39. package/dist/composable/icon.d.ts +32 -0
  40. package/dist/composable/index.d.ts +17 -0
  41. package/dist/composable/items.d.ts +78 -0
  42. package/dist/composable/link.d.ts +36 -0
  43. package/dist/composable/loading.d.ts +19 -0
  44. package/dist/composable/nested/nested.d.ts +85 -0
  45. package/dist/composable/nested/openStrategies.d.ts +25 -0
  46. package/dist/composable/nested/selectStrategies.d.ts +21 -0
  47. package/dist/composable/proxyModel.d.ts +8 -0
  48. package/dist/composable/render.d.ts +2 -0
  49. package/dist/composable/size.d.ts +24 -0
  50. package/dist/composable/status.d.ts +21 -0
  51. package/dist/composable/tag.d.ts +16 -0
  52. package/dist/composable/text.d.ts +17 -0
  53. package/dist/composable/toggleScope.d.ts +2 -0
  54. package/dist/directives/index.d.ts +2 -0
  55. package/dist/plugins/index.d.ts +2 -0
  56. package/dist/shims-vue.d.ts +24 -0
  57. package/dist/transitions/createTransition.d.ts +9 -0
  58. package/dist/transitions/expandTransition.d.ts +19 -0
  59. package/dist/transitions/index.d.ts +14 -0
  60. package/dist/types/CdsOptions.d.ts +3 -0
  61. package/dist/utils/changeCase/lowerCase.d.ts +8 -0
  62. package/dist/utils/changeCase/noCase.d.ts +10 -0
  63. package/dist/utils/changeCase/paramCase.d.ts +3 -0
  64. package/dist/utils/changeCase/pascalCase.d.ts +5 -0
  65. package/dist/utils/getCurrentInstance.d.ts +13 -0
  66. package/dist/utils/helpers.d.ts +49 -0
  67. package/dist/utils/index.d.ts +7 -0
  68. package/dist/utils/propsFactory.d.ts +52 -0
  69. package/nuxt.js +13 -0
  70. package/package.json +37 -80
  71. package/src/scss/index.scss +10 -0
  72. package/{dist/mixins/scss → src/scss/mixins}/layout/_convert.scss +4 -2
  73. package/{dist/mixins/scss → src/scss/mixins}/layout/_layout.scss +0 -0
  74. package/{dist/mixins/scss → src/scss/mixins}/layout/_mini-unit.scss +0 -0
  75. package/{dist/mixins/scss → src/scss/mixins}/layout/_spacing.scss +0 -0
  76. package/src/scss/mixins/layout/exports/_mini-unit.module.scss +5 -0
  77. package/src/scss/mixins/layout/exports/_spacing-all.module.scss +3 -0
  78. package/src/scss/mixins/layout/exports/_spacing-fluid.module.scss +8 -0
  79. package/src/scss/mixins/layout/exports/_spacing-layout.module.scss +11 -0
  80. package/src/scss/mixins/layout/exports/_spacing.module.scss +16 -0
  81. package/{dist/mixins/scss → src/scss/mixins}/layout/index.scss +0 -2
  82. package/{dist/mixins/scss → src/scss/mixins}/motion.scss +0 -0
  83. package/{dist/mixins/scss → src/scss/mixins}/typo.scss +0 -67
  84. package/src/scss/modules/_reset.scss +113 -0
  85. package/src/scss/modules/_transition.scss +26 -0
  86. package/src/scss/modules/_typography.scss +36 -0
  87. package/src/scss/modules/_variables.scss +9 -0
  88. package/src/scss/modules/grid/_aspect-ratio.scss +62 -0
  89. package/src/scss/modules/grid/_breakpoint.scss +195 -0
  90. package/src/scss/modules/grid/_config.scss +88 -0
  91. package/src/scss/modules/grid/_css-grid.scss +445 -0
  92. package/src/scss/modules/grid/_flex-grid.scss +39 -0
  93. package/src/scss/modules/grid/_mixins.scss +307 -0
  94. package/src/scss/modules/grid/exports/_config.module.scss +9 -0
  95. package/src/scss/modules/grid/index.scss +5 -0
  96. package/src/scss/themes/b2b/tokens-map.scss +139 -0
  97. package/src/scss/themes/b2b/tokens.json +2190 -0
  98. package/{dist/tokens → src/scss/themes}/b2b/variables.css +0 -0
  99. package/src/scss/themes/cds/tokens-map.scss +138 -0
  100. package/src/scss/themes/cds/tokens.json +2184 -0
  101. package/{dist/tokens → src/scss/themes}/cds/variables.css +0 -1
  102. package/src/scss/themes/index.ts +43 -0
  103. package/src/scss/utility/display.scss +13 -0
  104. package/src/scss/utility/flexbox.scss +37 -0
  105. package/src/scss/utility/generatedFiles/generatedStyles.json +1 -0
  106. package/src/scss/utility/generatedFiles/generatedStyles.scss +300 -0
  107. package/src/scss/utility/index.scss +7 -0
  108. package/src/scss/utility/layout.scss +11 -0
  109. package/src/scss/utility/lists.scss +76 -0
  110. package/src/scss/utility/spacing.scss +89 -0
  111. package/src/scss/utility/typography.scss +16 -0
  112. package/src/scss/utility/variables.scss +116 -0
  113. package/README.md +0 -87
  114. package/build/utils/postInstall.js +0 -20
  115. package/build/utils/print.js +0 -38
  116. package/dist/CdsAccordion/index.js +0 -8
  117. package/dist/CdsAccordion/styles.css +0 -11
  118. package/dist/CdsBadge/index.js +0 -8
  119. package/dist/CdsBadge/styles.css +0 -9
  120. package/dist/CdsBreadcrumbs/index.js +0 -8
  121. package/dist/CdsBreadcrumbs/styles.css +0 -11
  122. package/dist/CdsButton/index.js +0 -8
  123. package/dist/CdsButton/styles.css +0 -11
  124. package/dist/CdsCheckbox/index.js +0 -8
  125. package/dist/CdsCheckbox/styles.css +0 -15
  126. package/dist/CdsCombobox/index.js +0 -8
  127. package/dist/CdsCombobox/styles.css +0 -15
  128. package/dist/CdsContainer/index.js +0 -8
  129. package/dist/CdsContainer/styles.css +0 -11
  130. package/dist/CdsContentSwitcher/index.js +0 -8
  131. package/dist/CdsContentSwitcher/styles.css +0 -15
  132. package/dist/CdsDataTable/index.js +0 -8
  133. package/dist/CdsDataTable/styles.css +0 -21
  134. package/dist/CdsDatePicker/index.js +0 -24
  135. package/dist/CdsDatePicker/styles.css +0 -15
  136. package/dist/CdsDrawer/index.js +0 -8
  137. package/dist/CdsDrawer/styles.css +0 -17
  138. package/dist/CdsDropdown/index.js +0 -8
  139. package/dist/CdsDropdown/styles.css +0 -15
  140. package/dist/CdsEmptyState/index.js +0 -8
  141. package/dist/CdsEmptyState/styles.css +0 -9
  142. package/dist/CdsFooter/index.js +0 -8
  143. package/dist/CdsFooter/styles.css +0 -17
  144. package/dist/CdsForm/index.js +0 -8
  145. package/dist/CdsForm/styles.css +0 -15
  146. package/dist/CdsGrid/index.js +0 -8
  147. package/dist/CdsGrid/styles.css +0 -9
  148. package/dist/CdsHeader/index.js +0 -8
  149. package/dist/CdsHeader/styles.css +0 -11
  150. package/dist/CdsIcon/index.js +0 -8
  151. package/dist/CdsIcon/styles.css +0 -9
  152. package/dist/CdsImage/index.js +0 -8
  153. package/dist/CdsImage/styles.css +0 -9
  154. package/dist/CdsInput/index.js +0 -8
  155. package/dist/CdsInput/styles.css +0 -13
  156. package/dist/CdsLink/index.js +0 -8
  157. package/dist/CdsLink/styles.css +0 -9
  158. package/dist/CdsList/index.js +0 -8
  159. package/dist/CdsList/styles.css +0 -9
  160. package/dist/CdsLoading/index.js +0 -8
  161. package/dist/CdsLoading/styles.css +0 -9
  162. package/dist/CdsModal/index.js +0 -8
  163. package/dist/CdsModal/styles.css +0 -15
  164. package/dist/CdsMultiselect/index.js +0 -8
  165. package/dist/CdsMultiselect/styles.css +0 -17
  166. package/dist/CdsNotification/index.js +0 -8
  167. package/dist/CdsNotification/styles.css +0 -21
  168. package/dist/CdsOverflowMenu/index.js +0 -8
  169. package/dist/CdsOverflowMenu/styles.css +0 -21
  170. package/dist/CdsPagination/index.js +0 -8
  171. package/dist/CdsPagination/styles.css +0 -13
  172. package/dist/CdsRadioButton/index.js +0 -8
  173. package/dist/CdsRadioButton/styles.css +0 -15
  174. package/dist/CdsSearch/index.js +0 -8
  175. package/dist/CdsSearch/styles.css +0 -19
  176. package/dist/CdsSelect/index.js +0 -8
  177. package/dist/CdsSelect/styles.css +0 -15
  178. package/dist/CdsSidebar/index.js +0 -8
  179. package/dist/CdsSidebar/styles.css +0 -15
  180. package/dist/CdsSkeleton/index.js +0 -8
  181. package/dist/CdsSkeleton/styles.css +0 -9
  182. package/dist/CdsStages/index.js +0 -8
  183. package/dist/CdsStages/styles.css +0 -9
  184. package/dist/CdsStatus/index.js +0 -8
  185. package/dist/CdsStatus/styles.css +0 -15
  186. package/dist/CdsSteps/index.js +0 -8
  187. package/dist/CdsSteps/styles.css +0 -19
  188. package/dist/CdsTable/index.js +0 -16
  189. package/dist/CdsTable/styles.css +0 -21
  190. package/dist/CdsTabs/index.js +0 -8
  191. package/dist/CdsTabs/styles.css +0 -9
  192. package/dist/CdsTag/index.js +0 -8
  193. package/dist/CdsTag/styles.css +0 -11
  194. package/dist/CdsTextArea/index.js +0 -8
  195. package/dist/CdsTextArea/styles.css +0 -17
  196. package/dist/CdsTextInput/index.js +0 -8
  197. package/dist/CdsTextInput/styles.css +0 -15
  198. package/dist/CdsToggle/index.js +0 -8
  199. package/dist/CdsToggle/styles.css +0 -9
  200. package/dist/CdsTooltip/index.js +0 -8
  201. package/dist/CdsTooltip/styles.css +0 -13
  202. package/dist/CdsUploader/index.js +0 -14
  203. package/dist/CdsUploader/styles.css +0 -25
  204. package/dist/cds.js +0 -38
  205. package/dist/cds.min.css +0 -7
  206. package/dist/cds.min.js +0 -38
  207. package/dist/index.html +0 -60
  208. package/dist/mixins/scss/layout/_breakpoint.scss +0 -237
  209. package/dist/mixins/scss/layout/_key-height.scss +0 -90
  210. package/dist/mixins/scss/layout/_spacing-export.scss +0 -34
  211. package/dist/mixins/scss/layout/_utilities.scss +0 -33
  212. package/dist/types/CdsAccordion.ts +0 -4
  213. package/dist/types/CdsAccordionItem.ts +0 -10
  214. package/dist/types/CdsBreadcrumbs.ts +0 -11
  215. package/dist/types/CdsBreadcrumbsItem.ts +0 -12
  216. package/dist/types/CdsButton.ts +0 -30
  217. package/dist/types/CdsCheckbox.ts +0 -20
  218. package/dist/types/CdsCheckboxGroup.ts +0 -14
  219. package/dist/types/CdsCol.ts +0 -38
  220. package/dist/types/CdsCombobox.ts +0 -42
  221. package/dist/types/CdsContainer.ts +0 -32
  222. package/dist/types/CdsContentSwitcher.ts +0 -4
  223. package/dist/types/CdsContentSwitcherButton.ts +0 -21
  224. package/dist/types/CdsDataTable.ts +0 -48
  225. package/dist/types/CdsDatePicker.ts +0 -40
  226. package/dist/types/CdsDrawer.ts +0 -25
  227. package/dist/types/CdsDrawerGroup.ts +0 -8
  228. package/dist/types/CdsDrawerItem.ts +0 -12
  229. package/dist/types/CdsDrawerLabel.ts +0 -4
  230. package/dist/types/CdsDropdown.ts +0 -14
  231. package/dist/types/CdsEmptyState.ts +0 -10
  232. package/dist/types/CdsFooter.ts +0 -17
  233. package/dist/types/CdsFooterService.ts +0 -16
  234. package/dist/types/CdsForm.ts +0 -4
  235. package/dist/types/CdsFormGroup.ts +0 -8
  236. package/dist/types/CdsFormItem.ts +0 -4
  237. package/dist/types/CdsGrid.ts +0 -16
  238. package/dist/types/CdsHeader.ts +0 -27
  239. package/dist/types/CdsHeaderService.ts +0 -4
  240. package/dist/types/CdsIcon.ts +0 -6
  241. package/dist/types/CdsLink.ts +0 -22
  242. package/dist/types/CdsList.ts +0 -6
  243. package/dist/types/CdsLoading.ts +0 -14
  244. package/dist/types/CdsModal.ts +0 -17
  245. package/dist/types/CdsMultiselect.ts +0 -33
  246. package/dist/types/CdsNotification.ts +0 -22
  247. package/dist/types/CdsOverflowMenu.ts +0 -16
  248. package/dist/types/CdsPagination.ts +0 -12
  249. package/dist/types/CdsRadioButton.ts +0 -29
  250. package/dist/types/CdsRow.ts +0 -18
  251. package/dist/types/CdsSearch.ts +0 -24
  252. package/dist/types/CdsSelect.ts +0 -37
  253. package/dist/types/CdsSkeleton.ts +0 -14
  254. package/dist/types/CdsStages.ts +0 -10
  255. package/dist/types/CdsStatus.ts +0 -22
  256. package/dist/types/CdsSteps.ts +0 -22
  257. package/dist/types/CdsStepsItem.ts +0 -12
  258. package/dist/types/CdsTable.ts +0 -46
  259. package/dist/types/CdsTabs.ts +0 -19
  260. package/dist/types/CdsTabsItem.ts +0 -18
  261. package/dist/types/CdsTag.ts +0 -20
  262. package/dist/types/CdsTextArea.ts +0 -26
  263. package/dist/types/CdsTextInput.ts +0 -32
  264. package/dist/types/CdsToggle.ts +0 -18
  265. package/dist/types/CdsTooltip.ts +0 -18
  266. package/dist/types/CdsTooltipDefinition.ts +0 -16
  267. package/dist/types/CdsTooltipInteractive.ts +0 -11
  268. package/dist/types/CdsUploader.ts +0 -44
  269. package/dist/types/Sidebar.ts +0 -17
  270. package/dist/types/types.ts +0 -2
  271. package/dist/utils/convertRemToPx.js +0 -9
  272. package/dist/utils/deepFind.js +0 -14
  273. package/dist/utils/expiringStorage.js +0 -28
  274. package/dist/utils/helpers.js +0 -33
  275. package/dist/utils/index.js +0 -1
  276. package/dist/utils/isCorrectTag.js +0 -5
  277. package/dist/utils/isRightProps.js +0 -5
  278. package/dist/utils/memoize.js +0 -8
  279. package/dist/utils/suffixPropName.js +0 -12
  280. package/dist/utils/test/deepFind.test.js +0 -18
  281. package/dist/utils/test/isCorrectTag.test.js +0 -9
  282. package/dist/utils/test/isCorrectTagDataSet.js +0 -51
  283. package/dist/utils/validationProps.js +0 -7
@@ -0,0 +1,445 @@
1
+ @use 'sass:list';
2
+ @use 'sass:map';
3
+ @use 'sass:math';
4
+ @use 'sass:meta';
5
+ @use 'config' as *;
6
+ @use 'breakpoint' as *;
7
+
8
+ /// Emit all the styles related to the CSS Grid, these include:
9
+ /// - The base grid class
10
+ /// - The various grid modes
11
+ /// - The ability to specifiy column span
12
+ /// - The ability to specifiy column start,end position
13
+ /// - Support for subgrid
14
+ /// - Support for hanging content on a grid column
15
+ /// - Support for controlling grid gutter on a cell basis
16
+ /// - Support for specifying content alignment
17
+ ///
18
+ ///
19
+ /// In general, this mixin is structured in a way to emit the fewest CSS styles
20
+ /// as possible. To do this, we will (as much as possible) not emit a value if
21
+ /// one is already defined at a previous breakpoint.
22
+ ///
23
+ /// In addition, this mixin will break down emitting styles into several stages:
24
+ /// 1. Emit styles for the smallest breakpoint without any breakpoint. By
25
+ /// default, these styles will be on
26
+ /// 2. For every other breakpoint, wrap it in a breakpoint so that it only is
27
+ /// triggered when that breakpoint is applied
28
+ /// 3. In situations where it is appropriate, we also will emit "unconditional"
29
+ /// selectors that will always apply. For example, if you wanted a column to
30
+ /// always span four columns
31
+ @mixin css-grid($breakpoints: $grid-breakpoints) {
32
+ /// The :root selector is responsible for setting several top-level CSS Custom
33
+ /// Properties, including the overall grid gutter, grid column count, and grid
34
+ /// margin
35
+ :root {
36
+ --cds-grid-gutter: #{$grid-gutter};
37
+
38
+ // Iterate through the grid breakpoints and only emit the grid-columns and
39
+ // grid-margin CSS Custom Properties if they've changed from the previous
40
+ // breakpoint. By default, we emit the smallest breakpoint values on the
41
+ // :root selector
42
+ @each $key, $value in $breakpoints {
43
+ @if is-smallest-breakpoint($key, $breakpoints) {
44
+ --cds-grid-columns: #{get-column-count($breakpoints, $key)};
45
+ --cds-grid-margin: #{get-margin($breakpoints, $key)};
46
+ } @else {
47
+ $previous-breakpoint: breakpoint-prev($key, $breakpoints);
48
+ $changes: ();
49
+
50
+ @if get-column-count($breakpoints, $key) != get-column-count($breakpoints, $previous-breakpoint) {
51
+ $changes: map.set($changes, grid-columns, get-column-count($breakpoints, $key));
52
+ }
53
+
54
+ @if get-margin($breakpoints, $key) != get-margin($breakpoints, $previous-breakpoint) {
55
+ $changes: map.set($changes, grid-margin, get-margin($breakpoints, $key));
56
+ }
57
+
58
+ @include cds-breakpoint($key) {
59
+ @each $name, $value in $changes {
60
+ --cds-#{$name}: #{$value};
61
+ }
62
+ }
63
+ }
64
+ }
65
+ }
66
+
67
+ // -----------------------------------------------------------------------------
68
+ // Base CSS Grid
69
+ // -----------------------------------------------------------------------------
70
+ .#{$prefix}--css-grid {
71
+ --cds-grid-gutter-start: calc(var(--cds-grid-gutter) / 2);
72
+ --cds-grid-gutter-end: calc(var(--cds-grid-gutter) / 2);
73
+ // We split out a separate "column hang" since "gutter-start" is set
74
+ // dynamically and could be 0
75
+ --cds-grid-column-hang: calc(var(--cds-grid-gutter) / 2);
76
+
77
+ display: grid;
78
+ width: 100%;
79
+ max-width: get-grid-width($breakpoints, largest-breakpoint-name($breakpoints));
80
+ padding-right: var(--cds-grid-margin);
81
+ padding-left: var(--cds-grid-margin);
82
+ margin-right: auto;
83
+ margin-left: auto;
84
+ grid-template-columns: repeat(var(--cds-grid-columns), minmax(0, 1fr));
85
+ }
86
+
87
+ // -----------------------------------------------------------------------------
88
+ // Full width
89
+ // -----------------------------------------------------------------------------
90
+ .#{$prefix}--css-grid--full-width {
91
+ max-width: 100%;
92
+ }
93
+
94
+ // -----------------------------------------------------------------------------
95
+ // Column
96
+ // -----------------------------------------------------------------------------
97
+
98
+ // Add gutter to columns in a CSS Grid. Unfortunately, we cannot use
99
+ // `grid-gap`, `column-gap`, etc. as we need to conditionally remove leading
100
+ // and trailing gutter from a column.
101
+ .#{$prefix}--css-grid-column {
102
+ // grid-mode-start, grid-mode-end are meant to capture the "grid settings"
103
+ // so that subgrids can correctly fit in parent grids by reverting the
104
+ // grid's outer padding
105
+ --cds-grid-mode-start: var(--cds-grid-gutter-start);
106
+ --cds-grid-mode-end: var(--cds-grid-gutter-end);
107
+
108
+ margin-right: var(--cds-grid-gutter-end);
109
+ margin-left: var(--cds-grid-gutter-start);
110
+
111
+ [dir='rtl'] & {
112
+ margin-right: var(--cds-grid-gutter-start);
113
+ margin-left: var(--cds-grid-gutter-end);
114
+ }
115
+ }
116
+
117
+ // -----------------------------------------------------------------------------
118
+ // Grid modes
119
+ // -----------------------------------------------------------------------------
120
+
121
+ // Narrow
122
+ .#{$prefix}--css-grid--narrow {
123
+ --cds-grid-gutter-start: 0;
124
+ }
125
+
126
+ // Condensed
127
+ .#{$prefix}--css-grid--condensed {
128
+ --cds-grid-gutter: #{$grid-gutter-condensed};
129
+ --cds-grid-column-hang: #{math.div($grid-gutter, 2) - math.div($grid-gutter-condensed, 2)};
130
+ }
131
+
132
+ // -----------------------------------------------------------------------------
133
+ // Subgrid
134
+ // -----------------------------------------------------------------------------
135
+ .#{$prefix}--subgrid {
136
+ display: grid;
137
+ margin-right: calc(var(--cds-grid-mode-end) * -1);
138
+ margin-left: calc(var(--cds-grid-mode-start) * -1);
139
+ grid-template-columns: repeat(var(--cds-grid-columns), minmax(0, 1fr));
140
+
141
+ [dir='rtl'] & {
142
+ margin-right: calc(var(--cds-grid-mode-start) * -1);
143
+ margin-left: calc(var(--cds-grid-mode-end) * -1);
144
+ }
145
+ }
146
+
147
+ // Support the grid modes in subgrids
148
+ .#{$prefix}--subgrid--wide {
149
+ --cds-grid-gutter-start: #{math.div($grid-gutter, 2)};
150
+ --cds-grid-gutter-end: #{math.div($grid-gutter, 2)};
151
+ --cds-grid-column-hang: 0;
152
+ }
153
+
154
+ .#{$prefix}--subgrid--narrow {
155
+ --cds-grid-gutter-start: 0;
156
+ --cds-grid-gutter-end: #{math.div($grid-gutter, 2)};
157
+ --cds-grid-column-hang: #{math.div($grid-gutter, 2)};
158
+ }
159
+
160
+ .#{$prefix}--subgrid--condensed {
161
+ --cds-grid-gutter-start: #{math.div($grid-gutter-condensed, 2)};
162
+ --cds-grid-gutter-end: #{math.div($grid-gutter-condensed, 2)};
163
+ --cds-grid-column-hang: #{math.div($grid-gutter, 2) -
164
+ math.div($grid-gutter-condensed, 2)};
165
+ }
166
+
167
+ // -----------------------------------------------------------------------------
168
+ // Column hang
169
+ // -----------------------------------------------------------------------------
170
+
171
+ // Helper class to allow for text alignment in columns where the leading
172
+ // gutter is missing (like narrow) or is reduced (like in condensed).
173
+ .#{$prefix}--grid-column-hang {
174
+ margin-left: var(--cds-grid-column-hang);
175
+
176
+ [dir='rtl'] & {
177
+ margin-right: var(--cds-grid-column-hang);
178
+ margin-left: initial;
179
+ }
180
+ }
181
+
182
+ // -----------------------------------------------------------------------------
183
+ // Column span
184
+ // -----------------------------------------------------------------------------
185
+
186
+ // Generate col-span-{0-16} classes which unconditionally set column span
187
+ // regardless of breakpoint
188
+ @for $i from 0 through get-grid-columns($breakpoints) {
189
+ .#{$prefix}--col-span-#{$i} {
190
+ @include -column-span($i);
191
+ }
192
+ }
193
+
194
+ // Responsive column span
195
+ @each $name, $value in $breakpoints {
196
+ // Column span per breakpoint
197
+ @for $i from 0 through get-column-count($breakpoints, $name) {
198
+ @if is-smallest-breakpoint($name, $breakpoints) {
199
+ .#{$prefix}--#{$name}\:col-span-#{$i} {
200
+ @include -column-span($i);
201
+ }
202
+ } @else {
203
+ @include cds-breakpoint($name) {
204
+ .#{$prefix}--#{$name}\:col-span-#{$i} {
205
+ @include -column-span($i);
206
+ }
207
+ }
208
+ }
209
+ }
210
+
211
+ // Percent column span per breakpoint
212
+ @if is-smallest-breakpoint($name, $breakpoints) {
213
+ .#{$prefix}--#{$name}\:col-span-auto {
214
+ grid-column: auto;
215
+ }
216
+
217
+ .#{$prefix}--#{$name}\:col-span-100 {
218
+ grid-column: 1 / -1;
219
+ }
220
+
221
+ $columns: get-column-count($breakpoints, $name);
222
+
223
+ .#{$prefix}--#{$name}\:col-span-75 {
224
+ $span: $columns * 0.75;
225
+ --cds-grid-columns: #{$span};
226
+
227
+ grid-column: span list.slash($span, span) #{$span};
228
+ }
229
+
230
+ .#{$prefix}--#{$name}\:col-span-50 {
231
+ $span: $columns * 0.5;
232
+ --cds-grid-columns: #{$span};
233
+
234
+ grid-column: span list.slash($span, span) #{$span};
235
+ }
236
+
237
+ .#{$prefix}--#{$name}\:col-span-25 {
238
+ $span: $columns * 0.25;
239
+ --cds-grid-columns: #{$span};
240
+
241
+ grid-column: span list.slash($span, span) #{$span};
242
+ }
243
+ } @else {
244
+ @include cds-breakpoint($name) {
245
+ .#{$prefix}--#{$name}\:col-span-auto {
246
+ grid-column: auto;
247
+ }
248
+
249
+ .#{$prefix}--#{$name}\:col-span-100 {
250
+ grid-column: 1 / -1;
251
+ }
252
+
253
+ $columns: get-column-count($breakpoints, $name);
254
+
255
+ .#{$prefix}--#{$name}\:col-span-75 {
256
+ $span: $columns * 0.75;
257
+ --cds-grid-columns: #{$span};
258
+
259
+ grid-column: span list.slash($span, span) #{$span};
260
+ }
261
+
262
+ .#{$prefix}--#{$name}\:col-span-50 {
263
+ $span: $columns * 0.5;
264
+ --cds-grid-columns: #{$span};
265
+
266
+ grid-column: span list.slash($span, span) #{$span};
267
+ }
268
+
269
+ .#{$prefix}--#{$name}\:col-span-25 {
270
+ $span: $columns * 0.25;
271
+ --cds-grid-columns: #{$span};
272
+
273
+ grid-column: span list.slash($span, span) #{$span};
274
+ }
275
+ }
276
+ }
277
+ }
278
+
279
+ // -----------------------------------------------------------------------------
280
+ // Column percent span
281
+ // -----------------------------------------------------------------------------
282
+ .#{$prefix}--col-span-auto {
283
+ grid-column: auto;
284
+ }
285
+
286
+ .#{$prefix}--col-span-100 {
287
+ grid-column: 1 / -1;
288
+ }
289
+
290
+ .#{$prefix}--col-span-75 {
291
+ @include -percent-column-span($breakpoints, 0.75);
292
+ }
293
+
294
+ .#{$prefix}--col-span-50 {
295
+ @include -percent-column-span($breakpoints, 0.5);
296
+ }
297
+
298
+ .#{$prefix}--col-span-25 {
299
+ @include -percent-column-span($breakpoints, 0.25);
300
+ }
301
+
302
+ // -----------------------------------------------------------------------------
303
+ // Column offset
304
+ // -----------------------------------------------------------------------------
305
+ // Unconditional column start
306
+ // Note: we start at 1 and end at column-count to match grid lines. We do not
307
+ // start at column-count + 1 since starting at the end of the grid would mean
308
+ // a column would have no width available
309
+ @for $i from 1 through get-grid-columns($breakpoints) {
310
+ .#{$prefix}--col-start-#{$i} {
311
+ grid-column-start: $i;
312
+ }
313
+ }
314
+
315
+ // Unconditional column end
316
+ // Note: we start at 2 since a column ending at line 1 would have no width. We
317
+ // end at column-count + 1 since grid lines start at 1
318
+ @for $i from 2 through get-grid-columns($breakpoints) + 1 {
319
+ .#{$prefix}--col-end-#{$i} {
320
+ grid-column-end: $i;
321
+ }
322
+ }
323
+
324
+ .#{$prefix}--col-start-auto {
325
+ grid-column-start: auto;
326
+ }
327
+
328
+ .#{$prefix}--col-end-auto {
329
+ grid-column-end: auto;
330
+ }
331
+
332
+ // Responsive column start, end
333
+ @each $name, $value in $breakpoints {
334
+ @if is-smallest-breakpoint($name, $breakpoints) {
335
+ // Responsive column start
336
+ @for $i from 1 through get-grid-columns($breakpoints) {
337
+ .#{$prefix}--#{$name}\:col-start-#{$i} {
338
+ grid-column-start: $i;
339
+ }
340
+ }
341
+
342
+ // Responsive column end
343
+ @for $i from 2 through get-grid-columns($breakpoints) + 1 {
344
+ .#{$prefix}--#{$name}\:col-end-#{$i} {
345
+ grid-column-end: $i;
346
+ }
347
+ }
348
+
349
+ .#{$prefix}--#{$name}\:col-start-auto {
350
+ grid-column-start: auto;
351
+ }
352
+
353
+ .#{$prefix}--#{$name}\:col-end-auto {
354
+ grid-column-end: auto;
355
+ }
356
+ } @else {
357
+ @include cds-breakpoint($name) {
358
+ // Responsive column start
359
+ @for $i from 1 through get-grid-columns($breakpoints) {
360
+ .#{$prefix}--#{$name}\:col-start-#{$i} {
361
+ grid-column-start: $i;
362
+ }
363
+ }
364
+
365
+ // Responsive column end
366
+ @for $i from 2 through get-grid-columns($breakpoints) + 1 {
367
+ .#{$prefix}--#{$name}\:col-end-#{$i} {
368
+ grid-column-end: $i;
369
+ }
370
+ }
371
+
372
+ .#{$prefix}--#{$name}\:col-start-auto {
373
+ grid-column-start: auto;
374
+ }
375
+
376
+ .#{$prefix}--#{$name}\:col-end-auto {
377
+ grid-column-end: auto;
378
+ }
379
+ }
380
+ }
381
+ }
382
+ }
383
+
384
+ /// Generate the styles for a grid column
385
+ @mixin -column-span($i) {
386
+ @if $i == 0 {
387
+ display: none;
388
+ } @else {
389
+ --cds-grid-columns: #{$i};
390
+
391
+ display: block;
392
+ grid-column: span $i / span $i;
393
+ }
394
+ }
395
+
396
+ /// Generate the styles for an unconditional class that represents a percent
397
+ /// span of a grid
398
+ @mixin -percent-column-span($breakpoints, $percent) {
399
+ @each $key, $value in $breakpoints {
400
+ $columns: get-column-count($breakpoints, $key);
401
+ $span: $columns * $percent;
402
+
403
+ @if is-smallest-breakpoint($key, $breakpoints) {
404
+ --cds-grid-columns: #{$span};
405
+
406
+ grid-column: span list.slash($span, span) #{$span};
407
+ } @else {
408
+ $previous-breakpoint: breakpoint-prev($key, $breakpoints);
409
+ $previous-column-count: get-column-count($breakpoints, $previous-breakpoint);
410
+ $previous-span: $previous-column-count * $percent;
411
+
412
+ @if $span != $previous-span {
413
+ @include cds-breakpoint($key) {
414
+ --cds-grid-columns: #{$span};
415
+
416
+ grid-column: span list.slash($span, span) #{$span};
417
+ }
418
+ }
419
+ }
420
+ }
421
+ }
422
+
423
+ /// Get the grid width for a specific breakpoint name
424
+ @function get-grid-width($breakpoints, $breakpoint) {
425
+ @return map.get(map.get($breakpoints, $breakpoint), width);
426
+ }
427
+
428
+ /// Get the grid column count for a specific breakpoint name
429
+ @function get-column-count($breakpoints, $breakpoint) {
430
+ @return map.get(map.get($breakpoints, $breakpoint), columns);
431
+ }
432
+
433
+ /// Get the grid margin for a specific breakpoint name
434
+ @function get-margin($breakpoints, $breakpoint) {
435
+ $value: map.get(map.get($breakpoints, $breakpoint), margin);
436
+ @if $value == 0 {
437
+ @return 0;
438
+ }
439
+ @return $value;
440
+ }
441
+
442
+ /// Return the largest column count from a set of breakpoints
443
+ @function get-grid-columns($breakpoints) {
444
+ @return get-column-count($breakpoints, largest-breakpoint-name($breakpoints));
445
+ }
@@ -0,0 +1,39 @@
1
+ @use 'config' as *;
2
+ @use 'breakpoint' as *;
3
+
4
+ @import 'mixins';
5
+
6
+ @mixin flex-grid(
7
+ $breakpoints: $grid-breakpoints,
8
+ $grid-gutter: $grid-gutter,
9
+ $condensed-gutter: $grid-gutter-condensed
10
+ ) {
11
+ .#{$prefix}-grid {
12
+ @include -make-container($breakpoints);
13
+ }
14
+
15
+ @include cds-largest-breakpoint($breakpoints) {
16
+ .#{$prefix}-grid--wide {
17
+ max-width: 100%;
18
+ }
19
+ }
20
+
21
+ .#{$prefix}-row {
22
+ @include -make-row();
23
+ }
24
+
25
+ .#{$prefix}-row-padding [class*='#{$prefix}-col'],
26
+ .#{$prefix}-col-padding {
27
+ padding-top: $grid-gutter * 0.5;
28
+ padding-bottom: $grid-gutter * 0.5;
29
+ }
30
+
31
+ .#{$prefix}-grid-condensed [class*='#{$prefix}-col'] {
32
+ padding-top: $condensed-gutter * 0.5;
33
+ padding-bottom: $condensed-gutter * 0.5;
34
+ }
35
+
36
+ @include -make-grid-columns($breakpoints, $grid-gutter);
37
+ @include -no-gutter();
38
+ @include -hang($grid-gutter);
39
+ }