VExpansionPanel.sass 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. @use 'sass:math'
  2. @use '../../styles/settings'
  3. @use '../../styles/tools'
  4. @use './variables' as *
  5. @include tools.layer('components')
  6. // Theme
  7. .v-expansion-panel
  8. background-color: $expansion-panel-background-color
  9. color: $expansion-panel-color
  10. &:not(:first-child)::after
  11. border-color: $expansion-panel-border-color
  12. &--disabled
  13. .v-expansion-panel-title
  14. color: $expansion-panel-disabled-color
  15. .v-expansion-panel-title__overlay
  16. // This is multiplied by the text opacity,
  17. // so we need to divide it to get the desired value
  18. // TODO: Should disabled be part of states mixin?
  19. opacity: math.div($expansion-panel-disabled-overlay, $expansion-panel-disabled-opacity)
  20. // Block
  21. .v-expansion-panels
  22. display: flex
  23. flex-wrap: wrap
  24. justify-content: center
  25. list-style-type: none
  26. padding: 0
  27. width: 100%
  28. position: relative
  29. z-index: 1
  30. &:not(&--variant-accordion)
  31. > :not(:first-child):not(:last-child):not(.v-expansion-panel--active):not(.v-expansion-panel--before-active)
  32. border-bottom-left-radius: 0 !important
  33. border-bottom-right-radius: 0 !important
  34. > :not(:first-child):not(:last-child):not(.v-expansion-panel--active):not(.v-expansion-panel--after-active)
  35. border-top-left-radius: 0 !important
  36. border-top-right-radius: 0 !important
  37. > :first-child:not(:last-child):not(.v-expansion-panel--active):not(.v-expansion-panel--before-active)
  38. border-bottom-left-radius: 0 !important
  39. border-bottom-right-radius: 0 !important
  40. > :last-child:not(:first-child):not(.v-expansion-panel--active):not(.v-expansion-panel--after-active)
  41. border-top-left-radius: 0 !important
  42. border-top-right-radius: 0 !important
  43. &--variant-accordion
  44. > :first-child:not(:last-child)
  45. border-bottom-left-radius: 0 !important
  46. border-bottom-right-radius: 0 !important
  47. > :last-child:not(:first-child)
  48. border-top-left-radius: 0 !important
  49. border-top-right-radius: 0 !important
  50. .v-expansion-panel-title--active
  51. border-bottom-left-radius: initial
  52. border-bottom-right-radius: initial
  53. > :not(:first-child):not(:last-child)
  54. border-radius: 0 !important
  55. .v-expansion-panel-title__overlay
  56. transition: 0.3s border-radius settings.$standard-easing
  57. // Element
  58. .v-expansion-panel
  59. flex: 1 0 100%
  60. max-width: 100%
  61. position: relative
  62. transition: .3s all settings.$standard-easing
  63. transition-property: margin-top, border-radius, border, max-width
  64. border-radius: $expansion-panel-border-radius
  65. &:not(:first-child)::after
  66. border-top-style: solid
  67. border-top-width: thin
  68. content: ''
  69. left: 0
  70. position: absolute
  71. right: 0
  72. top: 0
  73. transition: 0.3s opacity settings.$standard-easing
  74. &--disabled
  75. .v-expansion-panel-title
  76. pointer-events: none
  77. &--active
  78. &:not(:first-child),
  79. + .v-expansion-panel
  80. margin-top: $expansion-panel-active-margin
  81. &::after
  82. opacity: 0
  83. > .v-expansion-panel-title
  84. border-bottom-left-radius: 0
  85. border-bottom-right-radius: 0
  86. &:not(.v-expansion-panel-title--static)
  87. min-height: $expansion-panel-active-title-min-height
  88. .v-expansion-panel__shadow
  89. border-radius: inherit
  90. z-index: -1
  91. @include tools.absolute()
  92. @include tools.elevation(2)
  93. .v-expansion-panel-title
  94. align-items: center
  95. text-align: start
  96. border-radius: inherit
  97. display: flex
  98. font-size: $expansion-panel-title-font-size
  99. line-height: 1
  100. min-height: $expansion-panel-title-min-height
  101. outline: none
  102. padding: $expansion-panel-title-padding
  103. position: relative
  104. transition: .3s min-height settings.$standard-easing
  105. width: 100%
  106. justify-content: space-between
  107. @include tools.states('.v-expansion-panel-title__overlay', false)
  108. &--focusable.v-expansion-panel-title--active
  109. @include tools.active-states('.v-expansion-panel-title__overlay')
  110. .v-expansion-panel-title__overlay
  111. background-color: currentColor
  112. border-radius: inherit
  113. opacity: 0
  114. @include tools.absolute()
  115. .v-expansion-panel-title__icon
  116. display: inline-flex
  117. margin-bottom: -4px
  118. margin-top: -4px
  119. user-select: none
  120. margin-inline-start: auto
  121. .v-expansion-panel-text
  122. display: flex
  123. &__wrapper
  124. padding: $expansion-panel-text-padding
  125. flex: 1 1 auto
  126. max-width: 100%
  127. // Variants
  128. .v-expansion-panels--variant-accordion
  129. > .v-expansion-panel
  130. margin-top: 0
  131. &::after
  132. opacity: 1
  133. .v-expansion-panels--variant-popout
  134. > .v-expansion-panel
  135. max-width: $expansion-panel-popout-max-width
  136. &--active
  137. max-width: $expansion-panel-popout-active-max-width
  138. .v-expansion-panels--variant-inset
  139. > .v-expansion-panel
  140. max-width: $expansion-panel-inset-max-width
  141. &--active
  142. max-width: $expansion-panel-inset-active-max-width
  143. .v-expansion-panels--flat
  144. > .v-expansion-panel
  145. &::after
  146. border-top: none
  147. .v-expansion-panel__shadow
  148. display: none
  149. .v-expansion-panels--tile
  150. border-radius: 0
  151. > .v-expansion-panel
  152. border-radius: 0