|
6 | 6 | .#{$shale}dialog { |
7 | 7 | --#{$shale}dialog-transition-duration: 0.125s; |
8 | 8 |
|
9 | | - transition: |
10 | | - display var(--#{$shale}dialog-transition-duration) allow-discrete, |
11 | | - overlay var(--#{$shale}dialog-transition-duration) allow-discrete; |
12 | | - animation: #{$shale}dialog-exit var(--#{$shale}dialog-transition-duration) |
13 | | - ease-out; |
14 | 9 | background: var(--#{$shale}background); |
15 | 10 | border-radius: 0.4em; |
16 | 11 | border: 1px solid var(--#{$shale}secondary-border); |
17 | 12 | box-shadow: var(--#{$shale}shadow-puffy); |
18 | 13 | padding: 0; |
19 | 14 |
|
| 15 | + // Closed state |
| 16 | + opacity: 0; |
| 17 | + transform: scaleY(0); |
| 18 | + |
| 19 | + transition: |
| 20 | + opacity var(--#{$shale}dialog-transition-duration) ease-out, |
| 21 | + transform var(--#{$shale}dialog-transition-duration) ease-out, |
| 22 | + display var(--#{$shale}dialog-transition-duration) allow-discrete, |
| 23 | + overlay var(--#{$shale}dialog-transition-duration) allow-discrete; |
| 24 | + |
20 | 25 | &::backdrop { |
21 | | - animation: #{$shale}dialog-backdrop-exit |
22 | | - var(--#{$shale}dialog-transition-duration) ease-in; |
23 | | - transition: overlay var(--#{$shale}dialog-transition-duration) |
24 | | - allow-discrete; |
25 | 26 | background: var(--#{$shale}dialog-backdrop); |
| 27 | + opacity: 0; |
| 28 | + transition: |
| 29 | + opacity var(--#{$shale}dialog-transition-duration) ease-out, |
| 30 | + overlay var(--#{$shale}dialog-transition-duration) allow-discrete; |
26 | 31 | } |
27 | 32 |
|
| 33 | + // Open state |
28 | 34 | &[open] { |
29 | | - animation: #{$shale}dialog-enter var(--#{$shale}dialog-transition-duration) |
30 | | - ease-out; |
| 35 | + opacity: 1; |
| 36 | + transform: scaleY(1); |
31 | 37 | } |
32 | 38 | &[open]::backdrop { |
33 | | - animation: #{$shale}dialog-backdrop-enter |
34 | | - var(--#{$shale}dialog-transition-duration) ease-in; |
| 39 | + opacity: 1; |
| 40 | + } |
| 41 | + |
| 42 | + // Starting style for entry animation |
| 43 | + @starting-style { |
| 44 | + &[open] { |
| 45 | + opacity: 0; |
| 46 | + transform: scaleY(0); |
| 47 | + } |
| 48 | + &[open]::backdrop { |
| 49 | + opacity: 0; |
| 50 | + } |
35 | 51 | } |
36 | 52 | } |
37 | 53 |
|
38 | 54 | @media (prefers-reduced-motion: reduce) { |
39 | 55 | .#{$shale}dialog { |
40 | 56 | transition: none !important; |
41 | | - animation: none !important; |
42 | 57 |
|
43 | 58 | &::backdrop { |
44 | 59 | transition: none !important; |
45 | | - animation: none !important; |
46 | 60 | } |
47 | 61 | } |
48 | 62 | } |
49 | | - |
50 | | -@keyframes #{$shale}dialog-enter { |
51 | | - from { |
52 | | - opacity: 0; |
53 | | - transform: scaleX(1) scaleY(0); |
54 | | - } |
55 | | - |
56 | | - to { |
57 | | - opacity: 1; |
58 | | - transform: scaleX(1) scaleY(1); |
59 | | - } |
60 | | -} |
61 | | - |
62 | | -@keyframes #{$shale}dialog-exit { |
63 | | - from { |
64 | | - opacity: 1; |
65 | | - transform: scaleX(1) scaleY(1); |
66 | | - } |
67 | | - |
68 | | - to { |
69 | | - opacity: 0; |
70 | | - transform: scaleX(1) scaleY(0); |
71 | | - } |
72 | | -} |
73 | | - |
74 | | -@keyframes #{$shale}dialog-backdrop-enter { |
75 | | - from { |
76 | | - opacity: 0; |
77 | | - } |
78 | | - |
79 | | - to { |
80 | | - opacity: 1; |
81 | | - } |
82 | | -} |
83 | | - |
84 | | -@keyframes #{$shale}dialog-backdrop-exit { |
85 | | - from { |
86 | | - opacity: 1; |
87 | | - } |
88 | | - |
89 | | - to { |
90 | | - opacity: 0; |
91 | | - } |
92 | | -} |
0 commit comments