@weni/unnnic-system 3.7.1-alpha.3 → 3.8.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 (249) hide show
  1. package/CHANGELOG.md +10 -1
  2. package/dist/components/Accordion/Accordion.vue.d.ts +1 -1
  3. package/dist/components/Alert/Alert.vue.d.ts +116 -17
  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 +3 -3
  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 +1 -1
  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 +5 -5
  20. package/dist/components/Card/BlankCard.vue.d.ts +1 -1
  21. package/dist/components/Card/Card.vue.d.ts +27 -27
  22. package/dist/components/Card/CardCompany.vue.d.ts +5 -5
  23. package/dist/components/Card/CardData.vue.d.ts +1 -1
  24. package/dist/components/Card/CardStatusesContainer.vue.d.ts +5 -5
  25. package/dist/components/Card/ContentCard.vue.d.ts +3 -3
  26. package/dist/components/Card/DashCard.vue.d.ts +5 -5
  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 +3 -3
  32. package/dist/components/CardImage/CardImage.vue.d.ts +31 -24
  33. package/dist/components/CardInformation/CardInformation.vue.d.ts +5 -5
  34. package/dist/components/CardProject/CardProject.vue.d.ts +3 -3
  35. package/dist/components/Carousel/Carousel.vue.d.ts +7 -7
  36. package/dist/components/Carousel/TagCarousel.vue.d.ts +6 -6
  37. package/dist/components/ChartBar/ChartBar.vue.d.ts +5 -5
  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 +34 -27
  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 +26 -19
  49. package/dist/components/Checkbox/Checkbox.vue.d.ts.map +1 -1
  50. package/dist/components/Comment/Comment.vue.d.ts +1 -1
  51. package/dist/components/DataArea/DataArea.vue.d.ts +2 -2
  52. package/dist/components/DataTable/index.vue.d.ts +1 -1
  53. package/dist/components/DataTable/index.vue.d.ts.map +1 -1
  54. package/dist/components/DateFilter/DateFilter.vue.d.ts +41 -251
  55. package/dist/components/DatePicker/DatePicker.vue.d.ts +4 -4
  56. package/dist/components/Drawer/Drawer.vue.d.ts +4 -4
  57. package/dist/components/Dropdown/Dropdown.vue.d.ts +1 -1
  58. package/dist/components/Dropdown/LanguageSelect.vue.d.ts +3 -3
  59. package/dist/components/Flag.vue.d.ts +2 -2
  60. package/dist/components/FormElement/FormElement.vue.d.ts +28 -51
  61. package/dist/components/FormElement/FormElement.vue.d.ts.map +1 -1
  62. package/dist/components/Icon.vue.d.ts +1 -1
  63. package/dist/components/Icon.vue.d.ts.map +1 -1
  64. package/dist/components/IconLoading/IconLoading.vue.d.ts +1 -1
  65. package/dist/components/ImportCard/ImportCard.vue.d.ts +4 -4
  66. package/dist/components/Input/BaseInput.vue.d.ts +2 -33
  67. package/dist/components/Input/BaseInput.vue.d.ts.map +1 -1
  68. package/dist/components/Input/Input.vue.d.ts +41 -251
  69. package/dist/components/Input/Input.vue.d.ts.map +1 -1
  70. package/dist/components/Input/TextInput.vue.d.ts +25 -85
  71. package/dist/components/Input/TextInput.vue.d.ts.map +1 -1
  72. package/dist/components/InputDatePicker/InputDatePicker.vue.d.ts +47 -257
  73. package/dist/components/InputNext/InputNext.vue.d.ts +5 -5
  74. package/dist/components/Label/Label.vue.d.ts +15 -9
  75. package/dist/components/Label/Label.vue.d.ts.map +1 -1
  76. package/dist/components/Modal/Modal.vue.d.ts +2 -2
  77. package/dist/components/ModalDialog/ModalDialog.vue.d.ts +34 -199
  78. package/dist/components/ModalDialog/ModalDialog.vue.d.ts.map +1 -1
  79. package/dist/components/ModalNext/ModalNext.vue.d.ts +46 -256
  80. package/dist/components/ModalUpload/ModalUpload.vue.d.ts +8 -8
  81. package/dist/components/MoodRating/MoodRating.vue.d.ts +1 -1
  82. package/dist/components/MultiSelect/MultiSelect.vue.d.ts +14 -20
  83. package/dist/components/Pagination/Pagination.vue.d.ts +3 -3
  84. package/dist/components/ProgressBar/ProgressBar.vue.d.ts +1 -1
  85. package/dist/components/Radio/Radio.vue.d.ts +6 -8
  86. package/dist/components/Radio/Radio.vue.d.ts.map +1 -1
  87. package/dist/components/SelectSmart/SelectSmart.vue.d.ts +60 -113
  88. package/dist/components/SelectSmart/SelectSmartMultipleHeader.vue.d.ts +5 -5
  89. package/dist/components/SelectSmart/SelectSmartOption.vue.d.ts +28 -21
  90. package/dist/components/SelectSmart/SelectSmartOption.vue.d.ts.map +1 -1
  91. package/dist/components/SelectTime/index.vue.d.ts +25 -85
  92. package/dist/components/SkeletonLoading/skeletonTheme.vue.d.ts +1 -1
  93. package/dist/components/Slider/Slider.vue.d.ts +2 -2
  94. package/dist/components/StarRating/StarRating.vue.d.ts +1 -1
  95. package/dist/components/Switch/Switch.vue.d.ts +21 -55
  96. package/dist/components/Switch/Switch.vue.d.ts.map +1 -1
  97. package/dist/components/Tab/Tab.vue.d.ts +2 -13
  98. package/dist/components/TableNext/TableBodyCell.vue.d.ts +2 -2
  99. package/dist/components/TableNext/TablePagination.vue.d.ts +3 -3
  100. package/dist/components/TabsExpanded/TabsExpanded.vue.d.ts +1 -1
  101. package/dist/components/Tag/BrandTag.vue.d.ts +1 -1
  102. package/dist/components/Tag/DefaultTag.vue.d.ts +1 -1
  103. package/dist/components/Tag/IndicatorTag.vue.d.ts +2 -2
  104. package/dist/components/Tag/Tag.vue.d.ts +5 -5
  105. package/dist/components/TextArea/TextArea.vue.d.ts +30 -66
  106. package/dist/components/TextArea/TextArea.vue.d.ts.map +1 -1
  107. package/dist/components/ToolTip/ToolTip.vue.d.ts +1 -1
  108. package/dist/components/Tour/Tour.vue.d.ts +3 -3
  109. package/dist/components/Tour/TourPopover.vue.d.ts +3 -3
  110. package/dist/components/UploadArea/UploadArea.vue.d.ts +4 -4
  111. package/dist/components/index.d.ts +1367 -3846
  112. package/dist/components/index.d.ts.map +1 -1
  113. package/dist/components/ui/popover/PopoverContent.vue.d.ts +1 -1
  114. package/dist/components/ui/popover/PopoverContent.vue.d.ts.map +1 -1
  115. package/dist/{es-4bdcf86e.mjs → es-85030529.mjs} +1 -1
  116. package/dist/{index-0d6fa367.mjs → index-43dacc8a.mjs} +14620 -15589
  117. package/dist/locales/en.json.d.ts +1 -2
  118. package/dist/locales/es.json.d.ts +1 -2
  119. package/dist/locales/pt_br.json.d.ts +1 -2
  120. package/dist/{pt-br-51af7f2a.mjs → pt-br-191d9782.mjs} +1 -1
  121. package/dist/style.css +1 -1
  122. package/dist/unnnic.mjs +176 -193
  123. package/dist/unnnic.umd.js +39 -43
  124. package/dist/utils/call.d.ts +1 -2
  125. package/dist/utils/call.d.ts.map +1 -1
  126. package/package.json +2 -2
  127. package/src/assets/scss/tailwind.scss +0 -8
  128. package/src/components/Alert/Alert.vue +135 -26
  129. package/src/components/Alert/AlertBanner.vue +182 -0
  130. package/src/components/Alert/AlertCaller.vue +49 -0
  131. package/src/components/Alert/Version1dot1.vue +36 -0
  132. package/src/components/Alert/__tests__/Alert.spec.js +45 -2
  133. package/src/components/Alert/__tests__/AlertBanner.spec.js +89 -0
  134. package/src/components/Alert/__tests__/AlertCaller.spec.js +98 -0
  135. package/src/components/Alert/__tests__/Version1dot1.spec.js +21 -0
  136. package/src/components/Alert/__tests__/__snapshots__/Alert.spec.js.snap +7 -11
  137. package/src/components/Alert/__tests__/__snapshots__/Version1dot1.spec.js.snap +2 -2
  138. package/src/components/Button/Button.vue +117 -68
  139. package/src/components/Button/types.ts +1 -0
  140. package/src/components/Checkbox/Checkbox.vue +64 -98
  141. package/src/components/Checkbox/__tests__/Checkbox.spec.js +21 -6
  142. package/src/components/FormElement/FormElement.vue +93 -63
  143. package/src/components/Icon.vue +0 -2
  144. package/src/components/Input/BaseInput.vue +14 -33
  145. package/src/components/Input/Input.scss +21 -20
  146. package/src/components/Input/Input.vue +56 -79
  147. package/src/components/Input/TextInput.vue +68 -80
  148. package/src/components/Input/__test__/Input.spec.js +33 -13
  149. package/src/components/Input/__test__/TextInput.spec.js +8 -6
  150. package/src/components/Input/__test__/__snapshots__/Input.spec.js.snap +5 -14
  151. package/src/components/Input/__test__/__snapshots__/TextInput.spec.js.snap +1 -1
  152. package/src/components/Label/Label.vue +21 -52
  153. package/src/components/Label/__tests__/Label.spec.js +1 -1
  154. package/src/components/Label/__tests__/__snapshots__/Label.spec.js.snap +1 -1
  155. package/src/components/ModalDialog/ModalDialog.vue +146 -60
  156. package/src/components/ModalDialog/__tests__/__snapshots__/ModalDialog.spec.js.snap +22 -1
  157. package/src/components/Radio/Radio.vue +67 -80
  158. package/src/components/Radio/__test__/Radio.spec.js +20 -14
  159. package/src/components/Radio/__test__/__snapshots__/Radio.spec.js.snap +3 -3
  160. package/src/components/SelectSmart/SelectSmart.vue +3 -4
  161. package/src/components/Switch/Switch.vue +96 -123
  162. package/src/components/Switch/__tests__/Switch.spec.js +75 -8
  163. package/src/components/Switch/__tests__/__snapshots__/Switch.spec.js.snap +6 -5
  164. package/src/components/Tab/Tab.vue +23 -37
  165. package/src/components/Tab/__test__/__snapshots__/Tab.spec.js.snap +1 -1
  166. package/src/components/TableNext/__test__/__snapshots__/TableNext.spec.js.snap +2 -2
  167. package/src/components/TableNext/__test__/__snapshots__/TablePagination.spec.js.snap +2 -2
  168. package/src/components/TextArea/TextArea.vue +11 -34
  169. package/src/components/TextArea/__test__/__snapshots__/TextArea.spec.js.snap +3 -11
  170. package/src/components/index.ts +11 -48
  171. package/src/locales/en.json +1 -2
  172. package/src/locales/es.json +1 -2
  173. package/src/locales/pt_br.json +1 -2
  174. package/src/stories/Alert.stories.js +67 -6
  175. package/src/stories/Button.stories.js +39 -29
  176. package/src/stories/Checkbox.stories.js +4 -11
  177. package/src/stories/Input.stories.js +76 -71
  178. package/src/stories/Label.stories.js +0 -7
  179. package/src/stories/ModalDialog.mdx +0 -3
  180. package/src/stories/ModalDialog.stories.js +1 -1
  181. package/src/stories/Switch.stories.js +5 -10
  182. package/src/stories/Tab.stories.js +4 -11
  183. package/src/stories/TextArea.stories.js +2 -13
  184. package/src/types/scheme-colors.d.ts +0 -1
  185. package/src/utils/call.js +18 -46
  186. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts +0 -28
  187. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts.map +0 -1
  188. package/dist/components/Toast/Toast.vue.d.ts +0 -16
  189. package/dist/components/Toast/Toast.vue.d.ts.map +0 -1
  190. package/dist/components/Toast/ToastManager.d.ts +0 -14
  191. package/dist/components/Toast/ToastManager.d.ts.map +0 -1
  192. package/dist/components/Toast/types.d.ts +0 -35
  193. package/dist/components/Toast/types.d.ts.map +0 -1
  194. package/dist/components/ui/dialog/Dialog.vue.d.ts +0 -23
  195. package/dist/components/ui/dialog/Dialog.vue.d.ts.map +0 -1
  196. package/dist/components/ui/dialog/DialogClose.vue.d.ts +0 -19
  197. package/dist/components/ui/dialog/DialogClose.vue.d.ts.map +0 -1
  198. package/dist/components/ui/dialog/DialogContent.vue.d.ts +0 -40
  199. package/dist/components/ui/dialog/DialogContent.vue.d.ts.map +0 -1
  200. package/dist/components/ui/dialog/DialogFooter.vue.d.ts +0 -25
  201. package/dist/components/ui/dialog/DialogFooter.vue.d.ts.map +0 -1
  202. package/dist/components/ui/dialog/DialogHeader.vue.d.ts +0 -29
  203. package/dist/components/ui/dialog/DialogHeader.vue.d.ts.map +0 -1
  204. package/dist/components/ui/dialog/DialogTitle.vue.d.ts +0 -23
  205. package/dist/components/ui/dialog/DialogTitle.vue.d.ts.map +0 -1
  206. package/dist/components/ui/dialog/DialogTrigger.vue.d.ts +0 -19
  207. package/dist/components/ui/dialog/DialogTrigger.vue.d.ts.map +0 -1
  208. package/dist/components/ui/dialog/index.d.ts +0 -8
  209. package/dist/components/ui/dialog/index.d.ts.map +0 -1
  210. package/src/assets/icons/checkbox-checked-disabled.svg +0 -3
  211. package/src/assets/icons/checkbox-checked.svg +0 -3
  212. package/src/assets/icons/checkbox-less-disabled.svg +0 -3
  213. package/src/assets/icons/checkbox-less.svg +0 -3
  214. package/src/assets/icons/radio-checked.svg +0 -3
  215. package/src/assets/icons/switch-checked-disabled.svg +0 -3
  216. package/src/assets/icons/switch-checked.svg +0 -3
  217. package/src/components/Alert/SIMPLE_MIGRATION_GUIDE.md +0 -152
  218. package/src/components/CheckboxGroup/CheckboxGroup.vue +0 -96
  219. package/src/components/Popover/__tests__/Popover.spec.js +0 -147
  220. package/src/components/Popover/__tests__/__snapshots__/Popover.spec.js.snap +0 -8
  221. package/src/components/Popover/index.vue +0 -146
  222. package/src/components/RadioGroup/RadioGroup.vue +0 -142
  223. package/src/components/Select/SelectOption.vue +0 -65
  224. package/src/components/Select/__tests__/Select.spec.js +0 -412
  225. package/src/components/Select/__tests__/SelectItem.spec.js +0 -330
  226. package/src/components/Select/__tests__/SelectOption.spec.js +0 -174
  227. package/src/components/Select/__tests__/__snapshots__/Select.spec.js.snap +0 -97
  228. package/src/components/Select/__tests__/__snapshots__/SelectItem.spec.js.snap +0 -15
  229. package/src/components/Select/__tests__/__snapshots__/SelectOption.spec.js.snap +0 -25
  230. package/src/components/Select/index.vue +0 -245
  231. package/src/components/Toast/Toast.vue +0 -246
  232. package/src/components/Toast/ToastManager.ts +0 -110
  233. package/src/components/Toast/__tests__/Toast.spec.js +0 -284
  234. package/src/components/Toast/__tests__/ToastManager.spec.js +0 -294
  235. package/src/components/Toast/types.ts +0 -57
  236. package/src/components/ui/dialog/Dialog.vue +0 -15
  237. package/src/components/ui/dialog/DialogClose.vue +0 -25
  238. package/src/components/ui/dialog/DialogContent.vue +0 -114
  239. package/src/components/ui/dialog/DialogFooter.vue +0 -46
  240. package/src/components/ui/dialog/DialogHeader.vue +0 -78
  241. package/src/components/ui/dialog/DialogTitle.vue +0 -34
  242. package/src/components/ui/dialog/DialogTrigger.vue +0 -12
  243. package/src/components/ui/dialog/index.ts +0 -7
  244. package/src/stories/CheckboxGroup.stories.js +0 -105
  245. package/src/stories/Dialog.stories.js +0 -832
  246. package/src/stories/RadioGroup.stories.js +0 -144
  247. package/src/stories/Select.stories.js +0 -158
  248. package/src/stories/Toast.mdx +0 -123
  249. package/src/stories/Toast.stories.js +0 -126
@@ -1,56 +1,51 @@
1
1
  <template>
2
- <UnnnicFormElement
3
- :label="label || $slots.label"
4
- :size="size"
5
- :disabled="disabled"
6
- :message="message"
7
- :tooltip="tooltip"
8
- :error="computedError"
9
- :class="['unnnic-form', size]"
10
- data-testid="form-element"
11
- >
2
+ <div :class="['unnnic-form', size]">
3
+ <p
4
+ v-if="hasLabelSlot"
5
+ class="unnnic-form__label"
6
+ >
7
+ <slot name="label" />
8
+ </p>
9
+
10
+ <p
11
+ v-else-if="label"
12
+ class="unnnic-form__label"
13
+ >
14
+ {{ fullySanitize(label) }}
15
+ </p>
16
+
12
17
  <TextInput
13
18
  v-bind="$attrs"
14
19
  v-model="val"
15
20
  class="unnnic-form-input"
16
- :forceActiveStatus="forceActiveStatus"
17
21
  :placeholder="placeholder"
18
22
  :iconLeft="iconLeft"
19
23
  :iconRight="iconRight"
20
- :type="errors.length > 0 && !disabled ? 'error' : type"
24
+ :type="type"
21
25
  :iconLeftClickable="iconLeftClickable"
22
26
  :iconRightClickable="iconRightClickable"
23
27
  :hasCloudyColor="hasCloudyColor"
24
28
  :size="size"
25
29
  :mask="mask"
26
30
  :nativeType="nativeType"
27
- :maxlength="maxlength"
28
- :disabled="disabled"
29
- :readonly="readonly"
30
- :showClear="showClear"
31
- @clear="$emit('clear')"
32
31
  />
33
32
 
34
- <template
35
- v-if="maxlength && showMaxlengthCounter"
36
- #rightMessage
33
+ <p
34
+ v-if="message"
35
+ class="unnnic-form__message"
37
36
  >
38
- {{ (val || '').length }} / {{ maxlength }}
39
- </template>
40
- </UnnnicFormElement>
37
+ {{ fullySanitize(message) }}
38
+ </p>
39
+ </div>
41
40
  </template>
42
41
 
43
42
  <script>
44
43
  import { fullySanitize } from '../../utils/sanitize';
45
44
  import TextInput from './TextInput.vue';
46
- import UnnnicFormElement from '../FormElement/FormElement.vue';
47
45
 
48
46
  export default {
49
47
  name: 'UnnnicInput',
50
- components: {
51
- TextInput,
52
- UnnnicFormElement,
53
- },
48
+ components: { TextInput },
54
49
  props: {
55
50
  placeholder: {
56
51
  type: String,
@@ -73,23 +68,19 @@ export default {
73
68
  },
74
69
  message: {
75
70
  type: String,
76
- default: '',
77
- },
78
- errors: {
79
- type: [String, Array],
80
- default: '',
71
+ default: null,
81
72
  },
82
73
  label: {
83
74
  type: String,
84
- default: '',
75
+ default: null,
85
76
  },
86
77
  iconLeft: {
87
78
  type: String,
88
- default: '',
79
+ default: null,
89
80
  },
90
81
  iconRight: {
91
82
  type: String,
92
- default: '',
83
+ default: null,
93
84
  },
94
85
  allowTogglePassword: {
95
86
  type: Boolean,
@@ -97,11 +88,11 @@ export default {
97
88
  },
98
89
  iconLeftClickable: {
99
90
  type: Boolean,
100
- default: false,
91
+ default: null,
101
92
  },
102
93
  iconRightClickable: {
103
94
  type: Boolean,
104
- default: false,
95
+ default: null,
105
96
  },
106
97
  hasCloudyColor: {
107
98
  type: Boolean,
@@ -115,50 +106,16 @@ export default {
115
106
  type: [String, Array],
116
107
  default: '',
117
108
  },
118
- tooltip: {
119
- type: String,
120
- default: '',
121
- },
122
- maxlength: {
123
- type: [Number, null],
124
- default: null,
125
- },
126
- showMaxlengthCounter: {
127
- type: Boolean,
128
- default: false,
129
- },
130
- disabled: {
131
- type: Boolean,
132
- default: false,
133
- },
134
- readonly: {
135
- type: Boolean,
136
- default: false,
137
- },
138
- forceActiveStatus: {
139
- type: Boolean,
140
- default: false,
141
- },
142
- showClear: {
143
- type: Boolean,
144
- default: false,
145
- },
146
109
  },
147
-
148
- emits: ['update:modelValue', 'clear'],
149
-
110
+ emits: ['update:modelValue'],
150
111
  data() {
151
112
  return {
152
113
  val: this.modelValue,
153
114
  };
154
115
  },
155
116
  computed: {
156
- computedError() {
157
- if (Array.isArray(this.errors)) {
158
- return this.errors.join(', ') || this.type === 'error';
159
- }
160
-
161
- return this.errors || this.type === 'error';
117
+ hasLabelSlot() {
118
+ return !!this.$slots.label;
162
119
  },
163
120
  },
164
121
  watch: {
@@ -179,9 +136,29 @@ export default {
179
136
  </script>
180
137
 
181
138
  <style lang="scss" scoped>
182
- * {
183
- margin: 0;
184
- padding: 0;
185
- box-sizing: border-box;
139
+ @use '@/assets/scss/unnnic' as *;
140
+
141
+ .unnnic-form {
142
+ font-family: $unnnic-font-family-secondary;
143
+ position: relative;
144
+
145
+ &__message {
146
+ font-size: $unnnic-font-size-body-md;
147
+ margin: $unnnic-spacing-stack-nano 0;
148
+ color: $unnnic-color-feedback-red;
149
+ }
150
+
151
+ &__label {
152
+ font-weight: $unnnic-font-weight-regular;
153
+ line-height: $unnnic-font-size-body-gt + $unnnic-line-height-medium;
154
+ font-size: $unnnic-font-size-body-gt;
155
+ color: $unnnic-color-neutral-cloudy;
156
+ margin: $unnnic-spacing-stack-xs 0;
157
+ }
158
+
159
+ &.sm &__label {
160
+ font-size: $unnnic-font-size-body-md;
161
+ line-height: $unnnic-font-size-body-md + $unnnic-line-height-medium;
162
+ }
186
163
  }
187
164
  </style>
@@ -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,36 +92,24 @@ 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,
106
102
  },
103
+ hasCloudyColor: {
104
+ type: Boolean,
105
+ default: null,
106
+ },
107
107
  size: {
108
108
  type: String,
109
109
  default: 'md',
110
110
  },
111
- maxlength: {
112
- type: Number,
113
- default: null,
114
- },
115
- disabled: {
116
- type: Boolean,
117
- default: false,
118
- },
119
- readonly: {
120
- type: Boolean,
121
- default: false,
122
- },
123
- forceActiveStatus: {
124
- type: Boolean,
125
- default: false,
126
- },
127
- showClear: {
128
- type: Boolean,
129
- default: false,
130
- },
131
111
  },
132
- emits: ['icon-left-click', 'icon-right-click', 'clear'],
112
+ emits: ['icon-left-click', 'icon-right-click'],
133
113
  data() {
134
114
  return {
135
115
  isFocused: false,
@@ -138,7 +118,7 @@ export default {
138
118
  },
139
119
  computed: {
140
120
  isDisabled() {
141
- return this.$attrs.disabled || this.disabled;
121
+ return this.$attrs.disabled;
142
122
  },
143
123
 
144
124
  iconRightSvg() {
@@ -150,15 +130,23 @@ export default {
150
130
  },
151
131
 
152
132
  iconScheme() {
133
+ if (this.type === 'error') {
134
+ return 'aux-red-500';
135
+ }
136
+
153
137
  if (this.isDisabled) {
154
- return 'fg-muted';
138
+ return 'neutral-cleanest';
139
+ }
140
+
141
+ if (this.modelValue || this.isFocused) {
142
+ return 'neutral-dark';
155
143
  }
156
144
 
157
- if (this.forceActiveStatus) {
158
- return 'color-gray-700';
145
+ if (this.hasCloudyColor) {
146
+ return 'neutral-cloudy';
159
147
  }
160
148
 
161
- return 'fg-base';
149
+ return 'neutral-cloudy';
162
150
  },
163
151
 
164
152
  attributes() {
@@ -183,10 +171,6 @@ export default {
183
171
  if (this.iconLeftClickable) this.$emit('icon-left-click');
184
172
  },
185
173
 
186
- onClearClick() {
187
- this.$emit('clear');
188
- },
189
-
190
174
  onIconRightClick() {
191
175
  if (this.attributes.disabled) return;
192
176
  if (this.allowTogglePassword) this.showPassword = !this.showPassword;
@@ -199,38 +183,42 @@ export default {
199
183
  <style lang="scss" scoped>
200
184
  @use '@/assets/scss/unnnic' as *;
201
185
 
202
- .text-input {
203
- position: relative;
204
- }
205
-
206
186
  .icon {
207
- &-left {
208
- position: absolute;
209
- top: 50%;
210
- transform: translateY(-50%);
211
- left: $unnnic-space-4;
212
-
187
+ &-left,
188
+ &-right {
213
189
  &:not(.clickable) {
214
190
  pointer-events: none;
215
191
  }
216
192
  }
217
193
 
218
- &-right-container {
194
+ &-left {
219
195
  position: absolute;
220
- top: 50%;
221
- transform: translateY(-50%);
222
- right: $unnnic-space-4;
196
+ top: $unnnic-spacing-ant + 0.1875 * $unnnic-font-size;
197
+ left: $unnnic-inline-sm - $unnnic-border-width-thinner;
198
+ }
223
199
 
224
- display: flex;
225
- align-items: center;
226
- 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;
227
208
 
228
- .icon-clear {
229
- cursor: pointer;
230
- }
231
- .icon-right:not(.clickable) {
232
- pointer-events: none;
209
+ &.size--sm {
210
+ .icon-left,
211
+ .icon-right {
212
+ top: $unnnic-spacing-xs + 0.125 * $unnnic-font-size;
233
213
  }
234
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
+ }
235
223
  }
236
224
  </style>
@@ -40,21 +40,29 @@ describe('Input.vue', () => {
40
40
  expect(wrapper.exists()).toBe(true);
41
41
  });
42
42
 
43
- test('renders form element correctly', async () => {
44
- const formElement = wrapper.findComponent('[data-testid="form-element"]');
45
- expect(formElement.exists()).toBe(true);
46
- expect(formElement.props('label')).toBe('Sample Label');
47
- expect(formElement.props('size')).toBe('md');
48
- expect(formElement.props('message')).toBe('Error message');
49
- expect(formElement.props('disabled')).toBe(false);
50
- expect(formElement.props('tooltip')).toBe('');
51
- expect(formElement.props('error')).toBe(false);
43
+ test('renders label correctly', async () => {
44
+ const label = wrapper.find('.unnnic-form__label');
45
+ expect(label.exists()).toBe(true);
46
+ expect(label.text()).toBe('Sample Label');
47
+
48
+ await wrapper.setProps({ label: null });
49
+ expect(wrapper.find('.unnnic-form__label').exists()).toBe(false);
50
+ });
51
+
52
+ test('renders message correctly', async () => {
53
+ const message = wrapper.find('.unnnic-form__message');
54
+ expect(message.exists()).toBe(true);
55
+ expect(message.text()).toBe('Error message');
56
+
57
+ await wrapper.setProps({ message: null });
58
+ expect(wrapper.find('.unnnic-form__message').exists()).toBe(false);
52
59
  });
53
60
 
54
- test('renders maxlength counter correctly', async () => {
55
- expect(wrapper.text()).not.toContain('0 / 10');
56
- await wrapper.setProps({ maxlength: 10, showMaxlengthCounter: true });
57
- expect(wrapper.text()).toContain('0 / 10');
61
+ test('applies the correct size class', async () => {
62
+ expect(wrapper.classes()).toContain('md');
63
+
64
+ await wrapper.setProps({ size: 'sm' });
65
+ expect(wrapper.classes()).toContain('sm');
58
66
  });
59
67
 
60
68
  test('renders TextInput component', () => {
@@ -88,6 +96,18 @@ describe('Input.vue', () => {
88
96
  expect(wrapper.vm.val).toBe('new value');
89
97
  });
90
98
 
99
+ test('hasLabelSlot computed property works correctly', async () => {
100
+ expect(wrapper.vm.hasLabelSlot).toBe(false);
101
+
102
+ wrapper = mount(Input, {
103
+ slots: {
104
+ label: '<span>Custom Label</span>',
105
+ },
106
+ });
107
+
108
+ expect(wrapper.vm.hasLabelSlot).toBe(true);
109
+ });
110
+
91
111
  test('correctly mounts with initial modelValue', async () => {
92
112
  wrapper = mount(Input, {
93
113
  props: {
@@ -19,6 +19,7 @@ describe('TextInput.vue', () => {
19
19
  iconLeftClickable: true,
20
20
  iconRightClickable: true,
21
21
  allowTogglePassword: false,
22
+ hasCloudyColor: false,
22
23
  size: 'md',
23
24
  },
24
25
  global: {
@@ -73,21 +74,22 @@ describe('TextInput.vue', () => {
73
74
 
74
75
  test('computes the correct iconScheme based on various states', async () => {
75
76
  await wrapper.setProps({ type: 'error' });
76
- expect(wrapper.vm.iconScheme).toBe('fg-base');
77
+ expect(wrapper.vm.iconScheme).toBe('aux-red-500');
77
78
 
78
79
  await wrapper.setProps({ type: 'normal' });
79
80
  await wrapper.setData({ isDisabled: true });
80
- expect(wrapper.vm.iconScheme).toBe('fg-base');
81
+ expect(wrapper.vm.iconScheme).toBe('neutral-cloudy');
81
82
 
82
83
  await wrapper.setData({ isDisabled: false });
83
84
  await wrapper.setProps({ modelValue: 'text' });
84
- expect(wrapper.vm.iconScheme).toBe('fg-base');
85
+ expect(wrapper.vm.iconScheme).toBe('neutral-dark');
85
86
 
86
87
  await wrapper.setData({ isFocused: true });
87
- expect(wrapper.vm.iconScheme).toBe('fg-base');
88
+ expect(wrapper.vm.iconScheme).toBe('neutral-dark');
88
89
 
89
- await wrapper.setProps({ disabled: true });
90
- expect(wrapper.vm.iconScheme).toBe('fg-muted');
90
+ await wrapper.setProps({ hasCloudyColor: true, modelValue: '' });
91
+ await wrapper.setData({ isFocused: false });
92
+ expect(wrapper.vm.iconScheme).toBe('neutral-cloudy');
91
93
  });
92
94
 
93
95
  test('attributes computed property returns combined attributes and props', () => {
@@ -1,18 +1,9 @@
1
1
  // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
2
 
3
3
  exports[`Input.vue > matches the snapshot 1`] = `
4
- "<section data-v-9f8d6c86="" data-v-d890ad85="" class="unnnic-form-element unnnic-form md" data-testid="form-element">
5
- <section data-v-7f222291="" data-v-9f8d6c86="" class="unnnic-label unnnic-form-element__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" hascloudycolor="false" 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" hascloudycolor="false" placeholder="Enter text" iconleft="search" iconright="clear" iconleftclickable="true" iconrightclickable="true" type="text" value=""><span data-v-26446d8e="" data-v-a0d36167="" class="unnnic-icon material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--ant unnnic-icon__size--ant unnnic--clickable icon-left clickable" data-testid="material-icon" translate="no">search</span><span data-v-26446d8e="" data-v-a0d36167="" class="unnnic-icon material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--ant unnnic-icon__size--ant unnnic--clickable icon-right clickable" data-testid="material-icon" translate="no">clear</span></div>
10
- <section data-v-9f8d6c86="" class="unnnic-form-element__hints-container">
11
- <section data-v-9f8d6c86="" class="unnnic-form-element__message-container">
12
- <p data-v-9f8d6c86="" class="unnnic-form-element__message">Error message</p>
13
- <!--v-if-->
14
- </section>
15
- <!--v-if-->
16
- </section>
17
- </section>"
4
+ "<div data-v-d890ad85="" class="unnnic-form md">
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="unnnic-icon material-symbols-rounded unnnic-icon-scheme--neutral-cloudy unnnic-icon-size--sm 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="unnnic-icon material-symbols-rounded unnnic-icon-scheme--neutral-cloudy unnnic-icon-size--sm 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>
8
+ </div>"
18
9
  `;
@@ -1,3 +1,3 @@
1
1
  // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
2
 
3
- exports[`TextInput.vue > matches the snapshot 1`] = `"<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" 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="unnnic-icon material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--ant unnnic-icon__size--ant unnnic--clickable icon-left clickable" data-testid="material-icon" translate="no">search</span><span data-v-26446d8e="" data-v-a0d36167="" class="unnnic-icon material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--ant unnnic-icon__size--ant unnnic--clickable icon-right clickable" data-testid="material-icon" translate="no">clear</span></div>"`;
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="unnnic-icon material-symbols-rounded unnnic-icon-scheme--neutral-cloudy unnnic-icon-size--sm 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="unnnic-icon material-symbols-rounded unnnic-icon-scheme--neutral-cloudy unnnic-icon-size--sm 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>"`;