@weni/unnnic-system 3.11.0 → 3.11.1-alpha.1
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/components/Alert/Alert.vue.d.ts +3 -3
- package/dist/components/Alert/Version1dot1.vue.d.ts +1 -1
- package/dist/components/AudioRecorder/AudioHandler.vue.d.ts +109 -18
- package/dist/components/AudioRecorder/AudioRecorder.vue.d.ts +218 -36
- package/dist/components/AvatarIcon/AvatarIcon.vue.d.ts +1 -1
- package/dist/components/Button/Button.vue.d.ts +2 -2
- package/dist/components/Card/AccountCard.vue.d.ts +2 -2
- package/dist/components/Card/Card.vue.d.ts +120 -29
- package/dist/components/Card/CardCompany.vue.d.ts +2 -2
- package/dist/components/Card/CardStatusesContainer.vue.d.ts +110 -19
- package/dist/components/Card/ContentCard.vue.d.ts +1 -1
- package/dist/components/Card/DashCard.vue.d.ts +2 -2
- package/dist/components/Card/DefaultCard.vue.d.ts +1 -1
- package/dist/components/Card/MarketplaceCard.vue.d.ts +1 -1
- package/dist/components/Card/SimpleCard.vue.d.ts +109 -18
- package/dist/components/Card/StatusCard.vue.d.ts +1 -1
- package/dist/components/Card/TitleCard.vue.d.ts +109 -18
- package/dist/components/CardImage/CardImage.vue.d.ts +5 -5
- package/dist/components/CardInformation/CardInformation.vue.d.ts +110 -19
- package/dist/components/CardProject/CardProject.vue.d.ts +2 -2
- package/dist/components/Carousel/Carousel.vue.d.ts +2 -2
- package/dist/components/Carousel/TagCarousel.vue.d.ts +2 -2
- package/dist/components/ChartBar/ChartBar.vue.d.ts +115 -24
- package/dist/components/ChartLine/ChartLine.vue.d.ts +109 -18
- package/dist/components/ChatText/ChatText.vue.d.ts +109 -18
- package/dist/components/ChatsContact/ChatsContact.vue.d.ts +6 -6
- package/dist/components/ChatsMessage/ChatsMessage.vue.d.ts +109 -18
- package/dist/components/ChatsUserAvatar/ChatsUserAvatar.vue.d.ts +1 -1
- package/dist/components/Checkbox/Checkbox.vue.d.ts +3 -3
- package/dist/components/DataArea/DataArea.vue.d.ts +109 -18
- package/dist/components/DataTable/index.vue.d.ts +1 -1
- package/dist/components/DataTable/index.vue.d.ts.map +1 -1
- package/dist/components/DateFilter/DateFilter.vue.d.ts +10 -10
- package/dist/components/DatePicker/DatePicker.vue.d.ts +6 -6
- package/dist/components/Drawer/Drawer.vue.d.ts +35 -207
- package/dist/components/Drawer/Drawer.vue.d.ts.map +1 -1
- package/dist/components/Dropdown/Dropdown.vue.d.ts +1 -1
- package/dist/components/FormElement/FormElement.vue.d.ts +4 -4
- package/dist/components/ImportCard/ImportCard.vue.d.ts +6 -6
- package/dist/components/Input/Input.vue.d.ts +9 -9
- package/dist/components/Input/TextInput.vue.d.ts +2 -2
- package/dist/components/InputDatePicker/InputDatePicker.vue.d.ts +15 -15
- package/dist/components/InputNext/InputNext.vue.d.ts +3 -3
- package/dist/components/Modal/Modal.vue.d.ts +1 -1
- package/dist/components/ModalDialog/ModalDialog.vue.d.ts +209 -35
- package/dist/components/ModalDialog/ModalDialog.vue.d.ts.map +1 -1
- package/dist/components/ModalNext/ModalNext.vue.d.ts +15 -15
- package/dist/components/ModalUpload/ModalUpload.vue.d.ts +12 -12
- package/dist/components/MoodRating/MoodRating.vue.d.ts +109 -18
- package/dist/components/MultiSelect/MultiSelect.vue.d.ts +18 -18
- package/dist/components/Pagination/Pagination.vue.d.ts +6 -6
- package/dist/components/Radio/Radio.vue.d.ts +6 -6
- package/dist/components/SelectSmart/SelectSmart.vue.d.ts +11 -11
- package/dist/components/SelectSmart/SelectSmartMultipleHeader.vue.d.ts +2 -2
- package/dist/components/SelectSmart/SelectSmartOption.vue.d.ts +5 -5
- package/dist/components/SelectTime/index.vue.d.ts +3 -3
- package/dist/components/Slider/Slider.vue.d.ts +109 -18
- package/dist/components/Switch/Switch.vue.d.ts +2 -2
- package/dist/components/Tab/Tab.vue.d.ts +109 -18
- package/dist/components/TableNext/TableBodyCell.vue.d.ts +2 -2
- package/dist/components/TableNext/TablePagination.vue.d.ts +6 -6
- package/dist/components/Tag/DefaultTag.vue.d.ts +1 -1
- package/dist/components/Tag/Tag.vue.d.ts +2 -2
- package/dist/components/TextArea/TextArea.vue.d.ts +5 -5
- package/dist/components/Toast/Toast.vue.d.ts +1 -1
- package/dist/components/ToolTip/ToolTip.vue.d.ts +109 -18
- package/dist/components/ToolTip/ToolTip.vue.d.ts.map +1 -1
- package/dist/components/Tour/Tour.vue.d.ts +6 -6
- package/dist/components/Tour/TourPopover.vue.d.ts +6 -6
- package/dist/components/UploadArea/UploadArea.vue.d.ts +6 -6
- package/dist/components/index.d.ts +5624 -1762
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/ui/dialog/Dialog.vue.d.ts +23 -0
- package/dist/components/ui/dialog/Dialog.vue.d.ts.map +1 -0
- package/dist/components/ui/dialog/DialogClose.vue.d.ts +19 -0
- package/dist/components/ui/dialog/DialogClose.vue.d.ts.map +1 -0
- package/dist/components/ui/dialog/DialogContent.vue.d.ts +43 -0
- package/dist/components/ui/dialog/DialogContent.vue.d.ts.map +1 -0
- package/dist/components/ui/dialog/DialogFooter.vue.d.ts +25 -0
- package/dist/components/ui/dialog/DialogFooter.vue.d.ts.map +1 -0
- package/dist/components/ui/dialog/DialogHeader.vue.d.ts +29 -0
- package/dist/components/ui/dialog/DialogHeader.vue.d.ts.map +1 -0
- package/dist/components/ui/dialog/DialogTitle.vue.d.ts +23 -0
- package/dist/components/ui/dialog/DialogTitle.vue.d.ts.map +1 -0
- package/dist/components/ui/dialog/DialogTrigger.vue.d.ts +19 -0
- package/dist/components/ui/dialog/DialogTrigger.vue.d.ts.map +1 -0
- package/dist/components/ui/dialog/index.d.ts +8 -0
- package/dist/components/ui/dialog/index.d.ts.map +1 -0
- package/dist/components/ui/drawer/Drawer.vue.d.ts +35 -0
- package/dist/components/ui/drawer/Drawer.vue.d.ts.map +1 -0
- package/dist/components/ui/drawer/DrawerClose.vue.d.ts +19 -0
- package/dist/components/ui/drawer/DrawerClose.vue.d.ts.map +1 -0
- package/dist/components/ui/drawer/DrawerContent.vue.d.ts +42 -0
- package/dist/components/ui/drawer/DrawerContent.vue.d.ts.map +1 -0
- package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +23 -0
- package/dist/components/ui/drawer/DrawerDescription.vue.d.ts.map +1 -0
- package/dist/components/ui/drawer/DrawerFooter.vue.d.ts +22 -0
- package/dist/components/ui/drawer/DrawerFooter.vue.d.ts.map +1 -0
- package/dist/components/ui/drawer/DrawerHeader.vue.d.ts +25 -0
- package/dist/components/ui/drawer/DrawerHeader.vue.d.ts.map +1 -0
- package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +8 -0
- package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts.map +1 -0
- package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +23 -0
- package/dist/components/ui/drawer/DrawerTitle.vue.d.ts.map +1 -0
- package/dist/components/ui/drawer/DrawerTrigger.vue.d.ts +19 -0
- package/dist/components/ui/drawer/DrawerTrigger.vue.d.ts.map +1 -0
- package/dist/components/ui/drawer/index.d.ts +11 -0
- package/dist/components/ui/drawer/index.d.ts.map +1 -0
- package/dist/components/ui/popover/PopoverContent.vue.d.ts +2 -2
- package/dist/components/ui/popover/PopoverContent.vue.d.ts.map +1 -1
- package/dist/components/ui/segmented-control/SegmentedControlList.vue.d.ts +26 -0
- package/dist/components/ui/segmented-control/SegmentedControlList.vue.d.ts.map +1 -0
- package/dist/components/ui/segmented-control/SegmentedControlTrigger.vue.d.ts +24 -0
- package/dist/components/ui/segmented-control/SegmentedControlTrigger.vue.d.ts.map +1 -0
- package/dist/components/ui/segmented-control/index.d.ts +5 -0
- package/dist/components/ui/segmented-control/index.d.ts.map +1 -0
- package/dist/components/ui/tabs/TabsTrigger.vue.d.ts.map +1 -1
- package/dist/components/ui/tooltip/Tooltip.vue.d.ts +23 -0
- package/dist/components/ui/tooltip/Tooltip.vue.d.ts.map +1 -0
- package/dist/components/ui/tooltip/TooltipContent.vue.d.ts +31 -0
- package/dist/components/ui/tooltip/TooltipContent.vue.d.ts.map +1 -0
- package/dist/components/ui/tooltip/TooltipProvider.vue.d.ts +19 -0
- package/dist/components/ui/tooltip/TooltipProvider.vue.d.ts.map +1 -0
- package/dist/components/ui/tooltip/TooltipTrigger.vue.d.ts +19 -0
- package/dist/components/ui/tooltip/TooltipTrigger.vue.d.ts.map +1 -0
- package/dist/components/ui/tooltip/index.d.ts +5 -0
- package/dist/components/ui/tooltip/index.d.ts.map +1 -0
- package/dist/{es-e3248052.mjs → es-1e5cce64.mjs} +1 -1
- package/dist/{index-f67d5b30.mjs → index-8d75623f.mjs} +99639 -96793
- package/dist/{pt-br-f6f53acd.mjs → pt-br-defd03da.mjs} +1 -1
- package/dist/style.css +1 -1
- package/dist/unnnic.mjs +232 -196
- package/dist/unnnic.umd.js +48 -44
- package/package.json +2 -1
- package/src/assets/scss/tailwind.scss +8 -0
- package/src/components/Drawer/Drawer.vue +174 -271
- package/src/components/Drawer/__tests__/Drawer.spec.js +32 -43
- package/src/components/Drawer/__tests__/__snapshots__/Drawer.spec.js.snap +18 -19
- package/src/components/ModalDialog/ModalDialog.vue +62 -148
- package/src/components/ModalDialog/__tests__/ModalDialog.spec.js +11 -221
- package/src/components/ModalDialog/__tests__/__snapshots__/ModalDialog.spec.js.snap +1 -22
- package/src/components/Tab/__test__/__snapshots__/Tab.spec.js.snap +3 -1
- package/src/components/ToolTip/ToolTip.vue +41 -188
- package/src/components/ToolTip/__tests__/ToolTip.spec.js +345 -61
- package/src/components/index.ts +86 -12
- package/src/components/ui/dialog/Dialog.vue +15 -0
- package/src/components/ui/dialog/DialogClose.vue +25 -0
- package/src/components/ui/dialog/DialogContent.vue +133 -0
- package/src/components/ui/dialog/DialogFooter.vue +46 -0
- package/src/components/ui/dialog/DialogHeader.vue +79 -0
- package/src/components/ui/dialog/DialogTitle.vue +34 -0
- package/src/components/ui/dialog/DialogTrigger.vue +12 -0
- package/src/components/ui/dialog/index.ts +7 -0
- package/src/components/ui/drawer/Drawer.vue +23 -0
- package/src/components/ui/drawer/DrawerClose.vue +33 -0
- package/src/components/ui/drawer/DrawerContent.vue +98 -0
- package/src/components/ui/drawer/DrawerDescription.vue +36 -0
- package/src/components/ui/drawer/DrawerFooter.vue +34 -0
- package/src/components/ui/drawer/DrawerHeader.vue +53 -0
- package/src/components/ui/drawer/DrawerOverlay.vue +30 -0
- package/src/components/ui/drawer/DrawerTitle.vue +33 -0
- package/src/components/ui/drawer/DrawerTrigger.vue +27 -0
- package/src/components/ui/drawer/index.ts +10 -0
- package/src/components/ui/segmented-control/SegmentedControlList.vue +51 -0
- package/src/components/ui/segmented-control/SegmentedControlTrigger.vue +81 -0
- package/src/components/ui/segmented-control/index.ts +4 -0
- package/src/components/ui/tabs/TabsTrigger.vue +4 -20
- package/src/components/ui/tooltip/Tooltip.vue +15 -0
- package/src/components/ui/tooltip/TooltipContent.vue +73 -0
- package/src/components/ui/tooltip/TooltipProvider.vue +15 -0
- package/src/components/ui/tooltip/TooltipTrigger.vue +22 -0
- package/src/components/ui/tooltip/index.ts +4 -0
- package/src/stories/Dialog.stories.js +832 -0
- package/src/stories/Drawer.stories.js +1 -1
- package/src/stories/DrawerNext.stories.js +610 -0
- package/src/stories/ModalDialog.mdx +3 -0
- package/src/stories/ModalDialog.stories.js +1 -1
- package/src/stories/SegmentedControl.stories.js +253 -0
- package/src/stories/Tabs.stories.js +1 -1
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
2
|
|
|
3
3
|
exports[`Drawer.vue > Component Rendering > Component Rendering > matches the snapshot 1`] = `
|
|
4
|
-
"<
|
|
5
|
-
<
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
<
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
</aside>"
|
|
4
|
+
"<div data-v-196de012="" open="true" class="unnnic-drawer" data-testid="drawer">
|
|
5
|
+
<div data-v-196de012="" showoverlay="true" data-testid="drawer-container" size="medium" class="unnnic-drawer__container unnnic-drawer__container--md">
|
|
6
|
+
<header data-v-39d0dfb8="" data-v-196de012="" class="unnnic-drawer__header unnnic-drawer__header">
|
|
7
|
+
<section data-v-196de012="" class="unnnic-drawer__title-container">
|
|
8
|
+
<div data-v-196de012="" class="unnnic-drawer__title" data-testid="drawer-title">Test Title</div>
|
|
9
|
+
<div data-v-196de012="" class="unnnic-drawer__description" data-testid="drawer-description">Test Description</div>
|
|
10
|
+
</section>
|
|
11
|
+
<div data-v-196de012="">
|
|
12
|
+
<unnnic-button-stub data-v-196de012="" size="small" text="" type="tertiary" float="false" iconleft="" iconright="" iconcenter="arrow_forward" iconsfilled="false" disabled="false" loading="false" class="unnnic-drawer__close-icon" data-testid="close-icon"></unnnic-button-stub>
|
|
13
|
+
</div>
|
|
14
|
+
</header>
|
|
15
|
+
<section data-v-196de012="" class="unnnic-drawer__content"></section>
|
|
16
|
+
<div data-v-196de012="" class="unnnic-drawer__footer" data-testid="footer">
|
|
17
|
+
<unnnic-button-stub data-v-196de012="" size="large" text="Secondary Action" type="tertiary" float="false" iconleft="" iconright="" iconcenter="" iconsfilled="false" disabled="false" loading="false" data-testid="secondary-button"></unnnic-button-stub>
|
|
18
|
+
<unnnic-button-stub data-v-196de012="" size="large" text="Primary Action" type="primary" float="false" iconleft="" iconright="" iconcenter="" iconsfilled="false" disabled="false" loading="false" data-testid="primary-button"></unnnic-button-stub>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
</div>"
|
|
23
22
|
`;
|
|
@@ -1,64 +1,46 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
data-testid="modal-dialog"
|
|
2
|
+
<UnnnicDialog
|
|
3
|
+
:open="modelValue"
|
|
4
|
+
@update:open="$emit('update:modelValue', $event)"
|
|
6
5
|
>
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
'unnnic-modal-dialog__container',
|
|
15
|
-
`unnnic-modal-dialog__container--${size}`,
|
|
16
|
-
]"
|
|
17
|
-
data-testid="modal-container"
|
|
6
|
+
<UnnnicDialogContent
|
|
7
|
+
:size="size === 'sm' ? 'small' : size === 'lg' ? 'large' : 'medium'"
|
|
8
|
+
:parentClass="['unnnic-modal-dialog', $attrs.class]"
|
|
9
|
+
class="unnnic-modal-dialog__container"
|
|
10
|
+
data-testid="modal-dialog"
|
|
11
|
+
@escape-key-down="persistentHandler"
|
|
12
|
+
@pointer-down-outside="persistentHandler"
|
|
18
13
|
>
|
|
19
14
|
<section
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
:class="[
|
|
16
|
+
'unnnic-modal-dialog__container__body',
|
|
17
|
+
{
|
|
18
|
+
'unnnic-modal-dialog__container__body--left-sidebar':
|
|
19
|
+
$slots.leftSidebar,
|
|
20
|
+
},
|
|
21
|
+
]"
|
|
22
22
|
>
|
|
23
|
-
<
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
<section
|
|
24
|
+
v-if="$slots.leftSidebar"
|
|
25
|
+
class="unnnic-modal-dialog__container__left-sidebar"
|
|
26
|
+
>
|
|
27
|
+
<slot name="leftSidebar" />
|
|
28
|
+
</section>
|
|
29
|
+
<UnnnicDialogHeader
|
|
28
30
|
v-if="title"
|
|
29
|
-
|
|
31
|
+
:closeButton="showCloseIcon"
|
|
32
|
+
:type="type"
|
|
30
33
|
>
|
|
31
|
-
<
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
class="unnnic-modal-dialog__container__title-icon"
|
|
36
|
-
:icon="icon || iconsMapper[type]?.icon"
|
|
37
|
-
:scheme="iconScheme || iconsMapper[type]?.scheme"
|
|
38
|
-
size="md"
|
|
39
|
-
/>
|
|
40
|
-
<h1
|
|
41
|
-
class="unnnic-modal-dialog__container__title-text"
|
|
42
|
-
data-testid="title-text"
|
|
43
|
-
>
|
|
44
|
-
{{ title }}
|
|
45
|
-
</h1>
|
|
46
|
-
</section>
|
|
47
|
-
<UnnnicIcon
|
|
48
|
-
v-if="showCloseIcon"
|
|
49
|
-
data-testid="close-icon"
|
|
50
|
-
icon="close"
|
|
51
|
-
clickable
|
|
52
|
-
scheme="neutral-cloudy"
|
|
53
|
-
@click="close()"
|
|
54
|
-
/>
|
|
55
|
-
</header>
|
|
34
|
+
<UnnnicDialogTitle>
|
|
35
|
+
{{ title }}
|
|
36
|
+
</UnnnicDialogTitle>
|
|
37
|
+
</UnnnicDialogHeader>
|
|
56
38
|
<section class="unnnic-modal-dialog__container__content">
|
|
57
39
|
<slot></slot>
|
|
58
40
|
</section>
|
|
59
|
-
|
|
41
|
+
|
|
42
|
+
<UnnnicDialogFooter
|
|
60
43
|
v-if="primaryButtonProps.text"
|
|
61
|
-
data-testid="actions-section"
|
|
62
44
|
:class="[
|
|
63
45
|
'unnnic-modal-dialog__container__actions',
|
|
64
46
|
{
|
|
@@ -66,6 +48,8 @@
|
|
|
66
48
|
showActionsDivider,
|
|
67
49
|
},
|
|
68
50
|
]"
|
|
51
|
+
:divider="showActionsDivider"
|
|
52
|
+
data-testid="actions-section"
|
|
69
53
|
>
|
|
70
54
|
<UnnnicButton
|
|
71
55
|
v-if="!hideSecondaryButton"
|
|
@@ -92,22 +76,30 @@
|
|
|
92
76
|
class="unnnic-modal-dialog__container__actions__primary-button"
|
|
93
77
|
@click.stop="$emit('primaryButtonClick')"
|
|
94
78
|
/>
|
|
95
|
-
</
|
|
79
|
+
</UnnnicDialogFooter>
|
|
96
80
|
</section>
|
|
97
|
-
</
|
|
98
|
-
</
|
|
81
|
+
</UnnnicDialogContent>
|
|
82
|
+
</UnnnicDialog>
|
|
99
83
|
</template>
|
|
100
84
|
|
|
101
85
|
<script>
|
|
102
|
-
import UnnnicIcon from '../Icon.vue';
|
|
103
86
|
import UnnnicButton from '../Button/Button.vue';
|
|
104
87
|
import UnnnicI18n from '../../mixins/i18n';
|
|
88
|
+
import UnnnicDialog from '../ui/dialog/Dialog.vue';
|
|
89
|
+
import UnnnicDialogContent from '../ui/dialog/DialogContent.vue';
|
|
90
|
+
import UnnnicDialogHeader from '../ui/dialog/DialogHeader.vue';
|
|
91
|
+
import UnnnicDialogTitle from '../ui/dialog/DialogTitle.vue';
|
|
92
|
+
import UnnnicDialogFooter from '../ui/dialog/DialogFooter.vue';
|
|
105
93
|
|
|
106
94
|
export default {
|
|
107
95
|
name: 'UnnnicModalDialog',
|
|
108
96
|
components: {
|
|
109
|
-
UnnnicIcon,
|
|
110
97
|
UnnnicButton,
|
|
98
|
+
UnnnicDialog,
|
|
99
|
+
UnnnicDialogContent,
|
|
100
|
+
UnnnicDialogHeader,
|
|
101
|
+
UnnnicDialogTitle,
|
|
102
|
+
UnnnicDialogFooter,
|
|
111
103
|
},
|
|
112
104
|
mixins: [UnnnicI18n],
|
|
113
105
|
props: {
|
|
@@ -177,11 +169,6 @@ export default {
|
|
|
177
169
|
es: 'Cancelar',
|
|
178
170
|
},
|
|
179
171
|
},
|
|
180
|
-
iconsMapper: {
|
|
181
|
-
success: { icon: 'check_circle', scheme: 'aux-green-500' },
|
|
182
|
-
warning: { icon: 'warning', scheme: 'aux-red-500' },
|
|
183
|
-
attention: { icon: 'error', scheme: 'aux-yellow-500' },
|
|
184
|
-
},
|
|
185
172
|
primaryButtonTypeMapper: {
|
|
186
173
|
success: 'primary',
|
|
187
174
|
warning: 'warning',
|
|
@@ -201,91 +188,39 @@ export default {
|
|
|
201
188
|
updateBodyOverflow(isHidden) {
|
|
202
189
|
document.body.style.overflow = isHidden ? 'hidden' : '';
|
|
203
190
|
},
|
|
191
|
+
persistentHandler(event) {
|
|
192
|
+
if (this.persistent) {
|
|
193
|
+
event.preventDefault();
|
|
194
|
+
}
|
|
195
|
+
},
|
|
204
196
|
},
|
|
205
197
|
};
|
|
206
198
|
</script>
|
|
207
199
|
|
|
208
200
|
<style lang="scss" scoped>
|
|
209
201
|
@use '@/assets/scss/unnnic' as *;
|
|
210
|
-
* {
|
|
211
|
-
margin: 0;
|
|
212
|
-
padding: 0;
|
|
213
|
-
box-sizing: border-box;
|
|
214
|
-
}
|
|
215
|
-
.unnnic-modal-dialog {
|
|
216
|
-
width: 100vw;
|
|
217
|
-
height: 100vh;
|
|
218
|
-
position: fixed;
|
|
219
|
-
left: 0;
|
|
220
|
-
top: 0;
|
|
221
|
-
display: flex;
|
|
222
|
-
justify-content: center;
|
|
223
|
-
align-items: center;
|
|
224
|
-
z-index: 9999;
|
|
225
|
-
|
|
226
|
-
&__overlay {
|
|
227
|
-
position: absolute;
|
|
228
|
-
width: 100%;
|
|
229
|
-
height: 100%;
|
|
230
|
-
background-color: rgba(0, 0, 0, 0.4);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
202
|
.unnnic-modal-dialog__container {
|
|
235
|
-
display: flex;
|
|
236
|
-
background: $unnnic-color-neutral-white;
|
|
237
|
-
border-radius: $unnnic-spacing-xs;
|
|
238
|
-
box-shadow: $unnnic-shadow-level-near;
|
|
239
|
-
position: fixed;
|
|
240
|
-
max-height: calc(100vh - $unnnic-spacing-giant);
|
|
241
|
-
overflow: hidden;
|
|
242
|
-
|
|
243
|
-
&--sm {
|
|
244
|
-
width: 400px;
|
|
245
|
-
}
|
|
246
|
-
&--md {
|
|
247
|
-
width: 600px;
|
|
248
|
-
}
|
|
249
|
-
&--lg {
|
|
250
|
-
width: 800px;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
203
|
&__left-sidebar {
|
|
254
204
|
background-color: $unnnic-color-neutral-black;
|
|
255
205
|
color: $unnnic-color-neutral-white;
|
|
206
|
+
|
|
207
|
+
grid-area: left-sidebar;
|
|
208
|
+
grid-row: span 3;
|
|
256
209
|
}
|
|
257
210
|
|
|
258
211
|
&__body {
|
|
259
212
|
flex: 1;
|
|
260
213
|
display: flex;
|
|
261
214
|
flex-direction: column;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
&__header {
|
|
265
|
-
display: flex;
|
|
266
|
-
justify-content: space-between;
|
|
267
|
-
align-items: center;
|
|
268
|
-
border-bottom: 1px solid $unnnic-color-neutral-soft;
|
|
269
|
-
padding: $unnnic-spacing-md;
|
|
270
|
-
flex-shrink: 0;
|
|
271
|
-
}
|
|
272
215
|
|
|
273
|
-
|
|
274
|
-
display: flex;
|
|
275
|
-
align-items: center;
|
|
276
|
-
gap: $unnnic-spacing-ant;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
&__title-icon {
|
|
280
|
-
font-size: 28px;
|
|
281
|
-
}
|
|
216
|
+
overflow-y: auto;
|
|
282
217
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
218
|
+
&--left-sidebar {
|
|
219
|
+
border-radius: $unnnic-radius-4 0 0 $unnnic-radius-4;
|
|
220
|
+
display: grid;
|
|
221
|
+
grid-template-columns: auto 1fr;
|
|
222
|
+
grid-template-areas: 'left-sidebar content';
|
|
223
|
+
}
|
|
289
224
|
}
|
|
290
225
|
|
|
291
226
|
&__content {
|
|
@@ -309,26 +244,5 @@ export default {
|
|
|
309
244
|
border-radius: $unnnic-border-radius-pill;
|
|
310
245
|
}
|
|
311
246
|
}
|
|
312
|
-
|
|
313
|
-
&__actions {
|
|
314
|
-
display: grid;
|
|
315
|
-
grid-template-columns: 1fr 1fr;
|
|
316
|
-
grid-template-areas: 'secondary-button primary-button';
|
|
317
|
-
gap: $unnnic-spacing-sm;
|
|
318
|
-
padding: $unnnic-spacing-md;
|
|
319
|
-
flex-shrink: 0;
|
|
320
|
-
|
|
321
|
-
&--divider {
|
|
322
|
-
border-top: 1px solid $unnnic-color-neutral-soft;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
&__secondary-button {
|
|
326
|
-
grid-area: secondary-button;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
&__primary-button {
|
|
330
|
-
grid-area: primary-button;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
247
|
}
|
|
334
248
|
</style>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { mount } from '@vue/test-utils';
|
|
2
|
-
import { describe, it
|
|
2
|
+
import { describe, it } from 'vitest';
|
|
3
3
|
import ModalDialog from '../ModalDialog.vue';
|
|
4
4
|
|
|
5
5
|
describe('ModalDialog.vue', () => {
|
|
@@ -16,7 +16,12 @@ describe('ModalDialog.vue', () => {
|
|
|
16
16
|
'onUpdate:modelValue': (e) => wrapper.setProps({ modelValue: e }),
|
|
17
17
|
},
|
|
18
18
|
global: {
|
|
19
|
-
stubs: [
|
|
19
|
+
stubs: [
|
|
20
|
+
'teleport',
|
|
21
|
+
'UnnnicIcon',
|
|
22
|
+
'UnnnicButton',
|
|
23
|
+
'UnnnicDialogContent',
|
|
24
|
+
],
|
|
20
25
|
},
|
|
21
26
|
});
|
|
22
27
|
});
|
|
@@ -26,231 +31,16 @@ describe('ModalDialog.vue', () => {
|
|
|
26
31
|
expect(wrapper.html()).toMatchSnapshot();
|
|
27
32
|
});
|
|
28
33
|
|
|
29
|
-
it('should render correctly when modelValue is true', () => {
|
|
30
|
-
const modal = wrapper.find('[data-testid="modal-dialog"]');
|
|
31
|
-
expect(modal.exists()).toBe(true);
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
it('should not render when modelValue is false', async () => {
|
|
35
|
-
await wrapper.setProps({ modelValue: false });
|
|
36
|
-
|
|
37
|
-
const modal = wrapper.find('[data-testid="modal-dialog"]');
|
|
38
|
-
expect(modal.exists()).toBe(false);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
34
|
it('should apply the correct size class based on the size prop', async () => {
|
|
42
|
-
const modalContainer = wrapper.find('[data-testid="modal-
|
|
43
|
-
const defaultClass = 'unnnic-modal-dialog__container';
|
|
35
|
+
const modalContainer = wrapper.find('[data-testid="modal-dialog"]');
|
|
44
36
|
|
|
45
|
-
expect(modalContainer.
|
|
37
|
+
expect(modalContainer.attributes('size')).toContain('medium');
|
|
46
38
|
|
|
47
39
|
await wrapper.setProps({ size: 'lg' });
|
|
48
|
-
expect(modalContainer.
|
|
40
|
+
expect(modalContainer.attributes('size')).toContain('large');
|
|
49
41
|
|
|
50
42
|
await wrapper.setProps({ size: 'sm' });
|
|
51
|
-
expect(modalContainer.
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
it('should render the icon and title when provided', () => {
|
|
55
|
-
const title = wrapper.find('[data-testid="title-text"]');
|
|
56
|
-
expect(title.exists()).toBe(true);
|
|
57
|
-
expect(title.text()).toBe('Test Title');
|
|
58
|
-
|
|
59
|
-
const icon = wrapper.findComponent('[data-testid="title-icon"]');
|
|
60
|
-
expect(icon.exists()).toBe(true);
|
|
61
|
-
expect(icon.props('icon')).toBe('test-icon');
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
it('should render the icon from iconsMapper when type prop is provided', async () => {
|
|
65
|
-
await wrapper.setProps({
|
|
66
|
-
type: 'success',
|
|
67
|
-
icon: '',
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
const icon = wrapper.findComponent('[data-testid="title-icon"]');
|
|
71
|
-
expect(icon.exists()).toBe(true);
|
|
72
|
-
expect(icon.props().icon).toBe(wrapper.vm.iconsMapper['success'].icon);
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
it('should not render the icon when both icon and type props are not provided', async () => {
|
|
76
|
-
await wrapper.setProps({
|
|
77
|
-
icon: '',
|
|
78
|
-
type: '',
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
const icon = wrapper.find('[data-testid="title-icon"]');
|
|
82
|
-
expect(icon.exists()).toBe(false);
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
it('should render the close icon when showCloseIcon is true', () => {
|
|
86
|
-
const closeIcon = wrapper.find('[data-testid="close-icon"]');
|
|
87
|
-
expect(closeIcon.exists()).toBe(true);
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
it('should not render buttons when primaryButtonProps is not provided', async () => {
|
|
91
|
-
await wrapper.setProps({ primaryButtonProps: undefined });
|
|
92
|
-
|
|
93
|
-
const primaryButton = wrapper.find('[data-testid="primary-button"]');
|
|
94
|
-
const secondaryButton = wrapper.find('[data-testid="secondary-button"]');
|
|
95
|
-
expect(primaryButton.exists()).toBe(false);
|
|
96
|
-
expect(secondaryButton.exists()).toBe(false);
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
describe('Overlay behavior', () => {
|
|
101
|
-
it('should close the modal when clicking on the overlay if persistent is false', async () => {
|
|
102
|
-
expect(wrapper.props().modelValue).toBe(true);
|
|
103
|
-
|
|
104
|
-
const overlay = wrapper.find('[data-testid="modal-overlay"]');
|
|
105
|
-
await overlay.trigger('click');
|
|
106
|
-
|
|
107
|
-
expect(wrapper.emitted('update:modelValue')).toBeTruthy();
|
|
108
|
-
expect(wrapper.emitted('update:modelValue')[0]).toEqual([false]);
|
|
109
|
-
expect(wrapper.props().modelValue).toBe(false);
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
it('should not close the modal when clicking on the overlay if persistent is true', async () => {
|
|
113
|
-
await wrapper.setProps({ persistent: true });
|
|
114
|
-
|
|
115
|
-
const overlay = wrapper.find('[data-testid="modal-overlay"]');
|
|
116
|
-
await overlay.trigger('click');
|
|
117
|
-
|
|
118
|
-
expect(wrapper.emitted('update:modelValue')).toBeFalsy();
|
|
119
|
-
expect(wrapper.props().modelValue).toBe(true);
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
describe('Slot rendering', () => {
|
|
124
|
-
it('should render leftSidebar slot when provided', () => {
|
|
125
|
-
const wrapper = mount(ModalDialog, {
|
|
126
|
-
props: {
|
|
127
|
-
modelValue: true,
|
|
128
|
-
},
|
|
129
|
-
slots: {
|
|
130
|
-
leftSidebar:
|
|
131
|
-
'<div data-testid="left-sidebar">Left Sidebar Content</div>',
|
|
132
|
-
},
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
const leftSidebar = wrapper.find('[data-testid="left-sidebar"]');
|
|
136
|
-
expect(leftSidebar.exists()).toBe(true);
|
|
137
|
-
expect(leftSidebar.text()).toBe('Left Sidebar Content');
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
it('should render default slot content', () => {
|
|
141
|
-
const wrapper = mount(ModalDialog, {
|
|
142
|
-
props: {
|
|
143
|
-
modelValue: true,
|
|
144
|
-
},
|
|
145
|
-
slots: {
|
|
146
|
-
default: '<div data-testid="default-slot">Default Slot Content</div>',
|
|
147
|
-
},
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
const defaultSlot = wrapper.find('[data-testid="default-slot"]');
|
|
151
|
-
expect(defaultSlot.exists()).toBe(true);
|
|
152
|
-
expect(defaultSlot.text()).toBe('Default Slot Content');
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
describe('Buttons actions', () => {
|
|
157
|
-
it('should close the modal when clicking on close icon', async () => {
|
|
158
|
-
const closeIcon = wrapper.find('[data-testid="close-icon"]');
|
|
159
|
-
await closeIcon.trigger('click');
|
|
160
|
-
|
|
161
|
-
expect(wrapper.emitted('update:modelValue')).toBeTruthy();
|
|
162
|
-
expect(wrapper.emitted('update:modelValue')[0]).toEqual([false]);
|
|
163
|
-
expect(wrapper.props().modelValue).toBe(false);
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
it('should emit primaryButtonClick event when the primary button is clicked', async () => {
|
|
167
|
-
const primaryButton = wrapper.find('[data-testid="primary-button"]');
|
|
168
|
-
await primaryButton.trigger('click');
|
|
169
|
-
|
|
170
|
-
expect(wrapper.emitted('primaryButtonClick')).toBeTruthy();
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
it('should emit secondaryButtonClick event when the secondary button is clicked', async () => {
|
|
174
|
-
await wrapper.setProps({
|
|
175
|
-
secondaryButtonProps: { text: 'Cancel' },
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
const secondaryButton = wrapper.find('[data-testid="secondary-button"]');
|
|
179
|
-
await secondaryButton.trigger('click');
|
|
180
|
-
|
|
181
|
-
expect(wrapper.emitted('secondaryButtonClick')).toBeTruthy();
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
it('should close the modal when the secondary button is clicked and no secondaryButtonClick event is provided', async () => {
|
|
185
|
-
const secondaryButton = wrapper.find('[data-testid="secondary-button"]');
|
|
186
|
-
await secondaryButton.trigger('click');
|
|
187
|
-
|
|
188
|
-
const emittedValue = wrapper.emitted('update:modelValue');
|
|
189
|
-
|
|
190
|
-
expect(emittedValue).toBeTruthy();
|
|
191
|
-
expect(emittedValue[0][0]).toEqual(false);
|
|
192
|
-
});
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
describe('Actions and appearance', () => {
|
|
196
|
-
it('should not render the secondary button when hideSecondaryButton is true', async () => {
|
|
197
|
-
await wrapper.setProps({
|
|
198
|
-
hideSecondaryButton: true,
|
|
199
|
-
});
|
|
200
|
-
const secondaryButton = wrapper.find('[data-testid="secondary-button"]');
|
|
201
|
-
expect(secondaryButton.exists()).toBe(false);
|
|
202
|
-
});
|
|
203
|
-
|
|
204
|
-
it('should apply a divider class to the actions section when showActionsDivider is true', async () => {
|
|
205
|
-
await wrapper.setProps({
|
|
206
|
-
showActionsDivider: true,
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
const actionsSection = wrapper.find('[data-testid="actions-section"]');
|
|
210
|
-
expect(actionsSection.classes()).toContain(
|
|
211
|
-
'unnnic-modal-dialog__container__actions--divider',
|
|
212
|
-
);
|
|
213
|
-
});
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
describe('Body overflow', () => {
|
|
217
|
-
it('should toggle body overflow based on modal visibility', async () => {
|
|
218
|
-
await wrapper.setProps({ modelValue: false });
|
|
219
|
-
const updateBodyOverflowSpy = vi.spyOn(wrapper.vm, 'updateBodyOverflow');
|
|
220
|
-
|
|
221
|
-
await wrapper.setProps({ modelValue: true });
|
|
222
|
-
expect(updateBodyOverflowSpy).toHaveBeenCalledWith(true);
|
|
223
|
-
|
|
224
|
-
await wrapper.setProps({ modelValue: false });
|
|
225
|
-
expect(updateBodyOverflowSpy).toHaveBeenCalledWith(false);
|
|
226
|
-
});
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
describe('Validators', () => {
|
|
230
|
-
describe('type prop validator', () => {
|
|
231
|
-
it('should validate type prop when a valid value is provided', () => {
|
|
232
|
-
const validTypes = ['success', 'warning', 'attention'];
|
|
233
|
-
validTypes.forEach((validType) => {
|
|
234
|
-
expect(ModalDialog.props.type.validate(validType)).toBe(true);
|
|
235
|
-
});
|
|
236
|
-
});
|
|
237
|
-
|
|
238
|
-
it('should invalidate type prop when an invalid value is provided', () => {
|
|
239
|
-
expect(ModalDialog.props.type.validate('invalidType')).toBe(false);
|
|
240
|
-
});
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
describe('size prop validator', () => {
|
|
244
|
-
it('should validate size prop when a valid value is provided', () => {
|
|
245
|
-
const validSizes = ['sm', 'md', 'lg'];
|
|
246
|
-
validSizes.forEach((validSize) => {
|
|
247
|
-
expect(ModalDialog.props.size.validate(validSize)).toBe(true);
|
|
248
|
-
});
|
|
249
|
-
});
|
|
250
|
-
|
|
251
|
-
it('should invalidate size prop when an invalid value is provided', () => {
|
|
252
|
-
expect(ModalDialog.props.size.validate('invalidSize')).toBe(false);
|
|
253
|
-
});
|
|
43
|
+
expect(modalContainer.attributes('size')).toContain('small');
|
|
254
44
|
});
|
|
255
45
|
});
|
|
256
46
|
});
|
|
@@ -1,24 +1,3 @@
|
|
|
1
1
|
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
2
|
|
|
3
|
-
exports[`ModalDialog.vue > Elements rendering > matches the snapshot 1`] = `
|
|
4
|
-
"<section data-v-68ebadeb="" class="unnnic-modal-dialog" data-testid="modal-dialog">
|
|
5
|
-
<section data-v-68ebadeb="" class="unnnic-modal-dialog__overlay" data-testid="modal-overlay"></section>
|
|
6
|
-
<section data-v-68ebadeb="" class="unnnic-modal-dialog__container unnnic-modal-dialog__container--md" data-testid="modal-container">
|
|
7
|
-
<!--v-if-->
|
|
8
|
-
<section data-v-68ebadeb="" class="unnnic-modal-dialog__container__body">
|
|
9
|
-
<header data-v-68ebadeb="" class="unnnic-modal-dialog__container__header">
|
|
10
|
-
<section data-v-68ebadeb="" class="unnnic-modal-dialog__container__title-container">
|
|
11
|
-
<unnnic-icon-stub data-v-68ebadeb="" filled="false" icon="test-icon" clickable="false" size="md" scheme="neutral-darkest" data-testid="title-icon" class="unnnic-modal-dialog__container__title-icon"></unnnic-icon-stub>
|
|
12
|
-
<h1 data-v-68ebadeb="" class="unnnic-modal-dialog__container__title-text" data-testid="title-text">Test Title</h1>
|
|
13
|
-
</section>
|
|
14
|
-
<unnnic-icon-stub data-v-68ebadeb="" filled="false" icon="close" clickable="true" size="md" scheme="neutral-cloudy" data-testid="close-icon"></unnnic-icon-stub>
|
|
15
|
-
</header>
|
|
16
|
-
<section data-v-68ebadeb="" class="unnnic-modal-dialog__container__content"></section>
|
|
17
|
-
<section data-v-68ebadeb="" data-testid="actions-section" class="unnnic-modal-dialog__container__actions">
|
|
18
|
-
<unnnic-button-stub data-v-68ebadeb="" size="large" text="Cancel" type="tertiary" float="false" iconleft="" iconright="" iconcenter="" iconsfilled="false" disabled="false" loading="false" data-testid="secondary-button" class="unnnic-modal-dialog__container__actions__secondary-button"></unnnic-button-stub>
|
|
19
|
-
<unnnic-button-stub data-v-68ebadeb="" size="large" text="Confirm" type="primary" float="false" iconleft="" iconright="" iconcenter="" iconsfilled="false" disabled="false" loading="false" data-testid="primary-button" class="unnnic-modal-dialog__container__actions__primary-button"></unnnic-button-stub>
|
|
20
|
-
</section>
|
|
21
|
-
</section>
|
|
22
|
-
</section>
|
|
23
|
-
</section>"
|
|
24
|
-
`;
|
|
3
|
+
exports[`ModalDialog.vue > Elements rendering > matches the snapshot 1`] = `"<unnnic-dialog-content-stub data-v-68ebadeb="" forcemount="false" disableoutsidepointerevents="false" aschild="false" parentclass="unnnic-modal-dialog," class="unnnic-modal-dialog__container" size="medium" data-testid="modal-dialog"></unnnic-dialog-content-stub>"`;
|
|
@@ -4,7 +4,9 @@ exports[`Tab.vue > matches the snapshot 1`] = `
|
|
|
4
4
|
"<div data-v-b4e39fac="" class="tab size-md">
|
|
5
5
|
<header data-v-b4e39fac="" class="tab-header">
|
|
6
6
|
<ul data-v-b4e39fac="" class="tab-content">
|
|
7
|
-
<li data-v-b4e39fac="" class="tab-head">tab1<div data-v-
|
|
7
|
+
<li data-v-b4e39fac="" class="tab-head">tab1<div data-v-b3d24f2b="" class="unnnic-tooltip-trigger" data-testid="tooltip-trigger" data-state="closed" data-grace-area-trigger=""><span data-v-26446d8e="" data-v-b4e39fac="" class="material-symbols-rounded unnnic-icon-scheme--neutral-cleanest unnnic-icon-size--sm material-symbols-rounded--filled" data-testid="material-icon" translate="no">info</span></div>
|
|
8
|
+
<!--teleport start-->
|
|
9
|
+
<!--teleport end-->
|
|
8
10
|
</li>
|
|
9
11
|
<li data-v-b4e39fac="" class="tab-head tab-head--active">tab2
|
|
10
12
|
<!--v-if-->
|