|
3 | 3 | --_dialog-padding-inline: var(--dialog-padding-inline, var(--spacing-base)); |
4 | 4 | --_dialog-layout-padding: var(--layout-padding, var(--spacing-base)); |
5 | 5 | --_dialog-close-size: var(--dialog-close-size, var(--control-height-base)); |
6 | | - --_dialog-transition-duration: var( |
7 | | - --dialog-transition-duration, |
8 | | - var(--transition-duration-moderate-2) |
9 | | - ); |
| 6 | + |
10 | 7 | --_dialog-max-block-size: var(--dialog-max-block-size, 90dvh); |
11 | 8 | --_dialog-max-inline-size: var(--dialog-max-inline-size, 28rem); |
12 | 9 |
|
13 | 10 | --_dialog-radius: 0; |
14 | 11 | display: block; |
15 | 12 | z-index: var(--layer-important); |
16 | | - animation: close-dialog var(--_dialog-transition-duration) var(--easing-exit) forwards; |
17 | | - transition: opacity var(--_dialog-transition-duration) var(--easing-exit); |
18 | 13 | position: fixed; |
19 | 14 | inset: 0; |
20 | 15 | border: var(--border-width-thin) solid var(--color-border-base); |
|
38 | 33 | box-shadow: var(--shadow-medium); |
39 | 34 | } |
40 | 35 |
|
| 36 | + /* Credits to Adam Argyle. Modified from: https://nerdy.dev/notebook/dialog-starter.html */ |
| 37 | + |
| 38 | + /* Exit Stage To */ |
| 39 | + --transform-in: perspective(80px) rotateX(0.5deg) scale(0.9); |
| 40 | + --transform-out: perspective(80px) rotateX(0.5deg) scale(0.95); |
| 41 | + --transition-time-in: var(--transition-duration-gentle-1); |
| 42 | + --transition-time-out: var(--transition-duration-moderate-1); |
| 43 | + |
| 44 | + transform: var(--transform-in); |
| 45 | + |
| 46 | + &, &::backdrop { |
| 47 | + transition: |
| 48 | + display var(--transition-time-out) allow-discrete, |
| 49 | + overlay var(--transition-time-out) allow-discrete, |
| 50 | + transform var(--transition-time-out) var(--ease-in-out-2), |
| 51 | + opacity var(--transition-duration-moderate-1) var(--ease-in-out-2); |
| 52 | + |
| 53 | + /* Exit Stage To */ |
| 54 | + opacity: 0; |
| 55 | + } |
| 56 | + |
| 57 | + & { |
| 58 | + transform: var(--transform-out); |
| 59 | + } |
| 60 | + |
| 61 | + /* On Stage */ |
41 | 62 | &[open] { |
42 | | - animation: open-dialog var(--_dialog-transition-duration) var(--easing-entry); |
| 63 | + opacity: 1; |
| 64 | + transform: perspective(80px) rotateX(0deg) scale(1); |
| 65 | + |
| 66 | + &, &::backdrop { |
| 67 | + transition: |
| 68 | + display var(--transition-time-in) allow-discrete, |
| 69 | + overlay var(--transition-time-in) allow-discrete, |
| 70 | + transform var(--transition-time-in) var(--ease-in-out-2), |
| 71 | + opacity var(--transition-time-in) var(--ease-in-out-2); |
| 72 | + } |
| 73 | + |
| 74 | + &::backdrop { |
| 75 | + backdrop-filter: blur(20px); |
| 76 | + opacity: 1; |
| 77 | + } |
43 | 78 | } |
44 | 79 |
|
45 | | - &:not([open]) { |
46 | | - opacity: 0; |
47 | | - pointer-events: none; |
| 80 | + /* Enter Stage From */ |
| 81 | + @starting-style { |
| 82 | + &[open], |
| 83 | + &[open]::backdrop { |
| 84 | + opacity: 0; |
| 85 | + } |
| 86 | + |
| 87 | + &[open] { |
| 88 | + transform: var(--transform-in); |
| 89 | + } |
48 | 90 | } |
49 | 91 |
|
50 | 92 | &::backdrop { |
|
117 | 159 | background-color: var(--color-surface-subtle); |
118 | 160 | } |
119 | 161 | } |
120 | | - |
121 | | - @keyframes open-dialog { |
122 | | - from { |
123 | | - transform: translate(0%, 100dvh) rotate(0deg); |
124 | | - } |
125 | | - |
126 | | - to { |
127 | | - transform: translate(0dvh, 0%) rotate(0deg); |
128 | | - } |
129 | | - } |
130 | | - |
131 | | - @keyframes close-dialog { |
132 | | - from { |
133 | | - transform: translate(0dvh, 0%) rotate(0deg); |
134 | | - } |
135 | | - |
136 | | - to { |
137 | | - transform: translate(0%, 100dvh) rotate(10deg); |
138 | | - } |
139 | | - } |
140 | 162 | } |
0 commit comments