compote-ui 0.46.0 → 0.46.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/components/drawer/drawer-content.svelte +84 -100
- package/dist/components/drawer/drawer-content.svelte.d.ts +4 -0
- package/dist/components/drawer/drawer-description.svelte +16 -0
- package/dist/components/drawer/drawer-description.svelte.d.ts +8 -0
- package/dist/components/drawer/drawer-header.svelte +16 -0
- package/dist/components/drawer/drawer-header.svelte.d.ts +9 -0
- package/dist/components/drawer/index.d.ts +2 -0
- package/dist/components/drawer/index.js +2 -0
- package/package.json +1 -1
|
@@ -6,23 +6,58 @@
|
|
|
6
6
|
|
|
7
7
|
interface Props extends DrawerContentBaseProps {
|
|
8
8
|
class?: ClassValue;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
backdropClass?: ClassValue;
|
|
10
|
+
positionerClass?: ClassValue;
|
|
11
|
+
maxWidth?: string;
|
|
12
|
+
maxHeight?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
let {
|
|
16
|
+
class: className,
|
|
17
|
+
backdropClass,
|
|
18
|
+
positionerClass,
|
|
19
|
+
maxWidth,
|
|
20
|
+
maxHeight,
|
|
21
|
+
children,
|
|
22
|
+
draggable = false,
|
|
23
|
+
...rest
|
|
24
|
+
}: Props = $props();
|
|
12
25
|
</script>
|
|
13
26
|
|
|
14
|
-
<Drawer.
|
|
15
|
-
{...rest}
|
|
16
|
-
{draggable}
|
|
27
|
+
<Drawer.Backdrop
|
|
17
28
|
class={cn(
|
|
18
|
-
'
|
|
19
|
-
'data-[
|
|
20
|
-
'data-[
|
|
21
|
-
|
|
29
|
+
'fixed inset-0 z-50 bg-black/50',
|
|
30
|
+
'data-[state=closed]:animate-out data-[state=closed]:fade-out-0',
|
|
31
|
+
'data-[state=open]:animate-in data-[state=open]:fade-in-0',
|
|
32
|
+
backdropClass
|
|
33
|
+
)}
|
|
34
|
+
/>
|
|
35
|
+
<Drawer.Positioner
|
|
36
|
+
class={cn(
|
|
37
|
+
'fixed inset-0 z-50 flex items-end justify-center',
|
|
38
|
+
'data-[swipe-direction=left]:items-stretch data-[swipe-direction=left]:justify-start',
|
|
39
|
+
'data-[swipe-direction=right]:items-stretch data-[swipe-direction=right]:justify-end',
|
|
40
|
+
'data-[swipe-direction=up]:items-start',
|
|
41
|
+
positionerClass
|
|
22
42
|
)}
|
|
23
43
|
>
|
|
24
|
-
|
|
25
|
-
|
|
44
|
+
<Drawer.Content
|
|
45
|
+
{...rest}
|
|
46
|
+
{draggable}
|
|
47
|
+
style={[
|
|
48
|
+
maxWidth && `--drawer-max-width:${maxWidth}`,
|
|
49
|
+
maxHeight && `--drawer-max-height:${maxHeight}`
|
|
50
|
+
]
|
|
51
|
+
.filter(Boolean)
|
|
52
|
+
.join(';')}
|
|
53
|
+
class={cn(
|
|
54
|
+
'pointer-events-auto relative flex h-full w-full flex-col bg-surface-1 shadow-xl outline-none',
|
|
55
|
+
className
|
|
56
|
+
)}
|
|
57
|
+
>
|
|
58
|
+
{@render children?.()}
|
|
59
|
+
</Drawer.Content>
|
|
60
|
+
</Drawer.Positioner>
|
|
26
61
|
|
|
27
62
|
<style>
|
|
28
63
|
/* Side drawers: grabber becomes an absolutely-positioned vertical strip on the open edge */
|
|
@@ -64,6 +99,24 @@
|
|
|
64
99
|
height: 2.5rem;
|
|
65
100
|
}
|
|
66
101
|
|
|
102
|
+
/* Bottom/top drawers: cap height, overridable via --drawer-max-height */
|
|
103
|
+
:global(
|
|
104
|
+
[data-scope='drawer'][data-part='content']:not([data-swipe-direction]),
|
|
105
|
+
[data-scope='drawer'][data-part='content'][data-swipe-direction='down'],
|
|
106
|
+
[data-scope='drawer'][data-part='content'][data-swipe-direction='up']
|
|
107
|
+
) {
|
|
108
|
+
max-height: var(--drawer-max-height, 96svh);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* Side drawers: constrain width, remove height cap — overridable via --drawer-max-width */
|
|
112
|
+
:global(
|
|
113
|
+
[data-scope='drawer'][data-part='content'][data-swipe-direction='left'],
|
|
114
|
+
[data-scope='drawer'][data-part='content'][data-swipe-direction='right']
|
|
115
|
+
) {
|
|
116
|
+
max-width: var(--drawer-max-width, 25rem);
|
|
117
|
+
max-height: none;
|
|
118
|
+
}
|
|
119
|
+
|
|
67
120
|
/* Bleed pseudo-element so background extends past rounded corners on the open edge */
|
|
68
121
|
:global([data-scope='drawer'][data-part='content'])::after {
|
|
69
122
|
content: '';
|
|
@@ -99,129 +152,60 @@
|
|
|
99
152
|
height: auto;
|
|
100
153
|
}
|
|
101
154
|
|
|
102
|
-
|
|
155
|
+
:global([data-scope='drawer'][data-part='content'][data-state='open']) {
|
|
156
|
+
animation-name: enter;
|
|
157
|
+
animation-duration: 500ms;
|
|
158
|
+
animation-fill-mode: both;
|
|
159
|
+
}
|
|
160
|
+
:global([data-scope='drawer'][data-part='content'][data-state='closed']) {
|
|
161
|
+
animation-name: exit;
|
|
162
|
+
animation-duration: 300ms;
|
|
163
|
+
animation-fill-mode: both;
|
|
164
|
+
}
|
|
165
|
+
|
|
103
166
|
:global(
|
|
104
167
|
[data-scope='drawer'][data-part='content']:not([data-swipe-direction])[data-state='open'],
|
|
105
168
|
[data-scope='drawer'][data-part='content'][data-swipe-direction='down'][data-state='open']
|
|
106
169
|
) {
|
|
107
|
-
|
|
170
|
+
--tw-enter-translate-y: 100%;
|
|
108
171
|
}
|
|
109
|
-
|
|
110
172
|
:global(
|
|
111
173
|
[data-scope='drawer'][data-part='content']:not([data-swipe-direction])[data-state='closed'],
|
|
112
174
|
[data-scope='drawer'][data-part='content'][data-swipe-direction='down'][data-state='closed']
|
|
113
175
|
) {
|
|
114
|
-
|
|
176
|
+
--tw-exit-translate-y: 100%;
|
|
115
177
|
}
|
|
116
178
|
|
|
117
|
-
/* Slide animations for top drawer */
|
|
118
179
|
:global(
|
|
119
180
|
[data-scope='drawer'][data-part='content'][data-swipe-direction='up'][data-state='open']
|
|
120
181
|
) {
|
|
121
|
-
|
|
182
|
+
--tw-enter-translate-y: -100%;
|
|
122
183
|
}
|
|
123
|
-
|
|
124
184
|
:global(
|
|
125
185
|
[data-scope='drawer'][data-part='content'][data-swipe-direction='up'][data-state='closed']
|
|
126
186
|
) {
|
|
127
|
-
|
|
187
|
+
--tw-exit-translate-y: -100%;
|
|
128
188
|
}
|
|
129
189
|
|
|
130
|
-
/* Slide animations for left drawer */
|
|
131
190
|
:global(
|
|
132
191
|
[data-scope='drawer'][data-part='content'][data-swipe-direction='left'][data-state='open']
|
|
133
192
|
) {
|
|
134
|
-
|
|
193
|
+
--tw-enter-translate-x: -100%;
|
|
135
194
|
}
|
|
136
|
-
|
|
137
195
|
:global(
|
|
138
196
|
[data-scope='drawer'][data-part='content'][data-swipe-direction='left'][data-state='closed']
|
|
139
197
|
) {
|
|
140
|
-
|
|
198
|
+
--tw-exit-translate-x: -100%;
|
|
141
199
|
}
|
|
142
200
|
|
|
143
|
-
/* Slide animations for right drawer */
|
|
144
201
|
:global(
|
|
145
202
|
[data-scope='drawer'][data-part='content'][data-swipe-direction='right'][data-state='open']
|
|
146
203
|
) {
|
|
147
|
-
|
|
204
|
+
--tw-enter-translate-x: 100%;
|
|
148
205
|
}
|
|
149
|
-
|
|
150
206
|
:global(
|
|
151
207
|
[data-scope='drawer'][data-part='content'][data-swipe-direction='right'][data-state='closed']
|
|
152
208
|
) {
|
|
153
|
-
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
@keyframes slide-in-bottom {
|
|
157
|
-
from {
|
|
158
|
-
transform: translate3d(0, 100%, 0);
|
|
159
|
-
}
|
|
160
|
-
to {
|
|
161
|
-
transform: translate3d(var(--drawer-translate-x, 0), var(--drawer-translate-y, 0), 0);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
@keyframes slide-out-bottom {
|
|
166
|
-
from {
|
|
167
|
-
transform: translate3d(var(--drawer-translate-x, 0), var(--drawer-translate-y, 0), 0);
|
|
168
|
-
}
|
|
169
|
-
to {
|
|
170
|
-
transform: translate3d(0, 100%, 0);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
@keyframes slide-in-top {
|
|
175
|
-
from {
|
|
176
|
-
transform: translate3d(0, -100%, 0);
|
|
177
|
-
}
|
|
178
|
-
to {
|
|
179
|
-
transform: translate3d(var(--drawer-translate-x, 0), var(--drawer-translate-y, 0), 0);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
@keyframes slide-out-top {
|
|
184
|
-
from {
|
|
185
|
-
transform: translate3d(var(--drawer-translate-x, 0), var(--drawer-translate-y, 0), 0);
|
|
186
|
-
}
|
|
187
|
-
to {
|
|
188
|
-
transform: translate3d(0, -100%, 0);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
@keyframes slide-in-left {
|
|
193
|
-
from {
|
|
194
|
-
transform: translate3d(-100%, 0, 0);
|
|
195
|
-
}
|
|
196
|
-
to {
|
|
197
|
-
transform: translate3d(var(--drawer-translate-x, 0), var(--drawer-translate-y, 0), 0);
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
@keyframes slide-out-left {
|
|
202
|
-
from {
|
|
203
|
-
transform: translate3d(var(--drawer-translate-x, 0), var(--drawer-translate-y, 0), 0);
|
|
204
|
-
}
|
|
205
|
-
to {
|
|
206
|
-
transform: translate3d(-100%, 0, 0);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
@keyframes slide-in-right {
|
|
211
|
-
from {
|
|
212
|
-
transform: translate3d(100%, 0, 0);
|
|
213
|
-
}
|
|
214
|
-
to {
|
|
215
|
-
transform: translate3d(var(--drawer-translate-x, 0), var(--drawer-translate-y, 0), 0);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
@keyframes slide-out-right {
|
|
220
|
-
from {
|
|
221
|
-
transform: translate3d(var(--drawer-translate-x, 0), var(--drawer-translate-y, 0), 0);
|
|
222
|
-
}
|
|
223
|
-
to {
|
|
224
|
-
transform: translate3d(100%, 0, 0);
|
|
225
|
-
}
|
|
209
|
+
--tw-exit-translate-x: 100%;
|
|
226
210
|
}
|
|
227
211
|
</style>
|
|
@@ -2,6 +2,10 @@ import type { DrawerContentBaseProps } from '@ark-ui/svelte/drawer';
|
|
|
2
2
|
import type { ClassValue } from 'svelte/elements';
|
|
3
3
|
interface Props extends DrawerContentBaseProps {
|
|
4
4
|
class?: ClassValue;
|
|
5
|
+
backdropClass?: ClassValue;
|
|
6
|
+
positionerClass?: ClassValue;
|
|
7
|
+
maxWidth?: string;
|
|
8
|
+
maxHeight?: string;
|
|
5
9
|
}
|
|
6
10
|
declare const DrawerContent: import("svelte").Component<Props, {}, "">;
|
|
7
11
|
type DrawerContent = ReturnType<typeof DrawerContent>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { Drawer } from '@ark-ui/svelte/drawer';
|
|
3
|
+
import type { DrawerDescriptionBaseProps } from '@ark-ui/svelte/drawer';
|
|
4
|
+
import type { ClassValue } from 'svelte/elements';
|
|
5
|
+
import { cn } from 'tailwind-variants';
|
|
6
|
+
|
|
7
|
+
interface Props extends DrawerDescriptionBaseProps {
|
|
8
|
+
class?: ClassValue;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
let { class: className, children, ...rest }: Props = $props();
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<Drawer.Description {...rest} class={cn('text-sm text-ink-dim', className)}>
|
|
15
|
+
{@render children?.()}
|
|
16
|
+
</Drawer.Description>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DrawerDescriptionBaseProps } from '@ark-ui/svelte/drawer';
|
|
2
|
+
import type { ClassValue } from 'svelte/elements';
|
|
3
|
+
interface Props extends DrawerDescriptionBaseProps {
|
|
4
|
+
class?: ClassValue;
|
|
5
|
+
}
|
|
6
|
+
declare const DrawerDescription: import("svelte").Component<Props, {}, "">;
|
|
7
|
+
type DrawerDescription = ReturnType<typeof DrawerDescription>;
|
|
8
|
+
export default DrawerDescription;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import type { ClassValue } from 'svelte/elements';
|
|
4
|
+
import { cn } from 'tailwind-variants';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
class?: ClassValue;
|
|
8
|
+
children: Snippet;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
let { class: className, children }: Props = $props();
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<div class={cn('flex flex-col p-4 pr-11', className)}>
|
|
15
|
+
{@render children()}
|
|
16
|
+
</div>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { ClassValue } from 'svelte/elements';
|
|
3
|
+
interface Props {
|
|
4
|
+
class?: ClassValue;
|
|
5
|
+
children: Snippet;
|
|
6
|
+
}
|
|
7
|
+
declare const DrawerHeader: import("svelte").Component<Props, {}, "">;
|
|
8
|
+
type DrawerHeader = ReturnType<typeof DrawerHeader>;
|
|
9
|
+
export default DrawerHeader;
|
|
@@ -5,5 +5,7 @@ export { default as Positioner } from './drawer-positioner.svelte';
|
|
|
5
5
|
export { default as Content } from './drawer-content.svelte';
|
|
6
6
|
export { default as Grabber } from './drawer-grabber.svelte';
|
|
7
7
|
export { default as GrabberIndicator } from './drawer-grabber-indicator.svelte';
|
|
8
|
+
export { default as Header } from './drawer-header.svelte';
|
|
8
9
|
export { default as Title } from './drawer-title.svelte';
|
|
10
|
+
export { default as Description } from './drawer-description.svelte';
|
|
9
11
|
export { default as CloseTrigger } from './drawer-close-trigger.svelte';
|
|
@@ -5,5 +5,7 @@ export { default as Positioner } from './drawer-positioner.svelte';
|
|
|
5
5
|
export { default as Content } from './drawer-content.svelte';
|
|
6
6
|
export { default as Grabber } from './drawer-grabber.svelte';
|
|
7
7
|
export { default as GrabberIndicator } from './drawer-grabber-indicator.svelte';
|
|
8
|
+
export { default as Header } from './drawer-header.svelte';
|
|
8
9
|
export { default as Title } from './drawer-title.svelte';
|
|
10
|
+
export { default as Description } from './drawer-description.svelte';
|
|
9
11
|
export { default as CloseTrigger } from './drawer-close-trigger.svelte';
|