@transferwise/neptune-css 0.0.0-experimental-1181467

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 (180) hide show
  1. package/LICENSE.md +13 -0
  2. package/README.md +45 -0
  3. package/dist/css/accordion.css +1 -0
  4. package/dist/css/alerts.css +1 -0
  5. package/dist/css/background.css +1 -0
  6. package/dist/css/badge.css +1 -0
  7. package/dist/css/border-radius.css +1 -0
  8. package/dist/css/breadcrumbs.css +1 -0
  9. package/dist/css/button-groups.css +1 -0
  10. package/dist/css/buttons.css +1 -0
  11. package/dist/css/chevron.css +1 -0
  12. package/dist/css/circles.css +1 -0
  13. package/dist/css/close.css +1 -0
  14. package/dist/css/column-layout.css +1 -0
  15. package/dist/css/currency-flags.css +1 -0
  16. package/dist/css/decision.css +1 -0
  17. package/dist/css/dropdowns.css +1 -0
  18. package/dist/css/droppable.css +1 -0
  19. package/dist/css/flex.css +1 -0
  20. package/dist/css/footer.css +1 -0
  21. package/dist/css/grid.css +1 -0
  22. package/dist/css/input-groups.css +1 -0
  23. package/dist/css/link-callout.css +1 -0
  24. package/dist/css/list-group.css +1 -0
  25. package/dist/css/loaders.css +1 -0
  26. package/dist/css/media.css +1 -0
  27. package/dist/css/modals.css +1 -0
  28. package/dist/css/navbar-base.css +1 -0
  29. package/dist/css/navbar.css +1 -0
  30. package/dist/css/navs.css +1 -0
  31. package/dist/css/neptune-addons.css +1 -0
  32. package/dist/css/neptune-core.css +1 -0
  33. package/dist/css/neptune-social-media.css +1 -0
  34. package/dist/css/neptune.css +1 -0
  35. package/dist/css/panels.css +1 -0
  36. package/dist/css/popovers.css +1 -0
  37. package/dist/css/process.css +1 -0
  38. package/dist/css/progress-bars.css +1 -0
  39. package/dist/css/ring.css +1 -0
  40. package/dist/css/select.css +1 -0
  41. package/dist/css/sequences.css +1 -0
  42. package/dist/css/table.css +1 -0
  43. package/dist/css/tick.css +1 -0
  44. package/dist/css/tooltip.css +1 -0
  45. package/dist/css/utilities.css +1 -0
  46. package/dist/css/wells.css +1 -0
  47. package/dist/fonts/TW-Averta-Bold.woff +0 -0
  48. package/dist/fonts/TW-Averta-Bold.woff2 +0 -0
  49. package/dist/fonts/TW-Averta-Regular.woff +0 -0
  50. package/dist/fonts/TW-Averta-Regular.woff2 +0 -0
  51. package/dist/fonts/TW-Averta-Semibold.woff +0 -0
  52. package/dist/fonts/TW-Averta-Semibold.woff2 +0 -0
  53. package/dist/fonts/TransferWise-IconFont.svg +81 -0
  54. package/dist/fonts/TransferWise-IconFont.woff +0 -0
  55. package/dist/fonts/WorldwiseSans-Heavy.woff2 +0 -0
  56. package/dist/fonts/inter-cyrillic-ext-variable-wghtOnly-normal.woff2 +0 -0
  57. package/dist/fonts/inter-cyrillic-variable-wghtOnly-normal.woff2 +0 -0
  58. package/dist/fonts/inter-greek-ext-variable-wghtOnly-normal.woff2 +0 -0
  59. package/dist/fonts/inter-greek-variable-wghtOnly-normal.woff2 +0 -0
  60. package/dist/fonts/inter-latin-ext-variable-wghtOnly-normal.woff2 +0 -0
  61. package/dist/fonts/inter-latin-variable-wghtOnly-normal.woff2 +0 -0
  62. package/dist/fonts/inter-vietnamese-variable-wghtOnly-normal.woff2 +0 -0
  63. package/dist/img/bg-dark.svg +31 -0
  64. package/dist/img/bg-light.svg +26 -0
  65. package/dist/less/legacy-variables.less +1299 -0
  66. package/dist/less/neptune-tokens.less +272 -0
  67. package/dist/less/zindex.less +17 -0
  68. package/dist/props/custom-media.css +9 -0
  69. package/dist/props/legacy-custom-props.css +69 -0
  70. package/dist/props/neptune-tokens.css +150 -0
  71. package/package.json +59 -0
  72. package/scripts/neptune-css-upgrader.js +106 -0
  73. package/src/fonts/TW-Averta-Bold.woff +0 -0
  74. package/src/fonts/TW-Averta-Bold.woff2 +0 -0
  75. package/src/fonts/TW-Averta-Regular.woff +0 -0
  76. package/src/fonts/TW-Averta-Regular.woff2 +0 -0
  77. package/src/fonts/TW-Averta-Semibold.woff +0 -0
  78. package/src/fonts/TW-Averta-Semibold.woff2 +0 -0
  79. package/src/fonts/TransferWise-IconFont.svg +81 -0
  80. package/src/fonts/TransferWise-IconFont.woff +0 -0
  81. package/src/fonts/WorldwiseSans-Heavy.woff2 +0 -0
  82. package/src/fonts/inter-cyrillic-ext-variable-wghtOnly-normal.woff2 +0 -0
  83. package/src/fonts/inter-cyrillic-variable-wghtOnly-normal.woff2 +0 -0
  84. package/src/fonts/inter-greek-ext-variable-wghtOnly-normal.woff2 +0 -0
  85. package/src/fonts/inter-greek-variable-wghtOnly-normal.woff2 +0 -0
  86. package/src/fonts/inter-latin-ext-variable-wghtOnly-normal.woff2 +0 -0
  87. package/src/fonts/inter-latin-variable-wghtOnly-normal.woff2 +0 -0
  88. package/src/fonts/inter-vietnamese-variable-wghtOnly-normal.woff2 +0 -0
  89. package/src/img/bg-dark.svg +31 -0
  90. package/src/img/bg-light.svg +26 -0
  91. package/src/less/accordion.less +15 -0
  92. package/src/less/addons/_background-utilities.less +82 -0
  93. package/src/less/addons/_border.less +3 -0
  94. package/src/less/addons/_display-utilities.less +159 -0
  95. package/src/less/addons/_spacing-utilities.less +49 -0
  96. package/src/less/addons/_utilities.less +147 -0
  97. package/src/less/alerts.less +253 -0
  98. package/src/less/background.less +24 -0
  99. package/src/less/badge.less +85 -0
  100. package/src/less/border-radius.less +3 -0
  101. package/src/less/breadcrumbs.less +27 -0
  102. package/src/less/button-groups.less +424 -0
  103. package/src/less/buttons.less +714 -0
  104. package/src/less/chevron.less +39 -0
  105. package/src/less/circles.less +223 -0
  106. package/src/less/close.less +48 -0
  107. package/src/less/column-layout.less +167 -0
  108. package/src/less/components/_component-animations.less +43 -0
  109. package/src/less/core/_fonts.less +97 -0
  110. package/src/less/core/_scaffolding.less +473 -0
  111. package/src/less/core/_typography-utilities.less +269 -0
  112. package/src/less/core/_typography.less +794 -0
  113. package/src/less/currency-flags.less +41 -0
  114. package/src/less/decision.less +98 -0
  115. package/src/less/dropdowns.less +374 -0
  116. package/src/less/droppable.less +280 -0
  117. package/src/less/flex.less +113 -0
  118. package/src/less/footer.less +113 -0
  119. package/src/less/forms/bootstrap-forms.less +1227 -0
  120. package/src/less/forms/checkbox-radio.less +303 -0
  121. package/src/less/grid.less +187 -0
  122. package/src/less/input-groups.less +299 -0
  123. package/src/less/link-callout.less +17 -0
  124. package/src/less/list-group.less +260 -0
  125. package/src/less/loaders.less +91 -0
  126. package/src/less/media.less +61 -0
  127. package/src/less/mixins/_alerts.less +35 -0
  128. package/src/less/mixins/_arrows.less +52 -0
  129. package/src/less/mixins/_border-radius.less +11 -0
  130. package/src/less/mixins/_buttons.less +82 -0
  131. package/src/less/mixins/_center-block.less +7 -0
  132. package/src/less/mixins/_circle.less +11 -0
  133. package/src/less/mixins/_clearfix.less +23 -0
  134. package/src/less/mixins/_flex.less +105 -0
  135. package/src/less/mixins/_forms.less +128 -0
  136. package/src/less/mixins/_grid-framework.less +104 -0
  137. package/src/less/mixins/_grid.less +158 -0
  138. package/src/less/mixins/_hide-text.less +20 -0
  139. package/src/less/mixins/_links.less +7 -0
  140. package/src/less/mixins/_list-group.less +23 -0
  141. package/src/less/mixins/_logical-properties-IE-friendly.less +381 -0
  142. package/src/less/mixins/_logical-properties-modern-browsers.less +226 -0
  143. package/src/less/mixins/_logical-properties.less +5 -0
  144. package/src/less/mixins/_nav-vertical-align.less +10 -0
  145. package/src/less/mixins/_panels.less +23 -0
  146. package/src/less/mixins/_physical-properties.less +110 -0
  147. package/src/less/mixins/_reset-text.less +22 -0
  148. package/src/less/mixins/_sequence.less +203 -0
  149. package/src/less/mixins/_spacing.less +122 -0
  150. package/src/less/mixins/_tab-focus.less +5 -0
  151. package/src/less/mixins/_table-row.less +47 -0
  152. package/src/less/mixins/_text-emphasis.less +39 -0
  153. package/src/less/mixins/_theming.less +7 -0
  154. package/src/less/modals.less +239 -0
  155. package/src/less/navbar-base.less +1333 -0
  156. package/src/less/navbar.less +106 -0
  157. package/src/less/navs.less +341 -0
  158. package/src/less/neptune-addons.less +4 -0
  159. package/src/less/neptune-core.less +4 -0
  160. package/src/less/neptune-social-media.less +57 -0
  161. package/src/less/neptune.bundle.less +44 -0
  162. package/src/less/panels.less +410 -0
  163. package/src/less/popovers.less +381 -0
  164. package/src/less/process.less +395 -0
  165. package/src/less/progress-bars.less +70 -0
  166. package/src/less/ring.less +51 -0
  167. package/src/less/select.less +88 -0
  168. package/src/less/sequences.less +515 -0
  169. package/src/less/table.less +385 -0
  170. package/src/less/tick.less +37 -0
  171. package/src/less/tooltip.less +132 -0
  172. package/src/less/utilities.less +153 -0
  173. package/src/less/wells.less +37 -0
  174. package/src/props/custom-media.css +9 -0
  175. package/src/props/legacy-custom-props.css +69 -0
  176. package/src/props/neptune-tokens.css +11 -0
  177. package/src/variables/legacy-variables.less +1299 -0
  178. package/src/variables/neptune-tokens.less +12 -0
  179. package/src/variables/zindex.less +17 -0
  180. package/upgrades/scripts/2021-11-v11-v12.js +61 -0
@@ -0,0 +1,35 @@
1
+ @import (reference) "./_logical-properties.less";
2
+ @import (reference) "./_arrows.less";
3
+
4
+ .alert-variant(@background; @text-color; @text-hover) {
5
+ background-color: @background;
6
+ color: @text-color;
7
+
8
+ a,
9
+ b,
10
+ strong,
11
+ .close,
12
+ .alert-link,
13
+ .icon {
14
+ color: @text-color;
15
+ }
16
+
17
+ a:hover,
18
+ a:focus,
19
+ .alert-link:hover,
20
+ .alert-link:focus,
21
+ .close:hover,
22
+ .close:focus {
23
+ color: @text-hover;
24
+ }
25
+ }
26
+
27
+ .alert-arrow(@size: 10px) {
28
+ position: relative;
29
+ .arrow-pointer(@size);
30
+
31
+ &::before {
32
+ clip-path: polygon(0% 0%, 0 100%, 100% 0);
33
+ }
34
+ .arrow-positions(@size);
35
+ }
@@ -0,0 +1,52 @@
1
+ @import (reference) "../mixins/_logical-properties.less";
2
+
3
+ .arrow(@size: 10px) {
4
+ position: relative;
5
+ .arrow-pointer(@size);
6
+ .arrow-positions(@size);
7
+ }
8
+
9
+ .arrow-pointer(@size: 10px) {
10
+ &::before {
11
+ content: " ";
12
+ position: absolute;
13
+ display: block;
14
+ width: @size;
15
+ height: @size;
16
+ .left((2 * @size));
17
+
18
+ top: (@size / -2);
19
+ transform: rotate(45deg);
20
+ background-color: inherit;
21
+ }
22
+ }
23
+
24
+ .arrow-positions(@size: 10px) {
25
+ &.arrow-center::before {
26
+ .left(50%);
27
+
28
+ .margin(left, (@size / -2));
29
+ }
30
+
31
+ &.arrow-top::before {
32
+ top: (@size / -2);
33
+ bottom: auto;
34
+ }
35
+
36
+ &.arrow-left::before {
37
+ .left((2 * @size));
38
+
39
+ .right(auto);
40
+ }
41
+
42
+ &.arrow-right::before {
43
+ .left(auto);
44
+
45
+ .right((2 * @size));
46
+ }
47
+
48
+ &.arrow-bottom::before {
49
+ top: auto;
50
+ bottom: (@size / -2);
51
+ }
52
+ }
@@ -0,0 +1,11 @@
1
+ // Single side border-radius
2
+
3
+ .border-top-radius(@radius) {
4
+ border-top-right-radius: @radius;
5
+ border-top-left-radius: @radius;
6
+ }
7
+
8
+ .border-bottom-radius(@radius) {
9
+ border-bottom-right-radius: @radius;
10
+ border-bottom-left-radius: @radius;
11
+ }
@@ -0,0 +1,82 @@
1
+ // Mixins to generate button styles and state variations
2
+ .button-variant(
3
+ @color;
4
+ @color-hover;
5
+ @background;
6
+ @background-hover;
7
+ @background-active;
8
+ @border;
9
+ @border-hover;
10
+ @border-active;
11
+ @dropdown-background: @background;
12
+ @color-active: @color-hover) {
13
+ color: @color;
14
+ background-color: @background;
15
+ border-color: @border;
16
+ transition: color, background-color 0.15s ease-in-out;
17
+
18
+ &:not(.disabled, :disabled):hover {
19
+ color: @color-hover;
20
+ background-color: @background-hover;
21
+ border-color: @border-hover;
22
+ }
23
+
24
+ &:not(.disabled, :disabled):active,
25
+ &:not(.disabled, :disabled).active,
26
+ .open > .dropdown-toggle& {
27
+ color: @color-active;
28
+ background-color: @background-active;
29
+ border-color: @border-active;
30
+
31
+ &:not(.disabled, :disabled):hover {
32
+ color: @color-active;
33
+ background-color: @background-active;
34
+ border-color: @border-active;
35
+ }
36
+ }
37
+
38
+ &:not(.disabled, :disabled).active,
39
+ .open > .dropdown-toggle& {
40
+ background-image: none;
41
+ }
42
+
43
+ .badge {
44
+ color: @background;
45
+ background-color: @color;
46
+ }
47
+ }
48
+
49
+ .button-size(@padding; @font-size; @line-height; @border-radius: 9999px; @min-height: 0) {
50
+ padding: @padding;
51
+ font-size: @font-size;
52
+ line-height: @line-height;
53
+ border-radius: @border-radius;
54
+ // TODO: Remove min-height in The Future
55
+ min-height: @min-height;
56
+
57
+ .dropdown-menu {
58
+ > li > a {
59
+ font-size: @font-size;
60
+ line-height: @line-height;
61
+ }
62
+ }
63
+ }
64
+
65
+ // @TODO Deprecate
66
+ .button-outline(@color, @active, @inverse) {
67
+ .button-variant(
68
+ @color;
69
+ @inverse;
70
+ transparent;
71
+ @color;
72
+ @active;
73
+ @color;
74
+ @color;
75
+ @active;
76
+ #FFF
77
+ );
78
+ }
79
+
80
+ .btn-sm {
81
+ height: 32px;
82
+ }
@@ -0,0 +1,7 @@
1
+ // Center-align a block level element
2
+
3
+ .center-block() {
4
+ display: block;
5
+ margin-left: auto;
6
+ margin-right: auto;
7
+ }
@@ -0,0 +1,11 @@
1
+ .circle-variant(@diameter; @font-size; @icon-size) {
2
+ font-size: @font-size;
3
+ width: @diameter;
4
+ height: @diameter;
5
+ line-height: @diameter;
6
+
7
+ .icon {
8
+ font-size: @icon-size;
9
+ line-height: (@diameter - 2px);
10
+ }
11
+ }
@@ -0,0 +1,23 @@
1
+ // Clearfix
2
+ //
3
+ // For modern browsers
4
+ // 1. The space content is one way to avoid an Opera bug when the
5
+ // contenteditable attribute is included anywhere else in the document.
6
+ // Otherwise it causes space to appear at the top and bottom of elements
7
+ // that are clearfixed.
8
+ // 2. The use of `table` rather than `block` is only necessary if using
9
+ // `:before` to contain the top-margins of child elements.
10
+ //
11
+ // Source: http://nicolasgallagher.com/micro-clearfix-hack/
12
+
13
+ .clearfix() {
14
+ &::before,
15
+ &::after {
16
+ content: " "; // 1
17
+ display: table; // 2
18
+ }
19
+
20
+ &::after {
21
+ clear: both;
22
+ }
23
+ }
@@ -0,0 +1,105 @@
1
+ .flex-properties(@break-point) {
2
+ .d-flex@{break-point} {
3
+ display: flex;
4
+ }
5
+
6
+ .d-inline-flex@{break-point} {
7
+ display: inline-flex;
8
+ }
9
+
10
+ .flex-column@{break-point} {
11
+ flex-direction: column;
12
+ }
13
+
14
+ .flex-row@{break-point} {
15
+ flex-direction: row;
16
+ }
17
+
18
+ .justify-content-start@{break-point} {
19
+ justify-content: flex-start;
20
+ }
21
+
22
+ .justify-content-end@{break-point} {
23
+ justify-content: flex-end;
24
+ }
25
+
26
+ .justify-content-center@{break-point} {
27
+ justify-content: center;
28
+ }
29
+
30
+ .justify-content-between@{break-point} {
31
+ justify-content: space-between;
32
+ }
33
+
34
+ .justify-content-around@{break-point} {
35
+ justify-content: space-around;
36
+ }
37
+
38
+ .align-items-start@{break-point} {
39
+ align-items: flex-start;
40
+ }
41
+
42
+ .align-items-end@{break-point} {
43
+ align-items: flex-end;
44
+ }
45
+
46
+ .align-items-center@{break-point} {
47
+ align-items: center;
48
+ }
49
+
50
+ .align-items-baseline@{break-point} {
51
+ align-items: baseline;
52
+ }
53
+
54
+ .align-items-stretch@{break-point} {
55
+ align-items: stretch;
56
+ }
57
+
58
+ .align-self-start@{break-point} {
59
+ align-self: flex-start;
60
+ }
61
+
62
+ .align-self-end@{break-point} {
63
+ align-self: flex-end;
64
+ }
65
+
66
+ .align-self-center@{break-point} {
67
+ align-self: center;
68
+ }
69
+
70
+ .align-self-baseline@{break-point} {
71
+ align-self: baseline;
72
+ }
73
+
74
+ .align-self-stretch@{break-point} {
75
+ align-self: stretch;
76
+ }
77
+
78
+ .flex-nowrap@{break-point} {
79
+ flex-wrap: nowrap;
80
+ }
81
+
82
+ .flex-wrap@{break-point} {
83
+ flex-wrap: wrap;
84
+ }
85
+
86
+ .order-0@{break-point} {
87
+ order: 0;
88
+ }
89
+
90
+ .order-1@{break-point} {
91
+ order: 1;
92
+ }
93
+
94
+ .order-2@{break-point} {
95
+ order: 2;
96
+ }
97
+
98
+ .order-3@{break-point} {
99
+ order: 3;
100
+ }
101
+
102
+ .flex-grow-1@{break-point} {
103
+ flex-grow: 1;
104
+ }
105
+ }
@@ -0,0 +1,128 @@
1
+ @import (reference) "../core/_typography.less";
2
+
3
+ // Form validation states
4
+
5
+ .form-control-validation(@text-color; @border-color; @border-hover;) {
6
+ border-color: @border-color !important;
7
+
8
+ // Color the label and help text
9
+ .control-label,
10
+ .radio,
11
+ .checkbox,
12
+ .radio-inline,
13
+ .checkbox-inline,
14
+ &.radio label,
15
+ &.checkbox label,
16
+ &.radio-inline label,
17
+ &.checkbox-inline label,
18
+ .radio label,
19
+ .checkbox label,
20
+ .radio-inline label,
21
+ .checkbox-inline label,
22
+ .input-group-addon {
23
+ color: @text-color !important;
24
+ border-color: @border-color !important;
25
+ }
26
+
27
+ // Set the border and box shadow on specific inputs to match
28
+ .form-control,
29
+ .btn-input,
30
+ .btn-input:not(.disabled, :disabled):focus,
31
+ .btn-input:not(.disabled, :disabled):hover,
32
+ .input-group-addon,
33
+ .alert {
34
+ border-color: @border-color !important;
35
+ }
36
+
37
+ &:active,
38
+ &:focus,
39
+ &:focus-within {
40
+ .form-control,
41
+ &.radio label,
42
+ &.checkbox label,
43
+ .btn-input,
44
+ .input-group-addon,
45
+ .input-group .form-control:focus,
46
+ .alert {
47
+ border-color: @border-hover !important;
48
+ }
49
+ }
50
+
51
+ &:not(.disabled, :disabled):hover {
52
+ &.radio label,
53
+ &.checkbox label,
54
+ .btn-input,
55
+ .alert {
56
+ border-color: @border-hover !important;
57
+ }
58
+ }
59
+
60
+ // Optional feedback icon
61
+ .form-control-feedback {
62
+ color: @text-color;
63
+ }
64
+
65
+ .radio,
66
+ &.checkbox {
67
+ > label {
68
+ &:not(.disabled, :disabled) {
69
+ border-color: @border-color;
70
+ color: var(--color-content-primary);
71
+ }
72
+
73
+ &:not(.disabled, :disabled):hover,
74
+ &:focus-within {
75
+ border-color: @border-hover !important;
76
+
77
+ .tw-checkbox-button,
78
+ .tw-radio-button {
79
+ border-color: @border-hover !important;
80
+ }
81
+ }
82
+ }
83
+
84
+ .tw-checkbox-button,
85
+ .tw-radio-button {
86
+ border-color: @border-color;
87
+ }
88
+ }
89
+ }
90
+
91
+ // Form control focus state
92
+ //
93
+ // Generate a customized focus state and for any input with the specified color,
94
+ // which defaults to the `var(--color-interactive-secondary-active)` CSS custom prop.
95
+ //
96
+ // We highly encourage you to not customize the default value, but instead use
97
+ // this to tweak colors on an as-needed basis. This aesthetic change is based on
98
+ // WebKit's default styles, but applicable to a wider range of browsers. Its
99
+ // usability and accessibility should be taken into account with any change.
100
+ //
101
+ // Example usage: change the default blue border and shadow to white for better
102
+ // contrast against a dark gray background.
103
+ .form-control-focus(@color: var(--color-interactive-primary)) {
104
+ &:not(.disabled, :disabled):focus {
105
+ border-color: @color;
106
+ outline: 0;
107
+ }
108
+ }
109
+
110
+ // Form control sizing
111
+ //
112
+ // Relative text size, padding, and border-radii changes for form controls. For
113
+ // horizontal sizing, wrap controls in the predefined grid classes. `<select>`
114
+ // element gets special love because it's special, and that's a fact!
115
+ .input-size(@input-height; @input-padding; @border-radius) {
116
+ min-height: @input-height;
117
+ padding: @input-padding;
118
+ border-radius: @border-radius;
119
+
120
+ select& {
121
+ min-height: @input-height;
122
+ }
123
+
124
+ textarea&,
125
+ select[multiple]& {
126
+ height: auto;
127
+ }
128
+ }
@@ -0,0 +1,104 @@
1
+ @import (reference) "_logical-properties.less";
2
+
3
+ // Framework grid generation
4
+ //
5
+ // Used only by Bootstrap to generate the correct number of grid classes given
6
+ // any value of `@grid-columns`.
7
+
8
+ .make-grid-columns() {
9
+ // Common styles for all sizes of grid columns, widths 1-12
10
+ .col(@index) {
11
+ // initial
12
+ @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}, .col-xl-@{index}";
13
+ .col((@index + 1), @item);
14
+ }
15
+ .col(@index, @list) when (@index =< @grid-columns) {
16
+ // general; "=<" isn't a typo
17
+ @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}, .col-xl-@{index}";
18
+ .col((@index + 1), ~"@{list}, @{item}");
19
+ }
20
+ .col(@index, @list) when (@index > @grid-columns) {
21
+ // terminal
22
+ @{list} {
23
+ position: relative;
24
+ // Prevent columns from collapsing when empty
25
+ min-height: 1px;
26
+ // Inner gutter via padding
27
+ padding-left: ceil((@grid-gutter-width / 2));
28
+ padding-right: floor((@grid-gutter-width / 2));
29
+ }
30
+ }
31
+ .col(1); // kickstart it
32
+ }
33
+
34
+ .float-grid-columns(@class) {
35
+ .col(@index) {
36
+ // initial
37
+ @item: ~".col-@{class}-@{index}";
38
+ .col((@index + 1), @item);
39
+ }
40
+ .col(@index, @list) when (@index =< @grid-columns) {
41
+ // general
42
+ @item: ~".col-@{class}-@{index}";
43
+ .col((@index + 1), ~"@{list}, @{item}");
44
+ }
45
+ .col(@index, @list) when (@index > @grid-columns) {
46
+ // terminal
47
+ @{list} {
48
+ .float(left);
49
+ }
50
+ }
51
+ .col(1); // kickstart it
52
+ }
53
+
54
+ .calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {
55
+ .col-@{class}-@{index} {
56
+ width: percentage((@index / @grid-columns));
57
+
58
+ .row-equal-height & {
59
+ /* stylelint-disable-next-line function-calc-no-unspaced-operator */
60
+ width: calc(percentage((@index / @grid-columns)) ~"- 0.5px");
61
+ }
62
+ }
63
+ }
64
+ .calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {
65
+ .col-@{class}-push-@{index} {
66
+ .left(percentage((@index / @grid-columns)));
67
+ }
68
+ }
69
+ .calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {
70
+ .col-@{class}-push-0 {
71
+ .left(auto);
72
+ }
73
+ }
74
+ .calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {
75
+ .col-@{class}-pull-@{index} {
76
+ .right(percentage((@index / @grid-columns)));
77
+ }
78
+ }
79
+ .calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {
80
+ .col-@{class}-pull-0 {
81
+ .right(auto);
82
+ }
83
+ }
84
+ .calc-grid-column(@index, @class, @type) when (@type = offset) {
85
+ .col-@{class}-offset-@{index} {
86
+ .margin(left, percentage((@index / @grid-columns)));
87
+ }
88
+ }
89
+
90
+ // Basic looping in LESS
91
+ .loop-grid-columns(@index, @class, @type) when (@index >= 0) {
92
+ .calc-grid-column(@index, @class, @type);
93
+ // next iteration
94
+ .loop-grid-columns((@index - 1), @class, @type);
95
+ }
96
+
97
+ // Create grid for specific class
98
+ .make-grid(@class) {
99
+ .float-grid-columns(@class);
100
+ .loop-grid-columns(@grid-columns, @class, width);
101
+ .loop-grid-columns(@grid-columns, @class, pull);
102
+ .loop-grid-columns(@grid-columns, @class, push);
103
+ .loop-grid-columns(@grid-columns, @class, offset);
104
+ }