VSwitch.sass 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. @use 'sass:selector'
  2. @use '../../styles/settings'
  3. @use '../../styles/tools'
  4. @use './variables' as *
  5. @include tools.layer('components')
  6. .v-switch
  7. .v-label
  8. padding-inline-start: $switch-label-margin-inline-start
  9. .v-switch__loader
  10. display: flex
  11. .v-progress-circular
  12. color: $switch-loader-color
  13. .v-switch__track,
  14. .v-switch__thumb
  15. transition: none
  16. .v-selection-control--error:not(.v-selection-control--disabled) &
  17. background-color: $switch-error-background-color
  18. color: $switch-error-color
  19. .v-switch__track-true
  20. margin-inline-end: auto
  21. .v-selection-control:not(.v-selection-control--dirty) &
  22. opacity: 0
  23. .v-switch__track-false
  24. margin-inline-start: auto
  25. .v-selection-control--dirty &
  26. opacity: 0
  27. .v-switch__track
  28. display: inline-flex
  29. align-items: center
  30. font-size: .5rem
  31. padding: 0 5px
  32. background-color: $switch-track-background
  33. border-radius: $switch-track-radius
  34. height: $switch-track-height
  35. opacity: $switch-track-opacity
  36. min-width: $switch-track-width
  37. cursor: pointer
  38. transition: $switch-track-transition
  39. .v-switch--inset &
  40. border-radius: $switch-inset-track-border-radius
  41. font-size: .75rem
  42. height: $switch-inset-track-height
  43. min-width: $switch-inset-track-width
  44. .v-switch__thumb
  45. align-items: center
  46. background-color: $switch-thumb-background
  47. color: $switch-thumb-color
  48. border-radius: $switch-thumb-radius
  49. display: flex
  50. font-size: .75rem
  51. height: $switch-thumb-height
  52. justify-content: center
  53. width: $switch-thumb-width
  54. pointer-events: none
  55. transition: $switch-thumb-transition
  56. position: relative
  57. overflow: hidden
  58. .v-switch:not(.v-switch--inset) &
  59. @include tools.elevation($switch-thumb-elevation)
  60. .v-switch.v-switch--flat:not(.v-switch--inset) &
  61. background: $switch-thumb-flat-background
  62. color: $switch-thumb-flat-color
  63. @include tools.elevation(0)
  64. .v-switch--inset &
  65. height: $switch-inset-thumb-height
  66. width: $switch-inset-thumb-width
  67. transform: scale(calc($switch-inset-thumb-off-height / $switch-inset-thumb-height))
  68. &--filled
  69. transform: none
  70. .v-switch--inset .v-selection-control--dirty &
  71. transform: none
  72. transition: .15s .05s transform settings.$decelerated-easing
  73. .v-switch
  74. $switch-thumb-transform: $switch-track-width * .5 - $switch-thumb-width * .5 + $switch-thumb-offset
  75. &.v-input
  76. flex: $switch-flex
  77. .v-selection-control
  78. min-height: var(--v-input-control-height)
  79. .v-selection-control__input
  80. border-radius: 50%
  81. transition: $switch-control-input-transition
  82. position: absolute
  83. @include tools.ltr()
  84. transform: translateX(-$switch-thumb-transform)
  85. @include tools.rtl()
  86. transform: translateX($switch-thumb-transform)
  87. .v-icon
  88. position: absolute
  89. .v-selection-control--dirty
  90. .v-selection-control__input
  91. @include tools.ltr()
  92. transform: translateX($switch-thumb-transform)
  93. @include tools.rtl()
  94. transform: translateX(-$switch-thumb-transform)
  95. &.v-switch--indeterminate
  96. .v-selection-control__input
  97. transform: scale(.8)
  98. .v-switch__thumb
  99. transform: scale(.75)
  100. box-shadow: none
  101. &.v-switch--inset
  102. .v-selection-control__wrapper
  103. width: auto
  104. &.v-input--vertical
  105. .v-label
  106. min-width: max-content
  107. .v-selection-control__wrapper
  108. transform: $switch-thumb-vertical-transform
  109. @media (forced-colors: active)
  110. .v-switch
  111. .v-switch__loader
  112. .v-progress-circular
  113. color: currentColor
  114. .v-switch__thumb
  115. background-color: buttontext
  116. .v-switch__track,
  117. .v-switch__thumb
  118. border: 1px solid
  119. color: buttontext
  120. &:not(.v-switch--loading):not(.v-input--disabled)
  121. .v-selection-control--dirty
  122. .v-switch__thumb
  123. background-color: highlight
  124. &:not(.v-input--disabled)
  125. .v-selection-control--dirty
  126. .v-switch__track
  127. background-color: highlight
  128. .v-switch__track,
  129. .v-switch__thumb
  130. color: highlight
  131. &.v-switch--inset
  132. .v-switch__track
  133. border-width: 2px
  134. &:not(.v-switch--loading):not(.v-input--disabled)
  135. .v-selection-control--dirty
  136. .v-switch__thumb
  137. background-color: highlighttext
  138. color: highlighttext
  139. &.v-input--disabled
  140. .v-switch__thumb
  141. background-color: graytext
  142. .v-switch__track,
  143. .v-switch__thumb
  144. color: graytext
  145. &.v-switch--loading
  146. .v-switch__thumb
  147. background-color: canvas
  148. &.v-switch--inset,
  149. &.v-switch--indeterminate
  150. .v-switch__thumb
  151. border-width: 0