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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) 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 +8 -8
  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 +15 -15
  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 +3 -3
  49. package/dist/components/Comment/Comment.vue.d.ts +1 -1
  50. package/dist/components/DataArea/DataArea.vue.d.ts +2 -2
  51. package/dist/components/DataTable/index.vue.d.ts +1 -1
  52. package/dist/components/DataTable/index.vue.d.ts.map +1 -1
  53. package/dist/components/DateFilter/DateFilter.vue.d.ts +176 -29
  54. package/dist/components/DatePicker/DatePicker.vue.d.ts +8 -8
  55. package/dist/components/Drawer/Drawer.vue.d.ts +7 -7
  56. package/dist/components/Dropdown/Dropdown.vue.d.ts +1 -1
  57. package/dist/components/Dropdown/LanguageSelect.vue.d.ts +3 -3
  58. package/dist/components/Flag.vue.d.ts +2 -2
  59. package/dist/components/FormElement/FormElement.vue.d.ts +38 -32
  60. package/dist/components/FormElement/FormElement.vue.d.ts.map +1 -1
  61. package/dist/components/Icon.vue.d.ts +1 -1
  62. package/dist/components/IconLoading/IconLoading.vue.d.ts +1 -1
  63. package/dist/components/ImportCard/ImportCard.vue.d.ts +7 -7
  64. package/dist/components/Input/BaseInput.vue.d.ts +32 -1
  65. package/dist/components/Input/BaseInput.vue.d.ts.map +1 -1
  66. package/dist/components/Input/Input.vue.d.ts +176 -29
  67. package/dist/components/Input/Input.vue.d.ts.map +1 -1
  68. package/dist/components/Input/TextInput.vue.d.ts +83 -14
  69. package/dist/components/Input/TextInput.vue.d.ts.map +1 -1
  70. package/dist/components/InputDatePicker/InputDatePicker.vue.d.ts +186 -39
  71. package/dist/components/InputNext/InputNext.vue.d.ts +4 -4
  72. package/dist/components/Label/Label.vue.d.ts +9 -15
  73. package/dist/components/Label/Label.vue.d.ts.map +1 -1
  74. package/dist/components/Modal/Modal.vue.d.ts +2 -2
  75. package/dist/components/ModalDialog/ModalDialog.vue.d.ts +9 -9
  76. package/dist/components/ModalDialog/ModalDialog.vue.d.ts.map +1 -1
  77. package/dist/components/ModalNext/ModalNext.vue.d.ts +184 -37
  78. package/dist/components/ModalUpload/ModalUpload.vue.d.ts +14 -14
  79. package/dist/components/MoodRating/MoodRating.vue.d.ts +1 -1
  80. package/dist/components/MultiSelect/MultiSelect.vue.d.ts +20 -14
  81. package/dist/components/Pagination/Pagination.vue.d.ts +6 -6
  82. package/dist/components/ProgressBar/ProgressBar.vue.d.ts +1 -1
  83. package/dist/components/Radio/Radio.vue.d.ts +8 -6
  84. package/dist/components/Radio/Radio.vue.d.ts.map +1 -1
  85. package/dist/components/SelectSmart/SelectSmart.vue.d.ts +97 -28
  86. package/dist/components/SelectSmart/SelectSmartMultipleHeader.vue.d.ts +8 -8
  87. package/dist/components/SelectSmart/SelectSmartOption.vue.d.ts +4 -4
  88. package/dist/components/SelectTime/index.vue.d.ts +83 -14
  89. package/dist/components/SkeletonLoading/skeletonTheme.vue.d.ts +1 -1
  90. package/dist/components/Slider/Slider.vue.d.ts +2 -2
  91. package/dist/components/StarRating/StarRating.vue.d.ts +1 -1
  92. package/dist/components/Switch/Switch.vue.d.ts +24 -25
  93. package/dist/components/Switch/Switch.vue.d.ts.map +1 -1
  94. package/dist/components/Tab/Tab.vue.d.ts +13 -2
  95. package/dist/components/TableNext/TableBodyCell.vue.d.ts +2 -2
  96. package/dist/components/TableNext/TablePagination.vue.d.ts +6 -6
  97. package/dist/components/TabsExpanded/TabsExpanded.vue.d.ts +1 -1
  98. package/dist/components/Tag/BrandTag.vue.d.ts +2 -2
  99. package/dist/components/Tag/DefaultTag.vue.d.ts +2 -2
  100. package/dist/components/Tag/IndicatorTag.vue.d.ts +2 -2
  101. package/dist/components/Tag/Tag.vue.d.ts +8 -8
  102. package/dist/components/TemplatePreview/TemplatePreview.vue.d.ts +9 -0
  103. package/dist/components/TemplatePreview/TemplatePreview.vue.d.ts.map +1 -0
  104. package/dist/components/TemplatePreview/TemplatePreviewModal.vue.d.ts +15 -0
  105. package/dist/components/TemplatePreview/TemplatePreviewModal.vue.d.ts.map +1 -0
  106. package/dist/components/TextArea/TextArea.vue.d.ts +38 -32
  107. package/dist/components/TextArea/TextArea.vue.d.ts.map +1 -1
  108. package/dist/components/Toast/Toast.vue.d.ts +16 -0
  109. package/dist/components/Toast/Toast.vue.d.ts.map +1 -0
  110. package/dist/components/Toast/ToastManager.d.ts +14 -0
  111. package/dist/components/Toast/ToastManager.d.ts.map +1 -0
  112. package/dist/components/Toast/types.d.ts +35 -0
  113. package/dist/components/Toast/types.d.ts.map +1 -0
  114. package/dist/components/ToolTip/ToolTip.vue.d.ts +1 -1
  115. package/dist/components/Tour/Tour.vue.d.ts +6 -6
  116. package/dist/components/Tour/TourPopover.vue.d.ts +6 -6
  117. package/dist/components/UploadArea/UploadArea.vue.d.ts +7 -7
  118. package/dist/components/index.d.ts +2402 -1146
  119. package/dist/components/index.d.ts.map +1 -1
  120. package/dist/components/ui/popover/Popover.vue.d.ts +23 -0
  121. package/dist/components/ui/popover/Popover.vue.d.ts.map +1 -0
  122. package/dist/components/ui/popover/PopoverContent.vue.d.ts +43 -0
  123. package/dist/components/ui/popover/PopoverContent.vue.d.ts.map +1 -0
  124. package/dist/components/ui/popover/PopoverTrigger.vue.d.ts +19 -0
  125. package/dist/components/ui/popover/PopoverTrigger.vue.d.ts.map +1 -0
  126. package/dist/components/ui/popover/index.d.ts +5 -0
  127. package/dist/components/ui/popover/index.d.ts.map +1 -0
  128. package/dist/{es-8265192e.mjs → es-479daf92.mjs} +1 -1
  129. package/dist/{index-832905fc.mjs → index-a8aa7094.mjs} +18065 -11737
  130. package/dist/index.d.ts.map +1 -1
  131. package/dist/locales/en.json.d.ts +2 -1
  132. package/dist/locales/es.json.d.ts +2 -1
  133. package/dist/locales/pt_br.json.d.ts +2 -1
  134. package/dist/{pt-br-9ced3d4b.mjs → pt-br-32c84cc8.mjs} +1 -1
  135. package/dist/style.css +1 -1
  136. package/dist/unnnic.mjs +141 -129
  137. package/dist/unnnic.umd.js +53 -50
  138. package/dist/utils/call.d.ts +2 -1
  139. package/dist/utils/call.d.ts.map +1 -1
  140. package/package.json +2 -1
  141. package/src/assets/icons/radio-checked.svg +3 -0
  142. package/src/assets/icons/switch-checked-disabled.svg +3 -0
  143. package/src/assets/icons/switch-checked.svg +3 -0
  144. package/src/assets/img/previews/doc-preview.png +0 -0
  145. package/src/assets/img/previews/image-preview.png +0 -0
  146. package/src/assets/img/previews/video-preview.png +0 -0
  147. package/src/assets/scss/scheme-colors.scss +115 -238
  148. package/src/assets/scss/tailwind.scss +15 -15
  149. package/src/components/Alert/Alert.vue +26 -135
  150. package/src/components/Alert/Version1dot1.vue +0 -36
  151. package/src/components/Alert/__tests__/__snapshots__/Alert.spec.js.snap +11 -7
  152. package/src/components/Alert/__tests__/__snapshots__/Version1dot1.spec.js.snap +2 -2
  153. package/src/components/Button/Button.vue +60 -108
  154. package/src/components/Button/types.ts +0 -1
  155. package/src/components/FormElement/FormElement.vue +51 -91
  156. package/src/components/Input/BaseInput.vue +31 -14
  157. package/src/components/Input/Input.scss +19 -21
  158. package/src/components/Input/Input.vue +94 -30
  159. package/src/components/Input/TextInput.vue +82 -58
  160. package/src/components/Input/__test__/TextInput.spec.js +5 -5
  161. package/src/components/Input/__test__/__snapshots__/Input.spec.js.snap +16 -3
  162. package/src/components/Input/__test__/__snapshots__/TextInput.spec.js.snap +7 -1
  163. package/src/components/Label/Label.vue +52 -21
  164. package/src/components/Label/__tests__/Label.spec.js +1 -1
  165. package/src/components/Label/__tests__/__snapshots__/Label.spec.js.snap +1 -1
  166. package/src/components/ModalDialog/ModalDialog.vue +1 -0
  167. package/src/components/ModalDialog/__tests__/__snapshots__/ModalDialog.spec.js.snap +1 -1
  168. package/src/components/Popover/__tests__/Popover.spec.js +147 -0
  169. package/src/components/Popover/__tests__/__snapshots__/Popover.spec.js.snap +8 -0
  170. package/src/components/Popover/index.vue +146 -0
  171. package/src/components/Radio/Radio.vue +80 -67
  172. package/src/components/Radio/__test__/Radio.spec.js +14 -20
  173. package/src/components/Radio/__test__/__snapshots__/Radio.spec.js.snap +3 -3
  174. package/src/components/RadioGroup/RadioGroup.vue +110 -0
  175. package/src/components/Select/SelectOption.vue +65 -0
  176. package/src/components/Select/__tests__/Select.spec.js +412 -0
  177. package/src/components/Select/__tests__/SelectItem.spec.js +330 -0
  178. package/src/components/Select/__tests__/SelectOption.spec.js +174 -0
  179. package/src/components/Select/__tests__/__snapshots__/Select.spec.js.snap +97 -0
  180. package/src/components/Select/__tests__/__snapshots__/SelectItem.spec.js.snap +15 -0
  181. package/src/components/Select/__tests__/__snapshots__/SelectOption.spec.js.snap +25 -0
  182. package/src/components/Select/index.vue +245 -0
  183. package/src/components/Switch/Switch.vue +91 -99
  184. package/src/components/Switch/__tests__/Switch.spec.js +8 -74
  185. package/src/components/Switch/__tests__/__snapshots__/Switch.spec.js.snap +3 -5
  186. package/src/components/Tab/Tab.vue +37 -23
  187. package/src/components/Tab/__test__/__snapshots__/Tab.spec.js.snap +1 -1
  188. package/src/components/TableNext/__test__/__snapshots__/TableNext.spec.js.snap +2 -2
  189. package/src/components/TableNext/__test__/__snapshots__/TablePagination.spec.js.snap +2 -2
  190. package/src/components/TemplatePreview/TemplatePreview.vue +252 -0
  191. package/src/components/TemplatePreview/TemplatePreviewModal.vue +51 -0
  192. package/src/components/TemplatePreview/types.d.ts +16 -0
  193. package/src/components/TextArea/TextArea.vue +13 -9
  194. package/src/components/TextArea/__test__/__snapshots__/TextArea.spec.js.snap +7 -2
  195. package/src/components/Toast/Toast.vue +236 -0
  196. package/src/components/Toast/ToastManager.ts +110 -0
  197. package/src/components/Toast/types.ts +57 -0
  198. package/src/components/index.ts +30 -4
  199. package/src/components/ui/popover/Popover.vue +15 -0
  200. package/src/components/ui/popover/PopoverContent.vue +98 -0
  201. package/src/components/ui/popover/PopoverTrigger.vue +12 -0
  202. package/src/components/ui/popover/index.ts +4 -0
  203. package/src/index.ts +1 -0
  204. package/src/locales/en.json +2 -1
  205. package/src/locales/es.json +2 -1
  206. package/src/locales/pt_br.json +2 -1
  207. package/src/stories/Alert.stories.js +6 -67
  208. package/src/stories/Button.stories.js +2 -17
  209. package/src/stories/Input.stories.js +22 -3
  210. package/src/stories/Label.stories.js +7 -0
  211. package/src/stories/Popover.stories.js +306 -0
  212. package/src/stories/RadioGroup.stories.js +139 -0
  213. package/src/stories/Select.stories.js +158 -0
  214. package/src/stories/Switch.stories.js +4 -5
  215. package/src/stories/Tab.stories.js +11 -4
  216. package/src/stories/TemplatePreview.stories.js +94 -0
  217. package/src/stories/TemplatePreviewModal.stories.js +110 -0
  218. package/src/stories/Toast.mdx +123 -0
  219. package/src/stories/Toast.stories.js +126 -0
  220. package/src/types/scheme-colors.d.ts +1 -0
  221. package/src/utils/call.js +46 -18
  222. package/src/components/Alert/AlertBanner.vue +0 -182
  223. package/src/components/Alert/AlertCaller.vue +0 -49
  224. package/src/components/Alert/__tests__/AlertBanner.spec.js +0 -89
  225. package/src/components/Alert/__tests__/AlertCaller.spec.js +0 -98
@@ -9,6 +9,7 @@
9
9
  class="tab-head"
10
10
  :class="{
11
11
  'tab-head--active': localValue === tab,
12
+ 'tab-head--disabled': disabledTabs?.includes(tab),
12
13
  }"
13
14
  @click="change(tab)"
14
15
  >
@@ -20,10 +21,9 @@
20
21
  side="bottom"
21
22
  >
22
23
  <UnnnicIcon
23
- icon="info"
24
+ icon="help"
24
25
  :size="size === 'sm' ? 'xs' : 'sm'"
25
- filled
26
- scheme="neutral-cleanest"
26
+ scheme="fg-base"
27
27
  />
28
28
  </UnnnicToolTip>
29
29
  </li>
@@ -65,6 +65,13 @@ export default {
65
65
  tabs: {
66
66
  type: Array,
67
67
  default: null,
68
+ validator: (tabs) => {
69
+ return tabs.every((tab) => typeof tab === 'string') && tabs.length <= 5;
70
+ },
71
+ },
72
+ disabledTabs: {
73
+ type: Array,
74
+ default: null,
68
75
  },
69
76
  },
70
77
  emits: ['change'],
@@ -105,6 +112,10 @@ export default {
105
112
  return '';
106
113
  },
107
114
  change(value) {
115
+ if (this.disabledTabs?.includes(value)) {
116
+ return;
117
+ }
118
+
108
119
  this.localValue = value;
109
120
  this.$emit('change', this.localValue);
110
121
  },
@@ -119,18 +130,15 @@ export default {
119
130
  display: flex;
120
131
  align-items: flex-start;
121
132
  justify-content: space-between;
122
- color: $unnnic-color-neutral-cloudy;
123
- font-family: $unnnic-font-family-secondary;
124
- font-weight: $unnnic-font-weight-bold;
125
- font-size: $unnnic-font-size-body-lg;
126
- line-height: ($unnnic-font-size-body-lg + $unnnic-line-height-medium);
127
- margin-bottom: $unnnic-inset-sm;
128
- border-bottom: $unnnic-border-width-thinner solid $unnnic-color-neutral-soft;
133
+ color: $unnnic-color-fg-base;
134
+ font: $unnnic-font-action;
135
+ margin-bottom: $unnnic-space-4;
136
+ border-bottom: $unnnic-border-width-thinner solid $unnnic-color-border-base;
129
137
  }
130
138
 
131
139
  .tab-content {
132
140
  display: flex;
133
- gap: $unnnic-spacing-sm;
141
+ gap: $unnnic-space-6;
134
142
 
135
143
  margin: 0;
136
144
  padding: 0;
@@ -139,27 +147,24 @@ export default {
139
147
 
140
148
  .tab-head {
141
149
  display: flex;
142
- gap: $unnnic-spacing-xs;
150
+ gap: $unnnic-space-2;
143
151
  align-items: center;
144
152
 
145
153
  cursor: pointer;
146
- margin: $unnnic-spacing-xs $unnnic-spacing-sm;
154
+ padding: $unnnic-space-2 $unnnic-space-4;
147
155
 
148
156
  .unnnic-tooltip {
149
157
  display: flex;
150
158
  }
151
159
 
152
160
  &:hover {
153
- color: $unnnic-color-neutral-black;
161
+ color: $unnnic-color-fg-emphasized;
154
162
  }
155
163
  }
156
164
 
157
165
  .tab-head--active {
158
- font-family: $unnnic-font-family-secondary;
159
- font-weight: $unnnic-font-weight-bold;
160
- color: $unnnic-color-neutral-black;
161
- font-size: $unnnic-font-size-body-lg;
162
- line-height: ($unnnic-font-size-body-lg + $unnnic-line-height-medium);
166
+ color: $unnnic-color-fg-emphasized;
167
+ font: $unnnic-font-action;
163
168
  transition: 0.4s;
164
169
 
165
170
  position: relative;
@@ -168,14 +173,23 @@ export default {
168
173
  content: '';
169
174
 
170
175
  position: absolute;
171
- bottom: -$unnnic-spacing-xs;
172
- left: -$unnnic-spacing-sm;
176
+ bottom: 0;
177
+ left: 0;
173
178
 
174
179
  display: block;
175
180
 
176
- width: calc(100% + (#{$unnnic-spacing-sm} * 2));
181
+ width: 100%;
177
182
 
178
- border-bottom: $unnnic-border-width-thin solid $unnnic-color-weni-600;
183
+ border-bottom: $unnnic-border-width-thin solid $unnnic-color-border-active;
184
+ }
185
+ }
186
+
187
+ .tab-head--disabled {
188
+ color: $unnnic-color-fg-muted;
189
+ cursor: default;
190
+
191
+ &:hover {
192
+ color: $unnnic-color-fg-muted;
179
193
  }
180
194
  }
181
195
 
@@ -4,7 +4,7 @@ exports[`Tab.vue > matches the snapshot 1`] = `
4
4
  "<div data-v-b4e39fac="" class="tab size-md">
5
5
  <header data-v-b4e39fac="" class="tab-header">
6
6
  <ul data-v-b4e39fac="" class="tab-content">
7
- <li data-v-b4e39fac="" class="tab-head">tab1<div data-v-bf0cf546="" data-v-b4e39fac="" class="unnnic-tooltip"><span data-v-26446d8e="" data-v-b4e39fac="" class="material-symbols-rounded unnnic-icon-scheme--neutral-cleanest unnnic-icon-size--sm material-symbols-rounded--filled" data-testid="material-icon" translate="no">info</span><span data-v-bf0cf546="" class="unnnic-tooltip-label unnnic-tooltip-label-bottom" data-testid="tooltip-label" style="left: 0px; top: 8px;">Tooltip text <br data-v-bf0cf546=""><!--v-if--></span></div>
7
+ <li data-v-b4e39fac="" class="tab-head">tab1<div data-v-bf0cf546="" data-v-b4e39fac="" class="unnnic-tooltip"><span data-v-26446d8e="" data-v-b4e39fac="" class="material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--sm" data-testid="material-icon" translate="no">help</span><span data-v-bf0cf546="" class="unnnic-tooltip-label unnnic-tooltip-label-bottom" data-testid="tooltip-label" style="left: 0px; top: 8px;">Tooltip text <br data-v-bf0cf546=""><!--v-if--></span></div>
8
8
  </li>
9
9
  <li data-v-b4e39fac="" class="tab-head tab-head--active">tab2
10
10
  <!--v-if-->
@@ -42,7 +42,7 @@ exports[`TableNext.vue > matches the snapshot 1`] = `
42
42
  <p data-v-e29458bb="" class="table-pagination__count" data-testid="count">1 - 1 of 1</p>
43
43
  <div data-v-0eeff8cb="" data-v-e29458bb="" class="pagination"><button data-v-ceff2a60="" data-v-0eeff8cb="" data-test="previous-button" disabled="" class="unnnic-button unnnic-button--size-small unnnic-button--tertiary unnnic-button--icon-on-center">
44
44
  <!--v-if-->
45
- <!--v-if--><svg data-v-26446d8e="" data-v-ceff2a60="" width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" class="unnnic-icon unnnic-icon__size--sm unnnic-icon-scheme--neutral-clean" data-testid="icon-center" style="visibility: visible;">
45
+ <!--v-if--><svg data-v-26446d8e="" data-v-ceff2a60="" width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" class="unnnic-icon unnnic-icon__size--ant unnnic-icon-scheme--neutral-clean" data-testid="icon-center" style="visibility: visible;">
46
46
  <path d="M26.8368 35.0005C26.5868 35.0005 26.3506 34.903 26.1743 34.7255L12.7743 21.3255C12.4206 20.9717 12.2256 20.5017 12.2256 20.0017C12.2256 19.5017 12.4193 19.0305 12.7731 18.6767L26.1743 5.27549C26.3506 5.09799 26.5868 5.00049 26.8368 5.00049C27.0868 5.00049 27.3231 5.09799 27.4993 5.27549C27.6768 5.45174 27.7743 5.68799 27.7743 5.93799C27.7743 6.18799 27.6768 6.42424 27.4993 6.60049L14.0993 20.0005L27.4993 33.4005C27.6768 33.578 27.7743 33.813 27.7743 34.063C27.7743 34.313 27.6768 34.5492 27.4993 34.7255C27.3218 34.9017 27.0868 35.0005 26.8368 35.0005Z" fill="#3B414D" class="primary"></path>
47
47
  </svg><span data-v-ceff2a60="" class="unnnic-button__label" style="visibility: visible;" data-testid="button-label"> </span>
48
48
  <!--v-if-->
@@ -53,7 +53,7 @@ exports[`TableNext.vue > matches the snapshot 1`] = `
53
53
  <!--v-if-->
54
54
  </button><button data-v-ceff2a60="" data-v-0eeff8cb="" data-test="next-button" disabled="" class="unnnic-button unnnic-button--size-small unnnic-button--tertiary unnnic-button--icon-on-center">
55
55
  <!--v-if-->
56
- <!--v-if--><svg data-v-26446d8e="" data-v-ceff2a60="" width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" class="unnnic-icon unnnic-icon__size--sm unnnic-icon-scheme--neutral-clean" data-testid="icon-center" style="visibility: visible;">
56
+ <!--v-if--><svg data-v-26446d8e="" data-v-ceff2a60="" width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" class="unnnic-icon unnnic-icon__size--ant unnnic-icon-scheme--neutral-clean" data-testid="icon-center" style="visibility: visible;">
57
57
  <path d="M13.1635 35.0005C12.9135 35.0005 12.6772 34.903 12.501 34.7255C12.136 34.3605 12.136 33.7655 12.501 33.3992L25.901 20.0005L12.501 6.60049C12.3235 6.42424 12.226 6.18799 12.226 5.93799C12.226 5.68799 12.3235 5.45174 12.501 5.27549C12.6772 5.09799 12.9135 5.00049 13.1635 5.00049C13.4135 5.00049 13.6497 5.09799 13.826 5.27549L27.226 18.6755C27.956 19.4055 27.9572 20.5942 27.2272 21.3242L13.826 34.7255C13.6497 34.903 13.4135 35.0005 13.1635 35.0005Z" fill="#3B414D" class="primary"></path>
58
58
  </svg><span data-v-ceff2a60="" class="unnnic-button__label" style="visibility: visible;" data-testid="button-label"> </span>
59
59
  <!--v-if-->
@@ -5,7 +5,7 @@ exports[`TablePagination.vue > matches the snapshot 1`] = `
5
5
  <p data-v-e29458bb="" class="table-pagination__count" data-testid="count">1 - 10 of 100</p>
6
6
  <div data-v-0eeff8cb="" data-v-e29458bb="" class="pagination"><button data-v-ceff2a60="" data-v-0eeff8cb="" data-test="previous-button" disabled="" class="unnnic-button unnnic-button--size-small unnnic-button--tertiary unnnic-button--icon-on-center">
7
7
  <!--v-if-->
8
- <!--v-if--><svg data-v-26446d8e="" data-v-ceff2a60="" width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" class="unnnic-icon unnnic-icon__size--sm unnnic-icon-scheme--neutral-clean" data-testid="icon-center" style="visibility: visible;">
8
+ <!--v-if--><svg data-v-26446d8e="" data-v-ceff2a60="" width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" class="unnnic-icon unnnic-icon__size--ant unnnic-icon-scheme--neutral-clean" data-testid="icon-center" style="visibility: visible;">
9
9
  <path d="M26.8368 35.0005C26.5868 35.0005 26.3506 34.903 26.1743 34.7255L12.7743 21.3255C12.4206 20.9717 12.2256 20.5017 12.2256 20.0017C12.2256 19.5017 12.4193 19.0305 12.7731 18.6767L26.1743 5.27549C26.3506 5.09799 26.5868 5.00049 26.8368 5.00049C27.0868 5.00049 27.3231 5.09799 27.4993 5.27549C27.6768 5.45174 27.7743 5.68799 27.7743 5.93799C27.7743 6.18799 27.6768 6.42424 27.4993 6.60049L14.0993 20.0005L27.4993 33.4005C27.6768 33.578 27.7743 33.813 27.7743 34.063C27.7743 34.313 27.6768 34.5492 27.4993 34.7255C27.3218 34.9017 27.0868 35.0005 26.8368 35.0005Z" fill="#3B414D" class="primary"></path>
10
10
  </svg><span data-v-ceff2a60="" class="unnnic-button__label" style="visibility: visible;" data-testid="button-label"> </span>
11
11
  <!--v-if-->
@@ -36,7 +36,7 @@ exports[`TablePagination.vue > matches the snapshot 1`] = `
36
36
  <!--v-if-->
37
37
  </button><button data-v-ceff2a60="" data-v-0eeff8cb="" data-test="next-button" class="unnnic-button unnnic-button--size-small unnnic-button--tertiary unnnic-button--icon-on-center">
38
38
  <!--v-if-->
39
- <!--v-if--><svg data-v-26446d8e="" data-v-ceff2a60="" width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" class="unnnic-icon unnnic-icon__size--sm unnnic-icon-scheme--neutral-dark" data-testid="icon-center" style="visibility: visible;">
39
+ <!--v-if--><svg data-v-26446d8e="" data-v-ceff2a60="" width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" class="unnnic-icon unnnic-icon__size--ant unnnic-icon-scheme--neutral-dark" data-testid="icon-center" style="visibility: visible;">
40
40
  <path d="M13.1635 35.0005C12.9135 35.0005 12.6772 34.903 12.501 34.7255C12.136 34.3605 12.136 33.7655 12.501 33.3992L25.901 20.0005L12.501 6.60049C12.3235 6.42424 12.226 6.18799 12.226 5.93799C12.226 5.68799 12.3235 5.45174 12.501 5.27549C12.6772 5.09799 12.9135 5.00049 13.1635 5.00049C13.4135 5.00049 13.6497 5.09799 13.826 5.27549L27.226 18.6755C27.956 19.4055 27.9572 20.5942 27.2272 21.3242L13.826 34.7255C13.6497 34.903 13.4135 35.0005 13.1635 35.0005Z" fill="#3B414D" class="primary"></path>
41
41
  </svg><span data-v-ceff2a60="" class="unnnic-button__label" style="visibility: visible;" data-testid="button-label"> </span>
42
42
  <!--v-if-->
@@ -0,0 +1,252 @@
1
+ <template>
2
+ <section class="unnnic-template-preview">
3
+ <section
4
+ :class="[
5
+ 'unnnic-template-preview__content',
6
+ { 'unnnic-template-preview__content--has-media': hasHeaderMedia },
7
+ ]"
8
+ >
9
+ <header
10
+ v-if="hasHeader"
11
+ :class="`unnnic-template-preview__header__${
12
+ template?.header.type === 'TEXT' ? 'text' : 'media'
13
+ }`"
14
+ >
15
+ <img
16
+ v-if="
17
+ template?.header.type === 'MEDIA' &&
18
+ template?.header.mediaType === 'IMAGE'
19
+ "
20
+ class="unnnic-template-preview__header__media__preview"
21
+ :src="template.header.src || imagePreview"
22
+ />
23
+ <template
24
+ v-else-if="
25
+ template?.header.type === 'MEDIA' &&
26
+ template?.header.mediaType === 'VIDEO'
27
+ "
28
+ >
29
+ <video
30
+ v-if="template.header.src"
31
+ class="unnnic-template-preview__header__media__preview"
32
+ :src="template.header.src"
33
+ controls
34
+ />
35
+ <img
36
+ v-else
37
+ class="unnnic-template-preview__header__media__preview"
38
+ :src="videoPreview"
39
+ />
40
+ </template>
41
+ <template
42
+ v-else-if="
43
+ template?.header.type === 'MEDIA' &&
44
+ template?.header.mediaType === 'DOCUMENT'
45
+ "
46
+ >
47
+ <img
48
+ class="unnnic-template-preview__header__media__preview"
49
+ :src="documentPreview"
50
+ />
51
+ </template>
52
+ <h1
53
+ v-else-if="template?.header.type === 'TEXT'"
54
+ class="unnnic-template-preview__header__text__preview"
55
+ >
56
+ {{ template.header.text }}
57
+ </h1>
58
+ </header>
59
+ <section
60
+ v-if="hasBody"
61
+ :class="[
62
+ 'unnnic-template-preview__body',
63
+ { 'unnnic-template-preview__body--has-media': hasHeaderMedia },
64
+ ]"
65
+ >
66
+ <section v-html="parsedBody"></section>
67
+ </section>
68
+ <footer
69
+ v-if="hasFooter"
70
+ :class="[
71
+ 'unnnic-template-preview__footer',
72
+ { 'unnnic-template-preview__footer--has-media': hasHeaderMedia },
73
+ ]"
74
+ >
75
+ {{ template?.footer }}
76
+ </footer>
77
+ </section>
78
+ <footer
79
+ v-if="hasButtons"
80
+ class="unnnic-template-preview__buttons"
81
+ >
82
+ <section
83
+ v-for="(button, index) in template?.buttons"
84
+ :key="`button-${index}`"
85
+ class="unnnic-template-preview__buttons__button"
86
+ >
87
+ <UnnnicIcon
88
+ class="unnnic-template-preview__buttons__button__icon"
89
+ :icon="getButtonIcon(button.type)"
90
+ scheme="aux-blue-500"
91
+ size="ant"
92
+ />
93
+ <p class="unnnic-template-preview__buttons__button__text">
94
+ {{ button.text }}
95
+ </p>
96
+ </section>
97
+ </footer>
98
+ </section>
99
+ </template>
100
+
101
+ <script lang="ts" setup>
102
+ import { computed } from 'vue';
103
+
104
+ import type { Template } from './types';
105
+
106
+ import imagePreview from '../../assets/img/previews/image-preview.png';
107
+ import documentPreview from '../../assets/img/previews/doc-preview.png';
108
+ import videoPreview from '../../assets/img/previews/video-preview.png';
109
+
110
+ import UnnnicIcon from '../Icon.vue';
111
+
112
+ interface Props {
113
+ template?: Template | null;
114
+ }
115
+
116
+ const props = withDefaults(defineProps<Props>(), {
117
+ template: null,
118
+ });
119
+
120
+ const hasHeader = computed(
121
+ () => props.template?.header && props.template.header.type,
122
+ );
123
+ const hasHeaderMedia = computed(
124
+ () => !!props.template?.header && props.template.header.type === 'MEDIA',
125
+ );
126
+ const hasBody = computed(
127
+ () => !!props.template?.body && props.template.body.length > 0,
128
+ );
129
+ const hasFooter = computed(
130
+ () => !!props.template?.footer && props.template.footer.length > 0,
131
+ );
132
+ const hasButtons = computed(
133
+ () => !!props.template?.buttons && props.template.buttons.length > 0,
134
+ );
135
+ const parsedBody = computed(() => {
136
+ if (!hasBody.value) return '';
137
+
138
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
139
+ const result = props
140
+ .template!.body!.replaceAll('\n', '<br/>')
141
+ .replaceAll(/(?:\*)([^*<\n]+)(?:\*)/g, '<strong>$1</strong>')
142
+ .replaceAll(/(?:_)([^_<\n]+)(?:_)/g, '<i>$1</i>')
143
+ .replaceAll(/(?:~)([^~<\n]+)(?:~)/g, '<s>$1</s>')
144
+ .replaceAll(/(?:```)([^```<\n]+)(?:```)/g, '<tt>$1</tt>')
145
+ .replaceAll(/{{.*?}}/g, (match) => `<strong>${match}</strong>`);
146
+
147
+ return result;
148
+ });
149
+
150
+ const getButtonIcon = (buttonType) => {
151
+ const buttonMapper = {
152
+ PHONE_NUMBER: 'phone',
153
+ URL: 'open_in_new',
154
+ COPY_CODE: 'content_copy',
155
+ FLOW: '',
156
+ QUICK_REPLY: 'reply',
157
+ };
158
+
159
+ return buttonMapper[buttonType] || '';
160
+ };
161
+ </script>
162
+
163
+ <style lang="scss" scoped>
164
+ @use '@/assets/scss/unnnic' as *;
165
+
166
+ .unnnic-template-preview {
167
+ display: flex;
168
+ flex-direction: column;
169
+ box-shadow: $unnnic-shadow-level-near;
170
+ background-color: $unnnic-color-background-white;
171
+ width: 368px;
172
+ border-radius: $unnnic-border-radius-md;
173
+
174
+ &__content {
175
+ display: flex;
176
+ flex-direction: column;
177
+ gap: $unnnic-space-3;
178
+ padding: $unnnic-space-4 $unnnic-space-3;
179
+
180
+ &--has-media {
181
+ padding: $unnnic-space-1;
182
+ }
183
+ }
184
+
185
+ &__header {
186
+ &__text {
187
+ &__preview {
188
+ font-family: $unnnic-font-family-secondary;
189
+ font-weight: $unnnic-font-weight-bold;
190
+ font-size: $unnnic-font-size-body-gt;
191
+ line-height: $unnnic-font-size-body-gt + $unnnic-line-height-medium;
192
+ color: $unnnic-color-neutral-dark;
193
+
194
+ margin: $unnnic-space-0;
195
+ }
196
+ }
197
+
198
+ &__media {
199
+ &__preview {
200
+ width: 100%;
201
+ object-fit: cover;
202
+ }
203
+ }
204
+ }
205
+
206
+ &__body {
207
+ font-family: $unnnic-font-family-secondary;
208
+ font-weight: $unnnic-font-weight-regular;
209
+ font-size: $unnnic-font-size-body-gt;
210
+ line-height: $unnnic-font-size-body-gt + $unnnic-line-height-medium;
211
+ color: $unnnic-color-neutral-cloudy;
212
+
213
+ &--has-media {
214
+ padding: $unnnic-space-0 $unnnic-space-2;
215
+ }
216
+ }
217
+
218
+ &__footer {
219
+ font-family: $unnnic-font-family-secondary;
220
+ font-weight: $unnnic-font-weight-regular;
221
+ font-size: $unnnic-font-size-body-md;
222
+ line-height: $unnnic-font-size-body-md + $unnnic-line-height-medium;
223
+ color: $unnnic-color-neutral-clean;
224
+
225
+ &--has-media {
226
+ padding: $unnnic-space-0 $unnnic-space-3 $unnnic-space-2;
227
+ }
228
+ }
229
+
230
+ &__buttons {
231
+ font-family: $unnnic-font-family-secondary;
232
+ font-weight: $unnnic-font-weight-bold;
233
+ font-size: $unnnic-font-size-body-gt;
234
+ line-height: $unnnic-font-size-body-gt + $unnnic-line-height-medium;
235
+
236
+ &__button {
237
+ margin: 0;
238
+ display: flex;
239
+ align-items: center;
240
+ justify-content: center;
241
+ gap: $unnnic-space-2;
242
+ padding: $unnnic-space-3;
243
+ border-top: 1px solid $unnnic-color-neutral-light;
244
+
245
+ &__text {
246
+ color: $unnnic-color-aux-blue-500;
247
+ margin: $unnnic-space-0;
248
+ }
249
+ }
250
+ }
251
+ }
252
+ </style>
@@ -0,0 +1,51 @@
1
+ <template>
2
+ <UnnnicModalDialog
3
+ :modelValue="modelValue"
4
+ :title="defaultTranslations.title[props.locale]"
5
+ :showCloseIcon="true"
6
+ class="unnnic-template-preview-modal"
7
+ @update:model-value="$event === false && $emit('close')"
8
+ >
9
+ <UnnnicTemplatePreview :template="template" />
10
+ </UnnnicModalDialog>
11
+ </template>
12
+
13
+ <script lang="ts" setup>
14
+ import UnnnicTemplatePreview from './TemplatePreview.vue';
15
+ import UnnnicModalDialog from '../ModalDialog/ModalDialog.vue';
16
+
17
+ import type { Template } from './types';
18
+
19
+ const defaultTranslations = {
20
+ title: {
21
+ 'pt-br': 'Visualizar modelo',
22
+ en: 'Template preview',
23
+ es: 'Vista previa de plantilla',
24
+ },
25
+ };
26
+
27
+ interface Props {
28
+ locale?: string;
29
+ template: Template;
30
+ modelValue: boolean;
31
+ }
32
+
33
+ const props = withDefaults(defineProps<Props>(), {
34
+ locale: 'en',
35
+ });
36
+
37
+ defineEmits<{
38
+ close: void;
39
+ }>();
40
+ </script>
41
+
42
+ <style lang="scss" scoped>
43
+ @use '@/assets/scss/unnnic' as *;
44
+
45
+ :deep(.unnnic-modal-dialog__container__content) {
46
+ display: flex;
47
+ align-items: center;
48
+ justify-content: center;
49
+ background-color: $unnnic-color-neutral-lightest;
50
+ }
51
+ </style>
@@ -0,0 +1,16 @@
1
+ export interface Template {
2
+ header: {
3
+ type: 'TEXT' | 'MEDIA';
4
+ mediaType?: 'IMAGE' | 'VIDEO' | 'DOCUMENT';
5
+ text?: string | null;
6
+ src?: string | null;
7
+ };
8
+ body?: string;
9
+ footer?: string;
10
+ buttons?: Array<{
11
+ type: 'QUICK_REPLY' | 'PHONE_NUMBER';
12
+ text: string;
13
+ countryCode?: string;
14
+ phoneNumber?: string;
15
+ }>;
16
+ }
@@ -18,13 +18,14 @@
18
18
  :disabled="disabled"
19
19
  :value="modelValue"
20
20
  @input="$emit('update:modelValue', fullySanitize($event.target.value))"
21
- ></textarea>
21
+ />
22
22
 
23
23
  <template
24
24
  v-if="maxLength"
25
25
  #rightMessage
26
- >{{ modelValue.length }}/{{ maxLength }}</template
27
26
  >
27
+ {{ modelValue.length }}/{{ maxLength }}
28
+ </template>
28
29
  </UnnnicFormElement>
29
30
  </template>
30
31
 
@@ -96,6 +97,12 @@ export default {
96
97
  @use '@/assets/scss/unnnic' as *;
97
98
  @use '@/components/Input/Input' as *;
98
99
 
100
+ * {
101
+ margin: 0;
102
+ padding: 0;
103
+ box-sizing: border-box;
104
+ }
105
+
99
106
  .unnnic-text-area {
100
107
  &__textarea {
101
108
  @include input-base;
@@ -103,24 +110,21 @@ export default {
103
110
  display: block;
104
111
  width: 100%;
105
112
  resize: vertical;
106
- box-sizing: border-box;
107
113
 
108
114
  scrollbar-width: thin;
109
115
 
116
+ padding: $unnnic-space-3 $unnnic-space-4;
117
+
110
118
  &--size-md {
111
119
  @include input-md-font;
112
120
 
113
- min-height: 6.25 * $unnnic-font-size;
114
- padding: ($unnnic-spacing-ant - $unnnic-border-width-thinner)
115
- ($unnnic-spacing-sm - $unnnic-border-width-thinner);
121
+ min-height: 100px;
116
122
  }
117
123
 
118
124
  &--size-sm {
119
125
  @include input-sm-font;
120
126
 
121
- min-height: 5 * $unnnic-font-size;
122
- padding: ($unnnic-spacing-xs)
123
- ($unnnic-spacing-sm - $unnnic-border-width-thinner);
127
+ min-height: $unnnic-space-20;
124
128
  }
125
129
 
126
130
  &.unnnic-text-area__textarea--type-error {
@@ -3,7 +3,12 @@
3
3
  exports[`TextArea.vue > matches the snapshot 1`] = `
4
4
  "<section data-v-9f8d6c86="" data-v-735b3c51="" class="unnnic-form-element">
5
5
  <p data-v-9f8d6c86="" class="unnnic-form-element__label">Description</p><textarea data-v-735b3c51="" class="unnnic-text-area__textarea unnnic-text-area__textarea--size-md unnnic-text-area__textarea--type-normal" placeholder="Enter text" maxlength="200" value=""></textarea>
6
- <!--v-if-->
7
- <p data-v-9f8d6c86="" class="unnnic-form-element__message"> <span data-v-9f8d6c86="" class="unnnic-form-element__right-message">0/200</span></p>
6
+ <section data-v-9f8d6c86="" class="unnnic-form-element__hints-container">
7
+ <section data-v-9f8d6c86="" class="unnnic-form-element__message-container">
8
+ <!--v-if-->
9
+ <!--v-if-->
10
+ </section>
11
+ <p data-v-9f8d6c86="">0/200</p>
12
+ </section>
8
13
  </section>"
9
14
  `;