mixins.scss 4.1 KB

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