@weni/unnnic-system 3.11.2 → 3.11.3-alpha.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 (178) hide show
  1. package/dist/components/Alert/Alert.vue.d.ts +3 -3
  2. package/dist/components/Alert/Version1dot1.vue.d.ts +1 -1
  3. package/dist/components/AudioRecorder/AudioHandler.vue.d.ts +109 -18
  4. package/dist/components/AudioRecorder/AudioRecorder.vue.d.ts +218 -36
  5. package/dist/components/AvatarIcon/AvatarIcon.vue.d.ts +1 -1
  6. package/dist/components/Button/Button.vue.d.ts +2 -2
  7. package/dist/components/Card/AccountCard.vue.d.ts +2 -2
  8. package/dist/components/Card/Card.vue.d.ts +120 -29
  9. package/dist/components/Card/CardCompany.vue.d.ts +2 -2
  10. package/dist/components/Card/CardStatusesContainer.vue.d.ts +110 -19
  11. package/dist/components/Card/ContentCard.vue.d.ts +1 -1
  12. package/dist/components/Card/DashCard.vue.d.ts +2 -2
  13. package/dist/components/Card/DefaultCard.vue.d.ts +1 -1
  14. package/dist/components/Card/MarketplaceCard.vue.d.ts +1 -1
  15. package/dist/components/Card/SimpleCard.vue.d.ts +109 -18
  16. package/dist/components/Card/StatusCard.vue.d.ts +1 -1
  17. package/dist/components/Card/TitleCard.vue.d.ts +109 -18
  18. package/dist/components/CardImage/CardImage.vue.d.ts +5 -5
  19. package/dist/components/CardInformation/CardInformation.vue.d.ts +110 -19
  20. package/dist/components/CardProject/CardProject.vue.d.ts +2 -2
  21. package/dist/components/Carousel/Carousel.vue.d.ts +2 -2
  22. package/dist/components/Carousel/TagCarousel.vue.d.ts +2 -2
  23. package/dist/components/ChartBar/ChartBar.vue.d.ts +115 -24
  24. package/dist/components/ChartLine/ChartLine.vue.d.ts +109 -18
  25. package/dist/components/ChatText/ChatText.vue.d.ts +109 -18
  26. package/dist/components/ChatsContact/ChatsContact.vue.d.ts +6 -6
  27. package/dist/components/ChatsMessage/ChatsMessage.vue.d.ts +109 -18
  28. package/dist/components/ChatsUserAvatar/ChatsUserAvatar.vue.d.ts +1 -1
  29. package/dist/components/Checkbox/Checkbox.vue.d.ts +3 -3
  30. package/dist/components/DataArea/DataArea.vue.d.ts +109 -18
  31. package/dist/components/DataTable/index.vue.d.ts +1 -1
  32. package/dist/components/DataTable/index.vue.d.ts.map +1 -1
  33. package/dist/components/DateFilter/DateFilter.vue.d.ts +10 -10
  34. package/dist/components/Drawer/Drawer.vue.d.ts +37 -207
  35. package/dist/components/Drawer/Drawer.vue.d.ts.map +1 -1
  36. package/dist/components/Dropdown/Dropdown.vue.d.ts +1 -1
  37. package/dist/components/FormElement/FormElement.vue.d.ts +4 -4
  38. package/dist/components/ImportCard/ImportCard.vue.d.ts +6 -6
  39. package/dist/components/Input/Input.vue.d.ts +9 -9
  40. package/dist/components/Input/TextInput.vue.d.ts +2 -2
  41. package/dist/components/InputNext/InputNext.vue.d.ts +3 -3
  42. package/dist/components/Modal/Modal.vue.d.ts +1 -1
  43. package/dist/components/ModalDialog/ModalDialog.vue.d.ts +209 -35
  44. package/dist/components/ModalDialog/ModalDialog.vue.d.ts.map +1 -1
  45. package/dist/components/ModalNext/ModalNext.vue.d.ts +15 -15
  46. package/dist/components/ModalUpload/ModalUpload.vue.d.ts +12 -12
  47. package/dist/components/MoodRating/MoodRating.vue.d.ts +109 -18
  48. package/dist/components/MultiSelect/MultiSelect.vue.d.ts +18 -18
  49. package/dist/components/Pagination/Pagination.vue.d.ts +6 -6
  50. package/dist/components/Radio/Radio.vue.d.ts +6 -6
  51. package/dist/components/SelectSmart/SelectSmart.vue.d.ts +11 -11
  52. package/dist/components/SelectSmart/SelectSmartMultipleHeader.vue.d.ts +2 -2
  53. package/dist/components/SelectSmart/SelectSmartOption.vue.d.ts +5 -5
  54. package/dist/components/SelectTime/index.vue.d.ts +3 -3
  55. package/dist/components/Slider/Slider.vue.d.ts +109 -18
  56. package/dist/components/Switch/Switch.vue.d.ts +2 -2
  57. package/dist/components/Tab/Tab.vue.d.ts +109 -18
  58. package/dist/components/TableNext/TableBodyCell.vue.d.ts +2 -2
  59. package/dist/components/TableNext/TablePagination.vue.d.ts +6 -6
  60. package/dist/components/Tag/DefaultTag.vue.d.ts +1 -1
  61. package/dist/components/Tag/Tag.vue.d.ts +2 -2
  62. package/dist/components/TextArea/TextArea.vue.d.ts +5 -5
  63. package/dist/components/Toast/Toast.vue.d.ts +1 -1
  64. package/dist/components/Toast/Toast.vue.d.ts.map +1 -1
  65. package/dist/components/ToolTip/ToolTip.vue.d.ts +109 -18
  66. package/dist/components/ToolTip/ToolTip.vue.d.ts.map +1 -1
  67. package/dist/components/Tour/Tour.vue.d.ts +6 -6
  68. package/dist/components/Tour/TourPopover.vue.d.ts +6 -6
  69. package/dist/components/UploadArea/UploadArea.vue.d.ts +6 -6
  70. package/dist/components/ui/dialog/Dialog.vue.d.ts +23 -0
  71. package/dist/components/ui/dialog/Dialog.vue.d.ts.map +1 -0
  72. package/dist/components/ui/dialog/DialogClose.vue.d.ts +19 -0
  73. package/dist/components/ui/dialog/DialogClose.vue.d.ts.map +1 -0
  74. package/dist/components/ui/dialog/DialogContent.vue.d.ts +43 -0
  75. package/dist/components/ui/dialog/DialogContent.vue.d.ts.map +1 -0
  76. package/dist/components/ui/dialog/DialogFooter.vue.d.ts +25 -0
  77. package/dist/components/ui/dialog/DialogFooter.vue.d.ts.map +1 -0
  78. package/dist/components/ui/dialog/DialogHeader.vue.d.ts +29 -0
  79. package/dist/components/ui/dialog/DialogHeader.vue.d.ts.map +1 -0
  80. package/dist/components/ui/dialog/DialogTitle.vue.d.ts +23 -0
  81. package/dist/components/ui/dialog/DialogTitle.vue.d.ts.map +1 -0
  82. package/dist/components/ui/dialog/DialogTrigger.vue.d.ts +19 -0
  83. package/dist/components/ui/dialog/DialogTrigger.vue.d.ts.map +1 -0
  84. package/dist/components/ui/dialog/index.d.ts +8 -0
  85. package/dist/components/ui/dialog/index.d.ts.map +1 -0
  86. package/dist/components/ui/drawer/Drawer.vue.d.ts +35 -0
  87. package/dist/components/ui/drawer/Drawer.vue.d.ts.map +1 -0
  88. package/dist/components/ui/drawer/DrawerClose.vue.d.ts +19 -0
  89. package/dist/components/ui/drawer/DrawerClose.vue.d.ts.map +1 -0
  90. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +42 -0
  91. package/dist/components/ui/drawer/DrawerContent.vue.d.ts.map +1 -0
  92. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +23 -0
  93. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts.map +1 -0
  94. package/dist/components/ui/drawer/DrawerFooter.vue.d.ts +22 -0
  95. package/dist/components/ui/drawer/DrawerFooter.vue.d.ts.map +1 -0
  96. package/dist/components/ui/drawer/DrawerHeader.vue.d.ts +25 -0
  97. package/dist/components/ui/drawer/DrawerHeader.vue.d.ts.map +1 -0
  98. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +8 -0
  99. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts.map +1 -0
  100. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +23 -0
  101. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts.map +1 -0
  102. package/dist/components/ui/drawer/DrawerTrigger.vue.d.ts +19 -0
  103. package/dist/components/ui/drawer/DrawerTrigger.vue.d.ts.map +1 -0
  104. package/dist/components/ui/drawer/index.d.ts +11 -0
  105. package/dist/components/ui/drawer/index.d.ts.map +1 -0
  106. package/dist/components/ui/popover/PopoverContent.vue.d.ts +2 -2
  107. package/dist/components/ui/popover/PopoverContent.vue.d.ts.map +1 -1
  108. package/dist/components/ui/segmented-control/SegmentedControlList.vue.d.ts +26 -0
  109. package/dist/components/ui/segmented-control/SegmentedControlList.vue.d.ts.map +1 -0
  110. package/dist/components/ui/segmented-control/SegmentedControlTrigger.vue.d.ts +24 -0
  111. package/dist/components/ui/segmented-control/SegmentedControlTrigger.vue.d.ts.map +1 -0
  112. package/dist/components/ui/segmented-control/index.d.ts +5 -0
  113. package/dist/components/ui/segmented-control/index.d.ts.map +1 -0
  114. package/dist/components/ui/tabs/TabsTrigger.vue.d.ts.map +1 -1
  115. package/dist/components/ui/tooltip/Tooltip.vue.d.ts +23 -0
  116. package/dist/components/ui/tooltip/Tooltip.vue.d.ts.map +1 -0
  117. package/dist/components/ui/tooltip/TooltipContent.vue.d.ts +31 -0
  118. package/dist/components/ui/tooltip/TooltipContent.vue.d.ts.map +1 -0
  119. package/dist/components/ui/tooltip/TooltipProvider.vue.d.ts +19 -0
  120. package/dist/components/ui/tooltip/TooltipProvider.vue.d.ts.map +1 -0
  121. package/dist/components/ui/tooltip/TooltipTrigger.vue.d.ts +19 -0
  122. package/dist/components/ui/tooltip/TooltipTrigger.vue.d.ts.map +1 -0
  123. package/dist/components/ui/tooltip/index.d.ts +5 -0
  124. package/dist/components/ui/tooltip/index.d.ts.map +1 -0
  125. package/dist/{es-042a0d15.mjs → es-9cccca43.mjs} +1 -1
  126. package/dist/{index-fd0ea6b9.mjs → index-386c3448.mjs} +99605 -96738
  127. package/dist/{pt-br-3b7cced5.mjs → pt-br-9303b2c4.mjs} +1 -1
  128. package/dist/style.css +1 -1
  129. package/dist/unnnic.mjs +232 -196
  130. package/dist/unnnic.umd.js +48 -44
  131. package/package.json +2 -1
  132. package/src/assets/scss/tailwind.scss +8 -0
  133. package/src/components/Drawer/Drawer.vue +188 -269
  134. package/src/components/Drawer/__tests__/Drawer.spec.js +31 -46
  135. package/src/components/Drawer/__tests__/__snapshots__/Drawer.spec.js.snap +18 -19
  136. package/src/components/ModalDialog/ModalDialog.vue +62 -148
  137. package/src/components/ModalDialog/__tests__/ModalDialog.spec.js +11 -221
  138. package/src/components/ModalDialog/__tests__/__snapshots__/ModalDialog.spec.js.snap +1 -22
  139. package/src/components/Tab/__test__/__snapshots__/Tab.spec.js.snap +3 -1
  140. package/src/components/Toast/Toast.vue +12 -8
  141. package/src/components/ToolTip/ToolTip.vue +41 -188
  142. package/src/components/ToolTip/__tests__/ToolTip.spec.js +345 -61
  143. package/src/components/index.ts +86 -12
  144. package/src/components/ui/dialog/Dialog.vue +15 -0
  145. package/src/components/ui/dialog/DialogClose.vue +25 -0
  146. package/src/components/ui/dialog/DialogContent.vue +130 -0
  147. package/src/components/ui/dialog/DialogFooter.vue +46 -0
  148. package/src/components/ui/dialog/DialogHeader.vue +79 -0
  149. package/src/components/ui/dialog/DialogTitle.vue +34 -0
  150. package/src/components/ui/dialog/DialogTrigger.vue +12 -0
  151. package/src/components/ui/dialog/index.ts +7 -0
  152. package/src/components/ui/drawer/Drawer.vue +27 -0
  153. package/src/components/ui/drawer/DrawerClose.vue +37 -0
  154. package/src/components/ui/drawer/DrawerContent.vue +102 -0
  155. package/src/components/ui/drawer/DrawerDescription.vue +40 -0
  156. package/src/components/ui/drawer/DrawerFooter.vue +38 -0
  157. package/src/components/ui/drawer/DrawerHeader.vue +57 -0
  158. package/src/components/ui/drawer/DrawerOverlay.vue +34 -0
  159. package/src/components/ui/drawer/DrawerTitle.vue +37 -0
  160. package/src/components/ui/drawer/DrawerTrigger.vue +31 -0
  161. package/src/components/ui/drawer/index.ts +10 -0
  162. package/src/components/ui/popover/PopoverContent.vue +0 -2
  163. package/src/components/ui/segmented-control/SegmentedControlList.vue +51 -0
  164. package/src/components/ui/segmented-control/SegmentedControlTrigger.vue +81 -0
  165. package/src/components/ui/segmented-control/index.ts +4 -0
  166. package/src/components/ui/tabs/TabsTrigger.vue +4 -20
  167. package/src/components/ui/tooltip/Tooltip.vue +15 -0
  168. package/src/components/ui/tooltip/TooltipContent.vue +73 -0
  169. package/src/components/ui/tooltip/TooltipProvider.vue +15 -0
  170. package/src/components/ui/tooltip/TooltipTrigger.vue +22 -0
  171. package/src/components/ui/tooltip/index.ts +4 -0
  172. package/src/stories/Dialog.stories.js +832 -0
  173. package/src/stories/Drawer.stories.js +1 -1
  174. package/src/stories/DrawerNext.stories.js +610 -0
  175. package/src/stories/ModalDialog.mdx +3 -0
  176. package/src/stories/ModalDialog.stories.js +1 -1
  177. package/src/stories/SegmentedControl.stories.js +253 -0
  178. package/src/stories/Tabs.stories.js +1 -1
@@ -0,0 +1,130 @@
1
+ <script setup lang="ts">
2
+ import type { DialogContentEmits, DialogContentProps } from 'reka-ui';
3
+ import type { HTMLAttributes, Component } from 'vue';
4
+ import { computed, h } from 'vue';
5
+ import { reactiveOmit } from '@vueuse/core';
6
+ import {
7
+ DialogContent,
8
+ DialogOverlay,
9
+ DialogPortal,
10
+ useForwardPropsEmits,
11
+ } from 'reka-ui';
12
+ import { cn } from '@/lib/utils';
13
+
14
+ const props = withDefaults(
15
+ defineProps<
16
+ DialogContentProps & {
17
+ parentClass?: HTMLAttributes['class'];
18
+ class?: HTMLAttributes['class'];
19
+ size?: 'small' | 'medium' | 'large';
20
+ }
21
+ >(),
22
+ {
23
+ size: 'medium',
24
+ parentClass: '', // This class should be temporary, to be discontinued with the ModalDialog component
25
+ class: '',
26
+ },
27
+ );
28
+ const emits = defineEmits<DialogContentEmits>();
29
+
30
+ const delegatedProps = reactiveOmit(props, 'class', 'parentClass');
31
+
32
+ const forwarded = useForwardPropsEmits(delegatedProps, emits);
33
+
34
+ const contentClasses = computed(() =>
35
+ cn(
36
+ 'unnnic-dialog-content',
37
+ `unnnic-dialog-content--size-${props.size}`,
38
+ 'duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',
39
+ props.class,
40
+ ),
41
+ );
42
+
43
+ // This component is used to wrap the DialogContent component in a section if the parentClass is provided
44
+ // This is a temporary solution, to be discontinued with the ModalDialog component
45
+ const ConditionalWrapper: Component = (_, { slots }) => {
46
+ const content = slots.default?.();
47
+ return props.parentClass
48
+ ? h('section', { class: props.parentClass }, content)
49
+ : content;
50
+ };
51
+ </script>
52
+
53
+ <template>
54
+ <DialogPortal>
55
+ <DialogOverlay
56
+ class="unnnic-dialog-overlay data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0"
57
+ />
58
+
59
+ <ConditionalWrapper>
60
+ <DialogContent
61
+ v-bind="forwarded"
62
+ :class="contentClasses"
63
+ >
64
+ <slot />
65
+ </DialogContent>
66
+ </ConditionalWrapper>
67
+ </DialogPortal>
68
+ </template>
69
+
70
+ <style lang="scss" scoped>
71
+ @use '@/assets/scss/unnnic' as *;
72
+
73
+ .unnnic-dialog-overlay {
74
+ position: fixed;
75
+ top: 0;
76
+ left: 0;
77
+
78
+ width: 100vw;
79
+ height: 100vh;
80
+ background: rgba(53, 57, 69, 0.5);
81
+ }
82
+
83
+ .unnnic-dialog-content {
84
+ position: fixed;
85
+ top: 50%;
86
+ left: 50%;
87
+
88
+ overflow: hidden;
89
+
90
+ transform: translate(-50%, -50%);
91
+
92
+ width: 100%;
93
+ max-height: calc(100% - $unnnic-space-20);
94
+
95
+ display: flex;
96
+ flex-direction: column;
97
+
98
+ box-shadow: $unnnic-shadow-2;
99
+ border-radius: $unnnic-radius-4;
100
+ background-color: $unnnic-color-bg-base;
101
+
102
+ &--size-small {
103
+ max-width: 360px;
104
+ }
105
+
106
+ &--size-medium {
107
+ max-width: 560px;
108
+ }
109
+
110
+ &--size-large {
111
+ max-width: 800px;
112
+ }
113
+
114
+ > * {
115
+ &::-webkit-scrollbar {
116
+ width: $unnnic-spacing-inline-nano;
117
+ }
118
+
119
+ &::-webkit-scrollbar-thumb {
120
+ background: $unnnic-color-neutral-cleanest;
121
+ border-radius: $unnnic-border-radius-pill;
122
+ }
123
+
124
+ &::-webkit-scrollbar-track {
125
+ background: $unnnic-color-neutral-soft;
126
+ border-radius: $unnnic-border-radius-pill;
127
+ }
128
+ }
129
+ }
130
+ </style>
@@ -0,0 +1,46 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '@/lib/utils';
4
+
5
+ const props = withDefaults(
6
+ defineProps<{ class?: HTMLAttributes['class']; divider?: boolean }>(),
7
+ {
8
+ divider: true,
9
+ },
10
+ );
11
+ </script>
12
+
13
+ <template>
14
+ <footer
15
+ :class="
16
+ cn(
17
+ 'unnnic-dialog-footer',
18
+ { 'unnnic-dialog-footer--with-divider': props.divider },
19
+ props.class,
20
+ )
21
+ "
22
+ >
23
+ <slot />
24
+ </footer>
25
+ </template>
26
+
27
+ <style lang="scss" scoped>
28
+ @use '@/assets/scss/unnnic' as *;
29
+
30
+ .unnnic-dialog-footer {
31
+ display: flex;
32
+ justify-content: center;
33
+ align-items: center;
34
+ gap: $unnnic-space-2;
35
+
36
+ padding: $unnnic-space-6;
37
+
38
+ &--with-divider {
39
+ border-top: 1px solid $unnnic-color-border-soft;
40
+ }
41
+
42
+ > * {
43
+ width: 100%;
44
+ }
45
+ }
46
+ </style>
@@ -0,0 +1,79 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '@/lib/utils';
4
+ import UnnnicButton from '@/components/Button/Button.vue';
5
+ import DialogClose from './DialogClose.vue';
6
+ import UnnnicIcon, { SchemeColor } from '@/components/Icon.vue';
7
+
8
+ const props = withDefaults(
9
+ defineProps<{
10
+ class?: HTMLAttributes['class'];
11
+ divider?: boolean;
12
+ type?: 'default' | 'success' | 'warning' | 'attention';
13
+ closeButton?: boolean;
14
+ }>(),
15
+ {
16
+ divider: true,
17
+ closeButton: true,
18
+ type: 'default',
19
+ },
20
+ );
21
+
22
+ const iconsMapper = {
23
+ default: { icon: '', scheme: '' as SchemeColor },
24
+ success: { icon: 'check_circle', scheme: 'aux-green-500' as SchemeColor },
25
+ warning: { icon: 'warning', scheme: 'aux-red-500' as SchemeColor },
26
+ attention: { icon: 'error', scheme: 'aux-yellow-500' as SchemeColor },
27
+ };
28
+ </script>
29
+
30
+ <template>
31
+ <header
32
+ :class="
33
+ cn(
34
+ 'unnnic-dialog-header',
35
+ { 'unnnic-dialog-header--with-divider': props.divider },
36
+ props.class,
37
+ )
38
+ "
39
+ >
40
+ <UnnnicIcon
41
+ v-if="iconsMapper[props.type]?.icon"
42
+ :icon="iconsMapper[props.type]?.icon"
43
+ :scheme="iconsMapper[props.type]?.scheme"
44
+ size="md"
45
+ />
46
+ <slot />
47
+
48
+ <DialogClose
49
+ v-if="props.closeButton"
50
+ class="unnnic-dialog-header__close"
51
+ >
52
+ <UnnnicButton
53
+ type="tertiary"
54
+ iconCenter="close"
55
+ size="small"
56
+ />
57
+ </DialogClose>
58
+ </header>
59
+ </template>
60
+
61
+ <style lang="scss" scoped>
62
+ @use '@/assets/scss/unnnic' as *;
63
+
64
+ .unnnic-dialog-header {
65
+ display: flex;
66
+ align-items: center;
67
+ gap: $unnnic-space-2;
68
+
69
+ padding: $unnnic-space-6;
70
+
71
+ &--with-divider {
72
+ border-bottom: 1px solid $unnnic-color-border-soft;
73
+ }
74
+
75
+ &__close {
76
+ margin-left: auto;
77
+ }
78
+ }
79
+ </style>
@@ -0,0 +1,34 @@
1
+ <script setup lang="ts">
2
+ import type { DialogTitleProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { DialogTitle, useForwardProps } from 'reka-ui';
6
+ import { cn } from '@/lib/utils';
7
+
8
+ const props = defineProps<
9
+ DialogTitleProps & { class?: HTMLAttributes['class'] }
10
+ >();
11
+
12
+ const delegatedProps = reactiveOmit(props, 'class');
13
+
14
+ const forwardedProps = useForwardProps(delegatedProps);
15
+ </script>
16
+
17
+ <template>
18
+ <DialogTitle
19
+ v-bind="forwardedProps"
20
+ :class="cn('unnnic-dialog-title', props.class)"
21
+ >
22
+ <slot />
23
+ </DialogTitle>
24
+ </template>
25
+
26
+ <style lang="scss" scoped>
27
+ @use '@/assets/scss/unnnic' as *;
28
+
29
+ .unnnic-dialog-title {
30
+ font: $unnnic-font-display-2;
31
+ color: $unnnic-color-fg-emphasized;
32
+ margin: 0;
33
+ }
34
+ </style>
@@ -0,0 +1,12 @@
1
+ <script setup lang="ts">
2
+ import type { DialogTriggerProps } from 'reka-ui';
3
+ import { DialogTrigger } from 'reka-ui';
4
+
5
+ const props = defineProps<DialogTriggerProps>();
6
+ </script>
7
+
8
+ <template>
9
+ <DialogTrigger v-bind="props">
10
+ <slot />
11
+ </DialogTrigger>
12
+ </template>
@@ -0,0 +1,7 @@
1
+ export { default as Dialog } from './Dialog.vue';
2
+ export { default as DialogClose } from './DialogClose.vue';
3
+ export { default as DialogContent } from './DialogContent.vue';
4
+ export { default as DialogFooter } from './DialogFooter.vue';
5
+ export { default as DialogHeader } from './DialogHeader.vue';
6
+ export { default as DialogTitle } from './DialogTitle.vue';
7
+ export { default as DialogTrigger } from './DialogTrigger.vue';
@@ -0,0 +1,27 @@
1
+ <script lang="ts" setup>
2
+ import type { DrawerRootEmits, DrawerRootProps } from 'vaul-vue';
3
+ import { useForwardPropsEmits } from 'reka-ui';
4
+ import { DrawerRoot } from 'vaul-vue';
5
+
6
+ defineOptions({
7
+ name: 'UnnnicDrawerNext',
8
+ });
9
+
10
+ const props = withDefaults(defineProps<DrawerRootProps>(), {
11
+ shouldScaleBackground: true,
12
+ });
13
+
14
+ const emits = defineEmits<DrawerRootEmits>();
15
+
16
+ const forwarded = useForwardPropsEmits(props, emits);
17
+ </script>
18
+
19
+ <template>
20
+ <DrawerRoot
21
+ v-bind="forwarded"
22
+ direction="right"
23
+ handleOnly
24
+ >
25
+ <slot />
26
+ </DrawerRoot>
27
+ </template>
@@ -0,0 +1,37 @@
1
+ <script setup lang="ts">
2
+ import type { DrawerCloseProps } from 'vaul-vue';
3
+ import { DrawerClose } from 'vaul-vue';
4
+
5
+ defineOptions({
6
+ name: 'UnnnicDrawerClose',
7
+ });
8
+
9
+ const props = defineProps<DrawerCloseProps>();
10
+ </script>
11
+
12
+ <template>
13
+ <DrawerClose
14
+ v-bind="props"
15
+ class="unnnic-drawer__close"
16
+ >
17
+ <slot />
18
+ </DrawerClose>
19
+ </template>
20
+
21
+ <style lang="scss" scoped>
22
+ @use '@/assets/scss/unnnic' as *;
23
+
24
+ .unnnic-drawer__close {
25
+ display: flex;
26
+
27
+ border: none;
28
+ background: none;
29
+ padding: 0;
30
+ margin: 0;
31
+ cursor: pointer;
32
+
33
+ > * {
34
+ width: 100%;
35
+ }
36
+ }
37
+ </style>
@@ -0,0 +1,102 @@
1
+ <script lang="ts" setup>
2
+ import type { DialogContentEmits, DialogContentProps } from 'reka-ui';
3
+ import { type HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { useForwardPropsEmits } from 'reka-ui';
6
+ import { DrawerContent, DrawerPortal } from 'vaul-vue';
7
+ import { cn } from '@/lib/utils';
8
+ import DrawerOverlay from './DrawerOverlay.vue';
9
+
10
+ defineOptions({
11
+ name: 'UnnnicDrawerContent',
12
+ });
13
+
14
+ const props = withDefaults(
15
+ defineProps<
16
+ DialogContentProps & {
17
+ class?: HTMLAttributes['class'];
18
+ size?: 'medium' | 'large' | 'extra-large' | 'giant';
19
+ showOverlay?: boolean;
20
+ }
21
+ >(),
22
+ {
23
+ size: 'medium',
24
+ showOverlay: true,
25
+ },
26
+ );
27
+ const emits = defineEmits<DialogContentEmits>();
28
+
29
+ const delegatedProps = reactiveOmit(props, 'class');
30
+ const forwardedProps = useForwardPropsEmits(delegatedProps, emits);
31
+ </script>
32
+
33
+ <template>
34
+ <DrawerPortal>
35
+ <DrawerOverlay v-if="showOverlay" />
36
+ <DrawerContent
37
+ v-bind="forwardedProps"
38
+ :class="
39
+ cn(
40
+ 'unnnic-drawer__content',
41
+ `unnnic-drawer__content--${props.size}`,
42
+ props.class,
43
+ )
44
+ "
45
+ :style="{ '--initial-transform': 'calc(100% + 8px)' }"
46
+ >
47
+ <slot />
48
+ </DrawerContent>
49
+ </DrawerPortal>
50
+ </template>
51
+
52
+ <style lang="scss" scoped>
53
+ @use '@/assets/scss/unnnic' as *;
54
+
55
+ $drawer-space: $unnnic-space-2;
56
+
57
+ .unnnic-drawer__content {
58
+ -webkit-user-select: unset;
59
+ user-select: unset;
60
+ will-change: unset;
61
+
62
+ &::after {
63
+ display: none;
64
+ }
65
+
66
+ position: fixed;
67
+ top: $drawer-space;
68
+ right: $drawer-space;
69
+ z-index: 50;
70
+
71
+ display: flex;
72
+ flex-direction: column;
73
+
74
+ height: calc(100% - $drawer-space * 2);
75
+
76
+ border-radius: $unnnic-radius-4;
77
+ border: 1px solid $unnnic-color-border-soft;
78
+ background-color: $unnnic-color-bg-base;
79
+
80
+ &--medium {
81
+ width: calc(100% / 3);
82
+ }
83
+
84
+ &--large {
85
+ width: 50%;
86
+ }
87
+
88
+ &--extra-large {
89
+ width: 66%;
90
+ }
91
+
92
+ &--giant {
93
+ width: 75%;
94
+ }
95
+
96
+ &__body {
97
+ overflow-y: auto;
98
+ padding: $unnnic-space-6;
99
+ flex: 1 0 0;
100
+ }
101
+ }
102
+ </style>
@@ -0,0 +1,40 @@
1
+ <script lang="ts" setup>
2
+ import type { DrawerDescriptionProps } from 'vaul-vue';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { DrawerDescription } from 'vaul-vue';
6
+ import { cn } from '@/lib/utils';
7
+
8
+ defineOptions({
9
+ name: 'UnnnicDrawerDescription',
10
+ });
11
+
12
+ const props = defineProps<
13
+ DrawerDescriptionProps & { class?: HTMLAttributes['class'] }
14
+ >();
15
+
16
+ const delegatedProps = reactiveOmit(props, 'class');
17
+ </script>
18
+
19
+ <template>
20
+ <DrawerDescription
21
+ v-bind="delegatedProps"
22
+ :class="cn('unnnic-drawer__description', props.class)"
23
+ >
24
+ <slot />
25
+ </DrawerDescription>
26
+ </template>
27
+
28
+ <style lang="scss" scoped>
29
+ @use '@/assets/scss/unnnic' as *;
30
+
31
+ .unnnic-drawer__description {
32
+ margin: 0;
33
+
34
+ font: $unnnic-font-body;
35
+ color: $unnnic-color-fg-base;
36
+
37
+ grid-column: 1 / 3;
38
+ grid-row: 2 / 3;
39
+ }
40
+ </style>
@@ -0,0 +1,38 @@
1
+ <script lang="ts" setup>
2
+ import { type HTMLAttributes } from 'vue';
3
+ import { cn } from '@/lib/utils';
4
+
5
+ defineOptions({
6
+ name: 'UnnnicDrawerFooter',
7
+ });
8
+
9
+ const props = defineProps<{
10
+ class?: HTMLAttributes['class'];
11
+ }>();
12
+ </script>
13
+
14
+ <template>
15
+ <footer :class="cn('unnnic-drawer__footer', props.class)">
16
+ <slot />
17
+ </footer>
18
+ </template>
19
+
20
+ <style lang="scss" scoped>
21
+ @use '@/assets/scss/unnnic' as *;
22
+
23
+ .unnnic-drawer__footer {
24
+ border-top: 1px solid $unnnic-color-border-soft;
25
+
26
+ margin-top: auto;
27
+ padding: $unnnic-space-6;
28
+
29
+ display: flex;
30
+ justify-content: center;
31
+ align-items: center;
32
+ gap: $unnnic-space-2;
33
+
34
+ > * {
35
+ width: 100%;
36
+ }
37
+ }
38
+ </style>
@@ -0,0 +1,57 @@
1
+ <script lang="ts" setup>
2
+ import { type HTMLAttributes } from 'vue';
3
+ import { cn } from '@/lib/utils';
4
+ import UnnnicButton from '@/components/Button/Button.vue';
5
+ import DrawerClose from './DrawerClose.vue';
6
+
7
+ defineOptions({
8
+ name: 'UnnnicDrawerHeader',
9
+ });
10
+
11
+ const props = defineProps<{
12
+ class?: HTMLAttributes['class'];
13
+ }>();
14
+ </script>
15
+
16
+ <template>
17
+ <header :class="cn('unnnic-drawer__header', props.class)">
18
+ <slot />
19
+
20
+ <template v-if="$slots.close">
21
+ <slot
22
+ name="close"
23
+ class="unnnic-drawer__close-button"
24
+ />
25
+ </template>
26
+ <template v-else>
27
+ <DrawerClose>
28
+ <UnnnicButton
29
+ iconCenter="close"
30
+ size="small"
31
+ type="tertiary"
32
+ class="unnnic-drawer__close-button"
33
+ />
34
+ </DrawerClose>
35
+ </template>
36
+ </header>
37
+ </template>
38
+
39
+ <style lang="scss" scoped>
40
+ @use '@/assets/scss/unnnic' as *;
41
+
42
+ .unnnic-drawer__header {
43
+ display: grid;
44
+ align-items: center;
45
+ grid-template-columns: 1fr auto;
46
+ padding: $unnnic-space-6;
47
+
48
+ gap: $unnnic-space-1;
49
+
50
+ border-bottom: 1px solid $unnnic-color-border-soft;
51
+ }
52
+
53
+ .unnnic-drawer__close-button {
54
+ grid-column: 2 / 3;
55
+ grid-row: 1 / 2;
56
+ }
57
+ </style>
@@ -0,0 +1,34 @@
1
+ <script lang="ts" setup>
2
+ import type { DialogOverlayProps } from 'reka-ui';
3
+ import { type HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { DrawerOverlay } from 'vaul-vue';
6
+ import { cn } from '@/lib/utils';
7
+
8
+ defineOptions({
9
+ name: 'UnnnicDrawerOverlay',
10
+ });
11
+
12
+ const props = defineProps<
13
+ DialogOverlayProps & { class?: HTMLAttributes['class'] }
14
+ >();
15
+
16
+ const delegatedProps = reactiveOmit(props, 'class');
17
+ </script>
18
+
19
+ <template>
20
+ <DrawerOverlay
21
+ v-bind="delegatedProps"
22
+ :class="cn('unnnic-drawer__overlay', props.class)"
23
+ />
24
+ </template>
25
+
26
+ <style lang="scss" scoped>
27
+ .unnnic-drawer__overlay {
28
+ position: fixed;
29
+ inset: 0;
30
+ z-index: 50;
31
+
32
+ background: rgba(53, 57, 69, 0.65);
33
+ }
34
+ </style>
@@ -0,0 +1,37 @@
1
+ <script lang="ts" setup>
2
+ import type { DrawerTitleProps } from 'vaul-vue';
3
+ import { type HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { DrawerTitle } from 'vaul-vue';
6
+ import { cn } from '@/lib/utils';
7
+
8
+ defineOptions({
9
+ name: 'UnnnicDrawerTitle',
10
+ });
11
+
12
+ const props = defineProps<
13
+ DrawerTitleProps & { class?: HTMLAttributes['class'] }
14
+ >();
15
+
16
+ const delegatedProps = reactiveOmit(props, 'class');
17
+ </script>
18
+
19
+ <template>
20
+ <DrawerTitle
21
+ v-bind="delegatedProps"
22
+ :class="cn('unnnic-drawer__title', props.class)"
23
+ >
24
+ <slot />
25
+ </DrawerTitle>
26
+ </template>
27
+
28
+ <style lang="scss" scoped>
29
+ @use '@/assets/scss/unnnic' as *;
30
+
31
+ .unnnic-drawer__title {
32
+ margin: 0;
33
+
34
+ color: $unnnic-color-fg-emphasized;
35
+ font: $unnnic-font-display-2;
36
+ }
37
+ </style>