drab 2.4.1 → 2.5.0
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/Accordion.svelte +8 -14
- package/dist/components/Accordion.svelte.d.ts +4 -13
- package/dist/components/Chord.svelte +1 -1
- package/dist/components/ContextMenu.svelte +2 -2
- package/dist/components/ContextMenu.svelte.d.ts +1 -1
- package/dist/components/CopyButton.svelte +1 -1
- package/dist/components/CopyButton.svelte.d.ts +1 -1
- package/dist/components/Popover.svelte +2 -2
- package/dist/components/Popover.svelte.d.ts +1 -1
- package/dist/components/ShareButton.svelte +1 -1
- package/dist/components/ShareButton.svelte.d.ts +1 -1
- package/dist/components/Sheet.svelte +166 -0
- package/dist/components/Sheet.svelte.d.ts +80 -0
- package/dist/components/Tabs.svelte +3 -3
- package/dist/components/Tabs.svelte.d.ts +3 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/util/transition.d.ts +1 -0
- package/dist/util/transition.js +1 -0
- package/package.json +1 -1
@@ -17,7 +17,7 @@ Displays a list of `details` elements.
|
|
17
17
|
- `icon`
|
18
18
|
- `id`
|
19
19
|
- `items` - array of `AccordionItem` elements
|
20
|
-
- `transition` - rotates the icon, slides the content,
|
20
|
+
- `transition` - rotates the icon, slides the content, set to `false` to remove
|
21
21
|
|
22
22
|
@slots
|
23
23
|
|
@@ -31,9 +31,8 @@ Displays a list of `details` elements.
|
|
31
31
|
|
32
32
|
```svelte
|
33
33
|
<script>
|
34
|
-
|
35
|
-
|
36
|
-
import Chevron from "../../site/svg/Chevron.svelte";
|
34
|
+
import { Accordion } from "drab";
|
35
|
+
import { Chevron } from "../../site/svg/Chevron.svelte";
|
37
36
|
</script>
|
38
37
|
|
39
38
|
<Accordion
|
@@ -52,11 +51,6 @@ Displays a list of `details` elements.
|
|
52
51
|
content: "Yes, with the transition prop.",
|
53
52
|
},
|
54
53
|
{ summary: "Does it work without Javascript?", content: "Yes." },
|
55
|
-
{
|
56
|
-
summary: "Component",
|
57
|
-
content: "Rendered only on this item.",
|
58
|
-
data: { component: FullscreenButton },
|
59
|
-
},
|
60
54
|
]}
|
61
55
|
>
|
62
56
|
<svelte:fragment slot="content" let:item let:index>
|
@@ -64,9 +58,6 @@ Displays a list of `details` elements.
|
|
64
58
|
<span>{index + 1}.</span>
|
65
59
|
<span>{item.content}</span>
|
66
60
|
</div>
|
67
|
-
{#if item.data?.component}
|
68
|
-
<svelte:component class="btn" this={item.data.component} />
|
69
|
-
{/if}
|
70
61
|
</svelte:fragment>
|
71
62
|
</Accordion>
|
72
63
|
```
|
@@ -77,6 +68,7 @@ Displays a list of `details` elements.
|
|
77
68
|
<script>import { onMount } from "svelte";
|
78
69
|
import { slide } from "svelte/transition";
|
79
70
|
import { prefersReducedMotion } from "../util/accessibility";
|
71
|
+
import { duration } from "../util/transition";
|
80
72
|
let className = "";
|
81
73
|
export { className as class };
|
82
74
|
export let id = "";
|
@@ -87,7 +79,8 @@ export let classHeader = "";
|
|
87
79
|
export let classSummary = "";
|
88
80
|
export let classContent = "";
|
89
81
|
export let classIcon = "";
|
90
|
-
export let transition = {};
|
82
|
+
export let transition = { duration };
|
83
|
+
const cssDuration = transition ? transition.duration : 0;
|
91
84
|
export let autoClose = true;
|
92
85
|
let clientJs = false;
|
93
86
|
const toggleOpen = (i) => {
|
@@ -133,6 +126,7 @@ onMount(() => {
|
|
133
126
|
class={classIcon}
|
134
127
|
class:d-rotate-180={item.open}
|
135
128
|
class:d-transition={transition}
|
129
|
+
style="--duration: {cssDuration}ms;"
|
136
130
|
>
|
137
131
|
{#if typeof icon !== "string"}
|
138
132
|
<svelte:component this={icon} />
|
@@ -171,6 +165,6 @@ onMount(() => {
|
|
171
165
|
.d-transition {
|
172
166
|
transition-property: transform;
|
173
167
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
174
|
-
transition-duration:
|
168
|
+
transition-duration: var(--duration);
|
175
169
|
}
|
176
170
|
</style>
|
@@ -22,7 +22,7 @@ declare const __propDef: {
|
|
22
22
|
/** class of all the `div`s that wrap the `summary` slot */ classSummary?: string | undefined;
|
23
23
|
/** class of all the `div`s that wrap the `content` slot */ classContent?: string | undefined;
|
24
24
|
/** class of the `div` that wrap the icon if displayed */ classIcon?: string | undefined;
|
25
|
-
/** rotates the icon, slides the content,
|
25
|
+
/** rotates the icon, slides the content, set to `false` to remove */ transition?: false | SlideParams | undefined;
|
26
26
|
/** if `true`, other items close when a new one is opened */ autoClose?: boolean | undefined;
|
27
27
|
};
|
28
28
|
events: {
|
@@ -63,7 +63,7 @@ export type AccordionSlots = typeof __propDef.slots;
|
|
63
63
|
* - `icon`
|
64
64
|
* - `id`
|
65
65
|
* - `items` - array of `AccordionItem` elements
|
66
|
-
* - `transition` - rotates the icon, slides the content,
|
66
|
+
* - `transition` - rotates the icon, slides the content, set to `false` to remove
|
67
67
|
*
|
68
68
|
* @slots
|
69
69
|
*
|
@@ -77,9 +77,8 @@ export type AccordionSlots = typeof __propDef.slots;
|
|
77
77
|
*
|
78
78
|
* ```svelte
|
79
79
|
* <script>
|
80
|
-
*
|
81
|
-
*
|
82
|
-
* import Chevron from "../../site/svg/Chevron.svelte";
|
80
|
+
* import { Accordion } from "drab";
|
81
|
+
* import { Chevron } from "../../site/svg/Chevron.svelte";
|
83
82
|
* </script>
|
84
83
|
*
|
85
84
|
* <Accordion
|
@@ -98,11 +97,6 @@ export type AccordionSlots = typeof __propDef.slots;
|
|
98
97
|
* content: "Yes, with the transition prop.",
|
99
98
|
* },
|
100
99
|
* { summary: "Does it work without Javascript?", content: "Yes." },
|
101
|
-
* {
|
102
|
-
* summary: "Component",
|
103
|
-
* content: "Rendered only on this item.",
|
104
|
-
* data: { component: FullscreenButton },
|
105
|
-
* },
|
106
100
|
* ]}
|
107
101
|
* >
|
108
102
|
* <svelte:fragment slot="content" let:item let:index>
|
@@ -110,9 +104,6 @@ export type AccordionSlots = typeof __propDef.slots;
|
|
110
104
|
* <span>{index + 1}.</span>
|
111
105
|
* <span>{item.content}</span>
|
112
106
|
* </div>
|
113
|
-
* {#if item.data?.component}
|
114
|
-
* <svelte:component class="btn" this={item.data.component} />
|
115
|
-
* {/if}
|
116
107
|
* </svelte:fragment>
|
117
108
|
* </Accordion>
|
118
109
|
* ```
|
@@ -22,7 +22,7 @@ Displays when the parent element is right clicked.
|
|
22
22
|
|
23
23
|
```svelte
|
24
24
|
<script>
|
25
|
-
|
25
|
+
import { ContextMenu } from "drab";
|
26
26
|
</script>
|
27
27
|
|
28
28
|
<div class="flex justify-center rounded border border-dashed p-12">
|
@@ -81,7 +81,7 @@ onMount(() => {
|
|
81
81
|
});
|
82
82
|
</script>
|
83
83
|
|
84
|
-
<svelte:
|
84
|
+
<svelte:body on:click={hide} on:keydown={onKeyDown} />
|
85
85
|
|
86
86
|
<div
|
87
87
|
class={className}
|
@@ -38,7 +38,7 @@ export type ContextMenuSlots = typeof __propDef.slots;
|
|
38
38
|
*
|
39
39
|
* ```svelte
|
40
40
|
* <script>
|
41
|
-
*
|
41
|
+
* import { ContextMenu } from "drab";
|
42
42
|
* </script>
|
43
43
|
*
|
44
44
|
* <div class="flex justify-center rounded border border-dashed p-12">
|
@@ -28,7 +28,7 @@ Displays a popover relatively positioned to the button.
|
|
28
28
|
|
29
29
|
```svelte
|
30
30
|
<script>
|
31
|
-
|
31
|
+
import { Popover } from "drab";
|
32
32
|
</script>
|
33
33
|
|
34
34
|
<Popover classButton="btn" classPopover="p-2 transition">
|
@@ -123,7 +123,7 @@ onMount(() => {
|
|
123
123
|
});
|
124
124
|
</script>
|
125
125
|
|
126
|
-
<svelte:
|
126
|
+
<svelte:body on:keydown={onKeyDown} on:click={clickOutside} />
|
127
127
|
|
128
128
|
<div class="db-relative {className}" {id}>
|
129
129
|
<button
|
@@ -0,0 +1,166 @@
|
|
1
|
+
<!--
|
2
|
+
@component
|
3
|
+
|
4
|
+
### Sheet
|
5
|
+
|
6
|
+
Creates a sheet element based on the `position` provided.
|
7
|
+
|
8
|
+
@props
|
9
|
+
|
10
|
+
- `classSheet` - sheet class - not the backdrop
|
11
|
+
- `class`
|
12
|
+
- `display` - controls whether the sheet is displayed
|
13
|
+
- `id`
|
14
|
+
- `position` - determines the position of sheet
|
15
|
+
- `size` - size of sheet based on position - can also use css instead
|
16
|
+
- `transitionSheet` - slides the sheet, set to `false` to remove
|
17
|
+
- `transition` - fades the entire component, set to `false` to remove
|
18
|
+
|
19
|
+
@slots
|
20
|
+
|
21
|
+
| name | purpose | default value |
|
22
|
+
| ---------- | ------------------------------- | ------------- |
|
23
|
+
| `default` | content | `Content` |
|
24
|
+
|
25
|
+
@example
|
26
|
+
|
27
|
+
```svelte
|
28
|
+
<script lang="ts">
|
29
|
+
import { Sheet } from "drab";
|
30
|
+
|
31
|
+
let display = false;
|
32
|
+
</script>
|
33
|
+
|
34
|
+
<div>
|
35
|
+
<button class="btn" on:click={() => (display = true)}>Open</button>
|
36
|
+
</div>
|
37
|
+
|
38
|
+
<Sheet
|
39
|
+
bind:display
|
40
|
+
class="bg-gray-50/80 backdrop-blur"
|
41
|
+
classSheet="p-4 shadow bg-white"
|
42
|
+
>
|
43
|
+
<div class="mb-4 flex items-center justify-between">
|
44
|
+
<div class="text-lg font-bold">Sheet</div>
|
45
|
+
<button class="btn" on:click={() => (display = false)}>Close</button>
|
46
|
+
</div>
|
47
|
+
<div>
|
48
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
|
49
|
+
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
|
50
|
+
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
|
51
|
+
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
|
52
|
+
cillum dolore eu fugiat nulla pariatur.
|
53
|
+
</div>
|
54
|
+
</Sheet>
|
55
|
+
```
|
56
|
+
-->
|
57
|
+
|
58
|
+
<script>import { onMount } from "svelte";
|
59
|
+
import {
|
60
|
+
fade,
|
61
|
+
fly
|
62
|
+
} from "svelte/transition";
|
63
|
+
import { prefersReducedMotion } from "../util/accessibility";
|
64
|
+
import { duration } from "../util/transition";
|
65
|
+
let className = "";
|
66
|
+
export { className as class };
|
67
|
+
export let id = "";
|
68
|
+
export let classSheet = "";
|
69
|
+
export let display = true;
|
70
|
+
export let transition = { duration };
|
71
|
+
export let position = "right";
|
72
|
+
export let size = 488;
|
73
|
+
export let transitionSheet = { duration };
|
74
|
+
let sheet;
|
75
|
+
const clickOutside = (e) => {
|
76
|
+
if (e.target instanceof Node && !sheet.contains(e.target)) {
|
77
|
+
display = false;
|
78
|
+
}
|
79
|
+
};
|
80
|
+
const onKeyDown = (e) => {
|
81
|
+
if (e.key === "Escape") {
|
82
|
+
display = false;
|
83
|
+
}
|
84
|
+
};
|
85
|
+
if (transitionSheet && !transitionSheet.x && !transitionSheet.y) {
|
86
|
+
if (position === "bottom") {
|
87
|
+
transitionSheet.y = size;
|
88
|
+
} else if (position === "top") {
|
89
|
+
transitionSheet.y = -size;
|
90
|
+
} else if (position === "right") {
|
91
|
+
transitionSheet.x = size;
|
92
|
+
} else {
|
93
|
+
transitionSheet.x = -size;
|
94
|
+
}
|
95
|
+
}
|
96
|
+
onMount(() => {
|
97
|
+
if (prefersReducedMotion()) {
|
98
|
+
if (transition)
|
99
|
+
transition.duration = 0;
|
100
|
+
if (transitionSheet)
|
101
|
+
transitionSheet.duration = 0;
|
102
|
+
}
|
103
|
+
});
|
104
|
+
</script>
|
105
|
+
|
106
|
+
<svelte:body on:keydown={onKeyDown} />
|
107
|
+
|
108
|
+
{#if display}
|
109
|
+
<div
|
110
|
+
role="button"
|
111
|
+
tabindex="0"
|
112
|
+
on:click={clickOutside}
|
113
|
+
on:keydown={onKeyDown}
|
114
|
+
transition:fade={transition ? transition : { duration: 0 }}
|
115
|
+
class="d-backdrop {className}"
|
116
|
+
{id}
|
117
|
+
>
|
118
|
+
<div
|
119
|
+
bind:this={sheet}
|
120
|
+
transition:fly={transitionSheet ? transitionSheet : { duration: 0 }}
|
121
|
+
style={position === "top" || position === "bottom"
|
122
|
+
? `max-height: ${size}px;`
|
123
|
+
: `max-width: ${size}px`}
|
124
|
+
class="d-sheet {classSheet}"
|
125
|
+
class:d-bottom={position === "bottom"}
|
126
|
+
class:d-top={position === "top"}
|
127
|
+
class:d-left={position === "left"}
|
128
|
+
class:d-right={position === "right"}
|
129
|
+
>
|
130
|
+
<slot>Content</slot>
|
131
|
+
</div>
|
132
|
+
</div>
|
133
|
+
{/if}
|
134
|
+
|
135
|
+
<style>
|
136
|
+
.d-backdrop {
|
137
|
+
position: fixed;
|
138
|
+
display: grid;
|
139
|
+
z-index: 10;
|
140
|
+
top: 0;
|
141
|
+
bottom: 0;
|
142
|
+
left: 0;
|
143
|
+
right: 0;
|
144
|
+
overflow: hidden;
|
145
|
+
cursor: default;
|
146
|
+
}
|
147
|
+
.d-sheet {
|
148
|
+
margin: auto;
|
149
|
+
}
|
150
|
+
.d-bottom {
|
151
|
+
margin-bottom: 0;
|
152
|
+
width: 100%;
|
153
|
+
}
|
154
|
+
.d-top {
|
155
|
+
margin-top: 0;
|
156
|
+
width: 100%;
|
157
|
+
}
|
158
|
+
.d-right {
|
159
|
+
margin-right: 0;
|
160
|
+
height: 100%;
|
161
|
+
}
|
162
|
+
.d-left {
|
163
|
+
margin-left: 0;
|
164
|
+
height: 100%;
|
165
|
+
}
|
166
|
+
</style>
|
@@ -0,0 +1,80 @@
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
2
|
+
import { type FadeParams, type FlyParams } from "svelte/transition";
|
3
|
+
declare const __propDef: {
|
4
|
+
props: {
|
5
|
+
class?: string | undefined;
|
6
|
+
id?: string | undefined;
|
7
|
+
/** sheet class - not the backdrop */ classSheet?: string | undefined;
|
8
|
+
/** controls whether the sheet is displayed*/ display?: boolean | undefined;
|
9
|
+
/** fades the entire component, set to `false` to remove */ transition?: false | FadeParams | undefined;
|
10
|
+
/** determines the position of sheet */ position?: "top" | "bottom" | "left" | "right" | undefined;
|
11
|
+
/** size of sheet based on position - can also use css instead */ size?: number | undefined;
|
12
|
+
/** slides the sheet, set to `false` to remove */ transitionSheet?: false | FlyParams | undefined;
|
13
|
+
};
|
14
|
+
events: {
|
15
|
+
[evt: string]: CustomEvent<any>;
|
16
|
+
};
|
17
|
+
slots: {
|
18
|
+
default: {};
|
19
|
+
};
|
20
|
+
};
|
21
|
+
export type SheetProps = typeof __propDef.props;
|
22
|
+
export type SheetEvents = typeof __propDef.events;
|
23
|
+
export type SheetSlots = typeof __propDef.slots;
|
24
|
+
/**
|
25
|
+
* ### Sheet
|
26
|
+
*
|
27
|
+
* Creates a sheet element based on the `position` provided.
|
28
|
+
*
|
29
|
+
* @props
|
30
|
+
*
|
31
|
+
* - `classSheet` - sheet class - not the backdrop
|
32
|
+
* - `class`
|
33
|
+
* - `display` - controls whether the sheet is displayed
|
34
|
+
* - `id`
|
35
|
+
* - `position` - determines the position of sheet
|
36
|
+
* - `size` - size of sheet based on position - can also use css instead
|
37
|
+
* - `transitionSheet` - slides the sheet, set to `false` to remove
|
38
|
+
* - `transition` - fades the entire component, set to `false` to remove
|
39
|
+
*
|
40
|
+
* @slots
|
41
|
+
*
|
42
|
+
* | name | purpose | default value |
|
43
|
+
* | ---------- | ------------------------------- | ------------- |
|
44
|
+
* | `default` | content | `Content` |
|
45
|
+
*
|
46
|
+
* @example
|
47
|
+
*
|
48
|
+
* ```svelte
|
49
|
+
* <script lang="ts">
|
50
|
+
* import { Sheet } from "drab";
|
51
|
+
*
|
52
|
+
* let display = false;
|
53
|
+
* </script>
|
54
|
+
*
|
55
|
+
* <div>
|
56
|
+
* <button class="btn" on:click={() => (display = true)}>Open</button>
|
57
|
+
* </div>
|
58
|
+
*
|
59
|
+
* <Sheet
|
60
|
+
* bind:display
|
61
|
+
* class="bg-gray-50/80 backdrop-blur"
|
62
|
+
* classSheet="p-4 shadow bg-white"
|
63
|
+
* >
|
64
|
+
* <div class="mb-4 flex items-center justify-between">
|
65
|
+
* <div class="text-lg font-bold">Sheet</div>
|
66
|
+
* <button class="btn" on:click={() => (display = false)}>Close</button>
|
67
|
+
* </div>
|
68
|
+
* <div>
|
69
|
+
* Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
|
70
|
+
* tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
|
71
|
+
* quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
|
72
|
+
* consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
|
73
|
+
* cillum dolore eu fugiat nulla pariatur.
|
74
|
+
* </div>
|
75
|
+
* </Sheet>
|
76
|
+
* ```
|
77
|
+
*/
|
78
|
+
export default class Sheet extends SvelteComponent<SheetProps, SheetEvents, SheetSlots> {
|
79
|
+
}
|
80
|
+
export {};
|
@@ -29,8 +29,8 @@ Displays tabs and the active tab's content.
|
|
29
29
|
|
30
30
|
```svelte
|
31
31
|
<script>
|
32
|
-
|
33
|
-
import FullscreenButton from "
|
32
|
+
import { Tabs } from "drab";
|
33
|
+
import { FullscreenButton } from "drab";
|
34
34
|
</script>
|
35
35
|
|
36
36
|
<Tabs
|
@@ -67,7 +67,7 @@ Displays tabs and the active tab's content.
|
|
67
67
|
</svelte:fragment>
|
68
68
|
<div>{activeTab.content}</div>
|
69
69
|
{#if activeTab.data?.component}
|
70
|
-
<svelte:component
|
70
|
+
<svelte:component this={activeTab.data.component} class="btn" />
|
71
71
|
{/if}
|
72
72
|
</Tabs>
|
73
73
|
```
|
@@ -65,8 +65,8 @@ export type TabsSlots = typeof __propDef.slots;
|
|
65
65
|
*
|
66
66
|
* ```svelte
|
67
67
|
* <script>
|
68
|
-
*
|
69
|
-
* import FullscreenButton from "
|
68
|
+
* import { Tabs } from "drab";
|
69
|
+
* import { FullscreenButton } from "drab";
|
70
70
|
* </script>
|
71
71
|
*
|
72
72
|
* <Tabs
|
@@ -103,7 +103,7 @@ export type TabsSlots = typeof __propDef.slots;
|
|
103
103
|
* </svelte:fragment>
|
104
104
|
* <div>{activeTab.content}</div>
|
105
105
|
* {#if activeTab.data?.component}
|
106
|
-
* <svelte:component
|
106
|
+
* <svelte:component this={activeTab.data.component} class="btn" />
|
107
107
|
* {/if}
|
108
108
|
* </Tabs>
|
109
109
|
* ```
|
package/dist/index.d.ts
CHANGED
@@ -11,7 +11,8 @@ import type { EditorContentElement } from "./components/Editor.svelte";
|
|
11
11
|
import FullscreenButton from "./components/FullscreenButton.svelte";
|
12
12
|
import Popover from "./components/Popover.svelte";
|
13
13
|
import ShareButton from "./components/ShareButton.svelte";
|
14
|
+
import Sheet from "./components/Sheet.svelte";
|
14
15
|
import Tabs from "./components/Tabs.svelte";
|
15
16
|
import type { TabsTab } from "./components/Tabs.svelte";
|
16
17
|
import YouTube from "./components/YouTube.svelte";
|
17
|
-
export { Accordion, type AccordionItem, Chord, type ChordNote, ContextMenu, CopyButton, DataTable, type DataTableRow, Editor, type EditorContentElement, FullscreenButton, Popover, ShareButton, Tabs, type TabsTab, YouTube, };
|
18
|
+
export { Accordion, type AccordionItem, Chord, type ChordNote, ContextMenu, CopyButton, DataTable, type DataTableRow, Editor, type EditorContentElement, FullscreenButton, Popover, ShareButton, Sheet, Tabs, type TabsTab, YouTube, };
|
package/dist/index.js
CHANGED
@@ -7,6 +7,7 @@ import Editor from "./components/Editor.svelte";
|
|
7
7
|
import FullscreenButton from "./components/FullscreenButton.svelte";
|
8
8
|
import Popover from "./components/Popover.svelte";
|
9
9
|
import ShareButton from "./components/ShareButton.svelte";
|
10
|
+
import Sheet from "./components/Sheet.svelte";
|
10
11
|
import Tabs from "./components/Tabs.svelte";
|
11
12
|
import YouTube from "./components/YouTube.svelte";
|
12
|
-
export { Accordion, Chord, ContextMenu, CopyButton, DataTable, Editor, FullscreenButton, Popover, ShareButton, Tabs, YouTube, };
|
13
|
+
export { Accordion, Chord, ContextMenu, CopyButton, DataTable, Editor, FullscreenButton, Popover, ShareButton, Sheet, Tabs, YouTube, };
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const duration = 200;
|
@@ -0,0 +1 @@
|
|
1
|
+
export const duration = 200;
|