@weni/unnnic-system 3.12.1 → 3.12.3-alpha-teleports.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 (200) hide show
  1. package/CHANGELOG.md +9 -0
  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 +92 -18
  5. package/dist/components/AudioRecorder/AudioRecorder.vue.d.ts +184 -36
  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 +103 -29
  10. package/dist/components/Card/CardCompany.vue.d.ts +2 -2
  11. package/dist/components/Card/CardStatusesContainer.vue.d.ts +93 -19
  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 +92 -18
  17. package/dist/components/Card/StatusCard.vue.d.ts +1 -1
  18. package/dist/components/Card/TitleCard.vue.d.ts +92 -18
  19. package/dist/components/CardImage/CardImage.vue.d.ts +5 -5
  20. package/dist/components/CardInformation/CardInformation.vue.d.ts +93 -19
  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 +98 -24
  25. package/dist/components/ChartFunnel/DefaultFunnel/ChartDefaultFunnelBase.vue.d.ts.map +1 -1
  26. package/dist/components/ChartLine/ChartLine.vue.d.ts +92 -18
  27. package/dist/components/ChatText/ChatText.vue.d.ts +92 -18
  28. package/dist/components/ChatsContact/ChatsContact.vue.d.ts +6 -6
  29. package/dist/components/ChatsMessage/ChatsMessage.vue.d.ts +92 -18
  30. package/dist/components/ChatsUserAvatar/ChatsUserAvatar.vue.d.ts +1 -1
  31. package/dist/components/Checkbox/Checkbox.vue.d.ts +3 -3
  32. package/dist/components/Checkbox/Checkbox.vue.d.ts.map +1 -1
  33. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts.map +1 -1
  34. package/dist/components/DataArea/DataArea.vue.d.ts +92 -18
  35. package/dist/components/DataTable/index.vue.d.ts +1 -1
  36. package/dist/components/DataTable/index.vue.d.ts.map +1 -1
  37. package/dist/components/DateFilter/DateFilter.vue.d.ts +13 -13
  38. package/dist/components/Drawer/Drawer.vue.d.ts +37 -207
  39. package/dist/components/Drawer/Drawer.vue.d.ts.map +1 -1
  40. package/dist/components/Dropdown/Dropdown.vue.d.ts +1 -1
  41. package/dist/components/FormElement/FormElement.vue.d.ts +6 -6
  42. package/dist/components/FormElement/FormElement.vue.d.ts.map +1 -1
  43. package/dist/components/ImportCard/ImportCard.vue.d.ts +6 -6
  44. package/dist/components/Input/Input.vue.d.ts +12 -12
  45. package/dist/components/Input/TextInput.vue.d.ts +2 -2
  46. package/dist/components/InputNext/InputNext.vue.d.ts +3 -3
  47. package/dist/components/Label/Label.vue.d.ts +1 -1
  48. package/dist/components/Label/Label.vue.d.ts.map +1 -1
  49. package/dist/components/Modal/Modal.vue.d.ts +1 -1
  50. package/dist/components/ModalDialog/ModalDialog.vue.d.ts +209 -35
  51. package/dist/components/ModalDialog/ModalDialog.vue.d.ts.map +1 -1
  52. package/dist/components/ModalNext/ModalNext.vue.d.ts +18 -18
  53. package/dist/components/ModalUpload/ModalUpload.vue.d.ts +12 -12
  54. package/dist/components/MoodRating/MoodRating.vue.d.ts +92 -18
  55. package/dist/components/MultiSelect/MultiSelect.vue.d.ts +18 -18
  56. package/dist/components/Pagination/Pagination.vue.d.ts +6 -6
  57. package/dist/components/Radio/Radio.vue.d.ts +6 -6
  58. package/dist/components/Radio/Radio.vue.d.ts.map +1 -1
  59. package/dist/components/SelectSmart/SelectSmart.vue.d.ts +11 -11
  60. package/dist/components/SelectSmart/SelectSmartMultipleHeader.vue.d.ts +2 -2
  61. package/dist/components/SelectSmart/SelectSmartOption.vue.d.ts +5 -5
  62. package/dist/components/SelectTime/index.vue.d.ts +3 -3
  63. package/dist/components/Slider/Slider.vue.d.ts +92 -18
  64. package/dist/components/Switch/Switch.vue.d.ts +3 -3
  65. package/dist/components/Switch/Switch.vue.d.ts.map +1 -1
  66. package/dist/components/Tab/Tab.vue.d.ts +92 -18
  67. package/dist/components/TableNext/TableBodyCell.vue.d.ts +2 -2
  68. package/dist/components/TableNext/TablePagination.vue.d.ts +6 -6
  69. package/dist/components/Tag/DefaultTag.vue.d.ts +1 -1
  70. package/dist/components/Tag/Tag.vue.d.ts +2 -2
  71. package/dist/components/TemplatePreview/TemplatePreview.vue.d.ts.map +1 -1
  72. package/dist/components/TextArea/TextArea.vue.d.ts +8 -8
  73. package/dist/components/Toast/Toast.vue.d.ts +1 -1
  74. package/dist/components/Toast/Toast.vue.d.ts.map +1 -1
  75. package/dist/components/ToolTip/ToolTip.vue.d.ts +92 -18
  76. package/dist/components/ToolTip/ToolTip.vue.d.ts.map +1 -1
  77. package/dist/components/Tour/Tour.vue.d.ts +6 -6
  78. package/dist/components/Tour/TourPopover.vue.d.ts +6 -6
  79. package/dist/components/UploadArea/UploadArea.vue.d.ts +6 -6
  80. package/dist/components/ui/dialog/Dialog.vue.d.ts +23 -0
  81. package/dist/components/ui/dialog/Dialog.vue.d.ts.map +1 -0
  82. package/dist/components/ui/dialog/DialogClose.vue.d.ts +19 -0
  83. package/dist/components/ui/dialog/DialogClose.vue.d.ts.map +1 -0
  84. package/dist/components/ui/dialog/DialogContent.vue.d.ts +43 -0
  85. package/dist/components/ui/dialog/DialogContent.vue.d.ts.map +1 -0
  86. package/dist/components/ui/dialog/DialogFooter.vue.d.ts +25 -0
  87. package/dist/components/ui/dialog/DialogFooter.vue.d.ts.map +1 -0
  88. package/dist/components/ui/dialog/DialogHeader.vue.d.ts +29 -0
  89. package/dist/components/ui/dialog/DialogHeader.vue.d.ts.map +1 -0
  90. package/dist/components/ui/dialog/DialogTitle.vue.d.ts +23 -0
  91. package/dist/components/ui/dialog/DialogTitle.vue.d.ts.map +1 -0
  92. package/dist/components/ui/dialog/DialogTrigger.vue.d.ts +19 -0
  93. package/dist/components/ui/dialog/DialogTrigger.vue.d.ts.map +1 -0
  94. package/dist/components/ui/dialog/index.d.ts +8 -0
  95. package/dist/components/ui/dialog/index.d.ts.map +1 -0
  96. package/dist/components/ui/drawer/Drawer.vue.d.ts +35 -0
  97. package/dist/components/ui/drawer/Drawer.vue.d.ts.map +1 -0
  98. package/dist/components/ui/drawer/DrawerClose.vue.d.ts +19 -0
  99. package/dist/components/ui/drawer/DrawerClose.vue.d.ts.map +1 -0
  100. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +43 -0
  101. package/dist/components/ui/drawer/DrawerContent.vue.d.ts.map +1 -0
  102. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +23 -0
  103. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts.map +1 -0
  104. package/dist/components/ui/drawer/DrawerFooter.vue.d.ts +22 -0
  105. package/dist/components/ui/drawer/DrawerFooter.vue.d.ts.map +1 -0
  106. package/dist/components/ui/drawer/DrawerHeader.vue.d.ts +25 -0
  107. package/dist/components/ui/drawer/DrawerHeader.vue.d.ts.map +1 -0
  108. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +8 -0
  109. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts.map +1 -0
  110. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +23 -0
  111. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts.map +1 -0
  112. package/dist/components/ui/drawer/DrawerTrigger.vue.d.ts +19 -0
  113. package/dist/components/ui/drawer/DrawerTrigger.vue.d.ts.map +1 -0
  114. package/dist/components/ui/drawer/index.d.ts +11 -0
  115. package/dist/components/ui/drawer/index.d.ts.map +1 -0
  116. package/dist/components/ui/popover/PopoverContent.vue.d.ts +2 -2
  117. package/dist/components/ui/popover/PopoverContent.vue.d.ts.map +1 -1
  118. package/dist/components/ui/popover/PopoverTrigger.vue.d.ts.map +1 -1
  119. package/dist/components/ui/popover/index.d.ts +0 -1
  120. package/dist/components/ui/popover/index.d.ts.map +1 -1
  121. package/dist/components/ui/tooltip/Tooltip.vue.d.ts +23 -0
  122. package/dist/components/ui/tooltip/Tooltip.vue.d.ts.map +1 -0
  123. package/dist/components/ui/tooltip/TooltipContent.vue.d.ts +31 -0
  124. package/dist/components/ui/tooltip/TooltipContent.vue.d.ts.map +1 -0
  125. package/dist/components/ui/tooltip/TooltipTrigger.vue.d.ts +19 -0
  126. package/dist/components/ui/tooltip/TooltipTrigger.vue.d.ts.map +1 -0
  127. package/dist/components/ui/tooltip/index.d.ts +4 -0
  128. package/dist/components/ui/tooltip/index.d.ts.map +1 -0
  129. package/dist/{es-9756db6d.mjs → es-4aa88754.mjs} +1 -1
  130. package/dist/{index-ab280280.mjs → index-ec96f88a.mjs} +99532 -96697
  131. package/dist/lib/layer-manager.d.ts +16 -0
  132. package/dist/lib/layer-manager.d.ts.map +1 -0
  133. package/dist/{pt-br-55135cbc.mjs → pt-br-ec1ec185.mjs} +1 -1
  134. package/dist/style.css +1 -1
  135. package/dist/unnnic.mjs +231 -203
  136. package/dist/unnnic.umd.js +48 -44
  137. package/package.json +3 -2
  138. package/src/assets/scss/tailwind.scss +8 -0
  139. package/src/components/Alert/__tests__/__snapshots__/Alert.spec.js.snap +1 -1
  140. package/src/components/ChartFunnel/DefaultFunnel/ChartDefaultFunnelBase.vue +2 -1
  141. package/src/components/ChartFunnel/SvgFunnel/ChartFunnelTwoRows.vue +61 -60
  142. package/src/components/Checkbox/Checkbox.vue +2 -8
  143. package/src/components/CheckboxGroup/CheckboxGroup.vue +5 -7
  144. package/src/components/Chip/Chip.vue +1 -1
  145. package/src/components/Drawer/Drawer.vue +180 -270
  146. package/src/components/Drawer/__tests__/Drawer.spec.js +32 -43
  147. package/src/components/Drawer/__tests__/__snapshots__/Drawer.spec.js.snap +18 -19
  148. package/src/components/FormElement/FormElement.vue +87 -96
  149. package/src/components/Input/Input.vue +2 -2
  150. package/src/components/ModalDialog/ModalDialog.vue +64 -148
  151. package/src/components/ModalDialog/__tests__/ModalDialog.spec.js +11 -221
  152. package/src/components/ModalDialog/__tests__/__snapshots__/ModalDialog.spec.js.snap +1 -22
  153. package/src/components/Radio/Radio.vue +6 -12
  154. package/src/components/Radio/__test__/Radio.spec.js +1 -3
  155. package/src/components/RadioGroup/RadioGroup.vue +10 -18
  156. package/src/components/Switch/Switch.vue +3 -10
  157. package/src/components/Tab/__test__/__snapshots__/Tab.spec.js.snap +3 -1
  158. package/src/components/TemplatePreview/TemplatePreview.vue +25 -28
  159. package/src/components/TemplatePreview/TemplatePreviewModal.vue +10 -10
  160. package/src/components/TemplatePreview/types.d.ts +3 -3
  161. package/src/components/Toast/Toast.vue +4 -1
  162. package/src/components/ToolTip/ToolTip.vue +25 -177
  163. package/src/components/ToolTip/__tests__/ToolTip.spec.js +339 -61
  164. package/src/components/index.ts +62 -1
  165. package/src/components/ui/dialog/Dialog.vue +19 -0
  166. package/src/components/ui/dialog/DialogClose.vue +29 -0
  167. package/src/components/ui/dialog/DialogContent.vue +140 -0
  168. package/src/components/ui/dialog/DialogFooter.vue +50 -0
  169. package/src/components/ui/dialog/DialogHeader.vue +83 -0
  170. package/src/components/ui/dialog/DialogTitle.vue +38 -0
  171. package/src/components/ui/dialog/DialogTrigger.vue +16 -0
  172. package/src/components/ui/dialog/index.ts +7 -0
  173. package/src/components/ui/drawer/Drawer.vue +27 -0
  174. package/src/components/ui/drawer/DrawerClose.vue +37 -0
  175. package/src/components/ui/drawer/DrawerContent.vue +111 -0
  176. package/src/components/ui/drawer/DrawerDescription.vue +40 -0
  177. package/src/components/ui/drawer/DrawerFooter.vue +38 -0
  178. package/src/components/ui/drawer/DrawerHeader.vue +57 -0
  179. package/src/components/ui/drawer/DrawerOverlay.vue +33 -0
  180. package/src/components/ui/drawer/DrawerTitle.vue +37 -0
  181. package/src/components/ui/drawer/DrawerTrigger.vue +31 -0
  182. package/src/components/ui/drawer/index.ts +10 -0
  183. package/src/components/ui/popover/PopoverContent.vue +4 -2
  184. package/src/components/ui/popover/PopoverTrigger.vue +5 -1
  185. package/src/components/ui/tooltip/Tooltip.vue +21 -0
  186. package/src/components/ui/tooltip/TooltipContent.vue +74 -0
  187. package/src/components/ui/tooltip/TooltipTrigger.vue +26 -0
  188. package/src/components/ui/tooltip/index.ts +3 -0
  189. package/src/lib/layer-manager.ts +92 -0
  190. package/src/stories/Dialog.stories.js +832 -0
  191. package/src/stories/Drawer.stories.js +1 -1
  192. package/src/stories/DrawerNext.stories.js +611 -0
  193. package/src/stories/LayerManager.docs.mdx +40 -0
  194. package/src/stories/LayerManager.stories.js +364 -0
  195. package/src/stories/ModalDialog.mdx +3 -0
  196. package/src/stories/ModalDialog.stories.js +1 -1
  197. package/src/stories/TemplatePreview.stories.js +27 -27
  198. package/src/stories/TemplatePreviewModal.stories.js +31 -31
  199. package/dist/components/ui/popover/PopoverOption.vue.d.ts +0 -18
  200. package/dist/components/ui/popover/PopoverOption.vue.d.ts.map +0 -1
@@ -1,198 +1,199 @@
1
1
  <template>
2
- <aside
3
- v-if="modelValue"
2
+ <Drawer
4
3
  class="unnnic-drawer"
5
4
  data-testid="drawer"
5
+ :open="modelValue"
6
+ @update:open="$event ? () => {} : back()"
6
7
  >
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"
8
+ <DrawerContent
9
+ v-bind="$attrs"
10
+ :showOverlay="!withoutOverlay"
11
+ data-testid="drawer-container"
12
+ :size="mappedSize"
13
+ :class="[
14
+ 'unnnic-drawer__container',
15
+ `unnnic-drawer__container--${size}`,
16
+ props.class,
17
+ ].filter(Boolean).join(' ')"
16
18
  >
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"
30
- />
31
-
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"
19
+ <DrawerHeader class="unnnic-drawer__header">
20
+ <section class="unnnic-drawer__title-container">
21
+ <slot
22
+ v-if="$slots.title"
23
+ name="title"
55
24
  />
56
- </header>
57
- <section class="unnnic-drawer__content">
58
- <slot name="content"></slot>
25
+
26
+ <template v-else>
27
+ <DrawerTitle
28
+ class="unnnic-drawer__title"
29
+ data-testid="drawer-title"
30
+ >
31
+ {{ title }}
32
+ </DrawerTitle>
33
+ <DrawerDescription
34
+ v-if="description"
35
+ class="unnnic-drawer__description"
36
+ data-testid="drawer-description"
37
+ >
38
+ {{ description }}
39
+ </DrawerDescription>
40
+ </template>
59
41
  </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>
42
+ <template #close>
43
+ <DrawerClose>
44
+ <UnnnicButton
45
+ class="unnnic-drawer__close-icon"
46
+ data-testid="close-icon"
47
+ :iconCenter="closeIcon"
48
+ size="small"
49
+ type="tertiary"
50
+ @click="back"
51
+ />
52
+ </DrawerClose>
53
+ </template>
54
+ </DrawerHeader>
55
+
56
+ <section class="unnnic-drawer__content">
57
+ <slot name="content"></slot>
86
58
  </section>
87
- </Transition>
88
- </aside>
59
+
60
+ <DrawerFooter
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
+ </DrawerFooter>
86
+ </DrawerContent>
87
+ </Drawer>
89
88
  </template>
90
89
 
91
- <script>
92
- import UnnnicIcon from '../Icon.vue';
93
- import UnnnicButton from '../Button/Button.vue';
90
+ <script setup>
91
+ import { computed } from 'vue';
94
92
 
95
- export default {
93
+ import UnnnicButton from '../Button/Button.vue';
94
+ import {
95
+ Drawer,
96
+ DrawerContent,
97
+ DrawerHeader,
98
+ DrawerFooter,
99
+ DrawerClose,
100
+ DrawerTitle,
101
+ DrawerDescription,
102
+ } from '../ui/drawer';
103
+
104
+ defineOptions({
96
105
  name: 'UnnnicDrawer',
97
- components: {
98
- UnnnicIcon,
99
- UnnnicButton,
106
+ inheritAttrs: false,
107
+ });
108
+
109
+ const props = defineProps({
110
+ title: {
111
+ type: String,
112
+ required: true,
100
113
  },
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,
164
- },
114
+ description: {
115
+ type: String,
116
+ default: '',
165
117
  },
166
- emits: ['primaryButtonClick', 'secondaryButtonClick', 'close', 'back'],
167
- data() {
168
- return {
169
- showDrawer: true,
170
- };
118
+ disabledPrimaryButton: {
119
+ type: Boolean,
120
+ default: false,
171
121
  },
172
- computed: {
173
- showFooter() {
174
- return !!(this.primaryButtonText || this.secondaryButtonText);
175
- },
122
+ disabledSecondaryButton: {
123
+ type: Boolean,
124
+ default: false,
176
125
  },
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
- }
126
+ loadingPrimaryButton: {
127
+ type: Boolean,
128
+ default: false,
129
+ },
130
+ loadingSecondaryButton: {
131
+ type: Boolean,
132
+ default: false,
133
+ },
134
+ primaryButtonText: {
135
+ type: String,
136
+ default: '',
137
+ },
138
+ primaryButtonType: {
139
+ type: String,
140
+ default: 'primary',
141
+ },
142
+ secondaryButtonText: {
143
+ type: String,
144
+ default: '',
145
+ },
146
+ size: {
147
+ type: String,
148
+ default: 'md',
149
+ validator(val) {
150
+ return ['md', 'lg', 'xl', 'gt'].includes(val);
194
151
  },
195
152
  },
153
+ modelValue: {
154
+ type: Boolean,
155
+ required: true,
156
+ },
157
+ withoutOverlay: {
158
+ type: Boolean,
159
+ default: false,
160
+ },
161
+ closeIcon: {
162
+ type: String,
163
+ default: 'arrow_forward',
164
+ },
165
+ distinctCloseBack: {
166
+ type: Boolean,
167
+ default: false,
168
+ },
169
+ class: {
170
+ type: String,
171
+ default: '',
172
+ },
173
+ });
174
+
175
+ const emit = defineEmits(['primaryButtonClick', 'secondaryButtonClick', 'close', 'back']);
176
+ const showFooter = computed(() => !!(props.primaryButtonText || props.secondaryButtonText));
177
+ const mappedSize = computed(() => {
178
+ const sizes = {
179
+ md: 'medium',
180
+ lg: 'large',
181
+ xl: 'extra-large',
182
+ gt: 'giant',
183
+ }
184
+ return sizes[props.size] || 'medium';
185
+ });
186
+
187
+ const close = () => {
188
+ emit('close');
189
+ };
190
+
191
+ const back = () => {
192
+ if (props.distinctCloseBack) {
193
+ emit('back');
194
+ } else {
195
+ close();
196
+ }
196
197
  };
197
198
  </script>
198
199
 
@@ -204,107 +205,16 @@ export default {
204
205
  box-sizing: border-box;
205
206
  }
206
207
 
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
-
236
208
  .unnnic-drawer {
237
- width: 100vw;
238
- height: 100vh;
239
- position: fixed;
240
- left: 0;
241
- top: 0;
242
209
  z-index: 8;
243
210
  }
244
211
 
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
-
252
212
  .unnnic-drawer__container {
253
213
  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;
263
-
264
- &--md {
265
- width: calc(100% / 3);
266
- }
267
-
268
- &--lg {
269
- width: 50%;
270
- }
271
214
 
272
- &--xl {
273
- width: 66%;
274
- }
275
-
276
- &--gt {
277
- width: 75%;
278
- }
279
-
280
- .unnnic-drawer__header {
215
+ .unnnic-drawer__close-icon {
216
+ margin: $unnnic-spacing-nano;
281
217
  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
- }
308
218
  }
309
219
 
310
220
  .unnnic-drawer__content {
@@ -5,6 +5,19 @@ 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
+ UnnnicDrawerNext: templateSlot,
14
+ UnnnicDrawerContent: templateSlot,
15
+ UnnnicDrawerFooter: templateSlot,
16
+ UnnnicDrawerClose: templateSlot,
17
+ UnnnicDrawerTitle: templateSlot,
18
+ UnnnicDrawerDescription: templateSlot,
19
+ };
20
+
8
21
  beforeEach(() => {
9
22
  wrapper = mount(Drawer, {
10
23
  props: {
@@ -15,7 +28,7 @@ describe('Drawer.vue', () => {
15
28
  secondaryButtonText: 'Secondary Action',
16
29
  },
17
30
  global: {
18
- stubs: ['UnnnicIcon', 'UnnnicButton'],
31
+ stubs: globalStubs,
19
32
  },
20
33
  });
21
34
  });
@@ -23,7 +36,6 @@ describe('Drawer.vue', () => {
23
36
  const element = (id) => wrapper.find(`[data-testid="${id}"]`);
24
37
  const component = (id) => wrapper.findComponent(`[data-testid="${id}"]`);
25
38
  const drawer = () => element('drawer');
26
- const overlay = () => element('overlay');
27
39
  const title = () => element('drawer-title');
28
40
  const description = () => element('drawer-description');
29
41
  const primaryButton = () => component('primary-button');
@@ -39,21 +51,23 @@ describe('Drawer.vue', () => {
39
51
  });
40
52
 
41
53
  it('should render the drawer when modelValue is true', () => {
42
- expect(drawer().exists()).toBe(true);
54
+ expect(drawer().attributes('open')).toBe('true');
43
55
  });
44
56
 
45
57
  it('should not render the drawer when modelValue is false', async () => {
46
58
  await wrapper.setProps({ modelValue: false });
47
- expect(drawer().exists()).toBe(false);
59
+ expect(drawer().attributes('open')).toBe('false');
48
60
  });
49
61
 
50
62
  it('should render the overlay when withoutOverlay is false', () => {
51
- expect(overlay().exists()).toBe(true);
63
+ console.log('wrapper.html()', wrapper.html());
64
+
65
+ expect(drawerContainer().attributes('showoverlay')).toBe('true');
52
66
  });
53
67
 
54
68
  it('should not render the overlay when withoutOverlay is true', async () => {
55
69
  await wrapper.setProps({ withoutOverlay: true });
56
- expect(overlay().exists()).toBe(false);
70
+ expect(drawerContainer().attributes('showoverlay')).toBe('false');
57
71
  });
58
72
 
59
73
  it('should display the title and description correctly', () => {
@@ -75,7 +89,11 @@ describe('Drawer.vue', () => {
75
89
  slots: {
76
90
  content: '<div data-testid="slot-content">Slot Content</div>',
77
91
  },
92
+ global: {
93
+ stubs: globalStubs,
94
+ },
78
95
  });
96
+
79
97
  expect(wrapper.find('[data-testid="slot-content"]').exists()).toBe(
80
98
  true,
81
99
  );
@@ -93,6 +111,9 @@ describe('Drawer.vue', () => {
93
111
  slots: {
94
112
  title: '<h2 data-testid="custom-title">Custom Title Content</h2>',
95
113
  },
114
+ global: {
115
+ stubs: globalStubs,
116
+ },
96
117
  });
97
118
 
98
119
  expect(title().exists()).toBe(false);
@@ -113,6 +134,9 @@ describe('Drawer.vue', () => {
113
134
  slots: {
114
135
  title: '<div data-testid="custom-title">Slot Title</div>',
115
136
  },
137
+ global: {
138
+ stubs: globalStubs,
139
+ },
116
140
  });
117
141
 
118
142
  expect(title().exists()).toBe(false);
@@ -164,7 +188,7 @@ describe('Drawer.vue', () => {
164
188
  });
165
189
  });
166
190
 
167
- describe('Interactions and Transitions', () => {
191
+ describe('Interactions', () => {
168
192
  beforeEach(() => {
169
193
  vi.useFakeTimers();
170
194
  });
@@ -174,9 +198,6 @@ describe('Drawer.vue', () => {
174
198
 
175
199
  it('should close the drawer when the close icon is clicked', async () => {
176
200
  await closeIcon().trigger('click');
177
-
178
- vi.advanceTimersByTime(200);
179
-
180
201
  expect(wrapper.emitted('close')).toBeTruthy();
181
202
  });
182
203
 
@@ -184,8 +205,6 @@ describe('Drawer.vue', () => {
184
205
  await wrapper.setProps({ distinctCloseBack: true });
185
206
  await closeIcon().trigger('click');
186
207
 
187
- vi.advanceTimersByTime(200);
188
-
189
208
  expect(wrapper.emitted('back')).toBeTruthy();
190
209
  });
191
210
 
@@ -193,36 +212,6 @@ describe('Drawer.vue', () => {
193
212
  await closeIcon().trigger('click');
194
213
  expect(wrapper.emitted('back')).toBeUndefined();
195
214
  });
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
- });
226
215
  });
227
216
 
228
217
  describe('Props and Computed Properties', () => {
@@ -275,7 +264,7 @@ describe('Drawer.vue', () => {
275
264
 
276
265
  it('should use correct icon for close button based on closeIcon prop', async () => {
277
266
  await wrapper.setProps({ closeIcon: 'custom_close_icon' });
278
- expect(closeIcon().props('icon')).toBe('custom_close_icon');
267
+ expect(closeIcon().props('iconCenter')).toBe('custom_close_icon');
279
268
  });
280
269
 
281
270
  it('should validate all size prop values correctly', () => {