|
4 | 4 | @use "mixins/box-shadow" as *; |
5 | 5 | @use "mixins/gradients" as *; |
6 | 6 | @use "mixins/tokens" as *; |
| 7 | +@use "mixins/transition" as *; |
7 | 8 |
|
8 | 9 | // stylelint-disable scss/dollar-variable-default, custom-property-no-missing-var-function |
9 | 10 | $menu-tokens: () !default; |
@@ -45,6 +46,8 @@ $menu-tokens: defaults( |
45 | 46 | --menu-header-color: var(--fg-3), |
46 | 47 | --menu-header-padding-x: .75rem, |
47 | 48 | --menu-header-padding-y: .25rem, |
| 49 | + --menu-transition-duration: .15s, |
| 50 | + --menu-transition-timing: cubic-bezier(.22, 1, .36, 1), |
48 | 51 | ), |
49 | 52 | $menu-tokens |
50 | 53 | ); |
@@ -76,9 +79,43 @@ $menu-tokens: defaults( |
76 | 79 | border: var(--menu-border-width, var(--border-width)) solid var(--menu-border-color, var(--border-color-translucent)); |
77 | 80 | @include border-radius(var(--menu-border-radius, var(--border-radius-lg))); |
78 | 81 | @include box-shadow(var(--menu-box-shadow)); |
| 82 | + opacity: 0; |
| 83 | + transform: scale(.95); |
| 84 | + transform-origin: top start; |
| 85 | + |
| 86 | + &[data-bs-placement^="top"] { |
| 87 | + transform-origin: bottom start; |
| 88 | + } |
| 89 | + |
| 90 | + &[data-bs-placement="bottom-end"] { |
| 91 | + transform-origin: top end; |
| 92 | + } |
| 93 | + |
| 94 | + &[data-bs-placement="top-end"] { |
| 95 | + transform-origin: bottom end; |
| 96 | + } |
| 97 | + |
| 98 | + &[data-bs-placement^="left"] { |
| 99 | + transform-origin: top end; |
| 100 | + } |
| 101 | + |
| 102 | + @include transition( |
| 103 | + opacity var(--menu-transition-duration) var(--menu-transition-timing), |
| 104 | + transform var(--menu-transition-duration) var(--menu-transition-timing), |
| 105 | + display var(--menu-transition-duration) allow-discrete |
| 106 | + ); |
79 | 107 |
|
80 | 108 | &.show { |
81 | 109 | display: flex; |
| 110 | + opacity: 1; |
| 111 | + transform: none; |
| 112 | + } |
| 113 | + } |
| 114 | + |
| 115 | + @starting-style { |
| 116 | + .menu.show { |
| 117 | + opacity: 0; |
| 118 | + transform: scale(.95); |
82 | 119 | } |
83 | 120 | } |
84 | 121 |
|
|
0 commit comments