@weni/unnnic-system 3.9.1-alpha.4 → 3.9.2

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 (233) hide show
  1. package/CHANGELOG.md +38 -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 +12 -2
  53. package/dist/components/DataTable/index.vue.d.ts.map +1 -1
  54. package/dist/components/DateFilter/DateFilter.vue.d.ts +39 -170
  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 -11
  67. package/dist/components/Input/BaseInput.vue.d.ts.map +1 -1
  68. package/dist/components/Input/Input.vue.d.ts +39 -170
  69. package/dist/components/Input/Input.vue.d.ts.map +1 -1
  70. package/dist/components/Input/TextInput.vue.d.ts +24 -33
  71. package/dist/components/Input/TextInput.vue.d.ts.map +1 -1
  72. package/dist/components/InputDatePicker/InputDatePicker.vue.d.ts +44 -175
  73. package/dist/components/InputNext/InputNext.vue.d.ts +4 -4
  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 +44 -175
  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 +512 -69
  87. package/dist/components/SelectSmart/SelectSmart.vue.d.ts.map +1 -1
  88. package/dist/components/SelectSmart/SelectSmartMultipleHeader.vue.d.ts +414 -11
  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 +24 -33
  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 +51 -0
  102. package/dist/components/Tag/BrandTag.vue.d.ts.map +1 -0
  103. package/dist/components/Tag/DefaultTag.vue.d.ts +83 -4
  104. package/dist/components/Tag/DefaultTag.vue.d.ts.map +1 -1
  105. package/dist/components/Tag/IndicatorTag.vue.d.ts +151 -0
  106. package/dist/components/Tag/IndicatorTag.vue.d.ts.map +1 -0
  107. package/dist/components/Tag/Tag.vue.d.ts +414 -12
  108. package/dist/components/Tag/Tag.vue.d.ts.map +1 -1
  109. package/dist/components/Tag/TagNext.vue.d.ts +24 -0
  110. package/dist/components/Tag/TagNext.vue.d.ts.map +1 -0
  111. package/dist/components/TextArea/TextArea.vue.d.ts +30 -75
  112. package/dist/components/TextArea/TextArea.vue.d.ts.map +1 -1
  113. package/dist/components/ToolTip/ToolTip.vue.d.ts +1 -1
  114. package/dist/components/Tour/Tour.vue.d.ts +3 -3
  115. package/dist/components/Tour/TourPopover.vue.d.ts +3 -3
  116. package/dist/components/UploadArea/UploadArea.vue.d.ts +4 -4
  117. package/dist/components/index.d.ts +6402 -4331
  118. package/dist/components/index.d.ts.map +1 -1
  119. package/dist/components/ui/popover/PopoverContent.vue.d.ts +1 -1
  120. package/dist/components/ui/popover/PopoverContent.vue.d.ts.map +1 -1
  121. package/dist/{es-db30a2ff.mjs → es-4aab69cb.mjs} +1 -1
  122. package/dist/{index-761bb714.mjs → index-789225a6.mjs} +10023 -10092
  123. package/dist/{pt-br-569fa4c1.mjs → pt-br-2f695ddd.mjs} +1 -1
  124. package/dist/style.css +1 -1
  125. package/dist/unnnic.mjs +151 -158
  126. package/dist/unnnic.umd.js +43 -42
  127. package/dist/utils/call.d.ts +1 -2
  128. package/dist/utils/call.d.ts.map +1 -1
  129. package/package.json +2 -2
  130. package/src/components/Alert/Alert.vue +135 -26
  131. package/src/components/Alert/AlertBanner.vue +182 -0
  132. package/src/components/Alert/AlertCaller.vue +49 -0
  133. package/src/components/Alert/Version1dot1.vue +36 -0
  134. package/src/components/Alert/__tests__/Alert.spec.js +45 -2
  135. package/src/components/Alert/__tests__/AlertBanner.spec.js +89 -0
  136. package/src/components/Alert/__tests__/AlertCaller.spec.js +98 -0
  137. package/src/components/Alert/__tests__/Version1dot1.spec.js +21 -0
  138. package/src/components/Alert/__tests__/__snapshots__/Alert.spec.js.snap +7 -11
  139. package/src/components/Alert/__tests__/__snapshots__/AlertBanner.spec.js.snap +2 -2
  140. package/src/components/Alert/__tests__/__snapshots__/Version1dot1.spec.js.snap +1 -1
  141. package/src/components/Button/Button.vue +117 -67
  142. package/src/components/Button/types.ts +1 -0
  143. package/src/components/ChatsContact/ChatsContact.vue +6 -10
  144. package/src/components/Checkbox/Checkbox.vue +65 -117
  145. package/src/components/Checkbox/__tests__/Checkbox.spec.js +21 -6
  146. package/src/components/DataTable/index.vue +48 -0
  147. package/src/components/FormElement/FormElement.vue +93 -63
  148. package/src/components/Icon.vue +0 -2
  149. package/src/components/Input/BaseInput.vue +12 -12
  150. package/src/components/Input/Input.scss +20 -19
  151. package/src/components/Input/Input.vue +55 -60
  152. package/src/components/Input/TextInput.vue +54 -25
  153. package/src/components/Input/__test__/Input.spec.js +33 -13
  154. package/src/components/Input/__test__/TextInput.spec.js +8 -6
  155. package/src/components/Input/__test__/__snapshots__/Input.spec.js.snap +5 -14
  156. package/src/components/Input/__test__/__snapshots__/TextInput.spec.js.snap +1 -1
  157. package/src/components/Label/Label.vue +21 -52
  158. package/src/components/Label/__tests__/Label.spec.js +1 -1
  159. package/src/components/Label/__tests__/__snapshots__/Label.spec.js.snap +1 -1
  160. package/src/components/Radio/Radio.vue +66 -118
  161. package/src/components/Radio/__test__/Radio.spec.js +20 -14
  162. package/src/components/Radio/__test__/__snapshots__/Radio.spec.js.snap +3 -4
  163. package/src/components/SelectSmart/SelectSmart.vue +129 -28
  164. package/src/components/SelectSmart/__tests__/SelectSmart.spec.js +180 -4
  165. package/src/components/Switch/Switch.vue +91 -132
  166. package/src/components/Switch/__tests__/Switch.spec.js +75 -8
  167. package/src/components/Switch/__tests__/__snapshots__/Switch.spec.js.snap +6 -5
  168. package/src/components/Tab/Tab.vue +23 -37
  169. package/src/components/Tab/__test__/__snapshots__/Tab.spec.js.snap +1 -1
  170. package/src/components/TableNext/__test__/__snapshots__/TableNext.spec.js.snap +2 -2
  171. package/src/components/TableNext/__test__/__snapshots__/TablePagination.spec.js.snap +2 -2
  172. package/src/components/Tag/BrandTag.vue +96 -0
  173. package/src/components/Tag/DefaultTag.vue +107 -51
  174. package/src/components/Tag/IndicatorTag.vue +107 -0
  175. package/src/components/Tag/Tag.vue +79 -32
  176. package/src/components/Tag/TagNext.vue +60 -0
  177. package/src/components/TextArea/TextArea.vue +11 -40
  178. package/src/components/TextArea/__test__/__snapshots__/TextArea.spec.js.snap +3 -11
  179. package/src/components/index.ts +18 -33
  180. package/src/stories/Alert.stories.js +67 -6
  181. package/src/stories/Button.stories.js +39 -29
  182. package/src/stories/Checkbox.stories.js +4 -11
  183. package/src/stories/DataTable.stories.js +192 -0
  184. package/src/stories/Input.stories.js +76 -71
  185. package/src/stories/Label.stories.js +0 -7
  186. package/src/stories/Radio.stories.js +1 -28
  187. package/src/stories/SelectSmart.stories.js +289 -0
  188. package/src/stories/Switch.stories.js +5 -10
  189. package/src/stories/Tab.stories.js +4 -11
  190. package/src/stories/Tag.stories.js +43 -24
  191. package/src/stories/TextArea.stories.js +2 -14
  192. package/src/types/scheme-colors.d.ts +0 -1
  193. package/src/utils/call.js +18 -46
  194. package/dist/assets/tokens/colors.json.d.ts +0 -376
  195. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts +0 -28
  196. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts.map +0 -1
  197. package/dist/components/PageHeader/PageHeader.vue.d.ts +0 -28
  198. package/dist/components/PageHeader/PageHeader.vue.d.ts.map +0 -1
  199. package/dist/components/PageHeader/index.d.ts +0 -3
  200. package/dist/components/PageHeader/index.d.ts.map +0 -1
  201. package/dist/components/PageHeader/types.d.ts +0 -9
  202. package/dist/components/PageHeader/types.d.ts.map +0 -1
  203. package/dist/components/Tag/types.d.ts +0 -18
  204. package/dist/components/Tag/types.d.ts.map +0 -1
  205. package/dist/components/Toast/Toast.vue.d.ts +0 -16
  206. package/dist/components/Toast/Toast.vue.d.ts.map +0 -1
  207. package/dist/components/Toast/ToastManager.d.ts +0 -14
  208. package/dist/components/Toast/ToastManager.d.ts.map +0 -1
  209. package/dist/components/Toast/types.d.ts +0 -35
  210. package/dist/components/Toast/types.d.ts.map +0 -1
  211. package/src/assets/icons/checkbox-checked-disabled.svg +0 -3
  212. package/src/assets/icons/checkbox-checked.svg +0 -3
  213. package/src/assets/icons/checkbox-less-disabled.svg +0 -3
  214. package/src/assets/icons/checkbox-less.svg +0 -3
  215. package/src/assets/icons/radio-checked.svg +0 -3
  216. package/src/assets/icons/switch-checked-disabled.svg +0 -3
  217. package/src/assets/icons/switch-checked.svg +0 -3
  218. package/src/components/CheckboxGroup/CheckboxGroup.vue +0 -96
  219. package/src/components/PageHeader/PageHeader.vue +0 -148
  220. package/src/components/PageHeader/index.ts +0 -2
  221. package/src/components/PageHeader/types.ts +0 -10
  222. package/src/components/RadioGroup/RadioGroup.vue +0 -142
  223. package/src/components/Tag/types.ts +0 -19
  224. package/src/components/Toast/Toast.vue +0 -246
  225. package/src/components/Toast/ToastManager.ts +0 -110
  226. package/src/components/Toast/__tests__/Toast.spec.js +0 -291
  227. package/src/components/Toast/__tests__/ToastManager.spec.js +0 -294
  228. package/src/components/Toast/types.ts +0 -57
  229. package/src/stories/CheckboxGroup.stories.js +0 -105
  230. package/src/stories/PageHeader.stories.js +0 -330
  231. package/src/stories/RadioGroup.stories.js +0 -144
  232. package/src/stories/Toast.mdx +0 -123
  233. package/src/stories/Toast.stories.js +0 -126
@@ -1,42 +1,43 @@
1
1
  @use '@/assets/scss/unnnic' as *;
2
2
 
3
3
  @mixin input-base {
4
- background: $unnnic-color-white;
5
- border: $unnnic-border-width-thinner solid $unnnic-color-border-base;
4
+ background: $unnnic-color-neutral-white;
5
+ border: $unnnic-border-width-thinner solid $unnnic-color-neutral-clean;
6
6
  outline: none;
7
- border-radius: $unnnic-radius-2;
8
- color: $unnnic-color-fg-emphasized;
9
- caret-color: $unnnic-color-fg-muted;
10
- font: $unnnic-font-body;
11
-
12
- transition: border-color 0.1s ease-in-out;
7
+ border-radius: $unnnic-border-radius-sm;
8
+ color: $unnnic-color-neutral-darkest;
9
+ caret-color: $unnnic-color-neutral-clean;
10
+ font-weight: $unnnic-font-weight-regular;
11
+ font-family: $unnnic-font-family-secondary;
13
12
 
14
13
  &:focus {
15
- border-color: $unnnic-color-border-active;
14
+ border-color: $unnnic-color-weni-600;
16
15
  }
17
16
 
18
17
  &::placeholder {
19
- color: $unnnic-color-fg-muted;
20
- opacity: 1;
21
- /* Firefox */
18
+ color: $unnnic-color-neutral-cleanest;
19
+ opacity: 1; /* Firefox */
22
20
  }
23
21
 
24
22
  &:disabled {
25
- border-color: $unnnic-color-border-muted;
26
- background-color: $unnnic-color-bg-muted;
23
+ border-color: $unnnic-color-neutral-cleanest;
24
+ background-color: $unnnic-color-neutral-lightest;
27
25
  cursor: not-allowed;
28
- color: $unnnic-color-fg-muted;
26
+ color: $unnnic-color-neutral-cleanest;
29
27
  }
30
28
  }
31
29
 
32
30
  @mixin input-sm-font {
33
- font: $unnnic-font-body;
31
+ font-size: $unnnic-font-size-body-md;
32
+ line-height: $unnnic-font-size-body-md + $unnnic-line-height-medium;
34
33
  }
35
34
 
36
35
  @mixin input-md-font {
37
- font: $unnnic-font-body;
36
+ font-size: $unnnic-font-size-body-gt;
37
+ line-height: $unnnic-font-size-body-gt + $unnnic-line-height-medium;
38
38
  }
39
39
 
40
40
  @mixin input-error {
41
- border-color: $unnnic-color-border-critical;
42
- }
41
+ border-color: $unnnic-color-aux-red-500;
42
+ color: $unnnic-color-aux-red-500;
43
+ }
@@ -1,14 +1,19 @@
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"
@@ -16,37 +21,31 @@
16
21
  :placeholder="placeholder"
17
22
  :iconLeft="iconLeft"
18
23
  :iconRight="iconRight"
19
- :type="errors.length > 0 && !disabled ? 'error' : type"
24
+ :type="type"
20
25
  :iconLeftClickable="iconLeftClickable"
21
26
  :iconRightClickable="iconRightClickable"
22
27
  :hasCloudyColor="hasCloudyColor"
23
28
  :size="size"
24
29
  :mask="mask"
25
30
  :nativeType="nativeType"
26
- :maxlength="maxlength"
27
- :disabled="disabled"
28
31
  />
29
32
 
30
- <template
31
- v-if="maxlength && showMaxlengthCounter"
32
- #rightMessage
33
+ <p
34
+ v-if="message"
35
+ class="unnnic-form__message"
33
36
  >
34
- {{ (val || '').length }} / {{ maxlength }}
35
- </template>
36
- </UnnnicFormElement>
37
+ {{ fullySanitize(message) }}
38
+ </p>
39
+ </div>
37
40
  </template>
38
41
 
39
42
  <script>
40
43
  import { fullySanitize } from '../../utils/sanitize';
41
44
  import TextInput from './TextInput.vue';
42
- import UnnnicFormElement from '../FormElement/FormElement.vue';
43
45
 
44
46
  export default {
45
47
  name: 'UnnnicInput',
46
- components: {
47
- TextInput,
48
- UnnnicFormElement,
49
- },
48
+ components: { TextInput },
50
49
  props: {
51
50
  placeholder: {
52
51
  type: String,
@@ -69,23 +68,19 @@ export default {
69
68
  },
70
69
  message: {
71
70
  type: String,
72
- default: '',
73
- },
74
- errors: {
75
- type: [String, Array],
76
- default: '',
71
+ default: null,
77
72
  },
78
73
  label: {
79
74
  type: String,
80
- default: '',
75
+ default: null,
81
76
  },
82
77
  iconLeft: {
83
78
  type: String,
84
- default: '',
79
+ default: null,
85
80
  },
86
81
  iconRight: {
87
82
  type: String,
88
- default: '',
83
+ default: null,
89
84
  },
90
85
  allowTogglePassword: {
91
86
  type: Boolean,
@@ -93,11 +88,11 @@ export default {
93
88
  },
94
89
  iconLeftClickable: {
95
90
  type: Boolean,
96
- default: false,
91
+ default: null,
97
92
  },
98
93
  iconRightClickable: {
99
94
  type: Boolean,
100
- default: false,
95
+ default: null,
101
96
  },
102
97
  hasCloudyColor: {
103
98
  type: Boolean,
@@ -111,22 +106,6 @@ export default {
111
106
  type: [String, Array],
112
107
  default: '',
113
108
  },
114
- tooltip: {
115
- type: String,
116
- default: '',
117
- },
118
- maxlength: {
119
- type: [Number, null],
120
- default: null,
121
- },
122
- showMaxlengthCounter: {
123
- type: Boolean,
124
- default: false,
125
- },
126
- disabled: {
127
- type: Boolean,
128
- default: false,
129
- },
130
109
  },
131
110
  emits: ['update:modelValue'],
132
111
  data() {
@@ -135,12 +114,8 @@ export default {
135
114
  };
136
115
  },
137
116
  computed: {
138
- computedError() {
139
- if (Array.isArray(this.errors)) {
140
- return this.errors.join(', ') || this.type === 'error';
141
- }
142
-
143
- return this.errors || this.type === 'error';
117
+ hasLabelSlot() {
118
+ return !!this.$slots.label;
144
119
  },
145
120
  },
146
121
  watch: {
@@ -161,9 +136,29 @@ export default {
161
136
  </script>
162
137
 
163
138
  <style lang="scss" scoped>
164
- * {
165
- margin: 0;
166
- padding: 0;
167
- 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
+ }
168
163
  }
169
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,7 +18,6 @@
12
18
  class="input-itself"
13
19
  :hasIconLeft="!!iconLeft"
14
20
  :hasIconRight="!!iconRight || allowTogglePassword"
15
- :maxlength="maxlength"
16
21
  @focus="onFocus"
17
22
  @blur="onBlur"
18
23
  />
@@ -21,7 +26,7 @@
21
26
  v-if="iconLeft"
22
27
  :scheme="iconScheme"
23
28
  :icon="iconLeft"
24
- size="ant"
29
+ size="sm"
25
30
  :clickable="iconLeftClickable"
26
31
  :class="['icon-left', { clickable: iconLeftClickable }]"
27
32
  @click="onIconLeftClick"
@@ -31,7 +36,7 @@
31
36
  v-if="iconRightSvg"
32
37
  :scheme="iconScheme"
33
38
  :icon="iconRightSvg"
34
- size="ant"
39
+ :size="iconRightSize"
35
40
  :clickable="iconRightClickable || allowTogglePassword"
36
41
  :class="[
37
42
  'icon-right',
@@ -87,22 +92,22 @@ export default {
87
92
  type: Boolean,
88
93
  default: null,
89
94
  },
95
+ iconRightSize: {
96
+ type: String,
97
+ default: 'sm',
98
+ },
90
99
  allowTogglePassword: {
91
100
  type: Boolean,
92
101
  default: null,
93
102
  },
103
+ hasCloudyColor: {
104
+ type: Boolean,
105
+ default: null,
106
+ },
94
107
  size: {
95
108
  type: String,
96
109
  default: 'md',
97
110
  },
98
- maxlength: {
99
- type: Number,
100
- default: null,
101
- },
102
- disabled: {
103
- type: Boolean,
104
- default: false,
105
- },
106
111
  },
107
112
  emits: ['icon-left-click', 'icon-right-click'],
108
113
  data() {
@@ -113,7 +118,7 @@ export default {
113
118
  },
114
119
  computed: {
115
120
  isDisabled() {
116
- return this.$attrs.disabled || this.disabled;
121
+ return this.$attrs.disabled;
117
122
  },
118
123
 
119
124
  iconRightSvg() {
@@ -125,11 +130,23 @@ export default {
125
130
  },
126
131
 
127
132
  iconScheme() {
133
+ if (this.type === 'error') {
134
+ return 'aux-red-500';
135
+ }
136
+
128
137
  if (this.isDisabled) {
129
- return 'fg-muted';
138
+ return 'neutral-cleanest';
139
+ }
140
+
141
+ if (this.modelValue || this.isFocused) {
142
+ return 'neutral-dark';
143
+ }
144
+
145
+ if (this.hasCloudyColor) {
146
+ return 'neutral-cloudy';
130
147
  }
131
148
 
132
- return 'fg-base';
149
+ return 'neutral-cloudy';
133
150
  },
134
151
 
135
152
  attributes() {
@@ -166,10 +183,6 @@ export default {
166
183
  <style lang="scss" scoped>
167
184
  @use '@/assets/scss/unnnic' as *;
168
185
 
169
- .text-input {
170
- position: relative;
171
- }
172
-
173
186
  .icon {
174
187
  &-left,
175
188
  &-right {
@@ -180,16 +193,32 @@ export default {
180
193
 
181
194
  &-left {
182
195
  position: absolute;
183
- top: 50%;
184
- transform: translateY(-50%);
185
- left: $unnnic-space-4;
196
+ top: $unnnic-spacing-ant + 0.1875 * $unnnic-font-size;
197
+ left: $unnnic-inline-sm - $unnnic-border-width-thinner;
186
198
  }
187
199
 
188
200
  &-right {
189
201
  position: absolute;
190
- top: 50%;
191
- transform: translateY(-50%);
192
- right: $unnnic-space-4;
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;
208
+
209
+ &.size--sm {
210
+ .icon-left,
211
+ .icon-right {
212
+ top: $unnnic-spacing-xs + 0.125 * $unnnic-font-size;
213
+ }
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;
193
222
  }
194
223
  }
195
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>"`;