arvue-ui 0.1.0 → 0.3.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.
Files changed (143) hide show
  1. package/dist/all.css +1 -1
  2. package/dist/autocomplete/autocomplete.js +52 -0
  3. package/dist/autocomplete/autocomplete.js.map +1 -0
  4. package/dist/autocomplete/autocompleteAnchor.js +24 -0
  5. package/dist/autocomplete/autocompleteAnchor.js.map +1 -0
  6. package/dist/autocomplete/autocompleteArrow.js +26 -0
  7. package/dist/autocomplete/autocompleteArrow.js.map +1 -0
  8. package/dist/autocomplete/autocompleteCancel.js +23 -0
  9. package/dist/autocomplete/autocompleteCancel.js.map +1 -0
  10. package/dist/autocomplete/autocompleteContent.js +77 -0
  11. package/dist/autocomplete/autocompleteContent.js.map +1 -0
  12. package/dist/autocomplete/autocompleteEmpty.js +33 -0
  13. package/dist/autocomplete/autocompleteEmpty.js.map +1 -0
  14. package/dist/autocomplete/autocompleteGroup.js +23 -0
  15. package/dist/autocomplete/autocompleteGroup.js.map +1 -0
  16. package/dist/autocomplete/autocompleteInput.js +65 -0
  17. package/dist/autocomplete/autocompleteInput.js.map +1 -0
  18. package/dist/autocomplete/autocompleteItem.js +36 -0
  19. package/dist/autocomplete/autocompleteItem.js.map +1 -0
  20. package/dist/autocomplete/autocompleteLabel.js +34 -0
  21. package/dist/autocomplete/autocompleteLabel.js.map +1 -0
  22. package/dist/autocomplete/autocompletePortal.js +25 -0
  23. package/dist/autocomplete/autocompletePortal.js.map +1 -0
  24. package/dist/autocomplete/autocompleteSeparator.js +33 -0
  25. package/dist/autocomplete/autocompleteSeparator.js.map +1 -0
  26. package/dist/autocomplete/autocompleteTrigger.js +24 -0
  27. package/dist/autocomplete/autocompleteTrigger.js.map +1 -0
  28. package/dist/autocomplete/autocompleteViewport.js +24 -0
  29. package/dist/autocomplete/autocompleteViewport.js.map +1 -0
  30. package/dist/dialog/dialogContent.js +2 -2
  31. package/dist/dialog/dialogDescription.js +7 -5
  32. package/dist/dialog/dialogDescription.js.map +1 -1
  33. package/dist/dialog/dialogFooter.js +16 -10
  34. package/dist/dialog/dialogFooter.js.map +1 -1
  35. package/dist/dialog/dialogHeader.js +16 -10
  36. package/dist/dialog/dialogHeader.js.map +1 -1
  37. package/dist/dialog/dialogOverlay.js +1 -1
  38. package/dist/dialog/dialogTitle.js +7 -5
  39. package/dist/dialog/dialogTitle.js.map +1 -1
  40. package/dist/drawer/drawer.js +32 -0
  41. package/dist/drawer/drawer.js.map +1 -0
  42. package/dist/drawer/drawerClose.js +23 -0
  43. package/dist/drawer/drawerClose.js.map +1 -0
  44. package/dist/drawer/drawerContent.js +108 -0
  45. package/dist/drawer/drawerContent.js.map +1 -0
  46. package/dist/drawer/drawerDescription.js +33 -0
  47. package/dist/drawer/drawerDescription.js.map +1 -0
  48. package/dist/drawer/drawerFooter.js +33 -0
  49. package/dist/drawer/drawerFooter.js.map +1 -0
  50. package/dist/drawer/drawerHeader.js +33 -0
  51. package/dist/drawer/drawerHeader.js.map +1 -0
  52. package/dist/drawer/drawerOverlay.js +34 -0
  53. package/dist/drawer/drawerOverlay.js.map +1 -0
  54. package/dist/drawer/drawerTitle.js +33 -0
  55. package/dist/drawer/drawerTitle.js.map +1 -0
  56. package/dist/drawer/drawerTrigger.js +23 -0
  57. package/dist/drawer/drawerTrigger.js.map +1 -0
  58. package/dist/index.d.ts +577 -31
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +1109 -125
  61. package/dist/index.js.map +1 -1
  62. package/dist/sheet/sheet.js +54 -0
  63. package/dist/sheet/sheet.js.map +1 -0
  64. package/dist/sheet/sheetClose.js +23 -0
  65. package/dist/sheet/sheetClose.js.map +1 -0
  66. package/dist/sheet/sheetContent.js +61 -0
  67. package/dist/sheet/sheetContent.js.map +1 -0
  68. package/dist/sheet/sheetDescription.js +33 -0
  69. package/dist/sheet/sheetDescription.js.map +1 -0
  70. package/dist/sheet/sheetFooter.js +33 -0
  71. package/dist/sheet/sheetFooter.js.map +1 -0
  72. package/dist/sheet/sheetHeader.js +33 -0
  73. package/dist/sheet/sheetHeader.js.map +1 -0
  74. package/dist/sheet/sheetOverlay.js +34 -0
  75. package/dist/sheet/sheetOverlay.js.map +1 -0
  76. package/dist/sheet/sheetTitle.js +33 -0
  77. package/dist/sheet/sheetTitle.js.map +1 -0
  78. package/dist/sheet/sheetTrigger.js +23 -0
  79. package/dist/sheet/sheetTrigger.js.map +1 -0
  80. package/dist/style.css +36 -0
  81. package/package.json +10 -4
  82. package/src/autocomplete/Autocomplete.vue +36 -0
  83. package/src/autocomplete/AutocompleteAnchor.vue +17 -0
  84. package/src/autocomplete/AutocompleteArrow.vue +17 -0
  85. package/src/autocomplete/AutocompleteCancel.vue +17 -0
  86. package/src/autocomplete/AutocompleteContent.vue +45 -0
  87. package/src/autocomplete/AutocompleteEmpty.vue +31 -0
  88. package/src/autocomplete/AutocompleteGroup.vue +17 -0
  89. package/src/autocomplete/AutocompleteInput.vue +63 -0
  90. package/src/autocomplete/AutocompleteItem.vue +32 -0
  91. package/src/autocomplete/AutocompleteLabel.vue +31 -0
  92. package/src/autocomplete/AutocompletePortal.vue +17 -0
  93. package/src/autocomplete/AutocompleteSeparator.vue +31 -0
  94. package/src/autocomplete/AutocompleteTrigger.vue +17 -0
  95. package/src/autocomplete/AutocompleteViewport.vue +17 -0
  96. package/src/autocomplete/autocomplete-content.css +7 -0
  97. package/src/autocomplete/autocomplete-empty.css +7 -0
  98. package/src/autocomplete/autocomplete-item.css +14 -0
  99. package/src/autocomplete/autocomplete-label.css +6 -0
  100. package/src/autocomplete/autocomplete-separator.css +5 -0
  101. package/src/autocomplete/autocomplete.css +4 -0
  102. package/src/autocomplete/index.ts +60 -0
  103. package/src/dialog/DialogDescription.vue +13 -5
  104. package/src/dialog/DialogFooter.vue +9 -2
  105. package/src/dialog/DialogHeader.vue +9 -2
  106. package/src/dialog/DialogTitle.vue +13 -5
  107. package/src/dialog/dialog-content.css +1 -1
  108. package/src/dialog/dialog-description.css +2 -0
  109. package/src/dialog/dialog-overlay.css +1 -1
  110. package/src/dialog/dialog-title.css +1 -3
  111. package/src/drawer/Drawer.vue +27 -0
  112. package/src/drawer/DrawerClose.vue +19 -0
  113. package/src/drawer/DrawerContent.vue +99 -0
  114. package/src/drawer/DrawerDescription.vue +33 -0
  115. package/src/drawer/DrawerFooter.vue +31 -0
  116. package/src/drawer/DrawerHeader.vue +31 -0
  117. package/src/drawer/DrawerOverlay.vue +31 -0
  118. package/src/drawer/DrawerTitle.vue +33 -0
  119. package/src/drawer/DrawerTrigger.vue +17 -0
  120. package/src/drawer/drawer-content.css +68 -0
  121. package/src/drawer/drawer-description.css +5 -0
  122. package/src/drawer/drawer-footer.css +11 -0
  123. package/src/drawer/drawer-header.css +6 -0
  124. package/src/drawer/drawer-overlay.css +12 -0
  125. package/src/drawer/drawer-title.css +3 -0
  126. package/src/drawer/index.ts +38 -0
  127. package/src/index.ts +3 -0
  128. package/src/sheet/Sheet.vue +29 -0
  129. package/src/sheet/SheetClose.vue +19 -0
  130. package/src/sheet/SheetContent.vue +53 -0
  131. package/src/sheet/SheetDescription.vue +33 -0
  132. package/src/sheet/SheetFooter.vue +31 -0
  133. package/src/sheet/SheetHeader.vue +31 -0
  134. package/src/sheet/SheetOverlay.vue +31 -0
  135. package/src/sheet/SheetTitle.vue +33 -0
  136. package/src/sheet/SheetTrigger.vue +17 -0
  137. package/src/sheet/index.ts +38 -0
  138. package/src/sheet/sheet-content.css +67 -0
  139. package/src/sheet/sheet-description.css +5 -0
  140. package/src/sheet/sheet-footer.css +11 -0
  141. package/src/sheet/sheet-header.css +6 -0
  142. package/src/sheet/sheet-overlay.css +12 -0
  143. package/src/sheet/sheet-title.css +3 -0
@@ -4,7 +4,7 @@
4
4
  right: 0;
5
5
  bottom: 0;
6
6
  left: 0;
7
- z-index: 5;
7
+ z-index: 1055;
8
8
  width: 100%;
9
9
  height: 100%;
10
10
  box-sizing: border-box;
@@ -1,5 +1,3 @@
1
1
  .arvue-dialog-title {
2
- font-size: 1.5rem;
3
- font-weight: bold;
4
- color: var(--text-color-stronger);
2
+ margin: 0;
5
3
  }
@@ -0,0 +1,27 @@
1
+ <template>
2
+ <DialogRoot
3
+ v-slot="slotProps"
4
+ v-bind="forwarded"
5
+ >
6
+ <slot v-bind="slotProps"/>
7
+ </DialogRoot>
8
+ </template>
9
+
10
+ <script lang="ts">
11
+ import type { DialogRootEmits, DialogRootProps } from 'reka-ui'
12
+ import type { HTMLAttributes } from 'vue'
13
+
14
+ export interface DrawerProps extends DialogRootProps {
15
+ class?: HTMLAttributes['class']
16
+ }
17
+ export interface DrawerEmits extends DialogRootEmits {}
18
+ </script>
19
+
20
+ <script setup lang="ts">
21
+ import { DialogRoot, useForwardPropsEmits } from 'reka-ui'
22
+
23
+ const props = defineProps<DrawerProps>()
24
+ const emits = defineEmits<DrawerEmits>()
25
+
26
+ const forwarded = useForwardPropsEmits(props, emits)
27
+ </script>
@@ -0,0 +1,19 @@
1
+ <template>
2
+ <DialogClose v-bind="props">
3
+ <slot/>
4
+ </DialogClose>
5
+ </template>
6
+
7
+ <script lang="ts">
8
+ import type { DialogCloseProps } from 'reka-ui'
9
+
10
+ export interface DrawerCloseProps extends DialogCloseProps {}
11
+ </script>
12
+
13
+ <script setup lang="ts">
14
+ import { DialogClose } from 'reka-ui'
15
+
16
+ const props = withDefaults(defineProps<DrawerCloseProps>(), {
17
+ as: 'a',
18
+ })
19
+ </script>
@@ -0,0 +1,99 @@
1
+ <style>
2
+ @import './drawer-content.css';
3
+ </style>
4
+
5
+ <template>
6
+ <DialogPortal>
7
+ <AnimatePresence as="div">
8
+ <DrawerOverlay as-child>
9
+ <Motion
10
+ :initial="{ opacity: 0 }"
11
+ :animate="{ opacity: 1 }"
12
+ :exit="{ opacity: 0 }"
13
+ :transition="{
14
+ duration: .3,
15
+ ease: 'easeInOut',
16
+ }"
17
+ />
18
+ </DrawerOverlay>
19
+ <DialogContent
20
+ :class="clsx(
21
+ 'arvue-drawer-content',
22
+ side === 'top' && 'top',
23
+ side === 'right' && 'right',
24
+ side === 'bottom' && 'bottom',
25
+ side === 'left' && 'left',
26
+ props.class,
27
+ )"
28
+ v-bind="{ ...$attrs, ...forwarded }"
29
+ as-child
30
+ >
31
+ <Motion
32
+ v-bind="motionProps"
33
+ :transition="{
34
+ duration: .3,
35
+ ease: 'easeIn',
36
+ }"
37
+ >
38
+ <slot/>
39
+ <DrawerClose
40
+ v-if="showCloseButton"
41
+ class="arvue-drawer-close-button icon"
42
+ >
43
+ <i class="fas fa-times"/>
44
+ </DrawerClose>
45
+ </Motion>
46
+ </DialogContent>
47
+ </AnimatePresence>
48
+ </DialogPortal>
49
+ </template>
50
+
51
+ <script lang="ts">
52
+ import type { DialogContentEmits, DialogContentProps } from 'reka-ui'
53
+ import type { HTMLAttributes } from 'vue'
54
+
55
+ export interface DrawerContentEmits extends DialogContentEmits {
56
+ }
57
+
58
+ export interface DrawerContentProps extends DialogContentProps {
59
+ class?: HTMLAttributes['class']
60
+ side?: 'top' | 'right' | 'bottom' | 'left'
61
+ showCloseButton?: boolean
62
+ }
63
+ </script>
64
+
65
+ <script setup lang="ts">
66
+ import { reactiveOmit } from '@vueuse/core'
67
+ import { clsx } from 'clsx'
68
+ import { AnimatePresence, Motion } from 'motion-v'
69
+ import {
70
+ DialogContent,
71
+ DialogPortal,
72
+ useForwardPropsEmits,
73
+ } from 'reka-ui'
74
+ import { computed } from 'vue'
75
+ import { DrawerClose, DrawerOverlay } from '.'
76
+
77
+ defineOptions({
78
+ inheritAttrs: false,
79
+ })
80
+
81
+ const props = withDefaults(defineProps<DrawerContentProps>(), {
82
+ side: 'right',
83
+ showCloseButton: true,
84
+ })
85
+ const emits = defineEmits<DrawerContentEmits>()
86
+
87
+ const delegatedProps = reactiveOmit(props, 'class', 'side')
88
+
89
+ const forwarded = useForwardPropsEmits(delegatedProps, emits)
90
+
91
+ const sideMotion = {
92
+ top: { initial: { y: '-100%' }, animate: { y: 0 }, exit: { y: '-100%' } },
93
+ bottom: { initial: { y: '100%' }, animate: { y: 0 }, exit: { y: '100%' } },
94
+ left: { initial: { x: '-100%' }, animate: { x: 0 }, exit: { x: '-100%' } },
95
+ right: { initial: { x: '100%' }, animate: { x: 0 }, exit: { x: '100%' } },
96
+ } satisfies Record<NonNullable<DrawerContentProps['side']>, object>
97
+
98
+ const motionProps = computed(() => sideMotion[props.side])
99
+ </script>
@@ -0,0 +1,33 @@
1
+ <style>
2
+ @import "./drawer-description.css";
3
+ </style>
4
+
5
+ <template>
6
+ <DialogDescription
7
+ :class="clsx('arvue-drawer-description', props.class)"
8
+ v-bind="delegatedProps"
9
+ >
10
+ <slot/>
11
+ </DialogDescription>
12
+ </template>
13
+
14
+ <script lang="ts">
15
+ import type { DialogDescriptionProps } from 'reka-ui'
16
+ import type { HTMLAttributes } from 'vue'
17
+
18
+ export interface DrawerDescriptionProps extends DialogDescriptionProps {
19
+ class?: HTMLAttributes['class']
20
+ }
21
+ </script>
22
+
23
+ <script setup lang="ts">
24
+ import { reactiveOmit } from '@vueuse/core'
25
+ import { clsx } from 'clsx'
26
+ import { DialogDescription } from 'reka-ui'
27
+
28
+ const props = withDefaults(defineProps<DrawerDescriptionProps>(), {
29
+ as: 'p',
30
+ })
31
+
32
+ const delegatedProps = reactiveOmit(props, 'class')
33
+ </script>
@@ -0,0 +1,31 @@
1
+ <style>
2
+ @import "./drawer-footer.css";
3
+ </style>
4
+
5
+ <template>
6
+ <Primitive
7
+ :class="clsx('arvue-drawer-footer', props.class)"
8
+ v-bind="delegatedProps"
9
+ >
10
+ <slot/>
11
+ </Primitive>
12
+ </template>
13
+
14
+ <script lang="ts">
15
+ import type { PrimitiveProps } from 'reka-ui'
16
+ import type { HTMLAttributes } from 'vue'
17
+
18
+ export interface DrawerFooterProps extends PrimitiveProps {
19
+ class?: HTMLAttributes['class']
20
+ }
21
+ </script>
22
+
23
+ <script setup lang="ts">
24
+ import { reactiveOmit } from '@vueuse/core'
25
+ import { clsx } from 'clsx'
26
+ import { Primitive } from 'reka-ui'
27
+
28
+ const props = defineProps<DrawerFooterProps>()
29
+
30
+ const delegatedProps = reactiveOmit(props, 'class')
31
+ </script>
@@ -0,0 +1,31 @@
1
+ <style>
2
+ @import "./drawer-header.css";
3
+ </style>
4
+
5
+ <template>
6
+ <Primitive
7
+ :class="clsx('arvue-drawer-header', props.class)"
8
+ v-bind="delegatedProps"
9
+ >
10
+ <slot/>
11
+ </Primitive>
12
+ </template>
13
+
14
+ <script lang="ts">
15
+ import type { PrimitiveProps } from 'reka-ui'
16
+ import type { HTMLAttributes } from 'vue'
17
+
18
+ export interface DrawerHeaderProps extends PrimitiveProps {
19
+ class?: HTMLAttributes['class']
20
+ }
21
+ </script>
22
+
23
+ <script setup lang="ts">
24
+ import { reactiveOmit } from '@vueuse/core'
25
+ import { clsx } from 'clsx'
26
+ import { Primitive } from 'reka-ui'
27
+
28
+ const props = defineProps<DrawerHeaderProps>()
29
+
30
+ const delegatedProps = reactiveOmit(props, 'class')
31
+ </script>
@@ -0,0 +1,31 @@
1
+ <style>
2
+ @import './drawer-overlay.css';
3
+ </style>
4
+
5
+ <template>
6
+ <DialogOverlay
7
+ v-bind="delegatedProps"
8
+ :class="clsx('arvue-drawer-overlay', props.class)"
9
+ >
10
+ <slot/>
11
+ </DialogOverlay>
12
+ </template>
13
+
14
+ <script lang="ts">
15
+ import type { DialogOverlayProps } from 'reka-ui'
16
+ import type { HTMLAttributes } from 'vue'
17
+
18
+ export interface DrawerOverlayProps extends DialogOverlayProps {
19
+ class?: HTMLAttributes['class']
20
+ }
21
+ </script>
22
+
23
+ <script setup lang="ts">
24
+ import { reactiveOmit } from '@vueuse/core'
25
+ import { clsx } from 'clsx'
26
+ import { DialogOverlay } from 'reka-ui'
27
+
28
+ const props = defineProps<DrawerOverlayProps>()
29
+
30
+ const delegatedProps = reactiveOmit(props, 'class')
31
+ </script>
@@ -0,0 +1,33 @@
1
+ <style>
2
+ @import "./drawer-title.css";
3
+ </style>
4
+
5
+ <template>
6
+ <DialogTitle
7
+ :class="clsx('arvue-drawer-title', props.class)"
8
+ v-bind="delegatedProps"
9
+ >
10
+ <slot/>
11
+ </DialogTitle>
12
+ </template>
13
+
14
+ <script lang="ts">
15
+ import type { DialogTitleProps } from 'reka-ui'
16
+ import type { HTMLAttributes } from 'vue'
17
+
18
+ export interface DrawerTitleProps extends DialogTitleProps {
19
+ class?: HTMLAttributes['class']
20
+ }
21
+ </script>
22
+
23
+ <script setup lang="ts">
24
+ import { reactiveOmit } from '@vueuse/core'
25
+ import { clsx } from 'clsx'
26
+ import { DialogTitle } from 'reka-ui'
27
+
28
+ const props = withDefaults(defineProps<DrawerTitleProps>(), {
29
+ as: 'h3',
30
+ })
31
+
32
+ const delegatedProps = reactiveOmit(props, 'class')
33
+ </script>
@@ -0,0 +1,17 @@
1
+ <template>
2
+ <DialogTrigger v-bind="props">
3
+ <slot/>
4
+ </DialogTrigger>
5
+ </template>
6
+
7
+ <script lang="ts">
8
+ import type { DialogTriggerProps } from 'reka-ui'
9
+
10
+ export interface DrawerTriggerProps extends DialogTriggerProps {}
11
+ </script>
12
+
13
+ <script setup lang="ts">
14
+ import { DialogTrigger } from 'reka-ui'
15
+
16
+ const props = defineProps<DrawerTriggerProps>()
17
+ </script>
@@ -0,0 +1,68 @@
1
+ .arvue-drawer-content {
2
+ position: fixed;
3
+ z-index: 1045;
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: 1rem;
7
+ box-shadow: 0 0 70px var(--drawer-shadow-color);
8
+ background: var(--background-color-blank);
9
+ box-sizing: border-box;
10
+ }
11
+
12
+ .arvue-drawer-content.right {
13
+ top: 0;
14
+ right: 0;
15
+ bottom: 0;
16
+ width: 75%;
17
+ }
18
+
19
+ .arvue-drawer-content.left {
20
+ top: 0;
21
+ right: auto;
22
+ bottom: 0;
23
+ width: 75%;
24
+ }
25
+
26
+ .arvue-drawer-content.top {
27
+ top: 0;
28
+ left: 0;
29
+ right: 0;
30
+ bottom: auto;
31
+ width: auto;
32
+ height: auto;
33
+ }
34
+
35
+ .arvue-drawer-content.bottom {
36
+ bottom: 0;
37
+ left: 0;
38
+ right: 0;
39
+ top: auto;
40
+ width: auto;
41
+ height: auto;
42
+ }
43
+
44
+ @media (min-width: 760px) {
45
+ .arvue-drawer-content.right, .arvue-drawer-content.left {
46
+ width: 600px;
47
+ }
48
+ }
49
+
50
+ .arvue-drawer-content .arvue-drawer-close-button {
51
+ position: absolute;
52
+ top: 1rem;
53
+ right: 1rem;
54
+ border-radius: 0.125rem;
55
+ opacity: 0.7;
56
+ transition: opacity var(--timing-fast) ease-in-out;
57
+ width: 1rem;
58
+ height: 1rem;
59
+ color: inherit;
60
+ }
61
+
62
+ .arvue-drawer-content .arvue-drawer-close-button:hover {
63
+ opacity: 1;
64
+ }
65
+
66
+ .arvue-drawer-content .arvue-drawer-close-button:disabled {
67
+ pointer-events: none;
68
+ }
@@ -0,0 +1,5 @@
1
+ .arvue-drawer-description {
2
+ font-size: 0.875rem;
3
+ margin: 0;
4
+ font-weight: 600;
5
+ }
@@ -0,0 +1,11 @@
1
+ .arvue-drawer-footer {
2
+ margin-top: auto;
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: 0.5rem;
6
+ padding: 1rem;
7
+ }
8
+
9
+ .arvue-drawer-footer button {
10
+ margin-right: 0;
11
+ }
@@ -0,0 +1,6 @@
1
+ .arvue-drawer-header {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: 0.375rem;
5
+ padding: 1rem;
6
+ }
@@ -0,0 +1,12 @@
1
+ .arvue-drawer-overlay {
2
+ position: fixed;
3
+ top: 0;
4
+ right: 0;
5
+ bottom: 0;
6
+ left: 0;
7
+ z-index: 1040;
8
+ width: 100%;
9
+ height: 100%;
10
+ box-sizing: border-box;
11
+ background: var(--drawer-background-color);
12
+ }
@@ -0,0 +1,3 @@
1
+ .arvue-drawer-title {
2
+ margin: 0;
3
+ }
@@ -0,0 +1,38 @@
1
+ export {
2
+ default as Drawer,
3
+ type DrawerEmits,
4
+ type DrawerProps,
5
+ } from './Drawer.vue'
6
+ export {
7
+ default as DrawerClose,
8
+ type DrawerCloseProps,
9
+ } from './DrawerClose.vue'
10
+ export {
11
+ default as DrawerContent,
12
+ type DrawerContentEmits,
13
+ type DrawerContentProps,
14
+ } from './DrawerContent.vue'
15
+ export {
16
+ default as DrawerDescription,
17
+ type DrawerDescriptionProps,
18
+ } from './DrawerDescription.vue'
19
+ export {
20
+ default as DrawerFooter,
21
+ type DrawerFooterProps,
22
+ } from './DrawerFooter.vue'
23
+ export {
24
+ default as DrawerHeader,
25
+ type DrawerHeaderProps,
26
+ } from './DrawerHeader.vue'
27
+ export {
28
+ default as DrawerOverlay,
29
+ type DrawerOverlayProps,
30
+ } from './DrawerOverlay.vue'
31
+ export {
32
+ default as DrawerTitle,
33
+ type DrawerTitleProps,
34
+ } from './DrawerTitle.vue'
35
+ export {
36
+ default as DrawerTrigger,
37
+ type DrawerTriggerProps,
38
+ } from './DrawerTrigger.vue'
package/src/index.ts CHANGED
@@ -1 +1,4 @@
1
+ export * from './autocomplete'
1
2
  export * from './dialog'
3
+ export * from './drawer'
4
+ export * from './sheet'
@@ -0,0 +1,29 @@
1
+ <template>
2
+ <DrawerRoot
3
+ v-slot="slotProps"
4
+ v-bind="forwarded"
5
+ >
6
+ <slot v-bind="slotProps"/>
7
+ </DrawerRoot>
8
+ </template>
9
+
10
+ <script lang="ts">
11
+ import type { DrawerRootEmits, DrawerRootProps } from 'vaul-vue'
12
+ import type { HTMLAttributes } from 'vue'
13
+
14
+ export interface SheetEmits extends DrawerRootEmits {}
15
+
16
+ export interface SheetProps extends DrawerRootProps {
17
+ class?: HTMLAttributes['class']
18
+ }
19
+ </script>
20
+
21
+ <script setup lang="ts">
22
+ import { useForwardPropsEmits } from 'reka-ui'
23
+ import { DrawerRoot } from 'vaul-vue'
24
+
25
+ const props = defineProps<SheetProps>()
26
+ const emits = defineEmits<SheetEmits>()
27
+
28
+ const forwarded = useForwardPropsEmits(props, emits)
29
+ </script>
@@ -0,0 +1,19 @@
1
+ <template>
2
+ <DrawerClose v-bind="props">
3
+ <slot/>
4
+ </DrawerClose>
5
+ </template>
6
+
7
+ <script lang="ts">
8
+ import type { DrawerCloseProps } from 'vaul-vue'
9
+
10
+ export interface SheetCloseProps extends DrawerCloseProps {}
11
+ </script>
12
+
13
+ <script setup lang="ts">
14
+ import { DrawerClose } from 'vaul-vue'
15
+
16
+ const props = withDefaults(defineProps<SheetCloseProps>(), {
17
+ as: 'a',
18
+ })
19
+ </script>
@@ -0,0 +1,53 @@
1
+ <style>
2
+ @import 'sheet-content.css';
3
+ </style>
4
+
5
+ <template>
6
+ <DrawerPortal>
7
+ <SheetOverlay/>
8
+ <DrawerContent
9
+ :class="clsx('arvue-sheet-content', props.class)"
10
+ v-bind="{ ...$attrs, ...forwarded }"
11
+ >
12
+ <div
13
+ v-if="showHandle"
14
+ class="arvue-sheet-handle"
15
+ />
16
+ <slot/>
17
+ </DrawerContent>
18
+ </DrawerPortal>
19
+ </template>
20
+
21
+ <script lang="ts">
22
+ import type { DialogContentEmits, DialogContentProps } from 'reka-ui'
23
+ import type { HTMLAttributes } from 'vue'
24
+
25
+ export interface SheetContentEmits extends DialogContentEmits {
26
+ }
27
+
28
+ export interface SheetContentProps extends DialogContentProps {
29
+ class?: HTMLAttributes['class']
30
+ showHandle?: boolean
31
+ }
32
+ </script>
33
+
34
+ <script setup lang="ts">
35
+ import { reactiveOmit } from '@vueuse/core'
36
+ import { clsx } from 'clsx'
37
+ import { useForwardPropsEmits } from 'reka-ui'
38
+ import { DrawerContent, DrawerPortal } from 'vaul-vue'
39
+ import { SheetOverlay } from '.'
40
+
41
+ defineOptions({
42
+ inheritAttrs: false,
43
+ })
44
+
45
+ const props = withDefaults(defineProps<SheetContentProps>(), {
46
+ showHandle: true,
47
+ })
48
+ const emits = defineEmits<SheetContentEmits>()
49
+
50
+ const delegatedProps = reactiveOmit(props, 'class')
51
+
52
+ const forwarded = useForwardPropsEmits(delegatedProps, emits)
53
+ </script>
@@ -0,0 +1,33 @@
1
+ <style>
2
+ @import "sheet-description.css";
3
+ </style>
4
+
5
+ <template>
6
+ <DrawerDescription
7
+ :class="clsx('arvue-sheet-description', props.class)"
8
+ v-bind="delegatedProps"
9
+ >
10
+ <slot/>
11
+ </DrawerDescription>
12
+ </template>
13
+
14
+ <script lang="ts">
15
+ import type { DrawerDescriptionProps } from 'vaul-vue'
16
+ import type { HTMLAttributes } from 'vue'
17
+
18
+ export interface SheetDescriptionProps extends DrawerDescriptionProps {
19
+ class?: HTMLAttributes['class']
20
+ }
21
+ </script>
22
+
23
+ <script setup lang="ts">
24
+ import { reactiveOmit } from '@vueuse/core'
25
+ import { clsx } from 'clsx'
26
+ import { DrawerDescription } from 'vaul-vue'
27
+
28
+ const props = withDefaults(defineProps<SheetDescriptionProps>(), {
29
+ as: 'p',
30
+ })
31
+
32
+ const delegatedProps = reactiveOmit(props, 'class')
33
+ </script>
@@ -0,0 +1,31 @@
1
+ <style>
2
+ @import "sheet-footer.css";
3
+ </style>
4
+
5
+ <template>
6
+ <Primitive
7
+ :class="clsx('arvue-sheet-footer', props.class)"
8
+ v-bind="delegatedProps"
9
+ >
10
+ <slot/>
11
+ </Primitive>
12
+ </template>
13
+
14
+ <script lang="ts">
15
+ import type { PrimitiveProps } from 'reka-ui'
16
+ import type { HTMLAttributes } from 'vue'
17
+
18
+ export interface SheetFooterProps extends PrimitiveProps {
19
+ class?: HTMLAttributes['class']
20
+ }
21
+ </script>
22
+
23
+ <script setup lang="ts">
24
+ import { reactiveOmit } from '@vueuse/core'
25
+ import { clsx } from 'clsx'
26
+ import { Primitive } from 'reka-ui'
27
+
28
+ const props = defineProps<SheetFooterProps>()
29
+
30
+ const delegatedProps = reactiveOmit(props, 'class')
31
+ </script>