@weni/unnnic-system 3.31.1 → 3.32.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.
- package/dist/index.d.ts +1518 -4106
- package/dist/style.css +1 -1
- package/dist/unnnic.mjs +12879 -13865
- package/dist/unnnic.umd.js +36 -36
- package/package.json +1 -1
- package/src/components/index.ts +1 -41
- package/src/stories/PageHeader.stories.js +11 -5
- package/src/types/index.d.ts +0 -1
- package/src/components/Button/ButtonIcon.vue +0 -106
- package/src/components/Button/__tests__/ButtonIcon.spec.js +0 -56
- package/src/components/Carousel/Carousel.vue +0 -59
- package/src/components/Carousel/TagCarousel.vue +0 -209
- package/src/components/Carousel/__tests__/TagCarousel.spec.js +0 -258
- package/src/components/ChatText/ChatText.vue +0 -179
- package/src/components/CircleProgressBar/CircleProgressBar.vue +0 -150
- package/src/components/Indicator/Indicator.vue +0 -110
- package/src/components/InputNext/InputNext.vue +0 -282
- package/src/components/ModalUpload/ModalUpload.vue +0 -181
- package/src/components/MoodRating/MoodRating.vue +0 -130
- package/src/components/Slider/Slider.vue +0 -438
- package/src/components/Slider/__tests__/Slider.spec.js +0 -321
- package/src/components/StarRating/StarRating.vue +0 -76
- package/src/components/TransitionRipple/TransitionRipple.vue +0 -126
- package/src/stories/ButtonIcon.stories.js +0 -31
- package/src/stories/Carousel.stories.js +0 -45
- package/src/stories/ChatText.stories.js +0 -57
- package/src/stories/CircleProgressBar.stories.js +0 -15
- package/src/stories/Indicator.stories.js +0 -18
- package/src/stories/InputNext.stories.js +0 -92
- package/src/stories/ModalUpload.stories.js +0 -25
- package/src/stories/MoodRating.stories.js +0 -33
- package/src/stories/Slider.stories.js +0 -23
- package/src/stories/StarRating.stories.js +0 -38
- package/src/stories/TransitionRipple.stories.js +0 -35
package/package.json
CHANGED
package/src/components/index.ts
CHANGED
|
@@ -2,10 +2,8 @@ import type { Component } from 'vue';
|
|
|
2
2
|
import { unnnicFontSize as fontSize } from './config';
|
|
3
3
|
import formElement from './FormElement/FormElement.vue';
|
|
4
4
|
import input from './Input/Input.vue';
|
|
5
|
-
import inputNext from './InputNext/InputNext.vue';
|
|
6
5
|
import inputDatePicker from './InputDatePicker/InputDatePicker.vue';
|
|
7
6
|
import button from './Button/Button.vue';
|
|
8
|
-
import buttonIcon from './Button/ButtonIcon.vue';
|
|
9
7
|
import sidebar from './Sidebar/index.vue';
|
|
10
8
|
import sidebarItem from './Sidebar/SidebarItem.vue';
|
|
11
9
|
import table from './Table/Table.vue';
|
|
@@ -32,7 +30,6 @@ import radio from './Radio/Radio.vue';
|
|
|
32
30
|
import radioGroup from './RadioGroup/RadioGroup.vue';
|
|
33
31
|
import languageSelect from './Dropdown/LanguageSelect.vue';
|
|
34
32
|
import modal from './Modal/Modal.vue';
|
|
35
|
-
import modalUpload from './ModalUpload/ModalUpload.vue';
|
|
36
33
|
import { callAlert, callModal } from '../utils/call';
|
|
37
34
|
import selectSmart from './SelectSmart/SelectSmart.vue';
|
|
38
35
|
import select from './Select/index.vue';
|
|
@@ -44,9 +41,7 @@ import alert from './Alert/Alert.vue';
|
|
|
44
41
|
// import autocompleteSelect from './AutocompleteSelect/AutocompleteSelect.vue';
|
|
45
42
|
import tag from './Tag/Tag.vue';
|
|
46
43
|
import accordion from './Accordion/Accordion.vue';
|
|
47
|
-
import
|
|
48
|
-
import skeletonLoading from './SkeletonLoading/SkeletonLoading.vue'; // TODO: Unbreak this component
|
|
49
|
-
import carousel from './Carousel/Carousel.vue';
|
|
44
|
+
import skeletonLoading from './SkeletonLoading/SkeletonLoading.vue';
|
|
50
45
|
import label from './Label/Label.vue';
|
|
51
46
|
import tab from './Tab/Tab.vue';
|
|
52
47
|
import tabsExpanded from './TabsExpanded/TabsExpanded.vue';
|
|
@@ -55,23 +50,18 @@ import comment from './Comment/Comment.vue';
|
|
|
55
50
|
import datePicker from './DatePicker/DatePicker.vue';
|
|
56
51
|
import breadcrumb from './Breadcrumb/Breadcrumb.vue';
|
|
57
52
|
import Switch from './Switch/Switch.vue';
|
|
58
|
-
import Slider from './Slider/Slider.vue';
|
|
59
53
|
import DataArea from './DataArea/DataArea.vue';
|
|
60
54
|
import Pagination from './Pagination/Pagination.vue';
|
|
61
55
|
import DropArea from './DropArea/DropArea.vue';
|
|
62
56
|
import UploadArea from './UploadArea/UploadArea.vue';
|
|
63
57
|
import ImportCard from './ImportCard/ImportCard.vue';
|
|
64
58
|
import DateFilter from './DateFilter/DateFilter.vue';
|
|
65
|
-
import ChatText from './ChatText/ChatText.vue';
|
|
66
59
|
import TextArea from './TextArea/TextArea.vue';
|
|
67
60
|
import CardNumber from './CardNumber/CardNumber.vue';
|
|
68
61
|
import chartRainbow from './ChartRainbow/ChartRainbow.vue';
|
|
69
62
|
import chartBar from './ChartBar/ChartBar.vue';
|
|
70
63
|
import chartLine from './ChartLine/ChartLine.vue';
|
|
71
|
-
import moodRating from './MoodRating/MoodRating.vue';
|
|
72
|
-
import starRating from './StarRating/StarRating.vue';
|
|
73
64
|
import audioRecorder from './AudioRecorder/AudioRecorder.vue';
|
|
74
|
-
import circleProgressBar from './CircleProgressBar/CircleProgressBar.vue';
|
|
75
65
|
import progressBar from './ProgressBar/ProgressBar.vue';
|
|
76
66
|
import ChatsUserAvatar from './ChatsUserAvatar/ChatsUserAvatar.vue';
|
|
77
67
|
import ChartMultiLine from './ChartMultiLine/ChartMultiLine.vue';
|
|
@@ -131,10 +121,8 @@ export interface ComponentsMap {
|
|
|
131
121
|
export const components: ComponentsMap = {
|
|
132
122
|
unnnicFormElement: formElement,
|
|
133
123
|
unnnicInput: input,
|
|
134
|
-
unnnicInputNext: inputNext,
|
|
135
124
|
unnnicInputDatePicker: inputDatePicker,
|
|
136
125
|
unnnicButton: button,
|
|
137
|
-
unnnicButtonIcon: buttonIcon,
|
|
138
126
|
unnnicSidebar: sidebar,
|
|
139
127
|
unnnicSidebarItem: sidebarItem,
|
|
140
128
|
unnnicTable: table,
|
|
@@ -167,7 +155,6 @@ export const components: ComponentsMap = {
|
|
|
167
155
|
unnnicModal: modal,
|
|
168
156
|
unnnicModalNext: ModalNext,
|
|
169
157
|
unnnicModalDialog: ModalDialog,
|
|
170
|
-
unnnicModalUpload: modalUpload,
|
|
171
158
|
unnnicSelectSmart: selectSmart,
|
|
172
159
|
unnnicSelect: select,
|
|
173
160
|
unnnicSelectItem: selectItem,
|
|
@@ -180,9 +167,7 @@ export const components: ComponentsMap = {
|
|
|
180
167
|
// unnnicAutocompleteSelect: autocompleteSelect,
|
|
181
168
|
unnnicTag: tag,
|
|
182
169
|
unnnicAccordion: accordion,
|
|
183
|
-
unnnicIndicator: indicator,
|
|
184
170
|
unnnicSkeletonLoading: skeletonLoading,
|
|
185
|
-
unnnicCarousel: carousel,
|
|
186
171
|
unnnicLabel: label,
|
|
187
172
|
unnnicTab: tab,
|
|
188
173
|
unnnicTabsExpanded: tabsExpanded,
|
|
@@ -191,23 +176,18 @@ export const components: ComponentsMap = {
|
|
|
191
176
|
unnnicDatePicker: datePicker,
|
|
192
177
|
unnnicBreadcrumb: breadcrumb,
|
|
193
178
|
unnnicSwitch: Switch,
|
|
194
|
-
unnnicSlider: Slider,
|
|
195
179
|
unnnicDataArea: DataArea,
|
|
196
180
|
unnnicPagination: Pagination,
|
|
197
181
|
unnnicDropArea: DropArea,
|
|
198
182
|
unnnicUploadArea: UploadArea,
|
|
199
183
|
unnnicImportCard: ImportCard,
|
|
200
184
|
unnnicDateFilter: DateFilter,
|
|
201
|
-
unnnicChatText: ChatText,
|
|
202
185
|
unnnicTextArea: TextArea,
|
|
203
186
|
unnnicCardNumber: CardNumber,
|
|
204
187
|
unnnicChartRainbow: chartRainbow,
|
|
205
188
|
unnnicChartBar: chartBar,
|
|
206
189
|
unnnicChartLine: chartLine,
|
|
207
|
-
unnnicMoodRating: moodRating,
|
|
208
|
-
unnnicStarRating: starRating,
|
|
209
190
|
unnnicAudioRecorder: audioRecorder,
|
|
210
|
-
unnnicCircleProgressBar: circleProgressBar,
|
|
211
191
|
unnnicProgressBar: progressBar,
|
|
212
192
|
unnnicChatsUserAvatar: ChatsUserAvatar,
|
|
213
193
|
unnnicChartMultiLine: ChartMultiLine,
|
|
@@ -258,10 +238,8 @@ export const components: ComponentsMap = {
|
|
|
258
238
|
export const unnnicFontSize = fontSize;
|
|
259
239
|
export const unnnicFormElement = formElement;
|
|
260
240
|
export const unnnicInput = input;
|
|
261
|
-
export const unnnicInputNext = inputNext;
|
|
262
241
|
export const unnnicInputDatePicker = inputDatePicker as VueComponent;
|
|
263
242
|
export const unnnicButton = button;
|
|
264
|
-
export const unnnicButtonIcon = buttonIcon;
|
|
265
243
|
export const unnnicSidebar = sidebar;
|
|
266
244
|
export const unnnicSidebarItem = sidebarItem;
|
|
267
245
|
export const unnnicTable = table;
|
|
@@ -294,7 +272,6 @@ export const unnniclanguageSelect = languageSelect as VueComponent;
|
|
|
294
272
|
export const unnnicModal = modal;
|
|
295
273
|
export const unnnicModalDialog = ModalDialog;
|
|
296
274
|
export const unnnicModalNext = ModalNext;
|
|
297
|
-
export const unnnicModalUpload = modalUpload;
|
|
298
275
|
export const unnnicSelectSmart = selectSmart as VueComponent;
|
|
299
276
|
export const unnnicSelect = select as VueComponent;
|
|
300
277
|
export const unnnicSelectItem = selectItem;
|
|
@@ -307,9 +284,7 @@ export const unnnicCallModal = (props: any) => callModal(props);
|
|
|
307
284
|
// export const unnnicAutocompleteSelect = autocompleteSelect;
|
|
308
285
|
export const unnnicTag = tag;
|
|
309
286
|
export const unnnicAccordion = accordion;
|
|
310
|
-
export const unnnicIndicator = indicator;
|
|
311
287
|
export const unnnicSkeletonLoading = skeletonLoading;
|
|
312
|
-
export const unnnicCarousel = carousel;
|
|
313
288
|
export const unnnicLabel = label as VueComponent;
|
|
314
289
|
export const unnnicTab = tab;
|
|
315
290
|
export const unnnicTabsExpanded = tabsExpanded;
|
|
@@ -318,23 +293,18 @@ export const unnnicComment = comment;
|
|
|
318
293
|
export const unnnicDatePicker = datePicker;
|
|
319
294
|
export const unnnicBreadcrumb = breadcrumb;
|
|
320
295
|
export const unnnicSwitch = Switch;
|
|
321
|
-
export const unnnicSlider = Slider;
|
|
322
296
|
export const unnnicDataArea = DataArea;
|
|
323
297
|
export const unnnicPagination = Pagination;
|
|
324
298
|
export const unnnicDropArea = DropArea;
|
|
325
299
|
export const unnnicUploadArea = UploadArea;
|
|
326
300
|
export const unnnicImportCard = ImportCard;
|
|
327
301
|
export const unnnicDateFilter = DateFilter;
|
|
328
|
-
export const unnnicChatText = ChatText;
|
|
329
302
|
export const unnnicTextArea = TextArea;
|
|
330
303
|
export const unnnicCardNumber = CardNumber;
|
|
331
304
|
export const unnnicChartRainbow = chartRainbow;
|
|
332
305
|
export const unnnicChartBar = chartBar;
|
|
333
306
|
export const unnnicChartLine = chartLine;
|
|
334
|
-
export const unnnicMoodRating = moodRating;
|
|
335
|
-
export const unnnicStarRating = starRating;
|
|
336
307
|
export const unnnicAudioRecorder = audioRecorder;
|
|
337
|
-
export const unnnicCircleProgressBar = circleProgressBar;
|
|
338
308
|
export const unnnicProgressBar = progressBar;
|
|
339
309
|
export const unnnicChatsUserAvatar = ChatsUserAvatar;
|
|
340
310
|
export const unnnicChartMultiLine = ChartMultiLine;
|
|
@@ -384,10 +354,8 @@ export const unnnicDrawerDescription = DrawerDescription;
|
|
|
384
354
|
export const UnnnicFontSize = fontSize;
|
|
385
355
|
export const UnnnicFormElement = formElement;
|
|
386
356
|
export const UnnnicInput = input;
|
|
387
|
-
export const UnnnicInputNext = inputNext;
|
|
388
357
|
export const UnnnicInputDatePicker = inputDatePicker as VueComponent;
|
|
389
358
|
export const UnnnicButton = button;
|
|
390
|
-
export const UnnnicButtonIcon = buttonIcon;
|
|
391
359
|
export const UnnnicSidebar = sidebar;
|
|
392
360
|
export const UnnnicSidebarItem = sidebarItem;
|
|
393
361
|
export const UnnnicTable = table;
|
|
@@ -420,7 +388,6 @@ export const UnnniclanguageSelect = languageSelect as VueComponent;
|
|
|
420
388
|
export const UnnnicModal = modal;
|
|
421
389
|
export const UnnnicModalDialog = ModalDialog;
|
|
422
390
|
export const UnnnicModalNext = ModalNext;
|
|
423
|
-
export const UnnnicModalUpload = modalUpload;
|
|
424
391
|
export const UnnnicSelectSmart = selectSmart as VueComponent;
|
|
425
392
|
export const UnnnicSelect = select as VueComponent;
|
|
426
393
|
export const UnnnicSelectItem = selectItem;
|
|
@@ -433,9 +400,7 @@ export const UnnnicCallModal = (props: any) => callModal(props);
|
|
|
433
400
|
// export const UnnnicAutocompleteSelect = autocompleteSelect;
|
|
434
401
|
export const UnnnicTag = tag;
|
|
435
402
|
export const UnnnicAccordion = accordion;
|
|
436
|
-
export const UnnnicIndicator = indicator;
|
|
437
403
|
export const UnnnicSkeletonLoading = skeletonLoading;
|
|
438
|
-
export const UnnnicCarousel = carousel;
|
|
439
404
|
export const UnnnicLabel = label as VueComponent;
|
|
440
405
|
export const UnnnicTab = tab;
|
|
441
406
|
export const UnnnicTabsExpanded = tabsExpanded;
|
|
@@ -444,23 +409,18 @@ export const UnnnicComment = comment;
|
|
|
444
409
|
export const UnnnicDatePicker = datePicker;
|
|
445
410
|
export const UnnnicBreadcrumb = breadcrumb;
|
|
446
411
|
export const UnnnicSwitch = Switch;
|
|
447
|
-
export const UnnnicSlider = Slider;
|
|
448
412
|
export const UnnnicDataArea = DataArea;
|
|
449
413
|
export const UnnnicPagination = Pagination;
|
|
450
414
|
export const UnnnicDropArea = DropArea;
|
|
451
415
|
export const UnnnicUploadArea = UploadArea;
|
|
452
416
|
export const UnnnicImportCard = ImportCard;
|
|
453
417
|
export const UnnnicDateFilter = DateFilter;
|
|
454
|
-
export const UnnnicChatText = ChatText;
|
|
455
418
|
export const UnnnicTextArea = TextArea;
|
|
456
419
|
export const UnnnicCardNumber = CardNumber;
|
|
457
420
|
export const UnnnicChartRainbow = chartRainbow;
|
|
458
421
|
export const UnnnicChartBar = chartBar;
|
|
459
422
|
export const UnnnicChartLine = chartLine;
|
|
460
|
-
export const UnnnicMoodRating = moodRating;
|
|
461
|
-
export const UnnnicStarRating = starRating;
|
|
462
423
|
export const UnnnicAudioRecorder = audioRecorder;
|
|
463
|
-
export const UnnnicCircleProgressBar = circleProgressBar;
|
|
464
424
|
export const UnnnicProgressBar = progressBar;
|
|
465
425
|
export const UnnnicChatsUserAvatar = ChatsUserAvatar;
|
|
466
426
|
export const UnnnicChartMultiLine = ChartMultiLine;
|
|
@@ -3,7 +3,7 @@ import { action } from 'storybook/actions';
|
|
|
3
3
|
import PageHeader from '../components/PageHeader/PageHeader.vue';
|
|
4
4
|
import UnnnicButton from '../components/Button/Button.vue';
|
|
5
5
|
import UnnnicTag from '../components/Tag/Tag.vue';
|
|
6
|
-
import
|
|
6
|
+
import UnnnicSelect from '../components/Select/index.vue';
|
|
7
7
|
import UnnnicIcon from '../components/Icon.vue';
|
|
8
8
|
|
|
9
9
|
import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs';
|
|
@@ -193,7 +193,7 @@ export const WithSelect = {
|
|
|
193
193
|
description="Description"
|
|
194
194
|
>
|
|
195
195
|
<template #actions>
|
|
196
|
-
<
|
|
196
|
+
<UnnnicSelect placeholder="Select" :options="options" />
|
|
197
197
|
</template>
|
|
198
198
|
</UnnnicPageHeader>
|
|
199
199
|
`,
|
|
@@ -201,14 +201,20 @@ export const WithSelect = {
|
|
|
201
201
|
},
|
|
202
202
|
},
|
|
203
203
|
render: (args) => ({
|
|
204
|
-
components: { PageHeader,
|
|
204
|
+
components: { PageHeader, UnnnicSelect },
|
|
205
205
|
setup() {
|
|
206
|
-
return {
|
|
206
|
+
return {
|
|
207
|
+
args,
|
|
208
|
+
options: [
|
|
209
|
+
{ label: 'Option 1', value: 'option1' },
|
|
210
|
+
{ label: 'Option 2', value: 'option2' },
|
|
211
|
+
],
|
|
212
|
+
};
|
|
207
213
|
},
|
|
208
214
|
template: `
|
|
209
215
|
<PageHeader v-bind="args">
|
|
210
216
|
<template #actions>
|
|
211
|
-
<
|
|
217
|
+
<UnnnicSelect placeholder="Select" :options="options" />
|
|
212
218
|
</template>
|
|
213
219
|
</PageHeader>
|
|
214
220
|
`,
|
package/src/types/index.d.ts
CHANGED
|
@@ -36,7 +36,6 @@ export declare const unnnicTag: Component;
|
|
|
36
36
|
export declare const unnnicTab: Component;
|
|
37
37
|
export declare const unnnicAccordion: Component;
|
|
38
38
|
export declare const unnnicCollapse: Component;
|
|
39
|
-
export declare const unnnicCarousel: Component;
|
|
40
39
|
export declare const unnnicSidebar: Component;
|
|
41
40
|
export declare const unnnicDrawer: Component;
|
|
42
41
|
export declare const unnnicProgressBar: Component;
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<button
|
|
3
|
-
:class="['button-icon', size, type]"
|
|
4
|
-
v-bind="$attrs"
|
|
5
|
-
>
|
|
6
|
-
<UnnnicIcon
|
|
7
|
-
:icon="icon"
|
|
8
|
-
:scheme="iconScheme"
|
|
9
|
-
size="ant"
|
|
10
|
-
></UnnnicIcon>
|
|
11
|
-
</button>
|
|
12
|
-
</template>
|
|
13
|
-
|
|
14
|
-
<script>
|
|
15
|
-
import UnnnicIcon from '../Icon.vue';
|
|
16
|
-
|
|
17
|
-
export default {
|
|
18
|
-
components: {
|
|
19
|
-
UnnnicIcon,
|
|
20
|
-
},
|
|
21
|
-
|
|
22
|
-
props: {
|
|
23
|
-
type: {
|
|
24
|
-
type: String,
|
|
25
|
-
default: 'secondary',
|
|
26
|
-
},
|
|
27
|
-
|
|
28
|
-
size: {
|
|
29
|
-
type: String,
|
|
30
|
-
required: true,
|
|
31
|
-
validator(value) {
|
|
32
|
-
return ['small', 'large'].includes(value);
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
|
|
36
|
-
icon: {
|
|
37
|
-
type: String,
|
|
38
|
-
required: true,
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
|
-
|
|
42
|
-
computed: {
|
|
43
|
-
iconScheme() {
|
|
44
|
-
if (this.type === 'primary') {
|
|
45
|
-
return 'fg-inverted';
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return 'fg-emphasized';
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
};
|
|
52
|
-
</script>
|
|
53
|
-
|
|
54
|
-
<style lang="scss" scoped>
|
|
55
|
-
@use '@/assets/scss/unnnic' as *;
|
|
56
|
-
|
|
57
|
-
.button-icon {
|
|
58
|
-
border: 0;
|
|
59
|
-
cursor: pointer;
|
|
60
|
-
border-radius: $unnnic-border-radius-sm;
|
|
61
|
-
|
|
62
|
-
&.small {
|
|
63
|
-
padding: $unnnic-spacing-inset-nano;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
&.large {
|
|
67
|
-
padding: $unnnic-spacing-inset-xs;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
&.primary {
|
|
71
|
-
background-color: $unnnic-color-fg-emphasized;
|
|
72
|
-
|
|
73
|
-
&:hover {
|
|
74
|
-
opacity: $unnnic-opacity-level-clear;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
&.secondary {
|
|
79
|
-
background-color: rgba($unnnic-color-bg-muted, $unnnic-opacity-level-light);
|
|
80
|
-
position: relative;
|
|
81
|
-
|
|
82
|
-
&:before {
|
|
83
|
-
content: ' ';
|
|
84
|
-
position: absolute;
|
|
85
|
-
left: 0;
|
|
86
|
-
right: 0;
|
|
87
|
-
top: 0;
|
|
88
|
-
bottom: 0;
|
|
89
|
-
border: 1px solid $unnnic-color-border-emphasized;
|
|
90
|
-
border-radius: inherit;
|
|
91
|
-
pointer-events: none;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
&:hover {
|
|
95
|
-
background-color: rgba(
|
|
96
|
-
$unnnic-color-bg-muted,
|
|
97
|
-
$unnnic-opacity-level-overlay
|
|
98
|
-
);
|
|
99
|
-
|
|
100
|
-
&:before {
|
|
101
|
-
border: 0;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
</style>
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { mount } from '@vue/test-utils';
|
|
3
|
-
|
|
4
|
-
import ButtonIcon from '../ButtonIcon.vue';
|
|
5
|
-
|
|
6
|
-
const mountButtonIcon = (props = {}) =>
|
|
7
|
-
mount(ButtonIcon, {
|
|
8
|
-
props: {
|
|
9
|
-
size: 'large',
|
|
10
|
-
icon: 'search-1',
|
|
11
|
-
...props,
|
|
12
|
-
},
|
|
13
|
-
global: {
|
|
14
|
-
stubs: {
|
|
15
|
-
UnnnicIcon: {
|
|
16
|
-
props: ['icon', 'scheme', 'size'],
|
|
17
|
-
template:
|
|
18
|
-
'<span data-testid="button-icon" :data-icon="icon" :data-scheme="scheme" />',
|
|
19
|
-
},
|
|
20
|
-
},
|
|
21
|
-
},
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
describe('ButtonIcon', () => {
|
|
25
|
-
it('renders with primary type icon scheme', () => {
|
|
26
|
-
const wrapper = mountButtonIcon({ type: 'primary' });
|
|
27
|
-
|
|
28
|
-
expect(
|
|
29
|
-
wrapper.find('[data-testid="button-icon"]').attributes('data-scheme'),
|
|
30
|
-
).toBe('fg-inverted');
|
|
31
|
-
expect(wrapper.classes()).toContain('primary');
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
it('renders with secondary type icon scheme', () => {
|
|
35
|
-
const wrapper = mountButtonIcon({ type: 'secondary' });
|
|
36
|
-
|
|
37
|
-
expect(
|
|
38
|
-
wrapper.find('[data-testid="button-icon"]').attributes('data-scheme'),
|
|
39
|
-
).toBe('fg-emphasized');
|
|
40
|
-
expect(wrapper.classes()).toContain('secondary');
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('applies size class', () => {
|
|
44
|
-
const wrapper = mountButtonIcon({ size: 'small' });
|
|
45
|
-
|
|
46
|
-
expect(wrapper.classes()).toContain('small');
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it('rejects invalid size prop in validator', () => {
|
|
50
|
-
const { validator } = ButtonIcon.props.size;
|
|
51
|
-
|
|
52
|
-
expect(validator('large')).toBe(true);
|
|
53
|
-
expect(validator('small')).toBe(true);
|
|
54
|
-
expect(validator('invalid')).toBe(false);
|
|
55
|
-
});
|
|
56
|
-
});
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<component
|
|
3
|
-
:is="currentComponent"
|
|
4
|
-
class="unnnic-carousel-component"
|
|
5
|
-
v-bind="$attrs"
|
|
6
|
-
:name="name"
|
|
7
|
-
:clickable="clickable"
|
|
8
|
-
:tagItems="tagItems"
|
|
9
|
-
:modelValue="modelValue"
|
|
10
|
-
@selected="$emit('update:model-value', $event)"
|
|
11
|
-
/>
|
|
12
|
-
</template>
|
|
13
|
-
|
|
14
|
-
<script>
|
|
15
|
-
import TagCarousel from './TagCarousel.vue';
|
|
16
|
-
|
|
17
|
-
export default {
|
|
18
|
-
name: 'UnnnicCarousel',
|
|
19
|
-
model: {
|
|
20
|
-
event: 'update:model-value',
|
|
21
|
-
},
|
|
22
|
-
props: {
|
|
23
|
-
modelValue: {
|
|
24
|
-
type: Array,
|
|
25
|
-
default() {
|
|
26
|
-
return [];
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
type: {
|
|
30
|
-
type: String,
|
|
31
|
-
default: 'brand',
|
|
32
|
-
validator(value) {
|
|
33
|
-
return ['brand'].indexOf(value) !== -1;
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
tagItems: {
|
|
37
|
-
type: Array,
|
|
38
|
-
default: () => [],
|
|
39
|
-
},
|
|
40
|
-
name: {
|
|
41
|
-
type: String,
|
|
42
|
-
default: null,
|
|
43
|
-
},
|
|
44
|
-
icon: {
|
|
45
|
-
type: String,
|
|
46
|
-
default: null,
|
|
47
|
-
},
|
|
48
|
-
clickable: {
|
|
49
|
-
type: Boolean,
|
|
50
|
-
default: false,
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
computed: {
|
|
54
|
-
currentComponent() {
|
|
55
|
-
return TagCarousel;
|
|
56
|
-
},
|
|
57
|
-
},
|
|
58
|
-
};
|
|
59
|
-
</script>
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="unnnic-card-tag-carousel">
|
|
3
|
-
<div
|
|
4
|
-
class="unnnic-card-tag-carousel__button unnnic-card-tag-carousel__button--left"
|
|
5
|
-
>
|
|
6
|
-
<div class="unnnic-card-tag-carousel__button__icon">
|
|
7
|
-
<UnnnicIcon
|
|
8
|
-
icon="arrow-left-1-1"
|
|
9
|
-
size="sm"
|
|
10
|
-
:scheme="hasPrev ? 'fg-emphasized' : 'fg-muted'"
|
|
11
|
-
clickable
|
|
12
|
-
@click="handlePrevious"
|
|
13
|
-
/>
|
|
14
|
-
</div>
|
|
15
|
-
<span
|
|
16
|
-
v-show="hasPrev"
|
|
17
|
-
class="unnnic-card-tag-carousel__button__blur unnnic-card-tag-carousel__button__blur--left"
|
|
18
|
-
/>
|
|
19
|
-
</div>
|
|
20
|
-
|
|
21
|
-
<div
|
|
22
|
-
id="scroll"
|
|
23
|
-
class="unnnic-card-tag-carousel__container"
|
|
24
|
-
>
|
|
25
|
-
<div
|
|
26
|
-
v-for="tag in slides"
|
|
27
|
-
:key="tag.id"
|
|
28
|
-
class="unnnic-card-tag-carousel__container__slide"
|
|
29
|
-
>
|
|
30
|
-
<UnnnicTag
|
|
31
|
-
:text="tag.name"
|
|
32
|
-
clickable
|
|
33
|
-
type="brand"
|
|
34
|
-
:disabled="checkIsInclude(tag)"
|
|
35
|
-
class="unnnic-card-tag-carousel__container__slide__item"
|
|
36
|
-
@click="save(tag)"
|
|
37
|
-
/>
|
|
38
|
-
</div>
|
|
39
|
-
</div>
|
|
40
|
-
|
|
41
|
-
<div
|
|
42
|
-
class="unnnic-card-tag-carousel__button unnnic-card-tag-carousel__button--right"
|
|
43
|
-
>
|
|
44
|
-
<span
|
|
45
|
-
v-show="hasNext"
|
|
46
|
-
class="unnnic-card-tag-carousel__button__blur unnnic-card-tag-carousel__button__blur--right"
|
|
47
|
-
/>
|
|
48
|
-
<div class="unnnic-card-tag-carousel__button__icon">
|
|
49
|
-
<UnnnicIcon
|
|
50
|
-
icon="arrow-right-1-1"
|
|
51
|
-
size="sm"
|
|
52
|
-
:scheme="hasNext ? 'fg-emphasized' : 'fg-muted'"
|
|
53
|
-
clickable
|
|
54
|
-
@click="handleNext"
|
|
55
|
-
/>
|
|
56
|
-
</div>
|
|
57
|
-
</div>
|
|
58
|
-
</div>
|
|
59
|
-
</template>
|
|
60
|
-
|
|
61
|
-
<script>
|
|
62
|
-
import UnnnicTag from '../Tag/Tag.vue';
|
|
63
|
-
import UnnnicIcon from '../Icon.vue';
|
|
64
|
-
|
|
65
|
-
export default {
|
|
66
|
-
name: 'UnnnicTagCarousel',
|
|
67
|
-
components: {
|
|
68
|
-
UnnnicTag,
|
|
69
|
-
UnnnicIcon,
|
|
70
|
-
},
|
|
71
|
-
props: {
|
|
72
|
-
modelValue: {
|
|
73
|
-
type: Array,
|
|
74
|
-
default() {
|
|
75
|
-
return [];
|
|
76
|
-
},
|
|
77
|
-
},
|
|
78
|
-
tagItems: {
|
|
79
|
-
type: Array,
|
|
80
|
-
default: () => [],
|
|
81
|
-
},
|
|
82
|
-
},
|
|
83
|
-
data() {
|
|
84
|
-
return {
|
|
85
|
-
hasNext: true,
|
|
86
|
-
hasPrev: false,
|
|
87
|
-
slides: [],
|
|
88
|
-
};
|
|
89
|
-
},
|
|
90
|
-
mounted() {
|
|
91
|
-
this.slides = this.tagItems;
|
|
92
|
-
},
|
|
93
|
-
methods: {
|
|
94
|
-
handleNext() {
|
|
95
|
-
this.next();
|
|
96
|
-
},
|
|
97
|
-
handlePrevious() {
|
|
98
|
-
this.previous();
|
|
99
|
-
},
|
|
100
|
-
save(tagItem) {
|
|
101
|
-
let valueLocal = this.modelValue;
|
|
102
|
-
if (this.checkIsInclude(tagItem)) {
|
|
103
|
-
valueLocal = valueLocal.filter((id) => id !== tagItem.id);
|
|
104
|
-
} else {
|
|
105
|
-
valueLocal = [...valueLocal, tagItem.id];
|
|
106
|
-
}
|
|
107
|
-
this.$emit('selected', valueLocal);
|
|
108
|
-
},
|
|
109
|
-
checkIsInclude(tagItem) {
|
|
110
|
-
return this.modelValue.some((id) => id === tagItem.id);
|
|
111
|
-
},
|
|
112
|
-
next() {
|
|
113
|
-
const element = document.querySelector('#scroll');
|
|
114
|
-
const scrollCalc = element.scrollWidth - element.clientWidth;
|
|
115
|
-
element.scrollLeft += 200;
|
|
116
|
-
if (scrollCalc !== element.scrollLeft) {
|
|
117
|
-
if (!this.hasNext) {
|
|
118
|
-
this.hasNext = true;
|
|
119
|
-
}
|
|
120
|
-
this.hasPrev = true;
|
|
121
|
-
} else {
|
|
122
|
-
this.hasNext = false;
|
|
123
|
-
}
|
|
124
|
-
},
|
|
125
|
-
previous() {
|
|
126
|
-
const element = document.querySelector('#scroll');
|
|
127
|
-
element.scrollLeft -= 200;
|
|
128
|
-
if (element.scrollLeft !== 0) {
|
|
129
|
-
if (!this.hasPrev) {
|
|
130
|
-
this.hasPrev = true;
|
|
131
|
-
}
|
|
132
|
-
this.hasNext = true;
|
|
133
|
-
} else {
|
|
134
|
-
this.hasPrev = false;
|
|
135
|
-
}
|
|
136
|
-
},
|
|
137
|
-
},
|
|
138
|
-
};
|
|
139
|
-
</script>
|
|
140
|
-
|
|
141
|
-
<style lang="scss">
|
|
142
|
-
@use '@/assets/scss/unnnic' as *;
|
|
143
|
-
|
|
144
|
-
.unnnic-card-tag-carousel {
|
|
145
|
-
display: flex;
|
|
146
|
-
align-items: center;
|
|
147
|
-
position: relative;
|
|
148
|
-
|
|
149
|
-
&__container {
|
|
150
|
-
width: 100%;
|
|
151
|
-
display: flex;
|
|
152
|
-
overflow: hidden;
|
|
153
|
-
scroll-behavior: smooth;
|
|
154
|
-
|
|
155
|
-
&__slide {
|
|
156
|
-
&:first-of-type {
|
|
157
|
-
margin-left: $unnnic-inline-lg;
|
|
158
|
-
}
|
|
159
|
-
&:last-of-type {
|
|
160
|
-
margin-right: $unnnic-inline-awesome;
|
|
161
|
-
}
|
|
162
|
-
&__item {
|
|
163
|
-
margin-right: 2 * $unnnic-font-size;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
&__button {
|
|
169
|
-
z-index: 1;
|
|
170
|
-
position: absolute;
|
|
171
|
-
display: flex;
|
|
172
|
-
justify-content: center;
|
|
173
|
-
align-items: center;
|
|
174
|
-
|
|
175
|
-
&__icon {
|
|
176
|
-
height: $unnnic-inline-lg;
|
|
177
|
-
display: flex;
|
|
178
|
-
justify-content: center;
|
|
179
|
-
align-items: center;
|
|
180
|
-
background-color: $unnnic-color-bg-base;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
&__blur {
|
|
184
|
-
width: $unnnic-inline-giant;
|
|
185
|
-
height: $unnnic-inline-lg;
|
|
186
|
-
&--left {
|
|
187
|
-
background-image: linear-gradient(
|
|
188
|
-
to right,
|
|
189
|
-
$unnnic-color-bg-base,
|
|
190
|
-
rgba($unnnic-color-bg-base, $unnnic-opacity-level-overlay)
|
|
191
|
-
);
|
|
192
|
-
}
|
|
193
|
-
&--right {
|
|
194
|
-
background-image: linear-gradient(
|
|
195
|
-
to right,
|
|
196
|
-
rgba($unnnic-color-bg-base, $unnnic-opacity-level-overlay),
|
|
197
|
-
$unnnic-color-bg-base
|
|
198
|
-
);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
&--left {
|
|
202
|
-
left: 0;
|
|
203
|
-
}
|
|
204
|
-
&--right {
|
|
205
|
-
right: 0;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
</style>
|