bootstrap 4.5.0 → 5.0.0.alpha3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/README.md +5 -2
  4. data/assets/javascripts/bootstrap-sprockets.js +12 -9
  5. data/assets/javascripts/bootstrap.js +1852 -1266
  6. data/assets/javascripts/bootstrap.min.js +3 -3
  7. data/assets/javascripts/bootstrap/alert.js +149 -69
  8. data/assets/javascripts/bootstrap/button.js +71 -141
  9. data/assets/javascripts/bootstrap/carousel.js +291 -192
  10. data/assets/javascripts/bootstrap/collapse.js +285 -161
  11. data/assets/javascripts/bootstrap/dom/data.js +81 -0
  12. data/assets/javascripts/bootstrap/dom/event-handler.js +307 -0
  13. data/assets/javascripts/bootstrap/dom/manipulator.js +85 -0
  14. data/assets/javascripts/bootstrap/dom/selector-engine.js +98 -0
  15. data/assets/javascripts/bootstrap/dropdown.js +240 -218
  16. data/assets/javascripts/bootstrap/modal.js +342 -234
  17. data/assets/javascripts/bootstrap/popover.js +82 -106
  18. data/assets/javascripts/bootstrap/scrollspy.js +154 -114
  19. data/assets/javascripts/bootstrap/tab.js +166 -80
  20. data/assets/javascripts/bootstrap/toast.js +171 -113
  21. data/assets/javascripts/bootstrap/tooltip.js +351 -219
  22. data/assets/stylesheets/_bootstrap-grid.scss +52 -16
  23. data/assets/stylesheets/_bootstrap-reboot.scss +5 -2
  24. data/assets/stylesheets/_bootstrap.scss +16 -9
  25. data/assets/stylesheets/bootstrap/_accordion.scss +125 -0
  26. data/assets/stylesheets/bootstrap/_alert.scss +15 -9
  27. data/assets/stylesheets/bootstrap/_badge.scss +2 -27
  28. data/assets/stylesheets/bootstrap/_breadcrumb.scss +3 -19
  29. data/assets/stylesheets/bootstrap/_button-group.scss +16 -40
  30. data/assets/stylesheets/bootstrap/_buttons.scss +27 -60
  31. data/assets/stylesheets/bootstrap/_card.scss +30 -97
  32. data/assets/stylesheets/bootstrap/_carousel.scss +30 -15
  33. data/assets/stylesheets/bootstrap/_close.scss +30 -30
  34. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  35. data/assets/stylesheets/bootstrap/_dropdown.scss +52 -8
  36. data/assets/stylesheets/bootstrap/_forms.scss +9 -347
  37. data/assets/stylesheets/bootstrap/_functions.scss +88 -23
  38. data/assets/stylesheets/bootstrap/_grid.scss +3 -58
  39. data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
  40. data/assets/stylesheets/bootstrap/_list-group.scss +14 -5
  41. data/assets/stylesheets/bootstrap/_mixins.scss +7 -13
  42. data/assets/stylesheets/bootstrap/_modal.scss +41 -47
  43. data/assets/stylesheets/bootstrap/_nav.scss +14 -8
  44. data/assets/stylesheets/bootstrap/_navbar.scss +43 -74
  45. data/assets/stylesheets/bootstrap/_pagination.scss +10 -20
  46. data/assets/stylesheets/bootstrap/_popover.scss +6 -6
  47. data/assets/stylesheets/bootstrap/_progress.scss +3 -5
  48. data/assets/stylesheets/bootstrap/_reboot.scss +310 -171
  49. data/assets/stylesheets/bootstrap/_root.scss +5 -9
  50. data/assets/stylesheets/bootstrap/_spinners.scss +13 -4
  51. data/assets/stylesheets/bootstrap/_tables.scss +80 -114
  52. data/assets/stylesheets/bootstrap/_toasts.scss +6 -2
  53. data/assets/stylesheets/bootstrap/_tooltip.scss +5 -5
  54. data/assets/stylesheets/bootstrap/_transitions.scss +0 -1
  55. data/assets/stylesheets/bootstrap/_type.scss +38 -59
  56. data/assets/stylesheets/bootstrap/_utilities.scss +545 -18
  57. data/assets/stylesheets/bootstrap/_variables.scss +653 -469
  58. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  59. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
  60. data/assets/stylesheets/bootstrap/forms/_form-check.scss +151 -0
  61. data/assets/stylesheets/bootstrap/forms/_form-control.scss +223 -0
  62. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  63. data/assets/stylesheets/bootstrap/forms/_form-select.scss +68 -0
  64. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  65. data/assets/stylesheets/bootstrap/forms/_input-group.scss +121 -0
  66. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  67. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  68. data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
  69. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  70. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  71. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  72. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  73. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  74. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  75. data/assets/stylesheets/bootstrap/mixins/_alert.scss +1 -5
  76. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +9 -9
  77. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  78. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +14 -10
  79. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +65 -47
  80. data/assets/stylesheets/bootstrap/mixins/_caret.scss +4 -4
  81. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  82. data/assets/stylesheets/bootstrap/mixins/_container.scss +11 -0
  83. data/assets/stylesheets/bootstrap/mixins/_forms.scss +17 -77
  84. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +9 -11
  85. data/assets/stylesheets/bootstrap/mixins/_grid.scss +84 -33
  86. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
  87. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +3 -2
  88. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  89. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +15 -8
  90. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  91. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  92. data/assets/stylesheets/bootstrap/mixins/_transition.scss +2 -2
  93. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +49 -0
  94. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +28 -0
  95. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  96. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +234 -126
  97. data/lib/bootstrap/version.rb +2 -2
  98. data/tasks/updater/js.rb +3 -3
  99. metadata +33 -41
  100. data/assets/javascripts/bootstrap/util.js +0 -192
  101. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  102. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -522
  103. data/assets/stylesheets/bootstrap/_input-group.scss +0 -192
  104. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  105. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  106. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  107. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -23
  108. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  109. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  110. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -81
  111. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  112. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
  113. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
  114. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  115. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  116. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
  117. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  118. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  119. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  120. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  121. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  122. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  123. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  124. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  125. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  126. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +0 -5
  127. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  128. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  129. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  130. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  131. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  132. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  133. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  134. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -71
  135. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
@@ -0,0 +1,91 @@
1
+ // Range
2
+ //
3
+ // Style range inputs the same across browsers. Vendor-specific rules for pseudo
4
+ // elements cannot be mixed. As such, there are no shared styles for focus or
5
+ // active states on prefixed selectors.
6
+
7
+ .form-range {
8
+ width: 100%;
9
+ height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);
10
+ padding: 0; // Need to reset padding
11
+ background-color: transparent;
12
+ appearance: none;
13
+
14
+ &:focus {
15
+ outline: none;
16
+
17
+ // Pseudo-elements must be split across multiple rulesets to have an effect.
18
+ // No box-shadow() mixin for focus accessibility.
19
+ &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }
20
+ &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }
21
+ }
22
+
23
+ &::-moz-focus-outer {
24
+ border: 0;
25
+ }
26
+
27
+ &::-webkit-slider-thumb {
28
+ width: $form-range-thumb-width;
29
+ height: $form-range-thumb-height;
30
+ margin-top: ($form-range-track-height - $form-range-thumb-height) / 2; // Webkit specific
31
+ @include gradient-bg($form-range-thumb-bg);
32
+ border: $form-range-thumb-border;
33
+ @include border-radius($form-range-thumb-border-radius);
34
+ @include box-shadow($form-range-thumb-box-shadow);
35
+ @include transition($form-range-thumb-transition);
36
+ appearance: none;
37
+
38
+ &:active {
39
+ @include gradient-bg($form-range-thumb-active-bg);
40
+ }
41
+ }
42
+
43
+ &::-webkit-slider-runnable-track {
44
+ width: $form-range-track-width;
45
+ height: $form-range-track-height;
46
+ color: transparent; // Why?
47
+ cursor: $form-range-track-cursor;
48
+ background-color: $form-range-track-bg;
49
+ border-color: transparent;
50
+ @include border-radius($form-range-track-border-radius);
51
+ @include box-shadow($form-range-track-box-shadow);
52
+ }
53
+
54
+ &::-moz-range-thumb {
55
+ width: $form-range-thumb-width;
56
+ height: $form-range-thumb-height;
57
+ @include gradient-bg($form-range-thumb-bg);
58
+ border: $form-range-thumb-border;
59
+ @include border-radius($form-range-thumb-border-radius);
60
+ @include box-shadow($form-range-thumb-box-shadow);
61
+ @include transition($form-range-thumb-transition);
62
+ appearance: none;
63
+
64
+ &:active {
65
+ @include gradient-bg($form-range-thumb-active-bg);
66
+ }
67
+ }
68
+
69
+ &::-moz-range-track {
70
+ width: $form-range-track-width;
71
+ height: $form-range-track-height;
72
+ color: transparent;
73
+ cursor: $form-range-track-cursor;
74
+ background-color: $form-range-track-bg;
75
+ border-color: transparent; // Firefox specific?
76
+ @include border-radius($form-range-track-border-radius);
77
+ @include box-shadow($form-range-track-box-shadow);
78
+ }
79
+
80
+ &:disabled {
81
+ pointer-events: none;
82
+
83
+ &::-webkit-slider-thumb {
84
+ background-color: $form-range-thumb-disabled-bg;
85
+ }
86
+
87
+ &::-moz-range-thumb {
88
+ background-color: $form-range-thumb-disabled-bg;
89
+ }
90
+ }
91
+ }
@@ -0,0 +1,68 @@
1
+ // Select
2
+ //
3
+ // Replaces the browser default select with a custom one, mostly pulled from
4
+ // https://primer.github.io/.
5
+
6
+ .form-select {
7
+ display: block;
8
+ width: 100%;
9
+ padding: $form-select-padding-y ($form-select-padding-x + $form-select-indicator-padding) $form-select-padding-y $form-select-padding-x;
10
+ font-family: $form-select-font-family;
11
+ @include font-size($form-select-font-size);
12
+ font-weight: $form-select-font-weight;
13
+ line-height: $form-select-line-height;
14
+ color: $form-select-color;
15
+ vertical-align: middle;
16
+ background-color: $form-select-bg;
17
+ background-image: escape-svg($form-select-indicator);
18
+ background-repeat: no-repeat;
19
+ background-position: $form-select-bg-position;
20
+ background-size: $form-select-bg-size;
21
+ border: $form-select-border-width solid $form-select-border-color;
22
+ @include border-radius($form-select-border-radius, 0);
23
+ @include box-shadow($form-select-box-shadow);
24
+ appearance: none;
25
+
26
+ &:focus {
27
+ border-color: $form-select-focus-border-color;
28
+ outline: 0;
29
+ @if $enable-shadows {
30
+ @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow);
31
+ } @else {
32
+ // Avoid using mixin so we can pass custom focus shadow properly
33
+ box-shadow: $form-select-focus-box-shadow;
34
+ }
35
+ }
36
+
37
+ &[multiple],
38
+ &[size]:not([size="1"]) {
39
+ padding-right: $form-select-padding-x;
40
+ background-image: none;
41
+ }
42
+
43
+ &:disabled {
44
+ color: $form-select-disabled-color;
45
+ background-color: $form-select-disabled-bg;
46
+ border-color: $form-select-disabled-border-color;
47
+ }
48
+
49
+ // Remove outline from select box in FF
50
+ &:-moz-focusring {
51
+ color: transparent;
52
+ text-shadow: 0 0 0 $form-select-color;
53
+ }
54
+ }
55
+
56
+ .form-select-sm {
57
+ padding-top: $form-select-padding-y-sm;
58
+ padding-bottom: $form-select-padding-y-sm;
59
+ padding-left: $form-select-padding-x-sm;
60
+ @include font-size($form-select-font-size-sm);
61
+ }
62
+
63
+ .form-select-lg {
64
+ padding-top: $form-select-padding-y-lg;
65
+ padding-bottom: $form-select-padding-y-lg;
66
+ padding-left: $form-select-padding-x-lg;
67
+ @include font-size($form-select-font-size-lg);
68
+ }
@@ -0,0 +1,11 @@
1
+ //
2
+ // Form text
3
+ //
4
+
5
+ .form-text {
6
+ margin-top: $form-text-margin-top;
7
+ @include font-size($form-text-font-size);
8
+ font-style: $form-text-font-style;
9
+ font-weight: $form-text-font-weight;
10
+ color: $form-text-color;
11
+ }
@@ -0,0 +1,121 @@
1
+ //
2
+ // Base styles
3
+ //
4
+
5
+ .input-group {
6
+ position: relative;
7
+ display: flex;
8
+ flex-wrap: wrap; // For form validation feedback
9
+ align-items: stretch;
10
+ width: 100%;
11
+
12
+ > .form-control,
13
+ > .form-select {
14
+ position: relative; // For focus state's z-index
15
+ flex: 1 1 auto;
16
+ width: 1%;
17
+ min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size
18
+ }
19
+
20
+ // Bring the "active" form control to the top of surrounding elements
21
+ > .form-control:focus,
22
+ > .form-select:focus {
23
+ z-index: 3;
24
+ }
25
+
26
+ // Ensure buttons are always above inputs for more visually pleasing borders.
27
+ // This isn't needed for `.input-group-text` since it shares the same border-color
28
+ // as our inputs.
29
+ .btn {
30
+ position: relative;
31
+ z-index: 2;
32
+
33
+ &:focus {
34
+ z-index: 3;
35
+ }
36
+ }
37
+ }
38
+
39
+
40
+ // Textual addons
41
+ //
42
+ // Serves as a catch-all element for any text or radio/checkbox input you wish
43
+ // to prepend or append to an input.
44
+
45
+ .input-group-text {
46
+ display: flex;
47
+ align-items: center;
48
+ padding: $input-group-addon-padding-y $input-group-addon-padding-x;
49
+ @include font-size($input-font-size); // Match inputs
50
+ font-weight: $input-group-addon-font-weight;
51
+ line-height: $input-line-height;
52
+ color: $input-group-addon-color;
53
+ text-align: center;
54
+ white-space: nowrap;
55
+ background-color: $input-group-addon-bg;
56
+ border: $input-border-width solid $input-group-addon-border-color;
57
+ @include border-radius($input-border-radius);
58
+ }
59
+
60
+
61
+ // Sizing
62
+ //
63
+ // Remix the default form control sizing classes into new ones for easier
64
+ // manipulation.
65
+
66
+ .input-group-lg > .form-control,
67
+ .input-group-lg > .form-select,
68
+ .input-group-lg > .input-group-text,
69
+ .input-group-lg > .btn {
70
+ padding: $input-padding-y-lg $input-padding-x-lg;
71
+ @include font-size($input-font-size-lg);
72
+ @include border-radius($input-border-radius-lg);
73
+ }
74
+
75
+ .input-group-sm > .form-control,
76
+ .input-group-sm > .form-select,
77
+ .input-group-sm > .input-group-text,
78
+ .input-group-sm > .btn {
79
+ padding: $input-padding-y-sm $input-padding-x-sm;
80
+ @include font-size($input-font-size-sm);
81
+ @include border-radius($input-border-radius-sm);
82
+ }
83
+
84
+ .input-group-lg > .form-select,
85
+ .input-group-sm > .form-select {
86
+ padding-right: $form-select-padding-x + $form-select-indicator-padding;
87
+ }
88
+
89
+
90
+ // Rounded corners
91
+ //
92
+ // These rulesets must come after the sizing ones to properly override sm and lg
93
+ // border-radius values when extending. They're more specific than we'd like
94
+ // with the `.input-group >` part, but without it, we cannot override the sizing.
95
+
96
+ // stylelint-disable-next-line no-duplicate-selectors
97
+ .input-group {
98
+ &:not(.has-validation) {
99
+ > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),
100
+ > .dropdown-toggle:nth-last-child(n + 3) {
101
+ @include border-right-radius(0);
102
+ }
103
+ }
104
+
105
+ &.has-validation {
106
+ > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),
107
+ > .dropdown-toggle:nth-last-child(n + 4) {
108
+ @include border-right-radius(0);
109
+ }
110
+ }
111
+
112
+ $validation-messages: "";
113
+ @each $state in map-keys($form-validation-states) {
114
+ $validation-messages: $validation-messages + ":not(." + unquote($state) + "-tooltip)" + ":not(." + unquote($state) + "-feedback)";
115
+ }
116
+
117
+ > :not(:first-child):not(.dropdown-menu)#{$validation-messages} {
118
+ margin-left: -$input-border-width;
119
+ @include border-left-radius(0);
120
+ }
121
+ }
@@ -0,0 +1,36 @@
1
+ //
2
+ // Labels
3
+ //
4
+
5
+ .form-label {
6
+ margin-bottom: $form-label-margin-bottom;
7
+ @include font-size($form-label-font-size);
8
+ font-style: $form-label-font-style;
9
+ font-weight: $form-label-font-weight;
10
+ color: $form-label-color;
11
+ }
12
+
13
+ // For use with horizontal and inline forms, when you need the label (or legend)
14
+ // text to align with the form controls.
15
+ .col-form-label {
16
+ padding-top: add($input-padding-y, $input-border-width);
17
+ padding-bottom: add($input-padding-y, $input-border-width);
18
+ margin-bottom: 0; // Override the `<legend>` default
19
+ @include font-size(inherit); // Override the `<legend>` default
20
+ font-style: $form-label-font-style;
21
+ font-weight: $form-label-font-weight;
22
+ line-height: $input-line-height;
23
+ color: $form-label-color;
24
+ }
25
+
26
+ .col-form-label-lg {
27
+ padding-top: add($input-padding-y-lg, $input-border-width);
28
+ padding-bottom: add($input-padding-y-lg, $input-border-width);
29
+ @include font-size($input-font-size-lg);
30
+ }
31
+
32
+ .col-form-label-sm {
33
+ padding-top: add($input-padding-y-sm, $input-border-width);
34
+ padding-bottom: add($input-padding-y-sm, $input-border-width);
35
+ @include font-size($input-font-size-sm);
36
+ }
@@ -0,0 +1,12 @@
1
+ // Form validation
2
+ //
3
+ // Provide feedback to users when form field values are valid or invalid. Works
4
+ // primarily for client-side validation via scoped `:invalid` and `:valid`
5
+ // pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for
6
+ // server-side validation.
7
+
8
+ // scss-docs-start form-validation-states-loop
9
+ @each $state, $data in $form-validation-states {
10
+ @include form-validation-state($state, map-get($data, color), map-get($data, icon));
11
+ }
12
+ // scss-docs-end form-validation-states-loop
@@ -0,0 +1,12 @@
1
+ @each $color, $value in $theme-colors {
2
+ .link-#{$color} {
3
+ color: $value;
4
+
5
+ @if $link-shade-percentage != 0 {
6
+ &:hover,
7
+ &:focus {
8
+ color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage));
9
+ }
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,30 @@
1
+ // Shorthand
2
+
3
+ .fixed-top {
4
+ position: fixed;
5
+ top: 0;
6
+ right: 0;
7
+ left: 0;
8
+ z-index: $zindex-fixed;
9
+ }
10
+
11
+ .fixed-bottom {
12
+ position: fixed;
13
+ right: 0;
14
+ bottom: 0;
15
+ left: 0;
16
+ z-index: $zindex-fixed;
17
+ }
18
+
19
+ // Responsive sticky top
20
+ @each $breakpoint in map-keys($grid-breakpoints) {
21
+ @include media-breakpoint-up($breakpoint) {
22
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
23
+
24
+ .sticky#{$infix}-top {
25
+ position: sticky;
26
+ top: 0;
27
+ z-index: $zindex-sticky;
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,26 @@
1
+ // Credit: Nicolas Gallagher and SUIT CSS.
2
+
3
+ .ratio {
4
+ position: relative;
5
+ width: 100%;
6
+
7
+ &::before {
8
+ display: block;
9
+ padding-top: var(--aspect-ratio);
10
+ content: "";
11
+ }
12
+
13
+ > * {
14
+ position: absolute;
15
+ top: 0;
16
+ left: 0;
17
+ width: 100%;
18
+ height: 100%;
19
+ }
20
+ }
21
+
22
+ @each $key, $ratio in $aspect-ratios {
23
+ .ratio-#{$key} {
24
+ --aspect-ratio: #{$ratio};
25
+ }
26
+ }
@@ -0,0 +1,15 @@
1
+ //
2
+ // Stretched link
3
+ //
4
+
5
+ .stretched-link {
6
+ &::#{$stretched-link-pseudo-element} {
7
+ position: absolute;
8
+ top: 0;
9
+ right: 0;
10
+ bottom: 0;
11
+ left: 0;
12
+ z-index: $stretched-link-z-index;
13
+ content: "";
14
+ }
15
+ }
@@ -0,0 +1,7 @@
1
+ //
2
+ // Text truncation
3
+ //
4
+
5
+ .text-truncate {
6
+ @include text-truncate();
7
+ }
@@ -0,0 +1,8 @@
1
+ //
2
+ // Visually hidden
3
+ //
4
+
5
+ .visually-hidden,
6
+ .visually-hidden-focusable:not(:focus) {
7
+ @include visually-hidden();
8
+ }