@weni/unnnic-system 3.9.4-alpha.4 → 3.10.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 (254) hide show
  1. package/CHANGELOG.md +14 -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 +7677 -6315
  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-bdfb773f.mjs → es-4b899f97.mjs} +1 -1
  121. package/dist/{index-8ce04c5b.mjs → index-23489897.mjs} +8813 -9354
  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-4befdd13.mjs → pt-br-5a914a63.mjs} +1 -1
  126. package/dist/style.css +1 -1
  127. package/dist/unnnic.mjs +173 -181
  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/scheme-colors.scss +223 -309
  133. package/src/components/Alert/Alert.vue +135 -26
  134. package/src/components/Alert/AlertBanner.vue +182 -0
  135. package/src/components/Alert/AlertCaller.vue +49 -0
  136. package/src/components/Alert/Version1dot1.vue +36 -0
  137. package/src/components/Alert/__tests__/Alert.spec.js +45 -2
  138. package/src/components/Alert/__tests__/AlertBanner.spec.js +89 -0
  139. package/src/components/Alert/__tests__/AlertCaller.spec.js +98 -0
  140. package/src/components/Alert/__tests__/Version1dot1.spec.js +21 -0
  141. package/src/components/Alert/__tests__/__snapshots__/Alert.spec.js.snap +7 -11
  142. package/src/components/Alert/__tests__/__snapshots__/AlertBanner.spec.js.snap +2 -2
  143. package/src/components/Alert/__tests__/__snapshots__/Version1dot1.spec.js.snap +1 -1
  144. package/src/components/Button/Button.vue +117 -67
  145. package/src/components/Button/types.ts +1 -0
  146. package/src/components/ChatsContact/ChatsContact.vue +6 -10
  147. package/src/components/Checkbox/Checkbox.vue +65 -117
  148. package/src/components/Checkbox/__tests__/Checkbox.spec.js +21 -6
  149. package/src/components/FormElement/FormElement.vue +93 -63
  150. package/src/components/Icon.vue +0 -2
  151. package/src/components/Input/BaseInput.vue +14 -33
  152. package/src/components/Input/Input.scss +22 -22
  153. package/src/components/Input/Input.vue +56 -79
  154. package/src/components/Input/TextInput.vue +65 -81
  155. package/src/components/Input/__test__/Input.spec.js +33 -13
  156. package/src/components/Input/__test__/TextInput.spec.js +8 -6
  157. package/src/components/Input/__test__/__snapshots__/Input.spec.js.snap +4 -17
  158. package/src/components/Input/__test__/__snapshots__/TextInput.spec.js.snap +1 -7
  159. package/src/components/Label/Label.vue +21 -52
  160. package/src/components/Label/__tests__/Label.spec.js +1 -1
  161. package/src/components/Label/__tests__/__snapshots__/Label.spec.js.snap +1 -1
  162. package/src/components/Radio/Radio.vue +66 -118
  163. package/src/components/Radio/__test__/Radio.spec.js +20 -14
  164. package/src/components/Radio/__test__/__snapshots__/Radio.spec.js.snap +3 -4
  165. package/src/components/SelectSmart/SelectSmart.vue +3 -4
  166. package/src/components/Switch/Switch.vue +91 -132
  167. package/src/components/Switch/__tests__/Switch.spec.js +75 -8
  168. package/src/components/Switch/__tests__/__snapshots__/Switch.spec.js.snap +6 -5
  169. package/src/components/Tab/Tab.vue +23 -37
  170. package/src/components/Tab/__test__/__snapshots__/Tab.spec.js.snap +1 -1
  171. package/src/components/TableNext/__test__/__snapshots__/TableNext.spec.js.snap +2 -2
  172. package/src/components/TableNext/__test__/__snapshots__/TablePagination.spec.js.snap +2 -2
  173. package/src/components/Tag/BrandTag.vue +96 -0
  174. package/src/components/Tag/DefaultTag.vue +107 -51
  175. package/src/components/Tag/IndicatorTag.vue +107 -0
  176. package/src/components/Tag/Tag.vue +79 -32
  177. package/src/components/Tag/TagNext.vue +60 -0
  178. package/src/components/TextArea/TextArea.vue +12 -41
  179. package/src/components/TextArea/__test__/__snapshots__/TextArea.spec.js.snap +3 -11
  180. package/src/components/index.ts +17 -33
  181. package/src/locales/en.json +1 -2
  182. package/src/locales/es.json +1 -2
  183. package/src/locales/pt_br.json +1 -2
  184. package/src/stories/Alert.stories.js +67 -6
  185. package/src/stories/Button.stories.js +39 -29
  186. package/src/stories/Checkbox.stories.js +4 -11
  187. package/src/stories/Input.stories.js +76 -71
  188. package/src/stories/Label.stories.js +0 -7
  189. package/src/stories/Radio.stories.js +1 -28
  190. package/src/stories/Switch.stories.js +5 -10
  191. package/src/stories/Tab.stories.js +4 -11
  192. package/src/stories/Tag.stories.js +43 -24
  193. package/src/stories/TextArea.stories.js +2 -14
  194. package/src/types/scheme-colors.d.ts +0 -1
  195. package/src/utils/call.js +18 -46
  196. package/dist/assets/tokens/colors.json.d.ts +0 -376
  197. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts +0 -28
  198. package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts.map +0 -1
  199. package/dist/components/PageHeader/PageHeader.vue.d.ts +0 -28
  200. package/dist/components/PageHeader/PageHeader.vue.d.ts.map +0 -1
  201. package/dist/components/PageHeader/index.d.ts +0 -3
  202. package/dist/components/PageHeader/index.d.ts.map +0 -1
  203. package/dist/components/PageHeader/types.d.ts +0 -9
  204. package/dist/components/PageHeader/types.d.ts.map +0 -1
  205. package/dist/components/Tag/types.d.ts +0 -18
  206. package/dist/components/Tag/types.d.ts.map +0 -1
  207. package/dist/components/Toast/Toast.vue.d.ts +0 -16
  208. package/dist/components/Toast/Toast.vue.d.ts.map +0 -1
  209. package/dist/components/Toast/ToastManager.d.ts +0 -14
  210. package/dist/components/Toast/ToastManager.d.ts.map +0 -1
  211. package/dist/components/Toast/types.d.ts +0 -35
  212. package/dist/components/Toast/types.d.ts.map +0 -1
  213. package/src/assets/icons/checkbox-checked-disabled.svg +0 -3
  214. package/src/assets/icons/checkbox-checked.svg +0 -3
  215. package/src/assets/icons/checkbox-less-disabled.svg +0 -3
  216. package/src/assets/icons/checkbox-less.svg +0 -3
  217. package/src/assets/icons/radio-checked.svg +0 -3
  218. package/src/assets/icons/switch-checked-disabled.svg +0 -3
  219. package/src/assets/icons/switch-checked.svg +0 -3
  220. package/src/components/CheckboxGroup/CheckboxGroup.vue +0 -96
  221. package/src/components/MultiSelectV2/MultSelectOption.vue +0 -67
  222. package/src/components/MultiSelectV2/__tests__/MultiSelect.spec.js +0 -556
  223. package/src/components/MultiSelectV2/__tests__/MultiSelectOption.spec.js +0 -229
  224. package/src/components/MultiSelectV2/__tests__/__snapshots__/MultiSelect.spec.js.snap +0 -121
  225. package/src/components/MultiSelectV2/__tests__/__snapshots__/MultiSelectOption.spec.js.snap +0 -51
  226. package/src/components/MultiSelectV2/index.vue +0 -221
  227. package/src/components/PageHeader/PageHeader.vue +0 -148
  228. package/src/components/PageHeader/index.ts +0 -2
  229. package/src/components/PageHeader/types.ts +0 -10
  230. package/src/components/Popover/__tests__/Popover.spec.js +0 -147
  231. package/src/components/Popover/__tests__/__snapshots__/Popover.spec.js.snap +0 -8
  232. package/src/components/Popover/index.vue +0 -146
  233. package/src/components/RadioGroup/RadioGroup.vue +0 -142
  234. package/src/components/Select/SelectOption.vue +0 -65
  235. package/src/components/Select/__tests__/Select.spec.js +0 -412
  236. package/src/components/Select/__tests__/SelectItem.spec.js +0 -330
  237. package/src/components/Select/__tests__/SelectOption.spec.js +0 -174
  238. package/src/components/Select/__tests__/__snapshots__/Select.spec.js.snap +0 -97
  239. package/src/components/Select/__tests__/__snapshots__/SelectItem.spec.js.snap +0 -15
  240. package/src/components/Select/__tests__/__snapshots__/SelectOption.spec.js.snap +0 -25
  241. package/src/components/Select/index.vue +0 -249
  242. package/src/components/Tag/types.ts +0 -19
  243. package/src/components/Toast/Toast.vue +0 -246
  244. package/src/components/Toast/ToastManager.ts +0 -110
  245. package/src/components/Toast/__tests__/Toast.spec.js +0 -291
  246. package/src/components/Toast/__tests__/ToastManager.spec.js +0 -294
  247. package/src/components/Toast/types.ts +0 -57
  248. package/src/stories/CheckboxGroup.stories.js +0 -105
  249. package/src/stories/MultiSelectV2.stories.js +0 -158
  250. package/src/stories/PageHeader.stories.js +0 -330
  251. package/src/stories/RadioGroup.stories.js +0 -144
  252. package/src/stories/Select.stories.js +0 -158
  253. package/src/stories/Toast.mdx +0 -123
  254. package/src/stories/Toast.stories.js +0 -126
@@ -1,229 +0,0 @@
1
- import { mount } from '@vue/test-utils';
2
- import { beforeEach, describe, expect, test, afterEach } from 'vitest';
3
- import MultiSelectOption from '../MultSelectOption.vue';
4
-
5
- const createWrapper = (props = {}) => {
6
- return mount(MultiSelectOption, { props });
7
- };
8
-
9
- describe('MultiSelectOption.vue', () => {
10
- let wrapper;
11
-
12
- beforeEach(() => {
13
- wrapper = createWrapper({
14
- label: 'Test Option',
15
- });
16
- });
17
-
18
- afterEach(() => {
19
- if (wrapper) {
20
- wrapper.unmount();
21
- }
22
- });
23
-
24
- test('renders correctly', () => {
25
- expect(wrapper.exists()).toBe(true);
26
- });
27
-
28
- test('applies the correct base CSS class', () => {
29
- expect(wrapper.classes()).toContain('unnnic-multi-select-option');
30
- });
31
-
32
- test('renders UnnnicCheckbox component', () => {
33
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
34
- expect(checkbox.exists()).toBe(true);
35
- });
36
-
37
- test('passes label prop to checkbox', () => {
38
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
39
- expect(checkbox.props('label')).toBe('Test Option');
40
- });
41
-
42
- describe('props validation', () => {
43
- test('validates required label prop', () => {
44
- const wrapper = createWrapper({ label: 'Required Label' });
45
- expect(wrapper.props('label')).toBe('Required Label');
46
- });
47
-
48
- test('validates optional disabled prop with default value', () => {
49
- expect(wrapper.props('disabled')).toBe(false);
50
- });
51
-
52
- test('validates optional active prop with default value', () => {
53
- expect(wrapper.props('active')).toBe(false);
54
- });
55
-
56
- test('validates optional focused prop with default value', () => {
57
- expect(wrapper.props('focused')).toBe(false);
58
- });
59
- });
60
-
61
- describe('disabled state', () => {
62
- test('passes disabled prop to checkbox when disabled is true', async () => {
63
- await wrapper.setProps({ disabled: true });
64
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
65
- expect(checkbox.props('disabled')).toBe(true);
66
- });
67
-
68
- test('passes disabled prop to checkbox when disabled is false', async () => {
69
- await wrapper.setProps({ disabled: false });
70
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
71
- expect(checkbox.props('disabled')).toBe(false);
72
- });
73
- });
74
-
75
- describe('active state', () => {
76
- test('passes active prop to checkbox modelValue when active is true', async () => {
77
- await wrapper.setProps({ active: true });
78
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
79
- expect(checkbox.props('modelValue')).toBe(true);
80
- });
81
-
82
- test('passes active prop to checkbox modelValue when active is false', async () => {
83
- await wrapper.setProps({ active: false });
84
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
85
- expect(checkbox.props('modelValue')).toBe(false);
86
- });
87
- });
88
-
89
- describe('events', () => {
90
- test('emits update:modelValue when checkbox emits update:model-value', async () => {
91
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
92
-
93
- await checkbox.vm.$emit('update:model-value', true);
94
-
95
- expect(wrapper.emitted('update:modelValue')).toBeTruthy();
96
- expect(wrapper.emitted('update:modelValue')[0][0]).toBe(true);
97
- });
98
-
99
- test('emits update:modelValue with toggled value when active is false', async () => {
100
- await wrapper.setProps({ active: false });
101
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
102
-
103
- await checkbox.vm.$emit('update:model-value', true);
104
-
105
- expect(wrapper.emitted('update:modelValue')).toBeTruthy();
106
- expect(wrapper.emitted('update:modelValue')[0][0]).toBe(true);
107
- });
108
-
109
- test('emits update:modelValue with toggled value when active is true', async () => {
110
- await wrapper.setProps({ active: true });
111
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
112
-
113
- await checkbox.vm.$emit('update:model-value', false);
114
-
115
- expect(wrapper.emitted('update:modelValue')).toBeTruthy();
116
- expect(wrapper.emitted('update:modelValue')[0][0]).toBe(false);
117
- });
118
- });
119
-
120
- describe('combined states', () => {
121
- test('can be both active and disabled', async () => {
122
- await wrapper.setProps({ active: true, disabled: true });
123
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
124
-
125
- expect(checkbox.props('modelValue')).toBe(true);
126
- expect(checkbox.props('disabled')).toBe(true);
127
- });
128
-
129
- test('renders correctly with all props', async () => {
130
- await wrapper.setProps({
131
- label: 'Complex Option',
132
- active: true,
133
- disabled: false,
134
- focused: true,
135
- });
136
-
137
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
138
- expect(checkbox.props('label')).toBe('Complex Option');
139
- expect(checkbox.props('modelValue')).toBe(true);
140
- expect(checkbox.props('disabled')).toBe(false);
141
- });
142
- });
143
-
144
- describe('component structure', () => {
145
- test('has correct component name', () => {
146
- expect(wrapper.vm.$options.name).toBe('UnnnicMultiSelectOption');
147
- });
148
-
149
- test('renders a div element', () => {
150
- expect(wrapper.element.tagName).toBe('DIV');
151
- });
152
-
153
- test('contains UnnnicCheckbox component', () => {
154
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
155
- expect(checkbox.exists()).toBe(true);
156
- });
157
- });
158
-
159
- describe('edge cases', () => {
160
- test('handles empty label', async () => {
161
- await wrapper.setProps({ label: '' });
162
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
163
- expect(checkbox.props('label')).toBe('');
164
- });
165
-
166
- test('handles long label text', async () => {
167
- const longText =
168
- 'This is a very long label text that should be handled properly by the component';
169
- await wrapper.setProps({ label: longText });
170
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
171
- expect(checkbox.props('label')).toBe(longText);
172
- });
173
-
174
- test('handles special characters in label', async () => {
175
- const specialText = 'Option with special chars: @#$%^&*()';
176
- await wrapper.setProps({ label: specialText });
177
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
178
- expect(checkbox.props('label')).toBe(specialText);
179
- });
180
-
181
- test('handles rapid state changes', async () => {
182
- await wrapper.setProps({ active: true });
183
- await wrapper.setProps({ active: false });
184
- await wrapper.setProps({ active: true });
185
-
186
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
187
- expect(checkbox.props('modelValue')).toBe(true);
188
- });
189
- });
190
-
191
- describe('accessibility', () => {
192
- test('checkbox receives disabled state for accessibility', async () => {
193
- await wrapper.setProps({ disabled: true });
194
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
195
- expect(checkbox.props('disabled')).toBe(true);
196
- });
197
-
198
- test('checkbox receives label for accessibility', () => {
199
- const checkbox = wrapper.findComponent({ name: 'UnnnicCheckbox' });
200
- expect(checkbox.props('label')).toBe('Test Option');
201
- });
202
- });
203
-
204
- describe('snapshot testing', () => {
205
- test('matches snapshot with default props', () => {
206
- expect(wrapper.html()).toMatchSnapshot();
207
- });
208
-
209
- test('matches snapshot with active state', async () => {
210
- await wrapper.setProps({ active: true });
211
- expect(wrapper.html()).toMatchSnapshot();
212
- });
213
-
214
- test('matches snapshot with disabled state', async () => {
215
- await wrapper.setProps({ disabled: true });
216
- expect(wrapper.html()).toMatchSnapshot();
217
- });
218
-
219
- test('matches snapshot with both active and disabled states', async () => {
220
- await wrapper.setProps({ active: true, disabled: true });
221
- expect(wrapper.html()).toMatchSnapshot();
222
- });
223
-
224
- test('matches snapshot with focused state', async () => {
225
- await wrapper.setProps({ focused: true });
226
- expect(wrapper.html()).toMatchSnapshot();
227
- });
228
- });
229
- });
@@ -1,121 +0,0 @@
1
- // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
-
3
- exports[`UnnnicMultiSelect.vue > snapshot testing > matches snapshot with default props 1`] = `
4
- "<div data-v-de5c711a="" class="unnnic-multi-select">
5
- <section data-v-5a3125ac="" data-v-de5c711a="" class="unnnic-popover">
6
- <div data-v-5a3125ac="" class="unnnic-popover__trigger" data-testid="popover-trigger">
7
- <div data-v-d890ad85="" data-v-de5c711a="" class="unnnic-form md unnnic-multi-select__input">
8
- <!--v-if-->
9
- <div data-v-a0d36167="" data-v-d890ad85="" class="text-input size--md unnnic-multi-select__input unnnic-form-input" mask=""><input data-v-86533b41="" data-v-a0d36167="" class="unnnic-multi-select__input unnnic-form-input input-itself input size-md normal input--has-icon-right input--has-clear-icon unnnic-multi-select__input unnnic-form-input input-itself" placeholder="" iconleft="" iconright="keyboard_arrow_down" iconleftclickable="false" iconrightclickable="false" hascloudycolor="false" showclear="true" type="text" readonly="" value="">
10
- <!--v-if-->
11
- <section data-v-a0d36167="" class="icon-right-container"><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--ant unnnic--clickable icon-clear" data-testid="material-icon" translate="no">close</span><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--ant icon-right" data-testid="material-icon" translate="no">keyboard_arrow_down</span></section>
12
- </div>
13
- <section data-v-d890ad85="" class="unnnic-form__hints-container">
14
- <section data-v-d890ad85="" class="unnnic-form__message-container">
15
- <!--v-if-->
16
- <!--v-if-->
17
- </section>
18
- <!--v-if-->
19
- </section>
20
- </div>
21
- </div>
22
- <!--v-if-->
23
- </section>
24
- </div>"
25
- `;
26
-
27
- exports[`UnnnicMultiSelect.vue > snapshot testing > matches snapshot with disabled state 1`] = `
28
- "<div data-v-de5c711a="" class="unnnic-multi-select">
29
- <section data-v-5a3125ac="" data-v-de5c711a="" class="unnnic-popover">
30
- <div data-v-5a3125ac="" class="unnnic-popover__trigger" data-testid="popover-trigger">
31
- <div data-v-d890ad85="" data-v-de5c711a="" class="unnnic-form md unnnic-multi-select__input">
32
- <!--v-if-->
33
- <div data-v-a0d36167="" data-v-d890ad85="" class="text-input size--md unnnic-multi-select__input unnnic-form-input" mask=""><input data-v-86533b41="" data-v-a0d36167="" class="unnnic-multi-select__input unnnic-form-input input-itself input size-md normal input--has-icon-right input--has-clear-icon unnnic-multi-select__input unnnic-form-input input-itself" placeholder="" iconleft="" iconright="keyboard_arrow_down" iconleftclickable="false" iconrightclickable="false" hascloudycolor="false" showclear="true" type="text" readonly="" value="" disabled="">
34
- <!--v-if-->
35
- <section data-v-a0d36167="" class="icon-right-container"><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--fg-muted unnnic-icon-size--ant unnnic--clickable icon-clear" data-testid="material-icon" translate="no">close</span><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--fg-muted unnnic-icon-size--ant icon-right" data-testid="material-icon" translate="no">keyboard_arrow_down</span></section>
36
- </div>
37
- <section data-v-d890ad85="" class="unnnic-form__hints-container">
38
- <section data-v-d890ad85="" class="unnnic-form__message-container">
39
- <!--v-if-->
40
- <!--v-if-->
41
- </section>
42
- <!--v-if-->
43
- </section>
44
- </div>
45
- </div>
46
- <!--v-if-->
47
- </section>
48
- </div>"
49
- `;
50
-
51
- exports[`UnnnicMultiSelect.vue > snapshot testing > matches snapshot with multiple selected values 1`] = `
52
- "<div data-v-de5c711a="" class="unnnic-multi-select">
53
- <section data-v-5a3125ac="" data-v-de5c711a="" class="unnnic-popover">
54
- <div data-v-5a3125ac="" class="unnnic-popover__trigger" data-testid="popover-trigger">
55
- <div data-v-d890ad85="" data-v-de5c711a="" class="unnnic-form md unnnic-multi-select__input">
56
- <!--v-if-->
57
- <div data-v-a0d36167="" data-v-d890ad85="" class="text-input size--md unnnic-multi-select__input unnnic-form-input" mask=""><input data-v-86533b41="" data-v-a0d36167="" class="unnnic-multi-select__input unnnic-form-input input-itself input size-md normal input--has-icon-right input--has-clear-icon unnnic-multi-select__input unnnic-form-input input-itself" placeholder="" iconleft="" iconright="keyboard_arrow_down" iconleftclickable="false" iconrightclickable="false" hascloudycolor="false" showclear="true" type="text" readonly="" value="Option 1, Option 2">
58
- <!--v-if-->
59
- <section data-v-a0d36167="" class="icon-right-container"><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--color-gray-700 unnnic-icon-size--ant unnnic--clickable icon-clear" data-testid="material-icon" translate="no">close</span><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--color-gray-700 unnnic-icon-size--ant icon-right" data-testid="material-icon" translate="no">keyboard_arrow_down</span></section>
60
- </div>
61
- <section data-v-d890ad85="" class="unnnic-form__hints-container">
62
- <section data-v-d890ad85="" class="unnnic-form__message-container">
63
- <!--v-if-->
64
- <!--v-if-->
65
- </section>
66
- <!--v-if-->
67
- </section>
68
- </div>
69
- </div>
70
- <!--v-if-->
71
- </section>
72
- </div>"
73
- `;
74
-
75
- exports[`UnnnicMultiSelect.vue > snapshot testing > matches snapshot with search enabled 1`] = `
76
- "<div data-v-de5c711a="" class="unnnic-multi-select">
77
- <section data-v-5a3125ac="" data-v-de5c711a="" class="unnnic-popover">
78
- <div data-v-5a3125ac="" class="unnnic-popover__trigger" data-testid="popover-trigger">
79
- <div data-v-d890ad85="" data-v-de5c711a="" class="unnnic-form md unnnic-multi-select__input">
80
- <!--v-if-->
81
- <div data-v-a0d36167="" data-v-d890ad85="" class="text-input size--md unnnic-multi-select__input unnnic-form-input" mask=""><input data-v-86533b41="" data-v-a0d36167="" class="unnnic-multi-select__input unnnic-form-input input-itself input size-md normal input--has-icon-right input--has-clear-icon unnnic-multi-select__input unnnic-form-input input-itself" placeholder="" iconleft="" iconright="keyboard_arrow_down" iconleftclickable="false" iconrightclickable="false" hascloudycolor="false" showclear="true" type="text" readonly="" value="">
82
- <!--v-if-->
83
- <section data-v-a0d36167="" class="icon-right-container"><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--ant unnnic--clickable icon-clear" data-testid="material-icon" translate="no">close</span><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--ant icon-right" data-testid="material-icon" translate="no">keyboard_arrow_down</span></section>
84
- </div>
85
- <section data-v-d890ad85="" class="unnnic-form__hints-container">
86
- <section data-v-d890ad85="" class="unnnic-form__message-container">
87
- <!--v-if-->
88
- <!--v-if-->
89
- </section>
90
- <!--v-if-->
91
- </section>
92
- </div>
93
- </div>
94
- <!--v-if-->
95
- </section>
96
- </div>"
97
- `;
98
-
99
- exports[`UnnnicMultiSelect.vue > snapshot testing > matches snapshot with selected values 1`] = `
100
- "<div data-v-de5c711a="" class="unnnic-multi-select">
101
- <section data-v-5a3125ac="" data-v-de5c711a="" class="unnnic-popover">
102
- <div data-v-5a3125ac="" class="unnnic-popover__trigger" data-testid="popover-trigger">
103
- <div data-v-d890ad85="" data-v-de5c711a="" class="unnnic-form md unnnic-multi-select__input">
104
- <!--v-if-->
105
- <div data-v-a0d36167="" data-v-d890ad85="" class="text-input size--md unnnic-multi-select__input unnnic-form-input" mask=""><input data-v-86533b41="" data-v-a0d36167="" class="unnnic-multi-select__input unnnic-form-input input-itself input size-md normal input--has-icon-right input--has-clear-icon unnnic-multi-select__input unnnic-form-input input-itself" placeholder="" iconleft="" iconright="keyboard_arrow_down" iconleftclickable="false" iconrightclickable="false" hascloudycolor="false" showclear="true" type="text" readonly="" value="Option 1">
106
- <!--v-if-->
107
- <section data-v-a0d36167="" class="icon-right-container"><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--color-gray-700 unnnic-icon-size--ant unnnic--clickable icon-clear" data-testid="material-icon" translate="no">close</span><span data-v-26446d8e="" data-v-a0d36167="" class="material-symbols-rounded unnnic-icon-scheme--color-gray-700 unnnic-icon-size--ant icon-right" data-testid="material-icon" translate="no">keyboard_arrow_down</span></section>
108
- </div>
109
- <section data-v-d890ad85="" class="unnnic-form__hints-container">
110
- <section data-v-d890ad85="" class="unnnic-form__message-container">
111
- <!--v-if-->
112
- <!--v-if-->
113
- </section>
114
- <!--v-if-->
115
- </section>
116
- </div>
117
- </div>
118
- <!--v-if-->
119
- </section>
120
- </div>"
121
- `;
@@ -1,51 +0,0 @@
1
- // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
-
3
- exports[`MultiSelectOption.vue > snapshot testing > matches snapshot with active state 1`] = `
4
- "<div data-v-72fb6e0d="" class="unnnic-multi-select-option">
5
- <section data-v-18939422="" data-v-72fb6e0d="" class="unnnic-checkbox-wrapper"><label data-v-18939422=""><input data-v-18939422="" class="unnnic-checkbox" type="checkbox" checked="">
6
- <p data-v-18939422="" class="unnnic-checkbox__label" data-testid="checkbox-text-right">Test Option</p>
7
- </label>
8
- <!--v-if-->
9
- </section>
10
- </div>"
11
- `;
12
-
13
- exports[`MultiSelectOption.vue > snapshot testing > matches snapshot with both active and disabled states 1`] = `
14
- "<div data-v-72fb6e0d="" class="unnnic-multi-select-option">
15
- <section data-v-18939422="" data-v-72fb6e0d="" class="unnnic-checkbox-wrapper"><label data-v-18939422=""><input data-v-18939422="" class="unnnic-checkbox" type="checkbox" disabled="" checked="">
16
- <p data-v-18939422="" class="unnnic-checkbox__label unnnic-checkbox__label--disabled" data-testid="checkbox-text-right">Test Option</p>
17
- </label>
18
- <!--v-if-->
19
- </section>
20
- </div>"
21
- `;
22
-
23
- exports[`MultiSelectOption.vue > snapshot testing > matches snapshot with default props 1`] = `
24
- "<div data-v-72fb6e0d="" class="unnnic-multi-select-option">
25
- <section data-v-18939422="" data-v-72fb6e0d="" class="unnnic-checkbox-wrapper"><label data-v-18939422=""><input data-v-18939422="" class="unnnic-checkbox" type="checkbox">
26
- <p data-v-18939422="" class="unnnic-checkbox__label" data-testid="checkbox-text-right">Test Option</p>
27
- </label>
28
- <!--v-if-->
29
- </section>
30
- </div>"
31
- `;
32
-
33
- exports[`MultiSelectOption.vue > snapshot testing > matches snapshot with disabled state 1`] = `
34
- "<div data-v-72fb6e0d="" class="unnnic-multi-select-option">
35
- <section data-v-18939422="" data-v-72fb6e0d="" class="unnnic-checkbox-wrapper"><label data-v-18939422=""><input data-v-18939422="" class="unnnic-checkbox" type="checkbox" disabled="">
36
- <p data-v-18939422="" class="unnnic-checkbox__label unnnic-checkbox__label--disabled" data-testid="checkbox-text-right">Test Option</p>
37
- </label>
38
- <!--v-if-->
39
- </section>
40
- </div>"
41
- `;
42
-
43
- exports[`MultiSelectOption.vue > snapshot testing > matches snapshot with focused state 1`] = `
44
- "<div data-v-72fb6e0d="" class="unnnic-multi-select-option">
45
- <section data-v-18939422="" data-v-72fb6e0d="" class="unnnic-checkbox-wrapper"><label data-v-18939422=""><input data-v-18939422="" class="unnnic-checkbox" type="checkbox">
46
- <p data-v-18939422="" class="unnnic-checkbox__label" data-testid="checkbox-text-right">Test Option</p>
47
- </label>
48
- <!--v-if-->
49
- </section>
50
- </div>"
51
- `;
@@ -1,221 +0,0 @@
1
- <template>
2
- <div class="unnnic-multi-select">
3
- <UnnnicPopover
4
- v-model="openPopover"
5
- :popoverBalloonProps="{ maxHeight: calculatedMaxHeight }"
6
- >
7
- <template #trigger>
8
- <UnnnicInput
9
- :modelValue="inputValue"
10
- class="unnnic-multi-select__input"
11
- readonly
12
- :forceActiveStatus="openPopover"
13
- :size="props.size"
14
- :placeholder="props.placeholder"
15
- :label="props.label"
16
- :errors="props.errors"
17
- :message="props.message"
18
- :iconRight="openPopover ? 'keyboard_arrow_up' : 'keyboard_arrow_down'"
19
- :disabled="props.disabled"
20
- showClear
21
- @clear="emit('update:modelValue', [])"
22
- />
23
- </template>
24
- <template #content>
25
- <div class="unnnic-multi-select__content">
26
- <UnnnicInput
27
- v-if="props.enableSearch"
28
- class="unnnic-multi-select__input-search"
29
- :modelValue="props.search"
30
- :placeholder="$t('search')"
31
- iconLeft="search"
32
- @update:model-value="handleSearch"
33
- />
34
- <div class="unnnic-multi-select__options">
35
- <UnnnicMultiSelectOption
36
- v-for="(option, index) in filteredOptions"
37
- :key="option[props.itemValue]"
38
- :data-option-index="index"
39
- :label="option[props.itemLabel]"
40
- :active="getActivatedOptionStatus(option)"
41
- :focused="focusedOptionIndex === index"
42
- :disabled="option.disabled"
43
- @update:model-value="handleSelectOption(option, $event)"
44
- />
45
- </div>
46
- </div>
47
- </template>
48
- </UnnnicPopover>
49
- </div>
50
- </template>
51
-
52
- <script setup lang="ts">
53
- import { computed, ref } from 'vue';
54
-
55
- import UnnnicPopover from '../Popover/index.vue';
56
- import UnnnicInput from '../Input/Input.vue';
57
- import UnnnicMultiSelectOption from './MultSelectOption.vue';
58
-
59
- defineOptions({
60
- name: 'UnnnicMultiSelect',
61
- });
62
-
63
- interface MultiSelectProps {
64
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
65
- options: Array<{ [key: string]: any }>;
66
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
- modelValue: any[];
68
- returnObject?: boolean;
69
- itemLabel?: string;
70
- itemValue?: string;
71
- placeholder?: string;
72
- label?: string;
73
- type?: 'normal' | 'error';
74
- errors?: string | Array<string>;
75
- message?: string;
76
- size?: 'sm' | 'md';
77
- optionsLines?: number;
78
- enableSearch?: boolean;
79
- search?: string;
80
- locale?: string;
81
- disabled?: boolean;
82
- }
83
-
84
- const props = withDefaults(defineProps<MultiSelectProps>(), {
85
- size: 'md',
86
- type: 'normal',
87
- placeholder: '',
88
- optionsLines: 5,
89
- returnObject: false,
90
- itemLabel: 'label',
91
- itemValue: 'value',
92
- locale: 'en',
93
- enableSearch: false,
94
- disabled: false,
95
- label: '',
96
- errors: '',
97
- message: '',
98
- search: '',
99
- });
100
-
101
- const openPopover = ref(false);
102
-
103
- const calculatedMaxHeight = computed(() => {
104
- if (!props.options || props.options.length === 0) return 'unset';
105
- const popoverSearchGap = props.enableSearch ? 16 : 0;
106
- const popoverGap = 24;
107
- const fieldsHeight = 22 * props.optionsLines;
108
- const size = fieldsHeight + (popoverGap * props.optionsLines - 2);
109
- return `${props.enableSearch ? size + 51 + popoverSearchGap : size}px`;
110
- });
111
-
112
- const emit = defineEmits<{
113
- 'update:modelValue': [unknown[]];
114
- 'update:search': [string];
115
- }>();
116
-
117
- const focusedOptionIndex = ref<number>(-1);
118
-
119
- const selectedItems = computed(() => {
120
- if (props.returnObject) return props.modelValue;
121
-
122
- const modelValueValues = props.returnObject
123
- ? props.modelValue.map((item) => item[props.itemValue])
124
- : props.modelValue;
125
-
126
- return props.options.filter((option) =>
127
- modelValueValues.includes(option[props.itemValue]),
128
- );
129
- });
130
- const inputValue = computed(() => {
131
- return selectedItems.value.map((item) => item[props.itemLabel]).join(', ');
132
- });
133
-
134
- const filteredOptions = computed(() => {
135
- if (!props.enableSearch || !props.search) return props.options;
136
-
137
- return props.options.filter(
138
- (option) =>
139
- option[props.itemLabel]
140
- .toLowerCase()
141
- .includes(props.search?.toLowerCase()) ||
142
- option[props.itemValue]
143
- .toLowerCase()
144
- .includes(props.search?.toLowerCase()),
145
- );
146
- });
147
-
148
- const handleSearch = (value: string) => {
149
- emit('update:search', value);
150
- };
151
-
152
- const getActivatedOptionStatus = (option: (typeof props.options)[number]) => {
153
- if (props.returnObject) {
154
- return props.modelValue.find(
155
- (item) => item[props.itemValue] === option[props.itemValue],
156
- );
157
- }
158
- return props.modelValue.includes(option[props.itemValue]);
159
- };
160
-
161
- const handleSelectOption = (
162
- option: (typeof props.options)[number],
163
- selected: boolean,
164
- ) => {
165
- if (selected) {
166
- emit(
167
- 'update:modelValue',
168
- props.returnObject
169
- ? [...props.modelValue, option]
170
- : [...props.modelValue, option[props.itemValue]],
171
- );
172
- } else {
173
- emit(
174
- 'update:modelValue',
175
- props.returnObject
176
- ? props.modelValue.filter(
177
- (item) => item[props.itemValue] !== option[props.itemValue],
178
- )
179
- : props.modelValue.filter((item) => item !== option[props.itemValue]),
180
- );
181
- }
182
- };
183
- </script>
184
-
185
- <style lang="scss" scoped>
186
- @use '@/assets/scss/unnnic' as *;
187
-
188
- :deep(.unnnic-multi-select__input) {
189
- cursor: pointer;
190
- }
191
-
192
- :deep(.unnnic-multi-select__input-search) {
193
- > .icon-left {
194
- color: $unnnic-color-fg-base;
195
- }
196
- }
197
-
198
- :deep(.unnnic-multi-select__input) {
199
- > .icon-right {
200
- color: $unnnic-color-fg-base;
201
- }
202
- }
203
-
204
- .unnnic-multi-select {
205
- &__content {
206
- display: flex;
207
- flex-direction: column;
208
- padding: 0;
209
- margin: 0;
210
- gap: $unnnic-space-4;
211
- }
212
-
213
- &__options {
214
- padding: 0;
215
- margin: 0;
216
- display: flex;
217
- flex-direction: column;
218
- gap: $unnnic-space-6;
219
- }
220
- }
221
- </style>