@weni/unnnic-system 3.9.3-alpha.0 → 3.9.4

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 (256) hide show
  1. package/CHANGELOG.md +12 -0
  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 +414 -11
  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 +416 -13
  36. package/dist/components/Carousel/TagCarousel.vue.d.ts +415 -12
  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 +446 -21
  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 +46 -256
  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 +6 -6
  78. package/dist/components/ModalNext/ModalNext.vue.d.ts +46 -256
  79. package/dist/components/ModalUpload/ModalUpload.vue.d.ts +9 -9
  80. package/dist/components/MoodRating/MoodRating.vue.d.ts +1 -1
  81. package/dist/components/MultiSelect/MultiSelect.vue.d.ts +14 -26
  82. package/dist/components/Pagination/Pagination.vue.d.ts +3 -3
  83. package/dist/components/ProgressBar/ProgressBar.vue.d.ts +1 -1
  84. package/dist/components/Radio/Radio.vue.d.ts +6 -10
  85. package/dist/components/Radio/Radio.vue.d.ts.map +1 -1
  86. package/dist/components/SelectSmart/SelectSmart.vue.d.ts +470 -120
  87. package/dist/components/SelectSmart/SelectSmartMultipleHeader.vue.d.ts +414 -11
  88. package/dist/components/SelectSmart/SelectSmartOption.vue.d.ts +28 -21
  89. package/dist/components/SelectSmart/SelectSmartOption.vue.d.ts.map +1 -1
  90. package/dist/components/SelectTime/index.vue.d.ts +25 -85
  91. package/dist/components/SkeletonLoading/skeletonTheme.vue.d.ts +1 -1
  92. package/dist/components/Slider/Slider.vue.d.ts +2 -2
  93. package/dist/components/StarRating/StarRating.vue.d.ts +1 -1
  94. package/dist/components/Switch/Switch.vue.d.ts +21 -55
  95. package/dist/components/Switch/Switch.vue.d.ts.map +1 -1
  96. package/dist/components/Tab/Tab.vue.d.ts +2 -13
  97. package/dist/components/TableNext/TableBodyCell.vue.d.ts +2 -2
  98. package/dist/components/TableNext/TablePagination.vue.d.ts +3 -3
  99. package/dist/components/TabsExpanded/TabsExpanded.vue.d.ts +1 -1
  100. package/dist/components/Tag/BrandTag.vue.d.ts +51 -0
  101. package/dist/components/Tag/BrandTag.vue.d.ts.map +1 -0
  102. package/dist/components/Tag/DefaultTag.vue.d.ts +83 -4
  103. package/dist/components/Tag/DefaultTag.vue.d.ts.map +1 -1
  104. package/dist/components/Tag/IndicatorTag.vue.d.ts +151 -0
  105. package/dist/components/Tag/IndicatorTag.vue.d.ts.map +1 -0
  106. package/dist/components/Tag/Tag.vue.d.ts +414 -12
  107. package/dist/components/Tag/Tag.vue.d.ts.map +1 -1
  108. package/dist/components/Tag/TagNext.vue.d.ts +24 -0
  109. package/dist/components/Tag/TagNext.vue.d.ts.map +1 -0
  110. package/dist/components/TextArea/TextArea.vue.d.ts +33 -78
  111. package/dist/components/TextArea/TextArea.vue.d.ts.map +1 -1
  112. package/dist/components/ToolTip/ToolTip.vue.d.ts +1 -1
  113. package/dist/components/Tour/Tour.vue.d.ts +3 -3
  114. package/dist/components/Tour/TourPopover.vue.d.ts +3 -3
  115. package/dist/components/UploadArea/UploadArea.vue.d.ts +4 -4
  116. package/dist/components/index.d.ts +7710 -6271
  117. package/dist/components/index.d.ts.map +1 -1
  118. package/dist/components/ui/popover/PopoverContent.vue.d.ts +1 -1
  119. package/dist/components/ui/popover/PopoverContent.vue.d.ts.map +1 -1
  120. package/dist/{es-61b41785.mjs → es-8146fb1b.mjs} +1 -1
  121. package/dist/{index-10160248.mjs → index-724ed422.mjs} +8813 -9353
  122. package/dist/locales/en.json.d.ts +1 -2
  123. package/dist/locales/es.json.d.ts +1 -2
  124. package/dist/locales/pt_br.json.d.ts +1 -2
  125. package/dist/{pt-br-31a68683.mjs → pt-br-af294ec9.mjs} +1 -1
  126. package/dist/style.css +1 -1
  127. package/dist/unnnic.mjs +151 -158
  128. package/dist/unnnic.umd.js +36 -35
  129. package/dist/utils/call.d.ts +1 -2
  130. package/dist/utils/call.d.ts.map +1 -1
  131. package/package.json +2 -2
  132. package/src/assets/scss/radii.scss +1 -1
  133. package/src/assets/scss/scheme-colors.scss +223 -309
  134. package/src/assets/tokens/radii.json +1 -1
  135. package/src/components/Alert/Alert.vue +135 -26
  136. package/src/components/Alert/AlertBanner.vue +182 -0
  137. package/src/components/Alert/AlertCaller.vue +49 -0
  138. package/src/components/Alert/Version1dot1.vue +36 -0
  139. package/src/components/Alert/__tests__/Alert.spec.js +45 -2
  140. package/src/components/Alert/__tests__/AlertBanner.spec.js +89 -0
  141. package/src/components/Alert/__tests__/AlertCaller.spec.js +98 -0
  142. package/src/components/Alert/__tests__/Version1dot1.spec.js +21 -0
  143. package/src/components/Alert/__tests__/__snapshots__/Alert.spec.js.snap +7 -11
  144. package/src/components/Alert/__tests__/__snapshots__/AlertBanner.spec.js.snap +2 -2
  145. package/src/components/Alert/__tests__/__snapshots__/Version1dot1.spec.js.snap +1 -1
  146. package/src/components/Button/Button.vue +117 -67
  147. package/src/components/Button/types.ts +1 -0
  148. package/src/components/ChatsContact/ChatsContact.vue +6 -10
  149. package/src/components/Checkbox/Checkbox.vue +65 -117
  150. package/src/components/Checkbox/__tests__/Checkbox.spec.js +21 -6
  151. package/src/components/FormElement/FormElement.vue +93 -63
  152. package/src/components/Icon.vue +0 -2
  153. package/src/components/Input/BaseInput.vue +14 -33
  154. package/src/components/Input/Input.scss +22 -22
  155. package/src/components/Input/Input.vue +56 -79
  156. package/src/components/Input/TextInput.vue +65 -81
  157. package/src/components/Input/__test__/Input.spec.js +33 -13
  158. package/src/components/Input/__test__/TextInput.spec.js +8 -6
  159. package/src/components/Input/__test__/__snapshots__/Input.spec.js.snap +4 -17
  160. package/src/components/Input/__test__/__snapshots__/TextInput.spec.js.snap +1 -7
  161. package/src/components/Label/Label.vue +21 -52
  162. package/src/components/Label/__tests__/Label.spec.js +1 -1
  163. package/src/components/Label/__tests__/__snapshots__/Label.spec.js.snap +1 -1
  164. package/src/components/Radio/Radio.vue +66 -118
  165. package/src/components/Radio/__test__/Radio.spec.js +20 -14
  166. package/src/components/Radio/__test__/__snapshots__/Radio.spec.js.snap +3 -4
  167. package/src/components/SelectSmart/SelectSmart.vue +3 -4
  168. package/src/components/Switch/Switch.vue +91 -132
  169. package/src/components/Switch/__tests__/Switch.spec.js +75 -8
  170. package/src/components/Switch/__tests__/__snapshots__/Switch.spec.js.snap +6 -5
  171. package/src/components/Tab/Tab.vue +23 -37
  172. package/src/components/Tab/__test__/__snapshots__/Tab.spec.js.snap +1 -1
  173. package/src/components/TableNext/__test__/__snapshots__/TableNext.spec.js.snap +2 -2
  174. package/src/components/TableNext/__test__/__snapshots__/TablePagination.spec.js.snap +2 -2
  175. package/src/components/Tag/BrandTag.vue +96 -0
  176. package/src/components/Tag/DefaultTag.vue +107 -51
  177. package/src/components/Tag/IndicatorTag.vue +107 -0
  178. package/src/components/Tag/Tag.vue +79 -32
  179. package/src/components/Tag/TagNext.vue +60 -0
  180. package/src/components/TextArea/TextArea.vue +12 -41
  181. package/src/components/TextArea/__test__/__snapshots__/TextArea.spec.js.snap +3 -11
  182. package/src/components/index.ts +18 -33
  183. package/src/locales/en.json +1 -2
  184. package/src/locales/es.json +1 -2
  185. package/src/locales/pt_br.json +1 -2
  186. package/src/stories/Alert.stories.js +67 -6
  187. package/src/stories/Button.stories.js +39 -29
  188. package/src/stories/Checkbox.stories.js +4 -11
  189. package/src/stories/Input.stories.js +76 -71
  190. package/src/stories/Label.stories.js +0 -7
  191. package/src/stories/Radio.stories.js +1 -28
  192. package/src/stories/Switch.stories.js +5 -10
  193. package/src/stories/Tab.stories.js +4 -11
  194. package/src/stories/Tag.stories.js +43 -24
  195. package/src/stories/TextArea.stories.js +2 -14
  196. package/src/types/scheme-colors.d.ts +0 -1
  197. package/src/utils/call.js +18 -46
  198. package/dist/assets/tokens/colors.json.d.ts +0 -376
  199. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts +0 -28
  200. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts.map +0 -1
  201. package/dist/components/PageHeader/PageHeader.vue.d.ts +0 -28
  202. package/dist/components/PageHeader/PageHeader.vue.d.ts.map +0 -1
  203. package/dist/components/PageHeader/index.d.ts +0 -3
  204. package/dist/components/PageHeader/index.d.ts.map +0 -1
  205. package/dist/components/PageHeader/types.d.ts +0 -9
  206. package/dist/components/PageHeader/types.d.ts.map +0 -1
  207. package/dist/components/Tag/types.d.ts +0 -18
  208. package/dist/components/Tag/types.d.ts.map +0 -1
  209. package/dist/components/Toast/Toast.vue.d.ts +0 -16
  210. package/dist/components/Toast/Toast.vue.d.ts.map +0 -1
  211. package/dist/components/Toast/ToastManager.d.ts +0 -14
  212. package/dist/components/Toast/ToastManager.d.ts.map +0 -1
  213. package/dist/components/Toast/types.d.ts +0 -35
  214. package/dist/components/Toast/types.d.ts.map +0 -1
  215. package/src/assets/icons/checkbox-checked-disabled.svg +0 -3
  216. package/src/assets/icons/checkbox-checked.svg +0 -3
  217. package/src/assets/icons/checkbox-less-disabled.svg +0 -3
  218. package/src/assets/icons/checkbox-less.svg +0 -3
  219. package/src/assets/icons/radio-checked.svg +0 -3
  220. package/src/assets/icons/switch-checked-disabled.svg +0 -3
  221. package/src/assets/icons/switch-checked.svg +0 -3
  222. package/src/components/CheckboxGroup/CheckboxGroup.vue +0 -96
  223. package/src/components/MultiSelectV2/MultSelectOption.vue +0 -67
  224. package/src/components/MultiSelectV2/__tests__/MultiSelect.spec.js +0 -556
  225. package/src/components/MultiSelectV2/__tests__/MultiSelectOption.spec.js +0 -229
  226. package/src/components/MultiSelectV2/__tests__/__snapshots__/MultiSelect.spec.js.snap +0 -121
  227. package/src/components/MultiSelectV2/__tests__/__snapshots__/MultiSelectOption.spec.js.snap +0 -51
  228. package/src/components/MultiSelectV2/index.vue +0 -221
  229. package/src/components/PageHeader/PageHeader.vue +0 -148
  230. package/src/components/PageHeader/index.ts +0 -2
  231. package/src/components/PageHeader/types.ts +0 -10
  232. package/src/components/Popover/__tests__/Popover.spec.js +0 -147
  233. package/src/components/Popover/__tests__/__snapshots__/Popover.spec.js.snap +0 -8
  234. package/src/components/Popover/index.vue +0 -146
  235. package/src/components/RadioGroup/RadioGroup.vue +0 -142
  236. package/src/components/Select/SelectOption.vue +0 -65
  237. package/src/components/Select/__tests__/Select.spec.js +0 -412
  238. package/src/components/Select/__tests__/SelectItem.spec.js +0 -330
  239. package/src/components/Select/__tests__/SelectOption.spec.js +0 -174
  240. package/src/components/Select/__tests__/__snapshots__/Select.spec.js.snap +0 -97
  241. package/src/components/Select/__tests__/__snapshots__/SelectItem.spec.js.snap +0 -15
  242. package/src/components/Select/__tests__/__snapshots__/SelectOption.spec.js.snap +0 -25
  243. package/src/components/Select/index.vue +0 -249
  244. package/src/components/Tag/types.ts +0 -19
  245. package/src/components/Toast/Toast.vue +0 -246
  246. package/src/components/Toast/ToastManager.ts +0 -110
  247. package/src/components/Toast/__tests__/Toast.spec.js +0 -291
  248. package/src/components/Toast/__tests__/ToastManager.spec.js +0 -294
  249. package/src/components/Toast/types.ts +0 -57
  250. package/src/stories/CheckboxGroup.stories.js +0 -105
  251. package/src/stories/MultiSelectV2.stories.js +0 -158
  252. package/src/stories/PageHeader.stories.js +0 -330
  253. package/src/stories/RadioGroup.stories.js +0 -144
  254. package/src/stories/Select.stories.js +0 -158
  255. package/src/stories/Toast.mdx +0 -123
  256. 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,19 +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';
155
139
  }
156
140
 
157
- if (this.modelValue || this.isFocused || this.forceActiveStatus) {
158
- return 'color-gray-700';
141
+ if (this.modelValue || this.isFocused) {
142
+ return 'neutral-dark';
159
143
  }
160
144
 
161
145
  if (this.hasCloudyColor) {
162
- return 'fg-base';
146
+ return 'neutral-cloudy';
163
147
  }
164
148
 
165
- return 'fg-base';
149
+ return 'neutral-cloudy';
166
150
  },
167
151
 
168
152
  attributes() {
@@ -187,10 +171,6 @@ export default {
187
171
  if (this.iconLeftClickable) this.$emit('icon-left-click');
188
172
  },
189
173
 
190
- onClearClick() {
191
- this.$emit('clear');
192
- },
193
-
194
174
  onIconRightClick() {
195
175
  if (this.attributes.disabled) return;
196
176
  if (this.allowTogglePassword) this.showPassword = !this.showPassword;
@@ -203,38 +183,42 @@ export default {
203
183
  <style lang="scss" scoped>
204
184
  @use '@/assets/scss/unnnic' as *;
205
185
 
206
- .text-input {
207
- position: relative;
208
- }
209
-
210
186
  .icon {
211
- &-left {
212
- position: absolute;
213
- top: 50%;
214
- transform: translateY(-50%);
215
- left: $unnnic-space-4;
216
-
187
+ &-left,
188
+ &-right {
217
189
  &:not(.clickable) {
218
190
  pointer-events: none;
219
191
  }
220
192
  }
221
193
 
222
- &-right-container {
194
+ &-left {
223
195
  position: absolute;
224
- top: 50%;
225
- transform: translateY(-50%);
226
- right: $unnnic-space-4;
196
+ top: $unnnic-spacing-ant + 0.1875 * $unnnic-font-size;
197
+ left: $unnnic-inline-sm - $unnnic-border-width-thinner;
198
+ }
227
199
 
228
- display: flex;
229
- align-items: center;
230
- 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;
231
208
 
232
- .icon-clear {
233
- cursor: pointer;
234
- }
235
- .icon-right:not(.clickable) {
236
- pointer-events: none;
209
+ &.size--sm {
210
+ .icon-left,
211
+ .icon-right {
212
+ top: $unnnic-spacing-xs + 0.125 * $unnnic-font-size;
237
213
  }
238
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
+ }
239
223
  }
240
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', () => {
@@ -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>
21
- </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="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>"
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="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
  });