@weni/unnnic-system 3.11.1-alpha.4 → 3.11.2

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 (176) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/components/Alert/Alert.vue.d.ts +3 -3
  3. package/dist/components/Alert/Version1dot1.vue.d.ts +1 -1
  4. package/dist/components/AudioRecorder/AudioHandler.vue.d.ts +18 -109
  5. package/dist/components/AudioRecorder/AudioRecorder.vue.d.ts +36 -218
  6. package/dist/components/AvatarIcon/AvatarIcon.vue.d.ts +1 -1
  7. package/dist/components/Button/Button.vue.d.ts +2 -2
  8. package/dist/components/Card/AccountCard.vue.d.ts +2 -2
  9. package/dist/components/Card/Card.vue.d.ts +29 -120
  10. package/dist/components/Card/CardCompany.vue.d.ts +2 -2
  11. package/dist/components/Card/CardStatusesContainer.vue.d.ts +19 -110
  12. package/dist/components/Card/ContentCard.vue.d.ts +1 -1
  13. package/dist/components/Card/DashCard.vue.d.ts +2 -2
  14. package/dist/components/Card/DefaultCard.vue.d.ts +1 -1
  15. package/dist/components/Card/MarketplaceCard.vue.d.ts +1 -1
  16. package/dist/components/Card/SimpleCard.vue.d.ts +18 -109
  17. package/dist/components/Card/StatusCard.vue.d.ts +1 -1
  18. package/dist/components/Card/TitleCard.vue.d.ts +18 -109
  19. package/dist/components/CardImage/CardImage.vue.d.ts +5 -5
  20. package/dist/components/CardInformation/CardInformation.vue.d.ts +19 -110
  21. package/dist/components/CardProject/CardProject.vue.d.ts +2 -2
  22. package/dist/components/Carousel/Carousel.vue.d.ts +2 -2
  23. package/dist/components/Carousel/TagCarousel.vue.d.ts +2 -2
  24. package/dist/components/ChartBar/ChartBar.vue.d.ts +24 -115
  25. package/dist/components/ChartLine/ChartLine.vue.d.ts +18 -109
  26. package/dist/components/ChatText/ChatText.vue.d.ts +18 -109
  27. package/dist/components/ChatsContact/ChatsContact.vue.d.ts +6 -6
  28. package/dist/components/ChatsMessage/ChatsMessage.vue.d.ts +18 -109
  29. package/dist/components/ChatsUserAvatar/ChatsUserAvatar.vue.d.ts +1 -1
  30. package/dist/components/Checkbox/Checkbox.vue.d.ts +3 -3
  31. package/dist/components/DataArea/DataArea.vue.d.ts +18 -109
  32. package/dist/components/DataTable/index.vue.d.ts +1 -1
  33. package/dist/components/DataTable/index.vue.d.ts.map +1 -1
  34. package/dist/components/DateFilter/DateFilter.vue.d.ts +10 -10
  35. package/dist/components/Drawer/Drawer.vue.d.ts +207 -35
  36. package/dist/components/Drawer/Drawer.vue.d.ts.map +1 -1
  37. package/dist/components/Dropdown/Dropdown.vue.d.ts +1 -1
  38. package/dist/components/FormElement/FormElement.vue.d.ts +4 -4
  39. package/dist/components/ImportCard/ImportCard.vue.d.ts +6 -6
  40. package/dist/components/Input/Input.vue.d.ts +9 -9
  41. package/dist/components/Input/TextInput.vue.d.ts +2 -2
  42. package/dist/components/InputNext/InputNext.vue.d.ts +3 -3
  43. package/dist/components/Modal/Modal.vue.d.ts +1 -1
  44. package/dist/components/ModalDialog/ModalDialog.vue.d.ts +35 -209
  45. package/dist/components/ModalDialog/ModalDialog.vue.d.ts.map +1 -1
  46. package/dist/components/ModalNext/ModalNext.vue.d.ts +15 -15
  47. package/dist/components/ModalUpload/ModalUpload.vue.d.ts +12 -12
  48. package/dist/components/MoodRating/MoodRating.vue.d.ts +18 -109
  49. package/dist/components/MultiSelect/MultiSelect.vue.d.ts +18 -18
  50. package/dist/components/Pagination/Pagination.vue.d.ts +6 -6
  51. package/dist/components/Radio/Radio.vue.d.ts +6 -6
  52. package/dist/components/SelectSmart/SelectSmart.vue.d.ts +11 -11
  53. package/dist/components/SelectSmart/SelectSmartMultipleHeader.vue.d.ts +2 -2
  54. package/dist/components/SelectSmart/SelectSmartOption.vue.d.ts +5 -5
  55. package/dist/components/SelectTime/index.vue.d.ts +3 -3
  56. package/dist/components/Slider/Slider.vue.d.ts +18 -109
  57. package/dist/components/Switch/Switch.vue.d.ts +2 -2
  58. package/dist/components/Tab/Tab.vue.d.ts +18 -109
  59. package/dist/components/TableNext/TableBodyCell.vue.d.ts +2 -2
  60. package/dist/components/TableNext/TablePagination.vue.d.ts +6 -6
  61. package/dist/components/Tag/DefaultTag.vue.d.ts +1 -1
  62. package/dist/components/Tag/Tag.vue.d.ts +2 -2
  63. package/dist/components/TextArea/TextArea.vue.d.ts +5 -5
  64. package/dist/components/Toast/Toast.vue.d.ts +1 -1
  65. package/dist/components/ToolTip/ToolTip.vue.d.ts +18 -109
  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/popover/PopoverContent.vue.d.ts +2 -2
  71. package/dist/components/ui/popover/PopoverContent.vue.d.ts.map +1 -1
  72. package/dist/components/ui/tabs/TabsTrigger.vue.d.ts.map +1 -1
  73. package/dist/{es-fc643bdb.mjs → es-042a0d15.mjs} +1 -1
  74. package/dist/{index-4601aaf4.mjs → index-fd0ea6b9.mjs} +50121 -52977
  75. package/dist/{pt-br-0b82e6d2.mjs → pt-br-3b7cced5.mjs} +1 -1
  76. package/dist/style.css +1 -1
  77. package/dist/unnnic.mjs +196 -232
  78. package/dist/unnnic.umd.js +44 -48
  79. package/package.json +1 -2
  80. package/src/assets/scss/tailwind.scss +0 -8
  81. package/src/components/Drawer/Drawer.vue +270 -177
  82. package/src/components/Drawer/__tests__/Drawer.spec.js +46 -31
  83. package/src/components/Drawer/__tests__/__snapshots__/Drawer.spec.js.snap +19 -18
  84. package/src/components/ModalDialog/ModalDialog.vue +148 -62
  85. package/src/components/ModalDialog/__tests__/ModalDialog.spec.js +221 -11
  86. package/src/components/ModalDialog/__tests__/__snapshots__/ModalDialog.spec.js.snap +22 -1
  87. package/src/components/Tab/__test__/__snapshots__/Tab.spec.js.snap +1 -3
  88. package/src/components/ToolTip/ToolTip.vue +188 -41
  89. package/src/components/ToolTip/__tests__/ToolTip.spec.js +61 -345
  90. package/src/components/index.ts +12 -86
  91. package/src/components/ui/tabs/TabsTrigger.vue +20 -4
  92. package/src/stories/Drawer.stories.js +1 -1
  93. package/src/stories/ModalDialog.mdx +0 -3
  94. package/src/stories/ModalDialog.stories.js +1 -1
  95. package/src/stories/Tabs.stories.js +1 -1
  96. package/dist/components/ui/dialog/Dialog.vue.d.ts +0 -23
  97. package/dist/components/ui/dialog/Dialog.vue.d.ts.map +0 -1
  98. package/dist/components/ui/dialog/DialogClose.vue.d.ts +0 -19
  99. package/dist/components/ui/dialog/DialogClose.vue.d.ts.map +0 -1
  100. package/dist/components/ui/dialog/DialogContent.vue.d.ts +0 -43
  101. package/dist/components/ui/dialog/DialogContent.vue.d.ts.map +0 -1
  102. package/dist/components/ui/dialog/DialogFooter.vue.d.ts +0 -25
  103. package/dist/components/ui/dialog/DialogFooter.vue.d.ts.map +0 -1
  104. package/dist/components/ui/dialog/DialogHeader.vue.d.ts +0 -29
  105. package/dist/components/ui/dialog/DialogHeader.vue.d.ts.map +0 -1
  106. package/dist/components/ui/dialog/DialogTitle.vue.d.ts +0 -23
  107. package/dist/components/ui/dialog/DialogTitle.vue.d.ts.map +0 -1
  108. package/dist/components/ui/dialog/DialogTrigger.vue.d.ts +0 -19
  109. package/dist/components/ui/dialog/DialogTrigger.vue.d.ts.map +0 -1
  110. package/dist/components/ui/dialog/index.d.ts +0 -8
  111. package/dist/components/ui/dialog/index.d.ts.map +0 -1
  112. package/dist/components/ui/drawer/Drawer.vue.d.ts +0 -35
  113. package/dist/components/ui/drawer/Drawer.vue.d.ts.map +0 -1
  114. package/dist/components/ui/drawer/DrawerClose.vue.d.ts +0 -19
  115. package/dist/components/ui/drawer/DrawerClose.vue.d.ts.map +0 -1
  116. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +0 -42
  117. package/dist/components/ui/drawer/DrawerContent.vue.d.ts.map +0 -1
  118. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +0 -23
  119. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts.map +0 -1
  120. package/dist/components/ui/drawer/DrawerFooter.vue.d.ts +0 -22
  121. package/dist/components/ui/drawer/DrawerFooter.vue.d.ts.map +0 -1
  122. package/dist/components/ui/drawer/DrawerHeader.vue.d.ts +0 -25
  123. package/dist/components/ui/drawer/DrawerHeader.vue.d.ts.map +0 -1
  124. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +0 -8
  125. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts.map +0 -1
  126. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +0 -23
  127. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts.map +0 -1
  128. package/dist/components/ui/drawer/DrawerTrigger.vue.d.ts +0 -19
  129. package/dist/components/ui/drawer/DrawerTrigger.vue.d.ts.map +0 -1
  130. package/dist/components/ui/drawer/index.d.ts +0 -11
  131. package/dist/components/ui/drawer/index.d.ts.map +0 -1
  132. package/dist/components/ui/segmented-control/SegmentedControlList.vue.d.ts +0 -26
  133. package/dist/components/ui/segmented-control/SegmentedControlList.vue.d.ts.map +0 -1
  134. package/dist/components/ui/segmented-control/SegmentedControlTrigger.vue.d.ts +0 -24
  135. package/dist/components/ui/segmented-control/SegmentedControlTrigger.vue.d.ts.map +0 -1
  136. package/dist/components/ui/segmented-control/index.d.ts +0 -5
  137. package/dist/components/ui/segmented-control/index.d.ts.map +0 -1
  138. package/dist/components/ui/tooltip/Tooltip.vue.d.ts +0 -23
  139. package/dist/components/ui/tooltip/Tooltip.vue.d.ts.map +0 -1
  140. package/dist/components/ui/tooltip/TooltipContent.vue.d.ts +0 -31
  141. package/dist/components/ui/tooltip/TooltipContent.vue.d.ts.map +0 -1
  142. package/dist/components/ui/tooltip/TooltipProvider.vue.d.ts +0 -19
  143. package/dist/components/ui/tooltip/TooltipProvider.vue.d.ts.map +0 -1
  144. package/dist/components/ui/tooltip/TooltipTrigger.vue.d.ts +0 -19
  145. package/dist/components/ui/tooltip/TooltipTrigger.vue.d.ts.map +0 -1
  146. package/dist/components/ui/tooltip/index.d.ts +0 -5
  147. package/dist/components/ui/tooltip/index.d.ts.map +0 -1
  148. package/src/components/ui/dialog/Dialog.vue +0 -15
  149. package/src/components/ui/dialog/DialogClose.vue +0 -25
  150. package/src/components/ui/dialog/DialogContent.vue +0 -133
  151. package/src/components/ui/dialog/DialogFooter.vue +0 -46
  152. package/src/components/ui/dialog/DialogHeader.vue +0 -79
  153. package/src/components/ui/dialog/DialogTitle.vue +0 -34
  154. package/src/components/ui/dialog/DialogTrigger.vue +0 -12
  155. package/src/components/ui/dialog/index.ts +0 -7
  156. package/src/components/ui/drawer/Drawer.vue +0 -27
  157. package/src/components/ui/drawer/DrawerClose.vue +0 -37
  158. package/src/components/ui/drawer/DrawerContent.vue +0 -102
  159. package/src/components/ui/drawer/DrawerDescription.vue +0 -40
  160. package/src/components/ui/drawer/DrawerFooter.vue +0 -38
  161. package/src/components/ui/drawer/DrawerHeader.vue +0 -57
  162. package/src/components/ui/drawer/DrawerOverlay.vue +0 -34
  163. package/src/components/ui/drawer/DrawerTitle.vue +0 -37
  164. package/src/components/ui/drawer/DrawerTrigger.vue +0 -31
  165. package/src/components/ui/drawer/index.ts +0 -10
  166. package/src/components/ui/segmented-control/SegmentedControlList.vue +0 -51
  167. package/src/components/ui/segmented-control/SegmentedControlTrigger.vue +0 -81
  168. package/src/components/ui/segmented-control/index.ts +0 -4
  169. package/src/components/ui/tooltip/Tooltip.vue +0 -15
  170. package/src/components/ui/tooltip/TooltipContent.vue +0 -73
  171. package/src/components/ui/tooltip/TooltipProvider.vue +0 -15
  172. package/src/components/ui/tooltip/TooltipTrigger.vue +0 -22
  173. package/src/components/ui/tooltip/index.ts +0 -4
  174. package/src/stories/Dialog.stories.js +0 -832
  175. package/src/stories/DrawerNext.stories.js +0 -610
  176. package/src/stories/SegmentedControl.stories.js +0 -253
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weni/unnnic-system",
3
- "version": "3.11.1-alpha.4",
3
+ "version": "3.11.2",
4
4
  "type": "commonjs",
5
5
  "files": [
6
6
  "dist",
@@ -63,7 +63,6 @@
63
63
  "reka-ui": "^2.6.0",
64
64
  "remark-gfm": "^4.0.0",
65
65
  "tw-animate-css": "^1.4.0",
66
- "vaul-vue": "^0.4.1",
67
66
  "vue": "^3.4.8",
68
67
  "vue-i18n": "9",
69
68
  "vue-the-mask": "^0.11.1"
@@ -92,13 +92,5 @@
92
92
  @apply bg-background text-foreground;
93
93
  font-family: $unnnic-font-family;
94
94
  }
95
-
96
- button {
97
- border: none;
98
- background: none;
99
- padding: 0;
100
- margin: 0;
101
- cursor: pointer;
102
- }
103
95
  }
104
96
 
@@ -1,196 +1,198 @@
1
1
  <template>
2
- <Drawer
2
+ <aside
3
+ v-if="modelValue"
3
4
  class="unnnic-drawer"
4
5
  data-testid="drawer"
5
- :open="modelValue"
6
- @update:open="$emit('update:modelValue', $event)"
7
6
  >
8
- <DrawerContent
9
- :showOverlay="!withoutOverlay"
10
- data-testid="drawer-container"
11
- :size="mappedSize"
12
- :class="['unnnic-drawer__container', `unnnic-drawer__container--${size}`]"
7
+ <section
8
+ v-if="!withoutOverlay"
9
+ class="unnnic-drawer__overlay"
10
+ data-testid="overlay"
11
+ @click.stop="close"
12
+ />
13
+ <Transition
14
+ appear
15
+ name="drawer"
13
16
  >
14
- <DrawerHeader class="unnnic-drawer__header">
15
- <section class="unnnic-drawer__title-container">
16
- <slot
17
- v-if="$slots.title"
18
- name="title"
19
- />
20
-
21
- <template v-else>
22
- <DrawerTitle
23
- class="unnnic-drawer__title"
24
- data-testid="drawer-title"
25
- >
26
- {{ title }}
27
- </DrawerTitle>
28
- <DrawerDescription
29
- v-if="description"
30
- class="unnnic-drawer__description"
31
- data-testid="drawer-description"
32
- >
33
- {{ description }}
34
- </DrawerDescription>
35
- </template>
36
- </section>
37
- <template #close>
38
- <DrawerClose>
39
- <UnnnicButton
40
- class="unnnic-drawer__close-icon"
41
- data-testid="close-icon"
42
- :iconCenter="closeIcon"
43
- size="small"
44
- type="tertiary"
45
- @click="back"
17
+ <section
18
+ v-if="showDrawer"
19
+ data-testid="drawer-container"
20
+ :class="[
21
+ 'unnnic-drawer__container',
22
+ `unnnic-drawer__container--${size}`,
23
+ ]"
24
+ >
25
+ <header class="unnnic-drawer__header">
26
+ <section class="unnnic-drawer__title-container">
27
+ <slot
28
+ v-if="$slots.title"
29
+ name="title"
46
30
  />
47
- </DrawerClose>
48
- </template>
49
- </DrawerHeader>
50
31
 
51
- <section class="unnnic-drawer__content">
52
- <slot name="content"></slot>
32
+ <template v-else>
33
+ <h1
34
+ class="unnnic-drawer__title"
35
+ data-testid="drawer-title"
36
+ >
37
+ {{ title }}
38
+ </h1>
39
+ <p
40
+ v-if="description"
41
+ class="unnnic-drawer__description"
42
+ data-testid="drawer-description"
43
+ >
44
+ {{ description }}
45
+ </p>
46
+ </template>
47
+ </section>
48
+ <UnnnicIcon
49
+ class="unnnic-drawer__close"
50
+ data-testid="close-icon"
51
+ :icon="closeIcon"
52
+ size="avatar-nano"
53
+ clickable
54
+ @click="back"
55
+ />
56
+ </header>
57
+ <section class="unnnic-drawer__content">
58
+ <slot name="content"></slot>
59
+ </section>
60
+ <footer
61
+ v-if="showFooter"
62
+ class="unnnic-drawer__footer"
63
+ data-testid="footer"
64
+ >
65
+ <UnnnicButton
66
+ v-if="secondaryButtonText"
67
+ data-testid="secondary-button"
68
+ size="large"
69
+ type="tertiary"
70
+ :disabled="disabledSecondaryButton"
71
+ :loading="loadingSecondaryButton"
72
+ :text="secondaryButtonText"
73
+ @click="$emit('secondaryButtonClick')"
74
+ />
75
+ <UnnnicButton
76
+ v-if="primaryButtonText"
77
+ data-testid="primary-button"
78
+ size="large"
79
+ :disabled="disabledPrimaryButton"
80
+ :loading="loadingPrimaryButton"
81
+ :type="primaryButtonType"
82
+ :text="primaryButtonText"
83
+ @click="$emit('primaryButtonClick')"
84
+ />
85
+ </footer>
53
86
  </section>
54
-
55
- <DrawerFooter
56
- v-if="showFooter"
57
- class="unnnic-drawer__footer"
58
- data-testid="footer"
59
- >
60
- <UnnnicButton
61
- v-if="secondaryButtonText"
62
- data-testid="secondary-button"
63
- size="large"
64
- type="tertiary"
65
- :disabled="disabledSecondaryButton"
66
- :loading="loadingSecondaryButton"
67
- :text="secondaryButtonText"
68
- @click="$emit('secondaryButtonClick')"
69
- />
70
- <UnnnicButton
71
- v-if="primaryButtonText"
72
- data-testid="primary-button"
73
- size="large"
74
- :disabled="disabledPrimaryButton"
75
- :loading="loadingPrimaryButton"
76
- :type="primaryButtonType"
77
- :text="primaryButtonText"
78
- @click="$emit('primaryButtonClick')"
79
- />
80
- </DrawerFooter>
81
- </DrawerContent>
82
- </Drawer>
87
+ </Transition>
88
+ </aside>
83
89
  </template>
84
90
 
85
- <script setup>
86
- import { computed } from 'vue';
87
-
91
+ <script>
92
+ import UnnnicIcon from '../Icon.vue';
88
93
  import UnnnicButton from '../Button/Button.vue';
89
- import {
90
- Drawer,
91
- DrawerContent,
92
- DrawerHeader,
93
- DrawerFooter,
94
- DrawerClose,
95
- DrawerTitle,
96
- DrawerDescription,
97
- } from '../ui/drawer';
98
-
99
- defineOptions({
100
- name: 'UnnnicDrawer',
101
- });
102
94
 
103
- const props = defineProps({
104
- title: {
105
- type: String,
106
- required: true,
107
- },
108
- description: {
109
- type: String,
110
- default: '',
111
- },
112
- disabledPrimaryButton: {
113
- type: Boolean,
114
- default: false,
115
- },
116
- disabledSecondaryButton: {
117
- type: Boolean,
118
- default: false,
119
- },
120
- loadingPrimaryButton: {
121
- type: Boolean,
122
- default: false,
123
- },
124
- loadingSecondaryButton: {
125
- type: Boolean,
126
- default: false,
127
- },
128
- primaryButtonText: {
129
- type: String,
130
- default: '',
131
- },
132
- primaryButtonType: {
133
- type: String,
134
- default: 'primary',
135
- },
136
- secondaryButtonText: {
137
- type: String,
138
- default: '',
95
+ export default {
96
+ name: 'UnnnicDrawer',
97
+ components: {
98
+ UnnnicIcon,
99
+ UnnnicButton,
139
100
  },
140
- size: {
141
- type: String,
142
- default: 'md',
143
- validator(val) {
144
- return ['md', 'lg', 'xl', 'gt'].includes(val);
101
+ props: {
102
+ title: {
103
+ type: String,
104
+ required: true,
105
+ },
106
+ description: {
107
+ type: String,
108
+ default: '',
109
+ },
110
+ disabledPrimaryButton: {
111
+ type: Boolean,
112
+ default: false,
113
+ },
114
+ disabledSecondaryButton: {
115
+ type: Boolean,
116
+ default: false,
117
+ },
118
+ loadingPrimaryButton: {
119
+ type: Boolean,
120
+ default: false,
121
+ },
122
+ loadingSecondaryButton: {
123
+ type: Boolean,
124
+ default: false,
125
+ },
126
+ primaryButtonText: {
127
+ type: String,
128
+ default: '',
129
+ },
130
+ primaryButtonType: {
131
+ type: String,
132
+ default: 'primary',
133
+ },
134
+ secondaryButtonText: {
135
+ type: String,
136
+ default: '',
137
+ },
138
+ size: {
139
+ type: String,
140
+ default: 'md',
141
+ validator(val) {
142
+ return ['md', 'lg', 'xl', 'gt'].includes(val);
143
+ },
144
+ },
145
+ wide: {
146
+ type: Boolean,
147
+ default: false,
148
+ },
149
+ modelValue: {
150
+ type: Boolean,
151
+ required: true,
152
+ },
153
+ withoutOverlay: {
154
+ type: Boolean,
155
+ default: false,
156
+ },
157
+ closeIcon: {
158
+ type: String,
159
+ default: 'arrow_back',
160
+ },
161
+ distinctCloseBack: {
162
+ type: Boolean,
163
+ default: false,
145
164
  },
146
165
  },
147
- modelValue: {
148
- type: Boolean,
149
- required: true,
150
- },
151
- withoutOverlay: {
152
- type: Boolean,
153
- default: false,
166
+ emits: ['primaryButtonClick', 'secondaryButtonClick', 'close', 'back'],
167
+ data() {
168
+ return {
169
+ showDrawer: true,
170
+ };
154
171
  },
155
- closeIcon: {
156
- type: String,
157
- default: 'arrow_forward',
172
+ computed: {
173
+ showFooter() {
174
+ return !!(this.primaryButtonText || this.secondaryButtonText);
175
+ },
158
176
  },
159
- distinctCloseBack: {
160
- type: Boolean,
161
- default: false,
177
+ methods: {
178
+ transitionClose(callback) {
179
+ this.showDrawer = false;
180
+ setTimeout(() => {
181
+ callback?.();
182
+ this.showDrawer = true;
183
+ }, 200);
184
+ },
185
+ close() {
186
+ this.transitionClose(() => this.$emit('close'));
187
+ },
188
+ back() {
189
+ if (this.distinctCloseBack) {
190
+ this.transitionClose(() => this.$emit('back'));
191
+ } else {
192
+ this.close();
193
+ }
194
+ },
162
195
  },
163
- });
164
-
165
- const emit = defineEmits([
166
- 'primaryButtonClick',
167
- 'secondaryButtonClick',
168
- 'close',
169
- 'back',
170
- ]);
171
- const showFooter = computed(
172
- () => !!(props.primaryButtonText || props.secondaryButtonText),
173
- );
174
- const mappedSize = computed(() => {
175
- const sizes = {
176
- md: 'medium',
177
- lg: 'large',
178
- xl: 'extra-large',
179
- gt: 'giant',
180
- };
181
- return sizes[props.size] || 'medium';
182
- });
183
-
184
- const close = () => {
185
- emit('close');
186
- };
187
-
188
- const back = () => {
189
- if (props.distinctCloseBack) {
190
- emit('back');
191
- } else {
192
- close();
193
- }
194
196
  };
195
197
  </script>
196
198
 
@@ -202,16 +204,107 @@ const back = () => {
202
204
  box-sizing: border-box;
203
205
  }
204
206
 
207
+ @keyframes drawerOpen {
208
+ from {
209
+ transform: translateX(100%);
210
+ }
211
+ to {
212
+ transform: translateX(0);
213
+ }
214
+ }
215
+
216
+ @keyframes drawerClose {
217
+ from {
218
+ transform: translateX(0);
219
+ }
220
+ to {
221
+ transform: translateX(100%);
222
+ }
223
+ }
224
+
225
+ .drawer-enter-active,
226
+ .drawer-enter-to {
227
+ animation: drawerOpen 200ms ease-in;
228
+ }
229
+
230
+ .drawer-leave-active,
231
+ .drawer-leave-to {
232
+ display: none;
233
+ animation: drawerClose 200ms ease-in;
234
+ }
235
+
205
236
  .unnnic-drawer {
237
+ width: 100vw;
238
+ height: 100vh;
239
+ position: fixed;
240
+ left: 0;
241
+ top: 0;
206
242
  z-index: 8;
207
243
  }
208
244
 
245
+ .unnnic-drawer__overlay {
246
+ z-index: 9;
247
+ background-color: rgba(0, 0, 0, 0.4);
248
+ width: 100%;
249
+ height: 100%;
250
+ }
251
+
209
252
  .unnnic-drawer__container {
210
253
  z-index: 10;
254
+ top: 0;
255
+ right: 0;
256
+ position: fixed;
257
+ display: flex;
258
+ flex-direction: column;
259
+ font-family: $unnnic-font-family-secondary;
260
+ justify-content: space-between;
261
+ height: 100%;
262
+ background-color: $unnnic-color-neutral-white;
211
263
 
212
- .unnnic-drawer__close-icon {
213
- margin: $unnnic-spacing-nano;
264
+ &--md {
265
+ width: calc(100% / 3);
266
+ }
267
+
268
+ &--lg {
269
+ width: 50%;
270
+ }
271
+
272
+ &--xl {
273
+ width: 66%;
274
+ }
275
+
276
+ &--gt {
277
+ width: 75%;
278
+ }
279
+
280
+ .unnnic-drawer__header {
214
281
  display: flex;
282
+ justify-content: space-between;
283
+ border-bottom: 1px solid $unnnic-color-neutral-soft;
284
+ padding: $unnnic-spacing-md;
285
+ .unnnic-drawer__title-container {
286
+ .unnnic-drawer__title {
287
+ color: $unnnic-color-neutral-darkest;
288
+ font-family: $unnnic-font-family-secondary;
289
+ font-size: $unnnic-font-size-title-sm;
290
+ font-weight: $unnnic-font-weight-black;
291
+ line-height: $unnnic-line-height-large * 1.75;
292
+ }
293
+
294
+ .unnnic-drawer__description {
295
+ color: $unnnic-color-neutral-cloudy;
296
+ font-family: $unnnic-font-family-secondary;
297
+ font-size: $unnnic-font-size-body-gt;
298
+ font-weight: $unnnic-font-weight-regular;
299
+ line-height: $unnnic-line-height-large * 1.375;
300
+ }
301
+ }
302
+
303
+ .unnnic-drawer__close {
304
+ margin: $unnnic-spacing-nano;
305
+ transform: rotate(180deg);
306
+ display: flex;
307
+ }
215
308
  }
216
309
 
217
310
  .unnnic-drawer__content {
@@ -5,13 +5,6 @@ import Drawer from '../Drawer.vue';
5
5
  describe('Drawer.vue', () => {
6
6
  let wrapper;
7
7
 
8
- const templateSlot = { template: `<div><slot /></div>` };
9
- const globalStubs = {
10
- UnnnicIcon: true,
11
- UnnnicButton: true,
12
- Teleport: templateSlot,
13
- };
14
-
15
8
  beforeEach(() => {
16
9
  wrapper = mount(Drawer, {
17
10
  props: {
@@ -22,14 +15,15 @@ describe('Drawer.vue', () => {
22
15
  secondaryButtonText: 'Secondary Action',
23
16
  },
24
17
  global: {
25
- stubs: globalStubs,
18
+ stubs: ['UnnnicIcon', 'UnnnicButton'],
26
19
  },
27
20
  });
28
21
  });
29
22
 
30
23
  const element = (id) => wrapper.find(`[data-testid="${id}"]`);
31
24
  const component = (id) => wrapper.findComponent(`[data-testid="${id}"]`);
32
- const drawerRoot = () => wrapper.findComponent({ name: 'UnnnicDrawerNext' });
25
+ const drawer = () => element('drawer');
26
+ const overlay = () => element('overlay');
33
27
  const title = () => element('drawer-title');
34
28
  const description = () => element('drawer-description');
35
29
  const primaryButton = () => component('primary-button');
@@ -37,8 +31,6 @@ describe('Drawer.vue', () => {
37
31
  const footer = () => element('footer');
38
32
  const closeIcon = () => component('close-icon');
39
33
  const drawerContainer = () => element('drawer-container');
40
- const drawerContentComponent = () =>
41
- wrapper.findComponent({ name: 'UnnnicDrawerContent' });
42
34
 
43
35
  describe('Component Rendering', () => {
44
36
  describe('Component Rendering', () => {
@@ -47,21 +39,21 @@ describe('Drawer.vue', () => {
47
39
  });
48
40
 
49
41
  it('should render the drawer when modelValue is true', () => {
50
- expect(drawerRoot().props('open')).toBe(true);
42
+ expect(drawer().exists()).toBe(true);
51
43
  });
52
44
 
53
45
  it('should not render the drawer when modelValue is false', async () => {
54
46
  await wrapper.setProps({ modelValue: false });
55
- expect(drawerRoot().props('open')).toBe(false);
47
+ expect(drawer().exists()).toBe(false);
56
48
  });
57
49
 
58
50
  it('should render the overlay when withoutOverlay is false', () => {
59
- expect(drawerContentComponent().props('showOverlay')).toBe(true);
51
+ expect(overlay().exists()).toBe(true);
60
52
  });
61
53
 
62
54
  it('should not render the overlay when withoutOverlay is true', async () => {
63
55
  await wrapper.setProps({ withoutOverlay: true });
64
- expect(drawerContentComponent().props('showOverlay')).toBe(false);
56
+ expect(overlay().exists()).toBe(false);
65
57
  });
66
58
 
67
59
  it('should display the title and description correctly', () => {
@@ -83,11 +75,7 @@ describe('Drawer.vue', () => {
83
75
  slots: {
84
76
  content: '<div data-testid="slot-content">Slot Content</div>',
85
77
  },
86
- global: {
87
- stubs: globalStubs,
88
- },
89
78
  });
90
-
91
79
  expect(wrapper.find('[data-testid="slot-content"]').exists()).toBe(
92
80
  true,
93
81
  );
@@ -105,9 +93,6 @@ describe('Drawer.vue', () => {
105
93
  slots: {
106
94
  title: '<h2 data-testid="custom-title">Custom Title Content</h2>',
107
95
  },
108
- global: {
109
- stubs: globalStubs,
110
- },
111
96
  });
112
97
 
113
98
  expect(title().exists()).toBe(false);
@@ -128,9 +113,6 @@ describe('Drawer.vue', () => {
128
113
  slots: {
129
114
  title: '<div data-testid="custom-title">Slot Title</div>',
130
115
  },
131
- global: {
132
- stubs: globalStubs,
133
- },
134
116
  });
135
117
 
136
118
  expect(title().exists()).toBe(false);
@@ -182,7 +164,7 @@ describe('Drawer.vue', () => {
182
164
  });
183
165
  });
184
166
 
185
- describe('Interactions', () => {
167
+ describe('Interactions and Transitions', () => {
186
168
  beforeEach(() => {
187
169
  vi.useFakeTimers();
188
170
  });
@@ -192,6 +174,9 @@ describe('Drawer.vue', () => {
192
174
 
193
175
  it('should close the drawer when the close icon is clicked', async () => {
194
176
  await closeIcon().trigger('click');
177
+
178
+ vi.advanceTimersByTime(200);
179
+
195
180
  expect(wrapper.emitted('close')).toBeTruthy();
196
181
  });
197
182
 
@@ -199,6 +184,8 @@ describe('Drawer.vue', () => {
199
184
  await wrapper.setProps({ distinctCloseBack: true });
200
185
  await closeIcon().trigger('click');
201
186
 
187
+ vi.advanceTimersByTime(200);
188
+
202
189
  expect(wrapper.emitted('back')).toBeTruthy();
203
190
  });
204
191
 
@@ -206,21 +193,49 @@ describe('Drawer.vue', () => {
206
193
  await closeIcon().trigger('click');
207
194
  expect(wrapper.emitted('back')).toBeUndefined();
208
195
  });
196
+
197
+ it('should correctly handle transitions when closing the drawer', async () => {
198
+ await wrapper.vm.close();
199
+ expect(wrapper.vm.showDrawer).toBe(false);
200
+
201
+ setTimeout(() => {
202
+ expect(drawer().exists()).toBe(false);
203
+ }, 200);
204
+ });
205
+
206
+ it('should handle overlay clicks to close the drawer when withoutOverlay is false', async () => {
207
+ expect(overlay().exists()).toBe(true);
208
+ await overlay().trigger('click');
209
+
210
+ vi.advanceTimersByTime(200);
211
+
212
+ expect(wrapper.emitted('close')).toBeTruthy();
213
+ });
214
+
215
+ it('should execute the callback after 200ms timeout and reset showDrawer', async () => {
216
+ const callbackMock = vi.fn();
217
+ wrapper.vm.transitionClose(callbackMock);
218
+
219
+ expect(wrapper.vm.showDrawer).toBe(false);
220
+
221
+ vi.advanceTimersByTime(200);
222
+
223
+ expect(callbackMock).toHaveBeenCalled();
224
+ expect(wrapper.vm.showDrawer).toBe(true);
225
+ });
209
226
  });
210
227
 
211
228
  describe('Props and Computed Properties', () => {
212
229
  it('should render the correct size class based on size prop', async () => {
213
230
  await wrapper.setProps({ size: 'lg' });
214
- expect(drawerContentComponent().props('class')).toContain(
231
+ expect(drawerContainer().classes()).toContain(
215
232
  'unnnic-drawer__container--lg',
216
233
  );
217
- expect(drawerContentComponent().props('size')).toBe('large');
218
234
 
219
235
  await wrapper.setProps({ size: 'xl' });
220
- expect(drawerContentComponent().props('class')).toContain(
236
+ expect(drawerContainer().classes()).toContain(
221
237
  'unnnic-drawer__container--xl',
222
238
  );
223
- expect(drawerContentComponent().props('size')).toBe('extra-large');
224
239
  });
225
240
 
226
241
  it('should display footer if either primaryButtonText or secondaryButtonText is provided', async () => {
@@ -260,7 +275,7 @@ describe('Drawer.vue', () => {
260
275
 
261
276
  it('should use correct icon for close button based on closeIcon prop', async () => {
262
277
  await wrapper.setProps({ closeIcon: 'custom_close_icon' });
263
- expect(closeIcon().props('iconCenter')).toBe('custom_close_icon');
278
+ expect(closeIcon().props('icon')).toBe('custom_close_icon');
264
279
  });
265
280
 
266
281
  it('should validate all size prop values correctly', () => {