@weni/unnnic-system 3.3.1-alpha.3 → 3.3.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 (204) 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 +119 -18
  4. package/dist/components/Alert/Alert.vue.d.ts.map +1 -1
  5. package/dist/components/Alert/Version1dot1.vue.d.ts +38 -2
  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 +29 -176
  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 +32 -38
  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 +1 -32
  65. package/dist/components/Input/BaseInput.vue.d.ts.map +1 -1
  66. package/dist/components/Input/Input.vue.d.ts +29 -176
  67. package/dist/components/Input/Input.vue.d.ts.map +1 -1
  68. package/dist/components/Input/TextInput.vue.d.ts +14 -83
  69. package/dist/components/Input/TextInput.vue.d.ts.map +1 -1
  70. package/dist/components/InputDatePicker/InputDatePicker.vue.d.ts +39 -186
  71. package/dist/components/InputNext/InputNext.vue.d.ts +4 -4
  72. package/dist/components/Label/Label.vue.d.ts +15 -9
  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 +37 -184
  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 +14 -20
  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 +6 -8
  84. package/dist/components/Radio/Radio.vue.d.ts.map +1 -1
  85. package/dist/components/SelectSmart/SelectSmart.vue.d.ts +28 -97
  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 +14 -83
  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 +2 -2
  93. package/dist/components/Tab/Tab.vue.d.ts +2 -13
  94. package/dist/components/TableNext/TableBodyCell.vue.d.ts +2 -2
  95. package/dist/components/TableNext/TablePagination.vue.d.ts +6 -6
  96. package/dist/components/TabsExpanded/TabsExpanded.vue.d.ts +1 -1
  97. package/dist/components/Tag/BrandTag.vue.d.ts +2 -2
  98. package/dist/components/Tag/DefaultTag.vue.d.ts +2 -2
  99. package/dist/components/Tag/IndicatorTag.vue.d.ts +2 -2
  100. package/dist/components/Tag/Tag.vue.d.ts +8 -8
  101. package/dist/components/TextArea/TextArea.vue.d.ts +32 -38
  102. package/dist/components/TextArea/TextArea.vue.d.ts.map +1 -1
  103. package/dist/components/ToolTip/ToolTip.vue.d.ts +1 -1
  104. package/dist/components/Tour/Tour.vue.d.ts +6 -6
  105. package/dist/components/Tour/TourPopover.vue.d.ts +6 -6
  106. package/dist/components/UploadArea/UploadArea.vue.d.ts +7 -7
  107. package/dist/components/index.d.ts +1110 -2132
  108. package/dist/components/index.d.ts.map +1 -1
  109. package/dist/{es-94ab560e.mjs → es-54ddaf5a.mjs} +1 -1
  110. package/dist/{index-5caf403e.mjs → index-a34da30f.mjs} +8094 -8447
  111. package/dist/locales/en.json.d.ts +1 -2
  112. package/dist/locales/es.json.d.ts +1 -2
  113. package/dist/locales/pt_br.json.d.ts +1 -2
  114. package/dist/{pt-br-3002df05.mjs → pt-br-ff00f945.mjs} +1 -1
  115. package/dist/style.css +1 -1
  116. package/dist/unnnic.mjs +120 -126
  117. package/dist/unnnic.umd.js +41 -42
  118. package/dist/utils/call.d.ts +1 -2
  119. package/dist/utils/call.d.ts.map +1 -1
  120. package/package.json +2 -2
  121. package/src/assets/scss/scheme-colors.scss +111 -115
  122. package/src/assets/tokens/colors.json +2 -2
  123. package/src/components/Alert/Alert.vue +135 -26
  124. package/src/components/Alert/AlertBanner.vue +182 -0
  125. package/src/components/Alert/AlertCaller.vue +49 -0
  126. package/src/components/Alert/Version1dot1.vue +36 -0
  127. package/src/components/Alert/__tests__/AlertBanner.spec.js +89 -0
  128. package/src/components/Alert/__tests__/AlertCaller.spec.js +98 -0
  129. package/src/components/Alert/__tests__/__snapshots__/Alert.spec.js.snap +7 -11
  130. package/src/components/Alert/__tests__/__snapshots__/Version1dot1.spec.js.snap +2 -2
  131. package/src/components/Button/Button.vue +108 -60
  132. package/src/components/Button/types.ts +1 -0
  133. package/src/components/FormElement/FormElement.vue +91 -51
  134. package/src/components/Input/BaseInput.vue +14 -31
  135. package/src/components/Input/Input.scss +21 -19
  136. package/src/components/Input/Input.vue +30 -94
  137. package/src/components/Input/TextInput.vue +58 -82
  138. package/src/components/Input/__test__/TextInput.spec.js +5 -5
  139. package/src/components/Input/__test__/__snapshots__/Input.spec.js.snap +3 -16
  140. package/src/components/Input/__test__/__snapshots__/TextInput.spec.js.snap +1 -7
  141. package/src/components/Label/Label.vue +21 -52
  142. package/src/components/Label/__tests__/Label.spec.js +1 -1
  143. package/src/components/Label/__tests__/__snapshots__/Label.spec.js.snap +1 -1
  144. package/src/components/ModalDialog/ModalDialog.vue +0 -1
  145. package/src/components/ModalDialog/__tests__/__snapshots__/ModalDialog.spec.js.snap +1 -1
  146. package/src/components/Radio/Radio.vue +67 -80
  147. package/src/components/Radio/__test__/Radio.spec.js +20 -14
  148. package/src/components/Radio/__test__/__snapshots__/Radio.spec.js.snap +3 -3
  149. package/src/components/Tab/Tab.vue +23 -37
  150. package/src/components/Tab/__test__/__snapshots__/Tab.spec.js.snap +1 -1
  151. package/src/components/TableNext/__test__/__snapshots__/TableNext.spec.js.snap +2 -2
  152. package/src/components/TableNext/__test__/__snapshots__/TablePagination.spec.js.snap +2 -2
  153. package/src/components/TextArea/TextArea.vue +9 -13
  154. package/src/components/TextArea/__test__/__snapshots__/TextArea.spec.js.snap +2 -7
  155. package/src/components/index.ts +4 -18
  156. package/src/locales/en.json +1 -2
  157. package/src/locales/es.json +1 -2
  158. package/src/locales/pt_br.json +1 -2
  159. package/src/stories/Alert.stories.js +67 -6
  160. package/src/stories/Button.stories.js +17 -2
  161. package/src/stories/Input.stories.js +3 -22
  162. package/src/stories/Label.stories.js +0 -7
  163. package/src/stories/Tab.stories.js +4 -11
  164. package/src/types/scheme-colors.d.ts +14 -120
  165. package/src/utils/call.js +18 -46
  166. package/dist/components/TemplatePreview/TemplatePreview.vue.d.ts +0 -9
  167. package/dist/components/TemplatePreview/TemplatePreview.vue.d.ts.map +0 -1
  168. package/dist/components/TemplatePreview/TemplatePreviewModal.vue.d.ts +0 -15
  169. package/dist/components/TemplatePreview/TemplatePreviewModal.vue.d.ts.map +0 -1
  170. package/dist/components/Toast/Toast.vue.d.ts +0 -16
  171. package/dist/components/Toast/Toast.vue.d.ts.map +0 -1
  172. package/dist/components/Toast/ToastManager.d.ts +0 -14
  173. package/dist/components/Toast/ToastManager.d.ts.map +0 -1
  174. package/dist/components/Toast/types.d.ts +0 -35
  175. package/dist/components/Toast/types.d.ts.map +0 -1
  176. package/src/assets/icons/radio-checked.svg +0 -3
  177. package/src/assets/img/previews/doc-preview.png +0 -0
  178. package/src/assets/img/previews/image-preview.png +0 -0
  179. package/src/assets/img/previews/video-preview.png +0 -0
  180. package/src/components/Popover/__tests__/Popover.spec.js +0 -147
  181. package/src/components/Popover/__tests__/__snapshots__/Popover.spec.js.snap +0 -8
  182. package/src/components/Popover/index.vue +0 -146
  183. package/src/components/RadioGroup/RadioGroup.vue +0 -110
  184. package/src/components/Select/SelectOption.vue +0 -65
  185. package/src/components/Select/__tests__/Select.spec.js +0 -412
  186. package/src/components/Select/__tests__/SelectItem.spec.js +0 -330
  187. package/src/components/Select/__tests__/SelectOption.spec.js +0 -174
  188. package/src/components/Select/__tests__/__snapshots__/Select.spec.js.snap +0 -97
  189. package/src/components/Select/__tests__/__snapshots__/SelectItem.spec.js.snap +0 -15
  190. package/src/components/Select/__tests__/__snapshots__/SelectOption.spec.js.snap +0 -25
  191. package/src/components/Select/index.vue +0 -245
  192. package/src/components/TemplatePreview/TemplatePreview.vue +0 -252
  193. package/src/components/TemplatePreview/TemplatePreviewModal.vue +0 -51
  194. package/src/components/TemplatePreview/types.d.ts +0 -16
  195. package/src/components/Toast/Toast.vue +0 -236
  196. package/src/components/Toast/ToastManager.ts +0 -110
  197. package/src/components/Toast/types.ts +0 -57
  198. package/src/stories/Popover.stories.js +0 -39
  199. package/src/stories/RadioGroup.stories.js +0 -139
  200. package/src/stories/Select.stories.js +0 -158
  201. package/src/stories/TemplatePreview.stories.js +0 -94
  202. package/src/stories/TemplatePreviewModal.stories.js +0 -110
  203. package/src/stories/Toast.mdx +0 -123
  204. package/src/stories/Toast.stories.js +0 -126
@@ -1,5 +1,11 @@
1
1
  <template>
2
- <div :class="['text-input', `size--${size}`]">
2
+ <div
3
+ :class="[
4
+ 'text-input',
5
+ `size--${size}`,
6
+ `text-input--icon-right-size-${iconRightSize}`,
7
+ ]"
8
+ >
3
9
  <BaseInput
4
10
  v-bind="attributes"
5
11
  ref="base-input"
@@ -12,10 +18,6 @@
12
18
  class="input-itself"
13
19
  :hasIconLeft="!!iconLeft"
14
20
  :hasIconRight="!!iconRight || allowTogglePassword"
15
- :hasClearIcon="showClear"
16
- :maxlength="maxlength"
17
- :readonly="readonly"
18
- :forceActiveStatus="forceActiveStatus"
19
21
  @focus="onFocus"
20
22
  @blur="onBlur"
21
23
  />
@@ -24,34 +26,24 @@
24
26
  v-if="iconLeft"
25
27
  :scheme="iconScheme"
26
28
  :icon="iconLeft"
27
- size="ant"
29
+ size="sm"
28
30
  :clickable="iconLeftClickable"
29
31
  :class="['icon-left', { clickable: iconLeftClickable }]"
30
32
  @click="onIconLeftClick"
31
33
  />
32
34
 
33
- <section class="icon-right-container">
34
- <UnnnicIcon
35
- v-if="showClear"
36
- class="icon-clear"
37
- :scheme="iconScheme"
38
- icon="close"
39
- size="ant"
40
- clickable
41
- @click.stop="onClearClick"
42
- />
43
-
44
- <UnnnicIcon
45
- v-if="iconRightSvg"
46
- :scheme="iconScheme"
47
- :icon="iconRightSvg"
48
- size="ant"
49
- :clickable="iconRightClickable || allowTogglePassword"
50
- class="icon-right"
51
- :class="{ clickable: iconRightClickable || allowTogglePassword }"
52
- @click="onIconRightClick"
53
- />
54
- </section>
35
+ <UnnnicIcon
36
+ v-if="iconRightSvg"
37
+ :scheme="iconScheme"
38
+ :icon="iconRightSvg"
39
+ :size="iconRightSize"
40
+ :clickable="iconRightClickable || allowTogglePassword"
41
+ :class="[
42
+ 'icon-right',
43
+ { clickable: iconRightClickable || allowTogglePassword },
44
+ ]"
45
+ @click="onIconRightClick"
46
+ />
55
47
  </div>
56
48
  </template>
57
49
 
@@ -100,6 +92,10 @@ export default {
100
92
  type: Boolean,
101
93
  default: null,
102
94
  },
95
+ iconRightSize: {
96
+ type: String,
97
+ default: 'sm',
98
+ },
103
99
  allowTogglePassword: {
104
100
  type: Boolean,
105
101
  default: null,
@@ -112,28 +108,8 @@ export default {
112
108
  type: String,
113
109
  default: 'md',
114
110
  },
115
- maxlength: {
116
- type: Number,
117
- default: null,
118
- },
119
- disabled: {
120
- type: Boolean,
121
- default: false,
122
- },
123
- readonly: {
124
- type: Boolean,
125
- default: false,
126
- },
127
- forceActiveStatus: {
128
- type: Boolean,
129
- default: false,
130
- },
131
- showClear: {
132
- type: Boolean,
133
- default: false,
134
- },
135
111
  },
136
- emits: ['icon-left-click', 'icon-right-click', 'clear'],
112
+ emits: ['icon-left-click', 'icon-right-click'],
137
113
  data() {
138
114
  return {
139
115
  isFocused: false,
@@ -142,7 +118,7 @@ export default {
142
118
  },
143
119
  computed: {
144
120
  isDisabled() {
145
- return this.$attrs.disabled || this.disabled;
121
+ return this.$attrs.disabled;
146
122
  },
147
123
 
148
124
  iconRightSvg() {
@@ -155,22 +131,22 @@ export default {
155
131
 
156
132
  iconScheme() {
157
133
  if (this.type === 'error') {
158
- return 'fg-critical';
134
+ return 'aux-red-500';
159
135
  }
160
136
 
161
137
  if (this.isDisabled) {
162
- return 'fg-muted';
138
+ return 'neutral-cleanest';
163
139
  }
164
140
 
165
- if (this.modelValue || this.isFocused || this.forceActiveStatus) {
166
- return 'color-gray-700';
141
+ if (this.modelValue || this.isFocused) {
142
+ return 'neutral-dark';
167
143
  }
168
144
 
169
145
  if (this.hasCloudyColor) {
170
- return 'fg-base';
146
+ return 'neutral-cloudy';
171
147
  }
172
148
 
173
- return 'fg-base';
149
+ return 'neutral-cloudy';
174
150
  },
175
151
 
176
152
  attributes() {
@@ -195,10 +171,6 @@ export default {
195
171
  if (this.iconLeftClickable) this.$emit('icon-left-click');
196
172
  },
197
173
 
198
- onClearClick() {
199
- this.$emit('clear');
200
- },
201
-
202
174
  onIconRightClick() {
203
175
  if (this.attributes.disabled) return;
204
176
  if (this.allowTogglePassword) this.showPassword = !this.showPassword;
@@ -211,38 +183,42 @@ export default {
211
183
  <style lang="scss" scoped>
212
184
  @use '@/assets/scss/unnnic' as *;
213
185
 
214
- .text-input {
215
- position: relative;
216
- }
217
-
218
186
  .icon {
219
- &-left {
220
- position: absolute;
221
- top: 50%;
222
- transform: translateY(-50%);
223
- left: $unnnic-space-4;
224
-
187
+ &-left,
188
+ &-right {
225
189
  &:not(.clickable) {
226
190
  pointer-events: none;
227
191
  }
228
192
  }
229
193
 
230
- &-right-container {
194
+ &-left {
231
195
  position: absolute;
232
- top: 50%;
233
- transform: translateY(-50%);
234
- right: $unnnic-space-4;
196
+ top: $unnnic-spacing-ant + 0.1875 * $unnnic-font-size;
197
+ left: $unnnic-inline-sm - $unnnic-border-width-thinner;
198
+ }
235
199
 
236
- display: flex;
237
- align-items: center;
238
- gap: $unnnic-space-2;
200
+ &-right {
201
+ position: absolute;
202
+ top: $unnnic-spacing-ant + 0.1875 * $unnnic-font-size;
203
+ right: $unnnic-inline-sm - $unnnic-border-width-thinner;
204
+ }
205
+ }
206
+ .text-input {
207
+ position: relative;
239
208
 
240
- .icon-clear {
241
- cursor: pointer;
242
- }
243
- .icon-right:not(.clickable) {
244
- pointer-events: none;
209
+ &.size--sm {
210
+ .icon-left,
211
+ .icon-right {
212
+ top: $unnnic-spacing-xs + 0.125 * $unnnic-font-size;
245
213
  }
246
214
  }
215
+
216
+ &.size--sm.text-input--icon-right-size-ant .icon-right {
217
+ top: 0.5625 * $unnnic-font-size;
218
+ }
219
+
220
+ &.size--md.text-input--icon-right-size-ant .icon-right {
221
+ top: 0.8125 * $unnnic-font-size;
222
+ }
247
223
  }
248
224
  </style>
@@ -74,22 +74,22 @@ describe('TextInput.vue', () => {
74
74
 
75
75
  test('computes the correct iconScheme based on various states', async () => {
76
76
  await wrapper.setProps({ type: 'error' });
77
- expect(wrapper.vm.iconScheme).toBe('fg-critical');
77
+ expect(wrapper.vm.iconScheme).toBe('aux-red-500');
78
78
 
79
79
  await wrapper.setProps({ type: 'normal' });
80
80
  await wrapper.setData({ isDisabled: true });
81
- expect(wrapper.vm.iconScheme).toBe('fg-base');
81
+ expect(wrapper.vm.iconScheme).toBe('neutral-cloudy');
82
82
 
83
83
  await wrapper.setData({ isDisabled: false });
84
84
  await wrapper.setProps({ modelValue: 'text' });
85
- expect(wrapper.vm.iconScheme).toBe('color-gray-700');
85
+ expect(wrapper.vm.iconScheme).toBe('neutral-dark');
86
86
 
87
87
  await wrapper.setData({ isFocused: true });
88
- expect(wrapper.vm.iconScheme).toBe('color-gray-700');
88
+ expect(wrapper.vm.iconScheme).toBe('neutral-dark');
89
89
 
90
90
  await wrapper.setProps({ hasCloudyColor: true, modelValue: '' });
91
91
  await wrapper.setData({ isFocused: false });
92
- expect(wrapper.vm.iconScheme).toBe('fg-base');
92
+ expect(wrapper.vm.iconScheme).toBe('neutral-cloudy');
93
93
  });
94
94
 
95
95
  test('attributes computed property returns combined attributes and props', () => {
@@ -2,21 +2,8 @@
2
2
 
3
3
  exports[`Input.vue > matches the snapshot 1`] = `
4
4
  "<div data-v-d890ad85="" class="unnnic-form md">
5
- <section data-v-7f222291="" data-v-d890ad85="" class="unnnic-label unnnic-form__label">
6
- <p data-v-7f222291="" class="unnnic-label__label">Sample Label</p>
7
- <!--v-if-->
8
- </section>
9
- <div data-v-a0d36167="" data-v-d890ad85="" class="text-input size--md unnnic-form-input" mask="####-####"><input data-v-86533b41="" data-v-a0d36167="" class="unnnic-form-input input-itself input size-md normal input--has-icon-left input--has-icon-right unnnic-form-input input-itself" placeholder="Enter text" iconleft="search" iconright="clear" iconleftclickable="true" iconrightclickable="true" hascloudycolor="false" showclear="false" type="text" value=""><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--ant unnnic--clickable icon-left clickable" data-testid="material-icon" translate="no">search</span>
10
- <section data-v-a0d36167="" class="icon-right-container">
11
- <!--v-if--><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--ant unnnic--clickable icon-right clickable" data-testid="material-icon" translate="no">clear</span>
12
- </section>
13
- </div>
14
- <section data-v-d890ad85="" class="unnnic-form__hints-container">
15
- <section data-v-d890ad85="" class="unnnic-form__message-container">
16
- <p data-v-d890ad85="" class="unnnic-form__message">Error message</p>
17
- <!--v-if-->
18
- </section>
19
- <!--v-if-->
20
- </section>
5
+ <p data-v-d890ad85="" class="unnnic-form__label">Sample Label</p>
6
+ <div data-v-a0d36167="" data-v-d890ad85="" class="text-input size--md text-input--icon-right-size-sm unnnic-form-input" mask="####-####"><input data-v-86533b41="" data-v-a0d36167="" class="unnnic-form-input input-itself input size-md normal input--has-icon-left input--has-icon-right unnnic-form-input input-itself" placeholder="Enter text" iconleft="search" iconright="clear" iconleftclickable="true" iconrightclickable="true" iconrightsize="sm" hascloudycolor="false" type="text" value=""><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--neutral-cloudy unnnic-icon-size--sm unnnic--clickable icon-left clickable" data-testid="material-icon" translate="no">search</span><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--neutral-cloudy unnnic-icon-size--sm unnnic--clickable icon-right clickable" data-testid="material-icon" translate="no">clear</span></div>
7
+ <p data-v-d890ad85="" class="unnnic-form__message">Error message</p>
21
8
  </div>"
22
9
  `;
@@ -1,9 +1,3 @@
1
1
  // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
2
 
3
- exports[`TextInput.vue > matches the snapshot 1`] = `
4
- "<div data-v-a0d36167="" class="text-input size--md"><input data-v-86533b41="" data-v-a0d36167="" placeholder="Enter text" iconleft="search" iconright="clear" iconleftclickable="true" iconrightclickable="true" allowtogglepassword="false" hascloudycolor="false" showclear="false" class="input-itself input size-md normal input--has-icon-left input--has-icon-right input-itself" type="text" value=""><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--ant unnnic--clickable icon-left clickable" data-testid="material-icon" translate="no">search</span>
5
- <section data-v-a0d36167="" class="icon-right-container">
6
- <!--v-if--><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--ant unnnic--clickable icon-right clickable" data-testid="material-icon" translate="no">clear</span>
7
- </section>
8
- </div>"
9
- `;
3
+ exports[`TextInput.vue > matches the snapshot 1`] = `"<div data-v-a0d36167="" class="text-input size--md text-input--icon-right-size-sm"><input data-v-86533b41="" data-v-a0d36167="" placeholder="Enter text" iconleft="search" iconright="clear" iconleftclickable="true" iconrightclickable="true" iconrightsize="sm" allowtogglepassword="false" hascloudycolor="false" class="input-itself input size-md normal input--has-icon-left input--has-icon-right input-itself" type="text" value=""><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--neutral-cloudy unnnic-icon-size--sm unnnic--clickable icon-left clickable" data-testid="material-icon" translate="no">search</span><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--neutral-cloudy unnnic-icon-size--sm unnnic--clickable icon-right clickable" data-testid="material-icon" translate="no">clear</span></div>"`;
@@ -1,65 +1,34 @@
1
1
  <template>
2
- <section class="unnnic-label">
3
- <p class="unnnic-label__label">{{ fullySanitize(props.label) }}</p>
4
- <UnnnicToolTip
5
- v-if="tooltip"
6
- enabled
7
- :text="tooltip"
8
- :enableHtml="props.useHtmlTooltip"
9
- >
10
- <UnnnicIcon
11
- icon="help"
12
- size="sm"
13
- scheme="fg-base"
14
- />
15
- </UnnnicToolTip>
16
- </section>
2
+ <p class="unnnic-label__label">{{ fullySanitize(label) }}</p>
17
3
  </template>
18
4
 
19
- <script setup lang="ts">
20
- import { fullySanitize } from '@/utils/sanitize';
21
-
22
- import UnnnicToolTip from '../ToolTip/ToolTip.vue';
23
- import UnnnicIcon from '../Icon.vue';
24
-
25
- defineOptions({
5
+ <script>
6
+ import { fullySanitize } from '../../utils/sanitize';
7
+ export default {
26
8
  name: 'UnnnicLabel',
27
- });
28
-
29
- export interface LabelProps {
30
- label?: string;
31
- tooltip?: string;
32
- useHtmlTooltip?: boolean;
33
- }
34
-
35
- const props = withDefaults(defineProps<LabelProps>(), {
36
- label: '',
37
- tooltip: '',
38
- useHtmlTooltip: false,
39
- });
9
+ props: {
10
+ label: {
11
+ type: String,
12
+ default: null,
13
+ },
14
+ },
15
+ methods: {
16
+ fullySanitize,
17
+ },
18
+ };
40
19
  </script>
41
20
 
42
- <style lang="scss" scoped>
21
+ <style lang="scss">
43
22
  @use '@/assets/scss/unnnic' as *;
44
23
 
45
- * {
46
- box-sizing: border-box;
47
- padding: $unnnic-space-0;
48
- margin: $unnnic-space-0;
49
- }
50
-
51
24
  .unnnic-label {
52
- display: flex;
53
- align-items: center;
54
- gap: $unnnic-space-2;
55
- color: $unnnic-color-fg-base;
56
-
57
25
  &__label {
58
- font: $unnnic-font-body;
59
- }
60
-
61
- :deep(.unnnic-tooltip) {
62
- display: flex;
26
+ font-family: $unnnic-font-family-secondary;
27
+ font-weight: $unnnic-font-weight-regular;
28
+ line-height: $unnnic-font-size-body-gt + $unnnic-line-height-medium;
29
+ font-size: $unnnic-font-size-body-gt;
30
+ color: $unnnic-color-neutral-cloudy;
31
+ margin: $unnnic-spacing-stack-xs 0;
63
32
  }
64
33
  }
65
34
  </style>
@@ -24,7 +24,7 @@ describe('Label', () => {
24
24
  });
25
25
 
26
26
  it('applies the correct classes and styles', () => {
27
- const label = wrapper.find('.unnnic-label__label');
27
+ const label = wrapper.findComponent('.unnnic-label__label');
28
28
  expect(label.html()).toMatchSnapshot();
29
29
  });
30
30
  });
@@ -1,3 +1,3 @@
1
1
  // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
2
 
3
- exports[`Label > applies the correct classes and styles 1`] = `"<p data-v-7f222291="" class="unnnic-label__label">Label Test</p>"`;
3
+ exports[`Label > applies the correct classes and styles 1`] = `"<p class="unnnic-label__label">Label Test</p>"`;
@@ -49,7 +49,6 @@
49
49
  data-testid="close-icon"
50
50
  icon="close"
51
51
  clickable
52
- scheme="neutral-cloudy"
53
52
  @click="close()"
54
53
  />
55
54
  </header>
@@ -11,7 +11,7 @@ exports[`ModalDialog.vue > Elements rendering > matches the snapshot 1`] = `
11
11
  <unnnic-icon-stub data-v-68ebadeb="" filled="false" next="false" icon="test-icon" clickable="false" size="md" scheme="neutral-darkest" data-testid="title-icon" class="unnnic-modal-dialog__container__title-icon"></unnnic-icon-stub>
12
12
  <h1 data-v-68ebadeb="" class="unnnic-modal-dialog__container__title-text" data-testid="title-text">Test Title</h1>
13
13
  </section>
14
- <unnnic-icon-stub data-v-68ebadeb="" filled="false" next="false" icon="close" clickable="true" size="md" scheme="neutral-cloudy" data-testid="close-icon"></unnnic-icon-stub>
14
+ <unnnic-icon-stub data-v-68ebadeb="" filled="false" next="false" icon="close" clickable="true" size="md" scheme="neutral-darkest" data-testid="close-icon"></unnnic-icon-stub>
15
15
  </header>
16
16
  <section data-v-68ebadeb="" class="unnnic-modal-dialog__container__content"></section>
17
17
  <section data-v-68ebadeb="" data-testid="actions-section" class="unnnic-modal-dialog__container__actions">
@@ -1,33 +1,29 @@
1
1
  <!-- eslint-disable vue/multi-word-component-names -->
2
2
  <template>
3
- <section class="unnnic-radio-container">
4
- <label>
5
- <input
6
- class="unnnic-radio"
7
- type="radio"
8
- :disabled="disabled"
9
- :checked="computedModelValue === value"
10
- @change="click"
11
- :name="computedName"
12
- v-bind="pick($attrs, ['id'])"
13
- />
14
-
15
- <p
16
- :class="[
17
- 'unnnic-radio__label',
18
- { 'unnnic-radio__label--disabled': disabled },
19
- ]"
20
- >
21
- {{ label }}
22
- <slot />
23
- </p>
24
- </label>
25
- </section>
3
+ <div
4
+ :class="[
5
+ 'unnnic-radio-container',
6
+ `unnnic-radio-container--${size}`,
7
+ disabled ? 'disabled' : null,
8
+ ]"
9
+ @click="click"
10
+ >
11
+ <UnnnicIcon
12
+ class="unnnic-radio"
13
+ :icon="icon"
14
+ :scheme="color"
15
+ :size="size"
16
+ />
17
+
18
+ <span class="label">
19
+ <slot />
20
+ </span>
21
+ </div>
26
22
  </template>
27
23
 
28
24
  <script setup>
29
- import { pick } from 'lodash';
30
- import { inject, computed } from 'vue';
25
+ import { computed } from 'vue';
26
+ import UnnnicIcon from '../Icon.vue';
31
27
 
32
28
  const props = defineProps({
33
29
  modelValue: {
@@ -42,88 +38,79 @@ const props = defineProps({
42
38
  type: Boolean,
43
39
  default: false,
44
40
  },
45
- label: {
41
+ size: {
46
42
  type: String,
47
- default: '',
48
- },
49
- name: {
50
- type: String,
51
- default: '',
43
+ default: 'md',
44
+ validator(value) {
45
+ return ['md', 'sm'].includes(value);
46
+ },
52
47
  },
53
48
  });
54
49
 
55
50
  const emit = defineEmits(['update:modelValue']);
56
51
 
57
- const contextModelValue = inject('contextModelValue', undefined);
58
- const contextName = inject('contextName', undefined);
52
+ const valueName = computed(() =>
53
+ props.modelValue === props.value ? 'selected' : 'default',
54
+ );
55
+ const icon = computed(
56
+ () =>
57
+ ({
58
+ selected: 'radio-selected',
59
+ default: props.disabled ? 'radio-disable' : 'radio-default',
60
+ })[valueName.value],
61
+ );
62
+ const color = computed(() => {
63
+ if (props.disabled) {
64
+ return 'brand-sec';
65
+ }
66
+
67
+ return valueName.value === 'selected' ? 'brand-weni' : 'neutral-cleanest';
68
+ });
59
69
 
60
70
  function click() {
61
71
  if (!props.disabled) {
62
72
  emit('update:modelValue', props.value);
63
-
64
- if (contextModelValue) {
65
- contextModelValue.value = props.value;
66
- }
67
73
  }
68
74
  }
69
-
70
- const computedModelValue = computed(() => {
71
- return contextModelValue?.value || props.modelValue;
72
- });
73
-
74
- const computedName = computed(() => {
75
- return contextName?.value || props.name;
76
- });
77
75
  </script>
78
76
 
79
77
  <style lang="scss" scoped>
80
78
  @use '@/assets/scss/unnnic' as *;
81
79
 
82
- $radio-size: 21px;
83
-
84
80
  .unnnic-radio-container {
85
81
  display: inline-flex;
86
- flex-direction: column;
82
+ align-items: center;
87
83
 
88
- label {
89
- display: flex;
90
- align-items: center;
91
- gap: $unnnic-space-2;
84
+ &:not(.disabled) {
85
+ cursor: pointer;
92
86
  }
93
87
 
94
- .unnnic-radio {
95
- appearance: none;
96
- width: $radio-size;
97
- height: $radio-size;
98
- margin: 0;
99
- background-color: $unnnic-color-bg-base;
100
- border: 1px solid $unnnic-color-border-base;
101
- border-radius: $unnnic-radius-full;
102
- box-sizing: border-box;
103
- outline: none;
88
+ &--sm .unnnic-radio {
89
+ margin: $unnnic-spacing-stack-nano $unnnic-spacing-inline-nano;
90
+ }
104
91
 
105
- &:checked {
106
- border-width: 0;
107
- background-color: $unnnic-color-bg-active;
108
- background-image: url('@/assets/icons/radio-checked.svg');
109
- background-position: center;
110
- background-repeat: no-repeat;
111
- }
92
+ &--md .unnnic-radio {
93
+ margin: $unnnic-spacing-stack-nano 0;
94
+ margin-left: $unnnic-spacing-inline-nano;
95
+ margin-right: $unnnic-spacing-inline-xs;
96
+ }
112
97
 
113
- &:disabled {
114
- background-color: $unnnic-color-bg-muted;
115
- border: 1px solid $unnnic-color-border-muted;
116
- }
98
+ .label {
99
+ font-family: $unnnic-font-family-secondary;
100
+ font-weight: $unnnic-font-weight-regular;
101
+ color: $unnnic-color-neutral-darkest;
102
+ margin: $unnnic-spacing-stack-nano 0;
103
+ margin-right: $unnnic-spacing-inline-nano;
117
104
  }
118
105
 
119
- .unnnic-radio__label {
120
- margin: 0;
121
- font: $unnnic-font-body;
122
- color: $unnnic-color-fg-emphasized;
106
+ &--sm .label {
107
+ font-size: $unnnic-font-size-body-md;
108
+ line-height: $unnnic-font-size-body-md + $unnnic-line-height-md;
109
+ }
123
110
 
124
- &--disabled {
125
- color: $unnnic-color-fg-muted;
126
- }
111
+ &--md .label {
112
+ font-size: $unnnic-font-size-body-gt;
113
+ line-height: $unnnic-font-size-body-gt + $unnnic-line-height-md;
127
114
  }
128
115
  }
129
116
  </style>
@@ -33,35 +33,41 @@ describe('Radio.vue', () => {
33
33
  expect(wrapper.exists()).toBe(true);
34
34
  });
35
35
 
36
- test('renders input with correct attributes', () => {
37
- const input = wrapper.find('input');
38
- expect(input.exists()).toBe(true);
39
- expect(input.attributes('type')).toBe('radio');
40
- expect(input.attributes('disabled')).toBe(undefined);
41
- expect(input.attributes('checked')).toBe(undefined);
36
+ test('renders UnnnicIcon component with correct props', () => {
37
+ const unnnicIcon = wrapper.findComponent(UnnnicIcon);
38
+ expect(unnnicIcon.exists()).toBe(true);
39
+ expect(unnnicIcon.props('icon')).toBe('radio-default');
40
+ expect(unnnicIcon.props('scheme')).toBe('neutral-cleanest');
41
+ expect(unnnicIcon.props('size')).toBe('md');
42
+ });
43
+
44
+ test('applies the correct size class', async () => {
45
+ expect(wrapper.classes()).toContain('unnnic-radio-container--md');
46
+
47
+ await wrapper.setProps({ size: 'sm' });
48
+ expect(wrapper.classes()).toContain('unnnic-radio-container--sm');
42
49
  });
43
50
 
44
51
  test('applies disabled class when disabled prop is true', async () => {
45
52
  await wrapper.setProps({ disabled: true });
46
- expect(wrapper.find('.unnnic-radio__label').classes()).toContain(
47
- 'unnnic-radio__label--disabled',
48
- );
53
+ expect(wrapper.classes()).toContain('disabled');
49
54
  });
50
55
 
51
56
  test('icon changes based on valueName', async () => {
52
57
  await wrapper.setProps({ modelValue: 'option1' });
53
- const input = wrapper.find('input');
54
- expect(input.attributes()).toHaveProperty('checked');
58
+ const unnnicIcon = wrapper.findComponent(UnnnicIcon);
59
+ expect(unnnicIcon.props('icon')).toBe('radio-selected');
55
60
  });
56
61
 
57
62
  test('icon and color change when disabled is true', async () => {
58
63
  await wrapper.setProps({ disabled: true });
59
- const input = wrapper.find('input');
60
- expect(input.attributes()).toHaveProperty('disabled');
64
+ const unnnicIcon = wrapper.findComponent(UnnnicIcon);
65
+ expect(unnnicIcon.props('icon')).toBe('radio-disable');
66
+ expect(unnnicIcon.props('scheme')).toBe('brand-sec');
61
67
  });
62
68
 
63
69
  test('emits update:modelValue with correct value when clicked and not disabled', async () => {
64
- await wrapper.find('input').trigger('change');
70
+ await wrapper.trigger('click');
65
71
  expect(wrapper.emitted('update:modelValue')).toBeTruthy();
66
72
  expect(wrapper.emitted('update:modelValue')[0]).toEqual(['option1']);
67
73
  });