@magic-spells/dialog-panel 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dialog-panel.css +48 -36
- package/dist/dialog-panel.min.css +1 -1
- package/package.json +1 -1
package/dist/dialog-panel.css
CHANGED
|
@@ -116,84 +116,96 @@ dialog-panel[state='hiding'] > dialog-backdrop {
|
|
|
116
116
|
|
|
117
117
|
/* ============================================================
|
|
118
118
|
Position variants — drawer-style slide-in animations.
|
|
119
|
-
|
|
120
|
-
|
|
119
|
+
Self-contained: declares its own `position: fixed` and
|
|
120
|
+
explicit inset values so it doesn't rely on the UA's
|
|
121
|
+
`dialog:modal` styling or on consumer body overflow rules.
|
|
122
|
+
Default (no position attr) uses the centered fade/scale
|
|
123
|
+
animation defined above.
|
|
121
124
|
============================================================ */
|
|
122
125
|
|
|
126
|
+
/* Shared base for all four drawer positions */
|
|
127
|
+
dialog-panel[position='top'] > dialog,
|
|
128
|
+
dialog-panel[position='right'] > dialog,
|
|
129
|
+
dialog-panel[position='bottom'] > dialog,
|
|
130
|
+
dialog-panel[position='left'] > dialog {
|
|
131
|
+
position: fixed;
|
|
132
|
+
margin: 0;
|
|
133
|
+
max-width: 100%;
|
|
134
|
+
opacity: 1;
|
|
135
|
+
}
|
|
136
|
+
|
|
123
137
|
/* ---- Top drawer ---- */
|
|
124
138
|
dialog-panel[position='top'] > dialog {
|
|
125
|
-
|
|
139
|
+
top: 0;
|
|
140
|
+
right: 0;
|
|
141
|
+
bottom: auto;
|
|
142
|
+
left: 0;
|
|
126
143
|
width: 100%;
|
|
127
|
-
max-width: 100%;
|
|
128
144
|
max-height: 85vh;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
dialog-panel[position='top'][state='showing'] > dialog,
|
|
132
|
-
dialog-panel[position='top'][state='hiding'] > dialog {
|
|
133
|
-
opacity: 1;
|
|
134
145
|
transform: translateY(-100%);
|
|
135
146
|
}
|
|
136
147
|
|
|
137
148
|
dialog-panel[position='top'][state='shown'] > dialog {
|
|
138
|
-
opacity: 1;
|
|
139
149
|
transform: translateY(0);
|
|
140
150
|
}
|
|
141
151
|
|
|
142
152
|
/* ---- Bottom drawer ---- */
|
|
143
153
|
dialog-panel[position='bottom'] > dialog {
|
|
144
|
-
|
|
154
|
+
top: auto;
|
|
155
|
+
right: 0;
|
|
156
|
+
bottom: 0;
|
|
157
|
+
left: 0;
|
|
145
158
|
width: 100%;
|
|
146
|
-
max-width: 100%;
|
|
147
159
|
max-height: 85vh;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
dialog-panel[position='bottom'][state='showing'] > dialog,
|
|
151
|
-
dialog-panel[position='bottom'][state='hiding'] > dialog {
|
|
152
|
-
opacity: 1;
|
|
153
160
|
transform: translateY(100%);
|
|
154
161
|
}
|
|
155
162
|
|
|
156
163
|
dialog-panel[position='bottom'][state='shown'] > dialog {
|
|
157
|
-
opacity: 1;
|
|
158
164
|
transform: translateY(0);
|
|
159
165
|
}
|
|
160
166
|
|
|
161
167
|
/* ---- Left drawer ---- */
|
|
162
168
|
dialog-panel[position='left'] > dialog {
|
|
163
|
-
|
|
169
|
+
top: 0;
|
|
170
|
+
right: auto;
|
|
171
|
+
bottom: 0;
|
|
172
|
+
left: 0;
|
|
173
|
+
width: min(24rem, 90vw);
|
|
164
174
|
height: 100dvh;
|
|
165
175
|
max-height: 100dvh;
|
|
166
|
-
width: min(24rem, 90vw);
|
|
167
|
-
max-width: 100%;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
dialog-panel[position='left'][state='showing'] > dialog,
|
|
171
|
-
dialog-panel[position='left'][state='hiding'] > dialog {
|
|
172
|
-
opacity: 1;
|
|
173
176
|
transform: translateX(-100%);
|
|
174
177
|
}
|
|
175
178
|
|
|
176
179
|
dialog-panel[position='left'][state='shown'] > dialog {
|
|
177
|
-
opacity: 1;
|
|
178
180
|
transform: translateX(0);
|
|
179
181
|
}
|
|
180
182
|
|
|
181
183
|
/* ---- Right drawer ---- */
|
|
182
184
|
dialog-panel[position='right'] > dialog {
|
|
183
|
-
|
|
185
|
+
top: 0;
|
|
186
|
+
right: 0;
|
|
187
|
+
bottom: 0;
|
|
188
|
+
left: auto;
|
|
189
|
+
width: min(24rem, 90vw);
|
|
184
190
|
height: 100dvh;
|
|
185
191
|
max-height: 100dvh;
|
|
186
|
-
width: min(24rem, 90vw);
|
|
187
|
-
max-width: 100%;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
dialog-panel[position='right'][state='showing'] > dialog,
|
|
191
|
-
dialog-panel[position='right'][state='hiding'] > dialog {
|
|
192
|
-
opacity: 1;
|
|
193
192
|
transform: translateX(100%);
|
|
194
193
|
}
|
|
195
194
|
|
|
196
195
|
dialog-panel[position='right'][state='shown'] > dialog {
|
|
197
|
-
opacity: 1;
|
|
198
196
|
transform: translateX(0);
|
|
199
197
|
}
|
|
198
|
+
|
|
199
|
+
/* ============================================================
|
|
200
|
+
Page scroll lock — prevents the underlying page from
|
|
201
|
+
scrolling while any dialog-panel is open or animating.
|
|
202
|
+
Keyed on the package's own [state='*'] attributes so it
|
|
203
|
+
activates from the first frame of the opening animation
|
|
204
|
+
and stays through the closing animation, regardless of
|
|
205
|
+
when the native <dialog>'s [open] attribute is toggled.
|
|
206
|
+
============================================================ */
|
|
207
|
+
body:has(dialog-panel[state='showing']),
|
|
208
|
+
body:has(dialog-panel[state='shown']),
|
|
209
|
+
body:has(dialog-panel[state='hiding']) {
|
|
210
|
+
overflow: hidden;
|
|
211
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
dialog-panel{display:contents}dialog-panel>dialog{border:none;box-shadow:0 10px 25px rgba(0,0,0,.15);max-height:85vh;max-width:32rem;opacity:0;overflow:visible;padding:0;transform:scale(.95);transition:opacity .3s ease-out,transform .3s ease-out;width:90vw}dialog-panel:has(dialog-backdrop)>dialog::backdrop{background:transparent}dialog-panel:not(:has(dialog-backdrop))>dialog::backdrop{background:rgba(0,0,0,.3);opacity:0;transition:opacity .3s ease-out}dialog-backdrop{background:rgba(0,0,0,.3);height:200dvh;left:50%;opacity:0;pointer-events:none;position:fixed;top:50%;transform:translateY(-50%) translateX(-50%);transition:opacity .3s ease-out;width:200vw;z-index:9999999}dialog-panel[state=showing]>dialog{opacity:0;transform:scale(.95)}dialog-panel:not(:has(dialog-backdrop))[state=showing]>dialog::backdrop{opacity:0}dialog-panel[state=shown]>dialog{opacity:1;transform:scale(1)}dialog-panel:not(:has(dialog-backdrop))[state=shown]>dialog::backdrop{opacity:1}dialog-panel[state=hiding]>dialog{opacity:0;transform:scale(.95);transition:opacity .2s ease-in,transform .2s ease-in}dialog-panel:not(:has(dialog-backdrop))[state=hiding]>dialog::backdrop{opacity:0;transition:opacity .2s ease-in}dialog-panel[state=hidden]>dialog-backdrop,dialog-panel[state=showing]>dialog-backdrop{opacity:0;pointer-events:none}dialog-panel[state=shown]>dialog-backdrop{opacity:1;pointer-events:auto}dialog-panel[state=hiding]>dialog-backdrop{opacity:0;pointer-events:none;transition:opacity .2s ease-in}dialog-panel[position=
|
|
1
|
+
dialog-panel{display:contents}dialog-panel>dialog{border:none;box-shadow:0 10px 25px rgba(0,0,0,.15);max-height:85vh;max-width:32rem;opacity:0;overflow:visible;padding:0;transform:scale(.95);transition:opacity .3s ease-out,transform .3s ease-out;width:90vw}dialog-panel:has(dialog-backdrop)>dialog::backdrop{background:transparent}dialog-panel:not(:has(dialog-backdrop))>dialog::backdrop{background:rgba(0,0,0,.3);opacity:0;transition:opacity .3s ease-out}dialog-backdrop{background:rgba(0,0,0,.3);height:200dvh;left:50%;opacity:0;pointer-events:none;position:fixed;top:50%;transform:translateY(-50%) translateX(-50%);transition:opacity .3s ease-out;width:200vw;z-index:9999999}dialog-panel[state=showing]>dialog{opacity:0;transform:scale(.95)}dialog-panel:not(:has(dialog-backdrop))[state=showing]>dialog::backdrop{opacity:0}dialog-panel[state=shown]>dialog{opacity:1;transform:scale(1)}dialog-panel:not(:has(dialog-backdrop))[state=shown]>dialog::backdrop{opacity:1}dialog-panel[state=hiding]>dialog{opacity:0;transform:scale(.95);transition:opacity .2s ease-in,transform .2s ease-in}dialog-panel:not(:has(dialog-backdrop))[state=hiding]>dialog::backdrop{opacity:0;transition:opacity .2s ease-in}dialog-panel[state=hidden]>dialog-backdrop,dialog-panel[state=showing]>dialog-backdrop{opacity:0;pointer-events:none}dialog-panel[state=shown]>dialog-backdrop{opacity:1;pointer-events:auto}dialog-panel[state=hiding]>dialog-backdrop{opacity:0;pointer-events:none;transition:opacity .2s ease-in}dialog-panel[position=bottom]>dialog,dialog-panel[position=left]>dialog,dialog-panel[position=right]>dialog,dialog-panel[position=top]>dialog{margin:0;max-width:100%;opacity:1;position:fixed}dialog-panel[position=top]>dialog{bottom:auto;left:0;max-height:85vh;right:0;top:0;transform:translateY(-100%);width:100%}dialog-panel[position=top][state=shown]>dialog{transform:translateY(0)}dialog-panel[position=bottom]>dialog{bottom:0;left:0;max-height:85vh;right:0;top:auto;transform:translateY(100%);width:100%}dialog-panel[position=bottom][state=shown]>dialog{transform:translateY(0)}dialog-panel[position=left]>dialog{bottom:0;height:100dvh;left:0;max-height:100dvh;right:auto;top:0;transform:translateX(-100%);width:min(24rem,90vw)}dialog-panel[position=left][state=shown]>dialog{transform:translateX(0)}dialog-panel[position=right]>dialog{bottom:0;height:100dvh;left:auto;max-height:100dvh;right:0;top:0;transform:translateX(100%);width:min(24rem,90vw)}dialog-panel[position=right][state=shown]>dialog{transform:translateX(0)}body:has(dialog-panel[state=hiding]),body:has(dialog-panel[state=showing]),body:has(dialog-panel[state=shown]){overflow:hidden}
|
package/package.json
CHANGED