@weni/unnnic-system 3.4.0 → 3.4.1-alpha.1

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 (236) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/components/Accordion/Accordion.vue.d.ts +1 -1
  3. package/dist/components/Alert/Alert.vue.d.ts +18 -119
  4. package/dist/components/Alert/Alert.vue.d.ts.map +1 -1
  5. package/dist/components/Alert/Version1dot1.vue.d.ts +2 -38
  6. package/dist/components/Alert/Version1dot1.vue.d.ts.map +1 -1
  7. package/dist/components/AudioRecorder/AudioHandler.vue.d.ts +2 -2
  8. package/dist/components/AudioRecorder/AudioPlayer.vue.d.ts +1 -1
  9. package/dist/components/AudioRecorder/AudioRecorder.vue.d.ts +5 -5
  10. package/dist/components/AvatarIcon/AvatarIcon.vue.d.ts +2 -2
  11. package/dist/components/Banner/Banner.vue.d.ts +1 -1
  12. package/dist/components/Banner/InfoBanner.vue.d.ts +1 -1
  13. package/dist/components/Breadcrumb/Breadcrumb.vue.d.ts +1 -1
  14. package/dist/components/Button/Button.vue.d.ts +2 -2
  15. package/dist/components/Button/Button.vue.d.ts.map +1 -1
  16. package/dist/components/Button/ButtonIcon.vue.d.ts +1 -1
  17. package/dist/components/Button/types.d.ts +1 -1
  18. package/dist/components/Button/types.d.ts.map +1 -1
  19. package/dist/components/Card/AccountCard.vue.d.ts +3 -3
  20. package/dist/components/Card/BlankCard.vue.d.ts +1 -1
  21. package/dist/components/Card/Card.vue.d.ts +21 -21
  22. package/dist/components/Card/CardCompany.vue.d.ts +8 -8
  23. package/dist/components/Card/CardData.vue.d.ts +1 -1
  24. package/dist/components/Card/CardStatusesContainer.vue.d.ts +4 -4
  25. package/dist/components/Card/ContentCard.vue.d.ts +2 -2
  26. package/dist/components/Card/DashCard.vue.d.ts +4 -4
  27. package/dist/components/Card/DefaultCard.vue.d.ts +1 -1
  28. package/dist/components/Card/MarketplaceCard.vue.d.ts +2 -2
  29. package/dist/components/Card/SimpleCard.vue.d.ts +3 -3
  30. package/dist/components/Card/StatusCard.vue.d.ts +2 -2
  31. package/dist/components/Card/TitleCard.vue.d.ts +2 -2
  32. package/dist/components/CardImage/CardImage.vue.d.ts +24 -33
  33. package/dist/components/CardInformation/CardInformation.vue.d.ts +4 -4
  34. package/dist/components/CardProject/CardProject.vue.d.ts +3 -3
  35. package/dist/components/Carousel/Carousel.vue.d.ts +11 -11
  36. package/dist/components/Carousel/TagCarousel.vue.d.ts +9 -9
  37. package/dist/components/ChartBar/ChartBar.vue.d.ts +8 -8
  38. package/dist/components/ChartLine/ChartLine.vue.d.ts +1 -1
  39. package/dist/components/ChatText/ChatText.vue.d.ts +2 -2
  40. package/dist/components/ChatsContact/ChatsContact.vue.d.ts +31 -40
  41. package/dist/components/ChatsDashboardTagLive/ChatsDashboardTagLive.vue.d.ts +1 -1
  42. package/dist/components/ChatsHeader/ChatsHeader.vue.d.ts +1 -1
  43. package/dist/components/ChatsHeader/ChatsHeader.vue.d.ts.map +1 -1
  44. package/dist/components/ChatsMessage/ChatsMessage.vue.d.ts +5 -5
  45. package/dist/components/ChatsMessage/ChatsMessageStatusBackdrop.vue.d.ts +2 -2
  46. package/dist/components/ChatsNavbar/ChatsNavbar.vue.d.ts +1 -1
  47. package/dist/components/ChatsUserAvatar/ChatsUserAvatar.vue.d.ts +2 -2
  48. package/dist/components/Checkbox/Checkbox.vue.d.ts +19 -28
  49. package/dist/components/Checkbox/Checkbox.vue.d.ts.map +1 -1
  50. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts +28 -0
  51. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts.map +1 -0
  52. package/dist/components/Comment/Comment.vue.d.ts +1 -1
  53. package/dist/components/DataArea/DataArea.vue.d.ts +2 -2
  54. package/dist/components/DataTable/index.vue.d.ts +1 -1
  55. package/dist/components/DataTable/index.vue.d.ts.map +1 -1
  56. package/dist/components/DateFilter/DateFilter.vue.d.ts +176 -29
  57. package/dist/components/DatePicker/DatePicker.vue.d.ts +8 -8
  58. package/dist/components/Drawer/Drawer.vue.d.ts +7 -7
  59. package/dist/components/Dropdown/Dropdown.vue.d.ts +1 -1
  60. package/dist/components/Dropdown/LanguageSelect.vue.d.ts +3 -3
  61. package/dist/components/Flag.vue.d.ts +2 -2
  62. package/dist/components/FormElement/FormElement.vue.d.ts +38 -32
  63. package/dist/components/FormElement/FormElement.vue.d.ts.map +1 -1
  64. package/dist/components/Icon.vue.d.ts +1 -1
  65. package/dist/components/IconLoading/IconLoading.vue.d.ts +1 -1
  66. package/dist/components/ImportCard/ImportCard.vue.d.ts +7 -7
  67. package/dist/components/Input/BaseInput.vue.d.ts +32 -1
  68. package/dist/components/Input/BaseInput.vue.d.ts.map +1 -1
  69. package/dist/components/Input/Input.vue.d.ts +176 -29
  70. package/dist/components/Input/Input.vue.d.ts.map +1 -1
  71. package/dist/components/Input/TextInput.vue.d.ts +83 -14
  72. package/dist/components/Input/TextInput.vue.d.ts.map +1 -1
  73. package/dist/components/InputDatePicker/InputDatePicker.vue.d.ts +186 -39
  74. package/dist/components/InputNext/InputNext.vue.d.ts +4 -4
  75. package/dist/components/Label/Label.vue.d.ts +9 -15
  76. package/dist/components/Label/Label.vue.d.ts.map +1 -1
  77. package/dist/components/Modal/Modal.vue.d.ts +2 -2
  78. package/dist/components/ModalDialog/ModalDialog.vue.d.ts +9 -9
  79. package/dist/components/ModalDialog/ModalDialog.vue.d.ts.map +1 -1
  80. package/dist/components/ModalNext/ModalNext.vue.d.ts +184 -37
  81. package/dist/components/ModalUpload/ModalUpload.vue.d.ts +14 -14
  82. package/dist/components/MoodRating/MoodRating.vue.d.ts +1 -1
  83. package/dist/components/MultiSelect/MultiSelect.vue.d.ts +20 -14
  84. package/dist/components/Pagination/Pagination.vue.d.ts +6 -6
  85. package/dist/components/ProgressBar/ProgressBar.vue.d.ts +1 -1
  86. package/dist/components/Radio/Radio.vue.d.ts +8 -6
  87. package/dist/components/Radio/Radio.vue.d.ts.map +1 -1
  88. package/dist/components/SelectSmart/SelectSmart.vue.d.ts +113 -53
  89. package/dist/components/SelectSmart/SelectSmartMultipleHeader.vue.d.ts +8 -8
  90. package/dist/components/SelectSmart/SelectSmartOption.vue.d.ts +20 -29
  91. package/dist/components/SelectSmart/SelectSmartOption.vue.d.ts.map +1 -1
  92. package/dist/components/SelectTime/index.vue.d.ts +83 -14
  93. package/dist/components/SkeletonLoading/skeletonTheme.vue.d.ts +1 -1
  94. package/dist/components/Slider/Slider.vue.d.ts +2 -2
  95. package/dist/components/StarRating/StarRating.vue.d.ts +1 -1
  96. package/dist/components/Switch/Switch.vue.d.ts +24 -25
  97. package/dist/components/Switch/Switch.vue.d.ts.map +1 -1
  98. package/dist/components/Tab/Tab.vue.d.ts +13 -2
  99. package/dist/components/TableNext/TableBodyCell.vue.d.ts +2 -2
  100. package/dist/components/TableNext/TablePagination.vue.d.ts +6 -6
  101. package/dist/components/TabsExpanded/TabsExpanded.vue.d.ts +1 -1
  102. package/dist/components/Tag/BrandTag.vue.d.ts +2 -2
  103. package/dist/components/Tag/DefaultTag.vue.d.ts +2 -2
  104. package/dist/components/Tag/IndicatorTag.vue.d.ts +2 -2
  105. package/dist/components/Tag/Tag.vue.d.ts +8 -8
  106. package/dist/components/TemplatePreview/TemplatePreview.vue.d.ts +9 -0
  107. package/dist/components/TemplatePreview/TemplatePreview.vue.d.ts.map +1 -0
  108. package/dist/components/TemplatePreview/TemplatePreviewModal.vue.d.ts +15 -0
  109. package/dist/components/TemplatePreview/TemplatePreviewModal.vue.d.ts.map +1 -0
  110. package/dist/components/TextArea/TextArea.vue.d.ts +38 -32
  111. package/dist/components/TextArea/TextArea.vue.d.ts.map +1 -1
  112. package/dist/components/Toast/Toast.vue.d.ts +16 -0
  113. package/dist/components/Toast/Toast.vue.d.ts.map +1 -0
  114. package/dist/components/Toast/ToastManager.d.ts +14 -0
  115. package/dist/components/Toast/ToastManager.d.ts.map +1 -0
  116. package/dist/components/Toast/types.d.ts +35 -0
  117. package/dist/components/Toast/types.d.ts.map +1 -0
  118. package/dist/components/ToolTip/ToolTip.vue.d.ts +1 -1
  119. package/dist/components/Tour/Tour.vue.d.ts +6 -6
  120. package/dist/components/Tour/TourPopover.vue.d.ts +6 -6
  121. package/dist/components/UploadArea/UploadArea.vue.d.ts +7 -7
  122. package/dist/components/index.d.ts +2590 -1258
  123. package/dist/components/index.d.ts.map +1 -1
  124. package/dist/components/ui/popover/Popover.vue.d.ts +23 -0
  125. package/dist/components/ui/popover/Popover.vue.d.ts.map +1 -0
  126. package/dist/components/ui/popover/PopoverContent.vue.d.ts +43 -0
  127. package/dist/components/ui/popover/PopoverContent.vue.d.ts.map +1 -0
  128. package/dist/components/ui/popover/PopoverTrigger.vue.d.ts +19 -0
  129. package/dist/components/ui/popover/PopoverTrigger.vue.d.ts.map +1 -0
  130. package/dist/components/ui/popover/index.d.ts +5 -0
  131. package/dist/components/ui/popover/index.d.ts.map +1 -0
  132. package/dist/{es-8265192e.mjs → es-eca523be.mjs} +1 -1
  133. package/dist/{index-832905fc.mjs → index-c84d6c3d.mjs} +18151 -11782
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/locales/en.json.d.ts +2 -1
  136. package/dist/locales/es.json.d.ts +2 -1
  137. package/dist/locales/pt_br.json.d.ts +2 -1
  138. package/dist/{pt-br-9ced3d4b.mjs → pt-br-dd7ba97f.mjs} +1 -1
  139. package/dist/style.css +1 -1
  140. package/dist/unnnic.mjs +177 -163
  141. package/dist/unnnic.umd.js +53 -50
  142. package/dist/utils/call.d.ts +2 -1
  143. package/dist/utils/call.d.ts.map +1 -1
  144. package/package.json +2 -1
  145. package/src/assets/icons/checkbox-checked-disabled.svg +3 -0
  146. package/src/assets/icons/checkbox-checked.svg +3 -0
  147. package/src/assets/icons/radio-checked.svg +3 -0
  148. package/src/assets/icons/switch-checked-disabled.svg +3 -0
  149. package/src/assets/icons/switch-checked.svg +3 -0
  150. package/src/assets/img/previews/doc-preview.png +0 -0
  151. package/src/assets/img/previews/image-preview.png +0 -0
  152. package/src/assets/img/previews/video-preview.png +0 -0
  153. package/src/assets/scss/scheme-colors.scss +115 -238
  154. package/src/assets/scss/tailwind.scss +15 -15
  155. package/src/components/Alert/Alert.vue +26 -135
  156. package/src/components/Alert/Version1dot1.vue +0 -36
  157. package/src/components/Alert/__tests__/__snapshots__/Alert.spec.js.snap +11 -7
  158. package/src/components/Alert/__tests__/__snapshots__/Version1dot1.spec.js.snap +2 -2
  159. package/src/components/Button/Button.vue +60 -108
  160. package/src/components/Button/types.ts +0 -1
  161. package/src/components/Checkbox/Checkbox.vue +88 -65
  162. package/src/components/Checkbox/__tests__/Checkbox.spec.js +6 -21
  163. package/src/components/CheckboxGroup/CheckboxGroup.vue +96 -0
  164. package/src/components/FormElement/FormElement.vue +51 -91
  165. package/src/components/Input/BaseInput.vue +31 -14
  166. package/src/components/Input/Input.scss +19 -21
  167. package/src/components/Input/Input.vue +94 -30
  168. package/src/components/Input/TextInput.vue +82 -58
  169. package/src/components/Input/__test__/TextInput.spec.js +5 -5
  170. package/src/components/Input/__test__/__snapshots__/Input.spec.js.snap +16 -3
  171. package/src/components/Input/__test__/__snapshots__/TextInput.spec.js.snap +7 -1
  172. package/src/components/Label/Label.vue +52 -21
  173. package/src/components/Label/__tests__/Label.spec.js +1 -1
  174. package/src/components/Label/__tests__/__snapshots__/Label.spec.js.snap +1 -1
  175. package/src/components/ModalDialog/ModalDialog.vue +1 -0
  176. package/src/components/ModalDialog/__tests__/__snapshots__/ModalDialog.spec.js.snap +1 -1
  177. package/src/components/Popover/__tests__/Popover.spec.js +147 -0
  178. package/src/components/Popover/__tests__/__snapshots__/Popover.spec.js.snap +8 -0
  179. package/src/components/Popover/index.vue +146 -0
  180. package/src/components/Radio/Radio.vue +80 -67
  181. package/src/components/Radio/__test__/Radio.spec.js +14 -20
  182. package/src/components/Radio/__test__/__snapshots__/Radio.spec.js.snap +3 -3
  183. package/src/components/RadioGroup/RadioGroup.vue +110 -0
  184. package/src/components/Select/SelectOption.vue +65 -0
  185. package/src/components/Select/__tests__/Select.spec.js +412 -0
  186. package/src/components/Select/__tests__/SelectItem.spec.js +330 -0
  187. package/src/components/Select/__tests__/SelectOption.spec.js +174 -0
  188. package/src/components/Select/__tests__/__snapshots__/Select.spec.js.snap +97 -0
  189. package/src/components/Select/__tests__/__snapshots__/SelectItem.spec.js.snap +15 -0
  190. package/src/components/Select/__tests__/__snapshots__/SelectOption.spec.js.snap +25 -0
  191. package/src/components/Select/index.vue +245 -0
  192. package/src/components/Switch/Switch.vue +91 -99
  193. package/src/components/Switch/__tests__/Switch.spec.js +8 -74
  194. package/src/components/Switch/__tests__/__snapshots__/Switch.spec.js.snap +3 -5
  195. package/src/components/Tab/Tab.vue +37 -23
  196. package/src/components/Tab/__test__/__snapshots__/Tab.spec.js.snap +1 -1
  197. package/src/components/TableNext/__test__/__snapshots__/TableNext.spec.js.snap +2 -2
  198. package/src/components/TableNext/__test__/__snapshots__/TablePagination.spec.js.snap +2 -2
  199. package/src/components/TemplatePreview/TemplatePreview.vue +252 -0
  200. package/src/components/TemplatePreview/TemplatePreviewModal.vue +51 -0
  201. package/src/components/TemplatePreview/types.d.ts +16 -0
  202. package/src/components/TextArea/TextArea.vue +13 -9
  203. package/src/components/TextArea/__test__/__snapshots__/TextArea.spec.js.snap +7 -2
  204. package/src/components/Toast/Toast.vue +236 -0
  205. package/src/components/Toast/ToastManager.ts +110 -0
  206. package/src/components/Toast/types.ts +57 -0
  207. package/src/components/index.ts +34 -4
  208. package/src/components/ui/popover/Popover.vue +15 -0
  209. package/src/components/ui/popover/PopoverContent.vue +98 -0
  210. package/src/components/ui/popover/PopoverTrigger.vue +12 -0
  211. package/src/components/ui/popover/index.ts +4 -0
  212. package/src/index.ts +1 -0
  213. package/src/locales/en.json +2 -1
  214. package/src/locales/es.json +2 -1
  215. package/src/locales/pt_br.json +2 -1
  216. package/src/stories/Alert.stories.js +6 -67
  217. package/src/stories/Button.stories.js +2 -17
  218. package/src/stories/Checkbox.stories.js +9 -10
  219. package/src/stories/CheckboxGroup.stories.js +104 -0
  220. package/src/stories/Input.stories.js +22 -3
  221. package/src/stories/Label.stories.js +7 -0
  222. package/src/stories/Popover.stories.js +306 -0
  223. package/src/stories/RadioGroup.stories.js +139 -0
  224. package/src/stories/Select.stories.js +158 -0
  225. package/src/stories/Switch.stories.js +4 -5
  226. package/src/stories/Tab.stories.js +11 -4
  227. package/src/stories/TemplatePreview.stories.js +94 -0
  228. package/src/stories/TemplatePreviewModal.stories.js +110 -0
  229. package/src/stories/Toast.mdx +123 -0
  230. package/src/stories/Toast.stories.js +126 -0
  231. package/src/types/scheme-colors.d.ts +1 -0
  232. package/src/utils/call.js +46 -18
  233. package/src/components/Alert/AlertBanner.vue +0 -182
  234. package/src/components/Alert/AlertCaller.vue +0 -49
  235. package/src/components/Alert/__tests__/AlertBanner.spec.js +0 -89
  236. package/src/components/Alert/__tests__/AlertCaller.spec.js +0 -98
@@ -0,0 +1,126 @@
1
+ import Toast from '../components/Toast/Toast.vue';
2
+ import { action } from '@storybook/addon-actions';
3
+
4
+ export default {
5
+ title: 'Feedback/Toast',
6
+ component: Toast,
7
+ argTypes: {
8
+ title: {
9
+ control: 'text',
10
+ },
11
+ description: {
12
+ control: 'text',
13
+ },
14
+ type: {
15
+ control: 'select',
16
+ options: ['informational', 'attention', 'success', 'error'],
17
+ },
18
+ timeout: {
19
+ control: 'number',
20
+ },
21
+ button: {
22
+ control: 'object',
23
+ },
24
+ },
25
+ render: (args) => ({
26
+ components: { Toast },
27
+ setup() {
28
+ return { args };
29
+ },
30
+ methods: {
31
+ onClose() {
32
+ action('@close')('');
33
+ },
34
+ onDestroy() {
35
+ action('@destroy')('');
36
+ },
37
+ },
38
+ template: `
39
+ <div style="position: relative; height: 50px;">
40
+ <Toast
41
+ v-bind="args"
42
+ @close="onClose"
43
+ @destroy="onDestroy"
44
+ />
45
+ </div>
46
+ `,
47
+ }),
48
+ };
49
+
50
+ export const Informational = {
51
+ args: {
52
+ title: 'Information',
53
+ description: 'This is an informative message for the user.',
54
+ type: 'informational',
55
+ timeout: 5000,
56
+ },
57
+ };
58
+
59
+ export const Attention = {
60
+ args: {
61
+ title: 'Attention',
62
+ description: 'Please verify the data before continuing.',
63
+ type: 'attention',
64
+ timeout: 5000,
65
+ },
66
+ };
67
+
68
+ export const Success = {
69
+ args: {
70
+ title: 'Success!',
71
+ description: 'Your action was completed successfully.',
72
+ type: 'success',
73
+ timeout: 5000,
74
+ },
75
+ };
76
+
77
+ export const Error = {
78
+ args: {
79
+ title: 'Error',
80
+ description: 'An error occurred while processing your request.',
81
+ type: 'error',
82
+ timeout: 5000,
83
+ },
84
+ };
85
+
86
+ export const WithActionButton = {
87
+ args: {
88
+ title: 'New version available',
89
+ description: 'A new version of the system is available for download.',
90
+ type: 'informational',
91
+ timeout: 0,
92
+ button: {
93
+ text: 'Update',
94
+ action: () => {
95
+ alert('Updating...');
96
+ },
97
+ },
98
+ },
99
+ };
100
+
101
+ export const Persistent = {
102
+ args: {
103
+ title: 'Important message',
104
+ description: 'This message will remain visible until manually closed.',
105
+ type: 'attention',
106
+ timeout: 0,
107
+ },
108
+ };
109
+
110
+ export const TitleOnly = {
111
+ args: {
112
+ title: 'Simple message',
113
+ type: 'success',
114
+ timeout: 5000,
115
+ },
116
+ };
117
+
118
+ export const LongText = {
119
+ args: {
120
+ title: 'Document processed',
121
+ description:
122
+ 'The document "Annual_Report_2024_Final_Definitive_Complete_Version.pdf" was processed successfully and is available for download in your workspace.',
123
+ type: 'success',
124
+ timeout: 8000,
125
+ },
126
+ };
@@ -140,6 +140,7 @@ export type SchemeColor =
140
140
  | 'feedback-yellow'
141
141
  | 'feedback-blue'
142
142
  | 'feedback-grey'
143
+ | 'fg-base'
143
144
  | 'aux-blue'
144
145
  | 'aux-purple'
145
146
  | 'aux-orange'
package/src/utils/call.js CHANGED
@@ -1,30 +1,58 @@
1
1
  import { createApp } from 'vue';
2
2
  import Alert from '../components/Alert/Alert.vue';
3
3
  import Modal from '../components/Modal/Modal.vue';
4
+ import ToastInstance from '../components/Toast/ToastManager';
4
5
  import mitt from 'mitt';
5
6
 
6
7
  const emitter = mitt();
7
-
8
- const callAlert = ({ props, containerRef }) => {
9
- const AlertComponent = createApp(Alert, {
10
- ...props,
11
- onClose: () => {
12
- instance.$el.remove();
13
- },
14
- created() {
15
- emitter.on(['close'], () => {
8
+ const callAlert = ({ props, containerRef, seconds }) => {
9
+ if (props.version === '1.1' || containerRef) {
10
+ const AlertComponent = createApp(Alert, {
11
+ ...props,
12
+ seconds,
13
+ version: '1.1',
14
+ onClose: () => {
16
15
  instance.$el.remove();
17
- });
18
- },
19
- });
20
- const element = document.createElement('div');
21
- const instance = AlertComponent.mount(element);
16
+ },
17
+ created() {
18
+ emitter.on(['close'], () => {
19
+ instance.$el.remove();
20
+ });
21
+ },
22
+ });
23
+ const element = document.createElement('div');
24
+ const instance = AlertComponent.mount(element);
22
25
 
23
- if (containerRef) {
24
- instance.$el.style.position = 'absolute';
25
- containerRef.appendChild(instance.$el);
26
+ if (containerRef) {
27
+ instance.$el.style.position = 'absolute';
28
+ containerRef.appendChild(instance.$el);
29
+ } else {
30
+ document.body.appendChild(instance.$el);
31
+ }
26
32
  } else {
27
- document.body.appendChild(instance.$el);
33
+ const typeMap = {
34
+ success: 'success',
35
+ error: 'error',
36
+ attention: 'attention',
37
+ default: 'informational',
38
+ 'feedback-green': 'success',
39
+ 'feedback-red': 'error',
40
+ };
41
+
42
+ const toastProps = {
43
+ timeout: seconds ? seconds * 1000 : 5000,
44
+ type: typeMap[props.scheme || props.type] || typeMap.default,
45
+
46
+ onClose: () => {
47
+ emitter.emit(['close']);
48
+ },
49
+ };
50
+
51
+ ToastInstance.show({
52
+ title: props.text,
53
+ description: '',
54
+ ...toastProps,
55
+ });
28
56
  }
29
57
  };
30
58
 
@@ -1,182 +0,0 @@
1
- <template>
2
- <section
3
- :class="[
4
- 'banner-alert',
5
- {
6
- 'banner-alert--banner-danger': type === 'danger',
7
- 'banner-alert--banner-warning': type === 'warning',
8
- },
9
- ]"
10
- >
11
- <header
12
- v-show="text"
13
- class="banner-alert__container-text"
14
- >
15
- <UnnnicIcon
16
- v-show="isShowTextIcon(type)"
17
- class="banner-alert__textIcon"
18
- :icon="getIconType(type)"
19
- size="sm"
20
- scheme="neutral-white"
21
- data-test="unnnic-icon"
22
- />
23
- <p class="text">{{ text }}</p>
24
- <a
25
- v-if="linkHref"
26
- class="banner-alert__link"
27
- :href="linkHref"
28
- :target="linkTarget"
29
- >
30
- {{ linkText }}
31
- </a>
32
- </header>
33
-
34
- <div
35
- v-show="showCloseButton"
36
- class="banner-alert__close"
37
- @click="emitClose"
38
- >
39
- <UnnnicIcon
40
- icon="close"
41
- size="sm"
42
- scheme="neutral-white"
43
- data-test="unnnic-close-icon"
44
- />
45
- </div>
46
- </section>
47
- </template>
48
-
49
- <script>
50
- import UnnnicIcon from '../Icon.vue';
51
-
52
- export default {
53
- components: {
54
- UnnnicIcon,
55
- },
56
- props: {
57
- text: {
58
- type: String,
59
- default: null,
60
- },
61
- onClose: {
62
- type: Function,
63
- default: () => {},
64
- },
65
- showCloseButton: {
66
- type: Boolean,
67
- default: false,
68
- },
69
- linkHref: {
70
- type: String,
71
- default: '',
72
- },
73
- linkTarget: {
74
- type: String,
75
- default: '_blank',
76
- },
77
- linkText: {
78
- type: String,
79
- default: 'Learn more',
80
- },
81
- type: {
82
- type: String,
83
- default: 'info',
84
- },
85
- },
86
- methods: {
87
- getIconType(type) {
88
- if (type === 'danger') return 'block';
89
- if (!type.trim()) return 'info'; // check if type is empty or whitespace
90
- return type;
91
- },
92
- isShowTextIcon(type) {
93
- return ['danger', 'warning', 'info', ''].includes(type);
94
- },
95
- emitClose() {
96
- this.onClose();
97
-
98
- this.$emit('close');
99
- },
100
- },
101
- };
102
- </script>
103
-
104
- <style lang="scss" scoped>
105
- @use '@/assets/scss/unnnic' as *;
106
-
107
- .banner-alert {
108
- display: grid;
109
- grid-template-columns: 1fr auto;
110
- text-align: center;
111
- margin-bottom: $unnnic-spacing-sm;
112
-
113
- color: $unnnic-color-neutral-white;
114
- font-family: $unnnic-font-family-secondary;
115
- font-size: $unnnic-font-size-body-gt;
116
- line-height: $unnnic-font-size-body-gt + $unnnic-line-height-md;
117
- font-weight: $unnnic-font-weight-regular;
118
- background-color: $unnnic-color-aux-blue-500;
119
-
120
- &__container-text {
121
- display: flex;
122
- justify-content: center;
123
- align-items: center;
124
- padding: $unnnic-spacing-xs $unnnic-spacing-sm;
125
- flex-grow: 1;
126
-
127
- .text {
128
- margin: 0 $unnnic-spacing-nano 0 0;
129
- }
130
- }
131
-
132
- &__textIcon {
133
- margin-right: $unnnic-spacing-xs;
134
- }
135
-
136
- &__link {
137
- color: inherit;
138
- display: block;
139
- font-weight: $unnnic-font-weight-bold;
140
- text-decoration: underline;
141
- text-underline-position: under;
142
- }
143
-
144
- &__close {
145
- display: flex;
146
- align-items: center;
147
- max-height: 38px;
148
- padding: 0 $unnnic-spacing-sm;
149
- cursor: pointer;
150
- user-select: none;
151
- border-left: $unnnic-border-width-thinner solid $unnnic-color-aux-blue-300;
152
- &:hover {
153
- background-color: $unnnic-color-aux-blue-300;
154
- }
155
- }
156
-
157
- &--banner-warning {
158
- background-color: $unnnic-color-aux-orange-500;
159
-
160
- .banner-alert__close {
161
- border-left: $unnnic-border-width-thinner solid
162
- $unnnic-color-aux-orange-300;
163
-
164
- &:hover {
165
- background-color: $unnnic-color-aux-orange-300;
166
- }
167
- }
168
- }
169
-
170
- &--banner-danger {
171
- background-color: $unnnic-color-aux-red-500;
172
-
173
- .banner-alert__close {
174
- border-left: $unnnic-border-width-thinner solid $unnnic-color-aux-red-300;
175
-
176
- &:hover {
177
- background-color: $unnnic-color-aux-red-300;
178
- }
179
- }
180
- }
181
- }
182
- </style>
@@ -1,49 +0,0 @@
1
- <template>
2
- <button @click="callAlert">Launch alert</button>
3
- </template>
4
-
5
- <script>
6
- import alert from '../../utils/call';
7
-
8
- export default {
9
- props: {
10
- title: {
11
- type: String,
12
- default: null,
13
- },
14
- text: {
15
- type: String,
16
- default: null,
17
- },
18
- icon: {
19
- type: String,
20
- default: null,
21
- },
22
- enabled: {
23
- type: Boolean,
24
- default: true,
25
- },
26
- scheme: {
27
- type: String,
28
- default: null,
29
- },
30
- seconds: {
31
- type: Number,
32
- default: 3,
33
- },
34
- closeText: {
35
- type: String,
36
- default: null,
37
- },
38
- position: {
39
- type: String,
40
- default: 'top-right',
41
- },
42
- },
43
- methods: {
44
- callAlert() {
45
- alert.callAlert({ props: this.$props, seconds: this.seconds });
46
- },
47
- },
48
- };
49
- </script>
@@ -1,89 +0,0 @@
1
- import { mount } from '@vue/test-utils';
2
- import { describe, test, expect, beforeEach, afterEach, vi } from 'vitest';
3
- import AlertBanner from '@/components/Alert/AlertBanner.vue';
4
-
5
- describe('AlertBanner.vue', () => {
6
- let wrapper;
7
-
8
- beforeEach(() => {
9
- wrapper = mount(AlertBanner, {
10
- props: {
11
- text: 'This is a banner alert',
12
- type: 'danger',
13
- showCloseButton: true,
14
- linkHref: 'https://example.com',
15
- linkText: 'Learn more',
16
- linkTarget: '_self',
17
- onClose: vi.fn(),
18
- },
19
- });
20
- });
21
-
22
- afterEach(() => {
23
- wrapper.unmount();
24
- });
25
-
26
- test('renders correctly', () => {
27
- expect(wrapper.exists()).toBe(true);
28
- });
29
-
30
- test('renders the correct text and link', () => {
31
- const textElement = wrapper.find('.text');
32
- const linkElement = wrapper.find('.banner-alert__link');
33
-
34
- expect(textElement.text()).toBe('This is a banner alert');
35
- expect(linkElement.text()).toBe('Learn more');
36
- expect(linkElement.attributes('href')).toBe('https://example.com');
37
- expect(linkElement.attributes('target')).toBe('_self');
38
- });
39
-
40
- test('applies the correct class based on the type', () => {
41
- expect(wrapper.classes()).toContain('banner-alert--banner-danger');
42
- });
43
-
44
- test('renders the correct icon based on the type', () => {
45
- const icon = wrapper.findComponent('[data-test="unnnic-icon"]');
46
- expect(icon.exists()).toBe(true);
47
- expect(icon.props('icon')).toBe('block');
48
- expect(icon.props('size')).toBe('sm');
49
- expect(icon.props('scheme')).toBe('neutral-white');
50
- });
51
-
52
- test('does not render the icon when type is not danger, warning, or info', async () => {
53
- await wrapper.setProps({ type: 'success' });
54
- const icon = wrapper.findComponent('[data-test="unnnic-icon"]');
55
- expect(icon.element.style.display).toBe('none');
56
- });
57
-
58
- test('calls emitClose and emits close event when close button is clicked', async () => {
59
- const closeButton = wrapper.find('.banner-alert__close');
60
- await closeButton.trigger('click');
61
-
62
- expect(wrapper.emitted()).toHaveProperty('close');
63
- expect(wrapper.props().onClose).toHaveBeenCalled();
64
- });
65
-
66
- test('does not render close button if showCloseButton is false', async () => {
67
- await wrapper.setProps({ showCloseButton: false });
68
- const closeButton = wrapper.find('.banner-alert__close');
69
- expect(closeButton.element.style.display).toBe('none');
70
- });
71
-
72
- test('matches the snapshot', () => {
73
- expect(wrapper.html()).toMatchSnapshot();
74
- });
75
-
76
- test('getIconType function returns the correct icon based on type', () => {
77
- expect(wrapper.vm.getIconType('danger')).toBe('block');
78
- expect(wrapper.vm.getIconType('info')).toBe('info');
79
- expect(wrapper.vm.getIconType('')).toBe('info');
80
- });
81
-
82
- test('isShowTextIcon function returns true for danger, warning, and info types', () => {
83
- expect(wrapper.vm.isShowTextIcon('danger')).toBe(true);
84
- expect(wrapper.vm.isShowTextIcon('warning')).toBe(true);
85
- expect(wrapper.vm.isShowTextIcon('info')).toBe(true);
86
- expect(wrapper.vm.isShowTextIcon('')).toBe(true);
87
- expect(wrapper.vm.isShowTextIcon('success')).toBe(false);
88
- });
89
- });
@@ -1,98 +0,0 @@
1
- import { mount } from '@vue/test-utils';
2
- import { describe, expect, test, vi, beforeEach, afterEach } from 'vitest';
3
- import AlertCaller from '@/components/Alert/AlertCaller.vue';
4
- import alert from '@/utils/call';
5
-
6
- vi.mock('@/utils/call', () => ({
7
- default: {
8
- callAlert: vi.fn(),
9
- },
10
- }));
11
-
12
- describe('AlertCaller.vue', () => {
13
- let wrapper;
14
-
15
- const defaultProps = {
16
- title: 'Test Title',
17
- text: 'Test Text',
18
- icon: 'test-icon',
19
- enabled: true,
20
- scheme: 'primary',
21
- seconds: 5,
22
- closeText: 'Close',
23
- position: 'top-right',
24
- };
25
-
26
- beforeEach(() => {
27
- wrapper = mount(AlertCaller, {
28
- props: defaultProps,
29
- });
30
- });
31
-
32
- afterEach(() => {
33
- wrapper.unmount();
34
- vi.clearAllMocks();
35
- });
36
-
37
- test('renders correctly', () => {
38
- expect(wrapper.exists()).toBe(true);
39
- expect(wrapper.find('button').text()).toBe('Launch alert');
40
- });
41
-
42
- test('calls callAlert method when button is clicked', async () => {
43
- const callAlertSpy = vi.spyOn(wrapper.vm, 'callAlert');
44
- await wrapper.find('button').trigger('click');
45
- expect(callAlertSpy).toHaveBeenCalledTimes(1);
46
- });
47
-
48
- test('callAlert method invokes alert.callAlert with correct props', async () => {
49
- await wrapper.find('button').trigger('click');
50
- expect(alert.callAlert).toHaveBeenCalledWith({
51
- props: defaultProps,
52
- seconds: defaultProps.seconds,
53
- });
54
- });
55
-
56
- test.each([
57
- ['title', 'New Title'],
58
- ['text', 'New Text'],
59
- ['icon', 'new-icon'],
60
- ['enabled', false],
61
- ['scheme', 'secondary'],
62
- ['seconds', 10],
63
- ['closeText', 'Dismiss'],
64
- ['position', 'bottom-left'],
65
- ])('updates %s prop correctly', async (propName, newValue) => {
66
- await wrapper.setProps({ [propName]: newValue });
67
- await wrapper.find('button').trigger('click');
68
- const expectedProps = { ...defaultProps, [propName]: newValue };
69
- expect(alert.callAlert).toHaveBeenCalledWith({
70
- props: expectedProps,
71
- seconds: expectedProps.seconds,
72
- });
73
- });
74
-
75
- test('passes default values when props are not provided', async () => {
76
- wrapper = mount(AlertCaller, {
77
- props: {},
78
- });
79
- await wrapper.find('button').trigger('click');
80
- expect(alert.callAlert).toHaveBeenCalledWith({
81
- props: {
82
- title: null,
83
- text: null,
84
- icon: null,
85
- enabled: true,
86
- scheme: null,
87
- seconds: 3,
88
- closeText: null,
89
- position: 'top-right',
90
- },
91
- seconds: 3,
92
- });
93
- });
94
-
95
- test('matches snapshot', () => {
96
- expect(wrapper.html()).toMatchSnapshot();
97
- });
98
- });