bootstrap 4.3.1 → 4.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +15 -1
  3. data/CHANGELOG.md +2 -14
  4. data/README.md +1 -1
  5. data/assets/javascripts/bootstrap/alert.js +26 -35
  6. data/assets/javascripts/bootstrap/button.js +93 -52
  7. data/assets/javascripts/bootstrap/carousel.js +122 -120
  8. data/assets/javascripts/bootstrap/collapse.js +75 -71
  9. data/assets/javascripts/bootstrap/dropdown.js +143 -140
  10. data/assets/javascripts/bootstrap/modal.js +165 -134
  11. data/assets/javascripts/bootstrap/popover.js +47 -39
  12. data/assets/javascripts/bootstrap/scrollspy.js +71 -71
  13. data/assets/javascripts/bootstrap/tab.js +51 -60
  14. data/assets/javascripts/bootstrap/toast.js +84 -72
  15. data/assets/javascripts/bootstrap/tooltip.js +141 -131
  16. data/assets/javascripts/bootstrap/util.js +28 -7
  17. data/assets/javascripts/bootstrap-sprockets.js +6 -6
  18. data/assets/javascripts/bootstrap.js +811 -826
  19. data/assets/javascripts/bootstrap.min.js +3 -3
  20. data/assets/stylesheets/_bootstrap-grid.scss +3 -3
  21. data/assets/stylesheets/_bootstrap-reboot.scss +3 -3
  22. data/assets/stylesheets/_bootstrap.scss +3 -3
  23. data/assets/stylesheets/bootstrap/_badge.scss +1 -1
  24. data/assets/stylesheets/bootstrap/_breadcrumb.scss +4 -1
  25. data/assets/stylesheets/bootstrap/_button-group.scss +1 -1
  26. data/assets/stylesheets/bootstrap/_buttons.scss +13 -8
  27. data/assets/stylesheets/bootstrap/_card.scss +28 -35
  28. data/assets/stylesheets/bootstrap/_carousel.scss +6 -6
  29. data/assets/stylesheets/bootstrap/_close.scss +2 -3
  30. data/assets/stylesheets/bootstrap/_code.scss +1 -1
  31. data/assets/stylesheets/bootstrap/_custom-forms.scss +24 -9
  32. data/assets/stylesheets/bootstrap/_dropdown.scss +5 -4
  33. data/assets/stylesheets/bootstrap/_forms.scss +26 -9
  34. data/assets/stylesheets/bootstrap/_functions.scss +60 -5
  35. data/assets/stylesheets/bootstrap/_grid.scss +33 -8
  36. data/assets/stylesheets/bootstrap/_images.scss +2 -2
  37. data/assets/stylesheets/bootstrap/_input-group.scss +1 -2
  38. data/assets/stylesheets/bootstrap/_list-group.scss +36 -31
  39. data/assets/stylesheets/bootstrap/_mixins.scss +3 -3
  40. data/assets/stylesheets/bootstrap/_modal.scss +28 -16
  41. data/assets/stylesheets/bootstrap/_nav.scss +4 -3
  42. data/assets/stylesheets/bootstrap/_navbar.scss +45 -15
  43. data/assets/stylesheets/bootstrap/_pagination.scss +3 -2
  44. data/assets/stylesheets/bootstrap/_popover.scss +8 -9
  45. data/assets/stylesheets/bootstrap/_print.scss +2 -2
  46. data/assets/stylesheets/bootstrap/_progress.scss +6 -2
  47. data/assets/stylesheets/bootstrap/_reboot.scss +24 -27
  48. data/assets/stylesheets/bootstrap/_root.scss +1 -0
  49. data/assets/stylesheets/bootstrap/_spinners.scss +1 -0
  50. data/assets/stylesheets/bootstrap/_tables.scss +3 -3
  51. data/assets/stylesheets/bootstrap/_type.scss +2 -2
  52. data/assets/stylesheets/bootstrap/_utilities.scss +2 -1
  53. data/assets/stylesheets/bootstrap/_variables.scss +46 -22
  54. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +5 -3
  55. data/assets/stylesheets/bootstrap/mixins/_badge.scss +1 -1
  56. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +26 -13
  57. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +11 -8
  58. data/assets/stylesheets/bootstrap/mixins/_caret.scss +8 -8
  59. data/assets/stylesheets/bootstrap/mixins/_float.scss +3 -3
  60. data/assets/stylesheets/bootstrap/mixins/_forms.scss +34 -49
  61. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +30 -15
  62. data/assets/stylesheets/bootstrap/mixins/_grid.scss +18 -0
  63. data/assets/stylesheets/bootstrap/mixins/_hover.scss +4 -4
  64. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -1
  65. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +1 -1
  66. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  67. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +2 -1
  68. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
  69. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +3 -2
  70. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +1 -1
  71. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +3 -2
  72. data/assets/stylesheets/bootstrap/mixins/_transition.scss +17 -7
  73. data/assets/stylesheets/bootstrap/utilities/_background.scss +2 -2
  74. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +5 -0
  75. data/assets/stylesheets/bootstrap/utilities/_text.scss +3 -4
  76. data/bootstrap.gemspec +1 -1
  77. data/lib/bootstrap/version.rb +2 -2
  78. data/tasks/updater/network.rb +2 -2
  79. data/test/dummy_rails/app/assets/config/manifest.js +3 -0
  80. data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
  81. data/test/gemfiles/rails_6_0.gemfile +7 -0
  82. data/test/support/dummy_rails_integration.rb +3 -1
  83. data/test/test_helper.rb +18 -13
  84. metadata +11 -5
@@ -101,6 +101,15 @@ $yiq-contrasted-threshold: 150 !default;
101
101
  $yiq-text-dark: $gray-900 !default;
102
102
  $yiq-text-light: $white !default;
103
103
 
104
+ // Characters which are escaped by the escape-svg function
105
+ $escaped-characters: (
106
+ ("<","%3c"),
107
+ (">","%3e"),
108
+ ("#","%23"),
109
+ ("(","%28"),
110
+ (")","%29"),
111
+ ) !default;
112
+
104
113
 
105
114
  // Options
106
115
  //
@@ -220,6 +229,7 @@ $container-max-widths: (
220
229
 
221
230
  $grid-columns: 12 !default;
222
231
  $grid-gutter-width: 30px !default;
232
+ $grid-row-columns: 6 !default;
223
233
 
224
234
 
225
235
  // Components
@@ -366,7 +376,6 @@ $table-dark-accent-bg: rgba($white, .05) !default;
366
376
  $table-dark-hover-color: $table-dark-color !default;
367
377
  $table-dark-hover-bg: rgba($white, .075) !default;
368
378
  $table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;
369
- $table-dark-color: $white !default;
370
379
 
371
380
  $table-striped-order: odd !default;
372
381
 
@@ -412,6 +421,7 @@ $btn-padding-x: $input-btn-padding-x !default;
412
421
  $btn-font-family: $input-btn-font-family !default;
413
422
  $btn-font-size: $input-btn-font-size !default;
414
423
  $btn-line-height: $input-btn-line-height !default;
424
+ $btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping
415
425
 
416
426
  $btn-padding-y-sm: $input-btn-padding-y-sm !default;
417
427
  $btn-padding-x-sm: $input-btn-padding-x-sm !default;
@@ -488,13 +498,13 @@ $input-plaintext-color: $body-color !default;
488
498
 
489
499
  $input-height-border: $input-border-width * 2 !default;
490
500
 
491
- $input-height-inner: calc(#{$input-line-height * 1em} + #{$input-padding-y * 2}) !default;
492
- $input-height-inner-half: calc(#{$input-line-height * .5em} + #{$input-padding-y}) !default;
493
- $input-height-inner-quarter: calc(#{$input-line-height * .25em} + #{$input-padding-y / 2}) !default;
501
+ $input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;
502
+ $input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;
503
+ $input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y / 2) !default;
494
504
 
495
- $input-height: calc(#{$input-line-height * 1em} + #{$input-padding-y * 2} + #{$input-height-border}) !default;
496
- $input-height-sm: calc(#{$input-line-height-sm * 1em} + #{$input-btn-padding-y-sm * 2} + #{$input-height-border}) !default;
497
- $input-height-lg: calc(#{$input-line-height-lg * 1em} + #{$input-btn-padding-y-lg * 2} + #{$input-height-border}) !default;
505
+ $input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;
506
+ $input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;
507
+ $input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;
498
508
 
499
509
  $input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
500
510
 
@@ -518,6 +528,7 @@ $custom-forms-transition: background-color .15s ease-in-out, borde
518
528
 
519
529
  $custom-control-gutter: .5rem !default;
520
530
  $custom-control-spacer-x: 1rem !default;
531
+ $custom-control-cursor: null !default;
521
532
 
522
533
  $custom-control-indicator-size: 1rem !default;
523
534
  $custom-control-indicator-bg: $input-bg !default;
@@ -527,6 +538,8 @@ $custom-control-indicator-box-shadow: $input-box-shadow !default;
527
538
  $custom-control-indicator-border-color: $gray-500 !default;
528
539
  $custom-control-indicator-border-width: $input-border-width !default;
529
540
 
541
+ $custom-control-label-color: null !default;
542
+
530
543
  $custom-control-indicator-disabled-bg: $input-disabled-bg !default;
531
544
  $custom-control-label-disabled-color: $gray-600 !default;
532
545
 
@@ -545,20 +558,20 @@ $custom-control-indicator-active-box-shadow: none !default;
545
558
  $custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;
546
559
 
547
560
  $custom-checkbox-indicator-border-radius: $border-radius !default;
548
- $custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e"), "#", "%23") !default;
561
+ $custom-checkbox-indicator-icon-checked: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/></svg>") !default;
549
562
 
550
563
  $custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;
551
564
  $custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;
552
- $custom-checkbox-indicator-icon-indeterminate: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3e%3c/svg%3e"), "#", "%23") !default;
565
+ $custom-checkbox-indicator-icon-indeterminate: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'><path stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/></svg>") !default;
553
566
  $custom-checkbox-indicator-indeterminate-box-shadow: none !default;
554
567
  $custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;
555
568
 
556
569
  $custom-radio-indicator-border-radius: 50% !default;
557
- $custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3e%3c/svg%3e"), "#", "%23") !default;
570
+ $custom-radio-indicator-icon-checked: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'><circle r='3' fill='#{$custom-control-indicator-checked-color}'/></svg>") !default;
558
571
 
559
572
  $custom-switch-width: $custom-control-indicator-size * 1.75 !default;
560
573
  $custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;
561
- $custom-switch-indicator-size: calc(#{$custom-control-indicator-size} - #{$custom-control-indicator-border-width * 4}) !default;
574
+ $custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default;
562
575
 
563
576
  $custom-select-padding-y: $input-padding-y !default;
564
577
  $custom-select-padding-x: $input-padding-x !default;
@@ -574,10 +587,10 @@ $custom-select-bg: $input-bg !default;
574
587
  $custom-select-disabled-bg: $gray-200 !default;
575
588
  $custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions
576
589
  $custom-select-indicator-color: $gray-800 !default;
577
- $custom-select-indicator: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e"), "#", "%23") !default;
578
- $custom-select-background: $custom-select-indicator no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)
590
+ $custom-select-indicator: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'><path fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/></svg>") !default;
591
+ $custom-select-background: escape-svg($custom-select-indicator) no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)
579
592
 
580
- $custom-select-feedback-icon-padding-right: calc((1em + #{2 * $custom-select-padding-y}) * 3 / 4 + #{$custom-select-padding-x + $custom-select-indicator-padding}) !default;
593
+ $custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;
581
594
  $custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;
582
595
  $custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;
583
596
 
@@ -650,9 +663,9 @@ $form-feedback-valid-color: theme-color("success") !default;
650
663
  $form-feedback-invalid-color: theme-color("danger") !default;
651
664
 
652
665
  $form-feedback-icon-valid-color: $form-feedback-valid-color !default;
653
- $form-feedback-icon-valid: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"), "#", "%23") !default;
666
+ $form-feedback-icon-valid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>") !default;
654
667
  $form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;
655
- $form-feedback-icon-invalid: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$form-feedback-icon-invalid-color}' viewBox='-2 -2 7 7'%3e%3cpath stroke='#{$form-feedback-icon-invalid-color}' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E"), "#", "%23") !default;
668
+ $form-feedback-icon-invalid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}' viewBox='0 0 12 12'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>") !default;
656
669
 
657
670
  $form-validation-states: () !default;
658
671
  // stylelint-disable-next-line scss/dollar-variable-default
@@ -728,14 +741,14 @@ $navbar-dark-color: rgba($white, .5) !default;
728
741
  $navbar-dark-hover-color: rgba($white, .75) !default;
729
742
  $navbar-dark-active-color: $white !default;
730
743
  $navbar-dark-disabled-color: rgba($white, .25) !default;
731
- $navbar-dark-toggler-icon-bg: str-replace(url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"), "#", "%23") !default;
744
+ $navbar-dark-toggler-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>") !default;
732
745
  $navbar-dark-toggler-border-color: rgba($white, .1) !default;
733
746
 
734
747
  $navbar-light-color: rgba($black, .5) !default;
735
748
  $navbar-light-hover-color: rgba($black, .7) !default;
736
749
  $navbar-light-active-color: rgba($black, .9) !default;
737
750
  $navbar-light-disabled-color: rgba($black, .3) !default;
738
- $navbar-light-toggler-icon-bg: str-replace(url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"), "#", "%23") !default;
751
+ $navbar-light-toggler-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>") !default;
739
752
  $navbar-light-toggler-border-color: rgba($black, .1) !default;
740
753
 
741
754
  $navbar-light-brand-color: $navbar-light-active-color !default;
@@ -757,7 +770,7 @@ $dropdown-bg: $white !default;
757
770
  $dropdown-border-color: rgba($black, .15) !default;
758
771
  $dropdown-border-radius: $border-radius !default;
759
772
  $dropdown-border-width: $border-width !default;
760
- $dropdown-inner-border-radius: calc(#{$dropdown-border-radius} - #{$dropdown-border-width}) !default;
773
+ $dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;
761
774
  $dropdown-divider-bg: $gray-200 !default;
762
775
  $dropdown-divider-margin-y: $nav-divider-margin-y !default;
763
776
  $dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;
@@ -775,6 +788,7 @@ $dropdown-item-padding-y: .25rem !default;
775
788
  $dropdown-item-padding-x: 1.5rem !default;
776
789
 
777
790
  $dropdown-header-color: $gray-600 !default;
791
+ $dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default;
778
792
 
779
793
 
780
794
  // Pagination
@@ -822,9 +836,10 @@ $card-spacer-x: 1.25rem !default;
822
836
  $card-border-width: $border-width !default;
823
837
  $card-border-radius: $border-radius !default;
824
838
  $card-border-color: rgba($black, .125) !default;
825
- $card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;
839
+ $card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;
826
840
  $card-cap-bg: rgba($black, .03) !default;
827
841
  $card-cap-color: null !default;
842
+ $card-height: null !default;
828
843
  $card-color: null !default;
829
844
  $card-bg: $white !default;
830
845
 
@@ -871,6 +886,7 @@ $popover-max-width: 276px !default;
871
886
  $popover-border-width: $border-width !default;
872
887
  $popover-border-color: rgba($black, .2) !default;
873
888
  $popover-border-radius: $border-radius-lg !default;
889
+ $popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;
874
890
  $popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;
875
891
 
876
892
  $popover-header-bg: darken($popover-bg, 3%) !default;
@@ -929,6 +945,9 @@ $badge-pill-border-radius: 10rem !default;
929
945
  // Padding applied to the modal body
930
946
  $modal-inner-padding: 1rem !default;
931
947
 
948
+ // Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding
949
+ $modal-footer-margin-between: .5rem !default;
950
+
932
951
  $modal-dialog-margin: .5rem !default;
933
952
  $modal-dialog-margin-y-sm-up: 1.75rem !default;
934
953
 
@@ -939,6 +958,7 @@ $modal-content-bg: $white !default;
939
958
  $modal-content-border-color: rgba($black, .2) !default;
940
959
  $modal-content-border-width: $border-width !default;
941
960
  $modal-content-border-radius: $border-radius-lg !default;
961
+ $modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;
942
962
  $modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;
943
963
  $modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;
944
964
 
@@ -960,6 +980,7 @@ $modal-sm: 300px !default;
960
980
  $modal-fade-transform: translate(0, -50px) !default;
961
981
  $modal-show-transform: none !default;
962
982
  $modal-transition: transform .3s ease-out !default;
983
+ $modal-scale-transform: scale(1.02) !default;
963
984
 
964
985
 
965
986
  // Alerts
@@ -1035,6 +1056,8 @@ $figure-caption-color: $gray-600 !default;
1035
1056
 
1036
1057
  // Breadcrumbs
1037
1058
 
1059
+ $breadcrumb-font-size: null !default;
1060
+
1038
1061
  $breadcrumb-padding-y: .75rem !default;
1039
1062
  $breadcrumb-padding-x: 1rem !default;
1040
1063
  $breadcrumb-item-padding: .5rem !default;
@@ -1069,8 +1092,8 @@ $carousel-caption-color: $white !default;
1069
1092
 
1070
1093
  $carousel-control-icon-width: 20px !default;
1071
1094
 
1072
- $carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e"), "#", "%23") !default;
1073
- $carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e"), "#", "%23") !default;
1095
+ $carousel-control-prev-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/></svg>") !default;
1096
+ $carousel-control-next-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/></svg>") !default;
1074
1097
 
1075
1098
  $carousel-transition-duration: .6s !default;
1076
1099
  $carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)
@@ -1115,6 +1138,7 @@ $pre-scrollable-max-height: 340px !default;
1115
1138
  $displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;
1116
1139
  $overflows: auto, hidden !default;
1117
1140
  $positions: static, relative, absolute, fixed, sticky !default;
1141
+ $user-selects: all, auto, none !default;
1118
1142
 
1119
1143
 
1120
1144
  // Printing
@@ -2,20 +2,22 @@
2
2
 
3
3
  // Contextual backgrounds
4
4
 
5
- @mixin bg-variant($parent, $color) {
5
+ @mixin bg-variant($parent, $color, $ignore-warning: false) {
6
6
  #{$parent} {
7
7
  background-color: $color !important;
8
8
  }
9
9
  a#{$parent},
10
10
  button#{$parent} {
11
- @include hover-focus {
11
+ @include hover-focus() {
12
12
  background-color: darken($color, 10%) !important;
13
13
  }
14
14
  }
15
+ @include deprecate("The `bg-variant` mixin", "v4.4.0", "v5", $ignore-warning);
15
16
  }
16
17
 
17
- @mixin bg-gradient-variant($parent, $color) {
18
+ @mixin bg-gradient-variant($parent, $color, $ignore-warning: false) {
18
19
  #{$parent} {
19
20
  background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;
20
21
  }
22
+ @include deprecate("The `bg-gradient-variant` mixin", "v4.5.0", "v5", $ignore-warning);
21
23
  }
@@ -3,7 +3,7 @@
3
3
  background-color: $bg;
4
4
 
5
5
  @at-root a#{&} {
6
- @include hover-focus {
6
+ @include hover-focus() {
7
7
  color: color-yiq($bg);
8
8
  background-color: darken($bg, 10%);
9
9
  }
@@ -1,9 +1,22 @@
1
1
  // stylelint-disable property-blacklist
2
2
  // Single side border-radius
3
3
 
4
+ // Helper function to replace negative values with 0
5
+ @function valid-radius($radius) {
6
+ $return: ();
7
+ @each $value in $radius {
8
+ @if type-of($value) == number {
9
+ $return: append($return, max($value, 0));
10
+ } @else {
11
+ $return: append($return, $value);
12
+ }
13
+ }
14
+ @return $return;
15
+ }
16
+
4
17
  @mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {
5
18
  @if $enable-rounded {
6
- border-radius: $radius;
19
+ border-radius: valid-radius($radius);
7
20
  }
8
21
  @else if $fallback-border-radius != false {
9
22
  border-radius: $fallback-border-radius;
@@ -12,52 +25,52 @@
12
25
 
13
26
  @mixin border-top-radius($radius) {
14
27
  @if $enable-rounded {
15
- border-top-left-radius: $radius;
16
- border-top-right-radius: $radius;
28
+ border-top-left-radius: valid-radius($radius);
29
+ border-top-right-radius: valid-radius($radius);
17
30
  }
18
31
  }
19
32
 
20
33
  @mixin border-right-radius($radius) {
21
34
  @if $enable-rounded {
22
- border-top-right-radius: $radius;
23
- border-bottom-right-radius: $radius;
35
+ border-top-right-radius: valid-radius($radius);
36
+ border-bottom-right-radius: valid-radius($radius);
24
37
  }
25
38
  }
26
39
 
27
40
  @mixin border-bottom-radius($radius) {
28
41
  @if $enable-rounded {
29
- border-bottom-right-radius: $radius;
30
- border-bottom-left-radius: $radius;
42
+ border-bottom-right-radius: valid-radius($radius);
43
+ border-bottom-left-radius: valid-radius($radius);
31
44
  }
32
45
  }
33
46
 
34
47
  @mixin border-left-radius($radius) {
35
48
  @if $enable-rounded {
36
- border-top-left-radius: $radius;
37
- border-bottom-left-radius: $radius;
49
+ border-top-left-radius: valid-radius($radius);
50
+ border-bottom-left-radius: valid-radius($radius);
38
51
  }
39
52
  }
40
53
 
41
54
  @mixin border-top-left-radius($radius) {
42
55
  @if $enable-rounded {
43
- border-top-left-radius: $radius;
56
+ border-top-left-radius: valid-radius($radius);
44
57
  }
45
58
  }
46
59
 
47
60
  @mixin border-top-right-radius($radius) {
48
61
  @if $enable-rounded {
49
- border-top-right-radius: $radius;
62
+ border-top-right-radius: valid-radius($radius);
50
63
  }
51
64
  }
52
65
 
53
66
  @mixin border-bottom-right-radius($radius) {
54
67
  @if $enable-rounded {
55
- border-bottom-right-radius: $radius;
68
+ border-bottom-right-radius: valid-radius($radius);
56
69
  }
57
70
  }
58
71
 
59
72
  @mixin border-bottom-left-radius($radius) {
60
73
  @if $enable-rounded {
61
- border-bottom-left-radius: $radius;
74
+ border-bottom-left-radius: valid-radius($radius);
62
75
  }
63
76
  }
@@ -9,7 +9,7 @@
9
9
  border-color: $border;
10
10
  @include box-shadow($btn-box-shadow);
11
11
 
12
- @include hover {
12
+ @include hover() {
13
13
  color: color-yiq($hover-background);
14
14
  @include gradient-bg($hover-background);
15
15
  border-color: $hover-border;
@@ -17,10 +17,13 @@
17
17
 
18
18
  &:focus,
19
19
  &.focus {
20
- // Avoid using mixin so we can pass custom focus shadow properly
20
+ color: color-yiq($hover-background);
21
+ @include gradient-bg($hover-background);
22
+ border-color: $hover-border;
21
23
  @if $enable-shadows {
22
- box-shadow: $btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
24
+ @include box-shadow($btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5));
23
25
  } @else {
26
+ // Avoid using mixin so we can pass custom focus shadow properly
24
27
  box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
25
28
  }
26
29
  }
@@ -48,10 +51,10 @@
48
51
  border-color: $active-border;
49
52
 
50
53
  &:focus {
51
- // Avoid using mixin so we can pass custom focus shadow properly
52
54
  @if $enable-shadows and $btn-active-box-shadow != none {
53
- box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
55
+ @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5));
54
56
  } @else {
57
+ // Avoid using mixin so we can pass custom focus shadow properly
55
58
  box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
56
59
  }
57
60
  }
@@ -62,7 +65,7 @@
62
65
  color: $color;
63
66
  border-color: $color;
64
67
 
65
- @include hover {
68
+ @include hover() {
66
69
  color: $color-hover;
67
70
  background-color: $active-background;
68
71
  border-color: $active-border;
@@ -87,10 +90,10 @@
87
90
  border-color: $active-border;
88
91
 
89
92
  &:focus {
90
- // Avoid using mixin so we can pass custom focus shadow properly
91
93
  @if $enable-shadows and $btn-active-box-shadow != none {
92
- box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5);
94
+ @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5));
93
95
  } @else {
96
+ // Avoid using mixin so we can pass custom focus shadow properly
94
97
  box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);
95
98
  }
96
99
  }
@@ -1,25 +1,25 @@
1
- @mixin caret-down {
1
+ @mixin caret-down() {
2
2
  border-top: $caret-width solid;
3
3
  border-right: $caret-width solid transparent;
4
4
  border-bottom: 0;
5
5
  border-left: $caret-width solid transparent;
6
6
  }
7
7
 
8
- @mixin caret-up {
8
+ @mixin caret-up() {
9
9
  border-top: 0;
10
10
  border-right: $caret-width solid transparent;
11
11
  border-bottom: $caret-width solid;
12
12
  border-left: $caret-width solid transparent;
13
13
  }
14
14
 
15
- @mixin caret-right {
15
+ @mixin caret-right() {
16
16
  border-top: $caret-width solid transparent;
17
17
  border-right: 0;
18
18
  border-bottom: $caret-width solid transparent;
19
19
  border-left: $caret-width solid;
20
20
  }
21
21
 
22
- @mixin caret-left {
22
+ @mixin caret-left() {
23
23
  border-top: $caret-width solid transparent;
24
24
  border-right: $caret-width solid;
25
25
  border-bottom: $caret-width solid transparent;
@@ -33,11 +33,11 @@
33
33
  vertical-align: $caret-vertical-align;
34
34
  content: "";
35
35
  @if $direction == down {
36
- @include caret-down;
36
+ @include caret-down();
37
37
  } @else if $direction == up {
38
- @include caret-up;
38
+ @include caret-up();
39
39
  } @else if $direction == right {
40
- @include caret-right;
40
+ @include caret-right();
41
41
  }
42
42
  }
43
43
 
@@ -51,7 +51,7 @@
51
51
  margin-right: $caret-spacing;
52
52
  vertical-align: $caret-vertical-align;
53
53
  content: "";
54
- @include caret-left;
54
+ @include caret-left();
55
55
  }
56
56
  }
57
57
 
@@ -1,14 +1,14 @@
1
1
  // stylelint-disable declaration-no-important
2
2
 
3
- @mixin float-left {
3
+ @mixin float-left() {
4
4
  float: left !important;
5
5
  @include deprecate("The `float-left` mixin", "v4.3.0", "v5");
6
6
  }
7
- @mixin float-right {
7
+ @mixin float-right() {
8
8
  float: right !important;
9
9
  @include deprecate("The `float-right` mixin", "v4.3.0", "v5");
10
10
  }
11
- @mixin float-none {
11
+ @mixin float-none() {
12
12
  float: none !important;
13
13
  @include deprecate("The `float-none` mixin", "v4.3.0", "v5");
14
14
  }