mixins.scss 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. @use 'function' as *;
  2. @use '../common/var' as *;
  3. // forward mixins
  4. @forward 'config';
  5. @forward 'function';
  6. @forward '_var';
  7. @use 'config' as *;
  8. // Break-points
  9. @mixin res($key, $map: $breakpoints) {
  10. // loop breakpoint Map, return if present
  11. @if map-has-key($map, $key) {
  12. @media only screen and #{unquote(map-get($map, $key))} {
  13. @content;
  14. }
  15. } @else {
  16. @warn "Undefined points: `#{$map}`";
  17. }
  18. }
  19. // Scrollbar
  20. @mixin scroll-bar {
  21. $scrollbar-thumb-background: getCssVar('text-color', 'disabled');
  22. $scrollbar-track-background: getCssVar('fill-color', 'blank');
  23. &::-webkit-scrollbar {
  24. z-index: 11;
  25. width: 6px;
  26. &:horizontal {
  27. height: 6px;
  28. }
  29. &-thumb {
  30. border-radius: 5px;
  31. width: 6px;
  32. background: $scrollbar-thumb-background;
  33. }
  34. &-corner {
  35. background: $scrollbar-track-background;
  36. }
  37. &-track {
  38. background: $scrollbar-track-background;
  39. &-piece {
  40. background: $scrollbar-track-background;
  41. width: 6px;
  42. }
  43. }
  44. }
  45. }
  46. // BEM
  47. @mixin b($block) {
  48. $B: $namespace + $common-separator + $block !global;
  49. .#{$B} {
  50. @content;
  51. }
  52. }
  53. @mixin e($element) {
  54. $E: $element !global;
  55. $selector: &;
  56. $currentSelector: '';
  57. @each $unit in $element {
  58. $currentSelector: #{$currentSelector +
  59. '.' +
  60. $B +
  61. $element-separator +
  62. $unit +
  63. ','};
  64. }
  65. @if hitAllSpecialNestRule($selector) {
  66. @at-root {
  67. #{$selector} {
  68. #{$currentSelector} {
  69. @content;
  70. }
  71. }
  72. }
  73. } @else {
  74. @at-root {
  75. #{$currentSelector} {
  76. @content;
  77. }
  78. }
  79. }
  80. }
  81. @mixin m($modifier) {
  82. $selector: &;
  83. $currentSelector: '';
  84. @each $unit in $modifier {
  85. $currentSelector: #{$currentSelector +
  86. $selector +
  87. $modifier-separator +
  88. $unit +
  89. ','};
  90. }
  91. @at-root {
  92. #{$currentSelector} {
  93. @content;
  94. }
  95. }
  96. }
  97. @mixin configurable-m($modifier, $E-flag: false) {
  98. $selector: &;
  99. $interpolation: '';
  100. @if $E-flag {
  101. $interpolation: $element-separator + $E-flag;
  102. }
  103. @at-root {
  104. #{$selector} {
  105. .#{$B + $interpolation + $modifier-separator + $modifier} {
  106. @content;
  107. }
  108. }
  109. }
  110. }
  111. @mixin spec-selector(
  112. $specSelector: '',
  113. $element: $E,
  114. $modifier: false,
  115. $block: $B
  116. ) {
  117. $modifierCombo: '';
  118. @if $modifier {
  119. $modifierCombo: $modifier-separator + $modifier;
  120. }
  121. @at-root {
  122. #{&}#{$specSelector}.#{$block
  123. + $element-separator
  124. + $element
  125. + $modifierCombo} {
  126. @content;
  127. }
  128. }
  129. }
  130. @mixin meb($modifier: false, $element: $E, $block: $B) {
  131. $selector: &;
  132. $modifierCombo: '';
  133. @if $modifier {
  134. $modifierCombo: $modifier-separator + $modifier;
  135. }
  136. @at-root {
  137. #{$selector} {
  138. .#{$block + $element-separator + $element + $modifierCombo} {
  139. @content;
  140. }
  141. }
  142. }
  143. }
  144. @mixin when($state) {
  145. @at-root {
  146. &.#{$state-prefix + $state} {
  147. @content;
  148. }
  149. }
  150. }
  151. @mixin extend-rule($name) {
  152. @extend #{'%shared-' + $name} !optional;
  153. }
  154. @mixin share-rule($name) {
  155. $rule-name: '%shared-' + $name;
  156. @at-root #{$rule-name} {
  157. @content;
  158. }
  159. }
  160. @mixin pseudo($pseudo) {
  161. @at-root #{&}#{':#{$pseudo}'} {
  162. @content;
  163. }
  164. }
  165. @mixin picker-popper($background, $border, $box-shadow) {
  166. &.#{$namespace}-popper {
  167. background: $background;
  168. border: $border;
  169. box-shadow: $box-shadow;
  170. .#{$namespace}-popper__arrow {
  171. &::before {
  172. border: $border;
  173. }
  174. }
  175. @each $placement,
  176. $adjacency
  177. in ('top': 'left', 'bottom': 'right', 'left': 'bottom', 'right': 'top')
  178. {
  179. &[data-popper-placement^='#{$placement}'] {
  180. .#{$namespace}-popper__arrow::before {
  181. border-#{$placement}-color: transparent;
  182. border-#{$adjacency}-color: transparent;
  183. }
  184. }
  185. }
  186. }
  187. }
  188. // dark
  189. @mixin dark($block) {
  190. html.dark {
  191. @include b($block) {
  192. @content;
  193. }
  194. }
  195. }
  196. @mixin inset-input-border($color, $important: false) {
  197. @if $important == true {
  198. box-shadow: 0 0 0 1px $color inset !important;
  199. } @else {
  200. box-shadow: 0 0 0 1px $color inset;
  201. }
  202. }